mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-28 14:18:52 +00:00
Editor updates with proper IE support. Needs a lot more testing, especially in non-Windows browsers
git-svn-id: file:///svn/phpbb/trunk@6651 89ea8834-ac86-4346-8a33-228a782c2dd0
This commit is contained in:
parent
d529f78adb
commit
2d31d53289
2 changed files with 66 additions and 74 deletions
|
@ -87,6 +87,9 @@ function bbfontstyle(bbopen, bbclose)
|
||||||
theSelection = false;
|
theSelection = false;
|
||||||
document.forms[form_name].elements[text_name].focus();
|
document.forms[form_name].elements[text_name].focus();
|
||||||
|
|
||||||
|
var textarea = document.forms[form_name].elements[text_name];
|
||||||
|
var new_pos = getCaretPosition(textarea).start + bbopen.length;
|
||||||
|
|
||||||
if ((clientVer >= 4) && is_ie && is_win)
|
if ((clientVer >= 4) && is_ie && is_win)
|
||||||
{
|
{
|
||||||
// Get text selection
|
// Get text selection
|
||||||
|
@ -109,25 +112,11 @@ function bbfontstyle(bbopen, bbclose)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close image tag before adding
|
|
||||||
if (imageTag)
|
|
||||||
{
|
|
||||||
insert_text(bbtags[15]);
|
|
||||||
|
|
||||||
// Remove the close image tag from the list
|
|
||||||
lastValue = arraypop(bbcode) - 1;
|
|
||||||
|
|
||||||
// Return button back to normal state
|
|
||||||
document.forms[form_name].addbbcode14.value = 'Img';
|
|
||||||
imageTag = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Open tag
|
// Open tag
|
||||||
insert_text(bbopen + bbclose);
|
insert_text(bbopen + bbclose);
|
||||||
|
|
||||||
// Center the cursor when we don't have a selection
|
// 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
|
// IE & Opera
|
||||||
if (document.selection)
|
if (document.selection)
|
||||||
|
@ -135,6 +124,7 @@ function bbfontstyle(bbopen, bbclose)
|
||||||
var range = textarea.createTextRange();
|
var range = textarea.createTextRange();
|
||||||
range.move("character", new_pos);
|
range.move("character", new_pos);
|
||||||
range.select();
|
range.select();
|
||||||
|
storeCaret(document.forms[form_name].elements[text_name]);
|
||||||
}
|
}
|
||||||
//Gecko
|
//Gecko
|
||||||
else if (!isNaN(textarea.selectionStart))
|
else if (!isNaN(textarea.selectionStart))
|
||||||
|
@ -144,9 +134,6 @@ function bbfontstyle(bbopen, bbclose)
|
||||||
}
|
}
|
||||||
|
|
||||||
document.forms[form_name].elements[text_name].focus();
|
document.forms[form_name].elements[text_name].focus();
|
||||||
|
|
||||||
storeCaret(document.forms[form_name].elements[text_name]);
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -172,6 +159,7 @@ function insert_text(text, spaces, popup)
|
||||||
{
|
{
|
||||||
var caret_pos = 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;
|
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))
|
else if (!isNaN(textarea.selectionStart))
|
||||||
{
|
{
|
||||||
|
@ -186,6 +174,7 @@ function insert_text(text, spaces, popup)
|
||||||
{
|
{
|
||||||
textarea.value = textarea.value + text;
|
textarea.value = textarea.value + text;
|
||||||
}
|
}
|
||||||
|
document.forms[form_name].elements[text_name].focus();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -372,29 +361,36 @@ function getCaretPosition(txtarea)
|
||||||
var caretPos = new caretPosition();
|
var caretPos = new caretPosition();
|
||||||
|
|
||||||
// dirty IE way
|
// dirty IE way
|
||||||
if(document.selection)
|
// Idea by tkirby on http://www.csie.ntu.edu.tw/~b88039/html/jslib/caret.html
|
||||||
|
if(document.selection && is_ie)
|
||||||
{
|
{
|
||||||
txtarea.focus();
|
//insert dummy caracter at current position
|
||||||
|
var dummy = "\001";
|
||||||
|
var sel = document.selection.createRange();
|
||||||
|
var dul = sel.duplicate();
|
||||||
|
var len = 0;
|
||||||
|
dul.moveToElementText(txtarea);
|
||||||
|
sel.text = dummy;
|
||||||
|
|
||||||
//the current selection
|
//find dummy chraracter again
|
||||||
var curr_sel = document.selection.createRange();
|
len = (dul.text.indexOf(c));
|
||||||
var curr_length = curr_sel.text.length;
|
sel.moveStart('character',-1);
|
||||||
|
sel.text = "";
|
||||||
|
|
||||||
// back to 0
|
if (len == -1)
|
||||||
curr_sel.moveStart ('character', -txtarea.value.length);
|
{
|
||||||
|
len = 0;
|
||||||
//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 = len;
|
||||||
|
caretPos.end = len;
|
||||||
|
}
|
||||||
|
// simple Gecko/Opera way
|
||||||
|
else if(txtarea.selectionStart || txtarea.selectionStart == 0)
|
||||||
{
|
{
|
||||||
caretPos.start = txtarea.selectionStart;
|
caretPos.start = txtarea.selectionStart;
|
||||||
caretPos.end = txtarea.selectionEnd;
|
caretPos.end = txtarea.selectionEnd;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (caretPos);
|
return caretPos;
|
||||||
}
|
}
|
|
@ -87,6 +87,9 @@ function bbfontstyle(bbopen, bbclose)
|
||||||
theSelection = false;
|
theSelection = false;
|
||||||
document.forms[form_name].elements[text_name].focus();
|
document.forms[form_name].elements[text_name].focus();
|
||||||
|
|
||||||
|
var textarea = document.forms[form_name].elements[text_name];
|
||||||
|
var new_pos = getCaretPosition(textarea).start + bbopen.length;
|
||||||
|
|
||||||
if ((clientVer >= 4) && is_ie && is_win)
|
if ((clientVer >= 4) && is_ie && is_win)
|
||||||
{
|
{
|
||||||
// Get text selection
|
// Get text selection
|
||||||
|
@ -109,25 +112,11 @@ function bbfontstyle(bbopen, bbclose)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close image tag before adding
|
|
||||||
if (imageTag)
|
|
||||||
{
|
|
||||||
insert_text(bbtags[15]);
|
|
||||||
|
|
||||||
// Remove the close image tag from the list
|
|
||||||
lastValue = arraypop(bbcode) - 1;
|
|
||||||
|
|
||||||
// Return button back to normal state
|
|
||||||
document.forms[form_name].addbbcode14.value = 'Img';
|
|
||||||
imageTag = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Open tag
|
// Open tag
|
||||||
insert_text(bbopen + bbclose);
|
insert_text(bbopen + bbclose);
|
||||||
|
|
||||||
// Center the cursor when we don't have a selection
|
// 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
|
// IE & Opera
|
||||||
if (document.selection)
|
if (document.selection)
|
||||||
|
@ -135,6 +124,7 @@ function bbfontstyle(bbopen, bbclose)
|
||||||
var range = textarea.createTextRange();
|
var range = textarea.createTextRange();
|
||||||
range.move("character", new_pos);
|
range.move("character", new_pos);
|
||||||
range.select();
|
range.select();
|
||||||
|
storeCaret(document.forms[form_name].elements[text_name]);
|
||||||
}
|
}
|
||||||
//Gecko
|
//Gecko
|
||||||
else if (!isNaN(textarea.selectionStart))
|
else if (!isNaN(textarea.selectionStart))
|
||||||
|
@ -144,9 +134,6 @@ function bbfontstyle(bbopen, bbclose)
|
||||||
}
|
}
|
||||||
|
|
||||||
document.forms[form_name].elements[text_name].focus();
|
document.forms[form_name].elements[text_name].focus();
|
||||||
|
|
||||||
storeCaret(document.forms[form_name].elements[text_name]);
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -172,6 +159,7 @@ function insert_text(text, spaces, popup)
|
||||||
{
|
{
|
||||||
var caret_pos = 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;
|
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))
|
else if (!isNaN(textarea.selectionStart))
|
||||||
{
|
{
|
||||||
|
@ -186,6 +174,7 @@ function insert_text(text, spaces, popup)
|
||||||
{
|
{
|
||||||
textarea.value = textarea.value + text;
|
textarea.value = textarea.value + text;
|
||||||
}
|
}
|
||||||
|
document.forms[form_name].elements[text_name].focus();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -372,29 +361,36 @@ function getCaretPosition(txtarea)
|
||||||
var caretPos = new caretPosition();
|
var caretPos = new caretPosition();
|
||||||
|
|
||||||
// dirty IE way
|
// dirty IE way
|
||||||
if(document.selection)
|
// Idea by tkirby on http://www.csie.ntu.edu.tw/~b88039/html/jslib/caret.html
|
||||||
|
if(document.selection && is_ie)
|
||||||
{
|
{
|
||||||
txtarea.focus();
|
//insert dummy caracter at current position
|
||||||
|
var dummy = "\001";
|
||||||
|
var sel = document.selection.createRange();
|
||||||
|
var dul = sel.duplicate();
|
||||||
|
var len = 0;
|
||||||
|
dul.moveToElementText(txtarea);
|
||||||
|
sel.text = dummy;
|
||||||
|
|
||||||
//the current selection
|
//find dummy chraracter again
|
||||||
var curr_sel = document.selection.createRange();
|
len = (dul.text.indexOf(c));
|
||||||
var curr_length = curr_sel.text.length;
|
sel.moveStart('character',-1);
|
||||||
|
sel.text = "";
|
||||||
|
|
||||||
// back to 0
|
if (len == -1)
|
||||||
curr_sel.moveStart ('character', -txtarea.value.length);
|
{
|
||||||
|
len = 0;
|
||||||
//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 = len;
|
||||||
|
caretPos.end = len;
|
||||||
|
}
|
||||||
|
// simple Gecko/Opera way
|
||||||
|
else if(txtarea.selectionStart || txtarea.selectionStart == 0)
|
||||||
{
|
{
|
||||||
caretPos.start = txtarea.selectionStart;
|
caretPos.start = txtarea.selectionStart;
|
||||||
caretPos.end = txtarea.selectionEnd;
|
caretPos.end = txtarea.selectionEnd;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (caretPos);
|
return caretPos;
|
||||||
}
|
}
|
Loading…
Add table
Reference in a new issue