diff -r 318533413200 -r a1707c607eec src/pyams_skin/resources/js/myams-menus.js --- a/src/pyams_skin/resources/js/myams-menus.js Sun Jul 19 02:02:20 2020 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,163 +0,0 @@ -/** - * MyAMS menus management - */ -(function($, globals) { - - var ams = globals.MyAMS; - - $.fn.extend({ - - /** - * Context menu handler - */ - contextMenu: function(settings) { - - function getMenuPosition(mouse, direction, scrollDir) { - var win = $(window)[direction](), - menu = $(settings.menuSelector)[direction](), - position = mouse; - // opening menu would pass the side of the page - if (mouse + menu > win && menu < mouse) { - position -= menu; - } - return position; - } - - return this.each(function () { - - // Open context menu - $('a', $(settings.menuSelector)).each(function() { - $(this).data('ams-context-menu', true); - }); - $(this).on("contextmenu", function (e) { - // return native menu if pressing control - if (e.ctrlKey) { - return; - } - // open menu - $(settings.menuSelector).data("invokedOn", $(e.target)) - .show() - .css({ - position: 'fixed', - left: getMenuPosition(e.clientX, 'width', 'scrollLeft') - 10, - top: getMenuPosition(e.clientY, 'height', 'scrollTop') - 10 - }) - .off('click') - .on('click', function (e) { - $(this).hide(); - var invokedOn = $(this).data("invokedOn"); - var selectedMenu = $(e.target); - settings.menuSelected.call(this, invokedOn, selectedMenu); - ams.event && ams.event.stop(e); - }); - return false; - }); - - // make sure menu closes on any click - $(document).click(function () { - $(settings.menuSelector).hide(); - }); - }); - }, - - /* - * Main menus manager - */ - myams_menu: function(options) { - // Extend our default options with those provided - var defaults = { - accordion : true, - speed : 200, - closedSign : '', - openedSign : '' - }; - var settings = $.extend({}, defaults, options); - - // Assign current element to variable, in this case is UL element - var menu = $(this); - - // Add a mark [+] to a multilevel menu - menu.find("LI").each(function() { - var menuItem = $(this); - if (menuItem.find("UL").size() > 0) { - - // add the multilevel sign next to the link - menuItem.find("A:first") - .append("" + settings.closedSign + ""); - - // avoid jumping to the top of the page when the href is an # - var firstLink = menuItem.find("A:first"); - if (firstLink.attr('href') === "#") { - firstLink.click(function() { - return false; - }); - } - } - }); - - // Open active level - menu.find("LI.active").each(function() { - var activeParent = $(this).parents('UL'); - var activeItem = activeParent.parent('LI'); - activeParent.slideDown(settings.speed); - activeItem.find("b:first").html(settings.openedSign); - activeItem.addClass("open"); - }); - - menu.find("LI A").on('click', function() { - var link = $(this); - if (link.hasClass('active')) { - return; - } - var href = link.attr('href').replace(/^#/,''); - var parentUL = link.parent().find("UL"); - if (settings.accordion) { - var parents = link.parent().parents("UL"); - var visible = menu.find("UL:visible"); - visible.each(function(visibleIndex) { - var close = true; - parents.each(function(parentIndex) { - if (parents[parentIndex] === visible[visibleIndex]) { - close = false; - return false; - } - }); - if (close) { - if (parentUL !== visible[visibleIndex]) { - var visibleItem = $(visible[visibleIndex]); - if (href || !visibleItem.hasClass('active')) { - visibleItem.slideUp(settings.speed, function () { - $(this).parent("LI") - .removeClass('open') - .find("B:first") - .delay(settings.speed) - .html(settings.closedSign); - }); - } - } - } - }); - } - var firstUL = link.parent().find("UL:first"); - if (!href && firstUL.is(":visible") && !firstUL.hasClass("active")) { - firstUL.slideUp(settings.speed, function() { - link.parent("LI") - .removeClass("open") - .find("B:first") - .delay(settings.speed) - .html(settings.closedSign); - }); - } else /*if (link.attr('href') !== location.hash)*/ { - firstUL.slideDown(settings.speed, function() { - link.parent("LI") - .addClass("open") - .find("B:first") - .delay(settings.speed) - .html(settings.openedSign); - }); - } - }); - } - }); - -})(jQuery, this);