JAVASCRIPT 13
Dashboard.js Guest on 12th September 2020 09:28:40 PM
  1. //== Class definition
  2. var LayoutBuilder = function() {
  3.  
  4.         var exporter = {
  5.                 init: function() {
  6.                         $('#m-btn-howto').click(function(e) {
  7.                                 e.preventDefault();
  8.                                 $('#m-howto').slideToggle();
  9.                         });
  10.                         this.exportHtml();
  11.                         this.exportHtmlStatic();
  12.                         this.exportAngular();
  13.                 },
  14.                 startLoad: function(options) {
  15.                         $('#builder_export').
  16.                                 addClass('m-loader m-loader--light m-loader--right').
  17.                                 find('> span > span').
  18.                                 text('Exporting...').
  19.                                 closest('.m-form__actions').
  20.                                 find('.btn').
  21.                                 prop('disabled', true);
  22.                         $.notify(options);
  23.                 },
  24.                 doneLoad: function() {
  25.                         $('#builder_export').
  26.                                 removeClass('m-loader m-loader--light m-loader--right').
  27.                                 find('> span > span').
  28.                                 text('Export').
  29.                                 closest('.m-form__actions').
  30.                                 find('.btn').
  31.                                 prop('disabled', false);
  32.                 },
  33.                 exportHtml: function() {
  34.                         $('#builder_export_html').click(function(e) {
  35.                                 e.preventDefault();
  36.                                 if (!envato.isVerified()) return;
  37.  
  38.                                 var _self = $(this);
  39.  
  40.                                 exporter.startLoad({
  41.                                         title: 'Generate HTML Partials',
  42.                                         message: 'Process started and it may take about 1 to 10 minutes.',
  43.                                 });
  44.  
  45.                                 $.ajax('index.php', {
  46.                                         method: 'POST',
  47.                                         data: {
  48.                                                 builder_export: 1,
  49.                                                 export_type: 'partial',
  50.                                                 demo: $(_self).data('demo'),
  51.                                         },
  52.                                 }).done(function(r) {
  53.                                         var result = JSON.parse(r);
  54.                                         if (result.message) {
  55.                                                 exporter.stopWithNotify(result.message);
  56.                                                 return;
  57.                                         }
  58.  
  59.                                         var timer = setInterval(function() {
  60.                                                 $.ajax('index.php', {
  61.                                                         method: 'POST',
  62.                                                         data: {
  63.                                                                 builder_export: 1,
  64.                                                                 builder_check: result.id,
  65.                                                         },
  66.                                                 }).done(function(r) {
  67.                                                         var result = JSON.parse(r);
  68.                                                         if (typeof result === 'undefined') return;
  69.                                                         // export status 1 is completed
  70.                                                         if (result.export_status !== 1) return;
  71.  
  72.                                                         $('<iframe/>').attr({
  73.                                                                 src: 'index.php?builder_export&builder_download&id=' +
  74.                                                                 result.id,
  75.                                                                 style: 'visibility:hidden;display:none',
  76.                                                         }).ready(function() {
  77.                                                                 $.notify({
  78.                                                                         title: 'Export HTML Version Layout',
  79.                                                                         message: 'HTML version exported.',
  80.                                                                 }, {type: 'success'});
  81.                                                                 exporter.doneLoad();
  82.                                                                 // stop the timer
  83.                                                                 clearInterval(timer);
  84.                                                         }).appendTo(_self);
  85.                                                 });
  86.                                         }, 15000);
  87.                                 });
  88.                         });
  89.                 },
  90.                 exportHtmlStatic: function() {
  91.                         $('#builder_export_html_static').click(function(e) {
  92.                                 e.preventDefault();
  93.                                 if (!envato.isVerified()) return;
  94.  
  95.                                 var _self = $(this);
  96.  
  97.                                 exporter.startLoad({
  98.                                         title: 'Generate HTML Static Version',
  99.                                         message: 'Process started and it may take about 1 to 10 minutes.',
  100.                                 });
  101.  
  102.                                 $.ajax('index.php', {
  103.                                         method: 'POST',
  104.                                         data: {
  105.                                                 builder_export: 1,
  106.                                                 export_type: 'html',
  107.                                                 demo: $(_self).data('demo'),
  108.                                         },
  109.                                 }).done(function(r) {
  110.                                         var result = JSON.parse(r);
  111.                                         if (result.message) {
  112.                                                 exporter.stopWithNotify(result.message);
  113.                                                 return;
  114.                                         }
  115.  
  116.                                         var timer = setInterval(function() {
  117.                                                 $.ajax('index.php', {
  118.                                                         method: 'POST',
  119.                                                         data: {
  120.                                                                 builder_export: 1,
  121.                                                                 builder_check: result.id,
  122.                                                         },
  123.                                                 }).done(function(r) {
  124.                                                         var result = JSON.parse(r);
  125.                                                         if (typeof result === 'undefined') return;
  126.                                                         // export status 1 is completed
  127.                                                         if (result.export_status !== 1) return;
  128.  
  129.                                                         $('<iframe/>').attr({
  130.                                                                 src: 'index.php?builder_export&builder_download&id=' +
  131.                                                                 result.id,
  132.                                                                 style: 'visibility:hidden;display:none',
  133.                                                         }).ready(function() {
  134.                                                                 $.notify({
  135.                                                                         title: 'Export Default Version',
  136.                                                                         message: 'Default HTML version exported with current configured layout.',
  137.                                                                 }, {type: 'success'});
  138.                                                                 exporter.doneLoad();
  139.                                                                 // stop the timer
  140.                                                                 clearInterval(timer);
  141.                                                         }).appendTo(_self);
  142.                                                 });
  143.                                         }, 15000);
  144.                                 });
  145.  
  146.                         });
  147.                 },
  148.                 exportAngular: function() {
  149.                         $('#builder_export_angular').click(function(e) {
  150.                                 e.preventDefault();
  151.                                 if (!envato.isVerified()) return;
  152.  
  153.                                 var _self = $(this);
  154.  
  155.                                 exporter.startLoad({
  156.                                         title: 'Export Angular Version',
  157.                                         message: 'Process started and it may take about 1 to 10 minutes.',
  158.                                 });
  159.  
  160.                                 $.ajax('index.php', {
  161.                                         method: 'POST',
  162.                                         data: {
  163.                                                 builder_export: 1,
  164.                                                 export_type: 'angular',
  165.                                                 demo: $(_self).data('demo'),
  166.                                         },
  167.                                 }).done(function(r) {
  168.                                         var result = JSON.parse(r);
  169.                                         if (result.message) {
  170.                                                 exporter.stopWithNotify(result.message);
  171.                                                 return;
  172.                                         }
  173.  
  174.                                         var timer = setInterval(function() {
  175.                                                 $.ajax('index.php', {
  176.                                                         method: 'POST',
  177.                                                         data: {
  178.                                                                 builder_export: 1,
  179.                                                                 builder_check: result.id,
  180.                                                         },
  181.                                                 }).done(function(r) {
  182.                                                         var result = JSON.parse(r);
  183.                                                         if (typeof result === 'undefined') return;
  184.                                                         // export status 1 is completed
  185.                                                         if (result.export_status !== 1) return;
  186.  
  187.                                                         $('<iframe/>').attr({
  188.                                                                 src: 'index.php?builder_export&builder_download&id=' +
  189.                                                                 result.id,
  190.                                                                 style: 'visibility:hidden;display:none',
  191.                                                         }).ready(function() {
  192.                                                                 $.notify({
  193.                                                                         title: 'Export Angular Version',
  194.                                                                         message: 'Angular App version exported with current configured layout.',
  195.                                                                 }, {type: 'success'});
  196.                                                                 exporter.doneLoad();
  197.                                                                 // stop the timer
  198.                                                                 clearInterval(timer);
  199.                                                         }).appendTo(_self);
  200.                                                 });
  201.                                         }, 15000);
  202.                                 });
  203.                         });
  204.                 },
  205.                 stopWithNotify: function(message, type) {
  206.                         type = type || 'danger';
  207.                         $.notify({
  208.                                 title: 'Verification failed',
  209.                                 message: message,
  210.                         }, {type: type});
  211.                         exporter.doneLoad();
  212.                 },
  213.         };
  214.  
  215.         //== Private functions
  216.         var preview = function() {
  217.                 $('[name="builder_submit"]').click(function(e) {
  218.                         e.preventDefault();
  219.                         var _self = $(this);
  220.                         $(_self).
  221.                                 addClass('m-loader m-loader--light m-loader--right').
  222.                                 closest('.m-form__actions').
  223.                                 find('.btn').
  224.                                 prop('disabled', true);
  225.  
  226.                         $.ajax('index.php?demo=' + $(_self).data('demo'), {
  227.                                 method: 'POST',
  228.                                 data: $('[name]').serialize(),
  229.                         }).done(function(r) {
  230.                                 $.notify({
  231.                                         title: 'Preview updated',
  232.                                         message: 'Preview has been updated with current configured layout.',
  233.                                 }, {type: 'success'});
  234.                         }).always(function() {
  235.                                 setTimeout(function() {
  236.                                         location.reload();
  237.                                 }, 600);
  238.                         });
  239.                 });
  240.         };
  241.  
  242.         var reset = function() {
  243.                 $('[name="builder_reset"]').click(function(e) {
  244.                         e.preventDefault();
  245.                         var _self = $(this);
  246.                         $(_self).
  247.                                 addClass('m-loader m-loader--primary m-loader--right').
  248.                                 closest('.m-form__actions').
  249.                                 find('.btn').
  250.                                 prop('disabled', true);
  251.  
  252.                         $.ajax('index.php?demo=' + $(_self).data('demo'), {
  253.                                 method: 'POST',
  254.                                 data: {
  255.                                         builder_reset: 1,
  256.                                         demo: $(_self).data('demo'),
  257.                                 },
  258.                         }).done(function(r) {
  259.                         }).always(function() {
  260.                                 location.reload();
  261.                         });
  262.                 });
  263.         };
  264.  
  265.         var keepActiveTab = function() {
  266.                 $('[href^="#m_builder_"]').click(function(e) {
  267.                         var which = $(this).attr('href');
  268.                         var btn = $('[name="builder_submit"]');
  269.                         var tab = $('[name="builder[tab]"]');
  270.                         if ($(tab).length === 0) {
  271.                                 $('<input/>').
  272.                                         attr('type', 'hidden').
  273.                                         attr('name', 'builder[tab]').
  274.                                         val(which).
  275.                                         insertBefore(btn);
  276.                         } else {
  277.                                 $(tab).val(which);
  278.                         }
  279.                 }).each(function() {
  280.                         if ($(this).hasClass('active')) {
  281.                                 var which = $(this).attr('href');
  282.                                 var btn = $('[name="builder_submit"]');
  283.                                 var tab = $('[name="builder[tab]"]');
  284.                                 if ($(tab).length === 0) {
  285.                                         $('<input/>').
  286.                                                 attr('type', 'hidden').
  287.                                                 attr('name', 'builder[tab]').
  288.                                                 val(which).
  289.                                                 insertBefore(btn);
  290.                                 } else {
  291.                                         $(tab).val(which);
  292.                                 }
  293.                         }
  294.                 });
  295.         };
  296.  
  297.         // localStorage.removeItem('envato');
  298.         window.envato = {
  299.                 apiKey: '05kxpfkxwymzzczjm75d9s3li4spg0j1',
  300.                 expires_in: '3600', // seconds
  301.                 isVerified: function() {
  302.                         // console.log(envato.getItem());
  303.                         // check token is not expired and verified
  304.                         return !envato.tokenIsExpired() && envato.getItem('verified');
  305.                 },
  306.                 reCaptchaVerified: function() {
  307.                         return $.ajax('https://keenthemes.com/metronic/preview/inc/api/envato.php?recaptcha', {
  308.                                 method: 'POST',
  309.                                 data: {
  310.                                         response: $('#g-recaptcha-response').val(),
  311.                                 },
  312.                         }).fail(function() {
  313.                                 grecaptcha.reset();
  314.                                 $('#alert-message').
  315.                                         removeClass('alert-success m--hide').
  316.                                         addClass('alert-danger').
  317.                                         html('Invalid reCaptcha validation');
  318.                         });
  319.                 },
  320.                 verifyEvent: function() {
  321.                         // click event
  322.                         $('#builder_export').click(function(e) {
  323.                                 e.preventDefault();
  324.                                 if (envato.isVerified()) return;
  325.                                 grecaptcha.reset();
  326.                                 $('#m-modal-purchase').modal('show');
  327.                                 $('#alert-message').addClass('m--hide');
  328.                         });
  329.  
  330.                         $('#submit-verify').click(function(e) {
  331.                                 e.preventDefault();
  332.                                 envato.reCaptchaVerified().done(function(response) {
  333.                                         if (response.success) {
  334.                                                 var purchaseCode = $('#purchase-code').val();
  335.                                                 envato.setItem('purchase_code', purchaseCode);
  336.                                                 envato.verifyPurchase(purchaseCode);
  337.                                         } else {
  338.                                                 grecaptcha.reset();
  339.                                                 $('#alert-message').
  340.                                                         removeClass('alert-success m--hide').
  341.                                                         addClass('alert-danger').
  342.                                                         html('Invalid reCaptcha validation');
  343.                                         }
  344.                                 });
  345.                         });
  346.  
  347.                         $('#purchase-code').keyup(function() {
  348.                                 $('#alert-message').addClass('m--hide');
  349.                         });
  350.                 },
  351.                 verifyPurchase: function(purchaseCode) {
  352.                         return $.ajax('https://marketplace.envato.com/api/edge/keenthemes/' +
  353.                                 envato.apiKey + '/verify-purchase:' +
  354.                                 purchaseCode + '.json', {
  355.                                 method: 'GET',
  356.                         }).done(function(response) {
  357.                                 if (!$.isEmptyObject(response['verify-purchase'])) {
  358.                                         envato.setItems(response['verify-purchase']);
  359.                                         envato.setItem('verified', true);
  360.  
  361.                                         // keep session is php
  362.                                         $.ajax('https://keenthemes.com/metronic/preview/inc/api/envato.php', {
  363.                                                 method: 'POST',
  364.                                                 data: envato.getItem(),
  365.                                         });
  366.  
  367.                                         $('#alert-message').
  368.                                                 removeClass('alert-danger m--hide').
  369.                                                 addClass('alert-success').
  370.                                                 html('Purchase code is successfully verified');
  371.                                 } else {
  372.                                         grecaptcha.reset();
  373.                                         $('#alert-message').
  374.                                                 removeClass('alert-success m--hide').
  375.                                                 addClass('alert-danger').
  376.                                                 html('Invalid purchase code');
  377.                                 }
  378.                         }).fail(function(e) {
  379.                                 grecaptcha.reset();
  380.                                 $('#alert-message').
  381.                                         removeClass('alert-success m--hide').
  382.                                         addClass('alert-danger').
  383.                                         html('Invalid purchase code');
  384.                         });
  385.                 },
  386.                 setItems: function(object) {
  387.                         var params = $.extend({}, envato.getItem(), object);
  388.                         localStorage.setItem('envato', JSON.stringify(params));
  389.                 },
  390.                 setItem: function(key, val) {
  391.                         var assign = {};
  392.                         assign[key] = val;
  393.                         var params = $.extend({}, envato.getItem(), assign);
  394.                         localStorage.setItem('envato', JSON.stringify(params));
  395.                 },
  396.                 getItem: function(key) {
  397.                         var params = JSON.parse(localStorage.getItem('envato'));
  398.                         if (typeof key !== 'undefined') {
  399.                                 return params !== null ? params[key] : null;
  400.                         }
  401.                         return params;
  402.                 },
  403.                 startTimer: function(now) {
  404.                         envato.setItem('created_on', now);
  405.                         setTimeout(function() {
  406.                                 localStorage.removeItem('envato');
  407.                         }, envato.expires_in * 1000);
  408.                 },
  409.                 tokenIsExpired: function() {
  410.                         var diff = new Date().getTime() - envato.getItem('created_on');
  411.                         if (typeof envato.expires_in === 'undefined' ||
  412.                                 diff >= (envato.expires_in * 1000)) {
  413.                                 localStorage.removeItem('envato');
  414.                                 return true;
  415.                         }
  416.                         return false;
  417.                 },
  418.         };
  419.  
  420.         // basic demo
  421.         var init = function() {
  422.                 exporter.init();
  423.                 keepActiveTab();
  424.                 preview();
  425.                 reset();
  426.         };
  427.  
  428.         return {
  429.                 // public functions
  430.                 init: function() {
  431.                         envato.verifyEvent();
  432.                         init();
  433.                 },
  434.         };
  435. }();
  436.  
  437. jQuery(document).ready(function() {
  438.         LayoutBuilder.init();
  439. });

Paste is for source code and general debugging text.

Login or Register to edit, delete and keep track of your pastes and more.

Raw Paste

Login or Register to edit or fork this paste. It's free.