Index: typo3/sysext/rtehtmlarea/htmlarea/htmlarea-gecko.js =================================================================== --- typo3/sysext/rtehtmlarea/htmlarea/htmlarea-gecko.js (révision 7279) +++ typo3/sysext/rtehtmlarea/htmlarea/htmlarea-gecko.js (copie de travail) @@ -53,8 +53,12 @@ * Empty the selection object */ HTMLArea.Editor.prototype.emptySelection = function(selection) { - if (HTMLArea.is_safari) { - selection.empty(); + if (Ext.isWebKit) { + if (Ext.isFunction(selection.removeAllRanges)) { + selection.removeAllRanges(); + } else { + selection.empty(); + } } else { selection.removeAllRanges(); } @@ -67,8 +71,12 @@ * Add a range to the selection */ HTMLArea.Editor.prototype.addRangeToSelection = function(selection, range) { - if (HTMLArea.is_safari) { - selection.setBaseAndExtent(range.startContainer, range.startOffset, range.endContainer, range.endOffset); + if (Ext.isWebKit) { + if (Ext.isFunction(selection.addRange)) { + selection.addRange(range); + } else { + selection.setBaseAndExtent(range.startContainer, range.startOffset, range.endContainer, range.endOffset); + } } else { selection.addRange(range); } @@ -114,7 +122,12 @@ var selection = this._getSelection(); var range = this._doc.createRange(); if (node.nodeType == 1 && node.nodeName.toLowerCase() == "body") { - range.selectNodeContents(node); + if (Ext.isWebKit) { + range.setStart(node, 0); + range.setEnd(node, node.childNodes.length); + } else { + range.selectNodeContents(node); + } } else { range.selectNode(node); } @@ -124,7 +137,6 @@ this.emptySelection(selection); this.addRangeToSelection(selection, range); }; - /* * Select ONLY the contents inside the given node */ @@ -132,7 +144,16 @@ this.focusEditor(); var selection = this._getSelection(); var range = this._doc.createRange(); - range.selectNodeContents(node); + if (Ext.isWebKit) { + range.setStart(node, 0); + if (node.nodeType == 3 || node.nodeType == 8 || node.nodeType == 4) { + range.setEnd(node, node.textContent.length); + } else { + range.setEnd(node, node.childNodes.length); + } + } else { + range.selectNodeContents(node); + } if (typeof(endPoint) !== "undefined") { range.collapse(endPoint); } @@ -145,9 +166,18 @@ try { nodeRange.selectNode(node); } catch (e) { - nodeRange.selectNodeContents(node); + if (Ext.isWebKit) { + nodeRange.setStart(node, 0); + if (node.nodeType == 3 || node.nodeType == 8 || node.nodeType == 4) { + nodeRange.setEnd(node, node.textContent.length); + } else { + nodeRange.setEnd(node, node.childNodes.length); + } + } else { + nodeRange.selectNodeContents(node); + } } - // Note: sometimes Safari inverts the end points + // Note: sometimes WebKit inverts the end points return (range.compareBoundaryPoints(range.END_TO_START, nodeRange) == -1 && range.compareBoundaryPoints(range.START_TO_END, nodeRange) == 1) || (range.compareBoundaryPoints(range.END_TO_START, nodeRange) == 1 && range.compareBoundaryPoints(range.START_TO_END, nodeRange) == -1); };