1 line
109 KiB
Plaintext
1 line
109 KiB
Plaintext
{"version":3,"sources":["jquery.contextMenu.min.js"],"names":["factory","define","amd","exports","require","jQuery","$","splitAccesskey","val","k","t","split","keys","i","charAt","toUpperCase","push","inputLabel","node","id","name","menuChildren","items","$children","counter","each","label","item","$node","this","nodeName","toLowerCase","find","length","text","children","first","get","attr","disabled","callback","click","undefined","icon","type","selected","radio","value","options","html","clone","support","htmlMenuitem","window","htmlCommand","eventSelectstart","document","documentElement","ui","widget","cleanData","orig","elems","events","elem","_data","remove","triggerHandler","e","$currentTrigger","initialized","$win","namespaces","menus","types","defaults","selector","appendTo","trigger","autoHide","delay","reposition","classNames","hover","visible","notSelectable","iconEdit","iconCut","iconCopy","iconPaste","iconDelete","iconAdd","iconQuit","determinePosition","$menu","position","css","my","at","of","offset","collision","top","outerHeight","left","outerWidth","opt","x","y","call","bottom","scrollTop","height","right","scrollLeft","width","positionSubmenu","zIndex","animation","duration","show","hide","noop","hoveract","timer","pageX","pageY","zindex","$t","zin","$tt","Math","max","parseInt","parent","indexOf","prop","handle","abortevent","preventDefault","stopImmediatePropagation","contextmenu","$this","data","originalEvent","mouseButton","hasClass","build","built","extend","isEmptyObject","console","error","log","Error","$trigger","op","create","showMenu","hasOwnProperty","isFunction","currentTarget","menuContainer","srcElement","target","originalTarget","offsetX","offsetY","Event","mousedown","is","button","mouseup","removeData","mouseenter","$related","relatedTarget","$document","closest","on","mousemove","setTimeout","off","mouseleave","clearTimeout","layerClick","root","$window","triggerAction","elementFromPoint","$layer","has","one","contextMenu","keyStop","isInput","stopPropagation","key","targetZIndex","getZIndexOfTriggerTarget","style","offsetParent","parentElement","keyCode","shiftKey","$selected","blur","$parent","itemdata","String","fromCharCode","accesskeys","prevItem","$s","$prev","prev","last","$round","itemMouseleave","itemMouseenter","$input","focus","nextItem","$next","next","focusInput","contextMenuRoot","blurInput","menuMouseenter","hovering","menuMouseleave","itemClick","contextMenuKey","callbacks","Object","prototype","update","inputClick","hideMenu","force","focusItem","addClass","join","not","removeClass","filter","blurItem","additionalZValue","layer","pos","createNameNode","$name","_accesskey","_beforeAccesskey","append","createTextNode","_afterAccesskey","className","$label","accesskey","ak","aks","matched","match","RegExp","commands","hasTypes","inputs","prependTo","_icon","body","resize","nested","display","ceil","minWidth","maxWidth","addBack","$item","insertBefore","fn","operation","$o","context","isPlainObject","o","$context","_hasContext","ns","contextmenu:hide.contextMenu","prevcommand.contextMenu","nextcommand.contextMenu","contextmenu.contextMenu","mouseenter.contextMenu","mouseleave.contextMenu","mouseup.contextMenu","contextmenu:focus.contextMenu","contextmenu:blur.contextMenu","$visibleMenu","fromMenu","setInputValues","getInputValues","element"],"mappings":"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","file":"jquery.contextMenu.min.js","sourcesContent":["/*!\n * jQuery contextMenu v2.1.0 - Plugin for simple contextMenu handling\n *\n * Version: v2.1.0\n *\n * Authors: Björn Brala (SWIS.nl), Rodney Rehm, Addy Osmani (patches for FF)\n * Web: http://swisnl.github.io/jQuery-contextMenu/\n *\n * Copyright (c) 2011-2016 SWIS BV and contributors\n *\n * Licensed under\n * MIT License http://www.opensource.org/licenses/mit-license\n * GPL v3 http://opensource.org/licenses/GPL-3.0\n *\n * Date: 2016-02-28T09:41:24.636Z\n */\n\n(function (factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as anonymous module.\n define(['jquery'], factory);\n } else if (typeof exports === 'object') {\n // Node / CommonJS\n factory(require('jquery'));\n } else {\n // Browser globals.\n factory(jQuery);\n }\n})(function ($) {\n\n 'use strict';\n\n // TODO: -\n // ARIA stuff: menuitem, menuitemcheckbox und menuitemradio\n // create <menu> structure if $.support[htmlCommand || htmlMenuitem] and !opt.disableNative\n\n // determine html5 compatibility\n $.support.htmlMenuitem = ('HTMLMenuItemElement' in window);\n $.support.htmlCommand = ('HTMLCommandElement' in window);\n $.support.eventSelectstart = ('onselectstart' in document.documentElement);\n /* // should the need arise, test for css user-select\n $.support.cssUserSelect = (function(){\n var t = false,\n e = document.createElement('div');\n\n $.each('Moz|Webkit|Khtml|O|ms|Icab|'.split('|'), function(i, prefix) {\n var propCC = prefix + (prefix ? 'U' : 'u') + 'serSelect',\n prop = (prefix ? ('-' + prefix.toLowerCase() + '-') : '') + 'user-select';\n\n e.style.cssText = prop + ': text;';\n if (e.style[propCC] == 'text') {\n t = true;\n return false;\n }\n\n return true;\n });\n\n return t;\n })();\n */\n\n /* jshint ignore:start */\n if (!$.ui || !$.widget) {\n // duck punch $.cleanData like jQueryUI does to get that remove event\n $.cleanData = (function (orig) {\n return function (elems) {\n var events, elem, i;\n for (i = 0; elems[i] != null; i++) {\n elem = elems[i];\n try {\n // Only trigger remove when necessary to save time\n events = $._data(elem, 'events');\n if (events && events.remove) {\n $(elem).triggerHandler('remove');\n }\n\n // Http://bugs.jquery.com/ticket/8235\n } catch (e) {}\n }\n orig(elems);\n };\n })($.cleanData);\n }\n /* jshint ignore:end */\n\n var // currently active contextMenu trigger\n $currentTrigger = null,\n // is contextMenu initialized with at least one menu?\n initialized = false,\n // window handle\n $win = $(window),\n // number of registered menus\n counter = 0,\n // mapping selector to namespace\n namespaces = {},\n // mapping namespace to options\n menus = {},\n // custom command type handlers\n types = {},\n // default values\n defaults = {\n // selector of contextMenu trigger\n selector: null,\n // where to append the menu to\n appendTo: null,\n // method to trigger context menu [\"right\", \"left\", \"hover\"]\n trigger: 'right',\n // hide menu when mouse leaves trigger / menu elements\n autoHide: false,\n // ms to wait before showing a hover-triggered context menu\n delay: 200,\n // flag denoting if a second trigger should simply move (true) or rebuild (false) an open menu\n // as long as the trigger happened on one of the trigger-element's child nodes\n reposition: true,\n\n // Default classname configuration to be able avoid conflicts in frameworks\n classNames : {\n\n hover: 'context-menu-hover', // Item hover\n disabled: 'context-menu-disabled', // Item disabled\n visible: 'context-menu-visible', // Item visible\n notSelectable: 'context-menu-not-selectable', // Item not selectable\n\n icon: 'context-menu-icon',\n iconEdit: 'context-menu-icon-edit',\n iconCut: 'context-menu-icon-cut',\n iconCopy: 'context-menu-icon-copy',\n iconPaste: 'context-menu-icon-paste',\n iconDelete: 'context-menu-icon-delete',\n iconAdd: 'context-menu-icon-add',\n iconQuit: 'context-menu-icon-quit'\n },\n\n // determine position to show menu at\n determinePosition: function ($menu) {\n // position to the lower middle of the trigger element\n if ($.ui && $.ui.position) {\n // .position() is provided as a jQuery UI utility\n // (...and it won't work on hidden elements)\n $menu.css('display', 'block').position({\n my: 'center top',\n at: 'center bottom',\n of: this,\n offset: '0 5',\n collision: 'fit'\n }).css('display', 'none');\n } else {\n // determine contextMenu position\n var offset = this.offset();\n offset.top += this.outerHeight();\n offset.left += this.outerWidth() / 2 - $menu.outerWidth() / 2;\n $menu.css(offset);\n }\n },\n // position menu\n position: function (opt, x, y) {\n var offset;\n // determine contextMenu position\n if (!x && !y) {\n opt.determinePosition.call(this, opt.$menu);\n return;\n } else if (x === 'maintain' && y === 'maintain') {\n // x and y must not be changed (after re-show on command click)\n offset = opt.$menu.position();\n } else {\n // x and y are given (by mouse event)\n offset = {top: y, left: x};\n }\n\n // correct offset if viewport demands it\n var bottom = $win.scrollTop() + $win.height(),\n right = $win.scrollLeft() + $win.width(),\n height = opt.$menu.outerHeight(),\n width = opt.$menu.outerWidth();\n\n if (offset.top + height > bottom) {\n offset.top -= height;\n }\n\n if (offset.top < 0) {\n offset.top = 0;\n }\n\n if (offset.left + width > right) {\n offset.left -= width;\n }\n\n if (offset.left < 0) {\n offset.left = 0;\n }\n\n opt.$menu.css(offset);\n },\n // position the sub-menu\n positionSubmenu: function ($menu) {\n if ($.ui && $.ui.position) {\n // .position() is provided as a jQuery UI utility\n // (...and it won't work on hidden elements)\n $menu.css('display', 'block').position({\n my: 'left top',\n at: 'right top',\n of: this,\n collision: 'flipfit fit'\n }).css('display', '');\n } else {\n // determine contextMenu position\n var offset = {\n top: 0,\n left: this.outerWidth()\n };\n $menu.css(offset);\n }\n },\n // offset to add to zIndex\n zIndex: 1,\n // show hide animation settings\n animation: {\n duration: 50,\n show: 'slideDown',\n hide: 'slideUp'\n },\n // events\n events: {\n show: $.noop,\n hide: $.noop\n },\n // default callback\n callback: null,\n // list of contextMenu items\n items: {}\n },\n // mouse position for hover activation\n hoveract = {\n timer: null,\n pageX: null,\n pageY: null\n },\n // determine zIndex\n zindex = function ($t) {\n var zin = 0,\n $tt = $t;\n\n while (true) {\n zin = Math.max(zin, parseInt($tt.css('z-index'), 10) || 0);\n $tt = $tt.parent();\n if (!$tt || !$tt.length || 'html body'.indexOf($tt.prop('nodeName').toLowerCase()) > -1) {\n break;\n }\n }\n return zin;\n },\n // event handlers\n handle = {\n // abort anything\n abortevent: function (e) {\n e.preventDefault();\n e.stopImmediatePropagation();\n },\n // contextmenu show dispatcher\n contextmenu: function (e) {\n var $this = $(this);\n\n // disable actual context-menu if we are using the right mouse button as the trigger\n if (e.data.trigger === 'right') {\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n\n // abort native-triggered events unless we're triggering on right click\n if ((e.data.trigger !== 'right' && e.data.trigger !== 'demand') && e.originalEvent) {\n return;\n }\n\n // Let the current contextmenu decide if it should show or not based on its own trigger settings\n if (e.mouseButton !== undefined && e.data) {\n if (!(e.data.trigger === 'left' && e.mouseButton === 0) && !(e.data.trigger === 'right' && e.mouseButton === 2)) {\n // Mouse click is not valid.\n return;\n }\n }\n\n // abort event if menu is visible for this trigger\n if ($this.hasClass('context-menu-active')) {\n return;\n }\n\n if (!$this.hasClass('context-menu-disabled')) {\n // theoretically need to fire a show event at <menu>\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/interactive-elements.html#context-menus\n // var evt = jQuery.Event(\"show\", { data: data, pageX: e.pageX, pageY: e.pageY, relatedTarget: this });\n // e.data.$menu.trigger(evt);\n\n $currentTrigger = $this;\n if (e.data.build) {\n var built = e.data.build($currentTrigger, e);\n // abort if build() returned false\n if (built === false) {\n return;\n }\n\n // dynamically build menu on invocation\n e.data = $.extend(true, {}, defaults, e.data, built || {});\n\n // abort if there are no items to display\n if (!e.data.items || $.isEmptyObject(e.data.items)) {\n // Note: jQuery captures and ignores errors from event handlers\n if (window.console) {\n (console.error || console.log).call(console, 'No items specified to show in contextMenu');\n }\n\n throw new Error('No Items specified');\n }\n\n // backreference for custom command type creation\n e.data.$trigger = $currentTrigger;\n\n op.create(e.data);\n }\n var showMenu = false;\n for (var item in e.data.items) {\n if (e.data.items.hasOwnProperty(item)) {\n var visible;\n if ($.isFunction(e.data.items[item].visible)) {\n visible = e.data.items[item].visible.call($(e.currentTarget), item, e.data);\n } else if (typeof item.visible !== 'undefined') {\n visible = e.data.items[item].visible === true;\n } else {\n visible = true;\n }\n if (visible) {\n showMenu = true;\n }\n }\n }\n if (showMenu) {\n // show menu\n\t\t var menuContainer = (e.data.appendTo === null ? $('body') : $(e.data.appendTo));\n\t\t var srcElement = e.target || e.srcElement || e.originalTarget;\n if (e.offsetX !== undefined && e.offsetY !== undefined) {\n op.show.call($this, e.data,\n $(srcElement).offset().left - menuContainer.offset().left + e.offsetX,\n $(srcElement).offset().top - menuContainer.offset().top + e.offsetY);\n } else {\n op.show.call($this, e.data, e.pageX, e.pageY);\n }\n }\n }\n },\n // contextMenu left-click trigger\n click: function (e) {\n e.preventDefault();\n e.stopImmediatePropagation();\n $(this).trigger($.Event('contextmenu', {data: e.data, pageX: e.pageX, pageY: e.pageY}));\n },\n // contextMenu right-click trigger\n mousedown: function (e) {\n // register mouse down\n var $this = $(this);\n\n // hide any previous menus\n if ($currentTrigger && $currentTrigger.length && !$currentTrigger.is($this)) {\n $currentTrigger.data('contextMenu').$menu.trigger('contextmenu:hide');\n }\n\n // activate on right click\n if (e.button === 2) {\n $currentTrigger = $this.data('contextMenuActive', true);\n }\n },\n // contextMenu right-click trigger\n mouseup: function (e) {\n // show menu\n var $this = $(this);\n if ($this.data('contextMenuActive') && $currentTrigger && $currentTrigger.length && $currentTrigger.is($this) && !$this.hasClass('context-menu-disabled')) {\n e.preventDefault();\n e.stopImmediatePropagation();\n $currentTrigger = $this;\n $this.trigger($.Event('contextmenu', {data: e.data, pageX: e.pageX, pageY: e.pageY}));\n }\n\n $this.removeData('contextMenuActive');\n },\n // contextMenu hover trigger\n mouseenter: function (e) {\n var $this = $(this),\n $related = $(e.relatedTarget),\n $document = $(document);\n\n // abort if we're coming from a menu\n if ($related.is('.context-menu-list') || $related.closest('.context-menu-list').length) {\n return;\n }\n\n // abort if a menu is shown\n if ($currentTrigger && $currentTrigger.length) {\n return;\n }\n\n hoveract.pageX = e.pageX;\n hoveract.pageY = e.pageY;\n hoveract.data = e.data;\n $document.on('mousemove.contextMenuShow', handle.mousemove);\n hoveract.timer = setTimeout(function () {\n hoveract.timer = null;\n $document.off('mousemove.contextMenuShow');\n $currentTrigger = $this;\n $this.trigger($.Event('contextmenu', {\n data: hoveract.data,\n pageX: hoveract.pageX,\n pageY: hoveract.pageY\n }));\n }, e.data.delay);\n },\n // contextMenu hover trigger\n mousemove: function (e) {\n hoveract.pageX = e.pageX;\n hoveract.pageY = e.pageY;\n },\n // contextMenu hover trigger\n mouseleave: function (e) {\n // abort if we're leaving for a menu\n var $related = $(e.relatedTarget);\n if ($related.is('.context-menu-list') || $related.closest('.context-menu-list').length) {\n return;\n }\n\n try {\n clearTimeout(hoveract.timer);\n } catch (e) {\n }\n\n hoveract.timer = null;\n },\n // click on layer to hide contextMenu\n layerClick: function (e) {\n var $this = $(this),\n root = $this.data('contextMenuRoot'),\n button = e.button,\n x = e.pageX,\n y = e.pageY,\n target,\n offset;\n\n e.preventDefault();\n e.stopImmediatePropagation();\n\n setTimeout(function () {\n var $window;\n var triggerAction = ((root.trigger === 'left' && button === 0) || (root.trigger === 'right' && button === 2));\n\n // find the element that would've been clicked, wasn't the layer in the way\n if (document.elementFromPoint && root.$layer) {\n root.$layer.hide();\n target = document.elementFromPoint(x - $win.scrollLeft(), y - $win.scrollTop());\n root.$layer.show();\n }\n\n if (root.reposition && triggerAction) {\n if (document.elementFromPoint) {\n if (root.$trigger.is(target) || root.$trigger.has(target).length) {\n root.position.call(root.$trigger, root, x, y);\n return;\n }\n } else {\n offset = root.$trigger.offset();\n $window = $(window);\n // while this looks kinda awful, it's the best way to avoid\n // unnecessarily calculating any positions\n offset.top += $window.scrollTop();\n if (offset.top <= e.pageY) {\n offset.left += $window.scrollLeft();\n if (offset.left <= e.pageX) {\n offset.bottom = offset.top + root.$trigger.outerHeight();\n if (offset.bottom >= e.pageY) {\n offset.right = offset.left + root.$trigger.outerWidth();\n if (offset.right >= e.pageX) {\n // reposition\n root.position.call(root.$trigger, root, x, y);\n return;\n }\n }\n }\n }\n }\n }\n\n if (target && triggerAction) {\n root.$trigger.one('contextmenu:hidden', function () {\n $(target).contextMenu({ x: x, y: y, button: button });\n });\n }\n\n root.$menu.trigger('contextmenu:hide');\n }, 50);\n },\n // key handled :hover\n keyStop: function (e, opt) {\n if (!opt.isInput) {\n e.preventDefault();\n }\n\n e.stopPropagation();\n },\n key: function (e) {\n\n var opt = {};\n\n // Only get the data from $currentTrigger if it exists\n if ($currentTrigger) {\n opt = $currentTrigger.data('contextMenu') || {};\n }\n // If the trigger happen on a element that are above the contextmenu do this\n if (opt.zIndex === undefined) {\n opt.zIndex = 0;\n\t\t\t\t}\n var targetZIndex = 0;\n var getZIndexOfTriggerTarget = function (target) {\n\t\t\t\t\tif (target.style.zIndex !== '') {\n\t\t\t\t\t\ttargetZIndex = target.style.zIndex;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (target.offsetParent !== null && target.offsetParent !== undefined) {\n\t\t\t\t\t\t\tgetZIndexOfTriggerTarget(target.offsetParent);\n\t\t\t\t\t\t} \n\t\t\t\t\t\telse if (target.parentElement !== null && target.parentElement !== undefined) {\n\t\t\t\t\t\t\tgetZIndexOfTriggerTarget(target.parentElement);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n };\n getZIndexOfTriggerTarget(e.target);\n // If targetZIndex is heigher then opt.zIndex dont progress any futher.\n // This is used to make sure that if you are using a dialog with a input / textarea / contenteditable div\n // and its above the contextmenu it wont steal keys events\n if (targetZIndex > opt.zIndex) {\n return;\n\t\t\t\t}\n switch (e.keyCode) {\n case 9:\n case 38: // up\n handle.keyStop(e, opt);\n // if keyCode is [38 (up)] or [9 (tab) with shift]\n if (opt.isInput) {\n if (e.keyCode === 9 && e.shiftKey) {\n e.preventDefault();\n if(opt.$selected) {\n opt.$selected.find('input, textarea, select').blur();\n }\n opt.$menu.trigger('prevcommand');\n return;\n } else if (e.keyCode === 38 && opt.$selected.find('input, textarea, select').prop('type') === 'checkbox') {\n // checkboxes don't capture this key\n e.preventDefault();\n return;\n }\n } else if (e.keyCode !== 9 || e.shiftKey) {\n opt.$menu.trigger('prevcommand');\n return;\n }\n break;\n // omitting break;\n // case 9: // tab - reached through omitted break;\n case 40: // down\n handle.keyStop(e, opt);\n if (opt.isInput) {\n if (e.keyCode === 9) {\n e.preventDefault();\n if(opt.$selected) {\n opt.$selected.find('input, textarea, select').blur();\n }\n opt.$menu.trigger('nextcommand');\n return;\n } else if (e.keyCode === 40 && opt.$selected.find('input, textarea, select').prop('type') === 'checkbox') {\n // checkboxes don't capture this key\n e.preventDefault();\n return;\n }\n } else {\n opt.$menu.trigger('nextcommand');\n return;\n }\n break;\n\n case 37: // left\n handle.keyStop(e, opt);\n if (opt.isInput || !opt.$selected || !opt.$selected.length) {\n break;\n }\n\n if (!opt.$selected.parent().hasClass('context-menu-root')) {\n var $parent = opt.$selected.parent().parent();\n opt.$selected.trigger('contextmenu:blur');\n opt.$selected = $parent;\n return;\n }\n break;\n\n case 39: // right\n handle.keyStop(e, opt);\n if (opt.isInput || !opt.$selected || !opt.$selected.length) {\n break;\n }\n\n var itemdata = opt.$selected.data('contextMenu') || {};\n if (itemdata.$menu && opt.$selected.hasClass('context-menu-submenu')) {\n opt.$selected = null;\n itemdata.$selected = null;\n itemdata.$menu.trigger('nextcommand');\n return;\n }\n break;\n\n case 35: // end\n case 36: // home\n if (opt.$selected && opt.$selected.find('input, textarea, select').length) {\n return;\n } else {\n (opt.$selected && opt.$selected.parent() || opt.$menu)\n .children(':not(.' + opt.classNames.disabled + ', .' + opt.classNames.notSelectable + ')')[e.keyCode === 36 ? 'first' : 'last']()\n .trigger('contextmenu:focus');\n e.preventDefault();\n return;\n }\n break;\n\n case 13: // enter\n handle.keyStop(e, opt);\n if (opt.isInput) {\n if (opt.$selected && !opt.$selected.is('textarea, select')) {\n e.preventDefault();\n return;\n }\n break;\n }\n if (typeof opt.$selected !== 'undefined' && opt.$selected !== null) {\n opt.$selected.trigger('mouseup');\n }\n return;\n\n case 32: // space\n case 33: // page up\n case 34: // page down\n // prevent browser from scrolling down while menu is visible\n handle.keyStop(e, opt);\n return;\n\n case 27: // esc\n handle.keyStop(e, opt);\n opt.$menu.trigger('contextmenu:hide');\n return;\n\n default: // 0-9, a-z\n var k = (String.fromCharCode(e.keyCode)).toUpperCase();\n if (opt.accesskeys && opt.accesskeys[k]) {\n // according to the specs accesskeys must be invoked immediately\n opt.accesskeys[k].$node.trigger(opt.accesskeys[k].$menu ? 'contextmenu:focus' : 'mouseup');\n return;\n }\n break;\n }\n // pass event to selected item,\n // stop propagation to avoid endless recursion\n e.stopPropagation();\n if (typeof opt.$selected !== 'undefined' && opt.$selected !== null) {\n opt.$selected.trigger(e);\n }\n },\n // select previous possible command in menu\n prevItem: function (e) {\n e.stopPropagation();\n var opt = $(this).data('contextMenu') || {};\n var root = $(this).data('contextMenuRoot') || {};\n\n // obtain currently selected menu\n if (opt.$selected) {\n var $s = opt.$selected;\n opt = opt.$selected.parent().data('contextMenu') || {};\n opt.$selected = $s;\n }\n\n var $children = opt.$menu.children(),\n $prev = !opt.$selected || !opt.$selected.prev().length ? $children.last() : opt.$selected.prev(),\n $round = $prev;\n\n // skip disabled or hidden elements\n while ($prev.hasClass(root.classNames.disabled) || $prev.hasClass(root.classNames.notSelectable) || $prev.is(':hidden')) {\n if ($prev.prev().length) {\n $prev = $prev.prev();\n } else {\n $prev = $children.last();\n }\n if ($prev.is($round)) {\n // break endless loop\n return;\n }\n }\n\n // leave current\n if (opt.$selected) {\n handle.itemMouseleave.call(opt.$selected.get(0), e);\n }\n\n // activate next\n handle.itemMouseenter.call($prev.get(0), e);\n\n // focus input\n var $input = $prev.find('input, textarea, select');\n if ($input.length) {\n $input.focus();\n }\n },\n // select next possible command in menu\n nextItem: function (e) {\n e.stopPropagation();\n var opt = $(this).data('contextMenu') || {};\n var root = $(this).data('contextMenuRoot') || {};\n\n // obtain currently selected menu\n if (opt.$selected) {\n var $s = opt.$selected;\n opt = opt.$selected.parent().data('contextMenu') || {};\n opt.$selected = $s;\n }\n\n var $children = opt.$menu.children(),\n $next = !opt.$selected || !opt.$selected.next().length ? $children.first() : opt.$selected.next(),\n $round = $next;\n\n // skip disabled\n while ($next.hasClass(root.classNames.disabled) || $next.hasClass(root.classNames.notSelectable) || $next.is(':hidden')) {\n if ($next.next().length) {\n $next = $next.next();\n } else {\n $next = $children.first();\n }\n if ($next.is($round)) {\n // break endless loop\n return;\n }\n }\n\n // leave current\n if (opt.$selected) {\n handle.itemMouseleave.call(opt.$selected.get(0), e);\n }\n\n // activate next\n handle.itemMouseenter.call($next.get(0), e);\n\n // focus input\n var $input = $next.find('input, textarea, select');\n if ($input.length) {\n $input.focus();\n }\n },\n // flag that we're inside an input so the key handler can act accordingly\n focusInput: function () {\n var $this = $(this).closest('.context-menu-item'),\n data = $this.data(),\n opt = data.contextMenu,\n root = data.contextMenuRoot;\n\n root.$selected = opt.$selected = $this;\n root.isInput = opt.isInput = true;\n },\n // flag that we're inside an input so the key handler can act accordingly\n blurInput: function () {\n var $this = $(this).closest('.context-menu-item'),\n data = $this.data(),\n opt = data.contextMenu,\n root = data.contextMenuRoot;\n\n root.isInput = opt.isInput = false;\n },\n // :hover on menu\n menuMouseenter: function () {\n var root = $(this).data().contextMenuRoot;\n root.hovering = true;\n },\n // :hover on menu\n menuMouseleave: function (e) {\n var root = $(this).data().contextMenuRoot;\n if (root.$layer && root.$layer.is(e.relatedTarget)) {\n root.hovering = false;\n }\n },\n // :hover done manually so key handling is possible\n itemMouseenter: function (e) {\n var $this = $(this),\n data = $this.data(),\n opt = data.contextMenu,\n root = data.contextMenuRoot;\n\n root.hovering = true;\n\n // abort if we're re-entering\n if (e && root.$layer && root.$layer.is(e.relatedTarget)) {\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n\n // make sure only one item is selected\n (opt.$menu ? opt : root).$menu\n .children('.' + root.classNames.hover).trigger('contextmenu:blur')\n .children('.hover').trigger('contextmenu:blur');\n\n if ($this.hasClass(root.classNames.disabled) || $this.hasClass(root.classNames.notSelectable)) {\n opt.$selected = null;\n return;\n }\n\n $this.trigger('contextmenu:focus');\n },\n // :hover done manually so key handling is possible\n itemMouseleave: function (e) {\n var $this = $(this),\n data = $this.data(),\n opt = data.contextMenu,\n root = data.contextMenuRoot;\n\n if (root !== opt && root.$layer && root.$layer.is(e.relatedTarget)) {\n if (typeof root.$selected !== 'undefined' && root.$selected !== null) {\n root.$selected.trigger('contextmenu:blur');\n }\n e.preventDefault();\n e.stopImmediatePropagation();\n root.$selected = opt.$selected = opt.$node;\n return;\n }\n\n $this.trigger('contextmenu:blur');\n },\n // contextMenu item click\n itemClick: function (e) {\n var $this = $(this),\n data = $this.data(),\n opt = data.contextMenu,\n root = data.contextMenuRoot,\n key = data.contextMenuKey,\n callback;\n\n // abort if the key is unknown or disabled or is a menu\n if (!opt.items[key] || $this.is('.' + root.classNames.disabled + ', .context-menu-submenu, .context-menu-separator, .' + root.classNames.notSelectable)) {\n return;\n }\n\n e.preventDefault();\n e.stopImmediatePropagation();\n\n if ($.isFunction(root.callbacks[key]) && Object.prototype.hasOwnProperty.call(root.callbacks, key)) {\n // item-specific callback\n callback = root.callbacks[key];\n } else if ($.isFunction(root.callback)) {\n // default callback\n callback = root.callback;\n } else {\n // no callback, no action\n return;\n }\n\n // hide menu if callback doesn't stop that\n if (callback.call(root.$trigger, key, root) !== false) {\n root.$menu.trigger('contextmenu:hide');\n } else if (root.$menu.parent().length) {\n op.update.call(root.$trigger, root);\n }\n },\n // ignore click events on input elements\n inputClick: function (e) {\n e.stopImmediatePropagation();\n },\n // hide <menu>\n hideMenu: function (e, data) {\n var root = $(this).data('contextMenuRoot');\n op.hide.call(root.$trigger, root, data && data.force);\n },\n // focus <command>\n focusItem: function (e) {\n e.stopPropagation();\n var $this = $(this),\n data = $this.data(),\n opt = data.contextMenu,\n root = data.contextMenuRoot;\n\n $this\n .addClass([root.classNames.hover, root.classNames.visible].join(' '))\n // select other items and included items\n .parent().find('.context-menu-item').not($this)\n .removeClass(root.classNames.visible)\n .filter('.' + root.classNames.hover)\n .trigger('contextmenu:blur');\n\n // remember selected\n opt.$selected = root.$selected = $this;\n\n // position sub-menu - do after show so dumb $.ui.position can keep up\n if (opt.$node) {\n root.positionSubmenu.call(opt.$node, opt.$menu);\n }\n },\n // blur <command>\n blurItem: function (e) {\n e.stopPropagation();\n var $this = $(this),\n data = $this.data(),\n opt = data.contextMenu,\n root = data.contextMenuRoot;\n\n if (opt.autoHide) { // for tablets and touch screens this needs to remain\n $this.removeClass(root.classNames.visible);\n }\n $this.removeClass(root.classNames.hover);\n opt.$selected = null;\n }\n },\n // operations\n op = {\n show: function (opt, x, y) {\n var $trigger = $(this),\n css = {};\n\n // hide any open menus\n $('#context-menu-layer').trigger('mousedown');\n\n // backreference for callbacks\n opt.$trigger = $trigger;\n\n // show event\n if (opt.events.show.call($trigger, opt) === false) {\n $currentTrigger = null;\n return;\n }\n\n // create or update context menu\n op.update.call($trigger, opt);\n\n // position menu\n opt.position.call($trigger, opt, x, y);\n\n // make sure we're in front\n if (opt.zIndex) {\n var additionalZValue = opt.zIndex;\n // If opt.zIndex is a function, call the function to get the right zIndex.\n if (typeof opt.zIndex === 'function') {\n additionalZValue = opt.zIndex.call($trigger, opt);\n }\n css.zIndex = zindex($trigger) + additionalZValue;\n }\n\n // add layer\n op.layer.call(opt.$menu, opt, css.zIndex);\n\n // adjust sub-menu zIndexes\n opt.$menu.find('ul').css('zIndex', css.zIndex + 1);\n\n // position and show context menu\n opt.$menu.css(css)[opt.animation.show](opt.animation.duration, function () {\n $trigger.trigger('contextmenu:visible');\n });\n // make options available and set state\n $trigger\n .data('contextMenu', opt)\n .addClass('context-menu-active');\n\n // register key handler\n $(document).off('keydown.contextMenu').on('keydown.contextMenu', handle.key);\n // register autoHide handler\n if (opt.autoHide) {\n // mouse position handler\n $(document).on('mousemove.contextMenuAutoHide', function (e) {\n // need to capture the offset on mousemove,\n // since the page might've been scrolled since activation\n var pos = $trigger.offset();\n pos.right = pos.left + $trigger.outerWidth();\n pos.bottom = pos.top + $trigger.outerHeight();\n\n if (opt.$layer && !opt.hovering && (!(e.pageX >= pos.left && e.pageX <= pos.right) || !(e.pageY >= pos.top && e.pageY <= pos.bottom))) {\n /* Additional hover check after short time, you might just miss the edge of the menu */\n setTimeout(function () {\n if (!opt.hovering) { opt.$menu.trigger('contextmenu:hide'); }\n }, 50);\n }\n });\n }\n },\n hide: function (opt, force) {\n var $trigger = $(this);\n if (!opt) {\n opt = $trigger.data('contextMenu') || {};\n }\n\n // hide event\n if (!force && opt.events && opt.events.hide.call($trigger, opt) === false) {\n return;\n }\n\n // remove options and revert state\n $trigger\n .removeData('contextMenu')\n .removeClass('context-menu-active');\n\n if (opt.$layer) {\n // keep layer for a bit so the contextmenu event can be aborted properly by opera\n setTimeout((function ($layer) {\n return function () {\n $layer.remove();\n };\n })(opt.$layer), 10);\n\n try {\n delete opt.$layer;\n } catch (e) {\n opt.$layer = null;\n }\n }\n\n // remove handle\n $currentTrigger = null;\n // remove selected\n opt.$menu.find('.' + opt.classNames.hover).trigger('contextmenu:blur');\n opt.$selected = null;\n // collapse all submenus\n opt.$menu.find('.' + opt.classNames.visible).removeClass(opt.classNames.visible);\n // unregister key and mouse handlers\n // $(document).off('.contextMenuAutoHide keydown.contextMenu'); // http://bugs.jquery.com/ticket/10705\n $(document).off('.contextMenuAutoHide').off('keydown.contextMenu');\n // hide menu\n if(opt.$menu){\n opt.$menu[opt.animation.hide](opt.animation.duration, function () {\n // tear down dynamically built menu after animation is completed.\n if (opt.build) {\n opt.$menu.remove();\n $.each(opt, function (key) {\n switch (key) {\n case 'ns':\n case 'selector':\n case 'build':\n case 'trigger':\n return true;\n\n default:\n opt[key] = undefined;\n try {\n delete opt[key];\n } catch (e) {\n }\n return true;\n }\n });\n }\n\n setTimeout(function () {\n $trigger.trigger('contextmenu:hidden');\n }, 10);\n });\n }\n },\n create: function (opt, root) {\n if (root === undefined) {\n root = opt;\n }\n // create contextMenu\n opt.$menu = $('<ul class=\"context-menu-list\"></ul>').addClass(opt.className || '').data({\n 'contextMenu': opt,\n 'contextMenuRoot': root\n });\n\n $.each(['callbacks', 'commands', 'inputs'], function (i, k) {\n opt[k] = {};\n if (!root[k]) {\n root[k] = {};\n }\n });\n\n if(!root.accesskeys){\n root.accesskeys = {};\n }\n\n function createNameNode(item) {\n var $name = $('<span></span>');\n if (item._accesskey) {\n if (item._beforeAccesskey) {\n $name.append(document.createTextNode(item._beforeAccesskey));\n }\n $('<span></span>')\n .addClass('context-menu-accesskey')\n .text(item._accesskey)\n .appendTo($name);\n if (item._afterAccesskey) {\n $name.append(document.createTextNode(item._afterAccesskey));\n }\n } else {\n $name.text(item.name);\n }\n return $name;\n }\n\n // create contextMenu items\n $.each(opt.items, function (key, item) {\n var $t = $('<li class=\"context-menu-item\"></li>').addClass(item.className || ''),\n $label = null,\n $input = null;\n\n // iOS needs to see a click-event bound to an element to actually\n // have the TouchEvents infrastructure trigger the click event\n $t.on('click', $.noop);\n\n // Make old school string seperator a real item so checks wont be\n // akward later.\n if (typeof item === 'string') {\n item = { type : 'cm_seperator' };\n }\n\n item.$node = $t.data({\n 'contextMenu': opt,\n 'contextMenuRoot': root,\n 'contextMenuKey': key\n });\n\n // register accesskey\n // NOTE: the accesskey attribute should be applicable to any element, but Safari5 and Chrome13 still can't do that\n if (typeof item.accesskey !== 'undefined') {\n var aks = splitAccesskey(item.accesskey);\n for (var i = 0, ak; ak = aks[i]; i++) {\n if (!root.accesskeys[ak]) {\n root.accesskeys[ak] = item;\n var matched = item.name.match(new RegExp('^(.*?)(' + ak + ')(.*)$', 'i'));\n if (matched) {\n item._beforeAccesskey = matched[1];\n item._accesskey = matched[2];\n item._afterAccesskey = matched[3];\n }\n break;\n }\n }\n }\n\n if (item.type && types[item.type]) {\n // run custom type handler\n types[item.type].call($t, item, opt, root);\n // register commands\n $.each([opt, root], function (i, k) {\n k.commands[key] = item;\n if ($.isFunction(item.callback)) {\n k.callbacks[key] = item.callback;\n }\n });\n } else {\n // add label for input\n if (item.type === 'cm_seperator') {\n $t.addClass('context-menu-separator ' + root.classNames.notSelectable);\n } else if (item.type === 'html') {\n $t.addClass('context-menu-html ' + root.classNames.notSelectable);\n } else if (item.type) {\n $label = $('<label></label>').appendTo($t);\n createNameNode(item).appendTo($label);\n\n $t.addClass('context-menu-input');\n opt.hasTypes = true;\n $.each([opt, root], function (i, k) {\n k.commands[key] = item;\n k.inputs[key] = item;\n });\n } else if (item.items) {\n item.type = 'sub';\n }\n\n switch (item.type) {\n case 'cm_seperator':\n break;\n\n case 'text':\n $input = $('<input type=\"text\" value=\"1\" name=\"\" value=\"\">')\n .attr('name', 'context-menu-input-' + key)\n .val(item.value || '')\n .appendTo($label);\n break;\n\n case 'textarea':\n $input = $('<textarea name=\"\"></textarea>')\n .attr('name', 'context-menu-input-' + key)\n .val(item.value || '')\n .appendTo($label);\n\n if (item.height) {\n $input.height(item.height);\n }\n break;\n\n case 'checkbox':\n $input = $('<input type=\"checkbox\" value=\"1\" name=\"\" value=\"\">')\n .attr('name', 'context-menu-input-' + key)\n .val(item.value || '')\n .prop('checked', !!item.selected)\n .prependTo($label);\n break;\n\n case 'radio':\n $input = $('<input type=\"radio\" value=\"1\" name=\"\" value=\"\">')\n .attr('name', 'context-menu-input-' + item.radio)\n .val(item.value || '')\n .prop('checked', !!item.selected)\n .prependTo($label);\n break;\n\n case 'select':\n $input = $('<select name=\"\">')\n .attr('name', 'context-menu-input-' + key)\n .appendTo($label);\n if (item.options) {\n $.each(item.options, function (value, text) {\n $('<option></option>').val(value).text(text).appendTo($input);\n });\n $input.val(item.selected);\n }\n break;\n\n case 'sub':\n createNameNode(item).appendTo($t);\n\n item.appendTo = item.$node;\n op.create(item, root);\n $t.data('contextMenu', item).addClass('context-menu-submenu');\n item.callback = null;\n break;\n\n case 'html':\n $(item.html).appendTo($t);\n break;\n\n default:\n $.each([opt, root], function (i, k) {\n k.commands[key] = item;\n if ($.isFunction(item.callback)) {\n k.callbacks[key] = item.callback;\n }\n });\n createNameNode(item).appendTo($t);\n break;\n }\n\n // disable key listener in <input>\n if (item.type && item.type !== 'sub' && item.type !== 'html' && item.type !== 'cm_seperator') {\n $input\n .on('focus', handle.focusInput)\n .on('blur', handle.blurInput);\n\n if (item.events) {\n $input.on(item.events, opt);\n }\n }\n\n // add icons\n if (item.icon) {\n if ($.isFunction(item.icon)) {\n item._icon = item.icon.call(this, this, $t, key, item);\n } else {\n item._icon = root.classNames.icon + ' ' + root.classNames.icon + '-' + item.icon;\n }\n $t.addClass(item._icon);\n }\n }\n\n // cache contained elements\n item.$input = $input;\n item.$label = $label;\n\n // attach item to menu\n $t.appendTo(opt.$menu);\n\n // Disable text selection\n if (!opt.hasTypes && $.support.eventSelectstart) {\n // browsers support user-select: none,\n // IE has a special event for text-selection\n // browsers supporting neither will not be preventing text-selection\n $t.on('selectstart.disableTextSelect', handle.abortevent);\n }\n });\n // attach contextMenu to <body> (to bypass any possible overflow:hidden issues on parents of the trigger element)\n if (!opt.$node) {\n opt.$menu.css('display', 'none').addClass('context-menu-root');\n }\n opt.$menu.appendTo(opt.appendTo || document.body);\n },\n resize: function ($menu, nested) {\n // determine widths of submenus, as CSS won't grow them automatically\n // position:absolute within position:absolute; min-width:100; max-width:200; results in width: 100;\n // kinda sucks hard...\n\n // determine width of absolutely positioned element\n $menu.css({position: 'absolute', display: 'block'});\n // don't apply yet, because that would break nested elements' widths\n $menu.data('width', Math.ceil($menu.outerWidth()));\n // reset styles so they allow nested elements to grow/shrink naturally\n $menu.css({\n position: 'static',\n minWidth: '0px',\n maxWidth: '100000px'\n });\n // identify width of nested menus\n $menu.find('> li > ul').each(function () {\n op.resize($(this), true);\n });\n // reset and apply changes in the end because nested\n // elements' widths wouldn't be calculatable otherwise\n if (!nested) {\n $menu.find('ul').addBack().css({\n position: '',\n display: '',\n minWidth: '',\n maxWidth: ''\n }).outerWidth(function () {\n return $(this).data('width');\n });\n }\n },\n update: function (opt, root) {\n var $trigger = this;\n if (root === undefined) {\n root = opt;\n op.resize(opt.$menu);\n }\n // re-check disabled for each item\n opt.$menu.children().each(function () {\n var $item = $(this),\n key = $item.data('contextMenuKey'),\n item = opt.items[key],\n disabled = ($.isFunction(item.disabled) && item.disabled.call($trigger, key, root)) || item.disabled === true,\n visible;\n if ($.isFunction(item.visible)) {\n visible = item.visible.call($trigger, key, root);\n } else if (typeof item.visible !== 'undefined') {\n visible = item.visible === true;\n } else {\n visible = true;\n }\n $item[visible ? 'show' : 'hide']();\n\n // dis- / enable item\n $item[disabled ? 'addClass' : 'removeClass'](root.classNames.disabled);\n\n if ($.isFunction(item.icon)) {\n $item.removeClass(item._icon);\n item._icon = item.icon.call(this, $trigger, $item, key, item);\n $item.addClass(item._icon);\n }\n\n if (item.type) {\n // dis- / enable input elements\n $item.find('input, select, textarea').prop('disabled', disabled);\n\n // update input states\n switch (item.type) {\n case 'text':\n case 'textarea':\n item.$input.val(item.value || '');\n break;\n\n case 'checkbox':\n case 'radio':\n item.$input.val(item.value || '').prop('checked', !!item.selected);\n break;\n\n case 'select':\n item.$input.val(item.selected || '');\n break;\n }\n }\n\n if (item.$menu) {\n // update sub-menu\n op.update.call($trigger, item, root);\n }\n });\n },\n layer: function (opt, zIndex) {\n // add transparent layer for click area\n // filter and background for Internet Explorer, Issue #23\n var $layer = opt.$layer = $('<div id=\"context-menu-layer\" style=\"position:fixed; z-index:' + zIndex + '; top:0; left:0; opacity: 0; filter: alpha(opacity=0); background-color: #000;\"></div>')\n .css({height: $win.height(), width: $win.width(), display: 'block'})\n .data('contextMenuRoot', opt)\n .insertBefore(this)\n .on('contextmenu', handle.abortevent)\n .on('mousedown', handle.layerClick);\n\n // IE6 doesn't know position:fixed;\n if (document.body.style.maxWidth === undefined) { // IE6 doesn't support maxWidth\n $layer.css({\n 'position': 'absolute',\n 'height': $(document).height()\n });\n }\n\n return $layer;\n }\n };\n\n // split accesskey according to http://www.whatwg.org/specs/web-apps/current-work/multipage/editing.html#assigned-access-key\n function splitAccesskey(val) {\n var t = val.split(/\\s+/),\n keys = [];\n\n for (var i = 0, k; k = t[i]; i++) {\n k = k.charAt(0).toUpperCase(); // first character only\n // theoretically non-accessible characters should be ignored, but different systems, different keyboard layouts, ... screw it.\n // a map to look up already used access keys would be nice\n keys.push(k);\n }\n\n return keys;\n }\n\n// handle contextMenu triggers\n $.fn.contextMenu = function (operation) {\n var $t = this, $o = operation;\n if (this.length > 0) { // this is not a build on demand menu\n if (operation === undefined) {\n this.first().trigger('contextmenu');\n } else if (operation.x !== undefined && operation.y !== undefined) {\n this.first().trigger($.Event('contextmenu', { pageX: operation.x, pageY: operation.y, mouseButton: operation.button }));\n } else if (operation === 'hide') {\n var $menu = this.first().data('contextMenu') ? this.first().data('contextMenu').$menu : null;\n if($menu){\n $menu.trigger('contextmenu:hide');\n }\n } else if (operation === 'destroy') {\n $.contextMenu('destroy', {context: this});\n } else if ($.isPlainObject(operation)) {\n operation.context = this;\n $.contextMenu('create', operation);\n } else if (operation) {\n this.removeClass('context-menu-disabled');\n } else if (!operation) {\n this.addClass('context-menu-disabled');\n }\n } else {\n $.each(menus, function () {\n if (this.selector === $t.selector) {\n $o.data = this;\n\n $.extend($o.data, {trigger: 'demand'});\n }\n });\n\n handle.contextmenu.call($o.target, $o);\n }\n\n return this;\n };\n\n // manage contextMenu instances\n $.contextMenu = function (operation, options) {\n if (typeof operation !== 'string') {\n options = operation;\n operation = 'create';\n }\n\n if (typeof options === 'string') {\n options = {selector: options};\n } else if (options === undefined) {\n options = {};\n }\n\n // merge with default options\n var o = $.extend(true, {}, defaults, options || {});\n var $document = $(document);\n var $context = $document;\n var _hasContext = false;\n\n if (!o.context || !o.context.length) {\n o.context = document;\n } else {\n // you never know what they throw at you...\n $context = $(o.context).first();\n o.context = $context.get(0);\n _hasContext = o.context !== document;\n }\n\n switch (operation) {\n case 'create':\n // no selector no joy\n if (!o.selector) {\n throw new Error('No selector specified');\n }\n // make sure internal classes are not bound to\n if (o.selector.match(/.context-menu-(list|item|input)($|\\s)/)) {\n throw new Error('Cannot bind to selector \"' + o.selector + '\" as it contains a reserved className');\n }\n if (!o.build && (!o.items || $.isEmptyObject(o.items))) {\n throw new Error('No Items specified');\n }\n counter++;\n o.ns = '.contextMenu' + counter;\n if (!_hasContext) {\n namespaces[o.selector] = o.ns;\n }\n menus[o.ns] = o;\n\n // default to right click\n if (!o.trigger) {\n o.trigger = 'right';\n }\n\n if (!initialized) {\n // make sure item click is registered first\n $document\n .on({\n 'contextmenu:hide.contextMenu': handle.hideMenu,\n 'prevcommand.contextMenu': handle.prevItem,\n 'nextcommand.contextMenu': handle.nextItem,\n 'contextmenu.contextMenu': handle.abortevent,\n 'mouseenter.contextMenu': handle.menuMouseenter,\n 'mouseleave.contextMenu': handle.menuMouseleave\n }, '.context-menu-list')\n .on('mouseup.contextMenu', '.context-menu-input', handle.inputClick)\n .on({\n 'mouseup.contextMenu': handle.itemClick,\n 'contextmenu:focus.contextMenu': handle.focusItem,\n 'contextmenu:blur.contextMenu': handle.blurItem,\n 'contextmenu.contextMenu': handle.abortevent,\n 'mouseenter.contextMenu': handle.itemMouseenter,\n 'mouseleave.contextMenu': handle.itemMouseleave\n }, '.context-menu-item');\n\n initialized = true;\n }\n\n // engage native contextmenu event\n $context\n .on('contextmenu' + o.ns, o.selector, o, handle.contextmenu);\n\n if (_hasContext) {\n // add remove hook, just in case\n $context.on('remove' + o.ns, function () {\n $(this).contextMenu('destroy');\n });\n }\n\n switch (o.trigger) {\n case 'hover':\n $context\n .on('mouseenter' + o.ns, o.selector, o, handle.mouseenter)\n .on('mouseleave' + o.ns, o.selector, o, handle.mouseleave);\n break;\n\n case 'left':\n $context.on('click' + o.ns, o.selector, o, handle.click);\n break;\n /*\n default:\n // http://www.quirksmode.org/dom/events/contextmenu.html\n $document\n .on('mousedown' + o.ns, o.selector, o, handle.mousedown)\n .on('mouseup' + o.ns, o.selector, o, handle.mouseup);\n break;\n */\n }\n\n // create menu\n if (!o.build) {\n op.create(o);\n }\n break;\n\n case 'destroy':\n var $visibleMenu;\n if (_hasContext) {\n // get proper options\n var context = o.context;\n $.each(menus, function (ns, o) {\n if (o.context !== context) {\n return true;\n }\n\n $visibleMenu = $('.context-menu-list').filter(':visible');\n if ($visibleMenu.length && $visibleMenu.data().contextMenuRoot.$trigger.is($(o.context).find(o.selector))) {\n $visibleMenu.trigger('contextmenu:hide', {force: true});\n }\n\n try {\n if (menus[o.ns].$menu) {\n menus[o.ns].$menu.remove();\n }\n\n delete menus[o.ns];\n } catch (e) {\n menus[o.ns] = null;\n }\n\n $(o.context).off(o.ns);\n\n return true;\n });\n } else if (!o.selector) {\n $document.off('.contextMenu .contextMenuAutoHide');\n $.each(menus, function (ns, o) {\n $(o.context).off(o.ns);\n });\n\n namespaces = {};\n menus = {};\n counter = 0;\n initialized = false;\n\n $('#context-menu-layer, .context-menu-list').remove();\n } else if (namespaces[o.selector]) {\n $visibleMenu = $('.context-menu-list').filter(':visible');\n if ($visibleMenu.length && $visibleMenu.data().contextMenuRoot.$trigger.is(o.selector)) {\n $visibleMenu.trigger('contextmenu:hide', {force: true});\n }\n\n try {\n if (menus[namespaces[o.selector]].$menu) {\n menus[namespaces[o.selector]].$menu.remove();\n }\n\n delete menus[namespaces[o.selector]];\n } catch (e) {\n menus[namespaces[o.selector]] = null;\n }\n\n $document.off(namespaces[o.selector]);\n }\n break;\n\n case 'html5':\n // if <command> or <menuitem> are not handled by the browser,\n // or options was a bool true,\n // initialize $.contextMenu for them\n if ((!$.support.htmlCommand && !$.support.htmlMenuitem) || (typeof options === 'boolean' && options)) {\n $('menu[type=\"context\"]').each(function () {\n if (this.id) {\n $.contextMenu({\n selector: '[contextmenu=' + this.id + ']',\n items: $.contextMenu.fromMenu(this)\n });\n }\n }).css('display', 'none');\n }\n break;\n\n default:\n throw new Error('Unknown operation \"' + operation + '\"');\n }\n\n return this;\n };\n\n// import values into <input> commands\n $.contextMenu.setInputValues = function (opt, data) {\n if (data === undefined) {\n data = {};\n }\n\n $.each(opt.inputs, function (key, item) {\n switch (item.type) {\n case 'text':\n case 'textarea':\n item.value = data[key] || '';\n break;\n\n case 'checkbox':\n item.selected = data[key] ? true : false;\n break;\n\n case 'radio':\n item.selected = (data[item.radio] || '') === item.value;\n break;\n\n case 'select':\n item.selected = data[key] || '';\n break;\n }\n });\n };\n\n// export values from <input> commands\n $.contextMenu.getInputValues = function (opt, data) {\n if (data === undefined) {\n data = {};\n }\n\n $.each(opt.inputs, function (key, item) {\n switch (item.type) {\n case 'text':\n case 'textarea':\n case 'select':\n data[key] = item.$input.val();\n break;\n\n case 'checkbox':\n data[key] = item.$input.prop('checked');\n break;\n\n case 'radio':\n if (item.$input.prop('checked')) {\n data[item.radio] = item.value;\n }\n break;\n }\n });\n\n return data;\n };\n\n// find <label for=\"xyz\">\n function inputLabel(node) {\n return (node.id && $('label[for=\"' + node.id + '\"]').val()) || node.name;\n }\n\n// convert <menu> to items object\n function menuChildren(items, $children, counter) {\n if (!counter) {\n counter = 0;\n }\n\n $children.each(function () {\n var $node = $(this),\n node = this,\n nodeName = this.nodeName.toLowerCase(),\n label,\n item;\n\n // extract <label><input>\n if (nodeName === 'label' && $node.find('input, textarea, select').length) {\n label = $node.text();\n $node = $node.children().first();\n node = $node.get(0);\n nodeName = node.nodeName.toLowerCase();\n }\n\n /*\n * <menu> accepts flow-content as children. that means <embed>, <canvas> and such are valid menu items.\n * Not being the sadistic kind, $.contextMenu only accepts:\n * <command>, <menuitem>, <hr>, <span>, <p> <input [text, radio, checkbox]>, <textarea>, <select> and of course <menu>.\n * Everything else will be imported as an html node, which is not interfaced with contextMenu.\n */\n\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/commands.html#concept-command\n switch (nodeName) {\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/interactive-elements.html#the-menu-element\n case 'menu':\n item = {name: $node.attr('label'), items: {}};\n counter = menuChildren(item.items, $node.children(), counter);\n break;\n\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/commands.html#using-the-a-element-to-define-a-command\n case 'a':\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/commands.html#using-the-button-element-to-define-a-command\n case 'button':\n item = {\n name: $node.text(),\n disabled: !!$node.attr('disabled'),\n callback: (function () {\n return function () {\n $node.click();\n };\n })()\n };\n break;\n\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/commands.html#using-the-command-element-to-define-a-command\n\n case 'menuitem':\n case 'command':\n switch ($node.attr('type')) {\n case undefined:\n case 'command':\n case 'menuitem':\n item = {\n name: $node.attr('label'),\n disabled: !!$node.attr('disabled'),\n icon: $node.attr('icon'),\n callback: (function () {\n return function () {\n $node.click();\n };\n })()\n };\n break;\n\n case 'checkbox':\n item = {\n type: 'checkbox',\n disabled: !!$node.attr('disabled'),\n name: $node.attr('label'),\n selected: !!$node.attr('checked')\n };\n break;\n case 'radio':\n item = {\n type: 'radio',\n disabled: !!$node.attr('disabled'),\n name: $node.attr('label'),\n radio: $node.attr('radiogroup'),\n value: $node.attr('id'),\n selected: !!$node.attr('checked')\n };\n break;\n\n default:\n item = undefined;\n }\n break;\n\n case 'hr':\n item = '-------';\n break;\n\n case 'input':\n switch ($node.attr('type')) {\n case 'text':\n item = {\n type: 'text',\n name: label || inputLabel(node),\n disabled: !!$node.attr('disabled'),\n value: $node.val()\n };\n break;\n\n case 'checkbox':\n item = {\n type: 'checkbox',\n name: label || inputLabel(node),\n disabled: !!$node.attr('disabled'),\n selected: !!$node.attr('checked')\n };\n break;\n\n case 'radio':\n item = {\n type: 'radio',\n name: label || inputLabel(node),\n disabled: !!$node.attr('disabled'),\n radio: !!$node.attr('name'),\n value: $node.val(),\n selected: !!$node.attr('checked')\n };\n break;\n\n default:\n item = undefined;\n break;\n }\n break;\n\n case 'select':\n item = {\n type: 'select',\n name: label || inputLabel(node),\n disabled: !!$node.attr('disabled'),\n selected: $node.val(),\n options: {}\n };\n $node.children().each(function () {\n item.options[this.value] = $(this).text();\n });\n break;\n\n case 'textarea':\n item = {\n type: 'textarea',\n name: label || inputLabel(node),\n disabled: !!$node.attr('disabled'),\n value: $node.val()\n };\n break;\n\n case 'label':\n break;\n\n default:\n item = {type: 'html', html: $node.clone(true)};\n break;\n }\n\n if (item) {\n counter++;\n items['key' + counter] = item;\n }\n });\n\n return counter;\n }\n\n// convert html5 menu\n $.contextMenu.fromMenu = function (element) {\n var $this = $(element),\n items = {};\n\n menuChildren(items, $this.children());\n\n return items;\n };\n\n// make defaults accessible\n $.contextMenu.defaults = defaults;\n $.contextMenu.types = types;\n// export internal functions - undocumented, for hacking only!\n $.contextMenu.handle = handle;\n $.contextMenu.op = op;\n $.contextMenu.menus = menus;\n\n\n});\n"],"sourceRoot":"/source/"} |