__vue_app_modal_object.js 29 KB

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