Parchment.Plugins.Link={type:"button",attributes_whitelist:{a:{rel:/nofollow/,href:/\.*/,title:/\.*/}},init:function(){this.parchment.editor.addEvents({keydown:function(h){if((h.meta||h.control)&&h.key=="k"){h.stop();this.addLink()}}.bind(this),"click:relay(a)":function(i,h){clearTimeout(this.hidetoolbar);this.toolbar.addClass("on");var j=h.getCoordinates();this.toolbar.setStyles({top:j.top-this.toolbar.getCoordinates().height,left:j.left});this.toolbar.store("a",h)}.bind(this),"mouseout:relay(a)":function(i,h){this.hidetoolbar=setTimeout(function(){this.toolbar.removeClass("on")}.bind(this),500)}.bind(this)});var f=function(){if(!b.hasClass("on")){return}var h=b.get("data-filter")=="user"?"@":"#";b.removeClass("on");this.parchment.restoreSelection();if(this.parchment.browser.mozilla){this.parchment.editor.focus()}document.execCommand("delete",false,null);this.parchment.insertHTML(h+e.get("value"));a.reset()}.bind(this);var b=new Element("div.parchment-2-toolbar.link-autocomplete").inject(document.body);var d=new Element("div.label").inject(b);new Element("span.wiki",{text:"Link to a page"}).inject(d);new Element("span.user",{text:"Call out a user"}).inject(d);var e=new Element("input").inject(b);new Element("a.close",{text:"x",events:{click:f}}).inject(b);var c=new Element("div.disable").inject(b);new Element("a",{text:"Click to disable this feature for this session.",title:"Disable the quick-linking feature until the next time you open your browser.",events:{click:function(){sessionStorage.setItem("parchment-quick-link-disabled",true);f()}}}).inject(c);var a=new VinesAutocomplete(e,"/search/autocomplete/",{filters:SEARCH_INDEXED_MODELS,className:"parchment-2-link-autocomplete"});e.addEvents({keyup:function(h){if(h.key=="esc"){f()}}});a.addEvents({onSelection:function(h,i){b.removeClass("on");var j=i.get("value");if(h){if(h.type.toLowerCase()=="user"){j="<span class='js-whiskey-reply-user-profile' id='"+h.id+"'><strong>@"+h.name+"</strong></span>"}else{j='<a href="'+h.url+'">'+h.name+"</a>"}}this.parchment.restoreSelection();if(this.parchment.browser.mozilla){this.parchment.editor.focus()}document.execCommand("delete",false,null);this.parchment.insertHTML(j+"&nbsp;");a.reset()}.bind(this)});var g=function(l){var k=this.parchment.getSelectionObject(),i=this.parchment.getRangeObject(k),n=i.commonAncestorContainer;this.parchment.insertHTML('<a id="qlink">&hellip;</a>');var h=document.getElementById("qlink");i.selectNode(h);k.removeAllRanges();k.addRange(i);this.parchment.saveSelection();var j=h.getCoordinates();b.setStyles({top:j.bottom,left:j.left-5}).addClass("on").set("data-filter",l);a.element.filters.getElements("input").removeProperty("checked");var m=a.element.filters;if(l=="wiki"){m=m.getElements(".default input")}else{if(l=="user"){m=m.getElements("#filter-user")}}m.setProperty("checked","checked");e.focus()}.bind(this);this.parchment.editor.addEvents({focus:f,keypress:function(h){if(!sessionStorage.getItem("parchment-quick-link-disabled")){switch(String.fromCharCode(h.event.charCode||h.event.which)){case"@":if(this.parchment.options.toolbar!="wikid"){g("user")}h.stop();break;case"#":g("wiki");h.stop();break}}}.bind(this)});this.toolbar=this.buildToolbar()},callback:function(){this.addLink()},buildToolbar:function(){var d=new Element("div",{"class":"parchment-2-toolbar link"}).inject(document.body);d.addEvents({mouseover:function(){clearTimeout(this.hidetoolbar)}.bind(this),mouseout:function(){this.hidetoolbar=setTimeout(function(){this.toolbar.removeClass("on")}.bind(this),500)}.bind(this)});var c=new Element("button",{text:"Go to link",type:"button"}).inject(d),b=new Element("button",{text:"Remove",type:"button"}).inject(d),a=new Element("button",{text:"Change",type:"button"}).inject(d);c.addEvent("click",function(){this.toolbar.removeClass("on");window.open(this.toolbar.retrieve("a").href,"name")}.bind(this));b.addEvent("click",function(){this.toolbar.removeClass("on");var e=this.parchment.getSelectionObject(),f=this.parchment.getRangeObject(e);f.selectNode(this.toolbar.retrieve("a"));e.removeAllRanges();e.addRange(f);document.execCommand("unlink",null,null)}.bind(this));a.addEvent("click",function(){this.toolbar.removeClass("on");var e=this.parchment.getSelectionObject(),f=this.parchment.getRangeObject(e);f.selectNode(this.toolbar.retrieve("a"));e.removeAllRanges();e.addRange(f);this.parchment.saveSelection();this.addLink(this.toolbar.retrieve("a").get("href"),true)}.bind(this));return d},addLink:function(c,f){var d=this.parchment.getSelectionObject(),b=this.parchment.getRangeObject(d),e=b.cloneContents().textContent;if(this.validateUrl(e)&&!f){document.execCommand("createLink",null,e);return}if(this.link_panel){this.link_panel.show()}else{str="";str+='<table class="add-link">';str+="    <tbody>";str+='        <tr><td>URL:</td><td><input type="text" class="link" /></td></tr>';if(!VINES_LIGHT){str+='        <tr><td><strong>Or search for a link:</td><td><input type="text" class="search" /></td></tr>'}else{str+='        <tr class="dn"><td><strong>Or search for a link:</td><td><input type="text" class="search" /></td></tr>'}str+='        <tr><td colspan="2"><a class="jsOk btn">Create Link</a></td></tr>';str+="    </tbody>";str+="</table>";var a=new Element("div",{html:str}).inject(document.body);a.getElement(".jsOk").addEvent("click",this.submit.bind(this));this.link_input=a.getElement(".link");this.link_input.addEvent("keypress",function(g){if(g.key=="enter"){this.submit()}}.bind(this));if(!VINES_LIGHT){this.search_input=a.getElement(".search");this.autosearch=new VinesAutocomplete(this.search_input,"/search/autocomplete/");this.autosearch.addEvent("onSelection",function(g){this.link_input.value=g.url;this.submit()}.bind(this));this.link_input.addEvent("click",this.search_input.fireEvent.pass("blur"))}this.link_panel=new LaunchPad.Base({titleTextStr:"Add a Link",destroy_on_hide:false,styles:{width:400}});this.link_panel.insert(a)}if(this.search_input&&e){this.search_input.focus();this.search_input.value=e;this.autosearch.query()}this.link_input.set("value",c||"");if(c){this.link_input.focus()}},validateUrl:function(a){if(a.charAt(0)=="/"){return true}else{var b=/(ftp|http|https|gopher|telnet):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;return b.test(a)}},submit:function(a){if(a){a.stop()}var b=this.link_input.value.trim();if(!this.validateUrl(b)){alert("You did not enter a valid link.");return}this.link_panel.hide();this.parchment.restoreSelection();document.execCommand("createLink",null,b);this.anchor=false}};
