summaryrefslogtreecommitdiff
path: root/lib/scripts/edit.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/scripts/edit.js')
-rw-r--r--lib/scripts/edit.js176
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
*/