diff options
author | Jesús <heckyel@hyperbola.info> | 2019-08-18 21:14:58 -0500 |
---|---|---|
committer | Jesús <heckyel@hyperbola.info> | 2019-08-18 21:14:58 -0500 |
commit | 2eed7b082f83630301e51f57ca8394de228a8605 (patch) | |
tree | 1d19962d22d30f99317d9276e4bae7744fc93fc2 /public/admin/view/javascript/common.js | |
download | librecart-2eed7b082f83630301e51f57ca8394de228a8605.tar.lz librecart-2eed7b082f83630301e51f57ca8394de228a8605.tar.xz librecart-2eed7b082f83630301e51f57ca8394de228a8605.zip |
first commit
Diffstat (limited to 'public/admin/view/javascript/common.js')
-rw-r--r-- | public/admin/view/javascript/common.js | 282 |
1 files changed, 282 insertions, 0 deletions
diff --git a/public/admin/view/javascript/common.js b/public/admin/view/javascript/common.js new file mode 100644 index 0000000..eeae022 --- /dev/null +++ b/public/admin/view/javascript/common.js @@ -0,0 +1,282 @@ +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 ''; + } + } +} + +$(document).ready(function() { + //Form Submit for IE Browser + $('button[type=\'submit\']').on('click', function() { + $("form[id*='form-']").submit(); + }); + + // Highlight any found errors + $('.text-danger').each(function() { + var element = $(this).parent().parent(); + + if (element.hasClass('form-group')) { + element.addClass('has-error'); + } + }); + + // tooltips on hover + $('[data-toggle=\'tooltip\']').tooltip({container: 'body', html: true}); + + // Makes tooltips work on ajax generated content + $(document).ajaxStop(function() { + $('[data-toggle=\'tooltip\']').tooltip({container: 'body'}); + }); + + // https://github.com/opencart/opencart/issues/2595 + $.event.special.remove = { + remove: function(o) { + if (o.handler) { + o.handler.apply(this, arguments); + } + } + } + + // tooltip remove + $('[data-toggle=\'tooltip\']').on('remove', function() { + $(this).tooltip('destroy'); + }); + + // Tooltip remove fixed + $(document).on('click', '[data-toggle=\'tooltip\']', function(e) { + $('body > .tooltip').remove(); + }); + + $('#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 #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 > a').removeClass('collapsed'); + + $('#menu a[href=\'' + sessionStorage.getItem('menu') + '\']').parents('ul').addClass('in'); + + $('#menu a[href=\'' + sessionStorage.getItem('menu') + '\']').parents('li').addClass('active'); + + // Image Manager + $(document).on('click', 'a[data-toggle=\'image\']', function(e) { + var $element = $(this); + var $popover = $element.data('bs.popover'); // element has bs popover? + + e.preventDefault(); + + // destroy all image popovers + $('a[data-toggle="image"]').popover('destroy'); + + // remove flickering (do not re-add popover when clicking for removal) + if ($popover) { + return; + } + + $element.popover({ + html: true, + placement: 'right', + trigger: 'manual', + content: function() { + return '<button type="button" id="button-image" class="btn btn-primary"><i class="fa fa-pencil"></i></button> <button type="button" id="button-clear" class="btn btn-danger"><i class="fa fa-trash-o"></i></button>'; + } + }); + + $element.popover('show'); + + $('#button-image').on('click', function() { + var $button = $(this); + var $icon = $button.find('> i'); + + $('#modal-image').remove(); + + $.ajax({ + url: 'index.php?route=common/filemanager&user_token=' + getURLVar('user_token') + '&target=' + $element.parent().find('input').attr('id') + '&thumb=' + $element.attr('id'), + dataType: 'html', + beforeSend: function() { + $button.prop('disabled', true); + if ($icon.length) { + $icon.attr('class', 'fa fa-circle-o-notch fa-spin'); + } + }, + complete: function() { + $button.prop('disabled', false); + + if ($icon.length) { + $icon.attr('class', 'fa fa-pencil'); + } + }, + success: function(html) { + $('body').append('<div id="modal-image" class="modal">' + html + '</div>'); + + $('#modal-image').modal('show'); + } + }); + + $element.popover('destroy'); + }); + + $('#button-clear').on('click', function() { + $element.find('img').attr('src', $element.find('img').attr('data-placeholder')); + + $element.parent().find('input').val(''); + + $element.popover('destroy'); + }); + }); +}); + +// Autocomplete */ +(function($) { + $.fn.autocomplete = function(option) { + return this.each(function() { + var $this = $(this); + var $dropdown = $('<ul class="dropdown-menu" />'); + + this.timer = null; + this.items = []; + + $.extend(this, option); + + $this.attr('autocomplete', 'off'); + + // Focus + $this.on('focus', function() { + this.request(); + }); + + // Blur + $this.on('blur', function() { + setTimeout(function(object) { + object.hide(); + }, 200, this); + }); + + // Keydown + $this.on('keydown', function(event) { + switch(event.keyCode) { + case 27: // escape + this.hide(); + break; + default: + this.request(); + break; + } + }); + + // Click + this.click = function(event) { + event.preventDefault(); + + var value = $(event.target).parent().attr('data-value'); + + if (value && this.items[value]) { + this.select(this.items[value]); + } + } + + // Show + this.show = function() { + var pos = $this.position(); + + $dropdown.css({ + top: pos.top + $this.outerHeight(), + left: pos.left + }); + + $dropdown.show(); + } + + // Hide + this.hide = function() { + $dropdown.hide(); + } + + // Request + this.request = function() { + clearTimeout(this.timer); + + this.timer = setTimeout(function(object) { + object.source($(object).val(), $.proxy(object.response, object)); + }, 200, 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 += '<li data-value="' + json[i]['value'] + '"><a href="#">' + json[i]['label'] + '</a></li>'; + } else { + // grouped items + name = json[i]['category']; + if (!category[name]) { + category[name] = []; + } + + category[name].push(json[i]); + } + } + + for (name in category) { + html += '<li class="dropdown-header">' + name + '</li>'; + + for (j = 0; j < category[name].length; j++) { + html += '<li data-value="' + category[name][j]['value'] + '"><a href="#"> ' + category[name][j]['label'] + '</a></li>'; + } + } + } + + if (html) { + this.show(); + } else { + this.hide(); + } + + $dropdown.html(html); + } + + $dropdown.on('click', '> li > a', $.proxy(this.click, this)); + $this.after($dropdown); + }); + } +})(window.jQuery); |