forked from ChiperSoft/wmd
-
Notifications
You must be signed in to change notification settings - Fork 0
/
wmd.combined.min.js
189 lines (189 loc) · 55.5 KB
/
wmd.combined.min.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
;(function(){WMDEditor=function(options){this.options=WMDEditor.util.extend({},WMDEditor.defaults,options||{});wmdBase(this,this.options);this.startEditor();};window.WMDEditor=WMDEditor;WMDEditor.defaults={version:2.1,output_format:"markdown",lineLength:40,button_bar:"wmd-button-bar",preview:"wmd-preview",output:"wmd-output",input:"wmd-input",imageDialogText:"<p style='margin-top: 0px'><b>Enter the image URL.</b></p><p>You can also add a title, which will be displayed as a tool tip.</p><p>Example:<br />http://i.imgur.com/1cZl4.jpg</p>",linkDialogText:"<p style='margin-top: 0px'><b>Enter the web address.</b></p><p>You can also add a title, which will be displayed as a tool tip.</p><p>Example:<br />http://www.google.com/</p>",imageDefaultText:"http://",linkDefaultText:"http://",imageDirectory:"images/",helpLink:"/wmd/markdownhelp.html",helpHoverTitle:"Markdown Syntax",helpTarget:"_blank",previewPollInterval:500,pastePollInterval:100,buttons:"bold italic link blockquote code image ol ul heading hr undo redo help",autoFormatting:{list:true,quote:true,code:true,},modifierKeys:{bold:"b",italic:"i",link:"l",quote:"q",code:"k",image:"g",orderedList:"o",unorderedList:"u",heading:"h",horizontalRule:"r",redo:"y",undo:"z"},tagFilter:{enabled:false,allowedTags:/^(<\/?(b|blockquote|code|del|dd|dl|dt|em|h1|h2|h3|i|kbd|li|ol|p|pre|s|sup|sub|strong|strike|ul)>|<(br|hr)\s?\/?>)$/i,patternLink:/^(<a\shref=("|')(\#\d+|(https?:\/\/|ftp:\/\/|mailto:)[-A-Za-z0-9+&@#\/%?=~_|!:,.;\(\)]+)\2(\stitle="[^"<>]+")?\s?>|<\/a>)$/i,patternImage:/^(<img\ssrc="https?:(\/\/[-A-Za-z0-9+&@#\/%?=~_|!:,.;\(\)]+)"(\swidth="\d{1,3}")?(\sheight="\d{1,3}")?(\salt="[^"<>]*")?(\stitle="[^"<>]*")?\s?\/?>)$/i}};WMDEditor.prototype={getPanels:function(){return{buttonBar:(typeof this.options.button_bar=='string')?document.getElementById(this.options.button_bar):this.options.button_bar,preview:(typeof this.options.preview=='string')?document.getElementById(this.options.preview):this.options.preview,output:(typeof this.options.output=='string')?document.getElementById(this.options.output):this.options.output,input:(typeof this.options.input=='string')?document.getElementById(this.options.input):this.options.input};},startEditor:function(){this.panels=this.getPanels();this.previewMgr=new PreviewManager(this);edit=new this.editor(this.previewMgr.refresh);this.previewMgr.refresh(true);}};var util={isVisible:function(elem){return elem.offsetWidth>0||elem.offsetHeight>0;},addEvent:function(elem,event,listener){if(elem.attachEvent){elem.attachEvent("on"+event,listener);}
else{elem.addEventListener(event,listener,false);}},removeEvent:function(elem,event,listener){if(elem.detachEvent){elem.detachEvent("on"+event,listener);}
else{elem.removeEventListener(event,listener,false);}},fixEolChars:function(text){text=text.replace(/\r\n/g,"\n");text=text.replace(/\r/g,"\n");return text;},extendRegExp:function(regex,pre,post){if(pre===null||pre===undefined){pre="";}
if(post===null||post===undefined){post="";}
var pattern=regex.toString();var flags="";var result=pattern.match(/\/([gim]*)$/);if(result===null){flags=result[0];}
else{flags="";}
pattern=pattern.replace(/(^\/|\/[gim]*$)/g,"");pattern=pre+pattern+post;return new RegExp(pattern,flags);},createImage:function(img){var imgPath=imageDirectory+img;var elem=document.createElement("img");elem.className="wmd-button";elem.src=imgPath;return elem;},prompt:function(text,defaultInputText,makeLinkMarkdown,promptType){var dialog;var background;var input;var titleInput;var newWinCheckbox;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(document.body,"keydown",checkEscape);var text=input.value+(titleInput.value?' "'+titleInput.value+'"':'');if(isCancel){text=null;}
else{text=text.replace('http://http://','http://');text=text.replace('http://https://','https://');text=text.replace('http://ftp://','ftp://');if(promptType=='link'&&newWinCheckbox.checked)text='!'+text;}
dialog.parentNode.removeChild(dialog);background.parentNode.removeChild(background);makeLinkMarkdown(text);return false;};var createBackground=function(){background=document.createElement("div");background.className="wmd-prompt-background";style=background.style;style.position="absolute";style.top="0";style.zIndex="10000";if(browser.isKonqueror){style.backgroundColor="transparent";}
else if(browser.isIE){style.filter="alpha(opacity=50)";}
else{style.opacity="0.5";}
var pageSize=position.getPageSize();style.height=pageSize[1]+"px";if(browser.isIE){style.left=document.documentElement.scrollLeft;style.width=document.documentElement.clientWidth;}
else{style.left="0";style.width="100%";}
document.body.appendChild(background);};var createDialog=function(){dialog=document.createElement("div");dialog.className="wmd-prompt-dialog";dialog.style.padding="10px;";dialog.style.position="fixed";dialog.style.width="400px";dialog.style.zIndex="10001";var question=document.createElement("div");question.innerHTML=text;question.style.padding="5px";dialog.appendChild(question);var form=document.createElement("form");form.onsubmit=function(){return close(false);};var style=form.style;style.padding="0";style.margin="0";style.cssFloat="left";style.width="100%";style.textAlign="center";style.position="relative";dialog.appendChild(form);var label=document.createElement("label");style=label.style;style.display="block";style.width="80%";style.marginLeft=style.marginRight="auto";style.textAlign="left";form.appendChild(label);label.appendChild(document.createTextNode(promptType+" URL:"));input=document.createElement("input");input.type="text";input.value=defaultInputText;style=input.style;style.display="block";style.width="100%";style.marginLeft=style.marginRight="auto";label.appendChild(input);label=document.createElement("label");style=label.style;style.display="block";style.width="80%";style.marginLeft=style.marginRight="auto";style.textAlign="left";form.appendChild(label);label.appendChild(document.createTextNode(promptType+" Title (Hover Text):"));titleInput=document.createElement("input");titleInput.type="text";style=titleInput.style;style.display="block";style.width="100%";style.marginLeft=style.marginRight="auto";label.appendChild(titleInput);if(promptType=='link'){label=document.createElement("label");style=label.style;style.display="block";style.textAlign="center";form.appendChild(label);newWinCheckbox=document.createElement("input");newWinCheckbox.type='checkbox';newWinCheckbox.value='!';label.appendChild(newWinCheckbox);label.appendChild(document.createTextNode(" Have this link open in a new window"));}
var okButton=document.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=document.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";if(/mac/.test(nav.platform.toLowerCase())){form.appendChild(cancelButton);form.appendChild(okButton);}
else{form.appendChild(okButton);form.appendChild(cancelButton);}
util.addEvent(document.body,"keydown",checkEscape);dialog.style.top="50%";dialog.style.left="50%";dialog.style.display="block";if(browser.isIE_5or6){dialog.style.position="absolute";dialog.style.top=document.documentElement.scrollTop+200+"px";dialog.style.left="50%";}
document.body.appendChild(dialog);dialog.style.marginTop=-(position.getHeight(dialog)/2)+"px";dialog.style.marginLeft=-(position.getWidth(dialog)/2)+"px";};createBackground();window.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);},extend:function(){function _update(a,b){for(var k in b)if(b.hasOwnProperty(k)){if(typeof a[k]==='object'&&typeof b[k]==='object')_update(a[k],b[k]);else a[k]=b[k];}
return a;}
var d={};for(var i=0;i<arguments.length;i++){_update(d,arguments[i]);}
return d;}};var position={getTop:function(elem,isInner){var result=elem.offsetTop;if(!isInner){while(elem=elem.offsetParent){result+=elem.offsetTop;}}
return result;},getHeight:function(elem){return elem.offsetHeight||elem.scrollHeight;},getWidth:function(elem){return elem.offsetWidth||elem.scrollWidth;},getPageSize:function(){var scrollWidth,scrollHeight;var innerWidth,innerHeight;if(self.innerHeight&&self.scrollMaxY){scrollWidth=document.body.scrollWidth;scrollHeight=self.innerHeight+self.scrollMaxY;}
else if(document.body.scrollHeight>document.body.offsetHeight){scrollWidth=document.body.scrollWidth;scrollHeight=document.body.scrollHeight;}
else{scrollWidth=document.body.offsetWidth;scrollHeight=document.body.offsetHeight;}
if(self.innerHeight){innerWidth=self.innerWidth;innerHeight=self.innerHeight;}
else if(document.documentElement&&document.documentElement.clientHeight){innerWidth=document.documentElement.clientWidth;innerHeight=document.documentElement.clientHeight;}
else if(document.body){innerWidth=document.body.clientWidth;innerHeight=document.body.clientHeight;}
var maxWidth=Math.max(scrollWidth,innerWidth);var maxHeight=Math.max(scrollHeight,innerHeight);return[maxWidth,maxHeight,innerWidth,innerHeight];}};var TextareaState=function(textarea,wmd){var stateObj=this;var inputArea=textarea;this.init=function(){if(!util.isVisible(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&&!browser.isOpera){inputArea.focus();inputArea.selectionStart=stateObj.start;inputArea.selectionEnd=stateObj.end;inputArea.scrollTop=stateObj.scrollTop;}
else if(document.selection){if(typeof(document.activeElement)!="unknown"&&document.activeElement&&document.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(inputArea.selectionStart||inputArea.selectionStart===0){stateObj.start=inputArea.selectionStart;stateObj.end=inputArea.selectionEnd;}
else if(document.selection){stateObj.text=util.fixEolChars(inputArea.value);var range;if(wmd.ieRetardedClick&&wmd.ieCachedRange){range=wmd.ieCachedRange;wmd.ieRetardedClick=false;}
else{range=document.selection.createRange();}
var fixedRange=util.fixEolChars(range.text);var marker="\x07";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;}
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;if(browser.isOpera){chunk.before=chunk.before.replace(/\n/g,"\r\n");chunk.selection=chunk.selection.replace(/\n/g,"\r\n");chunk.after=chunk.after.replace(/\n/g,"\r\n");}
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();};var Chunks=function(){};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){this.selection=this.selection.replace(/^(\s*)/,"");if(!remove){this.before+=re.$1;}
this.selection=this.selection.replace(/(\s*)$/,"");if(!remove){this.after=re.$1+this.after;}};Chunks.prototype.addBlankLines=function(nLinesBefore,nLinesAfter,findExtraNewlines){if(nLinesBefore===undefined){nLinesBefore=1;}
if(nLinesAfter===undefined){nLinesAfter=1;}
nLinesBefore++;nLinesAfter++;var regexText;var replacementText;var match=/(^\n*)/.exec(this.selection);this.selection=this.selection.replace(/(^\n*)/,"");this.startTag=this.startTag+(match?match[1]:"");match=/(\n*$)/.exec(this.selection);this.selection=this.selection.replace(/(\n*$)/,"");this.endTag=this.endTag+(match?match[1]:"");match=/(^\n*)/.exec(this.startTag);this.startTag=this.startTag.replace(/(^\n*)/,"");this.before=this.before+(match?match[1]:"");match=/(\n*$)/.exec(this.endTag);this.endTag=this.endTag.replace(/(\n*$)/,"");this.after=this.after+(match?match[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);}};var InputPoller=function(textarea,callback,interval){var pollerObj=this;var inputArea=textarea;var lastStart;var lastEnd;var markdown;var killHandle;this.tick=function(){if(!util.isVisible(inputArea)){return;}
if(inputArea.selectionStart||inputArea.selectionStart===0){var start=inputArea.selectionStart;var end=inputArea.selectionEnd;if(start!=lastStart||end!=lastEnd){lastStart=start;lastEnd=end;if(markdown!=inputArea.value){markdown=inputArea.value;return true;}}}
return false;};var doTickCallback=function(){if(!util.isVisible(inputArea)){return;}
if(pollerObj.tick()){callback();}};var assignInterval=function(){killHandle=window.setInterval(doTickCallback,interval);};this.destroy=function(){window.clearInterval(killHandle);};assignInterval();};var PreviewManager=function(wmd){var managerObj=this;var converter;var poller;var timeout;var elapsedTime;var oldInputText;var htmlOut;var maxDelay=3000;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);poller=new InputPoller(wmd.panels.input,listener,wmd.options.previewPollInterval);};var getDocScrollTop=function(){var result=0;if(window.innerHeight){result=window.pageYOffset;}
else if(document.documentElement&&document.documentElement.scrollTop){result=document.documentElement.scrollTop;}
else if(document.body){result=document.body.scrollTop;}
return result;};var makePreviewHtml=function(){if(!wmd.panels.preview&&!wmd.panels.output){return;}
var text=wmd.panels.input.value;if(text&&text==oldInputText){return;}
else{oldInputText=text;}
var prevTime=new Date().getTime();if(!converter&&wmd.showdown){converter=new wmd.showdown.converter();}
if(converter){text=converter.makeHtml(text);}
var currTime=new Date().getTime();elapsedTime=currTime-prevTime;pushPreviewHtml(text);htmlOut=text;};var applyTimeout=function(){if(timeout){window.clearTimeout(timeout);timeout=undefined;}
if(startType!=="manual"){var delay=0;if(startType==="delayed"){delay=elapsedTime;}
if(delay>maxDelay){delay=maxDelay;}
timeout=window.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(wmd.panels.preview){wmd.panels.preview.scrollTop=(wmd.panels.preview.scrollHeight-wmd.panels.preview.clientHeight)*getScaleFactor(wmd.panels.preview);;}
if(wmd.panels.output){wmd.panels.output.scrollTop=(wmd.panels.output.scrollHeight-wmd.panels.output.clientHeight)*getScaleFactor(wmd.panels.output);;}};this.refresh=function(requiresRefresh){if(requiresRefresh){oldInputText="";makePreviewHtml();}
else{applyTimeout();}};this.processingTime=function(){return elapsedTime;};this.output=function(){return htmlOut;};this.setUpdateMode=function(mode){startType=mode;managerObj.refresh();};var isFirstTimeFilled=true;var pushPreviewHtml=function(text){var emptyTop=position.getTop(wmd.panels.input)-getDocScrollTop();if(wmd.panels.output){if(wmd.panels.output.value!==undefined){wmd.panels.output.value=text;}
else{var newText=text.replace(/&/g,"&");newText=newText.replace(/</g,"<");wmd.panels.output.innerHTML="<pre><code>"+newText+"</code></pre>";}}
if(wmd.panels.preview){if(wmd.options.tagFilter.enabled){text=text.replace(/<[^<>]*>?/gi,function(tag){return(tag.match(wmd.options.tagFilter.allowedTags)||tag.match(wmd.options.tagFilter.patternLink)||tag.match(wmd.options.tagFilter.patternImage))?tag:"";});}
wmd.panels.preview.innerHTML=text;}
setPanelScrollTops();if(isFirstTimeFilled){isFirstTimeFilled=false;return;}
var fullTop=position.getTop(wmd.panels.input)-getDocScrollTop();if(browser.isIE){window.setTimeout(function(){window.scrollBy(0,fullTop-emptyTop);},0);}
else{window.scrollBy(0,fullTop-emptyTop);}};var init=function(){setupEvents(wmd.panels.input,applyTimeout);makePreviewHtml();if(wmd.panels.preview){wmd.panels.preview.scrollTop=0;}
if(wmd.panels.output){wmd.panels.output.scrollTop=0;}};this.destroy=function(){if(poller){poller.destroy();}};init();};var UndoManager=function(wmd,textarea,pastePollInterval,callback){var undoObj=this;var undoStack=[];var stackPtr=0;var mode="none";var lastState;var poller;var timer;var inputStateObj;var setMode=function(newMode,noSave){if(mode!=newMode){mode=newMode;if(!noSave){saveState();}}
if(!browser.isIE||mode!="moving"){timer=window.setTimeout(refreshState,1);}
else{inputStateObj=null;}};var refreshState=function(){inputStateObj=new TextareaState(textarea,wmd);poller.tick();timer=undefined;};this.setCommandMode=function(){mode="command";saveState();timer=window.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(textarea,wmd);undoStack[--stackPtr].restore();if(callback){callback();}}}
mode="none";textarea.focus();refreshState();};this.redo=function(){if(undoObj.canRedo()){undoStack[++stackPtr].restore();if(callback){callback();}}
mode="none";textarea.focus();refreshState();};var saveState=function(){var currState=inputStateObj||new TextareaState(textarea,wmd);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){var keyCode=event.charCode||event.keyCode;var keyCodeChar=String.fromCharCode(keyCode);switch(keyCodeChar){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(textarea,"keypress",function(event){if((event.ctrlKey||event.metaKey)&&(event.keyCode==89||event.keyCode==90)){event.preventDefault();}});var handlePaste=function(){if(browser.isIE||(inputStateObj&&inputStateObj.text!=textarea.value)){if(timer==undefined){mode="paste";saveState();refreshState();}}};poller=new InputPoller(textarea,handlePaste,pastePollInterval);util.addEvent(textarea,"keydown",handleCtrlYZ);util.addEvent(textarea,"keydown",handleModeChange);util.addEvent(textarea,"mousedown",function(){setMode("moving");});textarea.onpaste=handlePaste;textarea.ondrop=handlePaste;};var init=function(){setEventHandlers();refreshState();saveState();};this.destroy=function(){if(poller){poller.destroy();}};init();};WMDEditor.util=util;WMDEditor.position=position;WMDEditor.TextareaState=TextareaState;WMDEditor.InputPoller=InputPoller;WMDEditor.PreviewManager=PreviewManager;WMDEditor.UndoManager=UndoManager;var doc=window.document;var re=window.RegExp;var nav=window.navigator;function get_browser(){var b={};b.isIE=/msie/.test(nav.userAgent.toLowerCase());b.isIE_5or6=/msie 6/.test(nav.userAgent.toLowerCase())||/msie 5/.test(nav.userAgent.toLowerCase());b.isIE_7plus=b.isIE&&!b.isIE_5or6;b.isOpera=/opera/.test(nav.userAgent.toLowerCase());b.isKonqueror=/konqueror/.test(nav.userAgent.toLowerCase());return b;}
var browser=get_browser();var wmdBase=function(wmd,wmd_options){wmd.Command={};wmd.Global={};wmd.buttons={};wmd.showdown=window.Showdown;var util=WMDEditor.util;var position=WMDEditor.position;var command=wmd.Command;wmd.ieCachedRange=null;wmd.ieRetardedClick=false;wmd.editor=function(previewRefreshCallback){if(!previewRefreshCallback){previewRefreshCallback=function(){};}
var inputBox=wmd.panels.input;var offsetHeight=0;var editObj=this;var mainDiv;var mainSpan;var div;var creationHandle;var undoMgr;var doClick=function(button){inputBox.focus();if(button.textOp){if(undoMgr){undoMgr.setCommandMode();}
var state=new TextareaState(wmd.panels.input,wmd);if(!state){return;}
var chunks=state.getChunks();var fixupInputArea=function(){inputBox.focus();if(chunks){state.setChunks(chunks);}
state.restore();previewRefreshCallback();};var useDefaultText=true;var noCleanup=button.textOp(chunks,fixupInputArea,useDefaultText);if(!noCleanup){fixupInputArea();}}
if(button.execute){button.execute(editObj);}};var setUndoRedoButtonStates=function(){if(undoMgr){if(wmd.buttons["wmd-undo-button"])setupButton(wmd.buttons["wmd-undo-button"],undoMgr.canUndo());if(wmd.buttons["wmd-redo-button"])setupButton(wmd.buttons["wmd-redo-button"],undoMgr.canRedo());}};var setupButton=function(button,isEnabled){if(isEnabled){button.className=button.className.replace(new RegExp("(^|\\s+)disabled(\\s+|$)"),' ');if(browser.isIE){button.onmousedown=function(){wmd.ieRetardedClick=true;wmd.ieCachedRange=document.selection.createRange();};}
if(!button.isHelp){button.onclick=function(){if(this.onmouseout){this.onmouseout();}
doClick(this);return false;};}}
else{button.className+=(button.className?' ':'')+'disabled';button.onmouseover=button.onmouseout=button.onclick=function(){};}};var makeSpritedButtonRow=function(){var buttonBar=(typeof wmd_options.button_bar=='string')?document.getElementById(wmd_options.button_bar||"wmd-button-bar"):wmd_options.button_bar;var normalYShift="0px";var disabledYShift="-20px";var highlightYShift="-40px";var buttonRow=document.createElement("ul");buttonRow.className="wmd-button-row";buttonRow=buttonBar.appendChild(buttonRow);var xoffset=0;function createButton(name,title,textOp){var button=document.createElement("li");wmd.buttons[name]=button;button.className="wmd-button "+name;button.XShift=xoffset+"px";xoffset-=20;if(title)button.title=title;if(textOp)button.textOp=textOp;return button;}
function addButton(name,title,textOp){var button=createButton(name,title,textOp);setupButton(button,true);buttonRow.appendChild(button);return button;}
function addSpacer(){var spacer=document.createElement("li");spacer.className="wmd-spacer";buttonRow.appendChild(spacer);return spacer;}
var modifierKey=(navigator.appVersion.indexOf("Mac")!=-1)?"Cmd":"Ctrl";var buttonlist=wmd_options.buttons.split(' ');for(var i=0;i<buttonlist.length;i++){switch(buttonlist[i]){case"bold":addButton("wmd-bold-button","Strong <strong> "+modifierKey+"+B",command.doBold);break;case"italic":addButton("wmd-italic-button","Emphasis <em> "+modifierKey+"+I",command.doItalic);break;case'link':addButton("wmd-link-button","Hyperlink <a> "+modifierKey+"+L",function(chunk,postProcessing,useDefaultText){return command.doLinkOrImage(chunk,postProcessing,false);});break;case'blockquote':addButton("wmd-quote-button","Blockquote <blockquote> "+modifierKey+"+Q",command.doBlockquote);break;case'code':addButton("wmd-code-button","Code Sample <pre><code> "+modifierKey+"+K",command.doCode);break;case'image':addButton("wmd-image-button","Image <img> "+modifierKey+"+G",function(chunk,postProcessing,useDefaultText){return command.doLinkOrImage(chunk,postProcessing,true);});break;case'ol':addButton("wmd-olist-button","Numbered List <ol> "+modifierKey+"+O",function(chunk,postProcessing,useDefaultText){command.doList(chunk,postProcessing,true,useDefaultText);});break;case'ul':addButton("wmd-ulist-button","Bulleted List <ul> "+modifierKey+"+U",function(chunk,postProcessing,useDefaultText){command.doList(chunk,postProcessing,false,useDefaultText);});break;case'heading':addButton("wmd-heading-button","Heading <h1>/<h2> "+modifierKey+"+H",command.doHeading);break;case'hr':addButton("wmd-hr-button","Horizontal Rule <hr> "+modifierKey+"+R",command.doHorizontalRule);break;case'undo':var undoButton=addButton("wmd-undo-button","Undo - "+modifierKey+"+Z");undoButton.execute=function(manager){manager.undo();};break;case'redo':var redoButton=addButton("wmd-redo-button","Redo - "+modifierKey+"+Y");if(/win/.test(nav.platform.toLowerCase())){redoButton.title="Redo - "+modifierKey+"+Y";}
else{redoButton.title="Redo - "+modifierKey+"+Shift+Z";}
redoButton.execute=function(manager){manager.redo();};break;case'help':var helpButton=createButton("wmd-help-button");helpButton.isHelp=true;setupButton(helpButton,true);buttonRow.appendChild(helpButton);var helpAnchor=document.createElement("a");helpAnchor.href=wmd_options.helpLink;helpAnchor.target=wmd_options.helpTarget;helpAnchor.title=wmd_options.helpHoverTitle;helpButton.appendChild(helpAnchor);break;case'':addSpacer();break;}}
setUndoRedoButtonStates();};var setupEditor=function(){if(/\?noundo/.test(document.location.href)){wmd.nativeUndo=true;}
if(!wmd.nativeUndo){undoMgr=new UndoManager(wmd,wmd.panels.input,wmd.options.pastePollInterval,function(){previewRefreshCallback();setUndoRedoButtonStates();});}
makeSpritedButtonRow();var keyEvent="keydown";if(browser.isOpera){keyEvent="keypress";}
util.addEvent(inputBox,keyEvent,function(key){if(wmd.options.modifierKeys&&(key.ctrlKey||key.metaKey)){var keyCode=key.charCode||key.keyCode;var keyCodeStr=String.fromCharCode(keyCode).toLowerCase();switch(keyCodeStr){case wmd.options.modifierKeys.bold:if(wmd.buttons["wmd-bold-button"])doClick(wmd.buttons["wmd-bold-button"]);else return;break;case wmd.options.modifierKeys.italic:if(wmd.buttons["wmd-italic-button"])doClick(wmd.buttons["wmd-italic-button"]);else return;break;case wmd.options.modifierKeys.link:if(wmd.buttons["wmd-link-button"])doClick(wmd.buttons["wmd-link-button"]);else return;break;case wmd.options.modifierKeys.quote:if(wmd.buttons["wmd-quote-button"])doClick(wmd.buttons["wmd-quote-button"]);else return;break;case wmd.options.modifierKeys.code:if(wmd.buttons["wmd-code-button"])doClick(wmd.buttons["wmd-code-button"]);else return;break;case wmd.options.modifierKeys.image:if(wmd.buttons["wmd-image-button"])doClick(wmd.buttons["wmd-image-button"]);else return;break;case wmd.options.modifierKeys.orderedList:if(wmd.buttons["wmd-olist-button"])doClick(wmd.buttons["wmd-olist-button"]);else return;break;case wmd.options.modifierKeys.unorderedList:if(wmd.buttons["wmd-ulist-button"])doClick(wmd.buttons["wmd-ulist-button"]);else return;break;case wmd.options.modifierKeys.heading:if(wmd.buttons["wmd-heading-button"])doClick(wmd.buttons["wmd-heading-button"]);else return;break;case wmd.options.modifierKeys.horizontalRule:if(wmd.buttons["wmd-hr-button"])doClick(wmd.buttons["wmd-hr-button"]);else return;break;case wmd.options.modifierKeys.redo:if(wmd.buttons["wmd-redo-button"])doClick(wmd.buttons["wmd-redo-button"]);else return;break;case wmd.options.modifierKeys.undo:if(key.shiftKey){if(wmd.buttons["wmd-redo-button"])doClick(wmd.buttons["wmd-redo-button"]);else return;}else{if(wmd.buttons["wmd-undo-button"])doClick(wmd.buttons["wmd-undo-button"]);else return;}
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){fakeButton={};fakeButton.textOp=command.doAutoindent;doClick(fakeButton);}}});if(browser.isIE){util.addEvent(inputBox,"keydown",function(key){var code=key.keyCode;if(code===27){return false;}});}};this.undo=function(){if(undoMgr){undoMgr.undo();}};this.redo=function(){if(undoMgr){undoMgr.redo();}};var init=function(){setupEditor();};this.destroy=function(){if(undoMgr){undoMgr.destroy();}
if(div.parentNode){div.parentNode.removeChild(div);}
if(inputBox){inputBox.style.marginTop="";}
window.clearInterval(creationHandle);};init();};command.prefixes="(?:\\s{4,}|\\s*>|\\s*-\\s+|\\s*\\d+\\.|=|\\+|-|_|\\*|#|\\s*\\[[^\n]]+\\]:)";command.unwrap=function(chunk){var txt=new re("([^\\n])\\n(?!(\\n|"+command.prefixes+"))","g");chunk.selection=chunk.selection.replace(txt,"$1 $2");};command.wrap=function(chunk,len){command.unwrap(chunk);var regex=new re("(.{1,"+len+"})( +|$\\n?)","gm");chunk.selection=chunk.selection.replace(regex,function(line,marked){if(new re("^"+command.prefixes,"").test(line)){return line;}
return marked+"\n";});chunk.selection=chunk.selection.replace(/\s+$/,"");};command.doBold=function(chunk,postProcessing,useDefaultText){return command.doBorI(chunk,2,"strong text");};command.doItalic=function(chunk,postProcessing,useDefaultText){return command.doBorI(chunk,1,"emphasized text");};command.doBorI=function(chunk,nStars,insertText){chunk.trimWhitespace();chunk.selection=chunk.selection.replace(/\n{2,}/g,"\n");chunk.before.search(/(\**$)/);var starsBefore=re.$1;chunk.after.search(/(^\**)/);var starsAfter=re.$1;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;};command.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;};command.addLinkDef=function(chunk,linkDef){var refNumber=0;var defsToAdd={};chunk.before=command.stripLinkDefs(chunk.before,defsToAdd);chunk.selection=command.stripLinkDefs(chunk.selection,defsToAdd);chunk.after=command.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,link,id,end){if(defsToAdd[id]){addDefNumber(defsToAdd[id]);return link+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;};command.doLinkOrImage=function(chunk,postProcessing,isImage){chunk.trimWhitespace();chunk.findTags(/\s*!?\[/,/\][ ]?(?:\n[ ]*)?(\[.*?\])?/);if(chunk.endTag.length>1){chunk.startTag=chunk.startTag.replace(/!?\[/,"");chunk.endTag="";command.addLinkDef(chunk,null);}
else{if(/\n\n/.test(chunk.selection)){command.addLinkDef(chunk,null);return;}
var makeLinkMarkdown=function(link){console.log(link);if(link!==null){chunk.startTag=chunk.endTag="";var linkDef=" [999]: "+link;var num=command.addLinkDef(chunk,linkDef);chunk.startTag=isImage?"![":"[";chunk.endTag="]["+num+"]";if(!chunk.selection){if(isImage){chunk.selection="alt text";}
else{chunk.selection="link text";}}}
postProcessing();};if(isImage){util.prompt(wmd_options.imageDialogText,wmd_options.imageDefaultText,makeLinkMarkdown,'Image');}
else{util.prompt(wmd_options.linkDialogText,wmd_options.linkDefaultText,makeLinkMarkdown,'Link');}
return true;}};command.doAutoindent=function(chunk,postProcessing,useDefaultText){if(!wmd.options.autoFormatting)return;if(wmd.options.autoFormatting.list)chunk.before=chunk.before.replace(/(\n|^)[ ]{0,3}([*+-]|\d+[.])[ \t]*\n$/,"\n\n");if(wmd.options.autoFormatting.quote)chunk.before=chunk.before.replace(/(\n|^)[ ]{0,3}>[ \t]*\n$/,"\n\n");if(wmd.options.autoFormatting.code)chunk.before=chunk.before.replace(/(\n|^)[ \t]+\n$/,"\n\n");useDefaultText=false;if(/(\n|^)[ ]{0,3}([*+-])[ \t]+.*\n$/.test(chunk.before)){if(command.doList&&wmd.options.autoFormatting.list){command.doList(chunk,postProcessing,false,true);}}
if(/(\n|^)[ ]{0,3}(\d+[.])[ \t]+.*\n$/.test(chunk.before)){if(command.doList&&wmd.options.autoFormatting.list){command.doList(chunk,postProcessing,true,true);}}
if(/(\n|^)[ ]{0,3}>[ \t]+.*\n$/.test(chunk.before)){if(command.doBlockquote&&wmd.options.autoFormatting.quote){command.doBlockquote(chunk,postProcessing,useDefaultText);}}
if(/(\n|^)(\t|[ ]{4,}).*\n$/.test(chunk.before)){if(command.doCode&&wmd.options.autoFormatting.code){command.doCode(chunk,postProcessing,useDefaultText);}}};command.doBlockquote=function(chunk,postProcessing,useDefaultText){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"";});var defaultText=useDefaultText?"Blockquote":"";chunk.selection=chunk.selection.replace(/^(\s|>)+$/,"");chunk.selection=chunk.selection||defaultText;if(chunk.before){chunk.before=chunk.before.replace(/\n?$/,"\n");}
if(chunk.after){chunk.after=chunk.after.replace(/^\n?/,"\n");}
chunk.before=chunk.before.replace(/(((\n|^)(\n[ \t]*)*>(.+\n)*.*)+(\n[ \t]*)*$)/,function(totalMatch){chunk.startTag=totalMatch;return"";});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)){command.wrap(chunk,wmd_options.lineLength-2);chunk.selection=chunk.selection.replace(/^/gm,"> ");replaceBlanksInTags(true);chunk.addBlankLines();}
else{chunk.selection=chunk.selection.replace(/^[ ]{0,3}> ?/gm,"");command.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");}}
if(!/\n/.test(chunk.selection)){chunk.selection=chunk.selection.replace(/^(> *)/,function(wholeMatch,blanks){chunk.startTag+=blanks;return"";});}};command.doCode=function(chunk,postProcessing,useDefaultText){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 nLinesBefore=1;var nLinesAfter=1;if(/\n(\t|[ ]{4,}).*\n$/.test(chunk.before)||chunk.after===""){nLinesBefore=0;}
if(/^\n(\t|[ ]{4,})/.test(chunk.after)){nLinesAfter=0;}
chunk.addBlankLines(nLinesBefore,nLinesAfter);if(!chunk.selection){chunk.startTag=" ";chunk.selection=useDefaultText?"enter code here":"";}
else{if(/^[ ]{0,3}\S/m.test(chunk.selection)){chunk.selection=chunk.selection.replace(/^/gm," ");}
else{chunk.selection=chunk.selection.replace(/^[ ]{4}/gm,"");}}}
else{chunk.trimWhitespace();chunk.findTags(/`/,/`/);if(!chunk.startTag&&!chunk.endTag){chunk.startTag=chunk.endTag="`";if(!chunk.selection){chunk.selection=useDefaultText?"enter code here":"";}}
else if(chunk.endTag&&!chunk.startTag){chunk.before+=chunk.endTag;chunk.endTag="";}
else{chunk.startTag=chunk.endTag="";}}};command.doList=function(chunk,postProcessing,isNumberedList,useDefaultText){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");command.unwrap(chunk);chunk.addBlankLines();if(hasDigits){chunk.after=chunk.after.replace(nextItemsRegex,getPrefixedItem);}
if(isNumberedList==hasDigits){return;}}
var nLinesBefore=1;chunk.before=chunk.before.replace(previousItemsRegex,function(itemText){if(/^\s*([*+-])/.test(itemText)){bullet=re.$1;}
nLinesBefore=/[^\n]\n\n[^\n]/.test(itemText)?1:0;return getPrefixedItem(itemText);});if(!chunk.selection){chunk.selection=useDefaultText?"List item":" ";}
var prefix=getItemPrefix();var nLinesAfter=1;chunk.after=chunk.after.replace(nextItemsRegex,function(itemText){nLinesAfter=/[^\n]\n\n[^\n]/.test(itemText)?1:0;return getPrefixedItem(itemText);});chunk.trimWhitespace(true);chunk.addBlankLines(nLinesBefore,nLinesAfter,true);chunk.startTag=prefix;var spaces=prefix.replace(/./g," ");command.wrap(chunk,wmd_options.lineLength-spaces.length);chunk.selection=chunk.selection.replace(/\n/g,"\n"+spaces);};command.doHeading=function(chunk,postProcessing,useDefaultText){chunk.selection=chunk.selection.replace(/\s+/g," ");chunk.selection=chunk.selection.replace(/(^\s+|\s+$)/g,"");if(!chunk.selection){chunk.startTag="## ";chunk.selection="Heading";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.addBlankLines(1,1);var headerLevelToCreate=headerLevel==0?2:headerLevel-1;if(headerLevelToCreate>0){var headerChar=headerLevelToCreate>=2?"-":"=";var len=chunk.selection.length;if(len>wmd_options.lineLength){len=wmd_options.lineLength;}
chunk.endTag="\n";while(len--){chunk.endTag+=headerChar;}}};command.doHorizontalRule=function(chunk,postProcessing,useDefaultText){chunk.startTag="----------\n";chunk.selection="";chunk.addBlankLines(2,1,true);};};})();function setup_wmd(options){return new WMDEditor(options);}
Showdown={};Showdown.converter=function(){var g_urls;var g_titles;var g_html_blocks;var g_list_level=0;this.makeHtml=function(text){g_urls=[];g_titles=[];g_html_blocks=[];text=text.replace(/~/g,"~T");text=text.replace(/\$/g,"~D");text=text.replace(/\r\n/g,"\n");text=text.replace(/\r/g,"\n");text="\n\n"+text+"\n\n";text=_Detab(text);text=text.replace(/^[ \t]+$/mg,"");text=_HashHTMLBlocks(text);text=_StripLinkDefinitions(text);text=_RunBlockGamut(text);text=_UnescapeSpecialChars(text);text=text.replace(/~D/g,"$$");text=text.replace(/~T/g,"~");text=text.replace(/https?\:\/\/[^"\s<>]*[^.,;'">\:\s<>\)\]\!]/g,function(wholeMatch,matchIndex){var left=text.slice(Math.max(0,text.lastIndexOf('\n',matchIndex)),matchIndex);var right=text.slice(matchIndex);if(left.match(/<([a-z]+)\s[^>]+>?$/)&&right.match(/^[^>]*>/)){return wholeMatch;}
return"<a href='"+wholeMatch+"'>"+wholeMatch+"</a>";});text=text.replace(/[a-z0-9_\-+=.]+@[a-z0-9\-]+(\.[a-z0-9\-]+)+/ig,function(wholeMatch,m1,matchIndex){var left=text.slice(Math.max(0,text.lastIndexOf('\n',matchIndex)),matchIndex);if(left.match(/<([a-z]+)\s[^>]+>?$/)||left.match(/mailto\:$/)){return wholeMatch;}
return"<a href='mailto:"+wholeMatch+"'>"+wholeMatch+"</a>";});return text;};var _StripLinkDefinitions=function(text){text=text.replace(/^[ ]{0,3}\[(.+)\]:[ \t]*\n?[ \t]*<?(\S+?)>?[ \t]*\n?[ \t]*(?:(\n*)["(](.+?)[")][ \t]*)?(?:\n+)/gm,function(wholeMatch,m1,m2,m3,m4){m1=m1.toLowerCase();g_urls[m1]=_EncodeAmpsAndAngles(m2);if(m3){return m3+m4;}else if(m4){g_titles[m1]=m4.replace(/"/g,""");}
return"";});return text;};var _HashHTMLBlocks=function(text){text=text.replace(/\n/g,"\n\n");var block_tags_a="p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del";var block_tags_b="p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math";text=text.replace(/^(<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del)\b[^\r]*?\n<\/\2>[ \t]*(?=\n+))/gm,hashElement);text=text.replace(/^(<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math)\b[^\r]*?.*<\/\2>[ \t]*(?=\n+)\n)/gm,hashElement);text=text.replace(/(\n[ ]{0,3}(<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g,hashElement);text=text.replace(/(\n\n[ ]{0,3}<!(--[^\r]*?--\s*)+>[ \t]*(?=\n{2,}))/g,hashElement);text=text.replace(/(?:\n\n)([ ]{0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g,hashElement);text=text.replace(/\n\n/g,"\n");return text;};var hashElement=function(wholeMatch,m1){var blockText=m1;blockText=blockText.replace(/\n\n/g,"\n");blockText=blockText.replace(/^\n/,"");blockText=blockText.replace(/\n+$/g,"");blockText="\n\n~K"+(g_html_blocks.push(blockText)-1)+"K\n\n";return blockText;};var _RunBlockGamut=function(text){text=_DoHeaders(text);var key=hashBlock("<hr />");text=text.replace(/^[ ]{0,2}([ ]?\*[ ]?){3,}[ \t]*$/gm,key);text=text.replace(/^[ ]{0,2}([ ]?\-[ ]?){3,}[ \t]*$/gm,key);text=text.replace(/^[ ]{0,2}([ ]?\_[ ]?){3,}[ \t]*$/gm,key);text=_DoLists(text);text=_DoCodeBlocks(text);text=_DoBlockQuotes(text);text=_HashHTMLBlocks(text);text=_FormParagraphs(text);return text;};var _RunSpanGamut=function(text){text=_DoCodeSpans(text);text=_EscapeSpecialCharsWithinTagAttributes(text);text=_EncodeBackslashEscapes(text);text=_DoImages(text);text=_DoAnchors(text);text=_DoAutoLinks(text);text=_EncodeAmpsAndAngles(text);text=_ConvertExtraSpecialCharacters(text);text=_DoItalicsAndBold(text);text=text.replace(/ {2,}\n/g," <br />\n");return text;};var _EscapeSpecialCharsWithinTagAttributes=function(text){var regex=/(<[a-z\/!$]("[^"]*"|'[^']*'|[^'">])*>|<!(--.*?--\s*)+>)/gi;text=text.replace(regex,function(wholeMatch){var tag=wholeMatch.replace(/(.)<\/?code>(?=.)/g,"$1`");tag=escapeCharacters(tag,"\\`*_");return tag;});return text;};var _DoAnchors=function(text){text=text.replace(/(\[((?:\[[^\]]*\]|[^\[\]])*)\][ ]?(?:\n[ ]*)?\[(.*?)\])()()()()/g,writeAnchorTag);text=text.replace(/(\[((?:\[[^\]]*\]|[^\[\]])*)\]\([ \t]*()<?(.*?)>?[ \t]*((['"])(.*?)\6[ \t]*)?\))/g,writeAnchorTag);text=text.replace(/(\[([^\[\]]+)\])()()()()()/g,writeAnchorTag);return text;};var writeAnchorTag=function(wholeMatch,m1,m2,m3,m4,m5,m6,m7){if(m7===undefined)m7="";var whole_match=m1;var link_text=m2;var link_id=m3.toLowerCase();var url=m4;var title=m7;var blank_target=false;if(url===""){if(link_id===""){link_id=link_text.toLowerCase().replace(/ ?\n/g," ");}else{if(link_id[0]=="!"){blank_target=true;link_id=link_id.substr(1);}}
url="#"+link_id;if(g_urls[link_id]!==undefined){url=g_urls[link_id];if(g_titles[link_id]!==undefined){title=g_titles[link_id];}
if(url[0]=="!"){blank_target=true;url=url.substr(1);}}
else{if(whole_match.search(/\(\s*\)$/m)>-1){url="";}else{return whole_match;}}}else{if(url[0]=="!"){blank_target=true;url=url.substr(1);}}
url=escapeCharacters(url,"*_");var result="<a href=\""+url+"\"";if(title!==""){title=title.replace(/"/g,""");title=escapeCharacters(title,"*_");result+=" title=\""+title+"\"";}
if(blank_target){result+=" target=\"_blank\"";}
result+=">"+link_text+"</a>";return result;};var _DoImages=function(text){text=text.replace(/(!\[(.*?)\][ ]?(?:\n[ ]*)?\[(.*?)\])()()()()/g,writeImageTag);text=text.replace(/(!\[(.*?)\]\s?\([ \t]*()<?(\S+?)>?[ \t]*((['"])(.*?)\6[ \t]*)?\))/g,writeImageTag);return text;};var writeImageTag=function(wholeMatch,m1,m2,m3,m4,m5,m6,m7){var whole_match=m1;var alt_text=m2;var link_id=m3.toLowerCase();var url=m4;var title=m7;if(!title)title="";if(url===""){if(link_id===""){link_id=alt_text.toLowerCase().replace(/ ?\n/g," ");}
url="#"+link_id;if(g_urls[link_id]!==undefined){url=g_urls[link_id];if(g_titles[link_id]!==undefined){title=g_titles[link_id];}}
else{return whole_match;}}
alt_text=alt_text.replace(/"/g,""");url=escapeCharacters(url,"*_");var result="<img src=\""+url+"\" alt=\""+alt_text+"\"";title=title.replace(/"/g,""");title=escapeCharacters(title,"*_");result+=" title=\""+title+"\"";result+=" />";return result;};var _DoHeaders=function(text){text=text.replace(/^(.+)[ \t]*\n=+[ \t]*\n+/gm,function(wholeMatch,m1){return hashBlock("<h1>"+_RunSpanGamut(m1)+"</h1>");});text=text.replace(/^(.+)[ \t]*\n-+[ \t]*\n+/gm,function(matchFound,m1){return hashBlock("<h2>"+_RunSpanGamut(m1)+"</h2>");});text=text.replace(/^(\#{1,6})[ \t]*(.+?)[ \t]*\#*\n+/gm,function(wholeMatch,m1,m2){var h_level=m1.length;return hashBlock("<h"+h_level+">"+_RunSpanGamut(m2)+"</h"+h_level+">");});return text;};var _ProcessListItems;var _DoLists=function(text){text+="~0";var whole_list=/^(([ ]{0,3}([*+\-]|\d+[.])[ \t]+)[^\r]+?(~0|\n{2,}(?=\S)(?![ \t]*(?:[*+\-]|\d+[.])[ \t]+)))/gm;if(g_list_level){text=text.replace(whole_list,function(wholeMatch,m1,m2){var list=m1;var list_type=(m2.search(/[*+\-]/g)>-1)?"ul":"ol";list=list.replace(/\n{2,}/g,"\n\n\n");var result=_ProcessListItems(list);result=result.replace(/\s+$/,"");result="<"+list_type+">"+result+"</"+list_type+">\n";return result;});}else{whole_list=/(\n\n|^\n?)(([ ]{0,3}([*+\-]|\d+[.])[ \t]+)[^\r]+?(~0|\n{2,}(?=\S)(?![ \t]*(?:[*+\-]|\d+[.])[ \t]+)))/g;text=text.replace(whole_list,function(wholeMatch,m1,m2,m3){var runup=m1;var list=m2;var list_type=(m3.search(/[*+\-]/g)>-1)?"ul":"ol";list=list.replace(/\n{2,}/g,"\n\n\n");var result=_ProcessListItems(list);result=runup+"<"+list_type+">\n"+result+"</"+list_type+">\n";return result;});}
text=text.replace(/~0/,"");return text;};_ProcessListItems=function(list_str){g_list_level++;list_str=list_str.replace(/\n{2,}$/,"\n");list_str+="~0";list_str=list_str.replace(/(\n)?(^[ \t]*)([*+\-]|\d+[.])[ \t]+([^\r]+?(\n{1,2}))(?=\n*(~0|\2([*+\-]|\d+[.])[ \t]+))/gm,function(wholeMatch,m1,m2,m3,m4){var item=m4;var leading_line=m1;var leading_space=m2;if(leading_line||(item.search(/\n{2,}/)>-1)){item=_RunBlockGamut(_Outdent(item));}
else{item=_DoLists(_Outdent(item));item=item.replace(/\n$/,"");item=_RunSpanGamut(item);}
return"<li>"+item+"</li>\n";});list_str=list_str.replace(/~0/g,"");g_list_level--;return list_str;};var _DoCodeBlocks=function(text){text+="~0";text=text.replace(/(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=~0))/g,function(wholeMatch,m1,m2){var codeblock=m1;var nextChar=m2;codeblock=_EncodeCode(_Outdent(codeblock));codeblock=_Detab(codeblock);codeblock=codeblock.replace(/^\n+/g,"");codeblock=codeblock.replace(/\n+$/g,"");codeblock="<pre><code>"+codeblock+"\n</code></pre>";return hashBlock(codeblock)+nextChar;});text=text.replace(/~0/,"");return text;};var hashBlock=function(text){text=text.replace(/(^\n+|\n+$)/g,"");return"\n\n~K"+(g_html_blocks.push(text)-1)+"K\n\n";};var _DoCodeSpans=function(text){text=text.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm,function(wholeMatch,m1,m2,m3,m4){var c=m3;c=c.replace(/^([ \t]*)/g,"");c=c.replace(/[ \t]*$/g,"");c=_EncodeCode(c);return m1+"<code>"+c+"</code>";});text=text.replace(/(^|[^\\])(\^{2})([^\r]*?[^\^]{2})\2(?!\^)/gm,function(wholeMatch,m1,m2,m3,m4){var c=m3;c=c.replace(/^([ \t]*)/g,"");c=c.replace(/[ \t]*$/g,"");c=_EncodeCode(c);return m1+"<sup>"+c+"</sup>";});text=text.replace(/(^|[^\\])(,{2})([^\r]*?[^,]{2})\2(?!,)/gm,function(wholeMatch,m1,m2,m3,m4){var c=m3;c=c.replace(/^([ \t]*)/g,"");c=c.replace(/[ \t]*$/g,"");c=_EncodeCode(c);return m1+"<sub>"+c+"</sub>";});text=text.replace(/(^|[^\\])(~T~T)([^\r]*?[^~]{2})\2(?!~)/gm,function(wholeMatch,m1,m2,m3,m4){var c=m3;c=c.replace(/^([ \t]*)/g,"");c=c.replace(/[ \t]*$/g,"");c=_EncodeCode(c);return m1+"<strike>"+c+"</strike>";});return text;};var _EncodeCode=function(text){text=text.replace(/&/g,"&");text=text.replace(/</g,"<");text=text.replace(/>/g,">");text=text.replace(/\u2026/g,'…').replace(/\u00AB/g,'«').replace(/\u00BB/g,'»').replace(/\u201C/g,'“').replace(/\u201D/g,'”').replace(/\u2018/g,'‘').replace(/\u2019/g,'’').replace(/\u2014/g,'—').replace(/\u2013/g,'–').replace(/\u2022/g,'•').replace(/\u2122/g,'™').replace(/\u00A9/g,'©').replace(/\u00AE/g,'®');text=escapeCharacters(text,"*_{}[]\\",false);return text;};var _DoItalicsAndBold=function(text){if(true){text=text.replace(/(\*\*)(?=\S)([^\r]*?\S[*]*)\1/g,"<strong>$2</strong>");text=text.replace(/(\w)_(\w)/g,"$1~E95E$2");text=text.replace(/(\*)(?=\S)([^\r]*?\S)\1/g,"<em>$2</em>");text=text.replace(/(_)(?=\S)([^\r]*?\S)\1/g,"<u>$2</u>");}else{text=text.replace(/(\*\*|__)(?=\S)([^\r]*?\S[*_]*)\1/g,"<strong>$2</strong>");text=text.replace(/(\w)_(\w)/g,"$1~E95E$2");text=text.replace(/(\*|_)(?=\S)([^\r]*?\S)\1/g,"<em>$2</em>");}
return text;};var _DoBlockQuotes=function(text){text=text.replace(/((^[ \t]*>[ \t]?.+\n(.+\n)*\n*)+)/gm,function(wholeMatch,m1){var bq=m1;bq=bq.replace(/^[ \t]*>[ \t]?/gm,"~0");bq=bq.replace(/~0/g,"");bq=bq.replace(/^[ \t]+$/gm,"");bq=_RunBlockGamut(bq);bq=bq.replace(/(^|\n)/g,"$1 ");bq=bq.replace(/(\s*<pre>[^\r]+?<\/pre>)/gm,function(wholeMatch,m1){var pre=m1;pre=pre.replace(/^ {2}/mg,"~0");pre=pre.replace(/~0/g,"");return pre;});return hashBlock("<blockquote>\n"+bq+"\n</blockquote>");});return text;};var _FormParagraphs=function(text){text=text.replace(/^\n+/g,"");text=text.replace(/\n+$/g,"");var i;var grafs=text.split(/\n{2,}/g);var grafsOut=[];var end=grafs.length;for(i=0;i<end;i++){var str=grafs[i];var p_tag='<p>';if(str.search(/~K(\d+)K/g)>=0){grafsOut.push(str);}
else if(str.search(/\S/)>=0){str=_RunSpanGamut(str);if(str.substr(0,2)==='->'){if(str.substr(-5)==='<-'){p_tag='<p align="center">';str=str.slice(2,-5);}else{p_tag='<p align="right">';str=str.substring(2);}}
str=str.replace(/\n/g,"<br />");str=str.replace(/^([ \t]*)/g,p_tag);str+="</p>";grafsOut.push(str);}}
end=grafsOut.length;for(i=0;i<end;i++){while(grafsOut[i].search(/~K(\d+)K/)>=0){var blockText=g_html_blocks[RegExp.$1];blockText=blockText.replace(/\$/g,"$$$$");grafsOut[i]=grafsOut[i].replace(/~K\d+K/,blockText);}}
return grafsOut.join("\n\n");};var _EncodeAmpsAndAngles=function(text){text=text.replace(/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/g,"&");text=text.replace(/<(?![a-z\/?\$!])/gi,"<");text=text.replace(/\u2026/g,'…').replace(/\u00AB/g,'«').replace(/\u00BB/g,'»').replace(/\u201C/g,'“').replace(/\u201D/g,'”').replace(/\u2018/g,'‘').replace(/\u2019/g,'’').replace(/\u2014/g,'—').replace(/\u2013/g,'–').replace(/\u2022/g,'•').replace(/\u2122/g,'™').replace(/\u00A9/g,'©').replace(/\u00AE/g,'®');return text;};var _ConvertExtraSpecialCharacters=function(text){text=text.replace(/\.\.\./g,'…').replace(/\(c\)/g,'©').replace(/\(r\)/g,'®').replace(/\(tm\)/g,'™').replace(/\-\-/g,'—');return text;};var _EncodeBackslashEscapes=function(text){text=text.replace(/\\(\\)/g,escapeCharacters_callback);text=text.replace(/\\([`*_{}\[\]()>#+-.!])/g,escapeCharacters_callback);return text;};var _DoAutoLinks=function(text){text=text.replace(/(?:")<((https?|ftp|dict):[^'">\s]+)>/gi,"<a href=\"$1\">$1</a>");text=text.replace(/<(?:mailto:)?([\-.\w]+\@[\-a-z0-9]+(\.[\-a-z0-9]+)*\.[a-z]+)>/gi,function(wholeMatch,m1){return _EncodeEmailAddress(_UnescapeSpecialChars(m1));});return text;};var _EncodeEmailAddress=function(addr){function char2hex(ch){var hexDigits='0123456789ABCDEF';var dec=ch.charCodeAt(0);return(hexDigits.charAt(dec>>4)+hexDigits.charAt(dec&15));}
var encode=[function(ch){return"&#"+ch.charCodeAt(0)+";";},function(ch){return"&#x"+char2hex(ch)+";";},function(ch){return ch;}];addr="mailto:"+addr;addr=addr.replace(/./g,function(ch){if(ch=="@"){ch=encode[Math.floor(Math.random()*2)](ch);}else if(ch!=":"){var r=Math.random();ch=(r>0.9?encode[2](ch):r>0.45?encode[1](ch):encode[0](ch));}
return ch;});addr="<a href=\""+addr+"\">"+addr+"</a>";addr=addr.replace(/">.+:/g,"\">");return addr;};var _UnescapeSpecialChars=function(text){text=text.replace(/~E(\d+)E/g,function(wholeMatch,m1){var charCodeToReplace=parseInt(m1,10);return String.fromCharCode(charCodeToReplace);});return text;};var _Outdent=function(text){text=text.replace(/^(\t|[ ]{1,4})/gm,"~0");text=text.replace(/~0/g,"");return text;};var _Detab=function(text){text=text.replace(/\t(?=\t)/g," ");text=text.replace(/\t/g,"~A~B");text=text.replace(/~B(.+?)~A/g,function(wholeMatch,m1,m2){var leadingText=m1;var numSpaces=4-leadingText.length%4;for(var i=0;i<numSpaces;i++)leadingText+=" ";return leadingText;});text=text.replace(/~A/g," ");text=text.replace(/~B/g,"");return text;};var escapeCharacters=function(text,charsToEscape,afterBackslash){var regexString="(["+charsToEscape.replace(/([\[\]\\])/g,"\\$1")+"])";if(afterBackslash){regexString="\\\\"+regexString;}
var regex=new RegExp(regexString,"g");text=text.replace(regex,escapeCharacters_callback);return text;};var escapeCharacters_callback=function(wholeMatch,m1){var charCodeToEscape=m1.charCodeAt(0);return"~E"+charCodeToEscape+"E";};};