Subversion Repositories Applications.papyrus

Compare Revisions

No changes between revisions

Ignore whitespace Rev 1924 → Rev 1925

/trunk/api/fckeditor/fckeditor/editor/dialog/fck_replace.html
New file
0,0 → 1,648
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!--
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* "Find" and "Replace" dialog box window.
-->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta content="noindex, nofollow" name="robots" />
<script src="common/fck_dialog_common.js" type="text/javascript"></script>
<script type="text/javascript">
 
var dialog = window.parent ;
var oEditor = dialog.InnerDialogLoaded() ;
var dialogArguments = dialog.Args() ;
 
var FCKLang = oEditor.FCKLang ;
var FCKDomTools = oEditor.FCKDomTools ;
var FCKDomRange = oEditor.FCKDomRange ;
var FCKListsLib = oEditor.FCKListsLib ;
var FCKTools = oEditor.FCKTools ;
var EditorDocument = oEditor.FCK.EditorDocument ;
var HighlightStyle = oEditor.FCKStyles.GetStyle( '_FCK_SelectionHighlight' ) ;
 
dialog.AddTab( 'Find', FCKLang.DlgFindTitle ) ;
dialog.AddTab( 'Replace', FCKLang.DlgReplaceTitle ) ;
var idMap = {} ;
 
function OnDialogTabChange( tabCode )
{
ShowE( 'divFind', ( tabCode == 'Find' ) ) ;
ShowE( 'divReplace', ( tabCode == 'Replace' ) ) ;
idMap['FindText'] = 'txtFind' + tabCode ;
idMap['CheckCase'] = 'chkCase' + tabCode ;
idMap['CheckWord'] = 'chkWord' + tabCode ;
 
if ( tabCode == 'Replace' )
dialog.SetAutoSize( true ) ;
}
 
GetNextNonEmptyTextNode = function( node, stopNode )
{
while ( ( node = FCKDomTools.GetNextSourceNode( node, false, 3, stopNode ) ) && node && node.length < 1 )
1 ;
return node ;
}
 
CharacterCursor = function( arg )
{
if ( arg.nodeType && arg.nodeType == 9 )
{
this._textNode = GetNextNonEmptyTextNode( arg.body, arg.documentElement ) ;
this._offset = 0 ;
this._doc = arg ;
}
else
{
this._textNode = arguments[0] ;
this._offset = arguments[1] ;
this._doc = FCKTools.GetElementDocument( arguments[0] ) ;
}
}
CharacterCursor.prototype =
{
GetCharacter : function()
{
return ( this._textNode && this._textNode.nodeValue.charAt( this._offset ) ) || null ;
},
 
// Non-normalized.
GetTextNode : function()
{
return this._textNode ;
},
 
// Non-normalized.
GetIndex : function()
{
return this._offset ;
},
 
// Return value means whehther we've crossed a line break or a paragraph boundary.
MoveNext : function()
{
if ( this._offset < this._textNode.length - 1 )
{
this._offset++ ;
return false ;
}
 
var crossed = false ;
var curNode = this._textNode ;
while ( ( curNode = FCKDomTools.GetNextSourceNode( curNode ) )
&& curNode && ( curNode.nodeType != 3 || curNode.length < 1 ) )
{
var tag = curNode.nodeName.toLowerCase() ;
if ( FCKListsLib.BlockElements[tag] || tag == 'br' )
crossed = true ;
}
 
this._textNode = curNode ;
this._offset = 0 ;
return crossed ;
},
 
// Return value means whehther we've crossed a line break or a paragraph boundary.
MoveBack : function()
{
if ( this._offset > 0 && this._textNode.length > 0 )
{
this._offset = Math.min( this._offset - 1, this._textNode.length - 1 ) ;
return false ;
}
 
var crossed = false ;
var curNode = this._textNode ;
while ( ( curNode = FCKDomTools.GetPreviousSourceNode( curNode ) )
&& curNode && ( curNode.nodeType != 3 || curNode.length < 1 ) )
{
var tag = curNode.nodeName.toLowerCase() ;
if ( FCKListsLib.BlockElements[tag] || tag == 'br' )
crossed = true ;
}
 
this._textNode = curNode ;
this._offset = curNode.length - 1 ;
return crossed ;
},
 
Clone : function()
{
return new CharacterCursor( this._textNode, this._offset ) ;
}
} ;
 
CharacterRange = function( initCursor, maxLength )
{
this._cursors = initCursor.push ? initCursor : [initCursor] ;
this._maxLength = maxLength ;
this._highlightRange = null ;
}
CharacterRange.prototype =
{
ToDomRange : function()
{
var firstCursor = this._cursors[0] ;
var lastCursor = this._cursors[ this._cursors.length - 1 ] ;
var domRange = new FCKDomRange( FCKTools.GetElementWindow( firstCursor.GetTextNode() ) ) ;
var w3cRange = domRange._Range = domRange.CreateRange() ;
w3cRange.setStart( firstCursor.GetTextNode(), firstCursor.GetIndex() ) ;
w3cRange.setEnd( lastCursor.GetTextNode(), lastCursor.GetIndex() + 1 ) ;
domRange._UpdateElementInfo() ;
return domRange ;
},
 
Highlight : function()
{
if ( this._cursors.length < 1 )
return ;
 
var domRange = this.ToDomRange() ;
HighlightStyle.ApplyToRange( domRange, false, true ) ;
this._highlightRange = domRange ;
 
var charRange = CharacterRange.CreateFromDomRange( domRange ) ;
var focusNode = domRange.StartNode ;
if ( focusNode.nodeType != 1 )
focusNode = focusNode.parentNode ;
FCKDomTools.ScrollIntoView( focusNode, false ) ;
this._cursors = charRange._cursors ;
},
 
RemoveHighlight : function()
{
if ( this._highlightRange )
{
HighlightStyle.RemoveFromRange( this._highlightRange, false, true ) ;
var charRange = CharacterRange.CreateFromDomRange( this._highlightRange ) ;
this._cursors = charRange._cursors ;
this._highlightRange = null ;
}
},
 
GetHighlightDomRange : function()
{
return this._highlightRange;
},
 
MoveNext : function()
{
var next = this._cursors[ this._cursors.length - 1 ].Clone() ;
var retval = next.MoveNext() ;
if ( retval )
this._cursors = [] ;
this._cursors.push( next ) ;
if ( this._cursors.length > this._maxLength )
this._cursors.shift() ;
return retval ;
},
 
MoveBack : function()
{
var prev = this._cursors[0].Clone() ;
var retval = prev.MoveBack() ;
if ( retval )
this._cursors = [] ;
this._cursors.unshift( prev ) ;
if ( this._cursors.length > this._maxLength )
this._cursors.pop() ;
return retval ;
},
 
GetEndCharacter : function()
{
if ( this._cursors.length < 1 )
return null ;
var retval = this._cursors[ this._cursors.length - 1 ].GetCharacter() ;
return retval ;
},
 
GetNextRange : function( len )
{
if ( this._cursors.length == 0 )
return null ;
var cur = this._cursors[ this._cursors.length - 1 ].Clone() ;
cur.MoveNext() ;
return new CharacterRange( cur, len ) ;
},
 
GetCursors : function()
{
return this._cursors ;
}
} ;
 
CharacterRange.CreateFromDomRange = function( domRange )
{
var w3cRange = domRange._Range ;
var startContainer = w3cRange.startContainer ;
var endContainer = w3cRange.endContainer ;
var startTextNode, startIndex, endTextNode, endIndex ;
 
if ( startContainer.nodeType == 3 )
{
startTextNode = startContainer ;
startIndex = w3cRange.startOffset ;
}
else if ( domRange.StartNode.nodeType == 3 )
{
startTextNode = domRange.StartNode ;
startIndex = 0 ;
}
else
{
startTextNode = GetNextNonEmptyTextNode( domRange.StartNode, domRange.StartNode.parentNode ) ;
if ( !startTextNode )
return null ;
startIndex = 0 ;
}
 
if ( endContainer.nodeType == 3 && w3cRange.endOffset > 0 )
{
endTextNode = endContainer ;
endIndex = w3cRange.endOffset - 1 ;
}
else
{
endTextNode = domRange.EndNode ;
while ( endTextNode.nodeType != 3 )
endTextNode = endTextNode.lastChild ;
endIndex = endTextNode.length - 1 ;
}
 
var cursors = [] ;
var current = new CharacterCursor( startTextNode, startIndex ) ;
cursors.push( current ) ;
if ( !( current.GetTextNode() == endTextNode && current.GetIndex() == endIndex ) && !domRange.CheckIsEmpty() )
{
do
{
current = current.Clone() ;
current.MoveNext() ;
cursors.push( current ) ;
}
while ( !( current.GetTextNode() == endTextNode && current.GetIndex() == endIndex ) ) ;
}
 
return new CharacterRange( cursors, cursors.length ) ;
}
 
// Knuth-Morris-Pratt Algorithm for stream input
KMP_NOMATCH = 0 ;
KMP_ADVANCED = 1 ;
KMP_MATCHED = 2 ;
KmpMatch = function( pattern, ignoreCase )
{
var overlap = [ -1 ] ;
for ( var i = 0 ; i < pattern.length ; i++ )
{
overlap.push( overlap[i] + 1 ) ;
while ( overlap[ i + 1 ] > 0 && pattern.charAt( i ) != pattern.charAt( overlap[ i + 1 ] - 1 ) )
overlap[ i + 1 ] = overlap[ overlap[ i + 1 ] - 1 ] + 1 ;
}
this._Overlap = overlap ;
this._State = 0 ;
this._IgnoreCase = ( ignoreCase === true ) ;
if ( ignoreCase )
this.Pattern = pattern.toLowerCase();
else
this.Pattern = pattern ;
}
KmpMatch.prototype = {
FeedCharacter : function( c )
{
if ( this._IgnoreCase )
c = c.toLowerCase();
 
while ( true )
{
if ( c == this.Pattern.charAt( this._State ) )
{
this._State++ ;
if ( this._State == this.Pattern.length )
{
// found a match, start over, don't care about partial matches involving the current match
this._State = 0;
return KMP_MATCHED;
}
return KMP_ADVANCED ;
}
else if ( this._State == 0 )
return KMP_NOMATCH;
else
this._State = this._Overlap[ this._State ];
}
 
return null ;
},
 
Reset : function()
{
this._State = 0 ;
}
};
 
// Place a range at the start of document.
function OnLoad()
{
// First of all, translate the dialog box texts.
oEditor.FCKLanguageManager.TranslatePage( document ) ;
 
// Show the appropriate tab at startup.
if ( dialogArguments.CustomValue == 'Find' )
{
dialog.SetSelectedTab( 'Find' ) ;
dialog.SetAutoSize( true ) ;
}
else
dialog.SetSelectedTab( 'Replace' ) ;
 
SelectField( 'txtFind' + dialogArguments.CustomValue ) ;
}
 
function btnStat()
{
GetE('btnReplace').disabled =
GetE('btnReplaceAll').disabled =
GetE('btnFind').disabled =
( GetE(idMap["FindText"]).value.length == 0 ) ;
}
 
function btnStatDelayed()
{
setTimeout( btnStat, 1 ) ;
}
 
function GetSearchString()
{
return GetE(idMap['FindText']).value ;
}
 
function GetReplaceString()
{
return GetE("txtReplace").value ;
}
 
function GetCheckCase()
{
return !! ( GetE(idMap['CheckCase']).checked ) ;
}
 
function GetMatchWord()
{
return !! ( GetE(idMap['CheckWord']).checked ) ;
}
 
