Subversion Repositories Applications.papyrus

Rev

Rev 1688 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1075 ddelon 1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
2
<!--
1921 jp_milcent 3
 * FCKeditor - The text editor for Internet - http://www.fckeditor.net
4
 * Copyright (C) 2003-2008 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.
1075 ddelon 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
 
1921 jp_milcent 32
var dialog			= window.parent ;
33
var oEditor			= dialog.InnerDialogLoaded() ;
1075 ddelon 34
 
1921 jp_milcent 35
var FCK				= oEditor.FCK ;
36
var FCKBrowserInfo	= oEditor.FCKBrowserInfo ;
37
var FCKTools		= oEditor.FCKTools ;
38
var FCKRegexLib		= oEditor.FCKRegexLib ;
1075 ddelon 39
 
1921 jp_milcent 40
var oDOM			= FCK.EditorDocument ;
41
 
42
var oFakeImage = dialog.Selection.GetSelectedElement() ;
43
 
1075 ddelon 44
var oAnchor ;
45
 
46
if ( oFakeImage )
47
{
48
	if ( oFakeImage.tagName == 'IMG' && oFakeImage.getAttribute('_fckanchor') )
49
		oAnchor = FCK.GetRealElement( oFakeImage ) ;
50
	else
51
		oFakeImage = null ;
52
}
53
 
1921 jp_milcent 54
//Search for a real anchor
55
if ( !oFakeImage )
56
{
57
	oAnchor = FCK.Selection.MoveToAncestorNode( 'A' ) ;
58
	if ( oAnchor )
59
		FCK.Selection.SelectNode( oAnchor ) ;
60
}
61
 
1075 ddelon 62
window.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 ) ;
1921 jp_milcent 73
	window.parent.SetAutoSize( true ) ;
74
 
75
	SelectField( 'txtName' ) ;
1075 ddelon 76
}
77
 
78
function Ok()
79
{
1921 jp_milcent 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 )
1075 ddelon 87
	{
1921 jp_milcent 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
 
1075 ddelon 96
		alert( oEditor.FCKLang.DlgAnchorErrorName ) ;
97
		return false ;
98
	}
1921 jp_milcent 99
 
1075 ddelon 100
	oEditor.FCKUndo.SaveUndoStep() ;
101
 
1921 jp_milcent 102
	if ( oAnchor )	// Modifying an existent anchor.
103
	{
104
		ReadjustLinksToAnchor( oAnchor.name, sNewName );
1075 ddelon 105
 
1921 jp_milcent 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
 
1075 ddelon 171
	return true ;
172
}
173
 
1921 jp_milcent 174
// Checks all the links in the current page pointing to the current name and changes them to the new name
175
function 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
 
1075 ddelon 202
		</script>
203
	</head>
1921 jp_milcent 204
	<body style="overflow: hidden">
1075 ddelon 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>
1921 jp_milcent 220
</html>