~ubuntu-branches/ubuntu/natty/moin/natty-updates

« back to all changes in this revision

Viewing changes to wiki/htdocs/applets/FCKeditor/editor/_source/internals/fckselection_gecko.js

  • Committer: Bazaar Package Importer
  • Author(s): Jonas Smedegaard
  • Date: 2008-06-22 21:17:13 UTC
  • mto: This revision was merged to the branch mainline in revision 18.
  • Revision ID: james.westby@ubuntu.com-20080622211713-inlv5k4eifxckelr
Import upstream version 1.7.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * FCKeditor - The text editor for internet
 
3
 * Copyright (C) 2003-2005 Frederico Caldeira Knabben
 
4
 * 
 
5
 * Licensed under the terms of the GNU Lesser General Public License:
 
6
 *              http://www.opensource.org/licenses/lgpl-license.php
 
7
 * 
 
8
 * For further information visit:
 
9
 *              http://www.fckeditor.net/
 
10
 * 
 
11
 * "Support Open Source software. What about a donation today?"
 
12
 * 
 
13
 * File Name: fckselection_gecko.js
 
14
 *      Active selection functions. (Gecko specific implementation)
 
15
 * 
 
16
 * File Authors:
 
17
 *              Frederico Caldeira Knabben (fredck@fckeditor.net)
 
18
 */
 
19
 
 
20
// Get the selection type (like document.select.type in IE).
 
21
FCKSelection.GetType = function()
 
22
{
 
23
//      if ( ! this._Type )
 
24
//      {
 
25
                // By default set the type to "Text".
 
26
                this._Type = 'Text' ;
 
27
 
 
28
                // Check if the actual selection is a Control (IMG, TABLE, HR, etc...).
 
29
                var oSel ;
 
30
                try { oSel = FCK.EditorWindow.getSelection() ; }
 
31
                catch (e) {}
 
32
                
 
33
                if ( oSel && oSel.rangeCount == 1 )
 
34
                {
 
35
                        var oRange = oSel.getRangeAt(0) ;
 
36
                        if ( oRange.startContainer == oRange.endContainer && (oRange.endOffset - oRange.startOffset) == 1 )
 
37
                                this._Type = 'Control' ;
 
38
                }
 
39
//      }
 
40
        return this._Type ;
 
41
}
 
42
 
 
43
// Retrieves the selected element (if any), just in the case that a single
 
44
// element (object like and image or a table) is selected.
 
45
FCKSelection.GetSelectedElement = function()
 
46
{
 
47
        if ( this.GetType() == 'Control' )
 
48
        {
 
49
                var oSel = FCK.EditorWindow.getSelection() ;
 
50
                return oSel.anchorNode.childNodes[ oSel.anchorOffset ] ;
 
51
        }
 
52
}
 
53
 
 
54
FCKSelection.GetParentElement = function()
 
55
{
 
56
        if ( this.GetType() == 'Control' )
 
57
                return FCKSelection.GetSelectedElement().parentNode ;
 
58
        else
 
59
        {
 
60
                var oSel = FCK.EditorWindow.getSelection() ;
 
61
                if ( oSel )
 
62
                {
 
63
                        var oNode = oSel.anchorNode ;
 
64
 
 
65
                        while ( oNode && oNode.nodeType != 1 )
 
66
                                oNode = oNode.parentNode ;
 
67
 
 
68
                        return oNode ;
 
69
                }
 
70
        }
 
71
}
 
72
 
 
73
FCKSelection.SelectNode = function( element )
 
74
{
 
75
        FCK.Focus() ;
 
76
 
 
77
        var oRange = FCK.EditorDocument.createRange() ;
 
78
        oRange.selectNode( element ) ;
 
79
 
 
80
        var oSel = FCK.EditorWindow.getSelection() ;
 
81
        oSel.removeAllRanges() ;
 
82
        oSel.addRange( oRange ) ;
 
83
}
 
84
 
 
85
FCKSelection.Collapse = function( toStart )
 
86
{
 
87
        var oSel = FCK.EditorWindow.getSelection() ;
 
88
        
 
89
        if ( toStart == null || toStart === true )
 
90
                oSel.collapseToStart() ;
 
91
        else
 
92
                oSel.collapseToEnd() ;
 
93
}
 
94
 
 
95
// The "nodeTagName" parameter must be Upper Case.
 
96
FCKSelection.HasAncestorNode = function( nodeTagName )
 
97
{
 
98
        var oContainer = this.GetSelectedElement() ;
 
99
        if ( ! oContainer && FCK.EditorWindow )
 
100
        {
 
101
                try             { oContainer = FCK.EditorWindow.getSelection().getRangeAt(0).startContainer ; }
 
102
                catch(e){}
 
103
        }
 
104
 
 
105
        while ( oContainer )
 
106
        {
 
107
                if ( oContainer.nodeType == 1 && oContainer.tagName == nodeTagName ) return true ;
 
108
                oContainer = oContainer.parentNode ;
 
109
        }
 
110
 
 
111
        return false ;
 
112
}
 
113
 
 
114
// The "nodeTagName" parameter must be Upper Case.
 
115
FCKSelection.MoveToAncestorNode = function( nodeTagName )
 
116
{
 
117
        var oNode ;
 
118
 
 
119
        var oContainer = this.GetSelectedElement() ;
 
120
        if ( ! oContainer )
 
121
                oContainer = FCK.EditorWindow.getSelection().getRangeAt(0).startContainer ;
 
122
 
 
123
        while ( oContainer )
 
124
        {
 
125
                if ( oContainer.tagName == nodeTagName ) 
 
126
                        return oContainer ;
 
127
                oContainer = oContainer.parentNode ;
 
128
        }
 
129
        return null ;
 
130
}
 
131
 
 
132
FCKSelection.Delete = function()
 
133
{
 
134
        // Gets the actual selection.
 
135
        var oSel = FCK.EditorWindow.getSelection() ;
 
136
 
 
137
        // Deletes the actual selection contents.
 
138
        for ( var i = 0 ; i < oSel.rangeCount ; i++ )
 
139
        {
 
140
                oSel.getRangeAt(i).deleteContents() ;
 
141
        }
 
142
 
 
143
        return oSel ;
 
144
}
 
145
 
 
146
// START iCM MODIFICATIONS
 
147
/*
 
148
// Move the cursor position (the selection point) to a specific offset within a specific node
 
149
// If no offset specified, the start of the node is assumed
 
150
FCKSelection.SetCursorPosition = function ( oNode, nOffset )
 
151
{
 
152
        if ( typeof nOffset == "undefined" ) nOffset = 0 ;
 
153
 
 
154
        var oSel = FCK.EditorWindow.getSelection() ;
 
155
        var oRange = FCK.EditorDocument.createRange() ;
 
156
        
 
157
        oRange.setStart( oNode, nOffset ) ;
 
158
        oRange.collapse( true ) ;
 
159
        
 
160
        oSel.removeAllRanges() ;
 
161
        oSel.addRange( oRange );
 
162
        
 
163
        if ( oNode.scrollIntoView )
 
164
                oNode.scrollIntoView( false );  
 
165
}
 
166
*/
 
167
// END iCM MODIFICATIONS
 
168