New file |
0,0 → 1,144 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckselection_gecko.js |
* Active selection functions. (Gecko specific implementation) |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
|
// Get the selection type (like document.select.type in IE). |
FCKSelection.GetType = function() |
{ |
// if ( ! this._Type ) |
// { |
// By default set the type to "Text". |
this._Type = 'Text' ; |
|
// Check if the actual selection is a Control (IMG, TABLE, HR, etc...). |
var oSel ; |
try { oSel = FCK.EditorWindow.getSelection() ; } |
catch (e) {} |
|
if ( oSel && oSel.rangeCount == 1 ) |
{ |
var oRange = oSel.getRangeAt(0) ; |
if ( oRange.startContainer == oRange.endContainer && (oRange.endOffset - oRange.startOffset) == 1 && oRange.startContainer.nodeType != Node.TEXT_NODE ) |
this._Type = 'Control' ; |
} |
// } |
return this._Type ; |
} |
|
// Retrieves the selected element (if any), just in the case that a single |
// element (object like and image or a table) is selected. |
FCKSelection.GetSelectedElement = function() |
{ |
if ( this.GetType() == 'Control' ) |
{ |
var oSel = FCK.EditorWindow.getSelection() ; |
return oSel.anchorNode.childNodes[ oSel.anchorOffset ] ; |
} |
} |
|
FCKSelection.GetParentElement = function() |
{ |
if ( this.GetType() == 'Control' ) |
return FCKSelection.GetSelectedElement().parentNode ; |
else |
{ |
var oSel = FCK.EditorWindow.getSelection() ; |
if ( oSel ) |
{ |
var oNode = oSel.anchorNode ; |
|
while ( oNode && oNode.nodeType != 1 ) |
oNode = oNode.parentNode ; |
|
return oNode ; |
} |
} |
} |
|
FCKSelection.SelectNode = function( element ) |
{ |
// FCK.Focus() ; |
|
var oRange = FCK.EditorDocument.createRange() ; |
oRange.selectNode( element ) ; |
|
var oSel = FCK.EditorWindow.getSelection() ; |
oSel.removeAllRanges() ; |
oSel.addRange( oRange ) ; |
} |
|
FCKSelection.Collapse = function( toStart ) |
{ |
var oSel = FCK.EditorWindow.getSelection() ; |
|
if ( toStart == null || toStart === true ) |
oSel.collapseToStart() ; |
else |
oSel.collapseToEnd() ; |
} |
|
// The "nodeTagName" parameter must be Upper Case. |
FCKSelection.HasAncestorNode = function( nodeTagName ) |
{ |
var oContainer = this.GetSelectedElement() ; |
if ( ! oContainer && FCK.EditorWindow ) |
{ |
try { oContainer = FCK.EditorWindow.getSelection().getRangeAt(0).startContainer ; } |
catch(e){} |
} |
|
while ( oContainer ) |
{ |
if ( oContainer.nodeType == 1 && oContainer.tagName == nodeTagName ) return true ; |
oContainer = oContainer.parentNode ; |
} |
|
return false ; |
} |
|
// The "nodeTagName" parameter must be Upper Case. |
FCKSelection.MoveToAncestorNode = function( nodeTagName ) |
{ |
var oNode ; |
|
var oContainer = this.GetSelectedElement() ; |
if ( ! oContainer ) |
oContainer = FCK.EditorWindow.getSelection().getRangeAt(0).startContainer ; |
|
while ( oContainer ) |
{ |
if ( oContainer.tagName == nodeTagName ) |
return oContainer ; |
oContainer = oContainer.parentNode ; |
} |
return null ; |
} |
|
FCKSelection.Delete = function() |
{ |
// Gets the actual selection. |
var oSel = FCK.EditorWindow.getSelection() ; |
|
// Deletes the actual selection contents. |
for ( var i = 0 ; i < oSel.rangeCount ; i++ ) |
{ |
oSel.getRangeAt(i).deleteContents() ; |
} |
|
return oSel ; |
} |