__vue_app_object.js 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577
  1. /*
  2. * Core js fw functions
  3. * Do not edit this file
  4. */
  5. /*
  6. * Default Vue App object
  7. */
  8. var mgDefauleVueObject = {
  9. el: null,//'#'+controlerId,
  10. data: {
  11. targetId : null,//controlerId,
  12. targetUrl : null, //mgUrlParser.getCurrentUrl(),
  13. pageLoading : false,
  14. returnedData : null,
  15. loading : false,
  16. loaderComponent : '<div class="row"><i class="dataTables_processing"></i></div>',
  17. sSearch : null,
  18. showModal : false,
  19. htmlContent : '',
  20. modalBodyContainer : 'mg-modal-body',
  21. refreshingState : [],
  22. massActionIds : null,
  23. massActionTargetCont : null,
  24. pagePreLoader : null,
  25. destroyComponent: false,
  26. modalInstance : null,
  27. mgNewModalContainerName: 'mg-component-body-empty-modal',
  28. mgNewModalJsObj: null,
  29. mgNewModalvIf: false,
  30. appActionBlockingState: false
  31. },
  32. created: function () {
  33. var self = this;
  34. self.$on('restartRefreshingState', self.cleanRefreshActionsState());
  35. self.$nextTick(function(){
  36. initContainerSelects('layers');
  37. });
  38. mgEventHandler.runCallback('AppCreated', self.targetId, {instance: self});
  39. },
  40. methods: {
  41. selectChangeAction : function($event) {
  42. mgEventHandler.runCallback('SelectFieldValueChanged', $event.target.name, {data: $event.target});
  43. },
  44. rendKey: function (lenth) {
  45. if (!lenth) {
  46. lenth = 6;
  47. }
  48. var randKey = "";
  49. var avChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  50. for (var i = 0; i < lenth; i++) {
  51. randKey += avChars.charAt(Math.floor(Math.random() * avChars.length));
  52. }
  53. return randKey;
  54. },
  55. vloadData : function (params, forceRawData) {
  56. var self = this;
  57. var returnType = forceRawData ? 'text' : 'json';
  58. self.refreshUrl();
  59. for(var propertyName in params) {
  60. self.addUrlComponent(propertyName, params[propertyName]);
  61. }
  62. self.addUrlComponent('ajax', '1');
  63. return $.get(self.targetUrl, function(data){
  64. if (!forceRawData) {
  65. data = data.data;
  66. if (data.callBackFunction && typeof window[data.callBackFunction] === "function") {
  67. window[data.callBackFunction](data);
  68. }
  69. }
  70. }, returnType).fail(function(jqXHR, textStatus, errorThrown) {
  71. //self.addAlert('danger', 'Action Failed');
  72. console.log('Action Failed');
  73. });
  74. },
  75. addUrlComponent : function($name, $value) {
  76. var self = this;
  77. if (typeof $value === 'object') {
  78. for (var key in $value) {
  79. if (!$value.hasOwnProperty(key)) {
  80. continue;
  81. }
  82. self.targetUrl += (self.targetUrl.indexOf('?') !== -1 ? '&' : '?') + $name + '[' + key + ']' + '=' + encodeURIComponent($value[key]);
  83. }
  84. } else{
  85. self.targetUrl += (self.targetUrl.indexOf('?') !== -1 ? '&' : '?') + $name + '=' + encodeURIComponent($value);
  86. }
  87. },
  88. updateUrlParam : function(key, value, event){
  89. var self = this;
  90. value = self.updateValueByAttrs(key, value, event);
  91. if(self.targetUrl.indexOf(key) === -1){
  92. self.addUrlComponent(key, value);
  93. } else {
  94. var baseUrlParts = self.targetUrl.split('?');
  95. var currentUrlParams = baseUrlParts[1].split('&');
  96. for(i=0; i < currentUrlParams.length; i++){
  97. if(currentUrlParams[i].indexOf(key) === 0){
  98. if(value === ''){
  99. currentUrlParams.splice(i, 1);
  100. } else {
  101. currentUrlParams[i] = key + '=' + value;
  102. }
  103. }
  104. }
  105. var updatedUrlParams = currentUrlParams.join('&');
  106. self.targetUrl = baseUrlParts[0] + '?' + updatedUrlParams;
  107. }
  108. },
  109. updateValueByAttrs : function(key, value, event){
  110. if(value.indexOf(':') !== 0){
  111. return value;
  112. } else {
  113. if($(event.target).attr('data-' + key)) {
  114. return $(event.target).attr('data-' + key);
  115. } else if( $(event.target).parents('a').first().attr('data-' + key)) {
  116. return $(event.target).parents('a').first().attr('data-' + key);
  117. } else if( $(event.target).parents('button').first().attr('data-' + key)) {
  118. return $(event.target).parents('button').first().attr('data-' + key);
  119. } else {
  120. return value;
  121. }
  122. }
  123. },
  124. refreshUrl : function() {
  125. var self = this;
  126. self.targetUrl = mgUrlParser.getCurrentUrl();
  127. if(self.targetUrl.indexOf('#') > 0) {
  128. self.targetUrl = self.targetUrl.substr(0, self.targetUrl.indexOf('#'));
  129. }
  130. },
  131. loadModal : function(event, targetId, namespace, index, params, addSpinner){
  132. event.preventDefault();
  133. event.stopImmediatePropagation();
  134. var self = this;
  135. if (self.appActionBlockingState) {
  136. return true;
  137. }
  138. self.appActionBlockingState = true;
  139. self.htmlContent = '<div></div>';
  140. if (addSpinner) {
  141. self.showSpinner(event);
  142. }
  143. self.refreshUrl();
  144. self.initRefreshActions(event, targetId);
  145. self.initMassActions(event);
  146. self.addUrlComponent('loadData', targetId);
  147. self.addUrlComponent('namespace', namespace);
  148. if (params && params.length > 0)
  149. {
  150. for (i = 0; i < params.length; i++) {
  151. self.addUrlComponent(params[i].name, params[i].value);
  152. }
  153. }
  154. self.addUrlComponent('index', index);
  155. self.addUrlComponent('mgformtype', 'read');
  156. self.getActionId(event);
  157. self.addUrlComponent('ajax', '1');
  158. var request = $.get(self.targetUrl, function(data){
  159. data = data.data;
  160. if(data.status === 'success'){
  161. self.htmlContent = data.rawData.htmlData;
  162. mgPageControler.initModal(targetId, namespace, index, event, data.rawData);
  163. } else {
  164. self.handleErrorMessage(data);
  165. mgEventHandler.runCallback('ModalLoadFailed', targetId, {respData: data});
  166. }
  167. self.$nextTick(function() {
  168. if (data.callBackFunction && typeof window[data.callBackFunction] === "function") {
  169. window[data.callBackFunction](data, targetId, event);
  170. }
  171. });
  172. if (addSpinner) {
  173. self.hideSpinner(event);
  174. }
  175. self.appActionBlockingState = false;
  176. }, 'json').fail(function(jqXHR, textStatus, errorThrown) {
  177. if (addSpinner) {
  178. self.hideSpinner(event);
  179. }
  180. self.appActionBlockingState = false;
  181. self.handleServerError(jqXHR, textStatus, errorThrown);
  182. mgEventHandler.runCallback('ModalLoadFailed', targetId, {jqXHR : jqXHR, textStatus: textStatus, errorThrown: errorThrown});
  183. });
  184. self.refreshUrl();
  185. return request;
  186. },
  187. showSpinner : function(event) {
  188. var self = this;
  189. var spinnerTarget = self.getSpinerTarget(event);
  190. if (spinnerTarget && spinnerTarget.length > 0 || $(spinnerTarget).tagName === 'I') {
  191. var isBtnIcon = $(spinnerTarget).hasClass('lu-btn__icon');
  192. $(spinnerTarget).attr('originall-button-icon', $(spinnerTarget).attr('class'));
  193. $(spinnerTarget).removeAttr('class');
  194. $(spinnerTarget).attr('class', (isBtnIcon ? 'lu-btn__icon ' : '') + 'lu-btn__icon lu-preloader lu-preloader--sm');
  195. } else {
  196. self.addSpinner(event);
  197. }
  198. },
  199. reloadModalContent: function(event, targetId, namespace, index, params, addSpinner) {
  200. var self = this;
  201. $('#mgModalContainer').append('<div class="preloader-container preloader-container--full-screen preloader-container--overlay" v-show="loading"><div class="preloader preloader--sm"></div></div>');
  202. self.refreshUrl();
  203. self.initRefreshActions(event, targetId);
  204. self.initMassActions(targetId);
  205. self.addUrlComponent('loadData', targetId);
  206. self.addUrlComponent('namespace', namespace);
  207. self.addUrlComponent('index', index);
  208. self.addUrlComponent('mgformtype', 'reload');
  209. self.getActionId(event);
  210. self.addUrlComponent('ajax', '1');
  211. var formData =[];
  212. if($('#mgModalContainer').find('form').length > 0) {
  213. var formTargetId = $('#mgModalContainer').find('form').first().attr('id');
  214. var formCont = new mgFormControler(formTargetId);
  215. var formData = formCont.getFieldsData();
  216. }
  217. $.post(self.targetUrl, formData).done(function (data) {
  218. data = data.data;
  219. if(data.status === 'success'){
  220. self.htmlContent = data.rawData.htmlData;
  221. self.destroyComponent = true;
  222. mgPageControler.initModal(targetId, namespace, index, event, data.rawData);
  223. } else {
  224. self.handleErrorMessage(data);
  225. $('#mgModalContainer #mg-full-modal-wrapper').remove();
  226. }
  227. self.$nextTick(function() {
  228. if (data.callBackFunction && typeof window[data.callBackFunction] === "function") {
  229. window[data.callBackFunction](data, targetId, event);
  230. }
  231. });
  232. }, 'json').fail(function() {
  233. //self.addAlert('danger', 'Action Failed');
  234. console.log('Action Failed');
  235. });
  236. self.refreshUrl();
  237. },
  238. hideSpinner : function(event) {
  239. var self = this;
  240. var spinnerTarget = self.getSpinerTarget(event);
  241. if ($(event.target).attr('originall-button-content')) {
  242. self.removeSpinner(event);
  243. } else if (spinnerTarget && spinnerTarget.length > 0 || $(spinnerTarget).tagName === 'I') {
  244. $(spinnerTarget).removeAttr('class');
  245. $(spinnerTarget).attr('class', $(spinnerTarget).attr('originall-button-icon'));
  246. $(spinnerTarget).removeAttr('originall-button-icon');
  247. }
  248. },
  249. removeSpinner : function(event) {
  250. $(event.target).html($(event.target).attr('originall-button-content'));
  251. $(event.target).removeAttr('originall-button-content');
  252. },
  253. addSpinner : function(event) {
  254. var elWidth = $(event.target).width();
  255. var spinnerClass = $(event.target).hasClass('lu-btn--success') ? 'lu-preloader-success' : ($(event.target).hasClass('lu-btn--danger') ? 'lu-preloader-danger' : '');
  256. $(event.target).attr('originall-button-content', $(event.target).html());
  257. $(event.target).html('<span class="lu-btn__icon lu-temp-button-loader" style="margin: 0 0 0 0 !important; width: ' + elWidth + 'px;"><i class="lu-btn__icon lu-preloader lu-preloader--sm ' + spinnerClass + '"></i></span>');
  258. },
  259. getSpinerParent : function(event) {
  260. if($(event.target)[0].tagName === 'A' || $(event.target)[0].tagName === 'BUTTON'){
  261. return $(event.target)[0];
  262. } else if($(event.target)[0].parents('button').first()){
  263. return $(event.target)[0].parents('button').first();
  264. } else if($(event.target)[0].parents('a').first()){
  265. return $(event.target)[0].parents('a').first();
  266. } else {
  267. return null;
  268. }
  269. },
  270. getSpinerTarget : function(event) {
  271. if($(event.target)[0].tagName === 'I'){
  272. return $(event.target);
  273. } else if($(event.target)[0].tagName === 'SPAN'){
  274. var aParents = $(event.target).parents('a');
  275. return aParents.length === 0 ? $(event.target).parents('button').first().find('i').first() : $(event.target).parents('a').first().find('i').first();
  276. } else if($(event.target)[0].tagName === 'A'){
  277. return $(event.target).find('i').first();
  278. } else if($(event.target)[0].tagName === 'BUTTON'){
  279. return $(event.target).find('i').first();
  280. } else {
  281. return null;
  282. }
  283. },
  284. initMassActions : function(event){
  285. var self = this;
  286. self.cleanMassActions();
  287. if($(event.target).parents('.lu-t-c__mass-actions').length === 0)
  288. {
  289. return;
  290. }
  291. self.addUrlComponent('isMassAction', '1');
  292. var tableContainer = $(event.target).parents('.vueDatatableTable').first().attr('id');
  293. self.massActionTargetCont = tableContainer;
  294. self.massActionIds = collectTableMassActionsData(tableContainer);
  295. },
  296. addMassActionsToData : function (formData){
  297. var self = this;
  298. if(self.massActionIds){
  299. for (var key in self.massActionIds) {
  300. if (!self.massActionIds.hasOwnProperty(key)) {
  301. continue;
  302. }
  303. formData.set('massActions[' + key + ']', self.massActionIds[key]);
  304. }
  305. return formData;
  306. }else{
  307. return formData;
  308. }
  309. },
  310. cleanMassActions : function(){
  311. var self = this;
  312. if(self.massActionIds || self.massActionTargetCont){
  313. self.massActionIds = null;
  314. //uncheckSelectAllCheck(self.massActionTargetCont);
  315. self.$nextTick(function() {
  316. self.massActionTargetCont = null;
  317. });
  318. }
  319. },
  320. addRefreshActions: function (targetId) {
  321. var self = this;
  322. self.refreshingState.push(targetId);
  323. },
  324. initRefreshActions : function(event, targetId) {
  325. var self = this;
  326. var menuReloading = ['addGroupButton', 'editGroupButton', 'deleteGroupButton'];
  327. if(menuReloading.indexOf(targetId) > -1)
  328. {
  329. self.refreshingState = ['mg-category-menu'];
  330. return;
  331. }
  332. var tableContainer = $(event.target).parents('.vueDatatableTable').first();
  333. self.refreshingState = [$(tableContainer).attr('id')];
  334. },
  335. runRefreshActions : function(ids, data) {
  336. var self = this;
  337. var rfIds = (ids && ids.length > 0) ? ids : self.refreshingState;
  338. var customParams = (data && typeof data.customParams !== undefined) ? data.customParams : null;
  339. if(rfIds && rfIds.length > 0){
  340. $.each(rfIds, function (index, Id) {
  341. var targetId = Id;
  342. self.$nextTick(function() {
  343. self.$emit('reloadMgData', targetId, customParams);
  344. });
  345. });
  346. }
  347. },
  348. cleanRefreshActionsState : function() {
  349. var self = this;
  350. self.refreshingState = [];
  351. },
  352. getActionId : function(event) {
  353. var self = this;
  354. var tableActions = $(event.target).parents("td.mgTableActions");
  355. var widgetActionComponent = $(event.target).parents("div.widgetActionComponent");
  356. if($(tableActions).length === 1){
  357. var row = $(tableActions[0]).parent('tr');
  358. var actionElementId = $(row).attr("actionid");
  359. if(actionElementId){
  360. self.addUrlComponent('actionElementId', actionElementId);
  361. }
  362. } else if(widgetActionComponent.length === 1){
  363. var actionElementId = widgetActionComponent.first().attr("actionid");
  364. if(actionElementId){
  365. self.addUrlComponent('actionElementId', actionElementId);
  366. }
  367. }
  368. },
  369. submitForm : function(targetId, event) {
  370. event.preventDefault();
  371. var self = this;
  372. if (self.appActionBlockingState) {
  373. return true;
  374. }
  375. self.appActionBlockingState = true;
  376. var formTargetId = ($('#'+targetId)[0].tagName === 'FORM') ? targetId : $('#'+targetId).find('form').attr('id');
  377. if(formTargetId){
  378. self.showSpinner(event);
  379. var formCont = new mgFormControler(formTargetId);
  380. var formData = formCont.getFieldsData();
  381. formData = self.addMassActionsToData(formData);
  382. self.refreshUrl();
  383. self.addUrlComponent('loadData', formTargetId);
  384. self.addUrlComponent('namespace', getItemNamespace(formTargetId));
  385. self.addUrlComponent('index', getItemIndex(formTargetId));
  386. self.addUrlComponent('ajax', '1');
  387. self.addUrlComponent('mgformtype', $('#'+formTargetId).attr('mgformtype'));
  388. $.ajax({
  389. type: "POST",
  390. url: self.targetUrl,
  391. data: formData,
  392. processData: false,
  393. contentType: false})
  394. .done(function( data ) {
  395. data = data.data;
  396. self.hideSpinner(event);
  397. self.$nextTick(function() {
  398. if (data.callBackFunction && typeof window[data.callBackFunction] === "function") {
  399. window[data.callBackFunction](data, targetId, event);
  400. }
  401. });
  402. if(data.status === 'success'){
  403. self.showModal = false;
  404. self.runRefreshActions((data && typeof data.refreshIds !== undefined) ? data.refreshIds : null, data);
  405. self.cleanMassActions();
  406. self.addAlert(data.status, data.message);
  407. formCont.updateFieldsValidationMessages([]);
  408. } else if (data.rawData !== undefined && data.rawData.FormValidationErrors !== undefined) {
  409. formCont.updateFieldsValidationMessages(data.rawData.FormValidationErrors);
  410. } else {
  411. formCont.updateFieldsValidationMessages([]);
  412. self.handleErrorMessage(data);
  413. }
  414. self.appActionBlockingState = false;
  415. }).fail(function(jqXHR, textStatus, errorThrown) {
  416. self.hideSpinner(event);
  417. self.handleServerError(jqXHR, textStatus, errorThrown);
  418. self.appActionBlockingState = false;
  419. });
  420. }
  421. else {
  422. //todo error reporting
  423. }
  424. },
  425. handleErrorMessage: function(data) {
  426. var self = this;
  427. self.addAlert(data.status,(data.message ? data.message : (typeof data.data !== 'undefined' ?
  428. ((typeof data.data.errorCode !== 'undefined' ? 'Error Code: ' + data.data.errorCode + ' <br> ' : '')
  429. + (typeof data.data.errorToken !== 'undefined' ? 'Error Token: ' + data.data.errorToken + ' <br> ' : '')
  430. + (typeof data.data.errorTime !== 'undefined' ? 'Error Time: ' + data.data.errorTime + ' <br> ' : '')
  431. + (typeof data.data.errorMessage !== 'undefined' ? 'Message: ' + data.data.errorMessage : '')) : '')
  432. ));
  433. if ((typeof data.data !== 'undefined') && (typeof data.data.errorCode !== 'undefined'))
  434. {
  435. console.log(data.data);
  436. }
  437. },
  438. handleServerError: function(jqXHR, textStatus, errorThrown) {
  439. var self = this;
  440. if (jqXHR.responseText.indexOf('id="mg-sh-h-492318-64534" value="') > 0){
  441. var errTokenStart = jqXHR.responseText.indexOf('mg-sh-h-492318-64534') + 20;
  442. var errTokenEnd = jqXHR.responseText.indexOf('mg-sh-h-492318-64534-end');
  443. var errToken = jqXHR.responseText.substr(errTokenStart, (errTokenEnd - errTokenStart));
  444. errToken = errToken.replace('value=', '').replace(/\"/g, '').replace(/\s/g, '');
  445. self.addAlert('error', 'Unexpected Error. <br>Error Token: ' + errToken);
  446. console.log('Action Failed. Error Token: ' + errToken);
  447. } else {
  448. console.log('Action Failed');
  449. }
  450. },
  451. ajaxAction : function(event, targetId, namespace, index, postData) {
  452. var self = this;
  453. self.refreshUrl();
  454. self.initRefreshActions(event, targetId);
  455. self.addUrlComponent('loadData', targetId);
  456. self.addUrlComponent('namespace', namespace);
  457. self.addUrlComponent('index', index);
  458. self.getActionId(event);
  459. self.addUrlComponent('ajax', '1');
  460. $.post(self.targetUrl, postData)
  461. .done(function( data ) {
  462. data = data.data;
  463. self.addAlert(data.status, data.message);
  464. self.$nextTick(function() {
  465. if (data.callBackFunction && typeof window[data.callBackFunction] === "function") {
  466. window[data.callBackFunction](data, targetId, event);
  467. }
  468. });
  469. if(data.status === 'success'){
  470. }
  471. }, 'json');
  472. self.refreshUrl();
  473. },
  474. updateSorting : function(order, loadData, namespace)
  475. {
  476. var self = this;
  477. self.refreshUrl();
  478. self.addUrlComponent('loadData', loadData);
  479. self.addUrlComponent('namespace', namespace);
  480. self.addUrlComponent('ajax', '1');
  481. self.addUrlComponent('mgformtype', "reorder");
  482. var formData = {order : order}
  483. $.post(self.targetUrl, {formData: formData}).done(function( data )
  484. {
  485. data = data.data;
  486. self.addAlert(data.status, data.message);
  487. self.pageLoading = false;
  488. self.$nextTick(function() {
  489. if (data.callBackFunction && typeof window[data.callBackFunction] === "function") {
  490. window[data.callBackFunction](data, loadData);
  491. }
  492. });
  493. if(data.status === 'success')
  494. {
  495. //Dispaly alert?
  496. }
  497. else
  498. {
  499. //TODO: Dispaly alert
  500. }
  501. });
  502. },
  503. addAlert : function(type, message){
  504. type = (type === 'error') ? 'danger' : type;
  505. layers.alert.create({
  506. $alertPosition: 'right-top',
  507. $alertStatus: type,
  508. $alertBody: message,
  509. $alertTimeout: 10000
  510. });
  511. },
  512. makeCustomAction : function(functionName, params, event, namespace, index) {
  513. var self = this;
  514. if (functionName && typeof mgPageControler.vueLoader[functionName] === "function") {
  515. mgPageControler.vueLoader[functionName](self, params, event, namespace, index);
  516. } else if (functionName && typeof window[functionName] === "function") {
  517. window[functionName](self, params, event, namespace, index);
  518. }
  519. },
  520. redirect : function (event, params, targetBlank) {
  521. var self = this;
  522. var tempUrl = self.targetUrl;
  523. if(params.rawUrl !== undefined){
  524. self.targetUrl = params.rawUrl;
  525. }
  526. if(params.actionElementId !== undefined) {
  527. self.getActionId(event);
  528. }
  529. $.each(params, function(key, value){
  530. if(key === 'rawUrl' || key === 'actionElementId'){
  531. return false;
  532. } else {
  533. self.updateUrlParam(key.replace('__', '-'), value, event);
  534. }
  535. });
  536. if (targetBlank) {
  537. window.open(self.targetUrl, '_blank');
  538. } else {
  539. window.location = self.targetUrl;
  540. }
  541. },
  542. submitFormByEvent : function(event){
  543. var self = this;
  544. self.submitForm($(event.target).parents("form").first().attr('id'), event);
  545. },
  546. submitFormByField: function(event) {
  547. },
  548. toggler: function(event, container, selector){
  549. let element = $(event.target).closest(container).find(selector);
  550. let switcher = $(event.target).closest(container).find('[data-toggle=1]');
  551. if(element.hasClass('hidden'))
  552. {
  553. element.removeClass('hidden');
  554. switcher.removeClass(switcher.data('toggle-on')).addClass(switcher.data('toggle-off'));
  555. }
  556. else
  557. {
  558. element.addClass('hidden');
  559. switcher.removeClass(switcher.data('toggle-off')).addClass(switcher.data('toggle-on'));
  560. }
  561. },
  562. }
  563. };