function getURLVar(key) { var value = []; var query = String(document.location).split('?'); if (query[1]) { var part = query[1].split('&'); for (i = 0; i < part.length; i++) { var data = part[i].split('='); if (data[0] && data[1]) { value[data[0]] = data[1]; } } if (value[key]) { return value[key]; } else { return ''; } } } // On August 17 2021, Internet Explorer 11 (IE11) will no longer be supported by Microsoft's 365 applications and services. function isIE() { if (!!window.ActiveXObject || "ActiveXObject" in window) return true; } // Header $(document).ready(function () { // Header $('#header-notification [data-bs-toggle=\'modal\']').on('click', function (e) { e.preventDefault(); var element = this; $('#modal-notification').remove(); $.ajax({ url: $(element).attr('href'), dataType: 'html', success: function (html) { $('body').append(html); $('#modal-notification').modal('show'); } }); }); }); // Menu $(document).ready(function () { $('#button-menu').on('click', function (e) { e.preventDefault(); $('#column-left').toggleClass('active'); }); // Set last page opened on the menu $('#menu a[href]').on('click', function () { sessionStorage.setItem('menu', $(this).attr('href')); }); if (!sessionStorage.getItem('menu')) { $('#menu #menu-dashboard').addClass('active'); } else { // Sets active and open to selected page in the left column menu. $('#menu a[href=\'' + sessionStorage.getItem('menu') + '\']').parent().addClass('active'); } $('#menu a[href=\'' + sessionStorage.getItem('menu') + '\']').parents('li').children('a').removeClass('collapsed'); $('#menu a[href=\'' + sessionStorage.getItem('menu') + '\']').parents('ul').addClass('show'); $('#menu a[href=\'' + sessionStorage.getItem('menu') + '\']').parents('li').addClass('active'); }); $(document).ready(function () { // Tooltip var oc_tooltip = function () { // Get tooltip instance tooltip = bootstrap.Tooltip.getOrCreateInstance(this); if (!tooltip) { // Apply to current element tooltip.show(); } } $(document).on('mouseenter', '[data-bs-toggle=\'tooltip\']', oc_tooltip); $(document).on('click', 'button', function () { $('.tooltip').remove(); }); // Date var oc_datetimepicker = function () { $(this).daterangepicker({ singleDatePicker: true, autoApply: true, autoUpdateInput: false, locale: { format: 'YYYY-MM-DD' } }, function (start, end) { $(this.element).val(start.format('YYYY-MM-DD')); }); } $(document).on('focus', '.date', oc_datetimepicker); // Time var oc_datetimepicker = function () { $(this).daterangepicker({ singleDatePicker: true, datePicker: false, autoApply: true, autoUpdateInput: false, timePicker: true, timePicker24Hour: true, locale: { format: 'HH:mm' } }, function (start, end) { $(this.element).val(start.format('HH:mm')); }).on('show.daterangepicker', function (ev, picker) { picker.container.find('.calendar-table').hide(); }); } $(document).on('focus', '.time', oc_datetimepicker); // Date Time var oc_datetimepicker = function () { $(this).daterangepicker({ singleDatePicker: true, autoApply: true, autoUpdateInput: false, timePicker: true, timePicker24Hour: true, locale: { format: 'YYYY-MM-DD HH:mm' } }, function (start, end) { $(this.element).val(start.format('YYYY-MM-DD HH:mm')); }); } $(document).on('focus', '.datetime', oc_datetimepicker); // Alert Fade var oc_alert = function () { window.setTimeout(function () { $('.alert-dismissible').fadeTo(1000, 0, function () { $(this).remove(); }); }, 6000); } $(document).on('click', 'button', oc_alert); }); // Forms $(document).on('submit', 'form', function (e) { var element = this; if (e.originalEvent !== undefined && e.originalEvent.submitter !== undefined) { var button = e.originalEvent.submitter; } else { var button = ''; } var status = false; var ajax = $(element).attr('data-oc-toggle'); if (ajax == 'ajax') { status = true; } var ajax = $(button).attr('data-oc-toggle'); if (ajax == 'ajax') { status = true; } if (status) { e.preventDefault(); // Form attributes var form = e.target; var action = $(form).attr('action'); var method = $(form).attr('method'); if (method === undefined) { method = 'post'; } var enctype = $(form).attr('enctype'); if (enctype === undefined) { enctype = 'application/x-www-form-urlencoded'; } // Form button overrides var formaction = $(button).attr('formaction'); if (formaction !== undefined) { action = formaction; } var formmethod = $(button).attr('formmethod'); if (formmethod !== undefined) { method = formmethod; } var formenctype = $(button).attr('formenctype'); if (formenctype !== undefined) { enctype = formenctype; } if (button) { var formaction = $(button).attr('data-type'); } console.log(e); console.log('element ' + element); console.log('action ' + action); console.log('button ' + button); console.log('formaction ' + formaction); console.log('method ' + method); console.log('enctype ' + enctype); console.log($(element).serialize()); // https://github.com/opencart/opencart/issues/9690 if (typeof CKEDITOR != 'undefined') { for (instance in CKEDITOR.instances) { CKEDITOR.instances[instance].updateElement(); } } $.ajax({ url: action.replaceAll('&', '&'), type: method, data: $(form).serialize(), dataType: 'json', contentType: enctype, beforeSend: function () { $(button).button('loading'); }, complete: function () { $(button).button('reset'); }, success: function (json, textStatus) { console.log(json); console.log(textStatus); $('.alert-dismissible').remove(); $(element).find('.is-invalid').removeClass('is-invalid'); $(element).find('.invalid-feedback').removeClass('d-block'); if (json['redirect']) { location = json['redirect']; } if (typeof json['error'] == 'string') { $('#alert').prepend('
' + json['error'] + '
'); } if (typeof json['error'] == 'object') { if (json['error']['warning']) { $('#alert').prepend('
' + json['error']['warning'] + '
'); } for (key in json['error']) { $('#input-' + key.replaceAll('_', '-')).addClass('is-invalid').find('.form-control, .form-select, .form-check-input, .form-check-label').addClass('is-invalid'); $('#error-' + key.replaceAll('_', '-')).html(json['error'][key]).addClass('d-block'); } } if (json['success']) { $('#alert').prepend('
' + json['success'] + '
'); // Refresh var url = $(form).attr('data-oc-load'); var target = $(form).attr('data-oc-target'); if (url !== undefined && target !== undefined) { $(target).load(url); } } // Replace any form values that correspond to form names. for (key in json) { $(element).find('[name=\'' + key + '\']').val(json[key]); } }, error: function (xhr, ajaxOptions, thrownError) { console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); } }); } }); // Upload $(document).on('click', '[data-oc-toggle=\'upload\']', function () { var element = this; if (!$(element).prop('disabled')) { $('#form-upload').remove(); $('body').prepend(''); $('#form-upload input[name=\'file\']').trigger('click'); $('#form-upload input[name=\'file\']').on('change', function (e) { if ((this.files[0].size / 1024) > $(element).attr('data-oc-size-max')) { alert($(element).attr('data-oc-size-error')); $(this).val(''); } }); if (typeof timer != 'undefined') { clearInterval(timer); } var timer = setInterval(function () { if ($('#form-upload input[name=\'file\']').val() != '') { clearInterval(timer); $.ajax({ url: $(element).attr('data-oc-url'), type: 'post', data: new FormData($('#form-upload')[0]), dataType: 'json', cache: false, contentType: false, processData: false, beforeSend: function () { $(element).button('loading'); }, complete: function () { $(element).button('reset'); }, success: function (json) { console.log(json); if (json['error']) { alert(json['error']); } if (json['success']) { alert(json['success']); } if (json['code']) { $($(element).attr('data-oc-target')).val(json['code']); $(element).parent().find('[data-oc-toggle=\'download\'], [data-oc-toggle=\'clear\']').prop('disabled', false); } }, error: function (xhr, ajaxOptions, thrownError) { console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); } }); } }, 500); } }); $(document).on('click', '[data-oc-toggle=\'download\']', function (e) { var element = this; var value = $($(element).attr('data-oc-target')).val(); if (value != '') { location = 'index.php?route=tool/upload.download&user_token=' + getURLVar('user_token') + '&code=' + value; } }); $(document).on('click', '[data-oc-toggle=\'clear\']', function () { var element = this; // Images var thumb = $(this).attr('data-oc-thumb'); if (thumb !== undefined) { $(thumb).attr('src', $(thumb).attr('data-oc-placeholder')); } // Custom fields var download = $(element).parent().find('[data-oc-toggle=\'download\']'); if (download.length) { $(element).parent().find('[data-oc-toggle=\'download\'], [data-oc-toggle=\'clear\']').prop('disabled', true); } $($(this).attr('data-oc-target')).val(''); }); // Image Manager $(document).on('click', '[data-oc-toggle=\'image\']', function (e) { var element = this; $('#modal-image').remove(); $.ajax({ url: 'index.php?route=common/filemanager&user_token=' + getURLVar('user_token') + '&target=' + encodeURIComponent($(element).attr('data-oc-target')) + '&thumb=' + encodeURIComponent($(element).attr('data-oc-thumb')), dataType: 'html', beforeSend: function () { $(element).button('loading'); }, complete: function () { $(element).button('reset'); }, success: function (html) { $('body').append(html); var element = document.querySelector('#modal-image'); var modal = new bootstrap.Modal(element); modal.show(); } }); }); // Chain ajax calls. class Chain { constructor() { this.start = false; this.data = []; } attach(call) { this.data.push(call); if (!this.start) { this.execute(); } } execute() { if (this.data.length) { this.start = true; var call = this.data.shift(); var jqxhr = call(); jqxhr.done(function () { chain.execute(); }); } else { this.start = false; } } } var chain = new Chain(); // Autocomplete +function ($) { $.fn.autocomplete = function (option) { return this.each(function () { var element = this; var $dropdown = $('#' + $(element).attr('data-oc-target')); this.timer = null; this.items = []; $.extend(this, option); // Focus in $(element).on('focusin', function () { element.request(); }); // Focus out $(element).on('focusout', function (e) { if (!e.relatedTarget || !$(e.relatedTarget).hasClass('dropdown-item')) { $dropdown.removeClass('show'); } }); // Input $(element).on('input', function (e) { element.request(); }); // Click $dropdown.on('click', 'a', function (e) { e.preventDefault(); var value = $(this).attr('href'); if (element.items[value] !== undefined) { element.select(element.items[value]); $dropdown.removeClass('show'); } }); // Request this.request = function () { clearTimeout(this.timer); $('#autocomplete-loading').remove(); $dropdown.find('li').remove(); $dropdown.prepend('
  • '); $dropdown.addClass('show'); this.timer = setTimeout(function (object) { object.source($(object).val(), $.proxy(object.response, object)); }, 50, this); } // Response this.response = function (json) { var html = ''; var category = {}; var name; var i = 0, j = 0; if (json.length) { for (i = 0; i < json.length; i++) { // update element items this.items[json[i]['value']] = json[i]; if (!json[i]['category']) { // ungrouped items html += '
  • ' + json[i]['label'] + '
  • '; } else { // grouped items name = json[i]['category']; if (!category[name]) { category[name] = []; } category[name].push(json[i]); } } for (name in category) { html += '
  • '; for (j = 0; j < category[name].length; j++) { html += '
  • ' + category[name][j]['label'] + '
  • '; } } $dropdown.html(html); } else { $dropdown.removeClass('show'); } } }); } }(jQuery); // Button $(document).ready(function() { +function($) { $.fn.button = function(state) { return this.each(function() { var element = this; if (state == 'loading') { this.html = $(element).html(); this.state = $(element).prop('disabled'); $(element).prop('disabled', true).width($(element).width()).html(''); } if (state == 'reset') { $(element).prop('disabled', this.state).width('').html(this.html); } }); } }(jQuery); });