PageRenderTime 47ms CodeModel.GetById 18ms RepoModel.GetById 1ms app.codeStats 0ms

/app/Resources/assets/js/main.js

https://gitlab.com/aredhel-bazaar/la-taverne-du-hasard
JavaScript | 309 lines | 242 code | 57 blank | 10 comment | 12 complexity | e78da21fbdbcd0fc6080bcaeaaeb8ee4 MD5 | raw file
  1. (function() {
  2. "use strict";
  3. /**
  4. * Global variables
  5. */
  6. var apc_openListFilters_container;
  7. var mainSection_container;
  8. var userSearchTimeout;
  9. var lastUserValue;
  10. /**
  11. * JQuery Extends
  12. */
  13. $.fn.extend({
  14. addSidePanel: function( content ) {
  15. var target = $(this);
  16. var num_panel = target.data('panel');
  17. if( num_panel === undefined ) {
  18. num_panel = 1;
  19. }
  20. var div = $('<div/>', {
  21. class: 'hidden side-panel js-side-panel'
  22. }).data('panel', num_panel);
  23. div.append($('#js-newPanel-prototype').html());
  24. div.append(content);
  25. target.after(div);
  26. div.transition('slide right');
  27. target.transition('slide right');
  28. return div;
  29. },
  30. goPanelBack: function() {
  31. var target = $(this).closest('.js-side-panel');
  32. var num_panel = target.data('panel');
  33. var div;
  34. if( target.length ) {
  35. target.transition('slide left');
  36. if( num_panel > 1 ) {
  37. div = target.siblings('.js-side-panel[data-panel='+(num_panel-1)+']');
  38. } else {
  39. div = $('.js-main-section');
  40. }
  41. div.transition('slide right');
  42. target.remove();
  43. }
  44. return div;
  45. },
  46. refresh: function() {
  47. var target = $(this);
  48. target.dimmer('show');
  49. $.ajax({
  50. url: target.data('href'),
  51. type: 'GET'
  52. })
  53. .done(function(response) {
  54. target.html(response);
  55. })
  56. .always(function() {
  57. target.dimmer('hide');
  58. })
  59. ;
  60. }
  61. });
  62. $.extend({
  63. initSemanticComponents: function () {
  64. $('.ui.sticky')
  65. .sticky({
  66. offset: "10px",
  67. bottomOffset: "10px"
  68. })
  69. ;
  70. $('.message .close')
  71. .on('click', function() {
  72. $(this)
  73. .closest('.message')
  74. .slideUp(300)
  75. ;
  76. })
  77. ;
  78. $('.tabular.menu .item')
  79. .tab()
  80. ;
  81. $('.js-popup').popup({
  82. position: 'top center'
  83. });
  84. $('.ui.radio.checkbox')
  85. .checkbox()
  86. ;
  87. $('.ui.progress')
  88. .progress()
  89. ;
  90. }
  91. });
  92. apc_openListFilters_container = $('.js-openEventList-filters');
  93. mainSection_container = $('.js-main-section');
  94. //-- Initialisation de Toastr
  95. toastr.options = {
  96. "closeButton": false,
  97. "debug": false,
  98. "newestOnTop": true,
  99. "progressBar": true,
  100. "positionClass": "toast-top-right",
  101. "preventDuplicates": false,
  102. "onclick": null,
  103. "showDuration": "300",
  104. "hideDuration": "1000",
  105. "timeOut": "3000",
  106. "extendedTimeOut": "1000",
  107. "showEasing": "swing",
  108. "hideEasing": "linear",
  109. "showMethod": "fadeIn",
  110. "hideMethod": "fadeOut"
  111. };
  112. //--
  113. //-- Initialisation des modules Semantic UI
  114. $.initSemanticComponents();
  115. //--
  116. $('body').on('click', '.js-panel-back', function(e) {
  117. e.preventDefault();
  118. $(this).goPanelBack();
  119. });
  120. $('#main-wrapper')
  121. .on('click', '.js-toggle-comment-form', function() {
  122. var $this = $(this);
  123. var $form = $this.siblings('.hidden');
  124. $form.toggleClass('hidden');
  125. $this.toggleClass('hidden');
  126. CKEDITOR.instances.comment_form_content.focus();
  127. })
  128. .on('keyup', '#event_create_form_fkOrganizer_publicName', function(e) {
  129. var $this = $(this);
  130. var value = $this.val();
  131. clearTimeout(userSearchTimeout);
  132. if (value.length > 2 && lastUserValue !== value) {
  133. lastUserValue = value;
  134. userSearchTimeout = setTimeout(function () {
  135. $this.parent().toggleClass('loading');
  136. $.ajax({
  137. url: Routing.generate('app_utilisateur_finduser', {publicName: value}),
  138. dataType: 'json'
  139. })
  140. .done(function(data) {
  141. var organizerListElement = $('.js-event-organizer-list');
  142. organizerListElement.empty();
  143. $.each(data.users, function (idx, User) {
  144. var div = $('<div ' +
  145. 'class="js-found-organizer ui secondary button found user">' +
  146. '<img class="avatar" alt="' + User.publicName + '" src="' + User.avatar + '" /><span>' + User.publicName + '</span>' +
  147. '</div>')
  148. .data('user-id', User.id)
  149. .data('user-publicName', User.publicName)
  150. .data('user-avatar', User.avatar)
  151. ;
  152. div.appendTo(organizerListElement);
  153. });
  154. })
  155. .always(function() {
  156. $this.parent().toggleClass('loading');
  157. });
  158. }, 300);
  159. }
  160. })
  161. .on('click', '.js-found-organizer', function (e) {
  162. var $this = $(this);
  163. var publicNameElement = $('#event_create_form_fkOrganizer_publicName');
  164. $('#event_create_form_fkOrganizer_id').val($this.data('user-id'));
  165. publicNameElement.val($this.data('user-publicName'));
  166. publicNameElement.parent().find('i').addClass('hidden');
  167. publicNameElement.parent().prepend('<img class="input image avatar" src="' + $this.data('user-avatar') + '" alt="' + $this.data('user-publicName') + '"/>');
  168. $('.js-event-organizer-list').empty();
  169. })
  170. ;
  171. if( apc_openListFilters_container.length ) {
  172. var filter = new LiveFilter(apc_openListFilters_container.find('.js-filter .ui.button'), Routing.generate('app_admin_openevent'));
  173. filter.criterions['filter'] = [];
  174. apc_openListFilters_container.find('.js-filter .ui.button').each(function() {
  175. if( $(this).hasClass('active') ) {
  176. filter.criterions['filter'].push($(this).data('value'));
  177. }
  178. });
  179. apc_openListFilters_container
  180. .on('click', '.js-filter .ui.button', function(e) {
  181. e.preventDefault();
  182. $(this).toggleClass('active');
  183. if( $(this).hasClass('active') ) {
  184. filter.addCriterion('filter', $(this).data('value'));
  185. } else {
  186. filter.removeCriterion('filter', $(this).data('value'));
  187. }
  188. })
  189. .on('livefilter', '.js-filter .ui.button', function(event, data) {
  190. $('.admin-table-list tbody').html(data);
  191. });
  192. }
  193. $('.js-customize-openEvent').on('click', function(e) {
  194. e.preventDefault();
  195. e.stopPropagation();
  196. var target = $(this);
  197. target.toggleClass('loading');
  198. $.ajax({
  199. url: target.attr('href')
  200. })
  201. .done(function(reponse) {
  202. $('.js-main-section').addSidePanel(reponse);
  203. })
  204. .always(function() {
  205. target.toggleClass('loading');
  206. })
  207. });
  208. $('.js-openEvent-list').on('click', '.js-action-opentEvent .ui.button', function(e) {
  209. e.preventDefault();
  210. var target = $(this);
  211. var data_value = target.data('value');
  212. var status_container = target.parents('tr').find('.js-openEvent-status');
  213. target.toggleClass('loading');
  214. $.ajax({
  215. url: $(this).attr('href')
  216. })
  217. .done(function() {
  218. target.parent().find('.ui.button').removeClass('hidden');
  219. target.toggleClass('hidden');
  220. status_container.find('.icon').addClass('hidden');
  221. status_container.find('.icon[data-value='+data_value+']').removeClass('hidden');
  222. })
  223. .always(function() {
  224. target.toggleClass('loading');
  225. })
  226. });
  227. $('body').on('click', '.js-customize-openEvent-submit', function(e) {
  228. e.preventDefault();
  229. CKEDITOR.instances['event_create_form_content'].updateElement();
  230. var target = $(this);
  231. var form = $('.js-customize-OpenEvent-form form');
  232. var form_data = form.serializeArray();
  233. $.ajax({
  234. url: form.attr('action') + '&action=' + target.data('action'),
  235. type: 'POST',
  236. data: form_data
  237. })
  238. .done(function() {
  239. form.goPanelBack();
  240. $('.js-openEvent-list tbody').refresh();
  241. })
  242. ;
  243. });
  244. $('.js-display-menu').on('click', function () {
  245. var $mainMenu = $('.js-main-menu');
  246. if ($mainMenu.first().css('display') === 'none') {
  247. $mainMenu.slideDown(300);
  248. } else {
  249. $mainMenu.slideUp(300);
  250. }
  251. });
  252. })();