aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDominik Dröscher <dhn2@users.sourceforge.net>2006-11-22 11:22:38 +0000
committerDominik Dröscher <dhn2@users.sourceforge.net>2006-11-22 11:22:38 +0000
commit2906dbdd8aa0a625a161821fc1a7d41bd0c438ef (patch)
treec95408cabb4dfaf9ed8cf0d1f206d0040c467c91
parent73d0f7f846d5c8bb40ee81ffceecb62a3e415815 (diff)
downloadforums-2906dbdd8aa0a625a161821fc1a7d41bd0c438ef.tar
forums-2906dbdd8aa0a625a161821fc1a7d41bd0c438ef.tar.gz
forums-2906dbdd8aa0a625a161821fc1a7d41bd0c438ef.tar.bz2
forums-2906dbdd8aa0a625a161821fc1a7d41bd0c438ef.tar.xz
forums-2906dbdd8aa0a625a161821fc1a7d41bd0c438ef.zip
Some more editor.js updates. Font styles (colour and size) do now center the cursor between the tags when not used on a selection. This could need some cross browser testing. Confirmed working in IE6, FF, Opera.
Please report feedback to: http://area51.phpbb.com/phpBB/viewtopic.php?f=3&t=25884 git-svn-id: file:///svn/phpbb/trunk@6634 89ea8834-ac86-4346-8a33-228a782c2dd0
-rw-r--r--phpBB/adm/style/editor.js181
-rw-r--r--phpBB/styles/subSilver/template/editor.js70
2 files changed, 189 insertions, 62 deletions
diff --git a/phpBB/adm/style/editor.js b/phpBB/adm/style/editor.js
index 2dc9e0bf79..8a641efe03 100644
--- a/phpBB/adm/style/editor.js
+++ b/phpBB/adm/style/editor.js
@@ -65,32 +65,6 @@ function arraypop(thearray)
}
/**
-* Insert emoticon
-*/
-function smiley(text)
-{
- text = ' ' + text + ' ';
-
- if (document.forms[form_name].elements[text_name].createTextRange && document.forms[form_name].elements[text_name].caretPos)
- {
- var caretPos = document.forms[form_name].elements[text_name].caretPos;
-
- caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? caretPos.text + text + ' ' : caretPos.text + text;
- document.forms[form_name].elements[text_name].focus();
- }
- else
- {
- var selStart = document.forms[form_name].elements[text_name].selectionStart;
- var selEnd = document.forms[form_name].elements[text_name].selectionEnd;
-
- mozWrap(document.forms[form_name].elements[text_name], text, '')
- document.forms[form_name].elements[text_name].focus();
- document.forms[form_name].elements[text_name].selectionStart = selStart + text.length;
- document.forms[form_name].elements[text_name].selectionEnd = selEnd + text.length;
- }
-}
-
-/**
* Apply bbcodes
*/
function bbfontstyle(bbopen, bbclose)
@@ -136,34 +110,66 @@ function bbfontstyle(bbopen, bbclose)
// Open tag
insert_text(bbopen + bbclose);
+ // Center the cursor when we don't have a selection
+ var textarea = document.forms[form_name].elements[text_name];
+ var new_pos = getCaretPosition(textarea).start - bbclose.length;
+
+ // IE & Opera
+ if (document.selection)
+ {
+ var range = textarea.createTextRange();
+ range.move("character", new_pos);
+ range.select();
+ }
+ //Gecko
+ else if (!isNaN(textarea.selectionStart))
+ {
+ textarea.selectionStart = new_pos;
+ textarea.selectionEnd = new_pos;
+ }
+
document.forms[form_name].elements[text_name].focus();
storeCaret(document.forms[form_name].elements[text_name]);
+
return;
}
/**
* Insert text at position
*/
-function insert_text(text)
+function insert_text(text, spaces, popup)
{
- if (document.forms[form_name].elements[text_name].createTextRange && document.forms[form_name].elements[text_name].caretPos)
+ var textarea;
+
+ if (!popup)
+ {
+ textarea = document.forms[form_name].elements[text_name];
+ } else
{
- var caretPos = document.forms[form_name].elements[text_name].caretPos;
- caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? caretPos.text + text + ' ' : caretPos.text + text;
+ textarea = opener.document.forms[form_name].elements[text_name];
}
- else if (document.forms[form_name].elements[text_name].selectionStart)
+ if (spaces)
{
- var selStart = document.forms[form_name].elements[text_name].selectionStart;
- var selEnd = document.forms[form_name].elements[text_name].selectionEnd;
+ text = ' ' + text + ' ';
+ }
+ if (textarea.createTextRange && textarea.caretPos)
+ {
+ var caret_pos = textarea.caretPos;
+ caret_pos.text = caret_pos.text.charAt(caret_pos.text.length - 1) == ' ' ? caret_pos.text + text + ' ' : caret_pos.text + text;
+ }
+ else if (!isNaN(textarea.selectionStart))
+ {
+ var sel_start = textarea.selectionStart;
+ var sel_end = textarea.selectionEnd;
- mozWrap(document.forms[form_name].elements[text_name], text, '')
- document.forms[form_name].elements[text_name].selectionStart = selStart + text.length;
- document.forms[form_name].elements[text_name].selectionEnd = selEnd + text.length;
+ mozWrap(textarea, text, '')
+ textarea.selectionStart = sel_start + text.length;
+ textarea.selectionEnd = sel_end + text.length;
}
else
{
- document.forms[form_name].elements[text_name].value = document.forms[form_name].elements[text_name].value + text;
+ textarea.value = textarea.value + text;
}
}
@@ -187,11 +193,11 @@ function addquote(post_id, username)
if (document.all)
{
- eval('divarea = document.all.' + message_name + ';');
+ divarea = document.all[message_name];
}
else
{
- eval("divarea = document.getElementById('" + message_name + "');");
+ divarea = document.getElementById(message_name);
}
// Get text selection - not only the post content :(
@@ -210,7 +216,15 @@ function addquote(post_id, username)
if (theSelection == '' || typeof theSelection == 'undefined' || theSelection == null)
{
- if (document.all)
+ if (divarea.innerHTML)
+ {
+ theSelection = divarea.innerHTML.replace(/<br>/ig, '\n');
+ theSelection = theSelection.replace(/<br\/>/ig, '\n');
+ theSelection = theSelection.replace(/&lt\;/ig, '<');
+ theSelection = theSelection.replace(/&gt\;/ig, '>');
+ theSelection = theSelection.replace(/&amp\;/ig, '&');
+ }
+ else if (document.all)
{
theSelection = divarea.innerText;
}
@@ -249,11 +263,11 @@ function bbstyle(bbnumber)
{
butnumber = arraypop(bbcode) - 1;
document.forms[form_name].elements[text_name].value += bbtags[butnumber + 1];
- buttext = eval('document.forms[form_name].addbbcode' + butnumber + '.value');
+ buttext = document.forms[form_name]['addbbcode' + butnumber].value;
if (buttext != '[*]')
{
- eval('document.forms[form_name].addbbcode' + butnumber + '.value ="' + buttext.substr(0,(buttext.length - 1)) + '"');
+ document.forms[form_name]['addbbcode' + butnumber].value = buttext.substr(0,(buttext.length - 1));
}
}
@@ -310,17 +324,17 @@ function bbstyle(bbnumber)
if (donotinsert)
{
document.forms[form_name].addbbcode12.value = 'List=';
- tmp_help = o_help;
- o_help = e_help;
- e_help = tmp_help;
+ tmp_help = help_line['o'];
+ help_line['o'] = help_line['e'];
+ help_line['e'] = tmp_help;
bbtags[12] = '[list=]';
}
else
{
document.forms[form_name].addbbcode12.value = '[*]';
- tmp_help = o_help;
- o_help = e_help;
- e_help = tmp_help;
+ tmp_help = help_line['o'];
+ help_line['o'] = help_line['e'];
+ help_line['e'] = tmp_help;
bbtags[12] = '[*]';
}
}
@@ -330,17 +344,17 @@ function bbstyle(bbnumber)
if (donotinsert)
{
document.forms[form_name].addbbcode10.value = 'List';
- tmp_help = l_help;
- l_help = e_help;
- e_help = tmp_help;
+ tmp_help = help_line['l'];
+ help_line['l'] = help_line['e'];
+ help_line['e'] = tmp_help;
bbtags[10] = '[list]';
}
else
{
document.forms[form_name].addbbcode10.value = '[*]';
- tmp_help = l_help;
- l_help = e_help;
- e_help = tmp_help;
+ tmp_help = help_line['l'];
+ help_line['l'] = help_line['e'];
+ help_line['e'] = tmp_help;
bbtags[10] = '[*]';
}
}
@@ -361,11 +375,11 @@ function bbstyle(bbnumber)
insert_text(bbtags[butnumber]);
}
- buttext = eval('document.forms[form_name].addbbcode' + butnumber + '.value');
+ buttext = document.forms[form_name]['addbbcode' + butnumber].value;
if (bbtags[butnumber] != '[*]')
{
- eval('document.forms[form_name].addbbcode' + butnumber + '.value ="' + buttext.substr(0,(buttext.length - 1)) + '"');
+ document.forms[form_name]['addbbcode' + butnumber].value = buttext.substr(0,(buttext.length - 1));
}
imageTag = false;
}
@@ -401,7 +415,7 @@ function bbstyle(bbnumber)
if (bbtags[bbnumber] != '[*]')
{
arraypush(bbcode, bbnumber + 1);
- eval('document.forms[form_name].addbbcode'+bbnumber+'.value += "*"');
+ document.forms[form_name]['addbbcode' + bbnumber].value += "*";
}
document.forms[form_name].elements[text_name].focus();
@@ -440,7 +454,7 @@ function mozWrap(txtarea, open, close)
}
/**
-* Insert at Claret position. Code from
+* Insert at Caret position. Code from
* http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130
*/
function storeCaret(textEl)
@@ -465,7 +479,7 @@ function colorPalette(dir, width, height)
numberList[3] = 'BF';
numberList[4] = 'FF';
- document.write('<table cellspacing="1" cellpadding="0" border="0" class="type2">');
+ document.writeln('<table cellspacing="1" cellpadding="0" border="0">');
for (r = 0; r < 5; r++)
{
@@ -484,7 +498,7 @@ function colorPalette(dir, width, height)
for (b = 0; b < 5; b++)
{
color = String(numberList[r]) + String(numberList[g]) + String(numberList[b]);
- document.write('<td style="line-height: ' + height + 'px; background-color:#' + color + '; width: ' + width + 'px; height: ' + height + 'px;">');
+ document.write('<td bgcolor="#' + color + '">');
document.write('<a href="#" onclick="bbfontstyle(\'[color=#' + color + ']\', \'[/color]\'); return false;" onmouseover="helpline(\'s\');"><img src="images/spacer.gif" width="' + width + '" height="' + height + '" alt="#' + color + '" title="#' + color + '" /></a>');
document.writeln('</td>');
}
@@ -502,3 +516,50 @@ function colorPalette(dir, width, height)
}
document.writeln('</table>');
}
+
+
+/**
+* Caret Position object
+*/
+function caretPosition()
+{
+ var start = null;
+ var end = null;
+}
+
+
+/**
+* Get the caret position in an textarea
+*/
+function getCaretPosition(txtarea)
+{
+ var caretPos = new caretPosition();
+
+ // dirty IE way
+ if(document.selection)
+ {
+ txtarea.focus();
+
+ //the current selection
+ var curr_sel = document.selection.createRange();
+ var curr_length = curr_sel.text.length;
+
+ // back to 0
+ curr_sel.moveStart ('character', -txtarea.value.length);
+
+ //start = selected text - original selection
+ caretPos.start = curr_sel.text.length - curr_length;
+
+ // end = selection length
+ caretPos.end = curr_sel.text.length;
+ }
+ // simple Gecko way
+ else if(!isNaN(txtarea.selectionStart))
+ {
+ caretPos.start = txtarea.selectionStart;
+ caretPos.end = txtarea.selectionEnd;
+ }
+
+ return (caretPos);
+}
+
diff --git a/phpBB/styles/subSilver/template/editor.js b/phpBB/styles/subSilver/template/editor.js
index a25c88b21e..8a641efe03 100644
--- a/phpBB/styles/subSilver/template/editor.js
+++ b/phpBB/styles/subSilver/template/editor.js
@@ -110,9 +110,28 @@ function bbfontstyle(bbopen, bbclose)
// Open tag
insert_text(bbopen + bbclose);
+ // Center the cursor when we don't have a selection
+ var textarea = document.forms[form_name].elements[text_name];
+ var new_pos = getCaretPosition(textarea).start - bbclose.length;
+
+ // IE & Opera
+ if (document.selection)
+ {
+ var range = textarea.createTextRange();
+ range.move("character", new_pos);
+ range.select();
+ }
+ //Gecko
+ else if (!isNaN(textarea.selectionStart))
+ {
+ textarea.selectionStart = new_pos;
+ textarea.selectionEnd = new_pos;
+ }
+
document.forms[form_name].elements[text_name].focus();
storeCaret(document.forms[form_name].elements[text_name]);
+
return;
}
@@ -435,7 +454,7 @@ function mozWrap(txtarea, open, close)
}
/**
-* Insert at Claret position. Code from
+* Insert at Caret position. Code from
* http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130
*/
function storeCaret(textEl)
@@ -496,4 +515,51 @@ function colorPalette(dir, width, height)
}
}
document.writeln('</table>');
-} \ No newline at end of file
+}
+
+
+/**
+* Caret Position object
+*/
+function caretPosition()
+{
+ var start = null;
+ var end = null;
+}
+
+
+/**
+* Get the caret position in an textarea
+*/
+function getCaretPosition(txtarea)
+{
+ var caretPos = new caretPosition();
+
+ // dirty IE way
+ if(document.selection)
+ {
+ txtarea.focus();
+
+ //the current selection
+ var curr_sel = document.selection.createRange();
+ var curr_length = curr_sel.text.length;
+
+ // back to 0
+ curr_sel.moveStart ('character', -txtarea.value.length);
+
+ //start = selected text - original selection
+ caretPos.start = curr_sel.text.length - curr_length;
+
+ // end = selection length
+ caretPos.end = curr_sel.text.length;
+ }
+ // simple Gecko way
+ else if(!isNaN(txtarea.selectionStart))
+ {
+ caretPos.start = txtarea.selectionStart;
+ caretPos.end = txtarea.selectionEnd;
+ }
+
+ return (caretPos);
+}
+