-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathselectionmenu.min.js
5 lines (5 loc) · 2.01 KB
/
selectionmenu.min.js
1
2
3
4
5
var SelectionMenu=function(h,e){function i(a,b,d){a.addEventListener?a.addEventListener(b,d,!1):a.attachEvent&&a.attachEvent("on"+b,function(){return d.call(a,h.event)})}function k(){return h.getSelection?h.getSelection():e.selection&&e.selection.createRange?e.selection.createRange():!1}function l(a){a=a.target||a.srcElement;return a==c||(c.compareDocumentPosition?!!(c.compareDocumentPosition(a)&16):c.contains(a))}function j(a){this.id=a.id||"selection-menu";this.menuHTML=a.menuHTML;this.minimalSelection=
a.minimalSelection||5;this.container=a.container;this.handler=a.handler;this.create();this.setupEvents()}var c=null;j.addEvent=i;j.prototype={create:function(){if(!c)c=e.createElement("span"),c.id=this.id},setupEvents:function(){var a=this,b=a.container;i(b,"mousedown",function(b){a.hide(b)});i(b,"mouseup",function(b){a.insert(b);h.setTimeout(function(){a.hideIfNoSelection()},0)});a.setupMenuEvents()},setupMenuEvents:function(){var a=this;i(c,"click",function(b){a.handler.call(a,b);return!1});c.unselectable=
!0},hide:function(a){if(!a||!l(a))(a=c.parentNode)&&a.removeChild(c)},hideIfNoSelection:function(){var a=k();a&&((a.toString?a.toString():a.text).length||this.hide())},insert:function(a){if(!l(a)){var b=k();if(b){var d=b.toString?b.toString():b.text;this.selectedText=d;if(d.length<this.minimalSelection)this.hide(a);else{if(b.getRangeAt){var a=b.getRangeAt(0),f=a.startContainer,d=a.endContainer;if(!f||!d||!f.compareDocumentPosition)return;if(f.compareDocumentPosition(d)&2)d=a.startContainer;f=a.endOffset;
if(d.nodeType==1){d=d.lastChild;if(!d||d.nodeType!=3)return;f=d.data.length}var g=e.createRange();g.setStart(d,f);c.innerHTML=this.menuHTML;g.insertNode(c);b.removeRange?b.removeRange(a):b.removeAllRanges();b.addRange(a)}else if(b.duplicate)g=b.duplicate(),g.setEndPoint("StartToEnd",b),c.innerHTML=this.menuHTML,g.pasteHTML(c.outerHTML),b.select(),c=e.getElementById(id),this.setupMenuEvents();else return;this.position()}}}},position:function(){c.style.marginTop=-(c.offsetHeight+5)+"px"}};return j}(window,
document);