__vue_app_modal_object.js 24 KB

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