-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathctxmenu.min.js
More file actions
10 lines (10 loc) · 2.95 KB
/
Copy pathctxmenu.min.js
File metadata and controls
10 lines (10 loc) · 2.95 KB
1
2
3
4
5
6
7
8
9
10
/* -- DO NOT REMOVE --
* Material inspired CTXMenu 1.0 plugin
*
* Author: Dionlee Uy
* Email: dionleeuy@gmail.com
*
* @requires jQuery
* -- DO NOT REMOVE --
*/
if("undefined"==typeof jQuery)throw new Error("CTXMenu: This plugin requires jQuery");+function(e){var t=function(t,n,o){this.elem=e(t),this.options=n,this.menus=o,this.ctxwrapper=e(document.createElement(n.menuElem))},n={menu:"",action:null,divider:!1,disable:!1};t.prototype={constructor:t,create:function(t){function o(t,c,a,s){var r=a?e(document.createElement(i.options.menuElem)):c;a&&r.addClass("ctxmenu-sub"),e.each(t,function(t,c){var a=e.extend({},n,c);if(a.divider)e(document.createElement(i.options.itemElem)).addClass("ctxmenu-divider").appendTo(r);else{var u=e(document.createElement(i.options.itemElem)),m="function"==typeof a.disable?a.disable():a.disable;u.addClass("ctxmenu-item"),a.action&&!m&&u.on("click touchstart",function(e){a.action(i.elem,e),i.hide()}),m&&u.addClass("ctxmenu--disabled"),a.icon&&u.append(a.icon),e(document.createElement("span")).addClass("ctxmenu-text").text(a.menu).appendTo(u),u.appendTo(r),a.subs&&a.subs.length>0&&(u.addClass("ctxmenu--hassubs"),o(a.subs,u,!0,s))}}),a&&r.appendTo(c),s&&setTimeout(s,0)}var i=this,c=i.menus;i.ctxwrapper.addClass("ctxmenu"),i.options.compact&&i.ctxwrapper.addClass("ctxmenu-compact"),"dark"===i.options.theme&&i.ctxwrapper.addClass("ctxmenu-dark"),i.ctxwrapper.empty().appendTo("body").bind("contextmenu",function(){return!1}),o(c,i.ctxwrapper,!1,t)},show:function(t){var n=this,o=n.options.anchor,i=n.options.anchorPos,c="touchstart"===t.type,a=o?n.elem.offset().top+n.elem.outerHeight():(c?t.originalEvent.touches[0].pageY:t.clientY)+10+e("html, body").scrollTop();n.create(function(){n.ctxwrapper.css(o?i:"left",o?"left"===i?n.elem.offset().left:e(window).width()-(n.elem.offset().left+n.elem.outerWidth()):(c?t.originalEvent.touches[0].pageX:t.clientX)+10).css({top:a,"transform-origin":"top "+(o?i:"left")}),setTimeout(function(){n.ctxwrapper.addClass("ctxmenu--open")},10)})},hide:function(){var e=this;e.ctxwrapper.removeClass("ctxmenu--open"),setTimeout(function(){e.ctxwrapper.remove()},0)},destroy:function(){this.elem.removeData("ctxmenu_data")}},e.fn.ctxmenu=function(){var n=arguments;return e(this).each(function(){var o=this,i=e(o),c=e(o).data("ctxmenu_data"),a=n[0],s=n[1],r=e.extend({},e.fn.ctxmenu.defaults,!Array.isArray(s)&&s);if(!c){switch(i.data("ctxmenu_data",c=new t(this,r,Array.isArray(s)?s:a)),r.trigger){case"right-click":i.bind("contextmenu",function(e){return c.show(e),!1});break;case"click":i.on("click",function(e){c.ctxwrapper.is(":visible")||setTimeout(function(){c.show(e)},40)})}e(document).bind("mousedown.contextmenu touchstart.contextmenu",function(t){e(t.target).not(i).closest(".ctxmenu").length||c.hide()}),e(window).bind("blur",function(){c.hide()})}"string"==typeof n[0]&&c[n[0]]()})},e.fn.ctxmenu.defaults={theme:"light",compact:!1,trigger:"right-click",anchor:!1,anchorPos:"right",menuElem:"nav",itemElem:"nav-item"}}(jQuery);