Files
leanote/public/mdeditor/editor/pagedown/Markdown.Editor-min.js
life 2ddbeb5b11 #10 #14 [ok]
add attachment feature,
1) upload, delete,
2) link attach into content (include tinymce & markdown)

markdown-editor.js add insertLink function to add link into markdown
content, usage:
MarkdownEditor.insertLink(link, title)

paste plugin edit for safety image
2014-09-21 22:09:54 +08:00

2 lines
38 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(function(){var util={},position={},ui={},doc=window.document,re=window.RegExp,nav=window.navigator,SETTINGS={lineLength:72},uaSniffed={isIE:/msie/.test(nav.userAgent.toLowerCase()),isIE_5or6:/msie 6/.test(nav.userAgent.toLowerCase())||/msie 5/.test(nav.userAgent.toLowerCase()),isOpera:/opera/.test(nav.userAgent.toLowerCase())};var defaultsStrings={bold:"Strong <strong> Ctrl+B",boldexample:"strong text",italic:"Emphasis <em> Ctrl+I",italicexample:"emphasized text",link:"Hyperlink <a> Ctrl+L",linkdescription:"enter link description here",linkdialog:'<p><b>Insert Hyperlink</b></p><p>http://example.com/ "optional title"</p>',quote:"Blockquote <blockquote> Ctrl+Q",quoteexample:"Blockquote",code:"Code Sample <pre><code> Ctrl+K",codeexample:"enter code here",image:"Image <img> Ctrl+G",imagedescription:"enter image description here",imagedialog:"<p><b>Insert Image</b></p><p>http://example.com/images/diagram.jpg \"optional title\"<br><br>Need <a href='http://www.google.com/search?q=free+image+hosting' target='_blank'>free image hosting?</a></p>",olist:"Numbered List <ol> Ctrl+O",ulist:"Bulleted List <ul> Ctrl+U",litem:"List item",heading:"Heading <h1>/<h2> Ctrl+H",headingexample:"Heading",hr:"Horizontal Rule <hr> Ctrl+R",undo:"Undo - Ctrl+Z",redo:"Redo - Ctrl+Y",redomac:"Redo - Ctrl+Shift+Z",help:"Markdown Editing Help"};var imageDefaultText="http://";var linkDefaultText="http://";Markdown.Editor=function(markdownConverter,idPostfix,options){options=options||{};if(typeof options.handler==="function"){options={helpButton:options}}options.strings=options.strings||{};if(options.helpButton){options.strings.help=options.strings.help||options.helpButton.title}var getString=function(identifier){return options.strings[identifier]||defaultsStrings[identifier]};idPostfix=idPostfix||"";var hooks=this.hooks=new Markdown.HookCollection;hooks.addNoop("onPreviewRefresh");hooks.addNoop("postBlockquoteCreation");hooks.addFalse("insertImageDialog");hooks.addFalse("insertLinkDialog");this.getConverter=function(){return markdownConverter};var that=this,panels;this.run=function(previewWrapper){if(panels)return;panels=new PanelCollection(idPostfix);var commandManager=new CommandManager(hooks,getString);var previewManager=new PreviewManager(markdownConverter,panels,function(){hooks.onPreviewRefresh()},previewWrapper);var undoManager,uiManager;if(!/\?noundo/.test(doc.location.href)){undoManager=new UndoManager(function(){previewManager.refresh();if(uiManager)uiManager.setUndoRedoButtonStates()},panels);this.textOperation=function(f){undoManager.setCommandMode();f();that.refreshPreview()}}uiManager=new UIManager(idPostfix,panels,undoManager,previewManager,commandManager,options.helpButton,getString);uiManager.setUndoRedoButtonStates();var forceRefresh=that.refreshPreview=function(){previewManager.refresh(true)};forceRefresh()}};function Chunks(){}Chunks.prototype.findTags=function(startRegex,endRegex){var chunkObj=this;var regex;if(startRegex){regex=util.extendRegExp(startRegex,"","$");this.before=this.before.replace(regex,function(match){chunkObj.startTag=chunkObj.startTag+match;return""});regex=util.extendRegExp(startRegex,"^","");this.selection=this.selection.replace(regex,function(match){chunkObj.startTag=chunkObj.startTag+match;return""})}if(endRegex){regex=util.extendRegExp(endRegex,"","$");this.selection=this.selection.replace(regex,function(match){chunkObj.endTag=match+chunkObj.endTag;return""});regex=util.extendRegExp(endRegex,"^","");this.after=this.after.replace(regex,function(match){chunkObj.endTag=match+chunkObj.endTag;return""})}};Chunks.prototype.trimWhitespace=function(remove){var beforeReplacer,afterReplacer,that=this;if(remove){beforeReplacer=afterReplacer=""}else{beforeReplacer=function(s){that.before+=s;return""};afterReplacer=function(s){that.after=s+that.after;return""}}this.selection=this.selection.replace(/^(\s*)/,beforeReplacer).replace(/(\s*)$/,afterReplacer)};Chunks.prototype.skipLines=function(nLinesBefore,nLinesAfter,findExtraNewlines){if(nLinesBefore===undefined){nLinesBefore=1}if(nLinesAfter===undefined){nLinesAfter=1}nLinesBefore++;nLinesAfter++;var regexText;var replacementText;if(navigator.userAgent.match(/Chrome/)){"X".match(/()./)}this.selection=this.selection.replace(/(^\n*)/,"");this.startTag=this.startTag+re.$1;this.selection=this.selection.replace(/(\n*$)/,"");this.endTag=this.endTag+re.$1;this.startTag=this.startTag.replace(/(^\n*)/,"");this.before=this.before+re.$1;this.endTag=this.endTag.replace(/(\n*$)/,"");this.after=this.after+re.$1;if(this.before){regexText=replacementText="";while(nLinesBefore--){regexText+="\\n?";replacementText+="\n"}if(findExtraNewlines){regexText="\\n*"}this.before=this.before.replace(new re(regexText+"$",""),replacementText)}if(this.after){regexText=replacementText="";while(nLinesAfter--){regexText+="\\n?";replacementText+="\n"}if(findExtraNewlines){regexText="\\n*"}this.after=this.after.replace(new re(regexText,""),replacementText)}};function PanelCollection(postfix){this.buttonBar=doc.getElementById("wmd-button-bar"+postfix);this.preview=doc.getElementById("wmd-preview"+postfix);this.input=doc.getElementById("wmd-input"+postfix)}util.isVisible=function(elem){if(window.getComputedStyle){return window.getComputedStyle(elem,null).getPropertyValue("display")!=="none"}else if(elem.currentStyle){return elem.currentStyle["display"]!=="none"}};util.addEvent=function(elem,event,listener){if(elem.attachEvent){elem.attachEvent("on"+event,listener)}else{elem.addEventListener(event,listener,false)}};util.removeEvent=function(elem,event,listener){if(elem.detachEvent){elem.detachEvent("on"+event,listener)}else{elem.removeEventListener(event,listener,false)}};util.fixEolChars=function(text){text=text.replace(/\r\n/g,"\n");text=text.replace(/\r/g,"\n");return text};util.extendRegExp=function(regex,pre,post){if(pre===null||pre===undefined){pre=""}if(post===null||post===undefined){post=""}var pattern=regex.toString();var flags;pattern=pattern.replace(/\/([gim]*)$/,function(wholeMatch,flagsPart){flags=flagsPart;return""});pattern=pattern.replace(/(^\/|\/$)/g,"");pattern=pre+pattern+post;return new re(pattern,flags)};position.getTop=function(elem,isInner){var result=elem.offsetTop;if(!isInner){while(elem=elem.offsetParent){result+=elem.offsetTop}}return result};position.getHeight=function(elem){return elem.offsetHeight||elem.scrollHeight};position.getWidth=function(elem){return elem.offsetWidth||elem.scrollWidth};position.getPageSize=function(){var scrollWidth,scrollHeight;var innerWidth,innerHeight;if(self.innerHeight&&self.scrollMaxY){scrollWidth=doc.body.scrollWidth;scrollHeight=self.innerHeight+self.scrollMaxY}else if(doc.body.scrollHeight>doc.body.offsetHeight){scrollWidth=doc.body.scrollWidth;scrollHeight=doc.body.scrollHeight}else{scrollWidth=doc.body.offsetWidth;scrollHeight=doc.body.offsetHeight}if(self.innerHeight){innerWidth=self.innerWidth;innerHeight=self.innerHeight}else if(doc.documentElement&&doc.documentElement.clientHeight){innerWidth=doc.documentElement.clientWidth;innerHeight=doc.documentElement.clientHeight}else if(doc.body){innerWidth=doc.body.clientWidth;innerHeight=doc.body.clientHeight}var maxWidth=Math.max(scrollWidth,innerWidth);var maxHeight=Math.max(scrollHeight,innerHeight);return[maxWidth,maxHeight,innerWidth,innerHeight]};function UndoManager(callback,panels){var undoObj=this;var undoStack=[];var stackPtr=0;var mode="none";var lastState;var timer;var inputStateObj;var setMode=function(newMode,noSave){if(mode!=newMode){mode=newMode;if(!noSave){saveState()}}if(!uaSniffed.isIE||mode!="moving"){timer=setTimeout(refreshState,1)}else{inputStateObj=null}};var refreshState=function(isInitialState){inputStateObj=new TextareaState(panels,isInitialState);timer=undefined};this.setCommandMode=function(){mode="command";saveState();timer=setTimeout(refreshState,0)};this.canUndo=function(){return stackPtr>1};this.canRedo=function(){if(undoStack[stackPtr+1]){return true}return false};this.undo=function(){if(undoObj.canUndo()){if(lastState){lastState.restore();lastState=null}else{undoStack[stackPtr]=new TextareaState(panels);undoStack[--stackPtr].restore();if(callback){callback()}}}mode="none";panels.input.focus();refreshState()};this.redo=function(){if(undoObj.canRedo()){undoStack[++stackPtr].restore();if(callback){callback()}}mode="none";panels.input.focus();refreshState()};var saveState=function(){var currState=inputStateObj||new TextareaState(panels);if(!currState){return false}if(mode=="moving"){if(!lastState){lastState=currState}return}if(lastState){if(undoStack[stackPtr-1].text!=lastState.text){undoStack[stackPtr++]=lastState}lastState=null}undoStack[stackPtr++]=currState;undoStack[stackPtr+1]=null;if(callback){callback()}};var handleCtrlYZ=function(event){var handled=false;if((event.ctrlKey||event.metaKey)&&!event.altKey){var keyCode=event.charCode||event.keyCode;var keyCodeChar=String.fromCharCode(keyCode);switch(keyCodeChar.toLowerCase()){case"y":undoObj.redo();handled=true;break;case"z":if(!event.shiftKey){undoObj.undo()}else{undoObj.redo()}handled=true;break}}if(handled){if(event.preventDefault){event.preventDefault()}if(window.event){window.event.returnValue=false}return}};var handleModeChange=function(event){if(!event.ctrlKey&&!event.metaKey){var keyCode=event.keyCode;if(keyCode>=33&&keyCode<=40||keyCode>=63232&&keyCode<=63235){setMode("moving")}else if(keyCode==8||keyCode==46||keyCode==127){setMode("deleting")}else if(keyCode==13){setMode("newlines")}else if(keyCode==27){setMode("escape")}else if((keyCode<16||keyCode>20)&&keyCode!=91){setMode("typing")}}};var setEventHandlers=function(){util.addEvent(panels.input,"keypress",function(event){if((event.ctrlKey||event.metaKey)&&!event.altKey&&(event.keyCode==89||event.keyCode==90)){event.preventDefault()}});var handlePaste=function(){if(uaSniffed.isIE||inputStateObj&&inputStateObj.text!=panels.input.value){if(timer==undefined){mode="paste";saveState();refreshState()}}};util.addEvent(panels.input,"keydown",handleCtrlYZ);util.addEvent(panels.input,"keydown",handleModeChange);util.addEvent(panels.input,"mousedown",function(){setMode("moving")});panels.input.onpaste=handlePaste;panels.input.ondrop=handlePaste};var init=function(){setEventHandlers();refreshState(true);saveState()};init()}function TextareaState(panels,isInitialState){var stateObj=this;var inputArea=panels.input;this.init=function(){if(!util.isVisible(inputArea)){return}if(!isInitialState&&doc.activeElement&&doc.activeElement!==inputArea){return}this.setInputAreaSelectionStartEnd();this.scrollTop=inputArea.scrollTop;if(!this.text&&inputArea.selectionStart||inputArea.selectionStart===0){this.text=inputArea.value}};this.setInputAreaSelection=function(){if(!util.isVisible(inputArea)){return}if(inputArea.selectionStart!==undefined&&!uaSniffed.isOpera){inputArea.focus();inputArea.selectionStart=stateObj.start;inputArea.selectionEnd=stateObj.end;inputArea.scrollTop=stateObj.scrollTop}else if(doc.selection){if(doc.activeElement&&doc.activeElement!==inputArea){return}inputArea.focus();var range=inputArea.createTextRange();range.moveStart("character",-inputArea.value.length);range.moveEnd("character",-inputArea.value.length);range.moveEnd("character",stateObj.end);range.moveStart("character",stateObj.start);range.select()}};this.setInputAreaSelectionStartEnd=function(){if(!panels.ieCachedRange&&(inputArea.selectionStart||inputArea.selectionStart===0)){stateObj.start=inputArea.selectionStart;stateObj.end=inputArea.selectionEnd}else if(doc.selection){stateObj.text=util.fixEolChars(inputArea.value);var range=panels.ieCachedRange||doc.selection.createRange();var fixedRange=util.fixEolChars(range.text);var marker="";var markedRange=marker+fixedRange+marker;range.text=markedRange;var inputText=util.fixEolChars(inputArea.value);range.moveStart("character",-markedRange.length);range.text=fixedRange;stateObj.start=inputText.indexOf(marker);stateObj.end=inputText.lastIndexOf(marker)-marker.length;var len=stateObj.text.length-util.fixEolChars(inputArea.value).length;if(len){range.moveStart("character",-fixedRange.length);while(len--){fixedRange+="\n";stateObj.end+=1}range.text=fixedRange}if(panels.ieCachedRange)stateObj.scrollTop=panels.ieCachedScrollTop;panels.ieCachedRange=null;this.setInputAreaSelection()}};this.restore=function(){if(stateObj.text!=undefined&&stateObj.text!=inputArea.value){inputArea.value=stateObj.text}this.setInputAreaSelection();inputArea.scrollTop=stateObj.scrollTop};this.getChunks=function(){var chunk=new Chunks;chunk.before=util.fixEolChars(stateObj.text.substring(0,stateObj.start));chunk.startTag="";chunk.selection=util.fixEolChars(stateObj.text.substring(stateObj.start,stateObj.end));chunk.endTag="";chunk.after=util.fixEolChars(stateObj.text.substring(stateObj.end));chunk.scrollTop=stateObj.scrollTop;return chunk};this.setChunks=function(chunk){chunk.before=chunk.before+chunk.startTag;chunk.after=chunk.endTag+chunk.after;this.start=chunk.before.length;this.end=chunk.before.length+chunk.selection.length;this.text=chunk.before+chunk.selection+chunk.after;this.scrollTop=chunk.scrollTop};this.init()}function PreviewManager(converter,panels,previewRefreshCallback,previewWrapper){var managerObj=this;var timeout;var elapsedTime;var oldInputText;var maxDelay=3e3;var startType="delayed";var setupEvents=function(inputElem,listener){util.addEvent(inputElem,"input",listener);inputElem.onpaste=listener;inputElem.ondrop=listener;util.addEvent(inputElem,"keypress",listener);util.addEvent(inputElem,"keydown",listener)};var getDocScrollTop=function(){var result=0;if(window.innerHeight){result=window.pageYOffset}else if(doc.documentElement&&doc.documentElement.scrollTop){result=doc.documentElement.scrollTop}else if(doc.body){result=doc.body.scrollTop}return result};var makePreviewHtml=function(){if(!panels.preview)return;var text=panels.input.value;if(text&&text==oldInputText){return}else{oldInputText=text}var prevTime=(new Date).getTime();text=converter.makeHtml(text);var currTime=(new Date).getTime();elapsedTime=currTime-prevTime;pushPreviewHtml(text)};if(previewWrapper!==undefined){makePreviewHtml=previewWrapper(makePreviewHtml)}var applyTimeout=function(){if(timeout){clearTimeout(timeout);timeout=undefined}if(startType!=="manual"){var delay=0;if(startType==="delayed"){delay=elapsedTime}if(delay>maxDelay){delay=maxDelay}timeout=setTimeout(makePreviewHtml,delay)}};var getScaleFactor=function(panel){if(panel.scrollHeight<=panel.clientHeight){return 1}return panel.scrollTop/(panel.scrollHeight-panel.clientHeight)};var setPanelScrollTops=function(){if(panels.preview){panels.preview.scrollTop=(panels.preview.scrollHeight-panels.preview.clientHeight)*getScaleFactor(panels.preview)}};this.refresh=function(requiresRefresh){if(requiresRefresh){oldInputText="";makePreviewHtml()}else{applyTimeout()}};this.processingTime=function(){return elapsedTime};var isFirstTimeFilled=true;var ieSafePreviewSet=function(text){var preview=panels.preview;var parent=preview.parentNode;var sibling=preview.nextSibling;parent.removeChild(preview);preview.innerHTML=text;if(!sibling)parent.appendChild(preview);else parent.insertBefore(preview,sibling)};var nonSuckyBrowserPreviewSet=function(text){panels.preview.innerHTML=text};var previewSetter;var previewSet=function(text){if(previewSetter)return previewSetter(text);try{nonSuckyBrowserPreviewSet(text);previewSetter=nonSuckyBrowserPreviewSet}catch(e){previewSetter=ieSafePreviewSet;previewSetter(text)}};var pushPreviewHtml=function(text){var emptyTop=position.getTop(panels.input)-getDocScrollTop();if(panels.preview){previewSet(text);previewRefreshCallback()}setPanelScrollTops();if(isFirstTimeFilled){isFirstTimeFilled=false;return}var fullTop=position.getTop(panels.input)-getDocScrollTop();if(uaSniffed.isIE){setTimeout(function(){window.scrollBy(0,fullTop-emptyTop)},0)}else{window.scrollBy(0,fullTop-emptyTop)}};var init=function(){setupEvents(panels.input,applyTimeout);makePreviewHtml();if(panels.preview){panels.preview.scrollTop=0}};init()}ui.createBackground=function(){var background=doc.createElement("div"),style=background.style;background.className="wmd-prompt-background";style.position="absolute";style.top="0";style.zIndex="1000";if(uaSniffed.isIE){style.filter="alpha(opacity=50)"}else{style.opacity="0.5"}var pageSize=position.getPageSize();style.height=pageSize[1]+"px";if(uaSniffed.isIE){style.left=doc.documentElement.scrollLeft;style.width=doc.documentElement.clientWidth}else{style.left="0";style.width="100%"}doc.body.appendChild(background);return background};ui.prompt=function(text,defaultInputText,callback){var dialog;var input;if(defaultInputText===undefined){defaultInputText=""}var checkEscape=function(key){var code=key.charCode||key.keyCode;if(code===27){close(true)}};var close=function(isCancel){util.removeEvent(doc.body,"keydown",checkEscape);var text=input.value;if(isCancel){text=null}else{text=text.replace(/^http:\/\/(https?|ftp):\/\//,"$1://");if(!/^(?:https?|ftp):\/\//.test(text))text="http://"+text}dialog.parentNode.removeChild(dialog);callback(text);return false};var createDialog=function(){dialog=doc.createElement("div");dialog.className="wmd-prompt-dialog";dialog.style.padding="10px;";dialog.style.position="fixed";dialog.style.width="400px";dialog.style.zIndex="1001";var question=doc.createElement("div");question.innerHTML=text;question.style.padding="5px";dialog.appendChild(question);var form=doc.createElement("form"),style=form.style;form.onsubmit=function(){return close(false)};style.padding="0";style.margin="0";style.cssFloat="left";style.width="100%";style.textAlign="center";style.position="relative";dialog.appendChild(form);input=doc.createElement("input");input.type="text";input.value=defaultInputText;style=input.style;style.display="block";style.width="80%";style.marginLeft=style.marginRight="auto";form.appendChild(input);var okButton=doc.createElement("input");okButton.type="button";okButton.onclick=function(){return close(false)};okButton.value="OK";style=okButton.style;style.margin="10px";style.display="inline";style.width="7em";var cancelButton=doc.createElement("input");cancelButton.type="button";cancelButton.onclick=function(){return close(true)};cancelButton.value="Cancel";style=cancelButton.style;style.margin="10px";style.display="inline";style.width="7em";form.appendChild(okButton);form.appendChild(cancelButton);util.addEvent(doc.body,"keydown",checkEscape);dialog.style.top="50%";dialog.style.left="50%";dialog.style.display="block";if(uaSniffed.isIE_5or6){dialog.style.position="absolute";dialog.style.top=doc.documentElement.scrollTop+200+"px";dialog.style.left="50%"}doc.body.appendChild(dialog);dialog.style.marginTop=-(position.getHeight(dialog)/2)+"px";dialog.style.marginLeft=-(position.getWidth(dialog)/2)+"px"};setTimeout(function(){createDialog();var defTextLen=defaultInputText.length;if(input.selectionStart!==undefined){input.selectionStart=0;input.selectionEnd=defTextLen}else if(input.createTextRange){var range=input.createTextRange();range.collapse(false);range.moveStart("character",-defTextLen);range.moveEnd("character",defTextLen);range.select()}input.focus()},0)};function UIManager(postfix,panels,undoManager,previewManager,commandManager,helpOptions,getString){var inputBox=panels.input,buttons={};makeSpritedButtonRow();var keyEvent="keydown";if(uaSniffed.isOpera){keyEvent="keypress"}util.addEvent(inputBox,keyEvent,function(key){if((key.ctrlKey||key.metaKey)&&!key.altKey&&!key.shiftKey){var keyCode=key.charCode||key.keyCode;var keyCodeStr=String.fromCharCode(keyCode).toLowerCase();switch(keyCodeStr){case"b":doClick(buttons.bold);break;case"i":doClick(buttons.italic);break;case"l":doClick(buttons.link);break;case"q":doClick(buttons.quote);break;case"k":doClick(buttons.code);break;case"g":doClick(buttons.image);break;case"o":doClick(buttons.olist);break;case"u":doClick(buttons.ulist);break;case"h":doClick(buttons.heading);break;case"r":doClick(buttons.hr);break;case"y":doClick(buttons.redo);break;case"z":if(key.shiftKey){doClick(buttons.redo)}else{doClick(buttons.undo)}break;default:return}if(key.preventDefault){key.preventDefault()}if(window.event){window.event.returnValue=false}}});util.addEvent(inputBox,"keyup",function(key){if(key.shiftKey&&!key.ctrlKey&&!key.metaKey){var keyCode=key.charCode||key.keyCode;if(keyCode===13){var fakeButton={};fakeButton.textOp=bindCommand("doAutoindent");doClick(fakeButton)}}});if(uaSniffed.isIE){util.addEvent(inputBox,"keydown",function(key){var code=key.keyCode;if(code===27){return false}})}function insertLinkLife(link,text){inputBox.focus();if(undoManager){undoManager.setCommandMode()}var state=new TextareaState(panels);if(!state){return}var chunks=state.getChunks();var fixupInputArea=function(){inputBox.focus();if(chunks){state.setChunks(chunks)}state.restore();previewManager.refresh()};var a=commandProto.insertLink(chunks,fixupInputArea,link,text);if(!a)fixupInputArea()}MarkdownEditor.insertLink=insertLinkLife;function doClick(button){inputBox.focus();if(button.textOp){if(undoManager){undoManager.setCommandMode()}var state=new TextareaState(panels);if(!state){return}var chunks=state.getChunks();var fixupInputArea=function(){inputBox.focus();if(chunks){state.setChunks(chunks)}state.restore();previewManager.refresh()};var noCleanup=button.textOp(chunks,fixupInputArea);if(!noCleanup){fixupInputArea()}}if(button.execute){button.execute(undoManager)}}function setupButton(button,isEnabled){var normalYShift="0px";var disabledYShift="-20px";var highlightYShift="-40px";var image=button.getElementsByTagName("span")[0];if(isEnabled){image.style.backgroundPosition=button.XShift+" "+normalYShift;button.onmouseover=function(){image.style.backgroundPosition=this.XShift+" "+highlightYShift};button.onmouseout=function(){image.style.backgroundPosition=this.XShift+" "+normalYShift};if(uaSniffed.isIE){button.onmousedown=function(){if(doc.activeElement&&doc.activeElement!==panels.input){return}panels.ieCachedRange=document.selection.createRange();panels.ieCachedScrollTop=panels.input.scrollTop}}if(!button.isHelp){button.onclick=function(){if(this.onmouseout){this.onmouseout()}doClick(this);return false}}}else{image.style.backgroundPosition=button.XShift+" "+disabledYShift;button.onmouseover=button.onmouseout=button.onclick=function(){}}}function bindCommand(method){if(typeof method==="string")method=commandManager[method];return function(){method.apply(commandManager,arguments)}}function makeSpritedButtonRow(){var buttonBar=panels.buttonBar;var normalYShift="0px";var disabledYShift="-20px";var highlightYShift="-40px";var buttonRow=document.createElement("ul");buttonRow.id="wmd-button-row"+postfix;buttonRow.className="wmd-button-row";buttonRow=buttonBar.appendChild(buttonRow);var xPosition=0;var makeButton=function(id,title,XShift,textOp){var button=document.createElement("li");button.className="wmd-button";button.style.left=xPosition+"px";xPosition+=25;var buttonImage=document.createElement("span");button.id=id+postfix;button.appendChild(buttonImage);button.title=title;button.XShift=XShift;if(textOp)button.textOp=textOp;setupButton(button,true);buttonRow.appendChild(button);return button};var makeSpacer=function(num){var spacer=document.createElement("li");spacer.className="wmd-spacer wmd-spacer"+num;spacer.id="wmd-spacer"+num+postfix;buttonRow.appendChild(spacer);xPosition+=25};buttons.bold=makeButton("wmd-bold-button",getString("bold"),"0px",bindCommand("doBold"));buttons.italic=makeButton("wmd-italic-button",getString("italic"),"-20px",bindCommand("doItalic"));makeSpacer(1);buttons.link=makeButton("wmd-link-button",getString("link"),"-40px",bindCommand(function(chunk,postProcessing){return this.doLinkOrImage(chunk,postProcessing,false)}));buttons.quote=makeButton("wmd-quote-button",getString("quote"),"-60px",bindCommand("doBlockquote"));buttons.code=makeButton("wmd-code-button",getString("code"),"-80px",bindCommand("doCode"));buttons.image=makeButton("wmd-image-button",getString("image"),"-100px",bindCommand(function(chunk,postProcessing){return this.doLinkOrImage(chunk,postProcessing,true)}));makeSpacer(2);buttons.olist=makeButton("wmd-olist-button",getString("olist"),"-120px",bindCommand(function(chunk,postProcessing){this.doList(chunk,postProcessing,true)}));buttons.ulist=makeButton("wmd-ulist-button",getString("ulist"),"-140px",bindCommand(function(chunk,postProcessing){this.doList(chunk,postProcessing,false)}));buttons.heading=makeButton("wmd-heading-button",getString("heading"),"-160px",bindCommand("doHeading"));buttons.hr=makeButton("wmd-hr-button",getString("hr"),"-180px",bindCommand("doHorizontalRule"));makeSpacer(3);buttons.undo=makeButton("wmd-undo-button",getString("undo"),"-200px",null);buttons.undo.execute=function(manager){if(manager)manager.undo()};var redoTitle=/win/.test(nav.platform.toLowerCase())?getString("redo"):getString("redomac");buttons.redo=makeButton("wmd-redo-button",redoTitle,"-220px",null);buttons.redo.execute=function(manager){if(manager)manager.redo()};if(helpOptions){var helpButton=document.createElement("li");var helpButtonImage=document.createElement("span");helpButton.appendChild(helpButtonImage);helpButton.className="wmd-button wmd-help-button";helpButton.id="wmd-help-button"+postfix;helpButton.XShift="-240px";helpButton.isHelp=true;helpButton.style.right="0px";helpButton.title=getString("help");helpButton.onclick=helpOptions.handler;setupButton(helpButton,true);buttonRow.appendChild(helpButton);buttons.help=helpButton}setUndoRedoButtonStates()}function setUndoRedoButtonStates(){if(undoManager){setupButton(buttons.undo,undoManager.canUndo());setupButton(buttons.redo,undoManager.canRedo())}}this.setUndoRedoButtonStates=setUndoRedoButtonStates}function CommandManager(pluginHooks,getString){this.hooks=pluginHooks;this.getString=getString}var commandProto=CommandManager.prototype;commandProto.prefixes="(?:\\s{4,}|\\s*>|\\s*-\\s+|\\s*\\d+\\.|=|\\+|-|_|\\*|#|\\s*\\[[^\n]]+\\]:)";commandProto.unwrap=function(chunk){var txt=new re("([^\\n])\\n(?!(\\n|"+this.prefixes+"))","g");chunk.selection=chunk.selection.replace(txt,"$1 $2")};commandProto.wrap=function(chunk,len){this.unwrap(chunk);var regex=new re("(.{1,"+len+"})( +|$\\n?)","gm"),that=this;chunk.selection=chunk.selection.replace(regex,function(line,marked){if(new re("^"+that.prefixes,"").test(line)){return line}return marked+"\n"});chunk.selection=chunk.selection.replace(/\s+$/,"")};commandProto.doBold=function(chunk,postProcessing){return this.doBorI(chunk,postProcessing,2,this.getString("boldexample"))};commandProto.doItalic=function(chunk,postProcessing){return this.doBorI(chunk,postProcessing,1,this.getString("italicexample"))};commandProto.doBorI=function(chunk,postProcessing,nStars,insertText){chunk.trimWhitespace();chunk.selection=chunk.selection.replace(/\n{2,}/g,"\n");var starsBefore=/(\**$)/.exec(chunk.before)[0];var starsAfter=/(^\**)/.exec(chunk.after)[0];var prevStars=Math.min(starsBefore.length,starsAfter.length);if(prevStars>=nStars&&(prevStars!=2||nStars!=1)){chunk.before=chunk.before.replace(re("[*]{"+nStars+"}$",""),"");chunk.after=chunk.after.replace(re("^[*]{"+nStars+"}",""),"")}else if(!chunk.selection&&starsAfter){chunk.after=chunk.after.replace(/^([*_]*)/,"");chunk.before=chunk.before.replace(/(\s?)$/,"");var whitespace=re.$1;chunk.before=chunk.before+starsAfter+whitespace}else{if(!chunk.selection&&!starsAfter){chunk.selection=insertText}var markup=nStars<=1?"*":"**";chunk.before=chunk.before+markup;chunk.after=markup+chunk.after}return};commandProto.stripLinkDefs=function(text,defsToAdd){text=text.replace(/^[ ]{0,3}\[(\d+)\]:[ \t]*\n?[ \t]*<?(\S+?)>?[ \t]*\n?[ \t]*(?:(\n*)["(](.+?)[")][ \t]*)?(?:\n+|$)/gm,function(totalMatch,id,link,newlines,title){defsToAdd[id]=totalMatch.replace(/\s*$/,"");if(newlines){defsToAdd[id]=totalMatch.replace(/["(](.+?)[")]$/,"");return newlines+title}return""});return text};commandProto.addLinkDef=function(chunk,linkDef){var refNumber=0;var defsToAdd={};chunk.before=this.stripLinkDefs(chunk.before,defsToAdd);chunk.selection=this.stripLinkDefs(chunk.selection,defsToAdd);chunk.after=this.stripLinkDefs(chunk.after,defsToAdd);var defs="";var regex=/(\[)((?:\[[^\]]*\]|[^\[\]])*)(\][ ]?(?:\n[ ]*)?\[)(\d+)(\])/g;var addDefNumber=function(def){refNumber++;def=def.replace(/^[ ]{0,3}\[(\d+)\]:/," ["+refNumber+"]:");defs+="\n"+def};var getLink=function(wholeMatch,before,inner,afterInner,id,end){inner=inner.replace(regex,getLink);if(defsToAdd[id]){addDefNumber(defsToAdd[id]);return before+inner+afterInner+refNumber+end}return wholeMatch};chunk.before=chunk.before.replace(regex,getLink);if(linkDef){addDefNumber(linkDef)}else{chunk.selection=chunk.selection.replace(regex,getLink)}var refOut=refNumber;chunk.after=chunk.after.replace(regex,getLink);if(chunk.after){chunk.after=chunk.after.replace(/\n*$/,"")}if(!chunk.after){chunk.selection=chunk.selection.replace(/\n*$/,"")}chunk.after+="\n\n"+defs;return refOut};function properlyEncoded(linkdef){return linkdef.replace(/^\s*(.*?)(?:\s+"(.+)")?\s*$/,function(wholematch,link,title){link=link.replace(/\?.*$/,function(querypart){return querypart.replace(/\+/g," ")});link=decodeURIComponent(link);link=encodeURI(link).replace(/'/g,"%27").replace(/\(/g,"%28").replace(/\)/g,"%29");link=link.replace(/\?.*$/,function(querypart){return querypart.replace(/\+/g,"%2b")});if(title){title=title.trim?title.trim():title.replace(/^\s*/,"").replace(/\s*$/,"");title=title.replace(/"/g,"quot;").replace(/\(/g,"&#40;").replace(/\)/g,"&#41;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}return title?link+' "'+title+'"':link})}commandProto.insertLink=function(chunk,postProcessing,link,text){isImage=false;chunk.trimWhitespace();chunk.findTags(/\s*!?\[/,/\][ ]?(?:\n[ ]*)?(\[.*?\])?/);var background;if(chunk.endTag.length>1&&chunk.startTag.length>0){chunk.startTag=chunk.startTag.replace(/!?\[/,"");chunk.endTag="";this.addLinkDef(chunk,null)}else{chunk.selection=chunk.startTag+chunk.selection+chunk.endTag;chunk.startTag=chunk.endTag="";if(/\n\n/.test(chunk.selection)){this.addLinkDef(chunk,null);return}var that=this;var linkEnteredCallback=function(link){background.parentNode.removeChild(background);if(link!==null){chunk.selection=(" "+chunk.selection).replace(/([^\\](?:\\\\)*)(?=[[\]])/g,"$1\\").substr(1);var linkDef=" [999]: "+properlyEncoded(link);var num=that.addLinkDef(chunk,linkDef);chunk.startTag=isImage?"![":"[";chunk.endTag="]["+num+"]";chunk.selection=text}postProcessing()};background=ui.createBackground();linkEnteredCallback(link);return true}};commandProto.doLinkOrImage=function(chunk,postProcessing,isImage){chunk.trimWhitespace();chunk.findTags(/\s*!?\[/,/\][ ]?(?:\n[ ]*)?(\[.*?\])?/);var background;if(chunk.endTag.length>1&&chunk.startTag.length>0){chunk.startTag=chunk.startTag.replace(/!?\[/,"");chunk.endTag="";this.addLinkDef(chunk,null)}else{chunk.selection=chunk.startTag+chunk.selection+chunk.endTag;chunk.startTag=chunk.endTag="";if(/\n\n/.test(chunk.selection)){this.addLinkDef(chunk,null);return}var that=this;var linkEnteredCallback=function(link){background.parentNode.removeChild(background);if(link!==null){chunk.selection=(" "+chunk.selection).replace(/([^\\](?:\\\\)*)(?=[[\]])/g,"$1\\").substr(1);var linkDef=" [999]: "+properlyEncoded(link);var num=that.addLinkDef(chunk,linkDef);chunk.startTag=isImage?"![":"[";chunk.endTag="]["+num+"]";if(!chunk.selection){if(isImage){chunk.selection=that.getString("imagedescription")}else{chunk.selection=that.getString("linkdescription")}}}postProcessing()};background=ui.createBackground();if(isImage){if(!this.hooks.insertImageDialog(linkEnteredCallback))ui.prompt(this.getString("imagedialog"),imageDefaultText,linkEnteredCallback)}else{if(!this.hooks.insertLinkDialog(linkEnteredCallback))ui.prompt(this.getString("linkdialog"),linkDefaultText,linkEnteredCallback)}return true}};commandProto.doAutoindent=function(chunk,postProcessing){var commandMgr=this,fakeSelection=false;chunk.before=chunk.before.replace(/(\n|^)[ ]{0,3}([*+-]|\d+[.])[ \t]*\n$/,"\n\n");chunk.before=chunk.before.replace(/(\n|^)[ ]{0,3}>[ \t]*\n$/,"\n\n");
chunk.before=chunk.before.replace(/(\n|^)[ \t]+\n$/,"\n\n");if(!chunk.selection&&!/^[ \t]*(?:\n|$)/.test(chunk.after)){chunk.after=chunk.after.replace(/^[^\n]*/,function(wholeMatch){chunk.selection=wholeMatch;return""});fakeSelection=true}if(/(\n|^)[ ]{0,3}([*+-]|\d+[.])[ \t]+.*\n$/.test(chunk.before)){if(commandMgr.doList){commandMgr.doList(chunk)}}if(/(\n|^)[ ]{0,3}>[ \t]+.*\n$/.test(chunk.before)){if(commandMgr.doBlockquote){commandMgr.doBlockquote(chunk)}}if(/(\n|^)(\t|[ ]{4,}).*\n$/.test(chunk.before)){if(commandMgr.doCode){commandMgr.doCode(chunk)}}if(fakeSelection){chunk.after=chunk.selection+chunk.after;chunk.selection=""}};commandProto.doBlockquote=function(chunk,postProcessing){chunk.selection=chunk.selection.replace(/^(\n*)([^\r]+?)(\n*)$/,function(totalMatch,newlinesBefore,text,newlinesAfter){chunk.before+=newlinesBefore;chunk.after=newlinesAfter+chunk.after;return text});chunk.before=chunk.before.replace(/(>[ \t]*)$/,function(totalMatch,blankLine){chunk.selection=blankLine+chunk.selection;return""});chunk.selection=chunk.selection.replace(/^(\s|>)+$/,"");chunk.selection=chunk.selection||this.getString("quoteexample");var match="",leftOver="",line;if(chunk.before){var lines=chunk.before.replace(/\n$/,"").split("\n");var inChain=false;for(var i=0;i<lines.length;i++){var good=false;line=lines[i];inChain=inChain&&line.length>0;if(/^>/.test(line)){good=true;if(!inChain&&line.length>1)inChain=true}else if(/^[ \t]*$/.test(line)){good=true}else{good=inChain}if(good){match+=line+"\n"}else{leftOver+=match+line;match="\n"}}if(!/(^|\n)>/.test(match)){leftOver+=match;match=""}}chunk.startTag=match;chunk.before=leftOver;if(chunk.after){chunk.after=chunk.after.replace(/^\n?/,"\n")}chunk.after=chunk.after.replace(/^(((\n|^)(\n[ \t]*)*>(.+\n)*.*)+(\n[ \t]*)*)/,function(totalMatch){chunk.endTag=totalMatch;return""});var replaceBlanksInTags=function(useBracket){var replacement=useBracket?"> ":"";if(chunk.startTag){chunk.startTag=chunk.startTag.replace(/\n((>|\s)*)\n$/,function(totalMatch,markdown){return"\n"+markdown.replace(/^[ ]{0,3}>?[ \t]*$/gm,replacement)+"\n"})}if(chunk.endTag){chunk.endTag=chunk.endTag.replace(/^\n((>|\s)*)\n/,function(totalMatch,markdown){return"\n"+markdown.replace(/^[ ]{0,3}>?[ \t]*$/gm,replacement)+"\n"})}};if(/^(?![ ]{0,3}>)/m.test(chunk.selection)){this.wrap(chunk,SETTINGS.lineLength-2);chunk.selection=chunk.selection.replace(/^/gm,"> ");replaceBlanksInTags(true);chunk.skipLines()}else{chunk.selection=chunk.selection.replace(/^[ ]{0,3}> ?/gm,"");this.unwrap(chunk);replaceBlanksInTags(false);if(!/^(\n|^)[ ]{0,3}>/.test(chunk.selection)&&chunk.startTag){chunk.startTag=chunk.startTag.replace(/\n{0,2}$/,"\n\n")}if(!/(\n|^)[ ]{0,3}>.*$/.test(chunk.selection)&&chunk.endTag){chunk.endTag=chunk.endTag.replace(/^\n{0,2}/,"\n\n")}}chunk.selection=this.hooks.postBlockquoteCreation(chunk.selection);if(!/\n/.test(chunk.selection)){chunk.selection=chunk.selection.replace(/^(> *)/,function(wholeMatch,blanks){chunk.startTag+=blanks;return""})}};commandProto.doCode=function(chunk,postProcessing){var hasTextBefore=/\S[ ]*$/.test(chunk.before);var hasTextAfter=/^[ ]*\S/.test(chunk.after);if(!hasTextAfter&&!hasTextBefore||/\n/.test(chunk.selection)){chunk.before=chunk.before.replace(/[ ]{4}$/,function(totalMatch){chunk.selection=totalMatch+chunk.selection;return""});var nLinesBack=1;var nLinesForward=1;if(/(\n|^)(\t|[ ]{4,}).*\n$/.test(chunk.before)){nLinesBack=0}if(/^\n(\t|[ ]{4,})/.test(chunk.after)){nLinesForward=0}chunk.skipLines(nLinesBack,nLinesForward);if(!chunk.selection){chunk.startTag=" ";chunk.selection=this.getString("codeexample")}else{if(/^[ ]{0,3}\S/m.test(chunk.selection)){if(/\n/.test(chunk.selection))chunk.selection=chunk.selection.replace(/^/gm," ");else chunk.before+=" "}else{chunk.selection=chunk.selection.replace(/^(?:[ ]{4}|[ ]{0,3}\t)/gm,"")}}}else{chunk.trimWhitespace();chunk.findTags(/`/,/`/);if(!chunk.startTag&&!chunk.endTag){chunk.startTag=chunk.endTag="`";if(!chunk.selection){chunk.selection=this.getString("codeexample")}}else if(chunk.endTag&&!chunk.startTag){chunk.before+=chunk.endTag;chunk.endTag=""}else{chunk.startTag=chunk.endTag=""}}};commandProto.doList=function(chunk,postProcessing,isNumberedList){var previousItemsRegex=/(\n|^)(([ ]{0,3}([*+-]|\d+[.])[ \t]+.*)(\n.+|\n{2,}([*+-].*|\d+[.])[ \t]+.*|\n{2,}[ \t]+\S.*)*)\n*$/;var nextItemsRegex=/^\n*(([ ]{0,3}([*+-]|\d+[.])[ \t]+.*)(\n.+|\n{2,}([*+-].*|\d+[.])[ \t]+.*|\n{2,}[ \t]+\S.*)*)\n*/;var bullet="-";var num=1;var getItemPrefix=function(){var prefix;if(isNumberedList){prefix=" "+num+". ";num++}else{prefix=" "+bullet+" "}return prefix};var getPrefixedItem=function(itemText){if(isNumberedList===undefined){isNumberedList=/^\s*\d/.test(itemText)}itemText=itemText.replace(/^[ ]{0,3}([*+-]|\d+[.])\s/gm,function(_){return getItemPrefix()});return itemText};chunk.findTags(/(\n|^)*[ ]{0,3}([*+-]|\d+[.])\s+/,null);if(chunk.before&&!/\n$/.test(chunk.before)&&!/^\n/.test(chunk.startTag)){chunk.before+=chunk.startTag;chunk.startTag=""}if(chunk.startTag){var hasDigits=/\d+[.]/.test(chunk.startTag);chunk.startTag="";chunk.selection=chunk.selection.replace(/\n[ ]{4}/g,"\n");this.unwrap(chunk);chunk.skipLines();if(hasDigits){chunk.after=chunk.after.replace(nextItemsRegex,getPrefixedItem)}if(isNumberedList==hasDigits){return}}var nLinesUp=1;chunk.before=chunk.before.replace(previousItemsRegex,function(itemText){if(/^\s*([*+-])/.test(itemText)){bullet=re.$1}nLinesUp=/[^\n]\n\n[^\n]/.test(itemText)?1:0;return getPrefixedItem(itemText)});if(!chunk.selection){chunk.selection=this.getString("litem")}var prefix=getItemPrefix();var nLinesDown=1;chunk.after=chunk.after.replace(nextItemsRegex,function(itemText){nLinesDown=/[^\n]\n\n[^\n]/.test(itemText)?1:0;return getPrefixedItem(itemText)});chunk.trimWhitespace(true);chunk.skipLines(nLinesUp,nLinesDown,true);chunk.startTag=prefix;var spaces=prefix.replace(/./g," ");this.wrap(chunk,SETTINGS.lineLength-spaces.length);chunk.selection=chunk.selection.replace(/\n/g,"\n"+spaces)};commandProto.doHeading=function(chunk,postProcessing){chunk.selection=chunk.selection.replace(/\s+/g," ");chunk.selection=chunk.selection.replace(/(^\s+|\s+$)/g,"");if(!chunk.selection){chunk.startTag="## ";chunk.selection=this.getString("headingexample");chunk.endTag=" ##";return}var headerLevel=0;chunk.findTags(/#+[ ]*/,/[ ]*#+/);if(/#+/.test(chunk.startTag)){headerLevel=re.lastMatch.length}chunk.startTag=chunk.endTag="";chunk.findTags(null,/\s?(-+|=+)/);if(/=+/.test(chunk.endTag)){headerLevel=1}if(/-+/.test(chunk.endTag)){headerLevel=2}chunk.startTag=chunk.endTag="";chunk.skipLines(1,1);var headerLevelToCreate=headerLevel==0?2:headerLevel-1;if(headerLevelToCreate>0){var headerChar=headerLevelToCreate>=2?"-":"=";var len=chunk.selection.length;if(len>SETTINGS.lineLength){len=SETTINGS.lineLength}chunk.endTag="\n";while(len--){chunk.endTag+=headerChar}}};commandProto.doHorizontalRule=function(chunk,postProcessing){chunk.startTag="----------\n";chunk.selection="";chunk.skipLines(2,1,true)}})();