/* Is this character a unicode whitespace or a punctuation mark?
* References:
* http://unicode.org/Public/UNIDATA/PropList.txt (whitespaces)
* http://php.chinaunix.net/manual/tw/ref.regex.php (punctuation marks)
*/
function CheckIsWordSeparator( c )
{
var code = c.charCodeAt( 0 );
if ( code >= 9 && code <= 0xd )
return true;
if ( code >= 0x2000 && code <= 0x200a )
return true;
switch ( code )
{
case 0x20:
case 0x85:
case 0xa0:
case 0x1680:
case 0x180e:
case 0x2028:
case 0x2029:
case 0x202f:
case 0x205f:
case 0x3000:
return true;
default:
}
return /[.,"'?!;:]/.test( c ) ;
}
 
FindRange = null ;
function _Find()
{
var searchString = GetSearchString() ;
if ( !FindRange )
FindRange = new CharacterRange( new CharacterCursor( EditorDocument ), searchString.length ) ;
else
{
FindRange.RemoveHighlight() ;
FindRange = FindRange.GetNextRange( searchString.length ) ;
}
var matcher = new KmpMatch( searchString, ! GetCheckCase() ) ;
var matchState = KMP_NOMATCH ;
var character = '%' ;
 
while ( character != null )
{
while ( ( character = FindRange.GetEndCharacter() ) )
{
matchState = matcher.FeedCharacter( character ) ;
if ( matchState == KMP_MATCHED )
break ;
if ( FindRange.MoveNext() )
matcher.Reset() ;
}
 
if ( matchState == KMP_MATCHED )
{
if ( GetMatchWord() )
{
var cursors = FindRange.GetCursors() ;
var head = cursors[ cursors.length - 1 ].Clone() ;
var tail = cursors[0].Clone() ;
if ( !head.MoveNext() && !CheckIsWordSeparator( head.GetCharacter() ) )
continue ;
if ( !tail.MoveBack() && !CheckIsWordSeparator( tail.GetCharacter() ) )
continue ;
}
 
FindRange.Highlight() ;
return true ;
}
}
 
FindRange = null ;
return false ;
}
 
function Find()
{
if ( ! _Find() )
alert( FCKLang.DlgFindNotFoundMsg ) ;
}
 
function Replace()
{
var saveUndoStep = function( selectRange )
{
var ieRange ;
if ( oEditor.FCKBrowserInfo.IsIE )
ieRange = document.selection.createRange() ;
 
selectRange.Select() ;
oEditor.FCKUndo.SaveUndoStep() ;
var cloneRange = selectRange.Clone() ;
cloneRange.Collapse( false ) ;
cloneRange.Select() ;
 
if ( ieRange )
setTimeout( function(){ ieRange.select() ; }, 1 ) ;
}
 
if ( FindRange && FindRange.GetHighlightDomRange() )
{
var range = FindRange.GetHighlightDomRange() ;
var bookmark = range.CreateBookmark() ;
FindRange.RemoveHighlight() ;
range.MoveToBookmark( bookmark ) ;
 
saveUndoStep( range ) ;
range.DeleteContents() ;
range.InsertNode( EditorDocument.createTextNode( GetReplaceString() ) ) ;
range._UpdateElementInfo() ;
 
FindRange = CharacterRange.CreateFromDomRange( range ) ;
}
else
{
if ( ! _Find() )
{
FindRange && FindRange.RemoveHighlight() ;
alert( FCKLang.DlgFindNotFoundMsg ) ;
}
}
}
 
function ReplaceAll()
{
oEditor.FCKUndo.SaveUndoStep() ;
var replaceCount = 0 ;
 
while ( _Find() )
{
var range = FindRange.GetHighlightDomRange() ;
var bookmark = range.CreateBookmark() ;
FindRange.RemoveHighlight() ;
range.MoveToBookmark( bookmark) ;
 
range.DeleteContents() ;
range.InsertNode( EditorDocument.createTextNode( GetReplaceString() ) ) ;
range._UpdateElementInfo() ;
 
FindRange = CharacterRange.CreateFromDomRange( range ) ;
replaceCount++ ;
}
if ( replaceCount == 0 )
{
FindRange && FindRange.RemoveHighlight() ;
alert( FCKLang.DlgFindNotFoundMsg ) ;
}
dialog.Cancel() ;
}
 
window.onunload = function()
{
if ( FindRange )
{
FindRange.RemoveHighlight() ;
FindRange.ToDomRange().Select() ;
}
}
</script>
</head>
<body onload="OnLoad()" style="overflow: hidden">
<div id="divFind" style="display: none">
<table cellspacing="3" cellpadding="2" width="100%" border="0">
<tr>
<td nowrap="nowrap">
<label for="txtFindFind" fcklang="DlgReplaceFindLbl">
Find what:</label>
</td>
<td width="100%">
<input id="txtFindFind" onkeyup="btnStat()" oninput="btnStat()" onpaste="btnStatDelayed()" style="width: 100%" tabindex="1"
type="text" />
</td>
<td>
<input id="btnFind" style="width: 80px" disabled="disabled" onclick="Find();"
type="button" value="Find" fcklang="DlgFindFindBtn" />
</td>
</tr>
<tr>
<td valign="bottom" colspan="3">
&nbsp;<input id="chkCaseFind" tabindex="3" type="checkbox" /><label for="chkCaseFind" fcklang="DlgReplaceCaseChk">Match
case</label>
<br />
&nbsp;<input id="chkWordFind" tabindex="4" type="checkbox" /><label for="chkWordFind" fcklang="DlgReplaceWordChk">Match
whole word</label>
</td>
</tr>
</table>
</div>
<div id="divReplace" style="display:none">
<table cellspacing="3" cellpadding="2" width="100%" border="0">
<tr>
<td nowrap="nowrap">
<label for="txtFindReplace" fcklang="DlgReplaceFindLbl">
Find what:</label>
</td>
<td width="100%">
<input id="txtFindReplace" onkeyup="btnStat()" oninput="btnStat()" onpaste="btnStatDelayed()" style="width: 100%" tabindex="1"
type="text" />
</td>
<td>
<input id="btnReplace" style="width: 80px" disabled="disabled" onclick="Replace();"
type="button" value="Replace" fcklang="DlgReplaceReplaceBtn" />
</td>
</tr>
<tr>
<td valign="top" nowrap="nowrap">
<label for="txtReplace" fcklang="DlgReplaceReplaceLbl">
Replace with:</label>
</td>
<td valign="top">
<input id="txtReplace" style="width: 100%" tabindex="2" type="text" />
</td>
<td>
<input id="btnReplaceAll" style="width: 80px" disabled="disabled" onclick="ReplaceAll()" type="button"
value="Replace All" fcklang="DlgReplaceReplAllBtn" />
</td>
</tr>
<tr>
<td valign="bottom" colspan="3">
&nbsp;<input id="chkCaseReplace" tabindex="3" type="checkbox" /><label for="chkCaseReplace" fcklang="DlgReplaceCaseChk">Match
case</label>
<br />
&nbsp;<input id="chkWordReplace" tabindex="4" type="checkbox" /><label for="chkWordReplace" fcklang="DlgReplaceWordChk">Match
whole word</label>
</td>
</tr>
</table>
</div>
</body>
</html>
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_button.html
New file
0,0 → 1,104
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<!--
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* Button dialog window.
-->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Button Properties</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta content="noindex, nofollow" name="robots" />
<script src="common/fck_dialog_common.js" type="text/javascript"></script>
<script type="text/javascript">
 
var dialog = window.parent ;
var oEditor = dialog.InnerDialogLoaded() ;
 
// Gets the document DOM
var oDOM = oEditor.FCK.EditorDocument ;
 
var oActiveEl = dialog.Selection.GetSelectedElement() ;
 
window.onload = function()
{
// First of all, translate the dialog box texts
oEditor.FCKLanguageManager.TranslatePage(document) ;
 
if ( oActiveEl && oActiveEl.tagName.toUpperCase() == "INPUT" && ( oActiveEl.type == "button" || oActiveEl.type == "submit" || oActiveEl.type == "reset" ) )
{
GetE('txtName').value = oActiveEl.name ;
GetE('txtValue').value = oActiveEl.value ;
GetE('txtType').value = oActiveEl.type ;
}
else
oActiveEl = null ;
 
dialog.SetOkButton( true ) ;
dialog.SetAutoSize( true ) ;
SelectField( 'txtName' ) ;
}
 
function Ok()
{
oEditor.FCKUndo.SaveUndoStep() ;
 
oActiveEl = CreateNamedElement( oEditor, oActiveEl, 'INPUT', {name: GetE('txtName').value, type: GetE('txtType').value } ) ;
 
SetAttribute( oActiveEl, 'value', GetE('txtValue').value ) ;
 
return true ;
}
 
</script>
</head>
<body style="overflow: hidden">
<table width="100%" style="height: 100%">
<tr>
<td align="center">
<table border="0" cellpadding="0" cellspacing="0" width="80%">
<tr>
<td colspan="">
<span fcklang="DlgCheckboxName">Name</span><br />
<input type="text" size="20" id="txtName" style="width: 100%" />
</td>
</tr>
<tr>
<td>
<span fcklang="DlgButtonText">Text (Value)</span><br />
<input type="text" id="txtValue" style="width: 100%" />
</td>
</tr>
<tr>
<td>
<span fcklang="DlgButtonType">Type</span><br />
<select id="txtType">
<option fcklang="DlgButtonTypeBtn" value="button" selected="selected">Button</option>
<option fcklang="DlgButtonTypeSbm" value="submit">Submit</option>
<option fcklang="DlgButtonTypeRst" value="reset">Reset</option>
</select>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_template.html
New file
0,0 → 1,242
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!--
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* Template selection dialog window.
-->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="robots" content="noindex, nofollow" />
<style type="text/css">
.TplList
{
border: #dcdcdc 2px solid;
background-color: #ffffff;
overflow: auto;
width: 90%;
}
 
.TplItem
{
margin: 5px;
padding: 7px;
border: #eeeeee 1px solid;
}
 
.TplItem TABLE
{
display: inline;
}
 
.TplTitle
{
font-weight: bold;
}
</style>
<script src="common/fck_dialog_common.js" type="text/javascript"></script>
<script type="text/javascript">
 
var oEditor = window.parent.InnerDialogLoaded() ;
var FCK = oEditor.FCK ;
var FCKLang = oEditor.FCKLang ;
var FCKConfig = oEditor.FCKConfig ;
 
window.onload = function()
{
// Set the right box height (browser dependent).
GetE('eList').style.height = document.all ? '100%' : '295px' ;
 
// Translate the dialog box texts.
oEditor.FCKLanguageManager.TranslatePage(document) ;
 
GetE('xChkReplaceAll').checked = ( FCKConfig.TemplateReplaceAll !== false ) ;
 
if ( FCKConfig.TemplateReplaceCheckbox !== false )
GetE('xReplaceBlock').style.display = '' ;
 
window.parent.SetAutoSize( true ) ;
 
LoadTemplatesXml() ;
}
 
function LoadTemplatesXml()
{
var oTemplate ;
 
if ( !FCK._Templates )
{
GetE('eLoading').style.display = '' ;
 
// Create the Templates array.
FCK._Templates = new Array() ;
 
// Load the XML file.
var oXml = new oEditor.FCKXml() ;
oXml.LoadUrl( FCKConfig.TemplatesXmlPath ) ;
 
// Get the Images Base Path.
var oAtt = oXml.SelectSingleNode( 'Templates/@imagesBasePath' ) ;
var sImagesBasePath = oAtt ? oAtt.value : '' ;
 
// Get the "Template" nodes defined in the XML file.
var aTplNodes = oXml.SelectNodes( 'Templates/Template' ) ;
 
for ( var i = 0 ; i < aTplNodes.length ; i++ )
{
var oNode = aTplNodes[i] ;
 
oTemplate = new Object() ;
 
var oPart ;
 
// Get the Template Title.
if ( (oPart = oNode.attributes.getNamedItem('title')) )
oTemplate.Title = oPart.value ;
else
oTemplate.Title = 'Template ' + ( i + 1 ) ;
 
// Get the Template Description.
if ( (oPart = oXml.SelectSingleNode( 'Description', oNode )) )
oTemplate.Description = oPart.text ? oPart.text : oPart.textContent ;
 
// Get the Template Image.
if ( (oPart = oNode.attributes.getNamedItem('image')) )
oTemplate.Image = sImagesBasePath + oPart.value ;
 
// Get the Template HTML.
if ( (oPart = oXml.SelectSingleNode( 'Html', oNode )) )
oTemplate.Html = oPart.text ? oPart.text : oPart.textContent ;
else
{
alert( 'No HTML defined for template index ' + i + '. Please review the "' + FCKConfig.TemplatesXmlPath + '" file.' ) ;
continue ;
}
 
FCK._Templates[ FCK._Templates.length ] = oTemplate ;
}
 
GetE('eLoading').style.display = 'none' ;
}
 
if ( FCK._Templates.length == 0 )
GetE('eEmpty').style.display = '' ;
else
{
for ( var j = 0 ; j < FCK._Templates.length ; j++ )
{
oTemplate = FCK._Templates[j] ;
 
var oItemDiv = GetE('eList').appendChild( document.createElement( 'DIV' ) ) ;
oItemDiv.TplIndex = j ;
oItemDiv.className = 'TplItem' ;
 
// Build the inner HTML of our new item DIV.
var sInner = '<table><tr>' ;
 
if ( oTemplate.Image )
sInner += '<td valign="top"><img src="' + oTemplate.Image + '"><\/td>' ;
 
sInner += '<td valign="top"><div class="TplTitle">' + oTemplate.Title + '<\/div>' ;
 
if ( oTemplate.Description )
sInner += '<div>' + oTemplate.Description + '<\/div>' ;
 
sInner += '<\/td><\/tr><\/table>' ;
 
oItemDiv.innerHTML = sInner ;
 
oItemDiv.onmouseover = ItemDiv_OnMouseOver ;
oItemDiv.onmouseout = ItemDiv_OnMouseOut ;
oItemDiv.onclick = ItemDiv_OnClick ;
}
}
}
 
function ItemDiv_OnMouseOver()
{
this.className += ' PopupSelectionBox' ;
}
 
function ItemDiv_OnMouseOut()
{
this.className = this.className.replace( /\s*PopupSelectionBox\s*/, '' ) ;
}
 
function ItemDiv_OnClick()
{
SelectTemplate( this.TplIndex ) ;
}
 
function SelectTemplate( index )
{
oEditor.FCKUndo.SaveUndoStep() ;
 
if ( GetE('xChkReplaceAll').checked )
FCK.SetData( FCK._Templates[index].Html ) ;
else
FCK.InsertHtml( FCK._Templates[index].Html ) ;
 
window.parent.Cancel( true ) ;
}
 
</script>
</head>
<body style="overflow: hidden">
<table width="100%" style="height: 100%">
<tr>
<td align="center">
<span fcklang="DlgTemplatesSelMsg">Please select the template to open in the editor<br />
(the actual contents will be lost):</span>
</td>
</tr>
<tr>
<td height="100%" align="center">
<div id="eList" align="left" class="TplList">
<div id="eLoading" align="center" style="display: none">
<br />
<span fcklang="DlgTemplatesLoading">Loading templates list. Please wait...</span>
</div>
<div id="eEmpty" align="center" style="display: none">
<br />
<span fcklang="DlgTemplatesNoTpl">(No templates defined)</span>
</div>
</div>
</td>
</tr>
<tr id="xReplaceBlock" style="display: none">
<td>
<table cellpadding="0" cellspacing="0">
<tr>
<td>
<input id="xChkReplaceAll" type="checkbox" /></td>
<td>
&nbsp;</td>
<td>
<label for="xChkReplaceAll" fcklang="DlgTemplatesReplace">
Replace actual contents</label></td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_paste.html
New file
0,0 → 1,346
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!--
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* This dialog is shown when, for some reason (usually security settings),
* the user is not able to paste data from the clipboard to the editor using
* the toolbar buttons or the context menu.
-->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="robots" content="noindex, nofollow" />
<script src="common/fck_dialog_common.js" type="text/javascript"></script>
<script type="text/javascript">
var dialog = window.parent ;
var oEditor = dialog.InnerDialogLoaded() ;
var FCK = oEditor.FCK;
var FCKTools = oEditor.FCKTools ;
var FCKConfig = oEditor.FCKConfig ;
var FCKBrowserInfo = oEditor.FCKBrowserInfo ;
 
window.onload = function ()
{
// First of all, translate the dialog box texts
oEditor.FCKLanguageManager.TranslatePage(document) ;
 
var sPastingType = dialog.Args().CustomValue ;
 
if ( sPastingType == 'Word' || sPastingType == 'Security' )
{
if ( sPastingType == 'Security' )
document.getElementById( 'xSecurityMsg' ).style.display = '' ;
 
// For document.domain compatibility (#123) we must do all the magic in
// the URL for IE.
var sFrameUrl = !oEditor.FCK_IS_CUSTOM_DOMAIN || !FCKBrowserInfo.IsIE ?
'javascript:void(0)' :
'javascript:void( (function(){' +
'document.open() ;' +
'document.domain=\'' + document.domain + '\' ;' +
'document.write(\'<html><head><script>window.onerror = function() { return true ; };<\/script><\/head><body><\/body><\/html>\') ;' +
'document.close() ;' +
'document.body.contentEditable = true ;' +
'window.focus() ;' +
'})() )' ;
 
var eFrameSpace = document.getElementById( 'xFrameSpace' ) ;
eFrameSpace.innerHTML = '<iframe id="frmData" src="' + sFrameUrl + '" ' +
'height="98%" width="99%" frameborder="0" style="border: #000000 1px; background-color: #ffffff"><\/iframe>' ;
 
var oFrame = eFrameSpace.firstChild ;
 
if ( !oEditor.FCK_IS_CUSTOM_DOMAIN || !FCKBrowserInfo.IsIE )
{
// Avoid errors if the pasted content has any script that fails: #389
var oDoc = oFrame.contentWindow.document ;
oDoc.open() ;
oDoc.write('<html><head><script>window.onerror = function() { return true ; };<\/script><\/head><body><\/body><\/html>') ;
oDoc.close() ;
 
if ( FCKBrowserInfo.IsIE )
oDoc.body.contentEditable = true ;
else
oDoc.designMode = 'on' ;
 
oFrame.contentWindow.focus();
}
}
else
{
document.getElementById('txtData').style.display = '' ;
}
 
if ( sPastingType != 'Word' )
document.getElementById('oWordCommands').style.display = 'none' ;
 
dialog.SetOkButton( true ) ;
dialog.SetAutoSize( true ) ;
}
 
function Ok()
{
// Before doing anything, save undo snapshot.
oEditor.FCKUndo.SaveUndoStep() ;
 
var sHtml ;
 
var sPastingType = dialog.Args().CustomValue ;
 
if ( sPastingType == 'Word' || sPastingType == 'Security' )
{
var oFrame = document.getElementById('frmData') ;
var oBody ;
 
if ( oFrame.contentDocument )
oBody = oFrame.contentDocument.body ;
else
oBody = oFrame.contentWindow.document.body ;
 
if ( sPastingType == 'Word' )
{
// If a plugin creates a FCK.CustomCleanWord function it will be called instead of the default one
if ( typeof( FCK.CustomCleanWord ) == 'function' )
sHtml = FCK.CustomCleanWord( oBody, document.getElementById('chkRemoveFont').checked, document.getElementById('chkRemoveStyles').checked ) ;
else
sHtml = CleanWord( oBody, document.getElementById('chkRemoveFont').checked, document.getElementById('chkRemoveStyles').checked ) ;
}
else
sHtml = oBody.innerHTML ;
 
// Fix relative anchor URLs (IE automatically adds the current page URL).
var re = new RegExp( window.location + "#", "g" ) ;
sHtml = sHtml.replace( re, '#') ;
}
else
{
sHtml = oEditor.FCKTools.HTMLEncode( document.getElementById('txtData').value ) ;
sHtml = FCKTools.ProcessLineBreaks( oEditor, FCKConfig, sHtml ) ;
 
// FCK.InsertHtml() does not work for us, since document fragments cannot contain node fragments. :(
// Use the marker method instead. It's primitive, but it works.
var range = new oEditor.FCKDomRange( oEditor.FCK.EditorWindow ) ;
var oDoc = oEditor.FCK.EditorDocument ;
dialog.Selection.EnsureSelection() ;
range.MoveToSelection() ;
range.DeleteContents() ;
var marker = [] ;
for ( var i = 0 ; i < 5 ; i++ )
marker.push( parseInt(Math.random() * 100000, 10 ) ) ;
marker = marker.join( "" ) ;
range.InsertNode ( oDoc.createTextNode( marker ) ) ;
var bookmark = range.CreateBookmark() ;
 
// Now we've got a marker indicating the paste position in the editor document.
// Find its position in the HTML code.
var htmlString = oDoc.body.innerHTML ;
var index = htmlString.indexOf( marker ) ;
 
// Split it the HTML code up, add the code we generated, and put them back together.
var htmlList = [] ;
htmlList.push( htmlString.substr( 0, index ) ) ;
htmlList.push( sHtml ) ;
htmlList.push( htmlString.substr( index + marker.length ) ) ;
htmlString = htmlList.join( "" ) ;
 
if ( oEditor.FCKBrowserInfo.IsIE )
oEditor.FCK.SetInnerHtml( htmlString ) ;
else
oDoc.body.innerHTML = htmlString ;
 
range.MoveToBookmark( bookmark ) ;
range.Collapse( false ) ;
range.Select() ;
range.Release() ;
return true ;
}
 
oEditor.FCK.InsertHtml( sHtml ) ;
 
return true ;
}
 
// This function will be called from the PasteFromWord dialog (fck_paste.html)
// Input: oNode a DOM node that contains the raw paste from the clipboard
// bIgnoreFont, bRemoveStyles booleans according to the values set in the dialog
// Output: the cleaned string
function CleanWord( oNode, bIgnoreFont, bRemoveStyles )
{
var html = oNode.innerHTML ;
 
html = html.replace(/<o:p>\s*<\/o:p>/g, '') ;
html = html.replace(/<o:p>[\s\S]*?<\/o:p>/g, '&nbsp;') ;
 
// Remove mso-xxx styles.
html = html.replace( /\s*mso-[^:]+:[^;"]+;?/gi, '' ) ;
 
// Remove margin styles.
html = html.replace( /\s*MARGIN: 0cm 0cm 0pt\s*;/gi, '' ) ;
html = html.replace( /\s*MARGIN: 0cm 0cm 0pt\s*"/gi, "\"" ) ;
 
html = html.replace( /\s*TEXT-INDENT: 0cm\s*;/gi, '' ) ;
html = html.replace( /\s*TEXT-INDENT: 0cm\s*"/gi, "\"" ) ;
 
html = html.replace( /\s*TEXT-ALIGN: [^\s;]+;?"/gi, "\"" ) ;
 
html = html.replace( /\s*PAGE-BREAK-BEFORE: [^\s;]+;?"/gi, "\"" ) ;
 
html = html.replace( /\s*FONT-VARIANT: [^\s;]+;?"/gi, "\"" ) ;
 
html = html.replace( /\s*tab-stops:[^;"]*;?/gi, '' ) ;
html = html.replace( /\s*tab-stops:[^"]*/gi, '' ) ;
 
// Remove FONT face attributes.
if ( bIgnoreFont )
{
html = html.replace( /\s*face="[^"]*"/gi, '' ) ;
html = html.replace( /\s*face=[^ >]*/gi, '' ) ;
 
html = html.replace( /\s*FONT-FAMILY:[^;"]*;?/gi, '' ) ;
}
 
// Remove Class attributes
html = html.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3") ;
 
// Remove styles.
if ( bRemoveStyles )
html = html.replace( /<(\w[^>]*) style="([^\"]*)"([^>]*)/gi, "<$1$3" ) ;
 
// Remove style, meta and link tags
html = html.replace( /<STYLE[^>]*>[\s\S]*?<\/STYLE[^>]*>/gi, '' ) ;
html = html.replace( /<(?:META|LINK)[^>]*>\s*/gi, '' ) ;
 
// Remove empty styles.
html = html.replace( /\s*style="\s*"/gi, '' ) ;
 
html = html.replace( /<SPAN\s*[^>]*>\s*&nbsp;\s*<\/SPAN>/gi, '&nbsp;' ) ;
 
html = html.replace( /<SPAN\s*[^>]*><\/SPAN>/gi, '' ) ;
 
// Remove Lang attributes
html = html.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3") ;
 
html = html.replace( /<SPAN\s*>([\s\S]*?)<\/SPAN>/gi, '$1' ) ;
 
html = html.replace( /<FONT\s*>([\s\S]*?)<\/FONT>/gi, '$1' ) ;
 
// Remove XML elements and declarations
html = html.replace(/<\\?\?xml[^>]*>/gi, '' ) ;
 
// Remove w: tags with contents.
html = html.replace( /<w:[^>]*>[\s\S]*?<\/w:[^>]*>/gi, '' ) ;
 
// Remove Tags with XML namespace declarations: <o:p><\/o:p>
html = html.replace(/<\/?\w+:[^>]*>/gi, '' ) ;
 
// Remove comments [SF BUG-1481861].
html = html.replace(/<\!--[\s\S]*?-->/g, '' ) ;
 
html = html.replace( /<(U|I|STRIKE)>&nbsp;<\/\1>/g, '&nbsp;' ) ;
 
html = html.replace( /<H\d>\s*<\/H\d>/gi, '' ) ;
 
// Remove "display:none" tags.
html = html.replace( /<(\w+)[^>]*\sstyle="[^"]*DISPLAY\s?:\s?none[\s\S]*?<\/\1>/ig, '' ) ;
 
// Remove language tags
html = html.replace( /<(\w[^>]*) language=([^ |>]*)([^>]*)/gi, "<$1$3") ;
 
// Remove onmouseover and onmouseout events (from MS Word comments effect)
html = html.replace( /<(\w[^>]*) onmouseover="([^\"]*)"([^>]*)/gi, "<$1$3") ;
html = html.replace( /<(\w[^>]*) onmouseout="([^\"]*)"([^>]*)/gi, "<$1$3") ;
 
if ( FCKConfig.CleanWordKeepsStructure )
{
// The original <Hn> tag send from Word is something like this: <Hn style="margin-top:0px;margin-bottom:0px">
html = html.replace( /<H(\d)([^>]*)>/gi, '<h$1>' ) ;
 
// Word likes to insert extra <font> tags, when using MSIE. (Wierd).
html = html.replace( /<(H\d)><FONT[^>]*>([\s\S]*?)<\/FONT><\/\1>/gi, '<$1>$2<\/$1>' );
html = html.replace( /<(H\d)><EM>([\s\S]*?)<\/EM><\/\1>/gi, '<$1>$2<\/$1>' );
}
else
{
html = html.replace( /<H1([^>]*)>/gi, '<div$1><b><font size="6">' ) ;
html = html.replace( /<H2([^>]*)>/gi, '<div$1><b><font size="5">' ) ;
html = html.replace( /<H3([^>]*)>/gi, '<div$1><b><font size="4">' ) ;
html = html.replace( /<H4([^>]*)>/gi, '<div$1><b><font size="3">' ) ;
html = html.replace( /<H5([^>]*)>/gi, '<div$1><b><font size="2">' ) ;
html = html.replace( /<H6([^>]*)>/gi, '<div$1><b><font size="1">' ) ;
 
html = html.replace( /<\/H\d>/gi, '<\/font><\/b><\/div>' ) ;
 
// Transform <P> to <DIV>
var re = new RegExp( '(<P)([^>]*>[\\s\\S]*?)(<\/P>)', 'gi' ) ; // Different because of a IE 5.0 error
html = html.replace( re, '<div$2<\/div>' ) ;
 
// Remove empty tags (three times, just to be sure).
// This also removes any empty anchor
html = html.replace( /<([^\s>]+)(\s[^>]*)?>\s*<\/\1>/g, '' ) ;
html = html.replace( /<([^\s>]+)(\s[^>]*)?>\s*<\/\1>/g, '' ) ;
html = html.replace( /<([^\s>]+)(\s[^>]*)?>\s*<\/\1>/g, '' ) ;
}
 
return html ;
}
 
</script>
 
</head>
<body style="overflow: hidden">
<table cellspacing="0" cellpadding="0" width="100%" border="0" style="height: 98%">
<tr>
<td>
<div id="xSecurityMsg" style="display: none">
<span fcklang="DlgPasteSec">Because of your browser security settings,
the editor is not able to access your clipboard data directly. You are required
to paste it again in this window.</span><br />
&nbsp;
</div>
<div>
<span fcklang="DlgPasteMsg2">Please paste inside the following box using the keyboard
(<strong>Ctrl+V</strong>) and hit <strong>OK</strong>.</span><br />
&nbsp;
</div>
</td>
</tr>
<tr>
<td id="xFrameSpace" valign="top" height="100%" style="border: #000000 1px solid">
<textarea id="txtData" cols="80" rows="5" style="border: #000000 1px; display: none;
width: 99%; height: 98%"></textarea>
</td>
</tr>
<tr id="oWordCommands">
<td>
 
<input id="chkRemoveFont" type="checkbox" checked="checked" />
<label for="chkRemoveFont" fcklang="DlgPasteIgnoreFont">
Ignore Font Face definitions</label>
<br />
<input id="chkRemoveStyles" type="checkbox" />
<label for="chkRemoveStyles" fcklang="DlgPasteRemoveStyles">
Remove Styles definitions</label>
 
</td>
</tr>
</table>
</body>
</html>
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_specialchar.html
New file
0,0 → 1,121
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<!--
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* Special Chars Selector dialog window.
-->
<html>
<head>
<meta name="robots" content="noindex, nofollow">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css">
.Hand
{
cursor: pointer ;
cursor: hand ;
}
.Sample { font-size: 24px; }
</style>
<script src="common/fck_dialog_common.js" type="text/javascript"></script>
<script type="text/javascript">
 
var oEditor = window.parent.InnerDialogLoaded() ;
 
var oSample ;
 
function insertChar(charValue)
{
oEditor.FCKUndo.SaveUndoStep() ;
oEditor.FCK.InsertHtml( charValue || "" ) ;
window.parent.Cancel() ;
}
 
function over(td)
{
if ( ! oSample )
return ;
oSample.innerHTML = td.innerHTML ;
td.className = 'LightBackground SpecialCharsOver Hand' ;
}
 
function out(td)
{
if ( ! oSample )
return ;
oSample.innerHTML = "&nbsp;" ;
td.className = 'DarkBackground SpecialCharsOut Hand' ;
}
 
function setDefaults()
{
// Gets the sample placeholder.
oSample = document.getElementById("SampleTD") ;
 
// First of all, translates the dialog box texts.
oEditor.FCKLanguageManager.TranslatePage(document) ;
 
window.parent.SetAutoSize( true ) ;
}
 
</script>
</head>
<body onload="setDefaults()" style="overflow: hidden">
<table cellpadding="0" cellspacing="0" width="100%" height="100%">
<tr>
<td width="100%">
<table cellpadding="1" cellspacing="1" align="center" border="0" width="100%" height="100%">
<script type="text/javascript">
var aChars = ["!","&quot;","#","$","%","&amp;","\\'","(",")","*","+","-",".","/","0","1","2","3","4","5","6","7","8","9",":",";","&lt;","=","&gt;","?","@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","[","]","^","_","`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","|","}","~","&euro;","&lsquo;","&rsquo;","&rsquo;","&ldquo;","&rdquo;","&ndash;","&mdash;","&iexcl;","&cent;","&pound;","&curren;","&yen;","&brvbar;","&sect;","&uml;","&copy;","&ordf;","&laquo;","&not;","&reg;","&macr;","&deg;","&plusmn;","&sup2;","&sup3;","&acute;","&micro;","&para;","&middot;","&cedil;","&sup1;","&ordm;","&raquo;","&frac14;","&frac12;","&frac34;","&iquest;","&Agrave;","&Aacute;","&Acirc;","&Atilde;","&Auml;","&Aring;","&AElig;","&Ccedil;","&Egrave;","&Eacute;","&Ecirc;","&Euml;","&Igrave;","&Iacute;","&Icirc;","&Iuml;","&ETH;","&Ntilde;","&Ograve;","&Oacute;","&Ocirc;","&Otilde;","&Ouml;","&times;","&Oslash;","&Ugrave;","&Uacute;","&Ucirc;","&Uuml;","&Yacute;","&THORN;","&szlig;","&agrave;","&aacute;","&acirc;","&atilde;","&auml;","&aring;","&aelig;","&ccedil;","&egrave;","&eacute;","&ecirc;","&euml;","&igrave;","&iacute;","&icirc;","&iuml;","&eth;","&ntilde;","&ograve;","&oacute;","&ocirc;","&otilde;","&ouml;","&divide;","&oslash;","&ugrave;","&uacute;","&ucirc;","&uuml;","&uuml;","&yacute;","&thorn;","&yuml;","&OElig;","&oelig;","&#372;","&#374","&#373","&#375;","&sbquo;","&#8219;","&bdquo;","&hellip;","&trade;","&#9658;","&bull;","&rarr;","&rArr;","&hArr;","&diams;","&asymp;"] ;
 
var cols = 20 ;
 
var i = 0 ;
while (i < aChars.length)
{
document.write("<TR>") ;
for(var j = 0 ; j < cols ; j++)
{
if (aChars[i])
{
document.write('<TD width="1%" class="DarkBackground SpecialCharsOut Hand" align="center" onclick="insertChar(\'' + aChars[i].replace(/&/g, "&amp;") + '\')" onmouseover="over(this)" onmouseout="out(this)">') ;
document.write(aChars[i]) ;
}
else
document.write("<TD class='DarkBackground SpecialCharsOut'>&nbsp;") ;
document.write("<\/TD>") ;
i++ ;
}
document.write("<\/TR>") ;
}
</script>
</table>
</td>
<td nowrap>&nbsp;&nbsp;&nbsp;&nbsp;</td>
<td valign="top">
<table width="40" cellpadding="0" cellspacing="0" border="0">
<tr>
<td id="SampleTD" width="40" height="40" align="center" class="DarkBackground SpecialCharsOut Sample">&nbsp;</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_select.html
New file
0,0 → 1,180
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<!--
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* Select dialog window.
-->
<html>
<head>
<title>Select Properties</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta content="noindex, nofollow" name="robots">
<script src="common/fck_dialog_common.js" type="text/javascript"></script>
<script type="text/javascript" src="fck_select/fck_select.js"></script>
<script type="text/javascript">
 
var dialog = window.parent ;
var oEditor = dialog.InnerDialogLoaded() ;
 
// Gets the document DOM
var oDOM = oEditor.FCK.EditorDocument ;
 
var oActiveEl = dialog.Selection.GetSelectedElement() ;
 
var oListText ;
var oListValue ;
 
window.onload = function()
{
// First of all, translate the dialog box texts
oEditor.FCKLanguageManager.TranslatePage(document) ;
 
oListText = document.getElementById( 'cmbText' ) ;
oListValue = document.getElementById( 'cmbValue' ) ;
 
// Fix the lists widths. (Bug #970)
oListText.style.width = oListText.offsetWidth ;
oListValue.style.width = oListValue.offsetWidth ;
 
if ( oActiveEl && oActiveEl.tagName == 'SELECT' )
{
GetE('txtName').value = oActiveEl.name ;
GetE('txtSelValue').value = oActiveEl.value ;
GetE('txtLines').value = GetAttribute( oActiveEl, 'size' ) ;
GetE('chkMultiple').checked = oActiveEl.multiple ;
 
// Load the actual options
for ( var i = 0 ; i < oActiveEl.options.length ; i++ )
{
var sText = HTMLDecode( oActiveEl.options[i].innerHTML ) ;
var sValue = oActiveEl.options[i].value ;
 
AddComboOption( oListText, sText, sText ) ;
AddComboOption( oListValue, sValue, sValue ) ;
}
}
else
oActiveEl = null ;
 
dialog.SetOkButton( true ) ;
dialog.SetAutoSize( true ) ;
SelectField( 'txtName' ) ;
}
 
function Ok()
{
oEditor.FCKUndo.SaveUndoStep() ;
 
var sSize = GetE('txtLines').value ;
if ( sSize == null || isNaN( sSize ) || sSize <= 1 )
sSize = '' ;
 
oActiveEl = CreateNamedElement( oEditor, oActiveEl, 'SELECT', {name: GetE('txtName').value} ) ;
 
SetAttribute( oActiveEl, 'size' , sSize ) ;
oActiveEl.multiple = ( sSize.length > 0 && GetE('chkMultiple').checked ) ;
 
// Remove all options.
while ( oActiveEl.options.length > 0 )
oActiveEl.remove(0) ;
 
// Add all available options.
for ( var i = 0 ; i < oListText.options.length ; i++ )
{
var sText = oListText.options[i].value ;
var sValue = oListValue.options[i].value ;
if ( sValue.length == 0 ) sValue = sText ;
 
var oOption = AddComboOption( oActiveEl, sText, sValue, oDOM ) ;
 
if ( sValue == GetE('txtSelValue').value )
{
SetAttribute( oOption, 'selected', 'selected' ) ;
oOption.selected = true ;
}
}
 
return true ;
}
 
</script>
</head>
<body style="overflow: hidden">
<table width="100%" height="100%">
<tr>
<td>
<table width="100%">
<tr>
<td nowrap><span fckLang="DlgSelectName">Name</span>&nbsp;</td>
<td width="100%" colSpan="2"><input id="txtName" style="WIDTH: 100%" type="text"></td>
</tr>
<tr>
<td nowrap><span fckLang="DlgSelectValue">Value</span>&nbsp;</td>
<td width="100%" colSpan="2"><input id="txtSelValue" style="WIDTH: 100%; BACKGROUND-COLOR: buttonface" type="text" readonly></td>
</tr>
<tr>
<td nowrap><span fckLang="DlgSelectSize">Size</span>&nbsp;</td>
<td nowrap><input id="txtLines" type="text" size="2" value="">&nbsp;<span fckLang="DlgSelectLines">lines</span></td>
<td nowrap align="right"><input id="chkMultiple" name="chkMultiple" type="checkbox"><label for="chkMultiple" fckLang="DlgSelectChkMulti">Allow
multiple selections</label></td>
</tr>
</table>
<br>
<hr style="POSITION: absolute">
<span style="LEFT: 10px; POSITION: relative; TOP: -7px" class="BackColor">&nbsp;<span fckLang="DlgSelectOpAvail">Available
Options</span>&nbsp;</span>
<table width="100%">
<tr>
<td width="50%"><span fckLang="DlgSelectOpText">Text</span><br>
<input id="txtText" style="WIDTH: 100%" type="text" name="txtText">
</td>
<td width="50%"><span fckLang="DlgSelectOpValue">Value</span><br>
<input id="txtValue" style="WIDTH: 100%" type="text" name="txtValue">
</td>
<td vAlign="bottom"><input onclick="Add();" type="button" fckLang="DlgSelectBtnAdd" value="Add"></td>
<td vAlign="bottom"><input onclick="Modify();" type="button" fckLang="DlgSelectBtnModify" value="Modify"></td>
</tr>
<tr>
<td rowSpan="2"><select id="cmbText" style="WIDTH: 100%" onchange="GetE('cmbValue').selectedIndex = this.selectedIndex;Select(this);"
size="5" name="cmbText"></select>
</td>
<td rowSpan="2"><select id="cmbValue" style="WIDTH: 100%" onchange="GetE('cmbText').selectedIndex = this.selectedIndex;Select(this);"
size="5" name="cmbValue"></select>
</td>
<td vAlign="top" colSpan="2">
</td>
</tr>
<tr>
<td vAlign="bottom" colSpan="2"><input style="WIDTH: 100%" onclick="Move(-1);" type="button" fckLang="DlgSelectBtnUp" value="Up">
<br>
<input style="WIDTH: 100%" onclick="Move(1);" type="button" fckLang="DlgSelectBtnDown"
value="Down">
</td>
</tr>
<TR>
<TD vAlign="bottom" colSpan="4"><INPUT onclick="SetSelectedValue();" type="button" fckLang="DlgSelectBtnSetValue" value="Set as selected value">&nbsp;&nbsp;
<input onclick="Delete();" type="button" fckLang="DlgSelectBtnDelete" value="Delete"></TD>
</TR>
</table>
</td>
</tr>
</table>
</body>
</html>
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_colorselector.html
New file
0,0 → 1,172
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<!--
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* Color Selection dialog window.
-->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="robots" content="noindex, nofollow" />
<style TYPE="text/css">
#ColorTable { cursor: pointer ; cursor: hand ; }
#hicolor { height: 74px ; width: 74px ; border-width: 1px ; border-style: solid ; }
#hicolortext { width: 75px ; text-align: right ; margin-bottom: 7px ; }
#selhicolor { height: 20px ; width: 74px ; border-width: 1px ; border-style: solid ; }
#selcolor { width: 75px ; height: 20px ; margin-top: 0px ; margin-bottom: 7px ; }
#btnClear { width: 75px ; height: 22px ; margin-bottom: 6px ; }
.ColorCell { height: 15px ; width: 15px ; }
</style>
<script src="common/fck_dialog_common.js" type="text/javascript"></script>
<script type="text/javascript">
 
var oEditor = window.parent.InnerDialogLoaded() ;
 
function OnLoad()
{
// First of all, translate the dialog box texts
oEditor.FCKLanguageManager.TranslatePage(document) ;
 
CreateColorTable() ;
 
window.parent.SetOkButton( true ) ;
window.parent.SetAutoSize( true ) ;
}
 
function CreateColorTable()
{
// Get the target table.
var oTable = document.getElementById('ColorTable') ;
 
// Create the base colors array.
var aColors = ['00','33','66','99','cc','ff'] ;
 
// This function combines two ranges of three values from the color array into a row.
function AppendColorRow( rangeA, rangeB )
{
for ( var i = rangeA ; i < rangeA + 3 ; i++ )
{
var oRow = oTable.insertRow(-1) ;
 
for ( var j = rangeB ; j < rangeB + 3 ; j++ )
{
for ( var n = 0 ; n < 6 ; n++ )
{
AppendColorCell( oRow, '#' + aColors[j] + aColors[n] + aColors[i] ) ;
}
}
}
}
 
// This function create a single color cell in the color table.
function AppendColorCell( targetRow, color )
{
var oCell = targetRow.insertCell(-1) ;
oCell.className = 'ColorCell' ;
oCell.bgColor = color ;
 
oCell.onmouseover = function()
{
document.getElementById('hicolor').style.backgroundColor = this.bgColor ;
document.getElementById('hicolortext').innerHTML = this.bgColor ;
}
 
oCell.onclick = function()
{
document.getElementById('selhicolor').style.backgroundColor = this.bgColor ;
document.getElementById('selcolor').value = this.bgColor ;
}
}
 
AppendColorRow( 0, 0 ) ;
AppendColorRow( 3, 0 ) ;
AppendColorRow( 0, 3 ) ;
AppendColorRow( 3, 3 ) ;
 
// Create the last row.
var oRow = oTable.insertRow(-1) ;
 
// Create the gray scale colors cells.
for ( var n = 0 ; n < 6 ; n++ )
{
AppendColorCell( oRow, '#' + aColors[n] + aColors[n] + aColors[n] ) ;
}
 
// Fill the row with black cells.
for ( var i = 0 ; i < 12 ; i++ )
{
AppendColorCell( oRow, '#000000' ) ;
}
}
 
function Clear()
{
document.getElementById('selhicolor').style.backgroundColor = '' ;
document.getElementById('selcolor').value = '' ;
}
 
function ClearActual()
{
document.getElementById('hicolor').style.backgroundColor = '' ;
document.getElementById('hicolortext').innerHTML = '&nbsp;' ;
}
 
function UpdateColor()
{
try { document.getElementById('selhicolor').style.backgroundColor = document.getElementById('selcolor').value ; }
catch (e) { Clear() ; }
}
 
function Ok()
{
if ( typeof(window.parent.Args().CustomValue) == 'function' )
window.parent.Args().CustomValue( document.getElementById('selcolor').value ) ;
 
return true ;
}
</script>
</head>
<body onload="OnLoad()" scroll="no" style="OVERFLOW: hidden">
<table cellpadding="0" cellspacing="0" border="0" width="100%" height="100%">
<tr>
<td align="center" valign="middle">
<table border="0" cellspacing="5" cellpadding="0" width="100%">
<tr>
<td valign="top" align="center" nowrap width="100%">
<table id="ColorTable" border="0" cellspacing="0" cellpadding="0" width="270" onmouseout="ClearActual();">
</table>
</td>
<td valign="top" align="left" nowrap>
<span fckLang="DlgColorHighlight">Highlight</span>
<div id="hicolor"></div>
<div id="hicolortext">&nbsp;</div>
<span fckLang="DlgColorSelected">Selected</span>
<div id="selhicolor"></div>
<input id="selcolor" type="text" maxlength="20" onchange="UpdateColor();">
<br>
<input id="btnClear" type="button" fckLang="DlgColorBtnClear" value="Clear" onclick="Clear();" />
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_image/fck_image_preview.html
New file
0,0 → 1,72
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!--
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* Preview page for the Image dialog window.
*
* Curiosity: http://en.wikipedia.org/wiki/Lorem_ipsum
-->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="robots" content="noindex, nofollow" />
<script src="../common/fck_dialog_common.js" type="text/javascript"></script>
<script type="text/javascript">
 
var FCKTools = window.parent.FCKTools ;
var FCKConfig = window.parent.FCKConfig ;
 
// Set the preview CSS
document.write( FCKTools.GetStyleHtml( FCKConfig.EditorAreaCSS ) ) ;
document.write( FCKTools.GetStyleHtml( FCKConfig.EditorAreaStyles ) ) ;
 
if ( window.parent.FCKConfig.BaseHref.length > 0 )
document.write( '<base href="' + window.parent.FCKConfig.BaseHref + '">' ) ;
 
window.onload = function()
{
window.parent.SetPreviewElements(
document.getElementById( 'imgPreview' ),
document.getElementById( 'lnkPreview' ) ) ;
}
 
</script>
</head>
<body>
<div>
<a id="lnkPreview" onclick="return false;" style="cursor: default">
<img id="imgPreview" onload="window.parent.UpdateOriginal();"
style="display: none" alt="" /></a>Lorem ipsum dolor sit amet, consectetuer adipiscing
elit. Maecenas feugiat consequat diam. Maecenas metus. Vivamus diam purus, cursus
a, commodo non, facilisis vitae, nulla. Aenean dictum lacinia tortor. Nunc iaculis,
nibh non iaculis aliquam, orci felis euismod neque, sed ornare massa mauris sed
velit. Nulla pretium mi et risus. Fusce mi pede, tempor id, cursus ac, ullamcorper
nec, enim. Sed tortor. Curabitur molestie. Duis velit augue, condimentum at, ultrices
a, luctus ut, orci. Donec pellentesque egestas eros. Integer cursus, augue in cursus
faucibus, eros pede bibendum sem, in tempus tellus justo quis ligula. Etiam eget
tortor. Vestibulum rutrum, est ut placerat elementum, lectus nisl aliquam velit,
tempor aliquam eros nunc nonummy metus. In eros metus, gravida a, gravida sed, lobortis
id, turpis. Ut ultrices, ipsum at venenatis fringilla, sem nulla lacinia tellus,
eget aliquet turpis mauris non enim. Nam turpis. Suspendisse lacinia. Curabitur
ac tortor ut ipsum egestas elementum. Nunc imperdiet gravida mauris.
</div>
</body>
</html>
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_image/fck_image.js
New file
0,0 → 1,512
/*
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* Scripts related to the Image dialog window (see fck_image.html).
*/
 
var dialog = window.parent ;
var oEditor = dialog.InnerDialogLoaded() ;
var FCK = oEditor.FCK ;
var FCKLang = oEditor.FCKLang ;
var FCKConfig = oEditor.FCKConfig ;
var FCKDebug = oEditor.FCKDebug ;
var FCKTools = oEditor.FCKTools ;
 
var bImageButton = ( document.location.search.length > 0 && document.location.search.substr(1) == 'ImageButton' ) ;
 
//#### Dialog Tabs
 
// Set the dialog tabs.
dialog.AddTab( 'Info', FCKLang.DlgImgInfoTab ) ;
 
if ( !bImageButton && !FCKConfig.ImageDlgHideLink )
dialog.AddTab( 'Link', FCKLang.DlgImgLinkTab ) ;
 
if ( FCKConfig.ImageUpload )
dialog.AddTab( 'Upload', FCKLang.DlgLnkUpload ) ;
 
if ( !FCKConfig.ImageDlgHideAdvanced )
dialog.AddTab( 'Advanced', FCKLang.DlgAdvancedTag ) ;
 
// Function called when a dialog tag is selected.
function OnDialogTabChange( tabCode )
{
ShowE('divInfo' , ( tabCode == 'Info' ) ) ;
ShowE('divLink' , ( tabCode == 'Link' ) ) ;
ShowE('divUpload' , ( tabCode == 'Upload' ) ) ;
ShowE('divAdvanced' , ( tabCode == 'Advanced' ) ) ;
}
 
// Get the selected image (if available).
var oImage = dialog.Selection.GetSelectedElement() ;
 
if ( oImage && oImage.tagName != 'IMG' && !( oImage.tagName == 'INPUT' && oImage.type == 'image' ) )
oImage = null ;
 
// Get the active link.
var oLink = dialog.Selection.GetSelection().MoveToAncestorNode( 'A' ) ;
 
var oImageOriginal ;
 
function UpdateOriginal( resetSize )
{
if ( !eImgPreview )
return ;
 
if ( GetE('txtUrl').value.length == 0 )
{
oImageOriginal = null ;
return ;
}
 
oImageOriginal = document.createElement( 'IMG' ) ; // new Image() ;
 
if ( resetSize )
{
oImageOriginal.onload = function()
{
this.onload = null ;
ResetSizes() ;
}
}
 
oImageOriginal.src = eImgPreview.src ;
}
 
var bPreviewInitialized ;
 
window.onload = function()
{
// Translate the dialog box texts.
oEditor.FCKLanguageManager.TranslatePage(document) ;
 
GetE('btnLockSizes').title = FCKLang.DlgImgLockRatio ;
GetE('btnResetSize').title = FCKLang.DlgBtnResetSize ;
 
// Load the selected element information (if any).
LoadSelection() ;
 
// Show/Hide the "Browse Server" button.
GetE('tdBrowse').style.display = FCKConfig.ImageBrowser ? '' : 'none' ;
GetE('divLnkBrowseServer').style.display = FCKConfig.LinkBrowser ? '' : 'none' ;
 
UpdateOriginal() ;
 
// Set the actual uploader URL.
if ( FCKConfig.ImageUpload )
GetE('frmUpload').action = FCKConfig.ImageUploadURL ;
 
dialog.SetAutoSize( true ) ;
 
// Activate the "OK" button.
dialog.SetOkButton( true ) ;
 
SelectField( 'txtUrl' ) ;
}
 
function LoadSelection()
{
if ( ! oImage ) return ;
 
var sUrl = oImage.getAttribute( '_fcksavedurl' ) ;
if ( sUrl == null )
sUrl = GetAttribute( oImage, 'src', '' ) ;
 
GetE('txtUrl').value = sUrl ;
GetE('txtAlt').value = GetAttribute( oImage, 'alt', '' ) ;
GetE('txtVSpace').value = GetAttribute( oImage, 'vspace', '' ) ;
GetE('txtHSpace').value = GetAttribute( oImage, 'hspace', '' ) ;
GetE('txtBorder').value = GetAttribute( oImage, 'border', '' ) ;
GetE('cmbAlign').value = GetAttribute( oImage, 'align', '' ) ;
 
var iWidth, iHeight ;
 
var regexSize = /^\s*(\d+)px\s*$/i ;
 
if ( oImage.style.width )
{
var aMatchW = oImage.style.width.match( regexSize ) ;
if ( aMatchW )
{
iWidth = aMatchW[1] ;
oImage.style.width = '' ;
SetAttribute( oImage, 'width' , iWidth ) ;
}
}
 
if ( oImage.style.height )
{
var aMatchH = oImage.style.height.match( regexSize ) ;
if ( aMatchH )
{
iHeight = aMatchH[1] ;
oImage.style.height = '' ;
SetAttribute( oImage, 'height', iHeight ) ;
}
}
 
GetE('txtWidth').value = iWidth ? iWidth : GetAttribute( oImage, "width", '' ) ;
GetE('txtHeight').value = iHeight ? iHeight : GetAttribute( oImage, "height", '' ) ;
 
// Get Advances Attributes
GetE('txtAttId').value = oImage.id ;
GetE('cmbAttLangDir').value = oImage.dir ;
GetE('txtAttLangCode').value = oImage.lang ;
GetE('txtAttTitle').value = oImage.title ;
GetE('txtLongDesc').value = oImage.longDesc ;
 
if ( oEditor.FCKBrowserInfo.IsIE )
{
GetE('txtAttClasses').value = oImage.className || '' ;
GetE('txtAttStyle').value = oImage.style.cssText ;
}
else
{
GetE('txtAttClasses').value = oImage.getAttribute('class',2) || '' ;
GetE('txtAttStyle').value = oImage.getAttribute('style',2) ;
}
 
if ( oLink )
{
var sLinkUrl = oLink.getAttribute( '_fcksavedurl' ) ;
if ( sLinkUrl == null )
sLinkUrl = oLink.getAttribute('href',2) ;
 
GetE('txtLnkUrl').value = sLinkUrl ;
GetE('cmbLnkTarget').value = oLink.target ;
}
 
UpdatePreview() ;
}
 
//#### The OK button was hit.
function Ok()
{
if ( GetE('txtUrl').value.length == 0 )
{
dialog.SetSelectedTab( 'Info' ) ;
GetE('txtUrl').focus() ;
 
alert( FCKLang.DlgImgAlertUrl ) ;
 
return false ;
}
 
var bHasImage = ( oImage != null ) ;
 
if ( bHasImage && bImageButton && oImage.tagName == 'IMG' )
{
if ( confirm( 'Do you want to transform the selected image on a image button?' ) )
oImage = null ;
}
else if ( bHasImage && !bImageButton && oImage.tagName == 'INPUT' )
{
if ( confirm( 'Do you want to transform the selected image button on a simple image?' ) )
oImage = null ;
}
 
oEditor.FCKUndo.SaveUndoStep() ;
if ( !bHasImage )
{
if ( bImageButton )
{
oImage = FCK.EditorDocument.createElement( 'input' ) ;
oImage.type = 'image' ;
oImage = FCK.InsertElement( oImage ) ;
}
else
oImage = FCK.InsertElement( 'img' ) ;
}
 
UpdateImage( oImage ) ;
 
var sLnkUrl = GetE('txtLnkUrl').value.Trim() ;
 
if ( sLnkUrl.length == 0 )
{
if ( oLink )
FCK.ExecuteNamedCommand( 'Unlink' ) ;
}
else
{
if ( oLink ) // Modifying an existent link.
oLink.href = sLnkUrl ;
else // Creating a new link.
{
if ( !bHasImage )
oEditor.FCKSelection.SelectNode( oImage ) ;
 
oLink = oEditor.FCK.CreateLink( sLnkUrl )[0] ;
 
if ( !bHasImage )
{
oEditor.FCKSelection.SelectNode( oLink ) ;
oEditor.FCKSelection.Collapse( false ) ;
}
}
 
SetAttribute( oLink, '_fcksavedurl', sLnkUrl ) ;
SetAttribute( oLink, 'target', GetE('cmbLnkTarget').value ) ;
}
 
return true ;
}
 
function UpdateImage( e, skipId )
{
e.src = GetE('txtUrl').value ;
SetAttribute( e, "_fcksavedurl", GetE('txtUrl').value ) ;
SetAttribute( e, "alt" , GetE('txtAlt').value ) ;
SetAttribute( e, "width" , GetE('txtWidth').value ) ;
SetAttribute( e, "height", GetE('txtHeight').value ) ;
SetAttribute( e, "vspace", GetE('txtVSpace').value ) ;
SetAttribute( e, "hspace", GetE('txtHSpace').value ) ;
SetAttribute( e, "border", GetE('txtBorder').value ) ;
SetAttribute( e, "align" , GetE('cmbAlign').value ) ;
 
// Advances Attributes
 
if ( ! skipId )
SetAttribute( e, 'id', GetE('txtAttId').value ) ;
 
SetAttribute( e, 'dir' , GetE('cmbAttLangDir').value ) ;
SetAttribute( e, 'lang' , GetE('txtAttLangCode').value ) ;
SetAttribute( e, 'title' , GetE('txtAttTitle').value ) ;
SetAttribute( e, 'longDesc' , GetE('txtLongDesc').value ) ;
 
if ( oEditor.FCKBrowserInfo.IsIE )
{
e.className = GetE('txtAttClasses').value ;
e.style.cssText = GetE('txtAttStyle').value ;
}
else
{
SetAttribute( e, 'class' , GetE('txtAttClasses').value ) ;
SetAttribute( e, 'style', GetE('txtAttStyle').value ) ;
}
}
 
var eImgPreview ;
var eImgPreviewLink ;
 
function SetPreviewElements( imageElement, linkElement )
{
eImgPreview = imageElement ;
eImgPreviewLink = linkElement ;
 
UpdatePreview() ;
UpdateOriginal() ;
 
bPreviewInitialized = true ;
}
 
function UpdatePreview()
{
if ( !eImgPreview || !eImgPreviewLink )
return ;
 
if ( GetE('txtUrl').value.length == 0 )
eImgPreviewLink.style.display = 'none' ;
else
{
UpdateImage( eImgPreview, true ) ;
 
if ( GetE('txtLnkUrl').value.Trim().length > 0 )
eImgPreviewLink.href = 'javascript:void(null);' ;
else
SetAttribute( eImgPreviewLink, 'href', '' ) ;
 
eImgPreviewLink.style.display = '' ;
}
}
 
var bLockRatio = true ;
 
function SwitchLock( lockButton )
{
bLockRatio = !bLockRatio ;
lockButton.className = bLockRatio ? 'BtnLocked' : 'BtnUnlocked' ;
lockButton.title = bLockRatio ? 'Lock sizes' : 'Unlock sizes' ;
 
if ( bLockRatio )
{
if ( GetE('txtWidth').value.length > 0 )
OnSizeChanged( 'Width', GetE('txtWidth').value ) ;
else
OnSizeChanged( 'Height', GetE('txtHeight').value ) ;
}
}
 
// Fired when the width or height input texts change
function OnSizeChanged( dimension, value )
{
// Verifies if the aspect ration has to be maintained
if ( oImageOriginal && bLockRatio )
{
var e = dimension == 'Width' ? GetE('txtHeight') : GetE('txtWidth') ;
 
if ( value.length == 0 || isNaN( value ) )
{
e.value = '' ;
return ;
}
 
if ( dimension == 'Width' )
value = value == 0 ? 0 : Math.round( oImageOriginal.height * ( value / oImageOriginal.width ) ) ;
else
value = value == 0 ? 0 : Math.round( oImageOriginal.width * ( value / oImageOriginal.height ) ) ;
 
if ( !isNaN( value ) )
e.value = value ;
}
 
UpdatePreview() ;
}
 
// Fired when the Reset Size button is clicked
function ResetSizes()
{
if ( ! oImageOriginal ) return ;
if ( oEditor.FCKBrowserInfo.IsGecko && !oImageOriginal.complete )
{
setTimeout( ResetSizes, 50 ) ;
return ;
}
 
GetE('txtWidth').value = oImageOriginal.width ;
GetE('txtHeight').value = oImageOriginal.height ;
 
UpdatePreview() ;
}
 
function BrowseServer()
{
OpenServerBrowser(
'Image',
FCKConfig.ImageBrowserURL,
FCKConfig.ImageBrowserWindowWidth,
FCKConfig.ImageBrowserWindowHeight ) ;
}
 
function LnkBrowseServer()
{
OpenServerBrowser(
'Link',
FCKConfig.LinkBrowserURL,
FCKConfig.LinkBrowserWindowWidth,
FCKConfig.LinkBrowserWindowHeight ) ;
}
 
function OpenServerBrowser( type, url, width, height )
{
sActualBrowser = type ;
OpenFileBrowser( url, width, height ) ;
}
 
var sActualBrowser ;
 
function SetUrl( url, width, height, alt )
{
if ( sActualBrowser == 'Link' )
{
GetE('txtLnkUrl').value = url ;
UpdatePreview() ;
}
else
{
GetE('txtUrl').value = url ;
GetE('txtWidth').value = width ? width : '' ;
GetE('txtHeight').value = height ? height : '' ;
 
if ( alt )
GetE('txtAlt').value = alt;
 
UpdatePreview() ;
UpdateOriginal( true ) ;
}
 
dialog.SetSelectedTab( 'Info' ) ;
}
 
function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg )
{
// Remove animation
window.parent.Throbber.Hide() ;
GetE( 'divUpload' ).style.display = '' ;
 
switch ( errorNumber )
{
case 0 : // No errors
alert( 'Your file has been successfully uploaded' ) ;
break ;
case 1 : // Custom error
alert( customMsg ) ;
return ;
case 101 : // Custom warning
alert( customMsg ) ;
break ;
case 201 :
alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + fileName + '"' ) ;
break ;
case 202 :
alert( 'Invalid file type' ) ;
return ;
case 203 :
alert( "Security error. You probably don't have enough permissions to upload. Please check your server." ) ;
return ;
case 500 :
alert( 'The connector is disabled' ) ;
break ;
default :
alert( 'Error on file upload. Error number: ' + errorNumber ) ;
return ;
}
 
sActualBrowser = '' ;
SetUrl( fileUrl ) ;
GetE('frmUpload').reset() ;
}
 
var oUploadAllowedExtRegex = new RegExp( FCKConfig.ImageUploadAllowedExtensions, 'i' ) ;
var oUploadDeniedExtRegex = new RegExp( FCKConfig.ImageUploadDeniedExtensions, 'i' ) ;
 
function CheckUpload()
{
var sFile = GetE('txtUploadFile').value ;
 
if ( sFile.length == 0 )
{
alert( 'Please select a file to upload' ) ;
return false ;
}
 
if ( ( FCKConfig.ImageUploadAllowedExtensions.length > 0 && !oUploadAllowedExtRegex.test( sFile ) ) ||
( FCKConfig.ImageUploadDeniedExtensions.length > 0 && oUploadDeniedExtRegex.test( sFile ) ) )
{
OnUploadCompleted( 202 ) ;
return false ;
}
 
// Show animation
window.parent.Throbber.Show( 100 ) ;
GetE( 'divUpload' ).style.display = 'none' ;
 
return true ;
}
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_image.html
New file
0,0 → 1,258
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!--
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* Image Properties dialog window.
-->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Image Properties</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="robots" content="noindex, nofollow" />
<script src="common/fck_dialog_common.js" type="text/javascript"></script>
<script src="fck_image/fck_image.js" type="text/javascript"></script>
<script type="text/javascript">
 
document.write( FCKTools.GetStyleHtml( GetCommonDialogCss() ) ) ;
 
</script>
</head>
<body scroll="no" style="overflow: hidden">
<div id="divInfo">
<table cellspacing="1" cellpadding="1" border="0" width="100%" height="100%">
<tr>
<td>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
<tr>
<td width="100%">
<span fcklang="DlgImgURL">URL</span>
</td>
<td id="tdBrowse" style="display: none" nowrap="nowrap" rowspan="2">
&nbsp;
<input id="btnBrowse" onclick="BrowseServer();" type="button" value="Browse Server"
fcklang="DlgBtnBrowseServer" />
</td>
</tr>
<tr>
<td valign="top">
<input id="txtUrl" style="width: 100%" type="text" onblur="UpdatePreview();" />
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<span fcklang="DlgImgAlt">Short Description</span><br />
<input id="txtAlt" style="width: 100%" type="text" /><br />
</td>
</tr>
<tr height="100%">
<td valign="top">
<table cellspacing="0" cellpadding="0" width="100%" border="0" height="100%">
<tr>
<td valign="top">
<br />
<table cellspacing="0" cellpadding="0" border="0">
<tr>
<td nowrap="nowrap">
<span fcklang="DlgImgWidth">Width</span>&nbsp;</td>
<td>
<input type="text" size="3" id="txtWidth" onkeyup="OnSizeChanged('Width',this.value);" /></td>
<td rowspan="2">
<div id="btnLockSizes" class="BtnLocked" onmouseover="this.className = (bLockRatio ? 'BtnLocked' : 'BtnUnlocked' ) + ' BtnOver';"
onmouseout="this.className = (bLockRatio ? 'BtnLocked' : 'BtnUnlocked' );" title="Lock Sizes"
onclick="SwitchLock(this);">
</div>
</td>
<td rowspan="2">
<div id="btnResetSize" class="BtnReset" onmouseover="this.className='BtnReset BtnOver';"
onmouseout="this.className='BtnReset';" title="Reset Size" onclick="ResetSizes();">
</div>
</td>
</tr>
<tr>
<td nowrap="nowrap">
<span fcklang="DlgImgHeight">Height</span>&nbsp;</td>
<td>
<input type="text" size="3" id="txtHeight" onkeyup="OnSizeChanged('Height',this.value);" /></td>
</tr>
</table>
<br />
<table cellspacing="0" cellpadding="0" border="0">
<tr>
<td nowrap="nowrap">
<span fcklang="DlgImgBorder">Border</span>&nbsp;</td>
<td>
<input type="text" size="2" value="" id="txtBorder" onkeyup="UpdatePreview();" /></td>
</tr>
<tr>
<td nowrap="nowrap">
<span fcklang="DlgImgHSpace">HSpace</span>&nbsp;</td>
<td>
<input type="text" size="2" id="txtHSpace" onkeyup="UpdatePreview();" /></td>
</tr>
<tr>
<td nowrap="nowrap">
<span fcklang="DlgImgVSpace">VSpace</span>&nbsp;</td>
<td>
<input type="text" size="2" id="txtVSpace" onkeyup="UpdatePreview();" /></td>
</tr>
<tr>
<td nowrap="nowrap">
<span fcklang="DlgImgAlign">Align</span>&nbsp;</td>
<td>
<select id="cmbAlign" onchange="UpdatePreview();">
<option value="" selected="selected"></option>
<option fcklang="DlgImgAlignLeft" value="left">Left</option>
<option fcklang="DlgImgAlignAbsBottom" value="absBottom">Abs Bottom</option>
<option fcklang="DlgImgAlignAbsMiddle" value="absMiddle">Abs Middle</option>
<option fcklang="DlgImgAlignBaseline" value="baseline">Baseline</option>
<option fcklang="DlgImgAlignBottom" value="bottom">Bottom</option>
<option fcklang="DlgImgAlignMiddle" value="middle">Middle</option>
<option fcklang="DlgImgAlignRight" value="right">Right</option>
<option fcklang="DlgImgAlignTextTop" value="textTop">Text Top</option>
<option fcklang="DlgImgAlignTop" value="top">Top</option>
</select>
</td>
</tr>
</table>
</td>
<td>
&nbsp;&nbsp;&nbsp;</td>
<td width="100%" valign="top">
<table cellpadding="0" cellspacing="0" width="100%" style="table-layout: fixed">
<tr>
<td>
<span fcklang="DlgImgPreview">Preview</span></td>
</tr>
<tr>
<td valign="top">
<iframe class="ImagePreviewArea" src="fck_image/fck_image_preview.html" frameborder="0"
marginheight="0" marginwidth="0"></iframe>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<div id="divUpload" style="display: none">
<form id="frmUpload" method="post" target="UploadWindow" enctype="multipart/form-data"
action="" onsubmit="return CheckUpload();">
<span fcklang="DlgLnkUpload">Upload</span><br />
<input id="txtUploadFile" style="width: 100%" type="file" size="40" name="NewFile" /><br />
<br />
<input id="btnUpload" type="submit" value="Send it to the Server" fcklang="DlgLnkBtnUpload" />
<script type="text/javascript">
document.write( '<iframe name="UploadWindow" style="display: none" src="' + FCKTools.GetVoidUrl() + '"><\/iframe>' ) ;
</script>
</form>
</div>
<div id="divLink" style="display: none">
<table cellspacing="1" cellpadding="1" border="0" width="100%">
<tr>
<td>
<div>
<span fcklang="DlgLnkURL">URL</span><br />
<input id="txtLnkUrl" style="width: 100%" type="text" onblur="UpdatePreview();" />
</div>
<div id="divLnkBrowseServer" align="right">
<input type="button" value="Browse Server" fcklang="DlgBtnBrowseServer" onclick="LnkBrowseServer();" />
</div>
<div>
<span fcklang="DlgLnkTarget">Target</span><br />
<select id="cmbLnkTarget">
<option value="" fcklang="DlgGenNotSet" selected="selected">&lt;not set&gt;</option>
<option value="_blank" fcklang="DlgLnkTargetBlank">New Window (_blank)</option>
<option value="_top" fcklang="DlgLnkTargetTop">Topmost Window (_top)</option>
<option value="_self" fcklang="DlgLnkTargetSelf">Same Window (_self)</option>
<option value="_parent" fcklang="DlgLnkTargetParent">Parent Window (_parent)</option>
</select>
</div>
</td>
</tr>
</table>
</div>
<div id="divAdvanced" style="display: none">
<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
<tr>
<td valign="top" width="50%">
<span fcklang="DlgGenId">Id</span><br />
<input id="txtAttId" style="width: 100%" type="text" />
</td>
<td width="1">
&nbsp;&nbsp;</td>
<td valign="top">
<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
<tr>
<td width="60%">
<span fcklang="DlgGenLangDir">Language Direction</span><br />
<select id="cmbAttLangDir" style="width: 100%">
<option value="" fcklang="DlgGenNotSet" selected="selected">&lt;not set&gt;</option>
<option value="ltr" fcklang="DlgGenLangDirLtr">Left to Right (LTR)</option>
<option value="rtl" fcklang="DlgGenLangDirRtl">Right to Left (RTL)</option>
</select>
</td>
<td width="1%">
&nbsp;&nbsp;</td>
<td nowrap="nowrap">
<span fcklang="DlgGenLangCode">Language Code</span><br />
<input id="txtAttLangCode" style="width: 100%" type="text" />&nbsp;
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="3">
&nbsp;</td>
</tr>
<tr>
<td colspan="3">
<span fcklang="DlgGenLongDescr">Long Description URL</span><br />
<input id="txtLongDesc" style="width: 100%" type="text" />
</td>
</tr>
<tr>
<td colspan="3">
&nbsp;</td>
</tr>
<tr>
<td valign="top">
<span fcklang="DlgGenClass">Stylesheet Classes</span><br />
<input id="txtAttClasses" style="width: 100%" type="text" />
</td>
<td>
</td>
<td valign="top">
&nbsp;<span fcklang="DlgGenTitle">Advisory Title</span><br />
<input id="txtAttTitle" style="width: 100%" type="text" />
</td>
</tr>
</table>
<span fcklang="DlgGenStyle">Style</span><br />
<input id="txtAttStyle" style="width: 100%" type="text" />
</div>
</body>
</html>
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_tablecell.html
New file
0,0 → 1,257
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<!--
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* Cell properties dialog window.
-->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Table Cell Properties</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="robots" content="noindex, nofollow" />
<script src="common/fck_dialog_common.js" type="text/javascript"></script>
<script type="text/javascript">
 
var dialog = window.parent ;
var oEditor = dialog.InnerDialogLoaded() ;
 
// Gets the document DOM
var oDOM = oEditor.FCK.EditorDocument ;
 
// Array of selected Cells
var aCells = oEditor.FCKTableHandler.GetSelectedCells() ;
 
window.onload = function()
{
// First of all, translate the dialog box texts
oEditor.FCKLanguageManager.TranslatePage( document ) ;
 
SetStartupValue() ;
 
dialog.SetOkButton( true ) ;
dialog.SetAutoSize( true ) ;
SelectField( 'txtWidth' ) ;
}
 
function SetStartupValue()
{
if ( aCells.length > 0 )
{
var oCell = aCells[0] ;
var iWidth = GetAttribute( oCell, 'width' ) ;
 
if ( iWidth.indexOf && iWidth.indexOf( '%' ) >= 0 )
{
iWidth = iWidth.substr( 0, iWidth.length - 1 ) ;
GetE('selWidthType').value = 'percent' ;
}
 
if ( oCell.attributes['noWrap'] != null && oCell.attributes['noWrap'].specified )
GetE('selWordWrap').value = !oCell.noWrap ;
 
GetE('txtWidth').value = iWidth ;
GetE('txtHeight').value = GetAttribute( oCell, 'height' ) ;
GetE('selHAlign').value = GetAttribute( oCell, 'align' ) ;
GetE('selVAlign').value = GetAttribute( oCell, 'vAlign' ) ;
GetE('txtRowSpan').value = GetAttribute( oCell, 'rowSpan' ) ;
GetE('txtCollSpan').value = GetAttribute( oCell, 'colSpan' ) ;
GetE('txtBackColor').value = GetAttribute( oCell, 'bgColor' ) ;
GetE('txtBorderColor').value = GetAttribute( oCell, 'borderColor' ) ;
// GetE('cmbFontStyle').value = oCell.className ;
}
}
 
// Fired when the user press the OK button
function Ok()
{
for( i = 0 ; i < aCells.length ; i++ )
{
if ( GetE('txtWidth').value.length > 0 )
aCells[i].width = GetE('txtWidth').value + ( GetE('selWidthType').value == 'percent' ? '%' : '') ;
else
aCells[i].removeAttribute( 'width', 0 ) ;
 
if ( GetE('selWordWrap').value == 'false' )
SetAttribute( aCells[i], 'noWrap', 'nowrap' ) ;
else
aCells[i].removeAttribute( 'noWrap' ) ;
 
SetAttribute( aCells[i], 'height' , GetE('txtHeight').value ) ;
SetAttribute( aCells[i], 'align' , GetE('selHAlign').value ) ;
SetAttribute( aCells[i], 'vAlign' , GetE('selVAlign').value ) ;
SetAttribute( aCells[i], 'rowSpan' , GetE('txtRowSpan').value ) ;
SetAttribute( aCells[i], 'colSpan' , GetE('txtCollSpan').value ) ;
SetAttribute( aCells[i], 'bgColor' , GetE('txtBackColor').value ) ;
SetAttribute( aCells[i], 'borderColor' , GetE('txtBorderColor').value ) ;
// SetAttribute( aCells[i], 'className' , GetE('cmbFontStyle').value ) ;
}
 
return true ;
}
 
function SelectBackColor( color )
{
if ( color && color.length > 0 )
GetE('txtBackColor').value = color ;
}
 
function SelectBorderColor( color )
{
if ( color && color.length > 0 )
GetE('txtBorderColor').value = color ;
}
 
function SelectColor( wich )
{
oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', oEditor.FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 410, 320, wich == 'Back' ? SelectBackColor : SelectBorderColor, window ) ;
}
 
</script>
</head>
<body scroll="no" style="overflow: hidden">
<table cellspacing="0" cellpadding="0" width="100%" border="0" height="100%">
<tr>
<td>
<table cellspacing="1" cellpadding="1" width="100%" border="0">
<tr>
<td>
<table cellspacing="0" cellpadding="0" border="0">
<tr>
<td nowrap="nowrap">
<span fcklang="DlgCellWidth">Width</span>:</td>
<td>
&nbsp;<input onkeypress="return IsDigit(event);" id="txtWidth" type="text" maxlength="4"
size="3" name="txtWidth" />&nbsp;<select id="selWidthType" name="selWidthType">
<option fcklang="DlgCellWidthPx" value="pixels" selected="selected">pixels</option>
<option fcklang="DlgCellWidthPc" value="percent">percent</option>
</select></td>
</tr>
<tr>
<td nowrap="nowrap">
<span fcklang="DlgCellHeight">Height</span>:</td>
<td>
&nbsp;<input id="txtHeight" type="text" maxlength="4" size="3" name="txtHeight" onkeypress="return IsDigit(event);" />&nbsp;<span
fcklang="DlgCellWidthPx">pixels</span></td>
</tr>
<tr>
<td>
&nbsp;</td>
<td>
&nbsp;</td>
</tr>
<tr>
<td nowrap="nowrap">
<span fcklang="DlgCellWordWrap">Word Wrap</span>:</td>
<td>
&nbsp;<select id="selWordWrap" name="selAlignment">
<option fcklang="DlgCellWordWrapYes" value="true" selected="selected">Yes</option>
<option fcklang="DlgCellWordWrapNo" value="false">No</option>
</select></td>
</tr>
<tr>
<td>
&nbsp;</td>
<td>
&nbsp;</td>
</tr>
<tr>
<td nowrap="nowrap">
<span fcklang="DlgCellHorAlign">Horizontal Alignment</span>:</td>
<td>
&nbsp;<select id="selHAlign" name="selAlignment">
<option fcklang="DlgCellHorAlignNotSet" value="" selected>&lt;Not set&gt;</option>
<option fcklang="DlgCellHorAlignLeft" value="left">Left</option>
<option fcklang="DlgCellHorAlignCenter" value="center">Center</option>
<option fcklang="DlgCellHorAlignRight" value="right">Right</option>
</select></td>
</tr>
<tr>
<td nowrap="nowrap">
<span fcklang="DlgCellVerAlign">Vertical Alignment</span>:</td>
<td>
&nbsp;<select id="selVAlign" name="selAlignment">
<option fcklang="DlgCellVerAlignNotSet" value="" selected>&lt;Not set&gt;</option>
<option fcklang="DlgCellVerAlignTop" value="top">Top</option>
<option fcklang="DlgCellVerAlignMiddle" value="middle">Middle</option>
<option fcklang="DlgCellVerAlignBottom" value="bottom">Bottom</option>
<option fcklang="DlgCellVerAlignBaseline" value="baseline">Baseline</option>
</select></td>
</tr>
</table>
</td>
<td>
&nbsp;&nbsp;&nbsp;</td>
<td align="right">
<table cellspacing="0" cellpadding="0" border="0">
<tr>
<td nowrap="nowrap">
<span fcklang="DlgCellRowSpan">Rows Span</span>:</td>
<td>
&nbsp;
<input onkeypress="return IsDigit(event);" id="txtRowSpan" type="text" maxlength="3" size="2"
name="txtRows"></td>
<td>
</td>
</tr>
<tr>
<td nowrap="nowrap">
<span fcklang="DlgCellCollSpan">Columns Span</span>:</td>
<td>
&nbsp;
<input onkeypress="return IsDigit(event);" id="txtCollSpan" type="text" maxlength="2"
size="2" name="txtColumns"></td>
<td>
</td>
</tr>
<tr>
<td>
&nbsp;</td>
<td>
&nbsp;</td>
<td>
&nbsp;</td>
</tr>
<tr>
<td nowrap="nowrap">
<span fcklang="DlgCellBackColor">Background Color</span>:</td>
<td>
&nbsp;<input id="txtBackColor" type="text" size="8" name="txtCellSpacing"></td>
<td>
&nbsp;
<input type="button" fcklang="DlgCellBtnSelect" value="Select..." onclick="SelectColor( 'Back' )"></td>
</tr>
<tr>
<td nowrap="nowrap">
<span fcklang="DlgCellBorderColor">Border Color</span>:</td>
<td>
&nbsp;<input id="txtBorderColor" type="text" size="8" name="txtCellPadding" /></td>
<td>
&nbsp;
<input type="button" fcklang="DlgCellBtnSelect" value="Select..." onclick="SelectColor( 'Border' )" /></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_table.html
New file
0,0 → 1,298
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<!--
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* Table dialog window.
-->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Table Properties</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="robots" content="noindex, nofollow" />
<script src="common/fck_dialog_common.js" type="text/javascript"></script>
<script type="text/javascript">
 
var dialog = window.parent ;
var oEditor = dialog.InnerDialogLoaded() ;
var dialogArguments = dialog.Args() ;
 
// Gets the document DOM
var oDOM = oEditor.FCK.EditorDocument ;
 
// Gets the table if there is one selected.
var table ;
var e = dialog.Selection.GetSelectedElement() ;
 
if ( ( !e && document.location.search.substr(1) == 'Parent' ) || ( e && e.tagName != 'TABLE' ) )
e = oEditor.FCKSelection.MoveToAncestorNode( 'TABLE' ) ;
 
if ( e && e.tagName == "TABLE" )
table = e ;
 
// Fired when the window loading process is finished. It sets the fields with the
// actual values if a table is selected in the editor.
window.onload = function()
{
// First of all, translate the dialog box texts
oEditor.FCKLanguageManager.TranslatePage(document) ;
 
if (table)
{
document.getElementById('txtRows').value = table.rows.length ;
document.getElementById('txtColumns').value = table.rows[0].cells.length ;
 
// Gets the value from the Width or the Style attribute
var iWidth = (table.style.width ? table.style.width : table.width ) ;
var iHeight = (table.style.height ? table.style.height : table.height ) ;
 
if (iWidth.indexOf('%') >= 0) // Percentual = %
{
iWidth = parseInt( iWidth.substr(0,iWidth.length - 1), 10 ) ;
document.getElementById('selWidthType').value = "percent" ;
}
else if (iWidth.indexOf('px') >= 0) // Style Pixel = px
{ //
iWidth = iWidth.substr(0,iWidth.length - 2);
document.getElementById('selWidthType').value = "pixels" ;
}
 
if (iHeight && iHeight.indexOf('px') >= 0) // Style Pixel = px
iHeight = iHeight.substr(0,iHeight.length - 2);
 
document.getElementById('txtWidth').value = iWidth || '' ;
document.getElementById('txtHeight').value = iHeight || '' ;
document.getElementById('txtBorder').value = GetAttribute( table, 'border', '' ) ;
document.getElementById('selAlignment').value = GetAttribute( table, 'align', '' ) ;
document.getElementById('txtCellPadding').value = GetAttribute( table, 'cellPadding', '' ) ;
document.getElementById('txtCellSpacing').value = GetAttribute( table, 'cellSpacing', '' ) ;
document.getElementById('txtSummary').value = GetAttribute( table, 'summary', '' ) ;
// document.getElementById('cmbFontStyle').value = table.className ;
 
var eCaption = oEditor.FCKDomTools.GetFirstChild( table, 'CAPTION' ) ;
if ( eCaption ) document.getElementById('txtCaption').value = eCaption.innerHTML ;
 
document.getElementById('txtRows').disabled = true ;
document.getElementById('txtColumns').disabled = true ;
SelectField( 'txtWidth' ) ;
}
else
SelectField( 'txtRows' ) ;
 
dialog.SetOkButton( true ) ;
dialog.SetAutoSize( true ) ;
}
 
// Fired when the user press the OK button
function Ok()
{
var bExists = ( table != null ) ;
 
if ( ! bExists )
table = oEditor.FCK.EditorDocument.createElement( "TABLE" ) ;
 
// Removes the Width and Height styles
if ( bExists && table.style.width ) table.style.width = null ; //.removeAttribute("width") ;
if ( bExists && table.style.height ) table.style.height = null ; //.removeAttribute("height") ;
 
var sWidth = GetE('txtWidth').value ;
if ( sWidth.length > 0 && GetE('selWidthType').value == 'percent' )
sWidth += '%' ;
 
SetAttribute( table, 'width' , sWidth ) ;
SetAttribute( table, 'height' , GetE('txtHeight').value ) ;
SetAttribute( table, 'border' , GetE('txtBorder').value ) ;
SetAttribute( table, 'align' , GetE('selAlignment').value ) ;
SetAttribute( table, 'cellPadding' , GetE('txtCellPadding').value ) ;
SetAttribute( table, 'cellSpacing' , GetE('txtCellSpacing').value ) ;
SetAttribute( table, 'summary' , GetE('txtSummary').value ) ;
 
var eCaption = oEditor.FCKDomTools.GetFirstChild( table, 'CAPTION' ) ;
 
if ( document.getElementById('txtCaption').value != '')
{
if ( !eCaption )
{
eCaption = oEditor.FCK.EditorDocument.createElement( 'CAPTION' ) ;
table.insertBefore( eCaption, table.firstChild ) ;
}
 
eCaption.innerHTML = document.getElementById('txtCaption').value ;
}
else if ( bExists && eCaption )
{
// TODO: It causes an IE internal error if using removeChild or
// table.deleteCaption() (see #505).
if ( oEditor.FCKBrowserInfo.IsIE )
eCaption.innerHTML = '' ;
else
eCaption.parentNode.removeChild( eCaption ) ;
}
 
if (! bExists)
{
var iRows = document.getElementById('txtRows').value ;
var iCols = document.getElementById('txtColumns').value ;
 
for ( var r = 0 ; r < iRows ; r++ )
{
var oRow = table.insertRow(-1) ;
for ( var c = 0 ; c < iCols ; c++ )
{
var oCell = oRow.insertCell(-1) ;
if ( oEditor.FCKBrowserInfo.IsGeckoLike )
oEditor.FCKTools.AppendBogusBr( oCell ) ;
}
}
 
oEditor.FCKUndo.SaveUndoStep() ;
 
oEditor.FCK.InsertElement( table ) ;
}
 
return true ;
}
 
</script>
</head>
<body style="overflow: hidden">
<table id="otable" cellspacing="0" cellpadding="0" width="100%" border="0" style="height: 100%">
<tr>
<td>
<table cellspacing="1" cellpadding="1" width="100%" border="0">
<tr>
<td valign="top">
<table cellspacing="0" cellpadding="0" border="0">
<tr>
<td>
<span fcklang="DlgTableRows">Rows</span>:</td>
<td>
&nbsp;<input id="txtRows" type="text" maxlength="3" size="2" value="3" name="txtRows"
onkeypress="return IsDigit(event);" /></td>
</tr>
<tr>
<td>
<span fcklang="DlgTableColumns">Columns</span>:</td>
<td>
&nbsp;<input id="txtColumns" type="text" maxlength="2" size="2" value="2" name="txtColumns"
onkeypress="return IsDigit(event);" /></td>
</tr>
<tr>
<td>
&nbsp;</td>
<td>
&nbsp;</td>
</tr>
<tr>
<td>
<span fcklang="DlgTableBorder">Border size</span>:</td>
<td>
&nbsp;<input id="txtBorder" type="text" maxlength="2" size="2" value="1" name="txtBorder"
onkeypress="return IsDigit(event);" /></td>
</tr>
<tr>
<td>
<span fcklang="DlgTableAlign">Alignment</span>:</td>
<td>
&nbsp;<select id="selAlignment" name="selAlignment">
<option fcklang="DlgTableAlignNotSet" value="" selected="selected">&lt;Not set&gt;</option>
<option fcklang="DlgTableAlignLeft" value="left">Left</option>
<option fcklang="DlgTableAlignCenter" value="center">Center</option>
<option fcklang="DlgTableAlignRight" value="right">Right</option>
</select></td>
</tr>
</table>
</td>
<td>
&nbsp;&nbsp;&nbsp;</td>
<td align="right" valign="top">
<table cellspacing="0" cellpadding="0" border="0">
<tr>
<td>
<span fcklang="DlgTableWidth">Width</span>:</td>
<td>
&nbsp;<input id="txtWidth" type="text" maxlength="4" size="3" value="200" name="txtWidth"
onkeypress="return IsDigit(event);" /></td>
<td>
&nbsp;<select id="selWidthType" name="selWidthType">
<option fcklang="DlgTableWidthPx" value="pixels" selected="selected">pixels</option>
<option fcklang="DlgTableWidthPc" value="percent">percent</option>
</select></td>
</tr>
<tr>
<td>
<span fcklang="DlgTableHeight">Height</span>:</td>
<td>
&nbsp;<input id="txtHeight" type="text" maxlength="4" size="3" name="txtHeight" onkeypress="return IsDigit(event);" /></td>
<td>
&nbsp;<span fcklang="DlgTableWidthPx">pixels</span></td>
</tr>
<tr>
<td>
&nbsp;</td>
<td>
&nbsp;</td>
<td>
&nbsp;</td>
</tr>
<tr>
<td nowrap="nowrap">
<span fcklang="DlgTableCellSpace">Cell spacing</span>:</td>
<td>
&nbsp;<input id="txtCellSpacing" type="text" maxlength="2" size="2" value="1" name="txtCellSpacing"
onkeypress="return IsDigit(event);" /></td>
<td>
&nbsp;</td>
</tr>
<tr>
<td nowrap="nowrap">
<span fcklang="DlgTableCellPad">Cell padding</span>:</td>
<td>
&nbsp;<input id="txtCellPadding" type="text" maxlength="2" size="2" value="1" name="txtCellPadding"
onkeypress="return IsDigit(event);" /></td>
<td>
&nbsp;</td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing="0" cellpadding="0" width="100%" border="0">
<tr>
<td nowrap="nowrap">
<span fcklang="DlgTableCaption">Caption</span>:&nbsp;</td>
<td>
&nbsp;</td>
<td width="100%" nowrap="nowrap">
<input id="txtCaption" type="text" style="width: 100%" /></td>
</tr>
<tr>
<td nowrap="nowrap">
<span fcklang="DlgTableSummary">Summary</span>:&nbsp;</td>
<td>
&nbsp;</td>
<td width="100%" nowrap="nowrap">
<input id="txtSummary" type="text" style="width: 100%" /></td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_textfield.html
New file
0,0 → 1,136
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<!--
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* Text field dialog window.
-->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta content="noindex, nofollow" name="robots" />
<script src="common/fck_dialog_common.js" type="text/javascript"></script>
<script type="text/javascript">
 
var dialog = window.parent ;
var oEditor = dialog.InnerDialogLoaded() ;
 
// Gets the document DOM
var oDOM = oEditor.FCK.EditorDocument ;
 
var oActiveEl = dialog.Selection.GetSelectedElement() ;
 
window.onload = function()
{
// First of all, translate the dialog box texts
oEditor.FCKLanguageManager.TranslatePage(document) ;
 
if ( oActiveEl && oActiveEl.tagName == 'INPUT' && ( oActiveEl.type == 'text' || oActiveEl.type == 'password' ) )
{
GetE('txtName').value = oActiveEl.name ;
GetE('txtValue').value = oActiveEl.value ;
GetE('txtSize').value = GetAttribute( oActiveEl, 'size' ) ;
GetE('txtMax').value = GetAttribute( oActiveEl, 'maxLength' ) ;
GetE('txtType').value = oActiveEl.type ;
}
else
oActiveEl = null ;
 
dialog.SetOkButton( true ) ;
dialog.SetAutoSize( true ) ;
SelectField( 'txtName' ) ;
}
 
function Ok()
{
if ( isNaN( GetE('txtMax').value ) || GetE('txtMax').value < 0 )
{
alert( "Maximum characters must be a positive number." ) ;
GetE('txtMax').focus() ;
return false ;
}
else if( isNaN( GetE('txtSize').value ) || GetE('txtSize').value < 0 )
{
alert( "Width must be a positive number." ) ;
GetE('txtSize').focus() ;
return false ;
}
 
oEditor.FCKUndo.SaveUndoStep() ;
 
oActiveEl = CreateNamedElement( oEditor, oActiveEl, 'INPUT', {name: GetE('txtName').value, type: GetE('txtType').value } ) ;
 
SetAttribute( oActiveEl, 'value' , GetE('txtValue').value ) ;
SetAttribute( oActiveEl, 'size' , GetE('txtSize').value ) ;
SetAttribute( oActiveEl, 'maxlength', GetE('txtMax').value ) ;
 
return true ;
}
 
</script>
</head>
<body style="overflow: hidden">
<table width="100%" style="height: 100%">
<tr>
<td align="center">
<table cellspacing="0" cellpadding="0" border="0">
<tr>
<td>
<span fcklang="DlgTextName">Name</span><br />
<input id="txtName" type="text" size="20" />
</td>
<td>
</td>
<td>
<span fcklang="DlgTextValue">Value</span><br />
<input id="txtValue" type="text" size="25" />
</td>
</tr>
<tr>
<td>
<span fcklang="DlgTextCharWidth">Character Width</span><br />
<input id="txtSize" type="text" size="5" />
</td>
<td>
</td>
<td>
<span fcklang="DlgTextMaxChars">Maximum Characters</span><br />
<input id="txtMax" type="text" size="5" />
</td>
</tr>
<tr>
<td>
<span fcklang="DlgTextType">Type</span><br />
<select id="txtType">
<option value="text" selected="selected" fcklang="DlgTextTypeText">Text</option>
<option value="password" fcklang="DlgTextTypePass">Password</option>
</select>
</td>
<td>
&nbsp;</td>
<td>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_docprops.html
New file
0,0 → 1,600
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!--
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* Link dialog window.
-->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta content="noindex, nofollow" name="robots" />
<script src="common/fck_dialog_common.js" type="text/javascript"></script>
<script type="text/javascript">
 
var oEditor = window.parent.InnerDialogLoaded() ;
var FCK = oEditor.FCK ;
var FCKLang = oEditor.FCKLang ;
var FCKConfig = oEditor.FCKConfig ;
 
//#### Dialog Tabs
 
// Set the dialog tabs.
window.parent.AddTab( 'General' , FCKLang.DlgDocGeneralTab ) ;
window.parent.AddTab( 'Background' , FCKLang.DlgDocBackTab ) ;
window.parent.AddTab( 'Colors' , FCKLang.DlgDocColorsTab ) ;
window.parent.AddTab( 'Meta' , FCKLang.DlgDocMetaTab ) ;
 
// Function called when a dialog tag is selected.
function OnDialogTabChange( tabCode )
{
ShowE( 'divGeneral' , ( tabCode == 'General' ) ) ;
ShowE( 'divBackground' , ( tabCode == 'Background' ) ) ;
ShowE( 'divColors' , ( tabCode == 'Colors' ) ) ;
ShowE( 'divMeta' , ( tabCode == 'Meta' ) ) ;
 
ShowE( 'ePreview' , ( tabCode == 'Background' || tabCode == 'Colors' ) ) ;
}
 
//#### Get Base elements from the document: BEGIN
 
// The HTML element of the document.
var oHTML = FCK.EditorDocument.getElementsByTagName('html')[0] ;
 
// The HEAD element of the document.
var oHead = oHTML.getElementsByTagName('head')[0] ;
 
var oBody = FCK.EditorDocument.body ;
 
// This object contains all META tags defined in the document.
var oMetaTags = new Object() ;
 
// Get all META tags defined in the document.
AppendMetaCollection( oMetaTags, oHead.getElementsByTagName('meta') ) ;
AppendMetaCollection( oMetaTags, oHead.getElementsByTagName('fck:meta') ) ;
 
function AppendMetaCollection( targetObject, metaCollection )
{
// Loop throw all METAs and put it in the HashTable.
for ( var i = 0 ; i < metaCollection.length ; i++ )
{
// Try to get the "name" attribute.
var sName = GetAttribute( metaCollection[i], 'name', GetAttribute( metaCollection[i], '___fcktoreplace:name', '' ) ) ;
 
// If no "name", try with the "http-equiv" attribute.
if ( sName.length == 0 )
{
if ( oEditor.FCKBrowserInfo.IsIE )
{
// Get the http-equiv value from the outerHTML.
var oHttpEquivMatch = metaCollection[i].outerHTML.match( oEditor.FCKRegexLib.MetaHttpEquiv ) ;
if ( oHttpEquivMatch )
sName = oHttpEquivMatch[1] ;
}
else
sName = GetAttribute( metaCollection[i], 'http-equiv', '' ) ;
}
 
if ( sName.length > 0 )
targetObject[ sName.toLowerCase() ] = metaCollection[i] ;
}
}
 
//#### END
 
// Set a META tag in the document.
function SetMetadata( name, content, isHttp )
{
if ( content.length == 0 )
{
RemoveMetadata( name ) ;
return ;
}
 
var oMeta = oMetaTags[ name.toLowerCase() ] ;
 
if ( !oMeta )
{
oMeta = oHead.appendChild( FCK.EditorDocument.createElement('META') ) ;
 
if ( isHttp )
SetAttribute( oMeta, 'http-equiv', name ) ;
else
{
// On IE, it is not possible to set the "name" attribute of the META tag.
// So a temporary attribute is used and it is replaced when getting the
// editor's HTML/XHTML value. This is sad, I know :(
if ( oEditor.FCKBrowserInfo.IsIE )
SetAttribute( oMeta, '___fcktoreplace:name', name ) ;
else
SetAttribute( oMeta, 'name', name ) ;
}
 
oMetaTags[ name.toLowerCase() ] = oMeta ;
}
 
SetAttribute( oMeta, 'content', content ) ;
// oMeta.content = content ;
}
 
function RemoveMetadata( name )
{
var oMeta = oMetaTags[ name.toLowerCase() ] ;
 
if ( oMeta && oMeta != null )
{
oMeta.parentNode.removeChild( oMeta ) ;
oMetaTags[ name.toLowerCase() ] = null ;
}
}
 
function GetMetadata( name )
{
var oMeta = oMetaTags[ name.toLowerCase() ] ;
 
if ( oMeta && oMeta != null )
return oMeta.getAttribute( 'content', 2 ) ;
else
return '' ;
}
 
window.onload = function ()
{
// Show/Hide the "Browse Server" button.
GetE('tdBrowse').style.display = oEditor.FCKConfig.ImageBrowser ? "" : "none";
 
// First of all, translate the dialog box texts
oEditor.FCKLanguageManager.TranslatePage( document ) ;
 
FillFields() ;
 
UpdatePreview() ;
 
// Show the "Ok" button.
window.parent.SetOkButton( true ) ;
 
window.parent.SetAutoSize( true ) ;
}
 
function FillFields()
{
// ### General Info
GetE('txtPageTitle').value = FCK.EditorDocument.title ;
 
GetE('selDirection').value = GetAttribute( oHTML, 'dir', '' ) ;
GetE('txtLang').value = GetAttribute( oHTML, 'xml:lang', GetAttribute( oHTML, 'lang', '' ) ) ; // "xml:lang" takes precedence to "lang".
 
// Character Set Encoding.
// if ( oEditor.FCKBrowserInfo.IsIE )
// var sCharSet = FCK.EditorDocument.charset ;
// else
var sCharSet = GetMetadata( 'Content-Type' ) ;
 
if ( sCharSet != null && sCharSet.length > 0 )
{
// if ( !oEditor.FCKBrowserInfo.IsIE )
sCharSet = sCharSet.match( /[^=]*$/ ) ;
 
GetE('selCharSet').value = sCharSet ;
 
if ( GetE('selCharSet').selectedIndex == -1 )
{
GetE('selCharSet').value = '...' ;
GetE('txtCustomCharSet').value = sCharSet ;
 
CheckOther( GetE('selCharSet'), 'txtCustomCharSet' ) ;
}
}
 
// Document Type.
if ( FCK.DocTypeDeclaration && FCK.DocTypeDeclaration.length > 0 )
{
GetE('selDocType').value = FCK.DocTypeDeclaration ;
 
if ( GetE('selDocType').selectedIndex == -1 )
{
GetE('selDocType').value = '...' ;
GetE('txtDocType').value = FCK.DocTypeDeclaration ;
 
CheckOther( GetE('selDocType'), 'txtDocType' ) ;
}
}
 
// Document Type.
GetE('chkIncXHTMLDecl').checked = ( FCK.XmlDeclaration && FCK.XmlDeclaration.length > 0 ) ;
 
// ### Background
GetE('txtBackColor').value = GetAttribute( oBody, 'bgColor' , '' ) ;
GetE('txtBackImage').value = GetAttribute( oBody, 'background' , '' ) ;
GetE('chkBackNoScroll').checked = ( GetAttribute( oBody, 'bgProperties', '' ).toLowerCase() == 'fixed' ) ;
 
// ### Colors
GetE('txtColorText').value = GetAttribute( oBody, 'text' , '' ) ;
GetE('txtColorLink').value = GetAttribute( oBody, 'link' , '' ) ;
GetE('txtColorVisited').value = GetAttribute( oBody, 'vLink' , '' ) ;
GetE('txtColorActive').value = GetAttribute( oBody, 'aLink' , '' ) ;
 
// ### Margins
GetE('txtMarginTop').value = GetAttribute( oBody, 'topMargin' , '' ) ;
GetE('txtMarginLeft').value = GetAttribute( oBody, 'leftMargin' , '' ) ;
GetE('txtMarginRight').value = GetAttribute( oBody, 'rightMargin' , '' ) ;
GetE('txtMarginBottom').value = GetAttribute( oBody, 'bottomMargin' , '' ) ;
 
// ### Meta Data
GetE('txtMetaKeywords').value = GetMetadata( 'keywords' ) ;
GetE('txtMetaDescription').value = GetMetadata( 'description' ) ;
GetE('txtMetaAuthor').value = GetMetadata( 'author' ) ;
GetE('txtMetaCopyright').value = GetMetadata( 'copyright' ) ;
}
 
// Called when the "Ok" button is clicked.
function Ok()
{
// ### General Info
FCK.EditorDocument.title = GetE('txtPageTitle').value ;
 
var oHTML = FCK.EditorDocument.getElementsByTagName('html')[0] ;
 
SetAttribute( oHTML, 'dir' , GetE('selDirection').value ) ;
SetAttribute( oHTML, 'lang' , GetE('txtLang').value ) ;
SetAttribute( oHTML, 'xml:lang' , GetE('txtLang').value ) ;
 
// Character Set Enconding.
var sCharSet = GetE('selCharSet').value ;
if ( sCharSet == '...' )
sCharSet = GetE('txtCustomCharSet').value ;
 
if ( sCharSet.length > 0 )
sCharSet = 'text/html; charset=' + sCharSet ;
 
// if ( oEditor.FCKBrowserInfo.IsIE )
// FCK.EditorDocument.charset = sCharSet ;
// else
SetMetadata( 'Content-Type', sCharSet, true ) ;
 
// Document Type
var sDocType = GetE('selDocType').value ;
if ( sDocType == '...' )
sDocType = GetE('txtDocType').value ;
 
FCK.DocTypeDeclaration = sDocType ;
 
// XHTML Declarations.
if ( GetE('chkIncXHTMLDecl').checked )
{
if ( sCharSet.length == 0 )
sCharSet = 'utf-8' ;
 
FCK.XmlDeclaration = '<' + '?xml version="1.0" encoding="' + sCharSet + '"?>' ;
 
SetAttribute( oHTML, 'xmlns', 'http://www.w3.org/1999/xhtml' ) ;
}
else
{
FCK.XmlDeclaration = null ;
oHTML.removeAttribute( 'xmlns', 0 ) ;
}
 
// ### Background
SetAttribute( oBody, 'bgcolor' , GetE('txtBackColor').value ) ;
SetAttribute( oBody, 'background' , GetE('txtBackImage').value ) ;
SetAttribute( oBody, 'bgproperties' , GetE('chkBackNoScroll').checked ? 'fixed' : '' ) ;
 
// ### Colors
SetAttribute( oBody, 'text' , GetE('txtColorText').value ) ;
SetAttribute( oBody, 'link' , GetE('txtColorLink').value ) ;
SetAttribute( oBody, 'vlink', GetE('txtColorVisited').value ) ;
SetAttribute( oBody, 'alink', GetE('txtColorActive').value ) ;
 
// ### Margins
SetAttribute( oBody, 'topmargin' , GetE('txtMarginTop').value ) ;
SetAttribute( oBody, 'leftmargin' , GetE('txtMarginLeft').value ) ;
SetAttribute( oBody, 'rightmargin' , GetE('txtMarginRight').value ) ;
SetAttribute( oBody, 'bottommargin' , GetE('txtMarginBottom').value ) ;
 
// ### Meta data
SetMetadata( 'keywords' , GetE('txtMetaKeywords').value ) ;
SetMetadata( 'description' , GetE('txtMetaDescription').value ) ;
SetMetadata( 'author' , GetE('txtMetaAuthor').value ) ;
SetMetadata( 'copyright' , GetE('txtMetaCopyright').value ) ;
 
return true ;
}
 
var bPreviewIsLoaded = false ;
var oPreviewWindow ;
var oPreviewBody ;
 
// Called by the Preview page when loaded.
function OnPreviewLoad( previewWindow, previewBody )
{
oPreviewWindow = previewWindow ;
oPreviewBody = previewBody ;
 
bPreviewIsLoaded = true ;
UpdatePreview() ;
}
 
function UpdatePreview()
{
if ( !bPreviewIsLoaded )
return ;
 
// ### Background
SetAttribute( oPreviewBody, 'bgcolor' , GetE('txtBackColor').value ) ;
SetAttribute( oPreviewBody, 'background' , GetE('txtBackImage').value ) ;
SetAttribute( oPreviewBody, 'bgproperties' , GetE('chkBackNoScroll').checked ? 'fixed' : '' ) ;
 
// ### Colors
SetAttribute( oPreviewBody, 'text', GetE('txtColorText').value ) ;
 
oPreviewWindow.SetLinkColor( GetE('txtColorLink').value ) ;
oPreviewWindow.SetVisitedColor( GetE('txtColorVisited').value ) ;
oPreviewWindow.SetActiveColor( GetE('txtColorActive').value ) ;
}
 
function CheckOther( combo, txtField )
{
var bNotOther = ( combo.value != '...' ) ;
 
GetE(txtField).style.backgroundColor = ( bNotOther ? '#cccccc' : '' ) ;
GetE(txtField).disabled = bNotOther ;
}
 
function SetColor( inputId, color )
{
GetE( inputId ).value = color + '' ;
UpdatePreview() ;
}
 
function SelectBackColor( color ) { SetColor('txtBackColor', color ) ; }
function SelectColorText( color ) { SetColor('txtColorText', color ) ; }
function SelectColorLink( color ) { SetColor('txtColorLink', color ) ; }
function SelectColorVisited( color ) { SetColor('txtColorVisited', color ) ; }
function SelectColorActive( color ) { SetColor('txtColorActive', color ) ; }
 
function SelectColor( wich )
{
switch ( wich )
{
case 'Back' : oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 410, 320, SelectBackColor, window ) ; return ;
case 'ColorText' : oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 410, 320, SelectColorText, window ) ; return ;
case 'ColorLink' : oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 410, 320, SelectColorLink, window ) ; return ;
case 'ColorVisited' : oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 410, 320, SelectColorVisited, window ) ; return ;
case 'ColorActive' : oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 410, 320, SelectColorActive, window ) ; return ;
}
}
 
function BrowseServerBack()
{
OpenFileBrowser( FCKConfig.ImageBrowserURL, FCKConfig.ImageBrowserWindowWidth, FCKConfig.ImageBrowserWindowHeight ) ;
}
 
function SetUrl( url )
{
GetE('txtBackImage').value = url ;
UpdatePreview() ;
}
 
</script>
</head>
<body style="overflow: hidden">
<table cellspacing="0" cellpadding="0" width="100%" border="0" style="height: 100%">
<tr>
<td valign="top" style="height: 100%">
<div id="divGeneral">
<span fcklang="DlgDocPageTitle">Page Title</span><br />
<input id="txtPageTitle" style="width: 100%" type="text" />
<br />
<table cellspacing="0" cellpadding="0" border="0">
<tr>
<td>
<span fcklang="DlgDocLangDir">Language Direction</span><br />
<select id="selDirection">
<option value="" selected="selected"></option>
<option value="ltr" fcklang="DlgDocLangDirLTR">Left to Right (LTR)</option>
<option value="rtl" fcklang="DlgDocLangDirRTL">Right to Left (RTL)</option>
</select>
</td>
<td>
&nbsp;&nbsp;&nbsp;</td>
<td>
<span fcklang="DlgDocLangCode">Language Code</span><br />
<input id="txtLang" type="text" />
</td>
</tr>
</table>
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
<tr>
<td style="white-space: nowrap">
<span fcklang="DlgDocCharSet">Character Set Encoding</span><br />
<select id="selCharSet" onchange="CheckOther( this, 'txtCustomCharSet' );">
<option value="" selected="selected"></option>
<option value="us-ascii">ASCII</option>
<option fcklang="DlgDocCharSetCE" value="iso-8859-2">Central European</option>
<option fcklang="DlgDocCharSetCT" value="big5">Chinese Traditional (Big5)</option>
<option fcklang="DlgDocCharSetCR" value="iso-8859-5">Cyrillic</option>
<option fcklang="DlgDocCharSetGR" value="iso-8859-7">Greek</option>
<option fcklang="DlgDocCharSetJP" value="iso-2022-jp">Japanese</option>
<option fcklang="DlgDocCharSetKR" value="iso-2022-kr">Korean</option>
<option fcklang="DlgDocCharSetTR" value="iso-8859-9">Turkish</option>
<option fcklang="DlgDocCharSetUN" value="utf-8">Unicode (UTF-8)</option>
<option fcklang="DlgDocCharSetWE" value="iso-8859-1">Western European</option>
<option fcklang="DlgOpOther" value="...">&lt;Other&gt;</option>
</select>
</td>
<td>
&nbsp;&nbsp;&nbsp;</td>
<td width="100%">
<span fcklang="DlgDocCharSetOther">Other Character Set Encoding</span><br />
<input id="txtCustomCharSet" style="width: 100%; background-color: #cccccc" disabled="disabled"
type="text" />
</td>
</tr>
<tr>
<td colspan="3">
&nbsp;</td>
</tr>
<tr>
<td nowrap="nowrap">
<span fcklang="DlgDocDocType">Document Type Heading</span><br />
<select id="selDocType" name="selDocType" onchange="CheckOther( this, 'txtDocType' );">
<option value="" selected="selected"></option>
<option value='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">'>HTML
4.01 Transitional</option>
<option value='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">'>
HTML 4.01 Strict</option>
<option value='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">'>
HTML 4.01 Frameset</option>
<option value='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'>
XHTML 1.0 Transitional</option>
<option value='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'>
XHTML 1.0 Strict</option>
<option value='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">'>
XHTML 1.0 Frameset</option>
<option value='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">'>
XHTML 1.1</option>
<option value='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">'>HTML 3.2</option>
<option value='<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">'>HTML 2.0</option>
<option value="..." fcklang="DlgOpOther">&lt;Other&gt;</option>
</select>
</td>
<td>
</td>
<td width="100%">
<span fcklang="DlgDocDocTypeOther">Other Document Type Heading</span><br />
<input id="txtDocType" style="width: 100%; background-color: #cccccc" disabled="disabled"
type="text" />
</td>
</tr>
</table>
<br />
<input id="chkIncXHTMLDecl" type="checkbox" />
<label for="chkIncXHTMLDecl" fcklang="DlgDocIncXHTML">
Include XHTML Declarations</label>
</div>
<div id="divBackground" style="display: none">
<span fcklang="DlgDocBgColor">Background Color</span><br />
<input id="txtBackColor" type="text" onchange="UpdatePreview();" onkeyup="UpdatePreview();" />&nbsp;<input
id="btnSelBackColor" onclick="SelectColor( 'Back' )" type="button" value="Select..."
fcklang="DlgCellBtnSelect" /><br />
<br />
<span fcklang="DlgDocBgImage">Background Image URL</span><br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
<tr>
<td width="100%">
<input id="txtBackImage" style="width: 100%" type="text" onchange="UpdatePreview();"
onkeyup="UpdatePreview();" /></td>
<td id="tdBrowse" nowrap="nowrap">
&nbsp;<input id="btnBrowse" onclick="BrowseServerBack();" type="button" fcklang="DlgBtnBrowseServer"
value="Browse Server" /></td>
</tr>
</table>
<input id="chkBackNoScroll" type="checkbox" onclick="UpdatePreview();" />
<label for="chkBackNoScroll" fcklang="DlgDocBgNoScroll">
Nonscrolling Background</label>
</div>
<div id="divColors" style="display: none">
<table cellspacing="0" cellpadding="0" width="100%" border="0">
<tr>
<td>
<span fcklang="DlgDocCText">Text</span><br />
<input id="txtColorText" type="text" onchange="UpdatePreview();" onkeyup="UpdatePreview();" /><input
onclick="SelectColor( 'ColorText' )" type="button" value="Select..." fcklang="DlgCellBtnSelect" />
<br />
<span fcklang="DlgDocCLink">Link</span><br />
<input id="txtColorLink" type="text" onchange="UpdatePreview();" onkeyup="UpdatePreview();" /><input
onclick="SelectColor( 'ColorLink' )" type="button" value="Select..." fcklang="DlgCellBtnSelect" />
<br />
<span fcklang="DlgDocCVisited">Visited Link</span><br />
<input id="txtColorVisited" type="text" onchange="UpdatePreview();" onkeyup="UpdatePreview();" /><input
onclick="SelectColor( 'ColorVisited' )" type="button" value="Select..." fcklang="DlgCellBtnSelect" />
<br />
<span fcklang="DlgDocCActive">Active Link</span><br />
<input id="txtColorActive" type="text" onchange="UpdatePreview();" onkeyup="UpdatePreview();" /><input
onclick="SelectColor( 'ColorActive' )" type="button" value="Select..." fcklang="DlgCellBtnSelect" />
</td>
<td valign="middle" align="center">
<table cellspacing="2" cellpadding="0" border="0">
<tr>
<td>
<span fcklang="DlgDocMargins">Page Margins</span></td>
</tr>
<tr>
<td style="border: #000000 1px solid; padding: 5px">
<table cellpadding="0" cellspacing="0" border="0" dir="ltr">
<tr>
<td align="center" colspan="3">
<span fcklang="DlgDocMaTop">Top</span><br />
<input id="txtMarginTop" type="text" size="3" />
</td>
</tr>
<tr>
<td align="left">
<span fcklang="DlgDocMaLeft">Left</span><br />
<input id="txtMarginLeft" type="text" size="3" />
</td>
<td>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
<td align="right">
<span fcklang="DlgDocMaRight">Right</span><br />
<input id="txtMarginRight" type="text" size="3" />
</td>
</tr>
<tr>
<td align="center" colspan="3">
<span fcklang="DlgDocMaBottom">Bottom</span><br />
<input id="txtMarginBottom" type="text" size="3" />
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<div id="divMeta" style="display: none">
<span fcklang="DlgDocMeIndex">Document Indexing Keywords (comma separated)</span><br />
<textarea id="txtMetaKeywords" style="width: 100%" rows="2" cols="20"></textarea>
<br />
<span fcklang="DlgDocMeDescr">Document Description</span><br />
<textarea id="txtMetaDescription" style="width: 100%" rows="4" cols="20"></textarea>
<br />
<span fcklang="DlgDocMeAuthor">Author</span><br />
<input id="txtMetaAuthor" style="width: 100%" type="text" /><br />
<br />
<span fcklang="DlgDocMeCopy">Copyright</span><br />
<input id="txtMetaCopyright" type="text" style="width: 100%" />
</div>
</td>
</tr>
<tr id="ePreview" style="display: none">
<td>
<span fcklang="DlgDocPreview">Preview</span><br />
<iframe id="frmPreview" src="fck_docprops/fck_document_preview.html" width="100%"
height="100"></iframe>
</td>
</tr>
</table>
</body>
</html>
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_link/fck_link.js
New file
0,0 → 1,893
/*
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* Scripts related to the Link dialog window (see fck_link.html).
*/
 
var dialog = window.parent ;
var oEditor = dialog.InnerDialogLoaded() ;
 
var FCK = oEditor.FCK ;
var FCKLang = oEditor.FCKLang ;
var FCKConfig = oEditor.FCKConfig ;
var FCKRegexLib = oEditor.FCKRegexLib ;
var FCKTools = oEditor.FCKTools ;
 
//#### Dialog Tabs
 
// Set the dialog tabs.
dialog.AddTab( 'Info', FCKLang.DlgLnkInfoTab ) ;
 
if ( !FCKConfig.LinkDlgHideTarget )
dialog.AddTab( 'Target', FCKLang.DlgLnkTargetTab, true ) ;
 
if ( FCKConfig.LinkUpload )
dialog.AddTab( 'Upload', FCKLang.DlgLnkUpload, true ) ;
 
if ( !FCKConfig.LinkDlgHideAdvanced )
dialog.AddTab( 'Advanced', FCKLang.DlgAdvancedTag ) ;
 
// Function called when a dialog tag is selected.
function OnDialogTabChange( tabCode )
{
ShowE('divInfo' , ( tabCode == 'Info' ) ) ;
ShowE('divTarget' , ( tabCode == 'Target' ) ) ;
ShowE('divUpload' , ( tabCode == 'Upload' ) ) ;
ShowE('divAttribs' , ( tabCode == 'Advanced' ) ) ;
 
dialog.SetAutoSize( true ) ;
}
 
//#### Regular Expressions library.
var oRegex = new Object() ;
 
oRegex.UriProtocol = /^(((http|https|ftp|news):\/\/)|mailto:)/gi ;
 
oRegex.UrlOnChangeProtocol = /^(http|https|ftp|news):\/\/(?=.)/gi ;
 
oRegex.UrlOnChangeTestOther = /^((javascript:)|[#\/\.])/gi ;
 
oRegex.ReserveTarget = /^_(blank|self|top|parent)$/i ;
 
oRegex.PopupUri = /^javascript:void\(\s*window.open\(\s*'([^']+)'\s*,\s*(?:'([^']*)'|null)\s*,\s*'([^']*)'\s*\)\s*\)\s*$/ ;
 
// Accessible popups
oRegex.OnClickPopup = /^\s*on[cC]lick="\s*window.open\(\s*this\.href\s*,\s*(?:'([^']*)'|null)\s*,\s*'([^']*)'\s*\)\s*;\s*return\s*false;*\s*"$/ ;
 
oRegex.PopupFeatures = /(?:^|,)([^=]+)=(\d+|yes|no)/gi ;
 
//#### Parser Functions
 
var oParser = new Object() ;
 
// This method simply returns the two inputs in numerical order. You can even
// provide strings, as the method would parseInt() the values.
oParser.SortNumerical = function(a, b)
{
return parseInt( a, 10 ) - parseInt( b, 10 ) ;
}
 
oParser.ParseEMailParams = function(sParams)
{
// Initialize the oEMailParams object.
var oEMailParams = new Object() ;
oEMailParams.Subject = '' ;
oEMailParams.Body = '' ;
 
var aMatch = sParams.match( /(^|^\?|&)subject=([^&]+)/i ) ;
if ( aMatch ) oEMailParams.Subject = decodeURIComponent( aMatch[2] ) ;
 
aMatch = sParams.match( /(^|^\?|&)body=([^&]+)/i ) ;
if ( aMatch ) oEMailParams.Body = decodeURIComponent( aMatch[2] ) ;
 
return oEMailParams ;
}
 
// This method returns either an object containing the email info, or FALSE
// if the parameter is not an email link.
oParser.ParseEMailUri = function( sUrl )
{
// Initializes the EMailInfo object.
var oEMailInfo = new Object() ;
oEMailInfo.Address = '' ;
oEMailInfo.Subject = '' ;
oEMailInfo.Body = '' ;
 
var aLinkInfo = sUrl.match( /^(\w+):(.*)$/ ) ;
if ( aLinkInfo && aLinkInfo[1] == 'mailto' )
{
// This seems to be an unprotected email link.
var aParts = aLinkInfo[2].match( /^([^\?]+)\??(.+)?/ ) ;
if ( aParts )
{
// Set the e-mail address.
oEMailInfo.Address = aParts[1] ;
 
// Look for the optional e-mail parameters.
if ( aParts[2] )
{
var oEMailParams = oParser.ParseEMailParams( aParts[2] ) ;
oEMailInfo.Subject = oEMailParams.Subject ;
oEMailInfo.Body = oEMailParams.Body ;
}
}
return oEMailInfo ;
}
else if ( aLinkInfo && aLinkInfo[1] == 'javascript' )
{
// This may be a protected email.
 
// Try to match the url against the EMailProtectionFunction.
var func = FCKConfig.EMailProtectionFunction ;
if ( func != null )
{
try
{
// Escape special chars.
func = func.replace( /([\/^$*+.?()\[\]])/g, '\\$1' ) ;
 
// Define the possible keys.
var keys = new Array('NAME', 'DOMAIN', 'SUBJECT', 'BODY') ;
 
// Get the order of the keys (hold them in the array <pos>) and
// the function replaced by regular expression patterns.
var sFunc = func ;
var pos = new Array() ;
for ( var i = 0 ; i < keys.length ; i ++ )
{
var rexp = new RegExp( keys[i] ) ;
var p = func.search( rexp ) ;
if ( p >= 0 )
{
sFunc = sFunc.replace( rexp, '\'([^\']*)\'' ) ;
pos[pos.length] = p + ':' + keys[i] ;
}
}
 
// Sort the available keys.
pos.sort( oParser.SortNumerical ) ;
 
// Replace the excaped single quotes in the url, such they do
// not affect the regexp afterwards.
aLinkInfo[2] = aLinkInfo[2].replace( /\\'/g, '###SINGLE_QUOTE###' ) ;
 
// Create the regexp and execute it.
var rFunc = new RegExp( '^' + sFunc + '$' ) ;
var aMatch = rFunc.exec( aLinkInfo[2] ) ;
if ( aMatch )
{
var aInfo = new Array();
for ( var i = 1 ; i < aMatch.length ; i ++ )
{
var k = pos[i-1].match(/^\d+:(.+)$/) ;
aInfo[k[1]] = aMatch[i].replace(/###SINGLE_QUOTE###/g, '\'') ;
}
 
// Fill the EMailInfo object that will be returned
oEMailInfo.Address = aInfo['NAME'] + '@' + aInfo['DOMAIN'] ;
oEMailInfo.Subject = decodeURIComponent( aInfo['SUBJECT'] ) ;
oEMailInfo.Body = decodeURIComponent( aInfo['BODY'] ) ;
 
return oEMailInfo ;
}
}
catch (e)
{
}
}
 
// Try to match the email against the encode protection.
var aMatch = aLinkInfo[2].match( /^location\.href='mailto:'\+(String\.fromCharCode\([\d,]+\))\+'(.*)'$/ ) ;
if ( aMatch )
{
// The link is encoded
oEMailInfo.Address = eval( aMatch[1] ) ;
if ( aMatch[2] )
{
var oEMailParams = oParser.ParseEMailParams( aMatch[2] ) ;
oEMailInfo.Subject = oEMailParams.Subject ;
oEMailInfo.Body = oEMailParams.Body ;
}
return oEMailInfo ;
}
}
return false;
}
 
oParser.CreateEMailUri = function( address, subject, body )
{
// Switch for the EMailProtection setting.
switch ( FCKConfig.EMailProtection )
{
case 'function' :
var func = FCKConfig.EMailProtectionFunction ;
if ( func == null )
{
if ( FCKConfig.Debug )
{
alert('EMailProtection alert!\nNo function defined. Please set "FCKConfig.EMailProtectionFunction"') ;
}
return '';
}
 
// Split the email address into name and domain parts.
var aAddressParts = address.split( '@', 2 ) ;
if ( aAddressParts[1] == undefined )
{
aAddressParts[1] = '' ;
}
 
// Replace the keys by their values (embedded in single quotes).
func = func.replace(/NAME/g, "'" + aAddressParts[0].replace(/'/g, '\\\'') + "'") ;
func = func.replace(/DOMAIN/g, "'" + aAddressParts[1].replace(/'/g, '\\\'') + "'") ;
func = func.replace(/SUBJECT/g, "'" + encodeURIComponent( subject ).replace(/'/g, '\\\'') + "'") ;
func = func.replace(/BODY/g, "'" + encodeURIComponent( body ).replace(/'/g, '\\\'') + "'") ;
 
return 'javascript:' + func ;
 
case 'encode' :
var aParams = [] ;
var aAddressCode = [] ;
 
if ( subject.length > 0 )
aParams.push( 'subject='+ encodeURIComponent( subject ) ) ;
if ( body.length > 0 )
aParams.push( 'body=' + encodeURIComponent( body ) ) ;
for ( var i = 0 ; i < address.length ; i++ )
aAddressCode.push( address.charCodeAt( i ) ) ;
 
return 'javascript:location.href=\'mailto:\'+String.fromCharCode(' + aAddressCode.join( ',' ) + ')+\'?' + aParams.join( '&' ) + '\'' ;
}
 
// EMailProtection 'none'
 
var sBaseUri = 'mailto:' + address ;
 
var sParams = '' ;
 
if ( subject.length > 0 )
sParams = '?subject=' + encodeURIComponent( subject ) ;
 
if ( body.length > 0 )
{
sParams += ( sParams.length == 0 ? '?' : '&' ) ;
sParams += 'body=' + encodeURIComponent( body ) ;
}
 
return sBaseUri + sParams ;
}
 
//#### Initialization Code
 
// oLink: The actual selected link in the editor.
var oLink = dialog.Selection.GetSelection().MoveToAncestorNode( 'A' ) ;
if ( oLink )
FCK.Selection.SelectNode( oLink ) ;
 
window.onload = function()
{
// Translate the dialog box texts.
oEditor.FCKLanguageManager.TranslatePage(document) ;
 
// Fill the Anchor Names and Ids combos.
LoadAnchorNamesAndIds() ;
 
// Load the selected link information (if any).
LoadSelection() ;
 
// Update the dialog box.
SetLinkType( GetE('cmbLinkType').value ) ;
 
// Show/Hide the "Browse Server" button.
GetE('divBrowseServer').style.display = FCKConfig.LinkBrowser ? '' : 'none' ;
 
// Show the initial dialog content.
GetE('divInfo').style.display = '' ;
 
// Set the actual uploader URL.
if ( FCKConfig.LinkUpload )
GetE('frmUpload').action = FCKConfig.LinkUploadURL ;
 
// Set the default target (from configuration).
SetDefaultTarget() ;
 
// Activate the "OK" button.
dialog.SetOkButton( true ) ;
 
// Select the first field.
switch( GetE('cmbLinkType').value )
{
case 'url' :
SelectField( 'txtUrl' ) ;
break ;
case 'email' :
SelectField( 'txtEMailAddress' ) ;
break ;
case 'anchor' :
if ( GetE('divSelAnchor').style.display != 'none' )
SelectField( 'cmbAnchorName' ) ;
else
SelectField( 'cmbLinkType' ) ;
}
}
 
var bHasAnchors ;
 
function LoadAnchorNamesAndIds()
{
// Since version 2.0, the anchors are replaced in the DOM by IMGs so the user see the icon
// to edit them. So, we must look for that images now.
var aAnchors = new Array() ;
var i ;
var oImages = oEditor.FCK.EditorDocument.getElementsByTagName( 'IMG' ) ;
for( i = 0 ; i < oImages.length ; i++ )
{
if ( oImages[i].getAttribute('_fckanchor') )
aAnchors[ aAnchors.length ] = oEditor.FCK.GetRealElement( oImages[i] ) ;
}
 
// Add also real anchors
var oLinks = oEditor.FCK.EditorDocument.getElementsByTagName( 'A' ) ;
for( i = 0 ; i < oLinks.length ; i++ )
{
if ( oLinks[i].name && ( oLinks[i].name.length > 0 ) )
aAnchors[ aAnchors.length ] = oLinks[i] ;
}
 
var aIds = FCKTools.GetAllChildrenIds( oEditor.FCK.EditorDocument.body ) ;
 
bHasAnchors = ( aAnchors.length > 0 || aIds.length > 0 ) ;
 
for ( i = 0 ; i < aAnchors.length ; i++ )
{
var sName = aAnchors[i].name ;
if ( sName && sName.length > 0 )
FCKTools.AddSelectOption( GetE('cmbAnchorName'), sName, sName ) ;
}
 
for ( i = 0 ; i < aIds.length ; i++ )
{
FCKTools.AddSelectOption( GetE('cmbAnchorId'), aIds[i], aIds[i] ) ;
}
 
ShowE( 'divSelAnchor' , bHasAnchors ) ;
ShowE( 'divNoAnchor' , !bHasAnchors ) ;
}
 
function LoadSelection()
{
if ( !oLink ) return ;
 
var sType = 'url' ;
 
// Get the actual Link href.
var sHRef = oLink.getAttribute( '_fcksavedurl' ) ;
if ( sHRef == null )
sHRef = oLink.getAttribute( 'href' , 2 ) || '' ;
 
// Look for a popup javascript link.
var oPopupMatch = oRegex.PopupUri.exec( sHRef ) ;
if( oPopupMatch )
{
GetE('cmbTarget').value = 'popup' ;
sHRef = oPopupMatch[1] ;
FillPopupFields( oPopupMatch[2], oPopupMatch[3] ) ;
SetTarget( 'popup' ) ;
}
 
// Accessible popups, the popup data is in the onclick attribute
if ( !oPopupMatch )
{
var onclick = oLink.getAttribute( 'onclick_fckprotectedatt' ) ;
if ( onclick )
{
// Decode the protected string
onclick = decodeURIComponent( onclick ) ;
 
oPopupMatch = oRegex.OnClickPopup.exec( onclick ) ;
if( oPopupMatch )
{
GetE( 'cmbTarget' ).value = 'popup' ;
FillPopupFields( oPopupMatch[1], oPopupMatch[2] ) ;
SetTarget( 'popup' ) ;
}
}
}
 
// Search for the protocol.
var sProtocol = oRegex.UriProtocol.exec( sHRef ) ;
 
// Search for a protected email link.
var oEMailInfo = oParser.ParseEMailUri( sHRef );
 
if ( oEMailInfo )
{
sType = 'email' ;
 
GetE('txtEMailAddress').value = oEMailInfo.Address ;
GetE('txtEMailSubject').value = oEMailInfo.Subject ;
GetE('txtEMailBody').value = oEMailInfo.Body ;
}
else if ( sProtocol )
{
sProtocol = sProtocol[0].toLowerCase() ;
GetE('cmbLinkProtocol').value = sProtocol ;
 
// Remove the protocol and get the remaining URL.
var sUrl = sHRef.replace( oRegex.UriProtocol, '' ) ;
sType = 'url' ;
GetE('txtUrl').value = sUrl ;
}
else if ( sHRef.substr(0,1) == '#' && sHRef.length > 1 ) // It is an anchor link.
{
sType = 'anchor' ;
GetE('cmbAnchorName').value = GetE('cmbAnchorId').value = sHRef.substr(1) ;
}
else // It is another type of link.
{
sType = 'url' ;
 
GetE('cmbLinkProtocol').value = '' ;
GetE('txtUrl').value = sHRef ;
}
 
if ( !oPopupMatch )
{
// Get the target.
var sTarget = oLink.target ;
 
if ( sTarget && sTarget.length > 0 )
{
if ( oRegex.ReserveTarget.test( sTarget ) )
{
sTarget = sTarget.toLowerCase() ;
GetE('cmbTarget').value = sTarget ;
}
else
GetE('cmbTarget').value = 'frame' ;
GetE('txtTargetFrame').value = sTarget ;
}
}
 
// Get Advances Attributes
GetE('txtAttId').value = oLink.id ;
GetE('txtAttName').value = oLink.name ;
GetE('cmbAttLangDir').value = oLink.dir ;
GetE('txtAttLangCode').value = oLink.lang ;
GetE('txtAttAccessKey').value = oLink.accessKey ;
GetE('txtAttTabIndex').value = oLink.tabIndex <= 0 ? '' : oLink.tabIndex ;
GetE('txtAttTitle').value = oLink.title ;
GetE('txtAttContentType').value = oLink.type ;
GetE('txtAttCharSet').value = oLink.charset ;
 
var sClass ;
if ( oEditor.FCKBrowserInfo.IsIE )
{
sClass = oLink.getAttribute('className',2) || '' ;
// Clean up temporary classes for internal use:
sClass = sClass.replace( FCKRegexLib.FCK_Class, '' ) ;
 
GetE('txtAttStyle').value = oLink.style.cssText ;
}
else
{
sClass = oLink.getAttribute('class',2) || '' ;
GetE('txtAttStyle').value = oLink.getAttribute('style',2) || '' ;
}
GetE('txtAttClasses').value = sClass ;
 
// Update the Link type combo.
GetE('cmbLinkType').value = sType ;
}
 
//#### Link type selection.
function SetLinkType( linkType )
{
ShowE('divLinkTypeUrl' , (linkType == 'url') ) ;
ShowE('divLinkTypeAnchor' , (linkType == 'anchor') ) ;
ShowE('divLinkTypeEMail' , (linkType == 'email') ) ;
 
if ( !FCKConfig.LinkDlgHideTarget )
dialog.SetTabVisibility( 'Target' , (linkType == 'url') ) ;
 
if ( FCKConfig.LinkUpload )
dialog.SetTabVisibility( 'Upload' , (linkType == 'url') ) ;
 
if ( !FCKConfig.LinkDlgHideAdvanced )
dialog.SetTabVisibility( 'Advanced' , (linkType != 'anchor' || bHasAnchors) ) ;
 
if ( linkType == 'email' )
dialog.SetAutoSize( true ) ;
}
 
//#### Target type selection.
function SetTarget( targetType )
{
GetE('tdTargetFrame').style.display = ( targetType == 'popup' ? 'none' : '' ) ;
GetE('tdPopupName').style.display =
GetE('tablePopupFeatures').style.display = ( targetType == 'popup' ? '' : 'none' ) ;
 
switch ( targetType )
{
case "_blank" :
case "_self" :
case "_parent" :
case "_top" :
GetE('txtTargetFrame').value = targetType ;
break ;
case "" :
GetE('txtTargetFrame').value = '' ;
break ;
}
 
if ( targetType == 'popup' )
dialog.SetAutoSize( true ) ;
}
 
//#### Called while the user types the URL.
function OnUrlChange()
{
var sUrl = GetE('txtUrl').value ;
var sProtocol = oRegex.UrlOnChangeProtocol.exec( sUrl ) ;
 
if ( sProtocol )
{
sUrl = sUrl.substr( sProtocol[0].length ) ;
GetE('txtUrl').value = sUrl ;
GetE('cmbLinkProtocol').value = sProtocol[0].toLowerCase() ;
}
else if ( oRegex.UrlOnChangeTestOther.test( sUrl ) )
{
GetE('cmbLinkProtocol').value = '' ;
}
}
 
//#### Called while the user types the target name.
function OnTargetNameChange()
{
var sFrame = GetE('txtTargetFrame').value ;
 
if ( sFrame.length == 0 )
GetE('cmbTarget').value = '' ;
else if ( oRegex.ReserveTarget.test( sFrame ) )
GetE('cmbTarget').value = sFrame.toLowerCase() ;
else
GetE('cmbTarget').value = 'frame' ;
}
 
// Accessible popups
function BuildOnClickPopup()
{
var sWindowName = "'" + GetE('txtPopupName').value.replace(/\W/gi, "") + "'" ;
 
var sFeatures = '' ;
var aChkFeatures = document.getElementsByName( 'chkFeature' ) ;
for ( var i = 0 ; i < aChkFeatures.length ; i++ )
{
if ( i > 0 ) sFeatures += ',' ;
sFeatures += aChkFeatures[i].value + '=' + ( aChkFeatures[i].checked ? 'yes' : 'no' ) ;
}
 
if ( GetE('txtPopupWidth').value.length > 0 ) sFeatures += ',width=' + GetE('txtPopupWidth').value ;
if ( GetE('txtPopupHeight').value.length > 0 ) sFeatures += ',height=' + GetE('txtPopupHeight').value ;
if ( GetE('txtPopupLeft').value.length > 0 ) sFeatures += ',left=' + GetE('txtPopupLeft').value ;
if ( GetE('txtPopupTop').value.length > 0 ) sFeatures += ',top=' + GetE('txtPopupTop').value ;
 
if ( sFeatures != '' )
sFeatures = sFeatures + ",status" ;
 
return ( "window.open(this.href," + sWindowName + ",'" + sFeatures + "'); return false" ) ;
}
 
//#### Fills all Popup related fields.
function FillPopupFields( windowName, features )
{
if ( windowName )
GetE('txtPopupName').value = windowName ;
 
var oFeatures = new Object() ;
var oFeaturesMatch ;
while( ( oFeaturesMatch = oRegex.PopupFeatures.exec( features ) ) != null )
{
var sValue = oFeaturesMatch[2] ;
if ( sValue == ( 'yes' || '1' ) )
oFeatures[ oFeaturesMatch[1] ] = true ;
else if ( ! isNaN( sValue ) && sValue != 0 )
oFeatures[ oFeaturesMatch[1] ] = sValue ;
}
 
// Update all features check boxes.
var aChkFeatures = document.getElementsByName('chkFeature') ;
for ( var i = 0 ; i < aChkFeatures.length ; i++ )
{
if ( oFeatures[ aChkFeatures[i].value ] )
aChkFeatures[i].checked = true ;
}
 
// Update position and size text boxes.
if ( oFeatures['width'] ) GetE('txtPopupWidth').value = oFeatures['width'] ;
if ( oFeatures['height'] ) GetE('txtPopupHeight').value = oFeatures['height'] ;
if ( oFeatures['left'] ) GetE('txtPopupLeft').value = oFeatures['left'] ;
if ( oFeatures['top'] ) GetE('txtPopupTop').value = oFeatures['top'] ;
}
 
//#### The OK button was hit.
function Ok()
{
var sUri, sInnerHtml ;
oEditor.FCKUndo.SaveUndoStep() ;
 
switch ( GetE('cmbLinkType').value )
{
case 'url' :
sUri = GetE('txtUrl').value ;
 
if ( sUri.length == 0 )
{
alert( FCKLang.DlnLnkMsgNoUrl ) ;
return false ;
}
 
sUri = GetE('cmbLinkProtocol').value + sUri ;
 
break ;
 
case 'email' :
sUri = GetE('txtEMailAddress').value ;
 
if ( sUri.length == 0 )
{
alert( FCKLang.DlnLnkMsgNoEMail ) ;
return false ;
}
 
sUri = oParser.CreateEMailUri(
sUri,
GetE('txtEMailSubject').value,
GetE('txtEMailBody').value ) ;
break ;
 
case 'anchor' :
var sAnchor = GetE('cmbAnchorName').value ;
if ( sAnchor.length == 0 ) sAnchor = GetE('cmbAnchorId').value ;
 
if ( sAnchor.length == 0 )
{
alert( FCKLang.DlnLnkMsgNoAnchor ) ;
return false ;
}
 
sUri = '#' + sAnchor ;
break ;
}
 
// If no link is selected, create a new one (it may result in more than one link creation - #220).
var aLinks = oLink ? [ oLink ] : oEditor.FCK.CreateLink( sUri, true ) ;
 
// If no selection, no links are created, so use the uri as the link text (by dom, 2006-05-26)
var aHasSelection = ( aLinks.length > 0 ) ;
if ( !aHasSelection )
{
sInnerHtml = sUri;
 
// Built a better text for empty links.
switch ( GetE('cmbLinkType').value )
{
// anchor: use old behavior --> return true
case 'anchor':
sInnerHtml = sInnerHtml.replace( /^#/, '' ) ;
break ;
 
// url: try to get path
case 'url':
var oLinkPathRegEx = new RegExp("//?([^?\"']+)([?].*)?$") ;
var asLinkPath = oLinkPathRegEx.exec( sUri ) ;
if (asLinkPath != null)
sInnerHtml = asLinkPath[1]; // use matched path
break ;
 
// mailto: try to get email address
case 'email':
sInnerHtml = GetE('txtEMailAddress').value ;
break ;
}
 
// Create a new (empty) anchor.
aLinks = [ oEditor.FCK.InsertElement( 'a' ) ] ;
}
 
for ( var i = 0 ; i < aLinks.length ; i++ )
{
oLink = aLinks[i] ;
 
if ( aHasSelection )
sInnerHtml = oLink.innerHTML ; // Save the innerHTML (IE changes it if it is like an URL).
 
oLink.href = sUri ;
SetAttribute( oLink, '_fcksavedurl', sUri ) ;
 
var onclick;
// Accessible popups
if( GetE('cmbTarget').value == 'popup' )
{
onclick = BuildOnClickPopup() ;
// Encode the attribute
onclick = encodeURIComponent( " onclick=\"" + onclick + "\"" ) ;
SetAttribute( oLink, 'onclick_fckprotectedatt', onclick ) ;
}
else
{
// Check if the previous onclick was for a popup:
// In that case remove the onclick handler.
onclick = oLink.getAttribute( 'onclick_fckprotectedatt' ) ;
if ( onclick )
{
// Decode the protected string
onclick = decodeURIComponent( onclick ) ;
 
if( oRegex.OnClickPopup.test( onclick ) )
SetAttribute( oLink, 'onclick_fckprotectedatt', '' ) ;
}
}
 
oLink.innerHTML = sInnerHtml ; // Set (or restore) the innerHTML
 
// Target
if( GetE('cmbTarget').value != 'popup' )
SetAttribute( oLink, 'target', GetE('txtTargetFrame').value ) ;
else
SetAttribute( oLink, 'target', null ) ;
 
// Let's set the "id" only for the first link to avoid duplication.
if ( i == 0 )
SetAttribute( oLink, 'id', GetE('txtAttId').value ) ;
 
// Advances Attributes
SetAttribute( oLink, 'name' , GetE('txtAttName').value ) ;
SetAttribute( oLink, 'dir' , GetE('cmbAttLangDir').value ) ;
SetAttribute( oLink, 'lang' , GetE('txtAttLangCode').value ) ;
SetAttribute( oLink, 'accesskey', GetE('txtAttAccessKey').value ) ;
SetAttribute( oLink, 'tabindex' , ( GetE('txtAttTabIndex').value > 0 ? GetE('txtAttTabIndex').value : null ) ) ;
SetAttribute( oLink, 'title' , GetE('txtAttTitle').value ) ;
SetAttribute( oLink, 'type' , GetE('txtAttContentType').value ) ;
SetAttribute( oLink, 'charset' , GetE('txtAttCharSet').value ) ;
 
if ( oEditor.FCKBrowserInfo.IsIE )
{
var sClass = GetE('txtAttClasses').value ;
// If it's also an anchor add an internal class
if ( GetE('txtAttName').value.length != 0 )
sClass += ' FCK__AnchorC' ;
SetAttribute( oLink, 'className', sClass ) ;
 
oLink.style.cssText = GetE('txtAttStyle').value ;
}
else
{
SetAttribute( oLink, 'class', GetE('txtAttClasses').value ) ;
SetAttribute( oLink, 'style', GetE('txtAttStyle').value ) ;
}
}
 
// Select the (first) link.
oEditor.FCKSelection.SelectNode( aLinks[0] );
 
return true ;
}
 
function BrowseServer()
{
OpenFileBrowser( FCKConfig.LinkBrowserURL, FCKConfig.LinkBrowserWindowWidth, FCKConfig.LinkBrowserWindowHeight ) ;
}
 
function SetUrl( url )
{
GetE('txtUrl').value = url ;
OnUrlChange() ;
dialog.SetSelectedTab( 'Info' ) ;
}
 
function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg )
{
// Remove animation
window.parent.Throbber.Hide() ;
GetE( 'divUpload' ).style.display = '' ;
 
switch ( errorNumber )
{
case 0 : // No errors
alert( 'Your file has been successfully uploaded' ) ;
break ;
case 1 : // Custom error
alert( customMsg ) ;
return ;
case 101 : // Custom warning
alert( customMsg ) ;
break ;
case 201 :
alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + fileName + '"' ) ;
break ;
case 202 :
alert( 'Invalid file type' ) ;
return ;
case 203 :
alert( "Security error. You probably don't have enough permissions to upload. Please check your server." ) ;
return ;
case 500 :
alert( 'The connector is disabled' ) ;
break ;
default :
alert( 'Error on file upload. Error number: ' + errorNumber ) ;
return ;
}
 
SetUrl( fileUrl ) ;
GetE('frmUpload').reset() ;
}
 
var oUploadAllowedExtRegex = new RegExp( FCKConfig.LinkUploadAllowedExtensions, 'i' ) ;
var oUploadDeniedExtRegex = new RegExp( FCKConfig.LinkUploadDeniedExtensions, 'i' ) ;
 
function CheckUpload()
{
var sFile = GetE('txtUploadFile').value ;
 
if ( sFile.length == 0 )
{
alert( 'Please select a file to upload' ) ;
return false ;
}
 
if ( ( FCKConfig.LinkUploadAllowedExtensions.length > 0 && !oUploadAllowedExtRegex.test( sFile ) ) ||
( FCKConfig.LinkUploadDeniedExtensions.length > 0 && oUploadDeniedExtRegex.test( sFile ) ) )
{
OnUploadCompleted( 202 ) ;
return false ;
}
 
// Show animation
window.parent.Throbber.Show( 100 ) ;
GetE( 'divUpload' ).style.display = 'none' ;
 
return true ;
}
 
function SetDefaultTarget()
{
var target = FCKConfig.DefaultLinkTarget || '' ;
 
if ( oLink || target.length == 0 )
return ;
 
switch ( target )
{
case '_blank' :
case '_self' :
case '_parent' :
case '_top' :
GetE('cmbTarget').value = target ;
break ;
default :
GetE('cmbTarget').value = 'frame' ;
break ;
}
 
GetE('txtTargetFrame').value = target ;
}
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_radiobutton.html
New file
0,0 → 1,104
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<!--
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* Radio Button dialog window.
-->
<html>
<head>
<title>Radio Button Properties</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta content="noindex, nofollow" name="robots">
<script src="common/fck_dialog_common.js" type="text/javascript"></script>
<script type="text/javascript">
 
var dialog = window.parent ;
var oEditor = dialog.InnerDialogLoaded() ;
 
// Gets the document DOM
var oDOM = oEditor.FCK.EditorDocument ;
 
var oActiveEl = dialog.Selection.GetSelectedElement() ;
 
window.onload = function()
{
// First of all, translate the dialog box texts
oEditor.FCKLanguageManager.TranslatePage(document) ;
 
if ( oActiveEl && oActiveEl.tagName.toUpperCase() == 'INPUT' && oActiveEl.type == 'radio' )
{
GetE('txtName').value = oActiveEl.name ;
GetE('txtValue').value = oEditor.FCKBrowserInfo.IsIE ? oActiveEl.value : GetAttribute( oActiveEl, 'value' ) ;
GetE('txtSelected').checked = oActiveEl.checked ;
}
else
oActiveEl = null ;
 
dialog.SetOkButton( true ) ;
dialog.SetAutoSize( true ) ;
SelectField( 'txtName' ) ;
}
 
function Ok()
{
oEditor.FCKUndo.SaveUndoStep() ;
 
oActiveEl = CreateNamedElement( oEditor, oActiveEl, 'INPUT', {name: GetE('txtName').value, type: 'radio' } ) ;
 
if ( oEditor.FCKBrowserInfo.IsIE )
oActiveEl.value = GetE('txtValue').value ;
else
SetAttribute( oActiveEl, 'value', GetE('txtValue').value ) ;
 
var bIsChecked = GetE('txtSelected').checked ;
SetAttribute( oActiveEl, 'checked', bIsChecked ? 'checked' : null ) ; // For Firefox
oActiveEl.checked = bIsChecked ;
 
return true ;
}
 
</script>
</head>
<body style="OVERFLOW: hidden" scroll="no">
<table height="100%" width="100%">
<tr>
<td align="center">
<table border="0" cellpadding="0" cellspacing="0" width="80%">
<tr>
<td>
<span fckLang="DlgCheckboxName">Name</span><br>
<input type="text" size="20" id="txtName" style="WIDTH: 100%">
</td>
</tr>
<tr>
<td>
<span fckLang="DlgCheckboxValue">Value</span><br>
<input type="text" size="20" id="txtValue" style="WIDTH: 100%">
</td>
</tr>
<tr>
<td><input type="checkbox" id="txtSelected"><label for="txtSelected" fckLang="DlgCheckboxSelected">Checked</label></td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_flash.html
New file
0,0 → 1,152
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!--
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* Flash Properties dialog window.
-->
<html>
<head>
<title>Flash Properties</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta content="noindex, nofollow" name="robots">
<script src="common/fck_dialog_common.js" type="text/javascript"></script>
<script src="fck_flash/fck_flash.js" type="text/javascript"></script>
<script type="text/javascript">
 
document.write( FCKTools.GetStyleHtml( GetCommonDialogCss() ) ) ;
 
</script>
</head>
<body scroll="no" style="OVERFLOW: hidden">
<div id="divInfo">
<table cellSpacing="1" cellPadding="1" width="100%" border="0">
<tr>
<td>
<table cellSpacing="0" cellPadding="0" width="100%" border="0">
<tr>
<td width="100%"><span fckLang="DlgImgURL">URL</span>
</td>
<td id="tdBrowse" style="DISPLAY: none" noWrap rowSpan="2">&nbsp; <input id="btnBrowse" onclick="BrowseServer();" type="button" value="Browse Server" fckLang="DlgBtnBrowseServer">
</td>
</tr>
<tr>
<td vAlign="top"><input id="txtUrl" onblur="UpdatePreview();" style="WIDTH: 100%" type="text">
</td>
</tr>
</table>
</td>
</tr>
<TR>
<TD>
<table cellSpacing="0" cellPadding="0" border="0">
<TR>
<TD nowrap>
<span fckLang="DlgImgWidth">Width</span><br>
<input id="txtWidth" onkeypress="return IsDigit(event);" type="text" size="3">
</TD>
<TD>&nbsp;</TD>
<TD>
<span fckLang="DlgImgHeight">Height</span><br>
<input id="txtHeight" onkeypress="return IsDigit(event);" type="text" size="3">
</TD>
</TR>
</table>
</TD>
</TR>
<tr>
<td vAlign="top">
<table cellSpacing="0" cellPadding="0" width="100%" border="0">
<tr>
<td valign="top" width="100%">
<table cellSpacing="0" cellPadding="0" width="100%">
<tr>
<td><span fckLang="DlgImgPreview">Preview</span></td>
</tr>
<tr>
<td id="ePreviewCell" valign="top" class="FlashPreviewArea"><iframe src="fck_flash/fck_flash_preview.html" frameborder="0" marginheight="0" marginwidth="0"></iframe></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<div id="divUpload" style="DISPLAY: none">
<form id="frmUpload" method="post" target="UploadWindow" enctype="multipart/form-data" action="" onsubmit="return CheckUpload();">
<span fckLang="DlgLnkUpload">Upload</span><br />
<input id="txtUploadFile" style="WIDTH: 100%" type="file" size="40" name="NewFile" /><br />
<br />
<input id="btnUpload" type="submit" value="Send it to the Server" fckLang="DlgLnkBtnUpload" />
<script type="text/javascript">
document.write( '<iframe name="UploadWindow" style="DISPLAY: none" src="' + FCKTools.GetVoidUrl() + '"><\/iframe>' ) ;
</script>
</form>
</div>
<div id="divAdvanced" style="DISPLAY: none">
<TABLE cellSpacing="0" cellPadding="0" border="0">
<TR>
<TD nowrap>
<span fckLang="DlgFlashScale">Scale</span><BR>
<select id="cmbScale">
<option value="" selected></option>
<option value="showall" fckLang="DlgFlashScaleAll">Show all</option>
<option value="noborder" fckLang="DlgFlashScaleNoBorder">No Border</option>
<option value="exactfit" fckLang="DlgFlashScaleFit">Exact Fit</option>
</select></TD>
<TD>&nbsp;&nbsp;&nbsp; &nbsp;
</TD>
<td valign="bottom">
<table>
<tr>
<td><input id="chkAutoPlay" type="checkbox" checked></td>
<td><label for="chkAutoPlay" nowrap fckLang="DlgFlashChkPlay">Auto Play</label>&nbsp;&nbsp;</td>
<td><input id="chkLoop" type="checkbox" checked></td>
<td><label for="chkLoop" nowrap fckLang="DlgFlashChkLoop">Loop</label>&nbsp;&nbsp;</td>
<td><input id="chkMenu" type="checkbox" checked></td>
<td><label for="chkMenu" nowrap fckLang="DlgFlashChkMenu">Enable Flash Menu</label></td>
</tr>
</table>
</td>
</TR>
</TABLE>
<br>
&nbsp;
<table cellSpacing="0" cellPadding="0" width="100%" align="center" border="0">
<tr>
<td vAlign="top" width="50%"><span fckLang="DlgGenId">Id</span><br>
<input id="txtAttId" style="WIDTH: 100%" type="text">
</td>
<td>&nbsp;&nbsp;</td>
<td vAlign="top" nowrap><span fckLang="DlgGenClass">Stylesheet Classes</span><br>
<input id="txtAttClasses" style="WIDTH: 100%" type="text">
</td>
<td>&nbsp;&nbsp;</td>
<td vAlign="top" nowrap width="50%">&nbsp;<span fckLang="DlgGenTitle">Advisory Title</span><br>
<input id="txtAttTitle" style="WIDTH: 100%" type="text">
</td>
</tr>
</table>
<span fckLang="DlgGenStyle">Style</span><br>
<input id="txtAttStyle" style="WIDTH: 100%" type="text">
</div>
</body>
</html>
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_hiddenfield.html
New file
0,0 → 1,115
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<!--
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* Hidden Field dialog window.
-->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Hidden Field Properties</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta content="noindex, nofollow" name="robots" />
<script src="common/fck_dialog_common.js" type="text/javascript"></script>
<script type="text/javascript">
 
var dialog = window.parent ;
var oEditor = dialog.InnerDialogLoaded() ;
 
var FCK = oEditor.FCK ;
 
// Gets the document DOM
var oDOM = FCK.EditorDocument ;
 
// Get the selected flash embed (if available).
var oFakeImage = dialog.Selection.GetSelectedElement() ;
var oActiveEl ;
 
if ( oFakeImage )
{
if ( oFakeImage.tagName == 'IMG' && oFakeImage.getAttribute('_fckinputhidden') )
oActiveEl = FCK.GetRealElement( oFakeImage ) ;
else
oFakeImage = null ;
}
 
window.onload = function()
{
// First of all, translate the dialog box texts
oEditor.FCKLanguageManager.TranslatePage(document) ;
 
if ( oActiveEl )
{
GetE('txtName').value = oActiveEl.name ;
GetE('txtValue').value = oActiveEl.value ;
}
 
dialog.SetOkButton( true ) ;
dialog.SetAutoSize( true ) ;
SelectField( 'txtName' ) ;
}
 
 
function Ok()
{
oEditor.FCKUndo.SaveUndoStep() ;
 
oActiveEl = CreateNamedElement( oEditor, oActiveEl, 'INPUT', {name: GetE('txtName').value, type: 'hidden' } ) ;
 
SetAttribute( oActiveEl, 'value', GetE('txtValue').value ) ;
 
if ( !oFakeImage )
{
oFakeImage = oEditor.FCKDocumentProcessor_CreateFakeImage( 'FCK__InputHidden', oActiveEl ) ;
oFakeImage.setAttribute( '_fckinputhidden', 'true', 0 ) ;
 
oActiveEl.parentNode.insertBefore( oFakeImage, oActiveEl ) ;
oActiveEl.parentNode.removeChild( oActiveEl ) ;
}
else
oEditor.FCKUndo.SaveUndoStep() ;
 
return true ;
}
 
</script>
</head>
<body style="overflow: hidden" scroll="no">
<table height="100%" width="100%">
<tr>
<td align="center">
<table border="0" class="inhoud" cellpadding="0" cellspacing="0" width="80%">
<tr>
<td>
<span fcklang="DlgHiddenName">Name</span><br />
<input type="text" size="20" id="txtName" style="width: 100%" />
</td>
</tr>
<tr>
<td>
<span fcklang="DlgHiddenValue">Value</span><br />
<input type="text" size="30" id="txtValue" style="width: 100%" />
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_source.html
New file
0,0 → 1,68
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<!--
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* Source editor dialog window.
-->
<html>
<head>
<title>Source</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="robots" content="noindex, nofollow">
<script src="common/fck_dialog_common.js" type="text/javascript"></script>
<script language="javascript">
 
var oEditor = window.parent.InnerDialogLoaded() ;
var FCK = oEditor.FCK ;
var FCKConfig = oEditor.FCKConfig ;
var FCKTools = oEditor.FCKTools ;
 
document.write( FCKTools.GetStyleHtml( GetCommonDialogCss() ) ) ;
 
window.onload = function()
{
// EnableXHTML and EnableSourceXHTML has been deprecated
// document.getElementById('txtSource').value = ( FCKConfig.EnableXHTML && FCKConfig.EnableSourceXHTML ? FCK.GetXHTML( FCKConfig.FormatSource ) : FCK.GetHTML( FCKConfig.FormatSource ) ) ;
document.getElementById('txtSource').value = FCK.GetXHTML( FCKConfig.FormatSource ) ;
 
// Activate the "OK" button.
window.parent.SetOkButton( true ) ;
}
 
//#### The OK button was hit.
function Ok()
{
if ( oEditor.FCKBrowserInfo.IsIE )
oEditor.FCKUndo.SaveUndoStep() ;
 
FCK.SetData( document.getElementById('txtSource').value, false ) ;
 
return true ;
}
</script>
</head>
<body scroll="no" style="OVERFLOW: hidden">
<table width="100%" height="100%">
<tr>
<td height="100%"><textarea id="txtSource" dir="ltr" style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FONT-SIZE: 14px; PADDING-BOTTOM: 5px; WIDTH: 100%; PADDING-TOP: 5px; FONT-FAMILY: Monospace; HEIGHT: 100%">Loading. Please wait...</textarea></td>
</tr>
</table>
</body>
</html>
/trunk/api/fckeditor/fckeditor/editor/dialog/common/fck_dialog_common.css
New file
0,0 → 1,85
/*
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* This is the CSS file used for interface details in some dialog
* windows.
*/
 
/* #########
* WARNING
* #########
* When changing this file, the minified version of it must be updated in the
* fck_dialog_common.js file (see GetCommonDialogCss).
*/
 
.ImagePreviewArea
{
border: #000000 1px solid;
overflow: auto;
width: 100%;
height: 170px;
background-color: #ffffff;
}
 
.FlashPreviewArea
{
border: #000000 1px solid;
padding: 5px;
overflow: auto;
width: 100%;
height: 170px;
background-color: #ffffff;
}
 
.BtnReset
{
float: left;
background-position: center center;
background-image: url(images/reset.gif);
width: 16px;
height: 16px;
background-repeat: no-repeat;
border: 1px none;
font-size: 1px ;
}
 
.BtnLocked, .BtnUnlocked
{
float: left;
background-position: center center;
background-image: url(images/locked.gif);
width: 16px;
height: 16px;
background-repeat: no-repeat;
border: none 1px;
font-size: 1px ;
}
 
.BtnUnlocked
{
background-image: url(images/unlocked.gif);
}
 
.BtnOver
{
border: outset 1px;
cursor: pointer;
cursor: hand;
}
/trunk/api/fckeditor/fckeditor/editor/dialog/common/fck_dialog_common.js
New file
0,0 → 1,311
/*
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* Useful functions used by almost all dialog window pages.
* Dialogs should link to this file as the very first script on the page.
*/
 
// Automatically detect the correct document.domain (#123).
(function()
{
var d = document.domain ;
 
while ( true )
{
// Test if we can access a parent property.
try
{
var test = window.parent.document.domain ;
break ;
}
catch( e ) {}
 
// Remove a domain part: www.mytest.example.com => mytest.example.com => example.com ...
d = d.replace( /.*?(?:\.|$)/, '' ) ;
 
if ( d.length == 0 )
break ; // It was not able to detect the domain.
 
try
{
document.domain = d ;
}
catch (e)
{
break ;
}
}
})() ;
 
// Attention: FCKConfig must be available in the page.
function GetCommonDialogCss( prefix )
{
// CSS minified by http://iceyboard.no-ip.org/projects/css_compressor (see _dev/css_compression.txt).
return FCKConfig.BasePath + 'dialog/common/' + '|.ImagePreviewArea{border:#000 1px solid;overflow:auto;width:100%;height:170px;background-color:#fff}.FlashPreviewArea{border:#000 1px solid;padding:5px;overflow:auto;width:100%;height:170px;background-color:#fff}.BtnReset{float:left;background-position:center center;background-image:url(images/reset.gif);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.BtnLocked,.BtnUnlocked{float:left;background-position:center center;background-image:url(images/locked.gif);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.BtnUnlocked{background-image:url(images/unlocked.gif)}.BtnOver{border:outset 1px;cursor:pointer;cursor:hand}' ;
}
 
// Gets a element by its Id. Used for shorter coding.
function GetE( elementId )
{
return document.getElementById( elementId ) ;
}
 
function ShowE( element, isVisible )
{
if ( typeof( element ) == 'string' )
element = GetE( element ) ;
element.style.display = isVisible ? '' : 'none' ;
}
 
function SetAttribute( element, attName, attValue )
{
if ( attValue == null || attValue.length == 0 )
element.removeAttribute( attName, 0 ) ; // 0 : Case Insensitive
else
element.setAttribute( attName, attValue, 0 ) ; // 0 : Case Insensitive
}
 
function GetAttribute( element, attName, valueIfNull )
{
var oAtt = element.attributes[attName] ;
 
if ( oAtt == null || !oAtt.specified )
return valueIfNull ? valueIfNull : '' ;
 
var oValue = element.getAttribute( attName, 2 ) ;
 
if ( oValue == null )
oValue = oAtt.nodeValue ;
 
return ( oValue == null ? valueIfNull : oValue ) ;
}
 
function SelectField( elementId )
{
var element = GetE( elementId ) ;
element.focus() ;
 
// element.select may not be available for some fields (like <select>).
if ( element.select )
element.select() ;
}
 
// Functions used by text fields to accept numbers only.
var IsDigit = ( function()
{
var KeyIdentifierMap =
{
End : 35,
Home : 36,
Left : 37,
Right : 39,
'U+00007F' : 46 // Delete
} ;
 
return function ( e )
{
if ( !e )
e = event ;
 
var iCode = ( e.keyCode || e.charCode ) ;
 
if ( !iCode && e.keyIdentifier && ( e.keyIdentifier in KeyIdentifierMap ) )
iCode = KeyIdentifierMap[ e.keyIdentifier ] ;
 
return (
( iCode >= 48 && iCode <= 57 ) // Numbers
|| (iCode >= 35 && iCode <= 40) // Arrows, Home, End
|| iCode == 8 // Backspace
|| iCode == 46 // Delete
|| iCode == 9 // Tab
) ;
}
} )() ;
 
String.prototype.Trim = function()
{
return this.replace( /(^\s*)|(\s*$)/g, '' ) ;
}
 
String.prototype.StartsWith = function( value )
{
return ( this.substr( 0, value.length ) == value ) ;
}
 
String.prototype.Remove = function( start, length )
{
var s = '' ;
 
if ( start > 0 )
s = this.substring( 0, start ) ;
 
if ( start + length < this.length )
s += this.substring( start + length , this.length ) ;
 
return s ;
}
 
String.prototype.ReplaceAll = function( searchArray, replaceArray )
{
var replaced = this ;
 
for ( var i = 0 ; i < searchArray.length ; i++ )
{
replaced = replaced.replace( searchArray[i], replaceArray[i] ) ;
}
 
return replaced ;
}
 
function OpenFileBrowser( url, width, height )
{
// oEditor must be defined.
 
var iLeft = ( oEditor.FCKConfig.ScreenWidth - width ) / 2 ;
var iTop = ( oEditor.FCKConfig.ScreenHeight - height ) / 2 ;
 
var sOptions = "toolbar=no,status=no,resizable=yes,dependent=yes,scrollbars=yes" ;
sOptions += ",width=" + width ;
sOptions += ",height=" + height ;
sOptions += ",left=" + iLeft ;
sOptions += ",top=" + iTop ;
 
window.open( url, 'FCKBrowseWindow', sOptions ) ;
}
 
/**
Utility function to create/update an element with a name attribute in IE, so it behaves properly when moved around
It also allows to change the name or other special attributes in an existing node
oEditor : instance of FCKeditor where the element will be created
oOriginal : current element being edited or null if it has to be created
nodeName : string with the name of the element to create
oAttributes : Hash object with the attributes that must be set at creation time in IE
Those attributes will be set also after the element has been
created for any other browser to avoid redudant code
*/
function CreateNamedElement( oEditor, oOriginal, nodeName, oAttributes )
{
var oNewNode ;
 
// IE doesn't allow easily to change properties of an existing object,
// so remove the old and force the creation of a new one.
var oldNode = null ;
if ( oOriginal && oEditor.FCKBrowserInfo.IsIE )
{
// Force the creation only if some of the special attributes have changed:
var bChanged = false;
for( var attName in oAttributes )
bChanged |= ( oOriginal.getAttribute( attName, 2) != oAttributes[attName] ) ;
 
if ( bChanged )
{
oldNode = oOriginal ;
oOriginal = null ;
}
}
 
// If the node existed (and it's not IE), then we just have to update its attributes
if ( oOriginal )
{
oNewNode = oOriginal ;
}
else
{
// #676, IE doesn't play nice with the name or type attribute
if ( oEditor.FCKBrowserInfo.IsIE )
{
var sbHTML = [] ;
sbHTML.push( '<' + nodeName ) ;
for( var prop in oAttributes )
{
sbHTML.push( ' ' + prop + '="' + oAttributes[prop] + '"' ) ;
}
sbHTML.push( '>' ) ;
if ( !oEditor.FCKListsLib.EmptyElements[nodeName.toLowerCase()] )
sbHTML.push( '</' + nodeName + '>' ) ;
 
oNewNode = oEditor.FCK.EditorDocument.createElement( sbHTML.join('') ) ;
// Check if we are just changing the properties of an existing node: copy its properties
if ( oldNode )
{
CopyAttributes( oldNode, oNewNode, oAttributes ) ;
oEditor.FCKDomTools.MoveChildren( oldNode, oNewNode ) ;
oldNode.parentNode.removeChild( oldNode ) ;
oldNode = null ;
 
if ( oEditor.FCK.Selection.SelectionData )
{
// Trick to refresh the selection object and avoid error in
// fckdialog.html Selection.EnsureSelection
var oSel = oEditor.FCK.EditorDocument.selection ;
oEditor.FCK.Selection.SelectionData = oSel.createRange() ; // Now oSel.type will be 'None' reflecting the real situation
}
}
oNewNode = oEditor.FCK.InsertElement( oNewNode ) ;
 
// FCK.Selection.SelectionData is broken by now since we've
// deleted the previously selected element. So we need to reassign it.
if ( oEditor.FCK.Selection.SelectionData )
{
var range = oEditor.FCK.EditorDocument.body.createControlRange() ;
range.add( oNewNode ) ;
oEditor.FCK.Selection.SelectionData = range ;
}
}
else
{
oNewNode = oEditor.FCK.InsertElement( nodeName ) ;
}
}
 
// Set the basic attributes
for( var attName in oAttributes )
oNewNode.setAttribute( attName, oAttributes[attName], 0 ) ; // 0 : Case Insensitive
 
return oNewNode ;
}
 
// Copy all the attributes from one node to the other, kinda like a clone
// But oSkipAttributes is an object with the attributes that must NOT be copied
function CopyAttributes( oSource, oDest, oSkipAttributes )
{
var aAttributes = oSource.attributes ;
 
for ( var n = 0 ; n < aAttributes.length ; n++ )
{
var oAttribute = aAttributes[n] ;
 
if ( oAttribute.specified )
{
var sAttName = oAttribute.nodeName ;
// We can set the type only once, so do it with the proper value, not copying it.
if ( sAttName in oSkipAttributes )
continue ;
 
var sAttValue = oSource.getAttribute( sAttName, 2 ) ;
if ( sAttValue == null )
sAttValue = oAttribute.nodeValue ;
 
oDest.setAttribute( sAttName, sAttValue, 0 ) ; // 0 : Case Insensitive
}
}
// The style:
oDest.style.cssText = oSource.style.cssText ;
}
/trunk/api/fckeditor/fckeditor/editor/dialog/common/images/locked.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/fckeditor/fckeditor/editor/dialog/common/images/locked.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/fckeditor/fckeditor/editor/dialog/common/images/reset.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/fckeditor/fckeditor/editor/dialog/common/images/reset.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/fckeditor/fckeditor/editor/dialog/common/images/unlocked.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/fckeditor/fckeditor/editor/dialog/common/images/unlocked.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_smiley.html
New file
0,0 → 1,111
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<!--
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* Smileys (emoticons) dialog window.
-->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="robots" content="noindex, nofollow" />
<style type="text/css">
.Hand
{
cursor: pointer;
cursor: hand;
}
</style>
<script src="common/fck_dialog_common.js" type="text/javascript"></script>
<script type="text/javascript">
 
var dialog = window.parent ;
var oEditor = dialog.InnerDialogLoaded() ;
 
window.onload = function ()
{
// First of all, translate the dialog box texts
oEditor.FCKLanguageManager.TranslatePage(document) ;
 
dialog.SetAutoSize( true ) ;
}
 
function InsertSmiley( url )
{
oEditor.FCKUndo.SaveUndoStep() ;
 
var oImg = oEditor.FCK.InsertElement( 'img' ) ;
oImg.src = url ;
oImg.setAttribute( '_fcksavedurl', url ) ;
 
// For long smileys list, it seams that IE continues loading the images in
// the background when you quickly select one image. so, let's clear
// everything before closing.
document.body.innerHTML = '' ;
 
dialog.Cancel() ;
}
 
function over(td)
{
td.className = 'LightBackground Hand' ;
}
 
function out(td)
{
td.className = 'DarkBackground Hand' ;
}
</script>
</head>
<body style="overflow: hidden">
<table cellpadding="2" cellspacing="2" align="center" border="0" width="100%" height="100%">
<script type="text/javascript">
 
var FCKConfig = oEditor.FCKConfig ;
 
var sBasePath = FCKConfig.SmileyPath ;
var aImages = FCKConfig.SmileyImages ;
var iCols = FCKConfig.SmileyColumns ;
var iColWidth = parseInt( 100 / iCols, 10 ) ;
 
var i = 0 ;
while (i < aImages.length)
{
document.write( '<tr>' ) ;
for(var j = 0 ; j < iCols ; j++)
{
if (aImages[i])
{
var sUrl = sBasePath + aImages[i] ;
document.write( '<td width="' + iColWidth + '%" align="center" class="DarkBackground Hand" onclick="InsertSmiley(\'' + sUrl.replace(/'/g, "\\'" ) + '\')" onmouseover="over(this)" onmouseout="out(this)">' ) ;
document.write( '<img src="' + sUrl + '" border="0" />' ) ;
}
else
document.write( '<td width="' + iColWidth + '%" class="DarkBackground">&nbsp;' ) ;
document.write( '<\/td>' ) ;
i++ ;
}
document.write('<\/tr>') ;
}
 
</script>
</table>
</body>
</html>
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_template/images/template2.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_template/images/template2.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_template/images/template3.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_template/images/template3.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_template/images/template1.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_template/images/template1.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_listprop.html
New file
0,0 → 1,120
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<!--
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* Bulleted List dialog window.
-->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta content="noindex, nofollow" name="robots" />
<script src="common/fck_dialog_common.js" type="text/javascript"></script>
<script type="text/javascript">
 
var dialog = window.parent ;
var oEditor = dialog.InnerDialogLoaded() ;
 
// Gets the document DOM
var oDOM = oEditor.FCK.EditorDocument ;
var sListType = ( location.search == '?OL' ? 'OL' : 'UL' ) ;
 
var oActiveEl = dialog.Selection.GetSelection().MoveToAncestorNode( sListType ) ;
var oActiveSel ;
 
window.onload = function()
{
// First of all, translate the dialog box texts
oEditor.FCKLanguageManager.TranslatePage(document) ;
 
if ( sListType == 'UL' )
oActiveSel = GetE('selBulleted') ;
else
{
if ( oActiveEl )
{
oActiveSel = GetE('selNumbered') ;
GetE('eStart').style.display = '' ;
GetE('txtStartPosition').value = GetAttribute( oActiveEl, 'start' ) ;
}
}
 
oActiveSel.style.display = '' ;
 
if ( oActiveEl )
{
if ( oActiveEl.getAttribute('type') )
oActiveSel.value = oActiveEl.getAttribute('type') ;
}
 
dialog.SetOkButton( true ) ;
dialog.SetAutoSize( true ) ;
 
SelectField( sListType == 'OL' ? 'txtStartPosition' : 'selBulleted' ) ;
}
 
function Ok()
{
if ( oActiveEl ){
SetAttribute( oActiveEl, 'type' , oActiveSel.value ) ;
if(oActiveEl.tagName == 'OL')
SetAttribute( oActiveEl, 'start', GetE('txtStartPosition').value ) ;
}
 
return true ;
}
 
</script>
</head>
<body style="overflow: hidden">
<table width="100%" style="height: 100%">
<tr>
<td style="text-align:center">
<table cellspacing="0" cellpadding="0" border="0" style="margin-left: auto; margin-right: auto;">
<tr>
<td id="eStart" style="display: none; padding-right: 5px; padding-left: 5px">
<span fcklang="DlgLstStart">Start</span><br />
<input type="text" id="txtStartPosition" size="5" />
</td>
<td style="padding-right: 5px; padding-left: 5px">
<span fcklang="DlgLstType">List Type</span><br />
<select id="selBulleted" style="display: none">
<option value="" selected="selected"></option>
<option value="circle" fcklang="DlgLstTypeCircle">Circle</option>
<option value="disc" fcklang="DlgLstTypeDisc">Disc</option>
<option value="square" fcklang="DlgLstTypeSquare">Square</option>
</select>
<select id="selNumbered" style="display: none">
<option value="" selected="selected"></option>
<option value="1" fcklang="DlgLstTypeNumbers">Numbers (1, 2, 3)</option>
<option value="a" fcklang="DlgLstTypeLCase">Lowercase Letters (a, b, c)</option>
<option value="A" fcklang="DlgLstTypeUCase">Uppercase Letters (A, B, C)</option>
<option value="i" fcklang="DlgLstTypeSRoman">Small Roman Numerals (i, ii, iii)</option>
<option value="I" fcklang="DlgLstTypeLRoman">Large Roman Numerals (I, II, III)</option>
</select>
&nbsp;
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_select/fck_select.js
New file
0,0 → 1,194
/*
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* Scripts for the fck_select.html page.
*/
 
function Select( combo )
{
var iIndex = combo.selectedIndex ;
 
oListText.selectedIndex = iIndex ;
oListValue.selectedIndex = iIndex ;
 
var oTxtText = document.getElementById( "txtText" ) ;
var oTxtValue = document.getElementById( "txtValue" ) ;
 
oTxtText.value = oListText.value ;
oTxtValue.value = oListValue.value ;
}
 
function Add()
{
var oTxtText = document.getElementById( "txtText" ) ;
var oTxtValue = document.getElementById( "txtValue" ) ;
 
AddComboOption( oListText, oTxtText.value, oTxtText.value ) ;
AddComboOption( oListValue, oTxtValue.value, oTxtValue.value ) ;
 
oListText.selectedIndex = oListText.options.length - 1 ;
oListValue.selectedIndex = oListValue.options.length - 1 ;
 
oTxtText.value = '' ;
oTxtValue.value = '' ;
 
oTxtText.focus() ;
}
 
function Modify()
{
var iIndex = oListText.selectedIndex ;
 
if ( iIndex < 0 ) return ;
 
var oTxtText = document.getElementById( "txtText" ) ;
var oTxtValue = document.getElementById( "txtValue" ) ;
 
oListText.options[ iIndex ].innerHTML = HTMLEncode( oTxtText.value ) ;
oListText.options[ iIndex ].value = oTxtText.value ;
 
oListValue.options[ iIndex ].innerHTML = HTMLEncode( oTxtValue.value ) ;
oListValue.options[ iIndex ].value = oTxtValue.value ;
 
oTxtText.value = '' ;
oTxtValue.value = '' ;
 
oTxtText.focus() ;
}
 
function Move( steps )
{
ChangeOptionPosition( oListText, steps ) ;
ChangeOptionPosition( oListValue, steps ) ;
}
 
function Delete()
{
RemoveSelectedOptions( oListText ) ;
RemoveSelectedOptions( oListValue ) ;
}
 
function SetSelectedValue()
{
var iIndex = oListValue.selectedIndex ;
if ( iIndex < 0 ) return ;
 
var oTxtValue = document.getElementById( "txtSelValue" ) ;
 
oTxtValue.value = oListValue.options[ iIndex ].value ;
}
 
// Moves the selected option by a number of steps (also negative)
function ChangeOptionPosition( combo, steps )
{
var iActualIndex = combo.selectedIndex ;
 
if ( iActualIndex < 0 )
return ;
 
var iFinalIndex = iActualIndex + steps ;
 
if ( iFinalIndex < 0 )
iFinalIndex = 0 ;
 
if ( iFinalIndex > ( combo.options.length - 1 ) )
iFinalIndex = combo.options.length - 1 ;
 
if ( iActualIndex == iFinalIndex )
return ;
 
var oOption = combo.options[ iActualIndex ] ;
var sText = HTMLDecode( oOption.innerHTML ) ;
var sValue = oOption.value ;
 
combo.remove( iActualIndex ) ;
 
oOption = AddComboOption( combo, sText, sValue, null, iFinalIndex ) ;
 
oOption.selected = true ;
}
 
// Remove all selected options from a SELECT object
function RemoveSelectedOptions(combo)
{
// Save the selected index
var iSelectedIndex = combo.selectedIndex ;
 
var oOptions = combo.options ;
 
// Remove all selected options
for ( var i = oOptions.length - 1 ; i >= 0 ; i-- )
{
if (oOptions[i].selected) combo.remove(i) ;
}
 
// Reset the selection based on the original selected index
if ( combo.options.length > 0 )
{
if ( iSelectedIndex >= combo.options.length ) iSelectedIndex = combo.options.length - 1 ;
combo.selectedIndex = iSelectedIndex ;
}
}
 
// Add a new option to a SELECT object (combo or list)
function AddComboOption( combo, optionText, optionValue, documentObject, index )
{
var oOption ;
 
if ( documentObject )
oOption = documentObject.createElement("OPTION") ;
else
oOption = document.createElement("OPTION") ;
 
if ( index != null )
combo.options.add( oOption, index ) ;
else
combo.options.add( oOption ) ;
 
oOption.innerHTML = optionText.length > 0 ? HTMLEncode( optionText ) : '&nbsp;' ;
oOption.value = optionValue ;
 
return oOption ;
}
 
function HTMLEncode( text )
{
if ( !text )
return '' ;
 
text = text.replace( /&/g, '&amp;' ) ;
text = text.replace( /</g, '&lt;' ) ;
text = text.replace( />/g, '&gt;' ) ;
 
return text ;
}
 
 
function HTMLDecode( text )
{
if ( !text )
return '' ;
 
text = text.replace( /&gt;/g, '>' ) ;
text = text.replace( /&lt;/g, '<' ) ;
text = text.replace( /&amp;/g, '&' ) ;
 
return text ;
}
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_textarea.html
New file
0,0 → 1,94
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<!--
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* Text Area dialog window.
-->
<html>
<head>
<title>Text Area Properties</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta content="noindex, nofollow" name="robots">
<script src="common/fck_dialog_common.js" type="text/javascript"></script>
<script type="text/javascript">
 
var dialog = window.parent ;
var oEditor = dialog.InnerDialogLoaded() ;
 
// Gets the document DOM
var oDOM = oEditor.FCK.EditorDocument ;
 
var oActiveEl = dialog.Selection.GetSelectedElement() ;
 
window.onload = function()
{
// First of all, translate the dialog box texts
oEditor.FCKLanguageManager.TranslatePage(document) ;
 
if ( oActiveEl && oActiveEl.tagName == 'TEXTAREA' )
{
GetE('txtName').value = oActiveEl.name ;
GetE('txtCols').value = GetAttribute( oActiveEl, 'cols' ) ;
GetE('txtRows').value = GetAttribute( oActiveEl, 'rows' ) ;
}
else
oActiveEl = null ;
 
dialog.SetOkButton( true ) ;
dialog.SetAutoSize( true ) ;
SelectField( 'txtName' ) ;
}
 
function Ok()
{
oEditor.FCKUndo.SaveUndoStep() ;
 
oActiveEl = CreateNamedElement( oEditor, oActiveEl, 'TEXTAREA', {name: GetE('txtName').value} ) ;
 
SetAttribute( oActiveEl, 'cols', GetE('txtCols').value ) ;
SetAttribute( oActiveEl, 'rows', GetE('txtRows').value ) ;
 
return true ;
}
 
</script>
</head>
<body style="overflow: hidden">
<table height="100%" width="100%">
<tr>
<td align="center">
<table border="0" cellpadding="0" cellspacing="0" width="80%">
<tr>
<td>
<span fckLang="DlgTextareaName">Name</span><br>
<input type="text" id="txtName" style="WIDTH: 100%">
<span fckLang="DlgTextareaCols">Collumns</span><br>
<input id="txtCols" type="text" size="5">
<br>
<span fckLang="DlgTextareaRows">Rows</span><br>
<input id="txtRows" type="text" size="5">
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_div.html
New file
0,0 → 1,364
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<!--
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* Form dialog window.
-->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta content="noindex, nofollow" name="robots" />
<script src="common/fck_dialog_common.js" type="text/javascript"></script>
<script type="text/javascript">
var dialog = window.parent ;
var oEditor = dialog.InnerDialogLoaded() ;
var FCK = oEditor.FCK ;
var FCKLang = oEditor.FCKLang ;
var FCKBrowserInfo = oEditor.FCKBrowserInfo ;
var FCKStyles = oEditor.FCKStyles ;
var FCKElementPath = oEditor.FCKElementPath ;
var FCKDomRange = oEditor.FCKDomRange ;
var FCKDomTools = oEditor.FCKDomTools ;
var FCKDomRangeIterator = oEditor.FCKDomRangeIterator ;
var FCKListsLib = oEditor.FCKListsLib ;
var AlwaysCreate = dialog.Args().CustomValue ;
 
String.prototype.IEquals = function()
{
var thisUpper = this.toUpperCase() ;
 
var aArgs = arguments ;
 
// The arguments could also be a single array.
if ( aArgs.length == 1 && aArgs[0].pop )
aArgs = aArgs[0] ;
 
for ( var i = 0 ; i < aArgs.length ; i++ )
{
if ( thisUpper == aArgs[i].toUpperCase() )
return true ;
}
return false ;
}
 
var CurrentContainers = [] ;
if ( !AlwaysCreate )
{
dialog.Selection.EnsureSelection() ;
CurrentContainers = FCKDomTools.GetSelectedDivContainers() ;
}
 
// Add some tabs
dialog.AddTab( 'General', FCKLang.DlgDivGeneralTab );
dialog.AddTab( 'Advanced', FCKLang.DlgDivAdvancedTab ) ;
 
function AddStyleOption( styleName )
{
var el = GetE( 'selStyle' ) ;
var opt = document.createElement( 'option' ) ;
opt.text = opt.value = styleName ;
 
if ( FCKBrowserInfo.IsIE )
el.add( opt ) ;
else
el.add( opt, null ) ;
}
 
function OnDialogTabChange( tabCode )
{
ShowE( 'divGeneral', tabCode == 'General' ) ;
ShowE( 'divAdvanced', tabCode == 'Advanced' ) ;
dialog.SetAutoSize( true ) ;
}
 
function GetNearestAncestorDirection( node )
{
var dir = 'ltr' ; // HTML default.
while ( ( node = node.parentNode ) )
{
if ( node.dir )
dir = node.dir ;
}
return dir ;
}
 
window.onload = function()
{
// First of all, translate the dialog box texts
oEditor.FCKLanguageManager.TranslatePage(document) ;
 
dialog.SetOkButton( true ) ;
dialog.SetAutoSize( true ) ;
 
// Popuplate the style menu
var styles = FCKStyles.GetStyles() ;
var selectableStyles = {} ;
for ( var i in styles )
{
if ( ! /^_FCK_/.test( i ) && styles[i].Element == 'div' )
selectableStyles[i] = styles[i] ;
}
if ( CurrentContainers.length <= 1 )
{
var target = CurrentContainers[0] ;
var match = null ;
for ( var i in selectableStyles )
{
if ( target && styles[i].CheckElementRemovable( target, true ) )
match = i ;
}
if ( !match )
AddStyleOption( "" ) ;
for ( var i in selectableStyles )
AddStyleOption( i ) ;
if ( match )
GetE( 'selStyle' ).value = match ;
 
// Set the value for other inputs
if ( target )
{
GetE( 'txtClass' ).value = target.className ;
GetE( 'txtId' ).value = target.id ;
GetE( 'txtLang' ).value = target.lang ;
GetE( 'txtInlineStyle').value = target.style.cssText ;
GetE( 'txtTitle' ).value = target.title ;
GetE( 'selLangDir').value = target.dir || GetNearestAncestorDirection( target ) ;
}
}
else
{
GetE( 'txtId' ).disabled = true ;
AddStyleOption( "" ) ;
for ( var i in selectableStyles )
AddStyleOption( i ) ;
}
}
 
function CreateDiv()
{
var newBlocks = [] ;
var range = new FCKDomRange( FCK.EditorWindow ) ;
range.MoveToSelection() ;
 
var bookmark = range.CreateBookmark() ;
 
// Kludge for #1592: if the bookmark nodes are in the beginning of
// $tagName, then move them to the nearest block element in the
// $tagName.
if ( FCKBrowserInfo.IsIE )
{
var bStart = range.GetBookmarkNode( bookmark, true ) ;
var bEnd = range.GetBookmarkNode( bookmark, false ) ;
 
var cursor ;
 
if ( bStart
&& bStart.parentNode.nodeName.IEquals( 'div' )
&& !bStart.previousSibling )
{
cursor = bStart ;
while ( ( cursor = cursor.nextSibling ) )
{
if ( FCKListsLib.BlockElements[ cursor.nodeName.toLowerCase() ] )
FCKDomTools.MoveNode( bStart, cursor, true ) ;
}
}
 
if ( bEnd
&& bEnd.parentNode.nodeName.IEquals( 'div' )
&& !bEnd.previousSibling )
{
cursor = bEnd ;
while ( ( cursor = cursor.nextSibling ) )
{
if ( FCKListsLib.BlockElements[ cursor.nodeName.toLowerCase() ] )
{
if ( cursor.firstChild == bStart )
FCKDomTools.InsertAfterNode( bStart, bEnd ) ;
else
FCKDomTools.MoveNode( bEnd, cursor, true ) ;
}
}
}
}
 
var iterator = new FCKDomRangeIterator( range ) ;
var block ;
 
iterator.EnforceRealBlocks = true ;
var paragraphs = [] ;
var groups = [] ;
var lastBlockLimit = null ;
while ( ( block = iterator.GetNextParagraph() ) )
{
var elementPath = new FCKElementPath( block ) ;
if ( elementPath.BlockLimit != lastBlockLimit )
{
groups.push( [] ) ;
lastBlockLimit = elementPath.BlockLimit ;
}
groups[groups.length - 1].push( block ) ;
}
 
for ( var i = 0 ; i < groups.length ; i++ )
{
var divNode = FCK.EditorDocument.createElement( 'div' ) ;
groups[i][0].parentNode.insertBefore( divNode, groups[i][0] ) ;
for ( var j = 0 ; j < groups[i].length ; j++ )
FCKDomTools.MoveNode( groups[i][j], divNode ) ;
newBlocks.push( divNode ) ;
}
 
range.MoveToBookmark( bookmark ) ;
range.Select() ;
 
FCK.Focus() ;
FCK.Events.FireEvent( 'OnSelectionChange' ) ;
 
return newBlocks ;
}
 
function Ok()
{
oEditor.FCKUndo.SaveUndoStep() ;
 
if ( CurrentContainers.length < 1 )
CurrentContainers = CreateDiv();
 
var setValue = function( attrName, inputName )
{
var val = GetE( inputName ).value ;
for ( var i = 0 ; i < CurrentContainers.length ; i++ )
{
if ( val == '' )
CurrentContainers[i].removeAttribute( attrName ) ;
else
CurrentContainers[i].setAttribute( attrName, val ) ;
}
}
 
// Apply modifications to the DIV container according to dialog inputs.
if ( CurrentContainers.length == 1 )
{
setValue( 'class', 'txtClass' ) ;
setValue( 'id', 'txtId' ) ;
}
setValue( 'lang', 'txtLang' ) ;
if ( FCKBrowserInfo.IsIE )
{
for ( var i = 0 ; i < CurrentContainers.length ; i++ )
CurrentContainers[i].style.cssText = GetE( 'txtInlineStyle' ).value ;
}
else
setValue( 'style', 'txtInlineStyle' ) ;
setValue( 'title', 'txtTitle' ) ;
for ( var i = 0 ; i < CurrentContainers.length ; i++ )
{
var dir = GetE( 'selLangDir' ).value ;
var styleName = GetE( 'selStyle' ).value ;
if ( GetNearestAncestorDirection( CurrentContainers[i] ) != dir )
CurrentContainers[i].dir = dir ;
else
CurrentContainers[i].removeAttribute( 'dir' ) ;
 
if ( styleName )
FCKStyles.GetStyle( styleName ).ApplyToObject( CurrentContainers[i] ) ;
}
 
return true ;
}
 
</script>
</head>
<body style="overflow: hidden">
<div id="divGeneral">
<table cellspacing="0" cellpadding="0" width="100%" border="0">
<colgroup span="2">
<col width="49%" />
<col width="2%" />
<col width="49%" />
</colgroup>
<tr>
<td>
<span fcklang="DlgDivStyle">Style</span><br />
<select id="selStyle" style="width: 100%;">
</select>
</td>
<td>&nbsp;</td>
<td>
<span fcklang="DlgGenClass">Stylesheet Classes</span><br />
<input id="txtClass" style="width: 100%" type="text" />
</td>
</tr>
</table>
</div>
<div id="divAdvanced" style="display: none">
<table cellspacing="0" cellpadding="0" width="100%" border="0">
<colgroup span="2">
<col width="49%" />
<col width="2%" />
<col width="49%" />
</colgroup>
<tr>
<td>
<span fcklang="DlgGenId">Id</span><br />
<input style="width: 100%" type="text" id="txtId" />
</td>
<td>&nbsp;</td>
<td>
<span fcklang="DlgGenLangCode">Language Code</span><br />
<input style="width: 100%" type="text" id="txtLang" />
</td>
</tr>
<tr>
<td colspan="3">&nbsp;</td>
</tr>
<tr>
<td colspan="3">
<span fcklang="DlgDivInlineStyle">Inline Style</span><br />
<input style="width: 100%" type="text" id="txtInlineStyle" />
</td>
</tr>
<tr>
<td colspan="3">&nbsp;</td>
</tr>
<tr>
<td colspan="3">
<span fcklang="DlgGenTitle">Advisory Title</span><br />
<input style="width: 100%" type="text" id="txtTitle" />
</td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
<tr>
<td>
<span fcklang="DlgGenLangDir">Language Direction</span><br />
<select id="selLangDir">
<option fcklang="DlgGenLangDirLtr" value="ltr">Left to Right (LTR)
<option fcklang="DlgGenLangDirRtl" value="rtl">Right to Left (RTL)
</select>
</td>
</tr>
</table>
</div>
</body>
</html>
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_spellerpages/spellerpages/blank.html
--- fck_spellerpages/spellerpages/server-scripts/spellchecker.php (revision 0)
+++ fck_spellerpages/spellerpages/server-scripts/spellchecker.php (revision 1925)
@@ -0,0 +1,199 @@
+<?php
+header('Content-type: text/html; charset=utf-8');
+
+// The following variables values must reflect your installation needs.
+
+$aspell_prog = '"C:\Program Files\Aspell\bin\aspell.exe"'; // by FredCK (for Windows)
+//$aspell_prog = 'aspell'; // by FredCK (for Linux)
+
+$lang = 'en_US';
+$aspell_opts = "-a --lang=$lang --encoding=utf-8 -H --rem-sgml-check=alt"; // by FredCK
+
+$tempfiledir = "./";
+
+$spellercss = '../spellerStyle.css'; // by FredCK
+$word_win_src = '../wordWindow.js'; // by FredCK
+
+$textinputs = $_POST['textinputs']; # array
+$input_separator = "A";
+
+# set the JavaScript variable to the submitted text.
+# textinputs is an array, each element corresponding to the (url-encoded)
+# value of the text control submitted for spell-checking
+function print_textinputs_var() {
+ global $textinputs;
+ foreach( $textinputs as $key=>$val ) {
+ # $val = str_replace( "'", "%27", $val );
+ echo "textinputs[$key] = decodeURIComponent(\"" . $val . "\");\n";
+ }
+}
+
+# make declarations for the text input index
+function print_textindex_decl( $text_input_idx ) {
+ echo "words[$text_input_idx] = [];\n";
+ echo "suggs[$text_input_idx] = [];\n";
+}
+
+# set an element of the JavaScript 'words' array to a misspelled word
+function print_words_elem( $word, $index, $text_input_idx ) {
+ echo "words[$text_input_idx][$index] = '" . escape_quote( $word ) . "';\n";
+}
+
+
+# set an element of the JavaScript 'suggs' array to a list of suggestions
+function print_suggs_elem( $suggs, $index, $text_input_idx ) {
+ echo "suggs[$text_input_idx][$index] = [";
+ foreach( $suggs as $key=>$val ) {
+ if( $val ) {
+ echo "'" . escape_quote( $val ) . "'";
+ if ( $key+1 < count( $suggs )) {
+ echo ", ";
+ }
+ }
+ }
+ echo "];\n";
+}
+
+# escape single quote
+function escape_quote( $str ) {
+ return preg_replace ( "/'/", "\\'", $str );
+}
+
+
+# handle a server-side error.
+function error_handler( $err ) {
+ echo "error = '" . preg_replace( "/['\\\\]/", "\\\\$0", $err ) . "';\n";
+}
+
+## get the list of misspelled words. Put the results in the javascript words array
+## for each misspelled word, get suggestions and put in the javascript suggs array
+function print_checker_results() {
+
+ global $aspell_prog;
+ global $aspell_opts;
+ global $tempfiledir;
+ global $textinputs;
+ global $input_separator;
+ $aspell_err = "";
+ # create temp file
+ $tempfile = tempnam( $tempfiledir, 'aspell_data_' );
+
+ # open temp file, add the submitted text.
+ if( $fh = fopen( $tempfile, 'w' )) {
+ for( $i = 0; $i < count( $textinputs ); $i++ ) {
+ $text = urldecode( $textinputs[$i] );
+
+ // Strip all tags for the text. (by FredCK - #339 / #681)
+ $text = preg_replace( "/<[^>]+>/", " ", $text ) ;
+
+ $lines = explode( "\n", $text );
+ fwrite ( $fh, "%\n" ); # exit terse mode
+ fwrite ( $fh, "^$input_separator\n" );
+ fwrite ( $fh, "!\n" ); # enter terse mode
+ foreach( $lines as $key=>$value ) {
+ # use carat on each line to escape possible aspell commands
+ fwrite( $fh, "^$value\n" );
+ }
+ }
+ fclose( $fh );
+
+ # exec aspell command - redirect STDERR to STDOUT
+ $cmd = "$aspell_prog $aspell_opts < $tempfile 2>&1";
+ if( $aspellret = shell_exec( $cmd )) {
+ $linesout = explode( "\n", $aspellret );
+ $index = 0;
+ $text_input_index = -1;
+ # parse each line of aspell return
+ foreach( $linesout as $key=>$val ) {
+ $chardesc = substr( $val, 0, 1 );
+ # if '&', then not in dictionary but has suggestions
+ # if '#', then not in dictionary and no suggestions
+ # if '*', then it is a delimiter between text inputs
+ # if '@' then version info
+ if( $chardesc == '&' || $chardesc == '#' ) {
+ $line = explode( " ", $val, 5 );
+ print_words_elem( $line[1], $index, $text_input_index );
+ if( isset( $line[4] )) {
+ $suggs = explode( ", ", $line[4] );
+ } else {
+ $suggs = array();
+ }
+ print_suggs_elem( $suggs, $index, $text_input_index );
+ $index++;
+ } elseif( $chardesc == '*' ) {
+ $text_input_index++;
+ print_textindex_decl( $text_input_index );
+ $index = 0;
+ } elseif( $chardesc != '@' && $chardesc != "" ) {
+ # assume this is error output
+ $aspell_err .= $val;
+ }
+ }
+ if( $aspell_err ) {
+ $aspell_err = "Error executing `$cmd`\\n$aspell_err";
+ error_handler( $aspell_err );
+ }
+ } else {
+ error_handler( "System error: Aspell program execution failed (`$cmd`)" );
+ }
+ } else {
+ error_handler( "System error: Could not open file '$tempfile' for writing" );
+ }
+
+ # close temp file, delete file
+ unlink( $tempfile );
+}
+
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="<?php echo $spellercss ?>" />
+<script language="javascript" src="<?php echo $word_win_src ?>"></script>
+<script language="javascript">
+var suggs = new Array();
+var words = new Array();
+var textinputs = new Array();
+var error;
+<?php
+
+print_textinputs_var();
+
+print_checker_results();
+
+?>
+
+var wordWindowObj = new wordWindow();
+wordWindowObj.originalSpellings = words;
+wordWindowObj.suggestions = suggs;
+wordWindowObj.textInputs = textinputs;
+
+function init_spell() {
+ // check if any error occured during server-side processing
+ if( error ) {
+ alert( error );
+ } else {
+ // call the init_spell() function in the parent frameset
+ if (parent.frames.length) {
+ parent.init_spell( wordWindowObj );
+ } else {
+ alert('This page was loaded outside of a frameset. It might not display properly');
+ }
+ }
+}
+
+
+
+</script>
+
+</head>
+<!-- <body onLoad="init_spell();"> by FredCK -->
+<body onLoad="init_spell();" bgcolor="#ffffff">
+
+<script type="text/javascript">
+wordWindowObj.writeBody();
+</script>
+
+</body>
+</html>
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellerStyle.css
New file
0,0 → 1,49
.blend {
font-family: courier new;
font-size: 10pt;
border: 0;
margin-bottom:-1;
}
.normalLabel {
font-size:8pt;
}
.normalText {
font-family:arial, helvetica, sans-serif;
font-size:10pt;
color:000000;
background-color:FFFFFF;
}
.plainText {
font-family: courier new, courier, monospace;
font-size: 10pt;
color:000000;
background-color:FFFFFF;
}
.controlWindowBody {
font-family:arial, helvetica, sans-serif;
font-size:8pt;
padding: 7px ; /* by FredCK */
margin: 0px ; /* by FredCK */
/* color:000000; by FredCK */
/* background-color:DADADA; by FredCK */
}
.readonlyInput {
background-color:DADADA;
color:000000;
font-size:8pt;
width:392px;
}
.textDefault {
font-size:8pt;
width: 200px;
}
.buttonDefault {
width:90px;
height:22px;
font-size:8pt;
}
.suggSlct {
width:200px;
margin-top:2;
font-size:8pt;
}
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_spellerpages/spellerpages/wordWindow.js
New file
0,0 → 1,272
////////////////////////////////////////////////////
// wordWindow object
////////////////////////////////////////////////////
function wordWindow() {
// private properties
this._forms = [];
 
// private methods
this._getWordObject = _getWordObject;
//this._getSpellerObject = _getSpellerObject;
this._wordInputStr = _wordInputStr;
this._adjustIndexes = _adjustIndexes;
this._isWordChar = _isWordChar;
this._lastPos = _lastPos;
 
// public properties
this.wordChar = /[a-zA-Z]/;
this.windowType = "wordWindow";
this.originalSpellings = new Array();
this.suggestions = new Array();
this.checkWordBgColor = "pink";
this.normWordBgColor = "white";
this.text = "";
this.textInputs = new Array();
this.indexes = new Array();
//this.speller = this._getSpellerObject();
 
// public methods
this.resetForm = resetForm;
this.totalMisspellings = totalMisspellings;
this.totalWords = totalWords;
this.totalPreviousWords = totalPreviousWords;
//this.getTextObjectArray = getTextObjectArray;
this.getTextVal = getTextVal;
this.setFocus = setFocus;
this.removeFocus = removeFocus;
this.setText = setText;
//this.getTotalWords = getTotalWords;
this.writeBody = writeBody;
this.printForHtml = printForHtml;
}
 
function resetForm() {
if( this._forms ) {
for( var i = 0; i < this._forms.length; i++ ) {
this._forms[i].reset();
}
}
return true;
}
 
function totalMisspellings() {
var total_words = 0;
for( var i = 0; i < this.textInputs.length; i++ ) {
total_words += this.totalWords( i );
}
return total_words;
}
 
function totalWords( textIndex ) {
return this.originalSpellings[textIndex].length;
}
 
function totalPreviousWords( textIndex, wordIndex ) {
var total_words = 0;
for( var i = 0; i <= textIndex; i++ ) {
for( var j = 0; j < this.totalWords( i ); j++ ) {
if( i == textIndex && j == wordIndex ) {
break;
} else {
total_words++;
}
}
}
return total_words;
}
 
//function getTextObjectArray() {
// return this._form.elements;
//}
 
function getTextVal( textIndex, wordIndex ) {
var word = this._getWordObject( textIndex, wordIndex );
if( word ) {
return word.value;
}
}
 
function setFocus( textIndex, wordIndex ) {
var word = this._getWordObject( textIndex, wordIndex );
if( word ) {
if( word.type == "text" ) {
word.focus();
word.style.backgroundColor = this.checkWordBgColor;
}
}
}
 
function removeFocus( textIndex, wordIndex ) {
var word = this._getWordObject( textIndex, wordIndex );
if( word ) {
if( word.type == "text" ) {
word.blur();
word.style.backgroundColor = this.normWordBgColor;
}
}
}
 
function setText( textIndex, wordIndex, newText ) {
var word = this._getWordObject( textIndex, wordIndex );
var beginStr;
var endStr;
if( word ) {
var pos = this.indexes[textIndex][wordIndex];
var oldText = word.value;
// update the text given the index of the string
beginStr = this.textInputs[textIndex].substring( 0, pos );
endStr = this.textInputs[textIndex].substring(
pos + oldText.length,
this.textInputs[textIndex].length
);
this.textInputs[textIndex] = beginStr + newText + endStr;
 
// adjust the indexes on the stack given the differences in
// length between the new word and old word.
var lengthDiff = newText.length - oldText.length;
this._adjustIndexes( textIndex, wordIndex, lengthDiff );
 
word.size = newText.length;
word.value = newText;
this.removeFocus( textIndex, wordIndex );
}
}
 
 
function writeBody() {
var d = window.document;
var is_html = false;
 
d.open();
 
// iterate through each text input.
for( var txtid = 0; txtid < this.textInputs.length; txtid++ ) {
var end_idx = 0;
var begin_idx = 0;
d.writeln( '<form name="textInput'+txtid+'">' );
var wordtxt = this.textInputs[txtid];
this.indexes[txtid] = [];
 
if( wordtxt ) {
var orig = this.originalSpellings[txtid];
if( !orig ) break;
 
//!!! plain text, or HTML mode?
d.writeln( '<div class="plainText">' );
// iterate through each occurrence of a misspelled word.
for( var i = 0; i < orig.length; i++ ) {
// find the position of the current misspelled word,
// starting at the last misspelled word.
// and keep looking if it's a substring of another word
do {
begin_idx = wordtxt.indexOf( orig[i], end_idx );
end_idx = begin_idx + orig[i].length;
// word not found? messed up!
if( begin_idx == -1 ) break;
// look at the characters immediately before and after
// the word. If they are word characters we'll keep looking.
var before_char = wordtxt.charAt( begin_idx - 1 );
var after_char = wordtxt.charAt( end_idx );
} while (
this._isWordChar( before_char )
|| this._isWordChar( after_char )
);
 
// keep track of its position in the original text.
this.indexes[txtid][i] = begin_idx;
 
// write out the characters before the current misspelled word
for( var j = this._lastPos( txtid, i ); j < begin_idx; j++ ) {
// !!! html mode? make it html compatible
d.write( this.printForHtml( wordtxt.charAt( j )));
}
 
// write out the misspelled word.
d.write( this._wordInputStr( orig[i] ));
 
// if it's the last word, write out the rest of the text
if( i == orig.length-1 ){
d.write( printForHtml( wordtxt.substr( end_idx )));
}
}
 
d.writeln( '</div>' );
 
}
d.writeln( '</form>' );
}
//for ( var j = 0; j < d.forms.length; j++ ) {
// alert( d.forms[j].name );
// for( var k = 0; k < d.forms[j].elements.length; k++ ) {
// alert( d.forms[j].elements[k].name + ": " + d.forms[j].elements[k].value );
// }
//}
 
// set the _forms property
this._forms = d.forms;
d.close();
}
 
// return the character index in the full text after the last word we evaluated
function _lastPos( txtid, idx ) {
if( idx > 0 )
return this.indexes[txtid][idx-1] + this.originalSpellings[txtid][idx-1].length;
else
return 0;
}
 
function printForHtml( n ) {
return n ; // by FredCK
/*
var htmlstr = n;
if( htmlstr.length == 1 ) {
// do simple case statement if it's just one character
switch ( n ) {
case "\n":
htmlstr = '<br/>';
break;
case "<":
htmlstr = '&lt;';
break;
case ">":
htmlstr = '&gt;';
break;
}
return htmlstr;
} else {
htmlstr = htmlstr.replace( /</g, '&lt' );
htmlstr = htmlstr.replace( />/g, '&gt' );
htmlstr = htmlstr.replace( /\n/g, '<br/>' );
return htmlstr;
}
*/
}
 
function _isWordChar( letter ) {
if( letter.search( this.wordChar ) == -1 ) {
return false;
} else {
return true;
}
}
 
function _getWordObject( textIndex, wordIndex ) {
if( this._forms[textIndex] ) {
if( this._forms[textIndex].elements[wordIndex] ) {
return this._forms[textIndex].elements[wordIndex];
}
}
return null;
}
 
function _wordInputStr( word ) {
var str = '<input readonly ';
str += 'class="blend" type="text" value="' + word + '" size="' + word.length + '">';
return str;
}
 
function _adjustIndexes( textIndex, wordIndex, lengthDiff ) {
for( var i = wordIndex + 1; i < this.originalSpellings[textIndex].length; i++ ) {
this.indexes[textIndex][i] = this.indexes[textIndex][i] + lengthDiff;
}
}
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js
New file
0,0 → 1,461
////////////////////////////////////////////////////
// spellChecker.js
//
// spellChecker object
//
// This file is sourced on web pages that have a textarea object to evaluate
// for spelling. It includes the implementation for the spellCheckObject.
//
////////////////////////////////////////////////////
 
 
// constructor
function spellChecker( textObject ) {
 
// public properties - configurable
// this.popUpUrl = '/speller/spellchecker.html'; // by FredCK
this.popUpUrl = 'fck_spellerpages/spellerpages/spellchecker.html'; // by FredCK
this.popUpName = 'spellchecker';
// this.popUpProps = "menu=no,width=440,height=350,top=70,left=120,resizable=yes,status=yes"; // by FredCK
this.popUpProps = null ; // by FredCK
// this.spellCheckScript = '/speller/server-scripts/spellchecker.php'; // by FredCK
//this.spellCheckScript = '/cgi-bin/spellchecker.pl';
 
// values used to keep track of what happened to a word
this.replWordFlag = "R"; // single replace
this.ignrWordFlag = "I"; // single ignore
this.replAllFlag = "RA"; // replace all occurances
this.ignrAllFlag = "IA"; // ignore all occurances
this.fromReplAll = "~RA"; // an occurance of a "replace all" word
this.fromIgnrAll = "~IA"; // an occurance of a "ignore all" word
// properties set at run time
this.wordFlags = new Array();
this.currentTextIndex = 0;
this.currentWordIndex = 0;
this.spellCheckerWin = null;
this.controlWin = null;
this.wordWin = null;
this.textArea = textObject; // deprecated
this.textInputs = arguments;
 
// private methods
this._spellcheck = _spellcheck;
this._getSuggestions = _getSuggestions;
this._setAsIgnored = _setAsIgnored;
this._getTotalReplaced = _getTotalReplaced;
this._setWordText = _setWordText;
this._getFormInputs = _getFormInputs;
 
// public methods
this.openChecker = openChecker;
this.startCheck = startCheck;
this.checkTextBoxes = checkTextBoxes;
this.checkTextAreas = checkTextAreas;
this.spellCheckAll = spellCheckAll;
this.ignoreWord = ignoreWord;
this.ignoreAll = ignoreAll;
this.replaceWord = replaceWord;
this.replaceAll = replaceAll;
this.terminateSpell = terminateSpell;
this.undo = undo;
 
// set the current window's "speller" property to the instance of this class.
// this object can now be referenced by child windows/frames.
window.speller = this;
}
 
// call this method to check all text boxes (and only text boxes) in the HTML document
function checkTextBoxes() {
this.textInputs = this._getFormInputs( "^text$" );
this.openChecker();
}
 
// call this method to check all textareas (and only textareas ) in the HTML document
function checkTextAreas() {
this.textInputs = this._getFormInputs( "^textarea$" );
this.openChecker();
}
 
// call this method to check all text boxes and textareas in the HTML document
function spellCheckAll() {
this.textInputs = this._getFormInputs( "^text(area)?$" );
this.openChecker();
}
 
// call this method to check text boxe(s) and/or textarea(s) that were passed in to the
// object's constructor or to the textInputs property
function openChecker() {
this.spellCheckerWin = window.open( this.popUpUrl, this.popUpName, this.popUpProps );
if( !this.spellCheckerWin.opener ) {
this.spellCheckerWin.opener = window;
}
}
 
function startCheck( wordWindowObj, controlWindowObj ) {
 
// set properties from args
this.wordWin = wordWindowObj;
this.controlWin = controlWindowObj;
 
// reset properties
this.wordWin.resetForm();
this.controlWin.resetForm();
this.currentTextIndex = 0;
this.currentWordIndex = 0;
// initialize the flags to an array - one element for each text input
this.wordFlags = new Array( this.wordWin.textInputs.length );
// each element will be an array that keeps track of each word in the text
for( var i=0; i<this.wordFlags.length; i++ ) {
this.wordFlags[i] = [];
}
 
// start
this._spellcheck();
 
return true;
}
 
function ignoreWord() {
var wi = this.currentWordIndex;
var ti = this.currentTextIndex;
if( !this.wordWin ) {
alert( 'Error: Word frame not available.' );
return false;
}
if( !this.wordWin.getTextVal( ti, wi )) {
alert( 'Error: "Not in dictionary" text is missing.' );
return false;
}
// set as ignored
if( this._setAsIgnored( ti, wi, this.ignrWordFlag )) {
this.currentWordIndex++;
this._spellcheck();
}
return true;
}
 
function ignoreAll() {
var wi = this.currentWordIndex;
var ti = this.currentTextIndex;
if( !this.wordWin ) {
alert( 'Error: Word frame not available.' );
return false;
}
// get the word that is currently being evaluated.
var s_word_to_repl = this.wordWin.getTextVal( ti, wi );
if( !s_word_to_repl ) {
alert( 'Error: "Not in dictionary" text is missing' );
return false;
}
 
// set this word as an "ignore all" word.
this._setAsIgnored( ti, wi, this.ignrAllFlag );
 
// loop through all the words after this word
for( var i = ti; i < this.wordWin.textInputs.length; i++ ) {
for( var j = 0; j < this.wordWin.totalWords( i ); j++ ) {
if(( i == ti && j > wi ) || i > ti ) {
// future word: set as "from ignore all" if
// 1) do not already have a flag and
// 2) have the same value as current word
if(( this.wordWin.getTextVal( i, j ) == s_word_to_repl )
&& ( !this.wordFlags[i][j] )) {
this._setAsIgnored( i, j, this.fromIgnrAll );
}
}
}
}
 
// finally, move on
this.currentWordIndex++;
this._spellcheck();
return true;
}
 
function replaceWord() {
var wi = this.currentWordIndex;
var ti = this.currentTextIndex;
if( !this.wordWin ) {
alert( 'Error: Word frame not available.' );
return false;
}
if( !this.wordWin.getTextVal( ti, wi )) {
alert( 'Error: "Not in dictionary" text is missing' );
return false;
}
if( !this.controlWin.replacementText ) {
return false ;
}
var txt = this.controlWin.replacementText;
if( txt.value ) {
var newspell = new String( txt.value );
if( this._setWordText( ti, wi, newspell, this.replWordFlag )) {
this.currentWordIndex++;
this._spellcheck();
}
}
return true;
}
 
function replaceAll() {
var ti = this.currentTextIndex;
var wi = this.currentWordIndex;
if( !this.wordWin ) {
alert( 'Error: Word frame not available.' );
return false;
}
var s_word_to_repl = this.wordWin.getTextVal( ti, wi );
if( !s_word_to_repl ) {
alert( 'Error: "Not in dictionary" text is missing' );
return false;
}
var txt = this.controlWin.replacementText;
if( !txt.value ) return false;
var newspell = new String( txt.value );
 
// set this word as a "replace all" word.
this._setWordText( ti, wi, newspell, this.replAllFlag );
 
// loop through all the words after this word
for( var i = ti; i < this.wordWin.textInputs.length; i++ ) {
for( var j = 0; j < this.wordWin.totalWords( i ); j++ ) {
if(( i == ti && j > wi ) || i > ti ) {
// future word: set word text to s_word_to_repl if
// 1) do not already have a flag and
// 2) have the same value as s_word_to_repl
if(( this.wordWin.getTextVal( i, j ) == s_word_to_repl )
&& ( !this.wordFlags[i][j] )) {
this._setWordText( i, j, newspell, this.fromReplAll );
}
}
}
}
 
// finally, move on
this.currentWordIndex++;
this._spellcheck();
return true;
}
 
function terminateSpell() {
// called when we have reached the end of the spell checking.
var msg = ""; // by FredCK
var numrepl = this._getTotalReplaced();
if( numrepl == 0 ) {
// see if there were no misspellings to begin with
if( !this.wordWin ) {
msg = "";
} else {
if( this.wordWin.totalMisspellings() ) {
// msg += "No words changed."; // by FredCK
msg += FCKLang.DlgSpellNoChanges ; // by FredCK
} else {
// msg += "No misspellings found."; // by FredCK
msg += FCKLang.DlgSpellNoMispell ; // by FredCK
}
}
} else if( numrepl == 1 ) {
// msg += "One word changed."; // by FredCK
msg += FCKLang.DlgSpellOneChange ; // by FredCK
} else {
// msg += numrepl + " words changed."; // by FredCK
msg += FCKLang.DlgSpellManyChanges.replace( /%1/g, numrepl ) ;
}
if( msg ) {
// msg += "\n"; // by FredCK
alert( msg );
}
 
if( numrepl > 0 ) {
// update the text field(s) on the opener window
for( var i = 0; i < this.textInputs.length; i++ ) {
// this.textArea.value = this.wordWin.text;
if( this.wordWin ) {
if( this.wordWin.textInputs[i] ) {
this.textInputs[i].value = this.wordWin.textInputs[i];
}
}
}
}
 
// return back to the calling window
// this.spellCheckerWin.close(); // by FredCK
if ( typeof( this.OnFinished ) == 'function' ) // by FredCK
this.OnFinished(numrepl) ; // by FredCK
 
return true;
}
 
function undo() {
// skip if this is the first word!
var ti = this.currentTextIndex;
var wi = this.currentWordIndex;
 
if( this.wordWin.totalPreviousWords( ti, wi ) > 0 ) {
this.wordWin.removeFocus( ti, wi );
 
// go back to the last word index that was acted upon
do {
// if the current word index is zero then reset the seed
if( this.currentWordIndex == 0 && this.currentTextIndex > 0 ) {
this.currentTextIndex--;
this.currentWordIndex = this.wordWin.totalWords( this.currentTextIndex )-1;
if( this.currentWordIndex < 0 ) this.currentWordIndex = 0;
} else {
if( this.currentWordIndex > 0 ) {
this.currentWordIndex--;
}
}
} while (
this.wordWin.totalWords( this.currentTextIndex ) == 0
|| this.wordFlags[this.currentTextIndex][this.currentWordIndex] == this.fromIgnrAll
|| this.wordFlags[this.currentTextIndex][this.currentWordIndex] == this.fromReplAll
);
 
var text_idx = this.currentTextIndex;
var idx = this.currentWordIndex;
var preReplSpell = this.wordWin.originalSpellings[text_idx][idx];
 
// if we got back to the first word then set the Undo button back to disabled
if( this.wordWin.totalPreviousWords( text_idx, idx ) == 0 ) {
this.controlWin.disableUndo();
}
 
var i, j, origSpell ;
// examine what happened to this current word.
switch( this.wordFlags[text_idx][idx] ) {
// replace all: go through this and all the future occurances of the word
// and revert them all to the original spelling and clear their flags
case this.replAllFlag :
for( i = text_idx; i < this.wordWin.textInputs.length; i++ ) {
for( j = 0; j < this.wordWin.totalWords( i ); j++ ) {
if(( i == text_idx && j >= idx ) || i > text_idx ) {
origSpell = this.wordWin.originalSpellings[i][j];
if( origSpell == preReplSpell ) {
this._setWordText ( i, j, origSpell, undefined );
}
}
}
}
break;
 
// ignore all: go through all the future occurances of the word
// and clear their flags
case this.ignrAllFlag :
for( i = text_idx; i < this.wordWin.textInputs.length; i++ ) {
for( j = 0; j < this.wordWin.totalWords( i ); j++ ) {
if(( i == text_idx && j >= idx ) || i > text_idx ) {
origSpell = this.wordWin.originalSpellings[i][j];
if( origSpell == preReplSpell ) {
this.wordFlags[i][j] = undefined;
}
}
}
}
break;
 
// replace: revert the word to its original spelling
case this.replWordFlag :
this._setWordText ( text_idx, idx, preReplSpell, undefined );
break;
}
 
// For all four cases, clear the wordFlag of this word. re-start the process
this.wordFlags[text_idx][idx] = undefined;
this._spellcheck();
}
}
 
function _spellcheck() {
var ww = this.wordWin;
 
// check if this is the last word in the current text element
if( this.currentWordIndex == ww.totalWords( this.currentTextIndex) ) {
this.currentTextIndex++;
this.currentWordIndex = 0;
// keep going if we're not yet past the last text element
if( this.currentTextIndex < this.wordWin.textInputs.length ) {
this._spellcheck();
return;
} else {
this.terminateSpell();
return;
}
}
 
// if this is after the first one make sure the Undo button is enabled
if( this.currentWordIndex > 0 ) {
this.controlWin.enableUndo();
}
 
// skip the current word if it has already been worked on
if( this.wordFlags[this.currentTextIndex][this.currentWordIndex] ) {
// increment the global current word index and move on.
this.currentWordIndex++;
this._spellcheck();
} else {
var evalText = ww.getTextVal( this.currentTextIndex, this.currentWordIndex );
if( evalText ) {
this.controlWin.evaluatedText.value = evalText;
ww.setFocus( this.currentTextIndex, this.currentWordIndex );
this._getSuggestions( this.currentTextIndex, this.currentWordIndex );
}
}
}
 
function _getSuggestions( text_num, word_num ) {
this.controlWin.clearSuggestions();
// add suggestion in list for each suggested word.
// get the array of suggested words out of the
// three-dimensional array containing all suggestions.
var a_suggests = this.wordWin.suggestions[text_num][word_num];
if( a_suggests ) {
// got an array of suggestions.
for( var ii = 0; ii < a_suggests.length; ii++ ) {
this.controlWin.addSuggestion( a_suggests[ii] );
}
}
this.controlWin.selectDefaultSuggestion();
}
 
function _setAsIgnored( text_num, word_num, flag ) {
// set the UI
this.wordWin.removeFocus( text_num, word_num );
// do the bookkeeping
this.wordFlags[text_num][word_num] = flag;
return true;
}
 
function _getTotalReplaced() {
var i_replaced = 0;
for( var i = 0; i < this.wordFlags.length; i++ ) {
for( var j = 0; j < this.wordFlags[i].length; j++ ) {
if(( this.wordFlags[i][j] == this.replWordFlag )
|| ( this.wordFlags[i][j] == this.replAllFlag )
|| ( this.wordFlags[i][j] == this.fromReplAll )) {
i_replaced++;
}
}
}
return i_replaced;
}
 
function _setWordText( text_num, word_num, newText, flag ) {
// set the UI and form inputs
this.wordWin.setText( text_num, word_num, newText );
// keep track of what happened to this word:
this.wordFlags[text_num][word_num] = flag;
return true;
}
 
function _getFormInputs( inputPattern ) {
var inputs = new Array();
for( var i = 0; i < document.forms.length; i++ ) {
for( var j = 0; j < document.forms[i].elements.length; j++ ) {
if( document.forms[i].elements[j].type.match( inputPattern )) {
inputs[inputs.length] = document.forms[i].elements[j];
}
}
}
return inputs;
}
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controlWindow.js
New file
0,0 → 1,87
////////////////////////////////////////////////////
// controlWindow object
////////////////////////////////////////////////////
function controlWindow( controlForm ) {
// private properties
this._form = controlForm;
 
// public properties
this.windowType = "controlWindow";
// this.noSuggestionSelection = "- No suggestions -"; // by FredCK
this.noSuggestionSelection = FCKLang.DlgSpellNoSuggestions ;
// set up the properties for elements of the given control form
this.suggestionList = this._form.sugg;
this.evaluatedText = this._form.misword;
this.replacementText = this._form.txtsugg;
this.undoButton = this._form.btnUndo;
 
// public methods
this.addSuggestion = addSuggestion;
this.clearSuggestions = clearSuggestions;
this.selectDefaultSuggestion = selectDefaultSuggestion;
this.resetForm = resetForm;
this.setSuggestedText = setSuggestedText;
this.enableUndo = enableUndo;
this.disableUndo = disableUndo;
}
 
function resetForm() {
if( this._form ) {
this._form.reset();
}
}
 
function setSuggestedText() {
var slct = this.suggestionList;
var txt = this.replacementText;
var str = "";
if( (slct.options[0].text) && slct.options[0].text != this.noSuggestionSelection ) {
str = slct.options[slct.selectedIndex].text;
}
txt.value = str;
}
 
function selectDefaultSuggestion() {
var slct = this.suggestionList;
var txt = this.replacementText;
if( slct.options.length == 0 ) {
this.addSuggestion( this.noSuggestionSelection );
} else {
slct.options[0].selected = true;
}
this.setSuggestedText();
}
 
function addSuggestion( sugg_text ) {
var slct = this.suggestionList;
if( sugg_text ) {
var i = slct.options.length;
var newOption = new Option( sugg_text, 'sugg_text'+i );
slct.options[i] = newOption;
}
}
 
function clearSuggestions() {
var slct = this.suggestionList;
for( var j = slct.length - 1; j > -1; j-- ) {
if( slct.options[j] ) {
slct.options[j] = null;
}
}
}
 
function enableUndo() {
if( this.undoButton ) {
if( this.undoButton.disabled == true ) {
this.undoButton.disabled = false;
}
}
}
 
function disableUndo() {
if( this.undoButton ) {
if( this.undoButton.disabled == false ) {
this.undoButton.disabled = true;
}
}
}
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controls.html
New file
0,0 → 1,153
<html>
<head>
<link rel="stylesheet" type="text/css" href="spellerStyle.css" />
<script type="text/javascript" src="controlWindow.js"></script>
<script type="text/javascript">
var spellerObject;
var controlWindowObj;
 
if( parent.opener ) {
spellerObject = parent.opener.speller;
}
 
function ignore_word() {
if( spellerObject ) {
spellerObject.ignoreWord();
}
}
 
function ignore_all() {
if( spellerObject ) {
spellerObject.ignoreAll();
}
}
 
function replace_word() {
if( spellerObject ) {
spellerObject.replaceWord();
}
}
 
function replace_all() {
if( spellerObject ) {
spellerObject.replaceAll();
}
}
 
function end_spell() {
if( spellerObject ) {
spellerObject.terminateSpell();
}
}
 
function undo() {
if( spellerObject ) {
spellerObject.undo();
}
}
 
function suggText() {
if( controlWindowObj ) {
controlWindowObj.setSuggestedText();
}
}
 
var FCKLang = window.parent.parent.FCKLang ; // by FredCK
 
function init_spell() {
// By FredCK (fckLang attributes have been added to the HTML source of this page)
window.parent.parent.OnSpellerControlsLoad( this ) ;
 
var controlForm = document.spellcheck;
 
// create a new controlWindow object
controlWindowObj = new controlWindow( controlForm );
 
// call the init_spell() function in the parent frameset
if( parent.frames.length ) {
parent.init_spell( controlWindowObj );
} else {
alert( 'This page was loaded outside of a frameset. It might not display properly' );
}
}
 
</script>
</head>
<body class="controlWindowBody" onLoad="init_spell();" style="OVERFLOW: hidden" scroll="no"> <!-- by FredCK -->
<form name="spellcheck">
<table border="0" cellpadding="0" cellspacing="0" border="0" align="center">
<tr>
<td colspan="3" class="normalLabel"><span fckLang="DlgSpellNotInDic">Not in dictionary:</span></td>
</tr>
<tr>
<td colspan="3"><input class="readonlyInput" type="text" name="misword" readonly /></td>
</tr>
<tr>
<td colspan="3" height="5"></td>
</tr>
<tr>
<td class="normalLabel"><span fckLang="DlgSpellChangeTo">Change to:</span></td>
</tr>
<tr valign="top">
<td>
<table border="0" cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="normalLabel">
<input class="textDefault" type="text" name="txtsugg" />
</td>
</tr>
<tr>
<td>
<select class="suggSlct" name="sugg" size="7" onChange="suggText();" onDblClick="replace_word();">
<option></option>
</select>
</td>
</tr>
</table>
</td>
<td>&nbsp;&nbsp;</td>
<td>
<table border="0" cellpadding="0" cellspacing="0" border="0">
<tr>
<td>
<input class="buttonDefault" type="button" fckLang="DlgSpellBtnIgnore" value="Ignore" onClick="ignore_word();">
</td>
<td>&nbsp;&nbsp;</td>
<td>
<input class="buttonDefault" type="button" fckLang="DlgSpellBtnIgnoreAll" value="Ignore All" onClick="ignore_all();">
</td>
</tr>
<tr>
<td colspan="3" height="5"></td>
</tr>
<tr>
<td>
<input class="buttonDefault" type="button" fckLang="DlgSpellBtnReplace" value="Replace" onClick="replace_word();">
</td>
<td>&nbsp;&nbsp;</td>
<td>
<input class="buttonDefault" type="button" fckLang="DlgSpellBtnReplaceAll" value="Replace All" onClick="replace_all();">
</td>
</tr>
<tr>
<td colspan="3" height="5"></td>
</tr>
<tr>
<td>
<input class="buttonDefault" type="button" name="btnUndo" fckLang="DlgSpellBtnUndo" value="Undo" onClick="undo();"
disabled>
</td>
<td>&nbsp;&nbsp;</td>
<td>
<!-- by FredCK
<input class="buttonDefault" type="button" value="Close" onClick="end_spell();">
-->
</td>
</tr>
</table>
</td>
</tr>
</table>
</form>
</body>
</html>
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellchecker.html
New file
0,0 → 1,71
 
<script>
 
var wordWindow = null;
var controlWindow = null;
 
function init_spell( spellerWindow ) {
 
if( spellerWindow ) {
if( spellerWindow.windowType == "wordWindow" ) {
wordWindow = spellerWindow;
} else if ( spellerWindow.windowType == "controlWindow" ) {
controlWindow = spellerWindow;
}
}
 
if( controlWindow && wordWindow ) {
// populate the speller object and start it off!
var speller = opener.speller;
wordWindow.speller = speller;
speller.startCheck( wordWindow, controlWindow );
}
}
 
// encodeForPost
function encodeForPost( str ) {
var s = new String( str );
s = encodeURIComponent( s );
// additionally encode single quotes to evade any PHP
// magic_quotes_gpc setting (it inserts escape characters and
// therefore skews the btye positions of misspelled words)
return s.replace( /\'/g, '%27' );
}
 
// post the text area data to the script that populates the speller
function postWords() {
var bodyDoc = window.frames[0].document;
bodyDoc.open();
bodyDoc.write('<html>');
bodyDoc.write('<meta http-equiv="Content-Type" content="text/html; charset=utf-8">');
bodyDoc.write('<link rel="stylesheet" type="text/css" href="spellerStyle.css"/>');
if (opener) {
var speller = opener.speller;
bodyDoc.write('<body class="normalText" onLoad="document.forms[0].submit();">');
bodyDoc.write('<p>' + window.parent.FCKLang.DlgSpellProgress + '<\/p>'); // by FredCK
bodyDoc.write('<form action="'+speller.spellCheckScript+'" method="post">');
for( var i = 0; i < speller.textInputs.length; i++ ) {
bodyDoc.write('<input type="hidden" name="textinputs[]" value="'+encodeForPost(speller.textInputs[i].value)+'">');
}
bodyDoc.write('<\/form>');
bodyDoc.write('<\/body>');
} else {
bodyDoc.write('<body class="normalText">');
bodyDoc.write('<p><b>This page cannot be displayed<\/b><\/p><p>The window was not opened from another window.<\/p>');
bodyDoc.write('<\/body>');
}
bodyDoc.write('<\/html>');
bodyDoc.close();
}
</script>
 
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<head>
<title>Speller Pages</title>
</head>
<frameset rows="*,201" onLoad="postWords();">
<frame src="blank.html">
<frame src="controls.html">
</frameset>
</html>
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_docprops/fck_document_preview.html
New file
0,0 → 1,113
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!--
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* Preview shown in the "Document Properties" dialog window.
-->
<html>
<head>
<title>Document Properties - Preview</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="robots" content="noindex, nofollow">
<script language="javascript">
 
var eBase = parent.FCK.EditorDocument.getElementsByTagName( 'BASE' ) ;
if ( eBase.length > 0 && eBase[0].href.length > 0 )
{
document.write( '<base href="' + eBase[0].href + '">' ) ;
}
 
window.onload = function()
{
if ( typeof( parent.OnPreviewLoad ) == 'function' )
parent.OnPreviewLoad( window, document.body ) ;
}
 
function SetBaseHRef( baseHref )
{
var eBase = document.createElement( 'BASE' ) ;
eBase.href = baseHref ;
 
var eHead = document.getElementsByTagName( 'HEAD' )[0] ;
eHead.appendChild( eBase ) ;
}
 
function SetLinkColor( color )
{
if ( color && color.length > 0 )
document.getElementById('eLink').style.color = color ;
else
document.getElementById('eLink').style.color = window.document.linkColor ;
}
 
function SetVisitedColor( color )
{
if ( color && color.length > 0 )
document.getElementById('eVisited').style.color = color ;
else
document.getElementById('eVisited').style.color = window.document.vlinkColor ;
}
 
function SetActiveColor( color )
{
if ( color && color.length > 0 )
document.getElementById('eActive').style.color = color ;
else
document.getElementById('eActive').style.color = window.document.alinkColor ;
}
</script>
</head>
<body>
<table width="100%" height="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td align="center" valign="middle">
Normal Text
</td>
<td id="eLink" align="center" valign="middle">
<u>Link Text</u>
</td>
</tr>
<tr>
<td id="eVisited" valign="middle" align="center">
<u>Visited Link</u>
</td>
<td id="eActive" valign="middle" align="center">
<u>Active Link</u>
</td>
</tr>
</table>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
</body>
</html>
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_checkbox.html
New file
0,0 → 1,104
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<!--
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* Checkbox dialog window.
-->
<html>
<head>
<title>Checkbox Properties</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta content="noindex, nofollow" name="robots">
<script src="common/fck_dialog_common.js" type="text/javascript"></script>
<script type="text/javascript">
 
var dialog = window.parent ;
var oEditor = dialog.InnerDialogLoaded() ;
 
// Gets the document DOM
var oDOM = oEditor.FCK.EditorDocument ;
 
var oActiveEl = dialog.Selection.GetSelectedElement() ;
 
window.onload = function()
{
// First of all, translate the dialog box texts
oEditor.FCKLanguageManager.TranslatePage(document) ;
 
if ( oActiveEl && oActiveEl.tagName == 'INPUT' && oActiveEl.type == 'checkbox' )
{
GetE('txtName').value = oActiveEl.name ;
GetE('txtValue').value = oEditor.FCKBrowserInfo.IsIE ? oActiveEl.value : GetAttribute( oActiveEl, 'value' ) ;
GetE('txtSelected').checked = oActiveEl.checked ;
}
else
oActiveEl = null ;
 
dialog.SetOkButton( true ) ;
dialog.SetAutoSize( true ) ;
SelectField( 'txtName' ) ;
}
 
function Ok()
{
oEditor.FCKUndo.SaveUndoStep() ;
 
oActiveEl = CreateNamedElement( oEditor, oActiveEl, 'INPUT', {name: GetE('txtName').value, type: 'checkbox' } ) ;
 
if ( oEditor.FCKBrowserInfo.IsIE )
oActiveEl.value = GetE('txtValue').value ;
else
SetAttribute( oActiveEl, 'value', GetE('txtValue').value ) ;
 
var bIsChecked = GetE('txtSelected').checked ;
SetAttribute( oActiveEl, 'checked', bIsChecked ? 'checked' : null ) ; // For Firefox
oActiveEl.checked = bIsChecked ;
 
return true ;
}
 
</script>
</head>
<body style="OVERFLOW: hidden" scroll="no">
<table height="100%" width="100%">
<tr>
<td align="center">
<table border="0" cellpadding="0" cellspacing="0" width="80%">
<tr>
<td>
<span fckLang="DlgCheckboxName">Name</span><br>
<input type="text" size="20" id="txtName" style="WIDTH: 100%">
</td>
</tr>
<tr>
<td>
<span fckLang="DlgCheckboxValue">Value</span><br>
<input type="text" size="20" id="txtValue" style="WIDTH: 100%">
</td>
</tr>
<tr>
<td><input type="checkbox" id="txtSelected"><label for="txtSelected" fckLang="DlgCheckboxSelected">Checked</label></td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_spellerpages.html
New file
0,0 → 1,70
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<!--
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* Spell Check dialog window.
-->
<html>
<head>
<title>Spell Check</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta content="noindex, nofollow" name="robots">
<script src="common/fck_dialog_common.js" type="text/javascript"></script>
<script src="fck_spellerpages/spellerpages/spellChecker.js"></script>
<script type="text/javascript">
 
var oEditor = window.parent.InnerDialogLoaded() ;
var FCKLang = oEditor.FCKLang ;
 
window.onload = function()
{
document.getElementById('txtHtml').value = oEditor.FCK.EditorDocument.body.innerHTML ;
 
var oSpeller = new spellChecker( document.getElementById('txtHtml') ) ;
oSpeller.spellCheckScript = oEditor.FCKConfig.SpellerPagesServerScript || 'server-scripts/spellchecker.php' ;
oSpeller.OnFinished = oSpeller_OnFinished ;
oSpeller.openChecker() ;
}
 
function OnSpellerControlsLoad( controlsWindow )
{
// Translate the dialog box texts
oEditor.FCKLanguageManager.TranslatePage( controlsWindow.document ) ;
}
 
function oSpeller_OnFinished( numberOCorrections )
{
if ( numberOCorrections > 0 )
{
oEditor.FCKUndo.SaveUndoStep() ;
oEditor.FCK.EditorDocument.body.innerHTML = document.getElementById('txtHtml').value ;
if ( oEditor.FCKBrowserInfo.IsIE )
oEditor.FCKSelection.Collapse( true ) ;
}
window.parent.Cancel() ;
}
 
</script>
</head>
<body style="OVERFLOW: hidden" scroll="no" style="padding:0px;">
<input type="hidden" id="txtHtml" value="">
<iframe id="frmSpell" src="javascript:void(0)" name="spellchecker" width="100%" height="100%" frameborder="0"></iframe>
</body>
</html>
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_flash/fck_flash_preview.html
New file
0,0 → 1,50
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!--
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* Preview page for the Flash dialog window.
-->
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="robots" content="noindex, nofollow">
<script src="../common/fck_dialog_common.js" type="text/javascript"></script>
<script language="javascript">
 
var FCKTools = window.parent.FCKTools ;
var FCKConfig = window.parent.FCKConfig ;
 
// Sets the Skin CSS
document.write( FCKTools.GetStyleHtml( FCKConfig.SkinDialogCSS ) ) ;
document.write( FCKTools.GetStyleHtml( GetCommonDialogCss( '../' ) ) ) ;
 
if ( window.parent.FCKConfig.BaseHref.length > 0 )
document.write( '<base href="' + window.parent.FCKConfig.BaseHref + '">' ) ;
 
window.onload = function()
{
window.parent.SetPreviewElement( document.body ) ;
}
 
</script>
</head>
<body style="COLOR: #000000; BACKGROUND-COLOR: #ffffff"></body>
</html>
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_flash/fck_flash.js
New file
0,0 → 1,300
/*
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* Scripts related to the Flash dialog window (see fck_flash.html).
*/
 
var dialog = window.parent ;
var oEditor = dialog.InnerDialogLoaded() ;
var FCK = oEditor.FCK ;
var FCKLang = oEditor.FCKLang ;
var FCKConfig = oEditor.FCKConfig ;
var FCKTools = oEditor.FCKTools ;
 
//#### Dialog Tabs
 
// Set the dialog tabs.
dialog.AddTab( 'Info', oEditor.FCKLang.DlgInfoTab ) ;
 
if ( FCKConfig.FlashUpload )
dialog.AddTab( 'Upload', FCKLang.DlgLnkUpload ) ;
 
if ( !FCKConfig.FlashDlgHideAdvanced )
dialog.AddTab( 'Advanced', oEditor.FCKLang.DlgAdvancedTag ) ;
 
// Function called when a dialog tag is selected.
function OnDialogTabChange( tabCode )
{
ShowE('divInfo' , ( tabCode == 'Info' ) ) ;
ShowE('divUpload' , ( tabCode == 'Upload' ) ) ;
ShowE('divAdvanced' , ( tabCode == 'Advanced' ) ) ;
}
 
// Get the selected flash embed (if available).
var oFakeImage = dialog.Selection.GetSelectedElement() ;
var oEmbed ;
 
if ( oFakeImage )
{
if ( oFakeImage.tagName == 'IMG' && oFakeImage.getAttribute('_fckflash') )
oEmbed = FCK.GetRealElement( oFakeImage ) ;
else
oFakeImage = null ;
}
 
window.onload = function()
{
// Translate the dialog box texts.
oEditor.FCKLanguageManager.TranslatePage(document) ;
 
// Load the selected element information (if any).
LoadSelection() ;
 
// Show/Hide the "Browse Server" button.
GetE('tdBrowse').style.display = FCKConfig.FlashBrowser ? '' : 'none' ;
 
// Set the actual uploader URL.
if ( FCKConfig.FlashUpload )
GetE('frmUpload').action = FCKConfig.FlashUploadURL ;
 
dialog.SetAutoSize( true ) ;
 
// Activate the "OK" button.
dialog.SetOkButton( true ) ;
 
SelectField( 'txtUrl' ) ;
}
 
function LoadSelection()
{
if ( ! oEmbed ) return ;
 
GetE('txtUrl').value = GetAttribute( oEmbed, 'src', '' ) ;
GetE('txtWidth').value = GetAttribute( oEmbed, 'width', '' ) ;
GetE('txtHeight').value = GetAttribute( oEmbed, 'height', '' ) ;
 
// Get Advances Attributes
GetE('txtAttId').value = oEmbed.id ;
GetE('chkAutoPlay').checked = GetAttribute( oEmbed, 'play', 'true' ) == 'true' ;
GetE('chkLoop').checked = GetAttribute( oEmbed, 'loop', 'true' ) == 'true' ;
GetE('chkMenu').checked = GetAttribute( oEmbed, 'menu', 'true' ) == 'true' ;
GetE('cmbScale').value = GetAttribute( oEmbed, 'scale', '' ).toLowerCase() ;
 
GetE('txtAttTitle').value = oEmbed.title ;
 
if ( oEditor.FCKBrowserInfo.IsIE )
{
GetE('txtAttClasses').value = oEmbed.getAttribute('className') || '' ;
GetE('txtAttStyle').value = oEmbed.style.cssText ;
}
else
{
GetE('txtAttClasses').value = oEmbed.getAttribute('class',2) || '' ;
GetE('txtAttStyle').value = oEmbed.getAttribute('style',2) || '' ;
}
 
UpdatePreview() ;
}
 
//#### The OK button was hit.
function Ok()
{
if ( GetE('txtUrl').value.length == 0 )
{
dialog.SetSelectedTab( 'Info' ) ;
GetE('txtUrl').focus() ;
 
alert( oEditor.FCKLang.DlgAlertUrl ) ;
 
return false ;
}
 
oEditor.FCKUndo.SaveUndoStep() ;
if ( !oEmbed )
{
oEmbed = FCK.EditorDocument.createElement( 'EMBED' ) ;
oFakeImage = null ;
}
UpdateEmbed( oEmbed ) ;
 
if ( !oFakeImage )
{
oFakeImage = oEditor.FCKDocumentProcessor_CreateFakeImage( 'FCK__Flash', oEmbed ) ;
oFakeImage.setAttribute( '_fckflash', 'true', 0 ) ;
oFakeImage = FCK.InsertElement( oFakeImage ) ;
}
 
oEditor.FCKEmbedAndObjectProcessor.RefreshView( oFakeImage, oEmbed ) ;
 
return true ;
}
 
function UpdateEmbed( e )
{
SetAttribute( e, 'type' , 'application/x-shockwave-flash' ) ;
SetAttribute( e, 'pluginspage' , 'http://www.macromedia.com/go/getflashplayer' ) ;
 
SetAttribute( e, 'src', GetE('txtUrl').value ) ;
SetAttribute( e, "width" , GetE('txtWidth').value ) ;
SetAttribute( e, "height", GetE('txtHeight').value ) ;
 
// Advances Attributes
 
SetAttribute( e, 'id' , GetE('txtAttId').value ) ;
SetAttribute( e, 'scale', GetE('cmbScale').value ) ;
 
SetAttribute( e, 'play', GetE('chkAutoPlay').checked ? 'true' : 'false' ) ;
SetAttribute( e, 'loop', GetE('chkLoop').checked ? 'true' : 'false' ) ;
SetAttribute( e, 'menu', GetE('chkMenu').checked ? 'true' : 'false' ) ;
 
SetAttribute( e, 'title' , GetE('txtAttTitle').value ) ;
 
if ( oEditor.FCKBrowserInfo.IsIE )
{
SetAttribute( e, 'className', GetE('txtAttClasses').value ) ;
e.style.cssText = GetE('txtAttStyle').value ;
}
else
{
SetAttribute( e, 'class', GetE('txtAttClasses').value ) ;
SetAttribute( e, 'style', GetE('txtAttStyle').value ) ;
}
}
 
var ePreview ;
 
function SetPreviewElement( previewEl )
{
ePreview = previewEl ;
 
if ( GetE('txtUrl').value.length > 0 )
UpdatePreview() ;
}
 
function UpdatePreview()
{
if ( !ePreview )
return ;
 
while ( ePreview.firstChild )
ePreview.removeChild( ePreview.firstChild ) ;
 
if ( GetE('txtUrl').value.length == 0 )
ePreview.innerHTML = '&nbsp;' ;
else
{
var oDoc = ePreview.ownerDocument || ePreview.document ;
var e = oDoc.createElement( 'EMBED' ) ;
 
SetAttribute( e, 'src', GetE('txtUrl').value ) ;
SetAttribute( e, 'type', 'application/x-shockwave-flash' ) ;
SetAttribute( e, 'width', '100%' ) ;
SetAttribute( e, 'height', '100%' ) ;
 
ePreview.appendChild( e ) ;
}
}
 
// <embed id="ePreview" src="fck_flash/claims.swf" width="100%" height="100%" style="visibility:hidden" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer">
 
function BrowseServer()
{
OpenFileBrowser( FCKConfig.FlashBrowserURL, FCKConfig.FlashBrowserWindowWidth, FCKConfig.FlashBrowserWindowHeight ) ;
}
 
function SetUrl( url, width, height )
{
GetE('txtUrl').value = url ;
 
if ( width )
GetE('txtWidth').value = width ;
 
if ( height )
GetE('txtHeight').value = height ;
 
UpdatePreview() ;
 
dialog.SetSelectedTab( 'Info' ) ;
}
 
function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg )
{
// Remove animation
window.parent.Throbber.Hide() ;
GetE( 'divUpload' ).style.display = '' ;
 
switch ( errorNumber )
{
case 0 : // No errors
alert( 'Your file has been successfully uploaded' ) ;
break ;
case 1 : // Custom error
alert( customMsg ) ;
return ;
case 101 : // Custom warning
alert( customMsg ) ;
break ;
case 201 :
alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + fileName + '"' ) ;
break ;
case 202 :
alert( 'Invalid file type' ) ;
return ;
case 203 :
alert( "Security error. You probably don't have enough permissions to upload. Please check your server." ) ;
return ;
case 500 :
alert( 'The connector is disabled' ) ;
break ;
default :
alert( 'Error on file upload. Error number: ' + errorNumber ) ;
return ;
}
 
SetUrl( fileUrl ) ;
GetE('frmUpload').reset() ;
}
 
var oUploadAllowedExtRegex = new RegExp( FCKConfig.FlashUploadAllowedExtensions, 'i' ) ;
var oUploadDeniedExtRegex = new RegExp( FCKConfig.FlashUploadDeniedExtensions, 'i' ) ;
 
function CheckUpload()
{
var sFile = GetE('txtUploadFile').value ;
 
if ( sFile.length == 0 )
{
alert( 'Please select a file to upload' ) ;
return false ;
}
 
if ( ( FCKConfig.FlashUploadAllowedExtensions.length > 0 && !oUploadAllowedExtRegex.test( sFile ) ) ||
( FCKConfig.FlashUploadDeniedExtensions.length > 0 && oUploadDeniedExtRegex.test( sFile ) ) )
{
OnUploadCompleted( 202 ) ;
return false ;
}
 
// Show animation
window.parent.Throbber.Show( 100 ) ;
GetE( 'divUpload' ).style.display = 'none' ;
 
return true ;
}
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_link.html
New file
0,0 → 1,295
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!--
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* Link dialog window.
-->
<html>
<head>
<title>Link Properties</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="robots" content="noindex, nofollow" />
<script src="common/fck_dialog_common.js" type="text/javascript"></script>
<script src="fck_link/fck_link.js" type="text/javascript"></script>
</head>
<body scroll="no" style="OVERFLOW: hidden">
<div id="divInfo" style="DISPLAY: none">
<span fckLang="DlgLnkType">Link Type</span><br />
<select id="cmbLinkType" onchange="SetLinkType(this.value);">
<option value="url" fckLang="DlgLnkTypeURL" selected="selected">URL</option>
<option value="anchor" fckLang="DlgLnkTypeAnchor">Anchor in this page</option>
<option value="email" fckLang="DlgLnkTypeEMail">E-Mail</option>
</select>
<br />
<br />
<div id="divLinkTypeUrl">
<table cellspacing="0" cellpadding="0" width="100%" border="0" dir="ltr">
<tr>
<td nowrap="nowrap">
<span fckLang="DlgLnkProto">Protocol</span><br />
<select id="cmbLinkProtocol">
<option value="http://" selected="selected">http://</option>
<option value="https://">https://</option>
<option value="ftp://">ftp://</option>
<option value="news://">news://</option>
<option value="" fckLang="DlgLnkProtoOther">&lt;other&gt;</option>
</select>
</td>
<td nowrap="nowrap">&nbsp;</td>
<td nowrap="nowrap" width="100%">
<span fckLang="DlgLnkURL">URL</span><br />
<input id="txtUrl" style="WIDTH: 100%" type="text" onkeyup="OnUrlChange();" onchange="OnUrlChange();" />
</td>
</tr>
</table>
<br />
<div id="divBrowseServer">
<input type="button" value="Browse Server" fckLang="DlgBtnBrowseServer" onclick="BrowseServer();" />
</div>
</div>
<div id="divLinkTypeAnchor" style="DISPLAY: none" align="center">
<div id="divSelAnchor" style="DISPLAY: none">
<table cellspacing="0" cellpadding="0" border="0" width="70%">
<tr>
<td colspan="3">
<span fckLang="DlgLnkAnchorSel">Select an Anchor</span>
</td>
</tr>
<tr>
<td width="50%">
<span fckLang="DlgLnkAnchorByName">By Anchor Name</span><br />
<select id="cmbAnchorName" onchange="GetE('cmbAnchorId').value='';" style="WIDTH: 100%">
<option value="" selected="selected"></option>
</select>
</td>
<td>&nbsp;&nbsp;&nbsp;</td>
<td width="50%">
<span fckLang="DlgLnkAnchorById">By Element Id</span><br />
<select id="cmbAnchorId" onchange="GetE('cmbAnchorName').value='';" style="WIDTH: 100%">
<option value="" selected="selected"></option>
</select>
</td>
</tr>
</table>
</div>
<div id="divNoAnchor" style="DISPLAY: none">
<span fckLang="DlgLnkNoAnchors">&lt;No anchors available in the document&gt;</span>
</div>
</div>
<div id="divLinkTypeEMail" style="DISPLAY: none">
<span fckLang="DlgLnkEMail">E-Mail Address</span><br />
<input id="txtEMailAddress" style="WIDTH: 100%" type="text" /><br />
<span fckLang="DlgLnkEMailSubject">Message Subject</span><br />
<input id="txtEMailSubject" style="WIDTH: 100%" type="text" /><br />
<span fckLang="DlgLnkEMailBody">Message Body</span><br />
<textarea id="txtEMailBody" style="WIDTH: 100%" rows="3" cols="20"></textarea>
</div>
</div>
<div id="divUpload" style="DISPLAY: none">
<form id="frmUpload" method="post" target="UploadWindow" enctype="multipart/form-data" action="" onsubmit="return CheckUpload();">
<span fckLang="DlgLnkUpload">Upload</span><br />
<input id="txtUploadFile" style="WIDTH: 100%" type="file" size="40" name="NewFile" /><br />
<br />
<input id="btnUpload" type="submit" value="Send it to the Server" fckLang="DlgLnkBtnUpload" />
<script type="text/javascript">
document.write( '<iframe name="UploadWindow" style="display: none" src="' + FCKTools.GetVoidUrl() + '"><\/iframe>' ) ;
</script>
</form>
</div>
<div id="divTarget" style="DISPLAY: none">
<table cellspacing="0" cellpadding="0" width="100%" border="0">
<tr>
<td nowrap="nowrap">
<span fckLang="DlgLnkTarget">Target</span><br />
<select id="cmbTarget" onchange="SetTarget(this.value);">
<option value="" fckLang="DlgGenNotSet" selected="selected">&lt;not set&gt;</option>
<option value="frame" fckLang="DlgLnkTargetFrame">&lt;frame&gt;</option>
<option value="popup" fckLang="DlgLnkTargetPopup">&lt;popup window&gt;</option>
<option value="_blank" fckLang="DlgLnkTargetBlank">New Window (_blank)</option>
<option value="_top" fckLang="DlgLnkTargetTop">Topmost Window (_top)</option>
<option value="_self" fckLang="DlgLnkTargetSelf">Same Window (_self)</option>
<option value="_parent" fckLang="DlgLnkTargetParent">Parent Window (_parent)</option>
</select>
</td>
<td>&nbsp;</td>
<td id="tdTargetFrame" nowrap="nowrap" width="100%">
<span fckLang="DlgLnkTargetFrameName">Target Frame Name</span><br />
<input id="txtTargetFrame" style="WIDTH: 100%" type="text" onkeyup="OnTargetNameChange();"
onchange="OnTargetNameChange();" />
</td>
<td id="tdPopupName" style="DISPLAY: none" nowrap="nowrap" width="100%">
<span fckLang="DlgLnkPopWinName">Popup Window Name</span><br />
<input id="txtPopupName" style="WIDTH: 100%" type="text" />
</td>
</tr>
</table>
<br />
<table id="tablePopupFeatures" style="DISPLAY: none" cellspacing="0" cellpadding="0" align="center"
border="0">
<tr>
<td>
<span fckLang="DlgLnkPopWinFeat">Popup Window Features</span><br />
<table cellspacing="0" cellpadding="0" border="0">
<tr>
<td valign="top" nowrap="nowrap" width="50%">
<input id="chkPopupResizable" name="chkFeature" value="resizable" type="checkbox" /><label for="chkPopupResizable" fckLang="DlgLnkPopResize">Resizable</label><br />
<input id="chkPopupLocationBar" name="chkFeature" value="location" type="checkbox" /><label for="chkPopupLocationBar" fckLang="DlgLnkPopLocation">Location
Bar</label><br />
<input id="chkPopupManuBar" name="chkFeature" value="menubar" type="checkbox" /><label for="chkPopupManuBar" fckLang="DlgLnkPopMenu">Menu
Bar</label><br />
<input id="chkPopupScrollBars" name="chkFeature" value="scrollbars" type="checkbox" /><label for="chkPopupScrollBars" fckLang="DlgLnkPopScroll">Scroll
Bars</label>
</td>
<td></td>
<td valign="top" nowrap="nowrap" width="50%">
<input id="chkPopupStatusBar" name="chkFeature" value="status" type="checkbox" /><label for="chkPopupStatusBar" fckLang="DlgLnkPopStatus">Status
Bar</label><br />
<input id="chkPopupToolbar" name="chkFeature" value="toolbar" type="checkbox" /><label for="chkPopupToolbar" fckLang="DlgLnkPopToolbar">Toolbar</label><br />
<input id="chkPopupFullScreen" name="chkFeature" value="fullscreen" type="checkbox" /><label for="chkPopupFullScreen" fckLang="DlgLnkPopFullScrn">Full
Screen (IE)</label><br />
<input id="chkPopupDependent" name="chkFeature" value="dependent" type="checkbox" /><label for="chkPopupDependent" fckLang="DlgLnkPopDependent">Dependent
(Netscape)</label>
</td>
</tr>
<tr>
<td valign="top" nowrap="nowrap" width="50%">&nbsp;</td>
<td></td>
<td valign="top" nowrap="nowrap" width="50%"></td>
</tr>
<tr>
<td valign="top">
<table cellspacing="0" cellpadding="0" border="0">
<tr>
<td nowrap="nowrap"><span fckLang="DlgLnkPopWidth">Width</span></td>
<td>&nbsp;<input id="txtPopupWidth" type="text" maxlength="4" size="4" /></td>
</tr>
<tr>
<td nowrap="nowrap"><span fckLang="DlgLnkPopHeight">Height</span></td>
<td>&nbsp;<input id="txtPopupHeight" type="text" maxlength="4" size="4" /></td>
</tr>
</table>
</td>
<td>&nbsp;&nbsp;</td>
<td valign="top">
<table cellspacing="0" cellpadding="0" border="0">
<tr>
<td nowrap="nowrap"><span fckLang="DlgLnkPopLeft">Left Position</span></td>
<td>&nbsp;<input id="txtPopupLeft" type="text" maxlength="4" size="4" /></td>
</tr>
<tr>
<td nowrap="nowrap"><span fckLang="DlgLnkPopTop">Top Position</span></td>
<td>&nbsp;<input id="txtPopupTop" type="text" maxlength="4" size="4" /></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<div id="divAttribs" style="DISPLAY: none">
<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
<tr>
<td valign="top" width="50%">
<span fckLang="DlgGenId">Id</span><br />
<input id="txtAttId" style="WIDTH: 100%" type="text" />
</td>
<td width="1"></td>
<td valign="top">
<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
<tr>
<td width="60%">
<span fckLang="DlgGenLangDir">Language Direction</span><br />
<select id="cmbAttLangDir" style="WIDTH: 100%">
<option value="" fckLang="DlgGenNotSet" selected>&lt;not set&gt;</option>
<option value="ltr" fckLang="DlgGenLangDirLtr">Left to Right (LTR)</option>
<option value="rtl" fckLang="DlgGenLangDirRtl">Right to Left (RTL)</option>
</select>
</td>
<td width="1%">&nbsp;&nbsp;&nbsp;</td>
<td nowrap="nowrap"><span fckLang="DlgGenAccessKey">Access Key</span><br />
<input id="txtAttAccessKey" style="WIDTH: 100%" type="text" maxlength="1" size="1" />
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td valign="top" width="50%">
<span fckLang="DlgGenName">Name</span><br />
<input id="txtAttName" style="WIDTH: 100%" type="text" />
</td>
<td width="1"></td>
<td valign="top">
<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
<tr>
<td width="60%">
<span fckLang="DlgGenLangCode">Language Code</span><br />
<input id="txtAttLangCode" style="WIDTH: 100%" type="text" />
</td>
<td width="1%">&nbsp;&nbsp;&nbsp;</td>
<td nowrap="nowrap">
<span fckLang="DlgGenTabIndex">Tab Index</span><br />
<input id="txtAttTabIndex" style="WIDTH: 100%" type="text" maxlength="5" size="5" />
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td valign="top" width="50%">&nbsp;</td>
<td width="1"></td>
<td valign="top"></td>
</tr>
<tr>
<td valign="top" width="50%">
<span fckLang="DlgGenTitle">Advisory Title</span><br />
<input id="txtAttTitle" style="WIDTH: 100%" type="text" />
</td>
<td width="1">&nbsp;&nbsp;&nbsp;</td>
<td valign="top">
<span fckLang="DlgGenContType">Advisory Content Type</span><br />
<input id="txtAttContentType" style="WIDTH: 100%" type="text" />
</td>
</tr>
<tr>
<td valign="top">
<span fckLang="DlgGenClass">Stylesheet Classes</span><br />
<input id="txtAttClasses" style="WIDTH: 100%" type="text" />
</td>
<td></td>
<td valign="top">
<span fckLang="DlgGenLinkCharset">Linked Resource Charset</span><br />
<input id="txtAttCharSet" style="WIDTH: 100%" type="text" />
</td>
</tr>
</table>
<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
<tr>
<td>
<span fckLang="DlgGenStyle">Style</span><br />
<input id="txtAttStyle" style="WIDTH: 100%" type="text" />
</td>
</tr>
</table>
</div>
</body>
</html>
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_form.html
New file
0,0 → 1,109
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<!--
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* Form dialog window.
-->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta content="noindex, nofollow" name="robots" />
<script src="common/fck_dialog_common.js" type="text/javascript"></script>
<script type="text/javascript">
 
var dialog = window.parent ;
var oEditor = dialog.InnerDialogLoaded() ;
 
// Gets the document DOM
var oDOM = oEditor.FCK.EditorDocument ;
 
var oActiveEl = dialog.Selection.GetSelection().MoveToAncestorNode( 'FORM' ) ;
 
window.onload = function()
{
// First of all, translate the dialog box texts
oEditor.FCKLanguageManager.TranslatePage(document) ;
 
if ( oActiveEl )
{
GetE('txtName').value = oActiveEl.name ;
GetE('txtAction').value = oActiveEl.getAttribute( 'action', 2 ) ;
GetE('txtMethod').value = oActiveEl.method ;
}
else
oActiveEl = null ;
 
dialog.SetOkButton( true ) ;
dialog.SetAutoSize( true ) ;
SelectField( 'txtName' ) ;
}
 
function Ok()
{
if ( !oActiveEl )
{
oActiveEl = oEditor.FCK.InsertElement( 'form' ) ;
 
if ( oEditor.FCKBrowserInfo.IsGeckoLike )
oEditor.FCKTools.AppendBogusBr( oActiveEl ) ;
}
 
oActiveEl.name = GetE('txtName').value ;
SetAttribute( oActiveEl, 'action', GetE('txtAction').value ) ;
oActiveEl.method = GetE('txtMethod').value ;
 
return true ;
}
 
</script>
</head>
<body style="overflow: hidden">
<table width="100%" style="height: 100%">
<tr>
<td align="center">
<table cellspacing="0" cellpadding="0" width="80%" border="0">
<tr>
<td>
<span fcklang="DlgFormName">Name</span><br />
<input style="width: 100%" type="text" id="txtName" />
</td>
</tr>
<tr>
<td>
<span fcklang="DlgFormAction">Action</span><br />
<input style="width: 100%" type="text" id="txtAction" />
</td>
</tr>
<tr>
<td>
<span fcklang="DlgFormMethod">Method</span><br />
<select id="txtMethod">
<option value="get" selected="selected">GET</option>
<option value="post">POST</option>
</select>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_about/logo_fredck.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_about/logo_fredck.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_about/sponsors/spellchecker_net.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_about/sponsors/spellchecker_net.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_about/logo_fckeditor.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_about/logo_fckeditor.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_about.html
New file
0,0 → 1,161
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!--
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* "About" dialog window.
-->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="robots" content="noindex, nofollow" />
<script src="common/fck_dialog_common.js" type="text/javascript"></script>
<script type="text/javascript">
 
var oEditor = window.parent.InnerDialogLoaded() ;
var FCKLang = oEditor.FCKLang ;
 
window.parent.AddTab( 'About', FCKLang.DlgAboutAboutTab ) ;
window.parent.AddTab( 'License', FCKLang.DlgAboutLicenseTab ) ;
window.parent.AddTab( 'BrowserInfo', FCKLang.DlgAboutBrowserInfoTab ) ;
 
// Function called when a dialog tag is selected.
function OnDialogTabChange( tabCode )
{
ShowE('divAbout', ( tabCode == 'About' ) ) ;
ShowE('divLicense', ( tabCode == 'License' ) ) ;
ShowE('divInfo' , ( tabCode == 'BrowserInfo' ) ) ;
}
 
function SendEMail()
{
var eMail = 'mailto:' ;
eMail += 'fredck' ;
eMail += '@' ;
eMail += 'fckeditor' ;
eMail += '.' ;
eMail += 'net' ;
 
window.location = eMail ;
}
 
window.onload = function()
{
// Translate the dialog box texts.
oEditor.FCKLanguageManager.TranslatePage(document) ;
 
window.parent.SetAutoSize( true ) ;
}
 
</script>
</head>
<body style="overflow: hidden">
<div id="divAbout">
<table cellpadding="0" cellspacing="0" border="0" width="100%" style="height: 100%">
<tr>
<td colspan="2">
<img alt="" src="fck_about/logo_fckeditor.gif" width="236" height="41" align="left" />
<table width="80" border="0" cellspacing="0" cellpadding="5" bgcolor="#ffffff" align="right">
<tr>
<td align="center" nowrap="nowrap" style="border-right: #000000 1px solid; border-top: #000000 1px solid;
border-left: #000000 1px solid; border-bottom: #000000 1px solid">
<span fcklang="DlgAboutVersion">version</span>
<br />
<b>2.6.3</b><br />
Build 19836</td>
</tr>
</table>
</td>
</tr>
<tr style="height: 100%">
<td align="center" valign="middle">
<span style="font-size: 14px" dir="ltr">
<b><a href="http://www.fckeditor.net/?about" target="_blank" title="Visit the FCKeditor web site">
Support <b>Open Source</b> Software</a></b> </span>
<div style="padding-top:15px">
<img alt="" src="fck_about/logo_fredck.gif" width="87" height="36" />
</div>
</td>
<td align="center" nowrap="nowrap" valign="middle">
<div>
<div style="margin-bottom:5px" dir="ltr">Selected Sponsor</div>
<a href="http://www.spellchecker.net/fckeditor/" target="_blank"><img alt="Selected Sponsor" border="0" src="fck_about/sponsors/spellchecker_net.gif" width="75" height="75" /></a>
</div>
</td>
</tr>
<tr>
<td width="100%" nowrap="nowrap">
<span fcklang="DlgAboutInfo">For further information go to</span> <a href="http://www.fckeditor.net/?About"
target="_blank">http://www.fckeditor.net/</a>.
<br />
Copyright &copy; 2003-2008 <a href="#" onclick="SendEMail();">Frederico Caldeira Knabben</a>
</td>
<td align="center">
<a href="http://www.fckeditor.net/sponsors/apply" target="_blank">Become a Sponsor</a>
</td>
</tr>
</table>
</div>
<div id="divLicense" style="display: none">
<p>
Licensed under the terms of any of the following licenses at your
choice:
</p>
<ul>
<li style="margin-bottom:15px">
<b>GNU General Public License</b> Version 2 or later (the "GPL")<br />
<a href="http://www.gnu.org/licenses/gpl.html" target="_blank">http://www.gnu.org/licenses/gpl.html</a>
</li>
<li style="margin-bottom:15px">
<b>GNU Lesser General Public License</b> Version 2.1 or later (the "LGPL")<br />
<a href="http://www.gnu.org/licenses/lgpl.html" target="_blank">http://www.gnu.org/licenses/lgpl.html</a>
</li>
<li>
<b>Mozilla Public License</b> Version 1.1 or later (the "MPL")<br />
<a href="http://www.mozilla.org/MPL/MPL-1.1.html" target="_blank">http://www.mozilla.org/MPL/MPL-1.1.html</a>
</li>
</ul>
</div>
<div id="divInfo" style="display: none" dir="ltr">
<table align="center" width="80%" border="0">
<tr>
<td>
<script type="text/javascript">
<!--
document.write( '<b>User Agent<\/b><br />' + window.navigator.userAgent + '<br /><br />' ) ;
document.write( '<b>Browser<\/b><br />' + window.navigator.appName + ' ' + window.navigator.appVersion + '<br /><br />' ) ;
document.write( '<b>Platform<\/b><br />' + window.navigator.platform + '<br /><br />' ) ;
 
var sUserLang = '?' ;
 
if ( window.navigator.language )
sUserLang = window.navigator.language.toLowerCase() ;
else if ( window.navigator.userLanguage )
sUserLang = window.navigator.userLanguage.toLowerCase() ;
 
document.write( '<b>User Language<\/b><br />' + sUserLang ) ;
//-->
</script>
</td>
</tr>
</table>
</div>
</body>
</html>
/trunk/api/fckeditor/fckeditor/editor/dialog/fck_anchor.html
New file
0,0 → 1,220
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<!--
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
* Licensed under the terms of any of the following licenses at your
* choice:
*
* - GNU General Public License Version 2 or later (the "GPL")
* http://www.gnu.org/licenses/gpl.html
*
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
* http://www.gnu.org/licenses/lgpl.html
*
* - Mozilla Public License Version 1.1 or later (the "MPL")
* http://www.mozilla.org/MPL/MPL-1.1.html
*
* == END LICENSE ==
*
* Anchor dialog window.
-->
<html>
<head>
<title>Anchor Properties</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta content="noindex, nofollow" name="robots">
<script src="common/fck_dialog_common.js" type="text/javascript"></script>
<script type="text/javascript">
 
var dialog = window.parent ;
var oEditor = dialog.InnerDialogLoaded() ;
 
var FCK = oEditor.FCK ;
var FCKBrowserInfo = oEditor.FCKBrowserInfo ;
var FCKTools = oEditor.FCKTools ;
var FCKRegexLib = oEditor.FCKRegexLib ;
 
var oDOM = FCK.EditorDocument ;
 
var oFakeImage = dialog.Selection.GetSelectedElement() ;
 
var oAnchor ;
 
if ( oFakeImage )
{
if ( oFakeImage.tagName == 'IMG' && oFakeImage.getAttribute('_fckanchor') )
oAnchor = FCK.GetRealElement( oFakeImage ) ;
else
oFakeImage = null ;
}
 
//Search for a real anchor
if ( !oFakeImage )
{
oAnchor = FCK.Selection.MoveToAncestorNode( 'A' ) ;
if ( oAnchor )
FCK.Selection.SelectNode( oAnchor ) ;
}
 
window.onload = function()
{
// First of all, translate the dialog box texts
oEditor.FCKLanguageManager.TranslatePage(document) ;
 
if ( oAnchor )
GetE('txtName').value = oAnchor.name ;
else
oAnchor = null ;
 
window.parent.SetOkButton( true ) ;
window.parent.SetAutoSize( true ) ;
 
SelectField( 'txtName' ) ;
}
 
function Ok()
{
var sNewName = GetE('txtName').value ;
 
// Remove any illegal character in a name attribute:
// A name should start with a letter, but the validator passes anyway.
sNewName = sNewName.replace( /[^\w-_\.:]/g, '_' ) ;
 
if ( sNewName.length == 0 )
{
// Remove the anchor if the user leaves the name blank
if ( oAnchor )
{
// Removes the current anchor from the document using the new command
FCK.Commands.GetCommand( 'AnchorDelete' ).Execute() ;
return true ;
}
 
alert( oEditor.FCKLang.DlgAnchorErrorName ) ;
return false ;
}
 
oEditor.FCKUndo.SaveUndoStep() ;
 
if ( oAnchor ) // Modifying an existent anchor.
{
ReadjustLinksToAnchor( oAnchor.name, sNewName );
 
// Buggy explorer, bad bad browser. http://alt-tag.com/blog/archives/2006/02/ie-dom-bugs/
// Instead of just replacing the .name for the existing anchor (in order to preserve the content), we must remove the .name
// and assign .name, although it won't appear until it's specially processed in fckxhtml.js
 
// We remove the previous name
oAnchor.removeAttribute( 'name' ) ;
// Now we set it, but later we must process it specially
oAnchor.name = sNewName ;
 
return true ;
}
 
// Create a new anchor preserving the current selection
var aNewAnchors = oEditor.FCK.CreateLink( '#' ) ;
 
if ( aNewAnchors.length == 0 )
aNewAnchors.push( oEditor.FCK.InsertElement( 'a' ) ) ;
else
{
// Remove the fake href
for ( var i = 0 ; i < aNewAnchors.length ; i++ )
aNewAnchors[i].removeAttribute( 'href' ) ;
}
 
// More than one anchors may have been created, so interact through all of them (see #220).
for ( var i = 0 ; i < aNewAnchors.length ; i++ )
{
oAnchor = aNewAnchors[i] ;
 
// Set the name
if ( FCKBrowserInfo.IsIE )
{
// Setting anchor names directly in IE will trash the HTML code stored
// in FCKTempBin after undos. See #2263.
var replaceAnchor = oEditor.FCK.EditorDocument.createElement( '<a name="' +
FCKTools.HTMLEncode( sNewName ).replace( '"', '&quot;' ) + '">' ) ;
oEditor.FCKDomTools.MoveChildren( oAnchor, replaceAnchor ) ;
oAnchor.parentNode.replaceChild( replaceAnchor, oAnchor ) ;
oAnchor = replaceAnchor ;
}
else
oAnchor.name = sNewName ;
 
// IE does require special processing to show the Anchor's image
// Opera doesn't allow to select empty anchors
if ( FCKBrowserInfo.IsIE || FCKBrowserInfo.IsOpera )
{
if ( oAnchor.innerHTML != '' )
{
if ( FCKBrowserInfo.IsIE )
oAnchor.className += ' FCK__AnchorC' ;
}
else
{
// Create a fake image for both IE and Opera
var oImg = oEditor.FCKDocumentProcessor_CreateFakeImage( 'FCK__Anchor', oAnchor.cloneNode(true) ) ;
oImg.setAttribute( '_fckanchor', 'true', 0 ) ;
 
oAnchor.parentNode.insertBefore( oImg, oAnchor ) ;
oAnchor.parentNode.removeChild( oAnchor ) ;
}
 
}
}
 
return true ;
}
 
// Checks all the links in the current page pointing to the current name and changes them to the new name
function ReadjustLinksToAnchor( sCurrent, sNew )
{
var oDoc = FCK.EditorDocument ;
 
var aLinks = oDoc.getElementsByTagName( 'A' ) ;
 
var sReference = '#' + sCurrent ;
// The url of the document, so we check absolute and partial references.
var sFullReference = oDoc.location.href.replace( /(#.*$)/, '') ;
sFullReference += sReference ;
 
var oLink ;
var i = aLinks.length - 1 ;
while ( i >= 0 && ( oLink = aLinks[i--] ) )
{
var sHRef = oLink.getAttribute( '_fcksavedurl' ) ;
if ( sHRef == null )
sHRef = oLink.getAttribute( 'href' , 2 ) || '' ;
 
if ( sHRef == sReference || sHRef == sFullReference )
{
oLink.href = '#' + sNew ;
SetAttribute( oLink, '_fcksavedurl', '#' + sNew ) ;
}
}
}
 
</script>
</head>
<body style="overflow: hidden">
<table height="100%" width="100%">
<tr>
<td align="center">
<table border="0" cellpadding="0" cellspacing="0" width="80%">
<tr>
<td>
<span fckLang="DlgAnchorName">Anchor Name</span><BR>
<input id="txtName" style="WIDTH: 100%" type="text">
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>