Path: blob/main/website/GAUSS/js/context.js
2941 views
/*1* Context.js2* Copyright Jacob Kelley3* MIT License4*/56var context = context || (function () {78var options = {9fadeSpeed: 100,10filter: function ($obj) {11// Modify $obj, Do not return12},13above: 'auto',14preventDoubleContext: true,15compress: false16};1718function initialize(opts) {1920options = $.extend({}, options, opts);2122$(document).on('click', 'html', function () {23$('.dropdown-context').fadeOut(options.fadeSpeed, function(){24$('.dropdown-context').css({display:''}).find('.drop-left').removeClass('drop-left');25});26});27if(options.preventDoubleContext){28$(document).on('contextmenu', '.dropdown-context', function (e) {29e.preventDefault();30});31}32$(document).on('mouseenter', '.dropdown-submenu', function(){33var $sub = $(this).find('.dropdown-context-sub:first'),34subWidth = $sub.width(),35subLeft = $sub.offset().left,36collision = (subWidth+subLeft) > window.innerWidth;37if(collision){38$sub.addClass('drop-left');39}40});4142}4344function updateOptions(opts){45options = $.extend({}, options, opts);46}4748function buildMenu(data, id, subMenu) {49var subClass = (subMenu) ? ' dropdown-context-sub' : '',50compressed = options.compress ? ' compressed-context' : '',51$menu = $('<ul class="dropdown-menu dropdown-context' + subClass + compressed+'" id="dropdown-' + id + '"></ul>');52var i = 0, linkTarget = '';53for(i; i<data.length; i++) {54if (typeof data[i].divider !== 'undefined') {55$menu.append('<li class="divider"></li>');56} else if (typeof data[i].header !== 'undefined') {57$menu.append('<li class="nav-header">' + data[i].header + '</li>');58} else {59if (typeof data[i].href == 'undefined') {60data[i].href = '#';61}62if (typeof data[i].target !== 'undefined') {63linkTarget = ' target="'+data[i].target+'"';64}65if (typeof data[i].subMenu !== 'undefined') {66$sub = ('<li class="dropdown-submenu"><a tabindex="-1" href="' + data[i].href + '">' + data[i].text + '</a></li>');67} else {68$sub = $('<li><a tabindex="-1" href="' + data[i].href + '"'+linkTarget+'>' + data[i].text + '</a></li>');69}70if (typeof data[i].action !== 'undefined') {71var actiond = new Date(),72actionID = 'event-' + actiond.getTime() * Math.floor(Math.random()*100000),73eventAction = data[i].action;74$sub.find('a').attr('id', actionID);75$('#' + actionID).addClass('context-event');76$(document).on('click', '#' + actionID, eventAction);77}78$menu.append($sub);79if (typeof data[i].subMenu != 'undefined') {80var subMenuData = buildMenu(data[i].subMenu, id, true);81$menu.find('li:last').append(subMenuData);82}83}84if (typeof options.filter == 'function') {85options.filter($menu.find('li:last'));86}87}88return $menu;89}9091function addContext(selector, data) {9293var d = new Date(),94id = d.getTime(),95$menu = buildMenu(data, id);9697$('body').append($menu);9899100$(document).on('contextmenu', selector, function (e) {101e.preventDefault();102e.stopPropagation();103104$('.dropdown-context:not(.dropdown-context-sub)').hide();105106$dd = $('#dropdown-' + id);107if (typeof options.above == 'boolean' && options.above) {108$dd.addClass('dropdown-context-up').css({109top: e.pageY - 20 - $('#dropdown-' + id).height(),110left: e.pageX - 13111}).fadeIn(options.fadeSpeed);112} else if (typeof options.above == 'string' && options.above == 'auto') {113$dd.removeClass('dropdown-context-up');114var autoH = $dd.height() + 12;115if ((e.pageY + autoH) > $('html').height()) {116$dd.addClass('dropdown-context-up').css({117top: e.pageY - 20 - autoH,118left: e.pageX - 13119}).fadeIn(options.fadeSpeed);120} else {121$dd.css({122top: e.pageY + 10,123left: e.pageX - 13124}).fadeIn(options.fadeSpeed);125}126}127});128}129130function destroyContext(selector) {131$(document).off('contextmenu', selector).off('click', '.context-event');132}133134return {135init: initialize,136settings: updateOptions,137attach: addContext,138destroy: destroyContext139};140})();141142