Fixed bug #10844: htmlArea RTE: IE8 creates erroneous ranges when selection is empty
authorStanislas Rolland <typo3@sjbr.ca>
Sat, 4 Apr 2009 00:02:44 +0000 (00:02 +0000)
committerStanislas Rolland <typo3@sjbr.ca>
Sat, 4 Apr 2009 00:02:44 +0000 (00:02 +0000)
git-svn-id: https://svn.typo3.org/TYPO3v4/Core/trunk@5276 709f56b5-9817-0410-a4d7-c38de5d9e867

ChangeLog
typo3/sysext/rtehtmlarea/ChangeLog
typo3/sysext/rtehtmlarea/htmlarea/htmlarea-ie.js

index 7ad5276..6a520ef 100755 (executable)
--- a/ChangeLog
+++ b/ChangeLog
@@ -4,6 +4,7 @@
        * Fixed bug #10836: htmlARea RTE: RTE leaves unwanted id attribute on inserted table in IE8
        * Added feature #10842: htmlArea RTE: Let IE8 display language marks like other browsers do
        * Fixed bug #10843: htmlArea RTE: IE7 complains when reference is made to attribute xml:lang
+       * Fixed bug #10844: htmlArea RTE: IE8 creates erroneous ranges when selection is empty
 
 2009-04-03  Patrick Broens  <patrick@patrickbroens.nl>
 
index f4f3cb9..c2db7d1 100644 (file)
@@ -4,6 +4,7 @@
        * Fixed bug #10836: htmlARea RTE: RTE leaves unwanted id attribute on inserted table in IE8
        * Added feature #10842: htmlArea RTE: Let IE8 display language marks like other browsers do
        * Fixed bug #10843: htmlArea RTE: IE7 complains when reference is made to attribute xml:lang
+       * Fixed bug #10844: htmlArea RTE: IE8 creates erroneous ranges when selection is empty
 
 2009-04-02  Stanislas Rolland  <typo3@sjbr.ca>
 
index 0d1a472..6f53f65 100644 (file)
@@ -53,7 +53,10 @@ HTMLArea.prototype._getSelection = function() {
  * Create a range for the current selection
  */
 HTMLArea.prototype._createRange = function(sel) {
-       if (typeof(sel) != "undefined") return sel.createRange();
+       this.focusEditor();
+       if (typeof(sel) != "undefined") {
+               return sel.createRange();
+       }
        return this._doc.selection.createRange();
 };
 
@@ -86,6 +89,7 @@ HTMLArea.prototype.selectNodeContents = function(node, endPoint) {
  * Determine whether the node intersects the range
  */
 HTMLArea.prototype.rangeIntersectsNode = function(range, node) {
+       this.focusEditor();
        var nodeRange = this._doc.body.createTextRange();
        nodeRange.moveToElementText(node);
        return (range.compareEndPoints("EndToStart", nodeRange) == -1 && range.compareEndPoints("StartToEnd", nodeRange) == 1) ||
@@ -120,7 +124,9 @@ HTMLArea.prototype.getSelectedHTMLContents = function() {
  * Get the deepest node that contains both endpoints of the current selection.
  */
 HTMLArea.prototype.getParentElement = function(selection, range) {
-       if (!selection) var selection = this._getSelection();
+       if (!selection) {
+               var selection = this._getSelection();
+       }
        if (typeof(range) === "undefined") {
                var range = this._createRange(selection);
        }
@@ -145,6 +151,7 @@ HTMLArea.prototype.getParentElement = function(selection, range) {
 HTMLArea.prototype._activeElement = function(sel) {
        if(sel == null) return null;
        if(this._selectionEmpty(sel)) return null;
+       this.focusEditor();
        if(sel.type.toLowerCase() == "control") {
                return sel.createRange().item(0);
        } else {
@@ -208,7 +215,6 @@ HTMLArea.prototype.insertNodeAtSelection = function(toBeInserted) {
  * Delete the current selection, if any.
  */
 HTMLArea.prototype.insertHTML = function(html) {
-       this.focusEditor();
        var sel = this._getSelection();
        if (sel.type.toLowerCase() == "control") {
                sel.clear();