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( '"', '"' ) + '">' ) ; 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> 221