moe.js 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812
  1. toastr.options = {
  2. "closeButton": false,
  3. "debug": false,
  4. "newestOnTop": false,
  5. "progressBar": false,
  6. "positionClass": "toast-top-right",
  7. "preventDuplicates": false,
  8. "onclick": null,
  9. "showDuration": "300",
  10. "hideDuration": "1000",
  11. "timeOut": "1500",
  12. "extendedTimeOut": "1000",
  13. "showEasing": "swing",
  14. "hideEasing": "linear",
  15. "showMethod": "fadeIn",
  16. "hideMethod": "fadeOut"
  17. }
  18. $.fn.serializeObject = function () {
  19. var o = {};
  20. var a = this.serializeArray();
  21. $.each(a, function () {
  22. if (o[this.name] !== undefined) {
  23. if (!o[this.name].push) {
  24. o[this.name] = [o[this.name]];
  25. }
  26. o[this.name].push(this.value || '');
  27. } else {
  28. o[this.name] = this.value || '';
  29. }
  30. });
  31. return o;
  32. };
  33. $.fn.toast = function (message, showForSeconds) {
  34. var me = this;
  35. $(me).html(message);
  36. var x = $(me).show(200);
  37. if (showForSeconds) {
  38. x.delay(showForSeconds).fadeOut(0);
  39. }
  40. }
  41. var doPost = function (url, data, callback) {
  42. $.ajax({
  43. type: 'POST',
  44. url: url,
  45. data: data,
  46. dataType: 'json',
  47. success: function (x) {
  48. callback(x);
  49. }
  50. });
  51. }
  52. var redirTo = function (link) {
  53. reloadPage(link);
  54. }
  55. var getFormData = function (form) {
  56. return $(form).serializeObject();
  57. }
  58. var simpleSubmit = function (url, form, callback) {
  59. var data = getFormData(form);
  60. // leave this in case
  61. // data.data = JSON.stringify(data);
  62. console.log("DATA TO: " + url, data);
  63. doPost(url, data, function (response) {
  64. console.log("RESPONSE FROM: " + url);
  65. console.log(JSON.stringify(response));
  66. if (callback) {
  67. callback(response);
  68. } else {
  69. if (response.success) {
  70. location.reload();
  71. } else {
  72. toastr.error(response.message);
  73. }
  74. }
  75. });
  76. }
  77. var simpleDataSubmit = function (url, data, callback) {
  78. doPost(url, data, function (response) {
  79. if (callback) {
  80. callback(response);
  81. } else {
  82. if (response.success) {
  83. location.reload();
  84. } else {
  85. toastr.error(response.message);
  86. }
  87. }
  88. });
  89. }
  90. var reloadPage = function (url, successMsg) {
  91. var url = url || window.location.href;
  92. $.get(window.location.href, function (data, status) {
  93. if (status == 'success') {
  94. var bodyHtml = /<body.*?>([\s\S]*)<\/body>/.exec(data)[1];
  95. $('body').html(bodyHtml);
  96. $('body').removeClass('modal-open');
  97. $('body').removeAttr('style')
  98. if (successMsg && successMsg.length > 0) {
  99. toastr.info(successMsg);
  100. }
  101. }
  102. })
  103. }
  104. var redirTo = function (url, successMsg) {
  105. reloadPage(url);
  106. }
  107. var refresh = function (successMsg) {
  108. reloadPage(null, successMsg);
  109. }
  110. var removeLocalStorageKeys = function (form) {
  111. var lsKey = $(form).attr('ls-key');
  112. var lsKeys = lsKey ? lsKey.split(',') : [];
  113. for (var i = 0; i < lsKeys.length; i++) {
  114. console.log("Removing " + lsKeys[i]);
  115. window.localStorage.removeItem(lsKeys[i]);
  116. }
  117. }
  118. var setupMoes = function () {
  119. $('div[moe]').each(function () {
  120. var moe = this;
  121. var start = $(moe).find('a[start]');
  122. var cancel = $(moe).find('[cancel]');
  123. var submit = $(moe).find('[submit]');
  124. var form = $(moe).find('[form]');
  125. form = form ? form[0] : null;
  126. form = form ? form : $(moe).find('form');
  127. var url = $(form).attr('url');
  128. var successMsg = $(form).attr('success-msg');
  129. var redir = $(form).attr('redir');
  130. var info = $(moe).find('[info]');
  131. info = info ? info[0] : null;
  132. var isStartShowing = $(start).css('display') != 'none';
  133. var isFormShowing = $(form).css('display') != 'none';
  134. var isInfoShowing = info ? $(info).css('display') != 'none' : null;
  135. var toggleStart = function (e) {
  136. e.preventDefault();
  137. if ($(start).attr('show') != undefined) {
  138. return;
  139. }
  140. $(start).toggle();
  141. };
  142. var toggleForm = function (e) {
  143. e.preventDefault();
  144. if ($(form).attr('show') != undefined) {
  145. return;
  146. }
  147. if (isFormShowing) {
  148. $(form).hide();
  149. } else {
  150. $(form).css('display', 'block');
  151. }
  152. isFormShowing = !isFormShowing;
  153. // $(form).toggle(50);removeLocalStorageKeys(form)
  154. };
  155. var toggleInfo = function (e) {
  156. e.preventDefault();
  157. if (!info) {
  158. return;
  159. }
  160. if ($(info).attr('show') != undefined) {
  161. return;
  162. }
  163. if (isInfoShowing) {
  164. $(info).hide();
  165. } else {
  166. $(info).css('display', 'block');
  167. }
  168. isInfoShowing = !isInfoShowing;
  169. // $(info).toggle(50);
  170. };
  171. var toggleFormAndInfo = function (e) {
  172. e.preventDefault();
  173. toggleStart(e);
  174. toggleForm(e);
  175. toggleInfo(e);
  176. }
  177. $(start).click(toggleFormAndInfo);
  178. $(cancel).click(toggleFormAndInfo);
  179. //clear localStrage for the form after cancel
  180. var cancelMoe = function (e) {
  181. var frm = $(this).closest('form');
  182. removeLocalStorageKeys(frm);
  183. }
  184. $(moe).off('click', '[cancel]', cancelMoe);
  185. $(moe).on('click', '[cancel]', cancelMoe)
  186. $(form).find('[show-if-field]').each(function () {
  187. var me = this;
  188. var showIfField = $(me).attr('show-if-field');
  189. var showIfValue = $(me).attr('show-if-value');
  190. var showIfFieldEl = $(form).find('[name=' + showIfField + ']');
  191. var adjust = function () {
  192. var value = $(showIfFieldEl).val();
  193. if (value == showIfValue) {
  194. $(me).show();
  195. } else {
  196. $(me).hide();
  197. }
  198. }
  199. $(showIfFieldEl).change(adjust);
  200. adjust();
  201. });
  202. $(moe).off('click', '[submit]');
  203. var submitHtml = $(submit).html();
  204. $(moe).on('click', '[submit]', function (e) {
  205. e.preventDefault();
  206. $(submit).html('<i class="fa fa-spinner fa-spin"></i> ' + submitHtml);
  207. $(submit).prop('disabled', true);
  208. simpleSubmit(url, form, function (response) {
  209. console.log("RESPONSE", response, "REDIR", redir);
  210. if (response.success) {
  211. removeLocalStorageKeys(form);
  212. if (redir) {
  213. redirTo(redir + response.data);
  214. } else {
  215. refresh(successMsg);
  216. }
  217. } else {
  218. $(submit).html(submitHtml);
  219. $(submit).prop('disabled', false);
  220. toastr.error(response.message);
  221. }
  222. });
  223. });
  224. });
  225. };
  226. $(document).ready(function () {
  227. setupMoes();
  228. });
  229. $(document).on('setupMoes', function () {
  230. setTimeout(function () {
  231. setupMoes();
  232. }, 1000)
  233. })
  234. $(document).ready(function () {
  235. $('[dateRanger]').each(function () {
  236. var dr = $(this);
  237. var rangeTypeSelect = dr.find('select')[0];
  238. var date1Input = dr.find('[date1]')[0];
  239. var date2Input = dr.find('[date2]')[0];
  240. var d1Val = '';
  241. var d2Val = '';
  242. var d1 = function (enable) {
  243. if (enable) {
  244. var hasVal = $(date1Input).val();
  245. if (!hasVal) {
  246. $(date1Input).val(d1Val);
  247. }
  248. $(date1Input).show();
  249. } else {
  250. d1Val = $(date1Input).val();
  251. $(date1Input).val('');
  252. $(date1Input).hide();
  253. }
  254. };
  255. var d2 = function (enable) {
  256. if (enable) {
  257. var hasVal = $(date2Input).val();
  258. if (!hasVal) {
  259. $(date2Input).val(d2Val);
  260. }
  261. $(date2Input).show();
  262. } else {
  263. d2Val = $(date2Input).val();
  264. $(date2Input).val('');
  265. $(date2Input).hide();
  266. }
  267. };
  268. var adjustFields = function () {
  269. var rangeType = $(rangeTypeSelect).val();
  270. if (rangeType == 'all') {
  271. d1();
  272. d2();
  273. } else if (rangeType == 'on-or-before') {
  274. d1(true);
  275. d2();
  276. } else if (rangeType == 'on-or-after') {
  277. d1(true);
  278. d2();
  279. } else if (rangeType == 'between') {
  280. d1(true);
  281. d2(true);
  282. } else if (rangeType == 'on') {
  283. d1(true);
  284. d2();
  285. } else if (rangeType == 'not-on') {
  286. d1(true);
  287. d2();
  288. } else if (rangeType == 'not-in-between') {
  289. d1(true);
  290. d2(true);
  291. }
  292. };
  293. adjustFields();
  294. $(rangeTypeSelect).change(function () {
  295. adjustFields();
  296. });
  297. });
  298. $('[numRanger]').each(function () {
  299. var nr = $(this);
  300. var rangeTypeSelect = nr.find('select')[0];
  301. var num1Input = nr.find('[num1]')[0];
  302. var num2Input = nr.find('[num2]')[0];
  303. var n1 = function (enable) {
  304. if (enable) {
  305. $(num1Input).show();
  306. } else {
  307. $(num1Input).hide();
  308. }
  309. };
  310. var n2 = function (enable) {
  311. if (enable) {
  312. $(num2Input).show();
  313. } else {
  314. $(num2Input).hide();
  315. }
  316. };
  317. var adjustFields = function () {
  318. var rangeType = $(rangeTypeSelect).val();
  319. if (rangeType == 'all') {
  320. n1();
  321. n2();
  322. } else if (rangeType == 'less-than') {
  323. n1(true);
  324. n2();
  325. } else if (rangeType == 'greater-than') {
  326. n1(true);
  327. n2();
  328. } else if (rangeType == 'equal-to') {
  329. n1(true);
  330. n2();
  331. } else if (rangeType == 'between') {
  332. n1(true);
  333. n2(true);
  334. } else if (rangeType == 'not-equal-to') {
  335. n1(true);
  336. n2();
  337. } else if (rangeType == 'not-in-between') {
  338. n1(true);
  339. n2(true);
  340. }
  341. };
  342. adjustFields('all');
  343. $(rangeTypeSelect).change(function () {
  344. adjustFields();
  345. });
  346. });
  347. });
  348. //============MOE_MODAL======================================
  349. $.fn.serializeObject = function () {
  350. var o = {};
  351. var a = this.serializeArray();
  352. $.each(a, function () {
  353. if (o[this.name] !== undefined) {
  354. if (!o[this.name].push) {
  355. o[this.name] = [o[this.name]];
  356. }
  357. o[this.name].push(this.value || '');
  358. } else {
  359. o[this.name] = this.value || '';
  360. }
  361. });
  362. return o;
  363. };
  364. $.fn.toast = function (message, showForSeconds) {
  365. var me = this;
  366. $(me).html(message);
  367. var x = $(me).show(200);
  368. if (showForSeconds) {
  369. x.delay(showForSeconds).fadeOut(0);
  370. }
  371. }
  372. var doPost = function (url, data, callback) {
  373. $.ajax({
  374. type: 'POST',
  375. url: url,
  376. data: data,
  377. dataType: 'json',
  378. success: function (x) {
  379. callback(x);
  380. }
  381. });
  382. }
  383. var redirTo = function (link) {
  384. window.location.href = link;
  385. }
  386. var getFormData = function (form) {
  387. return $(form).serializeObject();
  388. }
  389. var simpleSubmit = function (url, form, callback) {
  390. var data = getFormData(form);
  391. // leave this in case
  392. // data.data = JSON.stringify(data);
  393. console.log("DATA TO: " + url, data);
  394. doPost(url, data, function (response) {
  395. console.log("RESPONSE FROM: " + url);
  396. console.log(JSON.stringify(response));
  397. if (callback) {
  398. callback(response);
  399. } else {
  400. if (response.success) {
  401. location.reload();
  402. } else {
  403. toastr.error(response.message);
  404. }
  405. }
  406. });
  407. }
  408. var simpleDataSubmit = function (url, data, callback) {
  409. doPost(url, data, function (response) {
  410. console.log(url, data, response);
  411. if (callback) {
  412. callback(response);
  413. } else {
  414. if (response.success) {
  415. location.reload();
  416. } else {
  417. toastr.error(response.message);
  418. }
  419. }
  420. });
  421. }
  422. var redirTo = function (url) {
  423. window.location.href = url;
  424. }
  425. var removeLocalStorageKeys = function (form) {
  426. var lsKey = $(form).attr('ls-key');
  427. var lsKeys = lsKey ? lsKey.split(',') : [];
  428. for (var i = 0; i < lsKeys.length; i++) {
  429. console.log("Removing " + lsKeys[i]);
  430. window.localStorage.removeItem(lsKeys[i]);
  431. }
  432. }
  433. $(document).ready(function () {
  434. $('[moe-toggle]').each(function () {
  435. var me = this;
  436. var start = $(me).find('[toggle-start]');
  437. var toggle = $(me).find('[toggle]');
  438. $(start).on('click', function (e) {
  439. $(toggle).toggle();
  440. });
  441. });
  442. });
  443. $(document).ready(function () {
  444. initMoeModal();
  445. });
  446. function initMoeModal(_outer) {
  447. $((_outer ? _outer + ' ' : '') + '[moe-modal]').each(function () {
  448. var me = this;
  449. var start = $(me).find('[start]');
  450. var form = $(me).find('form');
  451. var modal = $(me).find('.modal');
  452. var submit = $(form).find('[submit]');
  453. var cancel = $(form).find('[cancel]');
  454. var url = $(form).attr('url');
  455. var successMsg = $(form).attr('success-msg');
  456. var redir = $(form).attr('redir');
  457. var showModal = function () {
  458. $(modal).modal({
  459. show: true,
  460. keyboard: false,
  461. backdrop: 'static'
  462. });
  463. isModalOn = true;
  464. }
  465. var hideModal = function () {
  466. $(modal).modal('hide');
  467. isModalOn = false;
  468. }
  469. $(start).on('click', function (e) {
  470. e.preventDefault();
  471. showModal();
  472. });
  473. $(cancel).on('click', function (e) {
  474. e.preventDefault();
  475. hideModal();
  476. // if in notes-panel, close panel
  477. if($(this).closest('.notes-panel-body').length) {
  478. window.top.notesPanel.cancel();
  479. }
  480. });
  481. $(document).on('keyup', function (e) {
  482. if (e.keyCode == 27) { // ESC
  483. hideModal();
  484. }
  485. });
  486. $(form).attr('action', url);
  487. $(form).attr('method', 'POST');
  488. $(form).attr('enctype', 'form-data/multipart');
  489. var submitHtml = $(submit).html();
  490. $(form).ajaxForm({
  491. beforeSubmit: function () {
  492. $(submit).html('<i class="fa fa-spinner fa-spin"></i> ' + submitHtml);
  493. $(submit).prop('disabled', true);
  494. },
  495. success: function (response) {
  496. console.log(response);
  497. if (response.success) {
  498. if($(submit).closest('.notes-panel-body').length) {
  499. window.top.clearInterval(window.top.notesPanel.saveTimer[$(form).find('[name="persistenceKey"]').val()]);
  500. localStorage.removeItem('notesPanel_' + $(form).find('[name="persistenceKey"]').val());
  501. localStorage.removeItem('notesPanel_expanded_' + $(form).find('[name="clientID"]').val());
  502. window.top.location.reload();
  503. return false;
  504. }
  505. //lsKeys are comma separated
  506. removeLocalStorageKeys(form)
  507. if (redir) {
  508. redirTo(redir + response.data);
  509. } else {
  510. refresh(successMsg);
  511. }
  512. } else {
  513. $(submit).html(submitHtml);
  514. $(submit).prop('disabled', false);
  515. alert(response.message);
  516. }
  517. },
  518. error:function(){
  519. $(submit).html(submitHtml);
  520. $(submit).prop('disabled', false);
  521. alert("HTTP Error: see console log for details");
  522. }
  523. });
  524. });
  525. }
  526. $(document).ready(function () {
  527. $('[ajaxForm]').ajaxForm(function (response, status, xhr, form) {
  528. console.log("Response ", response);
  529. if (!response.success) {
  530. toastr.error(response.message);
  531. return;
  532. }
  533. removeLocalStorageKeys(form)
  534. reloadPage();
  535. });
  536. });
  537. var initInlineMoe = function () {
  538. var showForm = function (el) {
  539. $(el).closest('[inline-moe]').find('[info]').hide();
  540. $(el).closest('[inline-moe]').find('form').show();
  541. }
  542. var hideForm = function (el) {
  543. $(el).closest('[inline-moe]').find('[info]').show();
  544. $(el).closest('[inline-moe]').find('form').hide();
  545. $(el).closest('[inline-moe]').find('form .error').remove();
  546. }
  547. var reloadElement = function (reloadUrl, targetElem) {
  548. console.log("Reloading elem ", $(targetElem), " from " + reloadUrl);
  549. $(targetElem).load(reloadUrl, function () {
  550. initInlineMoe();
  551. });
  552. }
  553. $('body').off('click', '[inline-moe] [start]')
  554. $('body').on('click', '[inline-moe] [start]', function (e) {
  555. e.preventDefault();
  556. showForm(this);
  557. })
  558. $('body').off('click', '[inline-moe] [submit]');
  559. $('body').on('click', '[inline-moe] [submit]', function (e) {
  560. e.preventDefault();
  561. //submit the form and replace reload-target-class with content from reload-url
  562. var form = $(this).closest('form');
  563. var submit = this;
  564. var submitHtml = $(submit).html();
  565. $(form).ajaxSubmit({
  566. beforeSubmit: function () {
  567. $(submit).html('<i class="fa fa-spinner fa-spin"></i> ' + submitHtml);
  568. $(submit).prop('disabled', true);
  569. },
  570. success: function (response) {
  571. if (response.success) {
  572. var reloadTargetClass = $(form).closest('[inline-moe]').attr('reload-target-class');
  573. var targetElement = $(form).closest('.' + reloadTargetClass);
  574. var reloadUrl = $(form).closest('[inline-moe]').attr('reload-url');
  575. reloadElement(reloadUrl, targetElement);
  576. } else {
  577. $(submit).html(submitHtml);
  578. $(submit).prop('disabled', false);
  579. $(form).prepend('<span class="error" style="color:red;">' + "Error" + '</span>');
  580. }
  581. },
  582. error:function(){
  583. $(submit).html(submitHtml);
  584. $(submit).prop('disabled', false);
  585. alert("HTTP Error: see console log for details");
  586. }
  587. });
  588. })
  589. $('body').off('click', '[inline-moe] [cancel]');
  590. $('body').on('click', '[inline-moe] [cancel]', function (e) {
  591. e.preventDefault();
  592. hideForm(this);
  593. })
  594. }
  595. $(document).ready(function () {
  596. setTimeout(function () {
  597. initInlineMoe();
  598. }, 500)
  599. })
  600. $(document).ready(function () {
  601. $(document).off('click', '#callLink')
  602. $(document).on('click', '#callLink', function (evt) {
  603. evt.preventDefault();
  604. var url = $(this).attr('href');
  605. var iid = $(this).attr('data-id');
  606. var custPhone = $('#customPhoneNumber').val();
  607. var data = {iid: iid};
  608. if (custPhone) {
  609. data['customPhoneNumber'] = custPhone;
  610. }
  611. $.post(url, data, function (respData) {
  612. respData = JSON.parse(resp);
  613. if (!respData.success) {
  614. alert(respData.message);
  615. }
  616. });
  617. });
  618. });
  619. (function () {
  620. //make sure the dom gets updated on change for inputs
  621. $('.page-fields-container').on('keyup', 'input', function () {
  622. $(this).attr("value", $(this).val());
  623. });
  624. //update
  625. $("#update").on('click', function () {
  626. var btn = $(this);
  627. //set text area value
  628. $('.page-fields-container textarea').each(function () {
  629. $(this).text($(this).val());
  630. });
  631. $('.page-fields-container input[type=radio]').each(function () {
  632. if ($(this).prop("checked")) {
  633. $(this).attr('checked', true);
  634. }
  635. });
  636. $('.page-fields-container input[type=checkbox]').each(function () {
  637. if ($(this).prop("checked")) {
  638. $(this).attr('checked', true);
  639. }
  640. });
  641. $('.page-fields-container input[type=checkbox]').each(function () {
  642. if ($(this).prop("checked")) {
  643. $(this).attr('checked', true);
  644. }
  645. });
  646. $('.page-fields-container select option:selected').each(function () {
  647. $(this).attr('selected', true);
  648. });
  649. var fieldData = {};
  650. //simple for now to get only input fields
  651. $(btn).closest('.page-container').find('.page-fields-container').find('input').each(function (i, el) {
  652. fieldData[$(el).attr('name')] = $(el).val();
  653. });
  654. $(btn).closest('.page-container').find('.page-fields-container').find('select').each(function (i, el) {
  655. fieldData[$(el).attr('name')] = $(el).val();
  656. });
  657. var clientID = $(this).closest(".page-container").attr('client-id');
  658. var pageID = $(this).closest(".page-container").attr('page-id');
  659. var programID = $(this).closest(".page-container").attr('program-id');
  660. var markup = $(btn).closest('.page-container').find('.page-fields-container').html();
  661. var submitUrl = "";
  662. if (pageID) {
  663. submitUrl = "/api/page/submit";
  664. } else {
  665. submitUrl = "/api/page/addDirect";
  666. }
  667. $.post(submitUrl, {
  668. clientID: clientID,
  669. pageID: pageID,
  670. programID: programID,
  671. submittedMarkupContent: markup,
  672. submittedJson: JSON.stringify(fieldData)
  673. }, function (result) {
  674. console.log("Result", result);
  675. reloadPage(window.location.pathname);
  676. if (result.success) {
  677. alert("Form submitted successfully");
  678. } else {
  679. alert(result.message);
  680. }
  681. });
  682. });
  683. $("#refresh").on(
  684. 'click',
  685. function () {
  686. var btn = $(this);
  687. var pageID = $(this).closest(".page-container")
  688. .attr('page-id');
  689. $.post("/api/page/refresh", {
  690. pageID: pageID
  691. }, function (result) {
  692. console.log("Result", result);
  693. if (result.success) {
  694. var resultMarkup = result.message;
  695. $(btn).closest('.page-container').find('.page-fields-container').html(resultMarkup);
  696. } else {
  697. alert(result.message);
  698. }
  699. });
  700. });
  701. })();