diff options
Diffstat (limited to 'lib/scripts/edit.js')
-rw-r--r-- | lib/scripts/edit.js | 176 |
1 files changed, 49 insertions, 127 deletions
diff --git a/lib/scripts/edit.js b/lib/scripts/edit.js index c3265c477..34305c53d 100644 --- a/lib/scripts/edit.js +++ b/lib/scripts/edit.js @@ -153,6 +153,8 @@ function initToolbar(tbid,edid,tb){ { if(eval(actionFunc+"(btn, tb[i], edid, i)")) toolbar.appendChild(btn); + }else{ + alert('unknown type: '+tb[i]['type']); } } // end for } @@ -258,144 +260,64 @@ function addBtnActionMediapopup(btn, props) return true; } +function addBtnActionAutohead(btn, props, edid, id) +{ + eval("btn.onclick = function(){"+ + "insertHeadline('"+edid+"',"+props['mod']+",'"+jsEscape(props['text'])+"'); "+ + "return false};"); + return true; +} + + + + /** - * Format selection - * - * Apply tagOpen/tagClose to selection in textarea, use sampleText instead - * of selection if there is none. Copied and adapted from phpBB + * Determine the current section level while editing * - * @author phpBB development team - * @author MediaWiki development team - * @author Andreas Gohr <andi@splitbrain.org> - * @author Jim Raynor <jim_raynor@web.de> + * @author Andreas Gohr <gohr@cosmocode.de> */ -function insertTags(edid,tagOpen, tagClose, sampleText) { - var txtarea = document.getElementById(edid); - // IE - if(document.selection && !is_gecko) { - var theSelection = document.selection.createRange().text; - var replaced = true; - if(!theSelection){ - replaced = false; - theSelection=sampleText; - } - txtarea.focus(); - - // This has change - var text = theSelection; - if(theSelection.charAt(theSelection.length - 1) == " "){// exclude ending space char, if any - theSelection = theSelection.substring(0, theSelection.length - 1); - r = document.selection.createRange(); - r.text = tagOpen + theSelection + tagClose + " "; - } else { - r = document.selection.createRange(); - r.text = tagOpen + theSelection + tagClose; - } - if(!replaced){ - r.moveStart('character',-text.length-tagClose.length); - r.moveEnd('character',-tagClose.length); - } - r.select(); - // Mozilla - } else if(txtarea.selectionStart || txtarea.selectionStart == '0') { - replaced = false; - var startPos = txtarea.selectionStart; - var endPos = txtarea.selectionEnd; - if(endPos - startPos){ replaced = true; } - var scrollTop=txtarea.scrollTop; - var myText = (txtarea.value).substring(startPos, endPos); - if(!myText) { myText=sampleText;} - if(myText.charAt(myText.length - 1) == " "){ // exclude ending space char, if any - subst = tagOpen + myText.substring(0, (myText.length - 1)) + tagClose + " "; - } else { - subst = tagOpen + myText + tagClose; - } - txtarea.value = txtarea.value.substring(0, startPos) + subst + - txtarea.value.substring(endPos, txtarea.value.length); - txtarea.focus(); - - //set new selection - if(replaced){ - var cPos=startPos+(tagOpen.length+myText.length+tagClose.length); - txtarea.selectionStart=cPos; - txtarea.selectionEnd=cPos; - }else{ - txtarea.selectionStart=startPos+tagOpen.length; - txtarea.selectionEnd=startPos+tagOpen.length+myText.length; - } - txtarea.scrollTop=scrollTop; - // All others - } else { - var copy_alertText=alertText; - var re1=new RegExp("\\$1","g"); - var re2=new RegExp("\\$2","g"); - copy_alertText=copy_alertText.replace(re1,sampleText); - copy_alertText=copy_alertText.replace(re2,tagOpen+sampleText+tagClose); - - if (sampleText) { - text=prompt(copy_alertText); - } else { - text=""; - } - if(!text) { text=sampleText;} - text=tagOpen+text+tagClose; - //append to the end - txtarea.value += "\n"+text; - - // in Safari this causes scrolling - if(!is_safari) { - txtarea.focus(); +function currentHeadlineLevel(textboxId){ + var field = $(textboxId); + var selection = getSelection(field); + var search = field.value.substr(0,selection.start); + var lasthl = search.lastIndexOf("\n=="); + if(lasthl == -1 && field.form.prefix){ + // we need to look in prefix context + search = field.form.prefix.value; + lasthl = search.lastIndexOf("\n=="); } + search = search.substr(lasthl+1,6); - } - // reposition cursor if possible - if (txtarea.createTextRange){ - txtarea.caretPos = document.selection.createRange().duplicate(); - } + if(search == '======') return 1; + if(search.substr(0,5) == '=====') return 2; + if(search.substr(0,4) == '====') return 3; + if(search.substr(0,3) == '===') return 4; + if(search.substr(0,2) == '==') return 5; + + return 0; } -/* - * Insert the given value at the current cursor position +/** + * Insert a new headline based on the current section level * - * @see http://www.alexking.org/index.php?content=software/javascript/content.php + * @param string textboxId - the edit field ID + * @param int mod - the headline modificator ( -1, 0, 1) + * @param string text - the sample text passed to insertTags */ -function insertAtCarret(edid,value){ - var field = document.getElementById(edid); - - //IE support - if (document.selection) { - field.focus(); - sel = document.selection.createRange(); - sel.text = value; - - //MOZILLA/NETSCAPE support - }else if (field.selectionStart || field.selectionStart == '0') { - var startPos = field.selectionStart; - var endPos = field.selectionEnd; - var scrollTop = field.scrollTop; - field.value = field.value.substring(0, startPos) + - value + - field.value.substring(endPos, field.value.length); - - field.focus(); - var cPos=startPos+(value.length); - field.selectionStart=cPos; - field.selectionEnd=cPos; - field.scrollTop=scrollTop; - } else { - field.value += "\n"+value; - } - // reposition cursor if possible - if (field.createTextRange){ - field.caretPos = document.selection.createRange().duplicate(); - } - if(value){ - window.textChanged = true; - summaryCheck(); - } -} +function insertHeadline(textboxId,mod,text){ + var lvl = currentHeadlineLevel(textboxId); + // determine new level + lvl += mod; + if(lvl < 1) lvl = 1; + if(lvl > 5) lvl = 5; + + var tags = '='; + for(var i=0; i<=5-lvl; i++) tags += '='; + insertTags(textboxId, tags+' ', ' '+tags+"\n", text); +} + /** * global var used for not saved yet warning */ |