source: extensions/FCKEditor/editor/dialog/fck_anchor.html @ 3295

Last change on this file since 3295 was 3295, checked in by patdenice, 15 years ago

New extension added:
FCK Editor (2.0.a)

File size: 6.2 KB
Line 
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
2<!--
3 * FCKeditor - The text editor for Internet - http://www.fckeditor.net
4 * Copyright (C) 2003-2009 Frederico Caldeira Knabben
5 *
6 * == BEGIN LICENSE ==
7 *
8 * Licensed under the terms of any of the following licenses at your
9 * choice:
10 *
11 *  - GNU General Public License Version 2 or later (the "GPL")
12 *    http://www.gnu.org/licenses/gpl.html
13 *
14 *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
15 *    http://www.gnu.org/licenses/lgpl.html
16 *
17 *  - Mozilla Public License Version 1.1 or later (the "MPL")
18 *    http://www.mozilla.org/MPL/MPL-1.1.html
19 *
20 * == END LICENSE ==
21 *
22 * Anchor dialog window.
23-->
24<html>
25        <head>
26                <title>Anchor Properties</title>
27                <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
28                <meta content="noindex, nofollow" name="robots">
29                <script src="common/fck_dialog_common.js" type="text/javascript"></script>
30                <script type="text/javascript">
31
32var dialog                      = window.parent ;
33var oEditor                     = dialog.InnerDialogLoaded() ;
34
35var FCK                         = oEditor.FCK ;
36var FCKBrowserInfo      = oEditor.FCKBrowserInfo ;
37var FCKTools            = oEditor.FCKTools ;
38var FCKRegexLib         = oEditor.FCKRegexLib ;
39
40var oDOM                        = FCK.EditorDocument ;
41
42var oFakeImage = dialog.Selection.GetSelectedElement() ;
43
44var oAnchor ;
45
46if ( oFakeImage )
47{
48        if ( oFakeImage.tagName == 'IMG' && oFakeImage.getAttribute('_fckanchor') )
49                oAnchor = FCK.GetRealElement( oFakeImage ) ;
50        else
51                oFakeImage = null ;
52}
53
54//Search for a real anchor
55if ( !oFakeImage )
56{
57        oAnchor = FCK.Selection.MoveToAncestorNode( 'A' ) ;
58        if ( oAnchor )
59                FCK.Selection.SelectNode( oAnchor ) ;
60}
61
62window.onload = function()
63{
64        // First of all, translate the dialog box texts
65        oEditor.FCKLanguageManager.TranslatePage(document) ;
66
67        if ( oAnchor )
68                GetE('txtName').value = oAnchor.name ;
69        else
70                oAnchor = null ;
71
72        window.parent.SetOkButton( true ) ;
73        window.parent.SetAutoSize( true ) ;
74
75        SelectField( 'txtName' ) ;
76}
77
78function Ok()
79{
80        var sNewName = GetE('txtName').value ;
81
82        // Remove any illegal character in a name attribute:
83        // A name should start with a letter, but the validator passes anyway.
84        sNewName = sNewName.replace( /[^\w-_\.:]/g, '_' ) ;
85
86        if ( sNewName.length == 0 )
87        {
88                // Remove the anchor if the user leaves the name blank
89                if ( oAnchor )
90                {
91                        // Removes the current anchor from the document using the new command
92                        FCK.Commands.GetCommand( 'AnchorDelete' ).Execute() ;
93                        return true ;
94                }
95
96                alert( oEditor.FCKLang.DlgAnchorErrorName ) ;
97                return false ;
98        }
99
100        oEditor.FCKUndo.SaveUndoStep() ;
101
102        if ( oAnchor )  // Modifying an existent anchor.
103        {
104                ReadjustLinksToAnchor( oAnchor.name, sNewName );
105
106                // Buggy explorer, bad bad browser. http://alt-tag.com/blog/archives/2006/02/ie-dom-bugs/
107                // Instead of just replacing the .name for the existing anchor (in order to preserve the content), we must remove the .name
108                // and assign .name, although it won't appear until it's specially processed in fckxhtml.js
109
110                // We remove the previous name
111                oAnchor.removeAttribute( 'name' ) ;
112                // Now we set it, but later we must process it specially
113                oAnchor.name = sNewName ;
114
115                return true ;
116        }
117
118        // Create a new anchor preserving the current selection
119        var aNewAnchors = oEditor.FCK.CreateLink( '#' ) ;
120
121        if ( aNewAnchors.length == 0 )
122                        aNewAnchors.push( oEditor.FCK.InsertElement( 'a' ) ) ;
123        else
124        {
125                // Remove the fake href
126                for ( var i = 0 ; i < aNewAnchors.length ; i++ )
127                        aNewAnchors[i].removeAttribute( 'href' ) ;
128        }
129
130        // More than one anchors may have been created, so interact through all of them (see #220).
131        for ( var i = 0 ; i < aNewAnchors.length ; i++ )
132        {
133                oAnchor = aNewAnchors[i] ;
134
135                // Set the name
136                if ( FCKBrowserInfo.IsIE )
137                {
138                        // Setting anchor names directly in IE will trash the HTML code stored
139                        // in FCKTempBin after undos. See #2263.
140                        var replaceAnchor = oEditor.FCK.EditorDocument.createElement( '<a name="' +
141                                        FCKTools.HTMLEncode( sNewName ).replace( '"', '&quot;' ) + '">' ) ;
142                        oEditor.FCKDomTools.MoveChildren( oAnchor, replaceAnchor ) ;
143                        oAnchor.parentNode.replaceChild( replaceAnchor, oAnchor ) ;
144                        oAnchor = replaceAnchor ;
145                }
146                else
147                        oAnchor.name = sNewName ;
148
149                // IE does require special processing to show the Anchor's image
150                // Opera doesn't allow to select empty anchors
151                if ( FCKBrowserInfo.IsIE || FCKBrowserInfo.IsOpera )
152                {
153                        if ( oAnchor.innerHTML != '' )
154                        {
155                                if ( FCKBrowserInfo.IsIE )
156                                        oAnchor.className += ' FCK__AnchorC' ;
157                        }
158                        else
159                        {
160                                // Create a fake image for both IE and Opera
161                                var oImg = oEditor.FCKDocumentProcessor_CreateFakeImage( 'FCK__Anchor', oAnchor.cloneNode(true) ) ;
162                                oImg.setAttribute( '_fckanchor', 'true', 0 ) ;
163
164                                oAnchor.parentNode.insertBefore( oImg, oAnchor ) ;
165                                oAnchor.parentNode.removeChild( oAnchor ) ;
166                        }
167
168                }
169        }
170
171        return true ;
172}
173
174// Checks all the links in the current page pointing to the current name and changes them to the new name
175function ReadjustLinksToAnchor( sCurrent, sNew )
176{
177        var oDoc = FCK.EditorDocument ;
178
179        var aLinks = oDoc.getElementsByTagName( 'A' ) ;
180
181        var sReference = '#' + sCurrent ;
182        // The url of the document, so we check absolute and partial references.
183        var sFullReference = oDoc.location.href.replace( /(#.*$)/, '') ;
184        sFullReference += sReference ;
185
186        var oLink ;
187        var i = aLinks.length - 1 ;
188        while ( i >= 0 && ( oLink = aLinks[i--] ) )
189        {
190                var sHRef = oLink.getAttribute( '_fcksavedurl' ) ;
191                if ( sHRef == null )
192                        sHRef = oLink.getAttribute( 'href' , 2 ) || '' ;
193
194                if ( sHRef == sReference || sHRef == sFullReference )
195                {
196                        oLink.href = '#' + sNew ;
197                        SetAttribute( oLink, '_fcksavedurl', '#' + sNew ) ;
198                }
199        }
200}
201
202                </script>
203        </head>
204        <body style="overflow: hidden">
205                <table height="100%" width="100%">
206                        <tr>
207                                <td align="center">
208                                        <table border="0" cellpadding="0" cellspacing="0" width="80%">
209                                                <tr>
210                                                        <td>
211                                                                <span fckLang="DlgAnchorName">Anchor Name</span><BR>
212                                                                <input id="txtName" style="WIDTH: 100%" type="text">
213                                                        </td>
214                                                </tr>
215                                        </table>
216                                </td>
217                        </tr>
218                </table>
219        </body>
220</html>
Note: See TracBrowser for help on using the repository browser.