__vue_app_object.js 24 KB

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