+++ /dev/null
-/*\r
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net\r
- * Copyright (C) 2003-2009 Frederico Caldeira Knabben\r
- *\r
- * == BEGIN LICENSE ==\r
- *\r
- * Licensed under the terms of any of the following licenses at your\r
- * choice:\r
- *\r
- * - GNU General Public License Version 2 or later (the "GPL")\r
- * http://www.gnu.org/licenses/gpl.html\r
- *\r
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")\r
- * http://www.gnu.org/licenses/lgpl.html\r
- *\r
- * - Mozilla Public License Version 1.1 or later (the "MPL")\r
- * http://www.mozilla.org/MPL/MPL-1.1.html\r
- *\r
- * == END LICENSE ==\r
- *\r
- * Active selection functions. (IE specific implementation)\r
- */\r
-\r
-// Get the selection type.\r
-FCKSelection.GetType = function()\r
-{\r
- // It is possible that we can still get a text range object even when type=='None' is returned by IE.\r
- // So we'd better check the object returned by createRange() rather than by looking at the type.\r
- try\r
- {\r
- var ieType = FCKSelection.GetSelection().type ;\r
- if ( ieType == 'Control' || ieType == 'Text' )\r
- return ieType ;\r
-\r
- if ( this.GetSelection().createRange().parentElement )\r
- return 'Text' ;\r
- }\r
- catch(e)\r
- {\r
- // Nothing to do, it will return None properly.\r
- }\r
-\r
- return 'None' ;\r
-} ;\r
-\r
-// Retrieves the selected element (if any), just in the case that a single\r
-// element (object like and image or a table) is selected.\r
-FCKSelection.GetSelectedElement = function()\r
-{\r
- if ( this.GetType() == 'Control' )\r
- {\r
- var oRange = this.GetSelection().createRange() ;\r
-\r
- if ( oRange && oRange.item )\r
- return this.GetSelection().createRange().item(0) ;\r
- }\r
- return null ;\r
-} ;\r
-\r
-FCKSelection.GetParentElement = function()\r
-{\r
- switch ( this.GetType() )\r
- {\r
- case 'Control' :\r
- var el = FCKSelection.GetSelectedElement() ;\r
- return el ? el.parentElement : null ;\r
-\r
- case 'None' :\r
- return null ;\r
-\r
- default :\r
- return this.GetSelection().createRange().parentElement() ;\r
- }\r
-} ;\r
-\r
-FCKSelection.GetBoundaryParentElement = function( startBoundary )\r
-{\r
- switch ( this.GetType() )\r
- {\r
- case 'Control' :\r
- var el = FCKSelection.GetSelectedElement() ;\r
- return el ? el.parentElement : null ;\r
-\r
- case 'None' :\r
- return null ;\r
-\r
- default :\r
- var doc = FCK.EditorDocument ;\r
-\r
- var range = doc.selection.createRange() ;\r
- range.collapse( startBoundary !== false ) ;\r
-\r
- var el = range.parentElement() ;\r
-\r
- // It may happen that range is comming from outside "doc", so we\r
- // must check it (#1204).\r
- return FCKTools.GetElementDocument( el ) == doc ? el : null ;\r
- }\r
-} ;\r
-\r
-FCKSelection.SelectNode = function( node )\r
-{\r
- FCK.Focus() ;\r
- this.GetSelection().empty() ;\r
- var oRange ;\r
- try\r
- {\r
- // Try to select the node as a control.\r
- oRange = FCK.EditorDocument.body.createControlRange() ;\r
- oRange.addElement( node ) ;\r
- }\r
- catch(e)\r
- {\r
- // If failed, select it as a text range.\r
- oRange = FCK.EditorDocument.body.createTextRange() ;\r
- oRange.moveToElementText( node ) ;\r
- }\r
-\r
- oRange.select() ;\r
-} ;\r
-\r
-FCKSelection.Collapse = function( toStart )\r
-{\r
- FCK.Focus() ;\r
- if ( this.GetType() == 'Text' )\r
- {\r
- var oRange = this.GetSelection().createRange() ;\r
- oRange.collapse( toStart == null || toStart === true ) ;\r
- oRange.select() ;\r
- }\r
-} ;\r
-\r
-// The "nodeTagName" parameter must be Upper Case.\r
-FCKSelection.HasAncestorNode = function( nodeTagName )\r
-{\r
- var oContainer ;\r
-\r
- if ( this.GetSelection().type == "Control" )\r
- {\r
- oContainer = this.GetSelectedElement() ;\r
- }\r
- else\r
- {\r
- var oRange = this.GetSelection().createRange() ;\r
- oContainer = oRange.parentElement() ;\r
- }\r
-\r
- while ( oContainer )\r
- {\r
- if ( oContainer.nodeName.IEquals( nodeTagName ) ) return true ;\r
- oContainer = oContainer.parentNode ;\r
- }\r
-\r
- return false ;\r
-} ;\r
-\r
-// The "nodeTagName" parameter must be UPPER CASE.\r
-// It can be also an array of names\r
-FCKSelection.MoveToAncestorNode = function( nodeTagName )\r
-{\r
- var oNode, oRange ;\r
-\r
- if ( ! FCK.EditorDocument )\r
- return null ;\r
-\r
- if ( this.GetSelection().type == "Control" )\r
- {\r
- oRange = this.GetSelection().createRange() ;\r
- for ( i = 0 ; i < oRange.length ; i++ )\r
- {\r
- if (oRange(i).parentNode)\r
- {\r
- oNode = oRange(i).parentNode ;\r
- break ;\r
- }\r
- }\r
- }\r
- else\r
- {\r
- oRange = this.GetSelection().createRange() ;\r
- oNode = oRange.parentElement() ;\r
- }\r
-\r
- while ( oNode && !oNode.nodeName.Equals( nodeTagName ) )\r
- oNode = oNode.parentNode ;\r
-\r
- return oNode ;\r
-} ;\r
-\r
-FCKSelection.Delete = function()\r
-{\r
- // Gets the actual selection.\r
- var oSel = this.GetSelection() ;\r
-\r
- // Deletes the actual selection contents.\r
- if ( oSel.type.toLowerCase() != "none" )\r
- {\r
- oSel.clear() ;\r
- }\r
-\r
- return oSel ;\r
-} ;\r
-\r
-/**\r
- * Returns the native selection object.\r
- */\r
-FCKSelection.GetSelection = function()\r
-{\r
- this.Restore() ;\r
- return FCK.EditorDocument.selection ;\r
-}\r
-\r
-FCKSelection.Save = function( lock )\r
-{\r
- var editorDocument = FCK.EditorDocument ;\r
-\r
- if ( !editorDocument )\r
- return ;\r
-\r
- // Avoid saving again a selection while a dialog is open #2616\r
- if ( this.locked )\r
- return ;\r
- this.locked = !!lock ;\r
-\r
- var selection = editorDocument.selection ;\r
- var range ;\r
-\r
- if ( selection )\r
- {\r
- // The call might fail if the document doesn't have the focus (#1801),\r
- // but we don't want to modify the current selection (#2495) with a call to FCK.Focus() ;\r
- try {\r
- range = selection.createRange() ;\r
- }\r
- catch(e) {}\r
-\r
- // Ensure that the range comes from the editor document.\r
- if ( range )\r
- {\r
- if ( range.parentElement && FCKTools.GetElementDocument( range.parentElement() ) != editorDocument )\r
- range = null ;\r
- else if ( range.item && FCKTools.GetElementDocument( range.item(0) )!= editorDocument )\r
- range = null ;\r
- }\r
- }\r
-\r
- this.SelectionData = range ;\r
-}\r
-\r
-FCKSelection._GetSelectionDocument = function( selection )\r
-{\r
- var range = selection.createRange() ;\r
- if ( !range )\r
- return null;\r
- else if ( range.item )\r
- return FCKTools.GetElementDocument( range.item( 0 ) ) ;\r
- else\r
- return FCKTools.GetElementDocument( range.parentElement() ) ;\r
-}\r
-\r
-FCKSelection.Restore = function()\r
-{\r
- if ( this.SelectionData )\r
- {\r
- FCK.IsSelectionChangeLocked = true ;\r
-\r
- try\r
- {\r
- // Don't repeat the restore process if the editor document is already selected.\r
- if ( String( this._GetSelectionDocument( FCK.EditorDocument.selection ).body.contentEditable ) == 'true' )\r
- {\r
- FCK.IsSelectionChangeLocked = false ;\r
- return ;\r
- }\r
- this.SelectionData.select() ;\r
- }\r
- catch ( e ) {}\r
-\r
- FCK.IsSelectionChangeLocked = false ;\r
- }\r
-}\r
-\r
-FCKSelection.Release = function()\r
-{\r
- this.locked = false ;\r
- delete this.SelectionData ;\r
-}\r