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 Permalink 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)}})();