<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">\r
<!--\r
* FCKeditor - The text editor for Internet - http://www.fckeditor.net\r
- * Copyright (C) 2003-2007 Frederico Caldeira Knabben\r
+ * Copyright (C) 2003-2010 Frederico Caldeira Knabben\r
*\r
* == BEGIN LICENSE ==\r
*\r
*\r
* == END LICENSE ==\r
*\r
- * "Replace" dialog box window.\r
+ * "Find" and "Replace" dialog box window.\r
-->\r
<html xmlns="http://www.w3.org/1999/xhtml">\r
<head>\r
<title></title>\r
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />\r
<meta content="noindex, nofollow" name="robots" />\r
+ <script src="common/fck_dialog_common.js" type="text/javascript"></script>\r
<script type="text/javascript">\r
\r
-var oEditor = window.parent.InnerDialogLoaded() ;\r
+var dialog = window.parent ;\r
+var oEditor = dialog.InnerDialogLoaded() ;\r
+var dialogArguments = dialog.Args() ;\r
\r
-function OnLoad()\r
+var FCKLang = oEditor.FCKLang ;\r
+var FCKDomTools = oEditor.FCKDomTools ;\r
+var FCKDomRange = oEditor.FCKDomRange ;\r
+var FCKListsLib = oEditor.FCKListsLib ;\r
+var FCKTools = oEditor.FCKTools ;\r
+var EditorDocument = oEditor.FCK.EditorDocument ;\r
+var HighlightStyle = oEditor.FCKStyles.GetStyle( '_FCK_SelectionHighlight' ) ;\r
+\r
+dialog.AddTab( 'Find', FCKLang.DlgFindTitle ) ;\r
+dialog.AddTab( 'Replace', FCKLang.DlgReplaceTitle ) ;\r
+var idMap = {} ;\r
+\r
+function OnDialogTabChange( tabCode )\r
{\r
- // First of all, translate the dialog box texts\r
- oEditor.FCKLanguageManager.TranslatePage( document ) ;\r
+ ShowE( 'divFind', ( tabCode == 'Find' ) ) ;\r
+ ShowE( 'divReplace', ( tabCode == 'Replace' ) ) ;\r
+ idMap['FindText'] = 'txtFind' + tabCode ;\r
+ idMap['CheckCase'] = 'chkCase' + tabCode ;\r
+ idMap['CheckWord'] = 'chkWord' + tabCode ;\r
\r
- window.parent.SetAutoSize( true ) ;\r
+ if ( tabCode == 'Replace' )\r
+ dialog.SetAutoSize( true ) ;\r
+}\r
\r
- oEditor.FCKUndo.SaveUndoStep() ;\r
+GetNextNonEmptyTextNode = function( node, stopNode )\r
+{\r
+ while ( ( node = FCKDomTools.GetNextSourceNode( node, false, 3, stopNode ) ) && node && node.length < 1 )\r
+ 1 ;\r
+ return node ;\r
}\r
\r
-function btnStat(frm)\r
+CharacterCursor = function( arg )\r
{\r
- document.getElementById('btnReplace').disabled =\r
- document.getElementById('btnReplaceAll').disabled =\r
- ( document.getElementById('txtFind').value.length == 0 ) ;\r
+ if ( arg.nodeType && arg.nodeType == 9 )\r
+ {\r
+ this._textNode = GetNextNonEmptyTextNode( arg.body, arg.documentElement ) ;\r
+ this._offset = 0 ;\r
+ this._doc = arg ;\r
+ }\r
+ else\r
+ {\r
+ this._textNode = arguments[0] ;\r
+ this._offset = arguments[1] ;\r
+ this._doc = FCKTools.GetElementDocument( arguments[0] ) ;\r
+ }\r
}\r
+CharacterCursor.prototype =\r
+{\r
+ GetCharacter : function()\r
+ {\r
+ return ( this._textNode && this._textNode.nodeValue.charAt( this._offset ) ) || null ;\r
+ },\r
+\r
+ // Non-normalized.\r
+ GetTextNode : function()\r
+ {\r
+ return this._textNode ;\r
+ },\r
\r
-function ReplaceTextNodes( parentNode, regex, replaceValue, replaceAll, hasFound )\r
+ // Non-normalized.\r
+ GetIndex : function()\r
+ {\r
+ return this._offset ;\r
+ },\r
+\r
+ // Return value means whehther we've crossed a line break or a paragraph boundary.\r
+ MoveNext : function()\r
+ {\r
+ if ( this._offset < this._textNode.length - 1 )\r
+ {\r
+ this._offset++ ;\r
+ return false ;\r
+ }\r
+\r
+ var crossed = false ;\r
+ var curNode = this._textNode ;\r
+ while ( ( curNode = FCKDomTools.GetNextSourceNode( curNode ) )\r
+ && curNode && ( curNode.nodeType != 3 || curNode.length < 1 ) )\r
+ {\r
+ var tag = curNode.nodeName.toLowerCase() ;\r
+ if ( FCKListsLib.BlockElements[tag] || tag == 'br' )\r
+ crossed = true ;\r
+ }\r
+\r
+ this._textNode = curNode ;\r
+ this._offset = 0 ;\r
+ return crossed ;\r
+ },\r
+\r
+ // Return value means whehther we've crossed a line break or a paragraph boundary.\r
+ MoveBack : function()\r
+ {\r
+ if ( this._offset > 0 && this._textNode.length > 0 )\r
+ {\r
+ this._offset = Math.min( this._offset - 1, this._textNode.length - 1 ) ;\r
+ return false ;\r
+ }\r
+\r
+ var crossed = false ;\r
+ var curNode = this._textNode ;\r
+ while ( ( curNode = FCKDomTools.GetPreviousSourceNode( curNode ) )\r
+ && curNode && ( curNode.nodeType != 3 || curNode.length < 1 ) )\r
+ {\r
+ var tag = curNode.nodeName.toLowerCase() ;\r
+ if ( FCKListsLib.BlockElements[tag] || tag == 'br' )\r
+ crossed = true ;\r
+ }\r
+\r
+ this._textNode = curNode ;\r
+ this._offset = curNode && curNode.length - 1 ;\r
+ return crossed ;\r
+ },\r
+\r
+ Clone : function()\r
+ {\r
+ return new CharacterCursor( this._textNode, this._offset ) ;\r
+ }\r
+} ;\r
+\r
+CharacterRange = function( initCursor, maxLength )\r
+{\r
+ this._cursors = initCursor.push ? initCursor : [initCursor] ;\r
+ this._maxLength = maxLength ;\r
+ this._highlightRange = null ;\r
+}\r
+CharacterRange.prototype =\r
{\r
- for ( var i = 0 ; i < parentNode.childNodes.length ; i++ )\r
+ ToDomRange : function()\r
{\r
- var oNode = parentNode.childNodes[i] ;\r
- if ( oNode.nodeType == 3 )\r
+ var firstCursor = this._cursors[0] ;\r
+ var lastCursor = this._cursors[ this._cursors.length - 1 ] ;\r
+ var domRange = new FCKDomRange( FCKTools.GetElementWindow( firstCursor.GetTextNode() ) ) ;\r
+ var w3cRange = domRange._Range = domRange.CreateRange() ;\r
+ w3cRange.setStart( firstCursor.GetTextNode(), firstCursor.GetIndex() ) ;\r
+ w3cRange.setEnd( lastCursor.GetTextNode(), lastCursor.GetIndex() + 1 ) ;\r
+ domRange._UpdateElementInfo() ;\r
+ return domRange ;\r
+ },\r
+\r
+ Highlight : function()\r
+ {\r
+ if ( this._cursors.length < 1 )\r
+ return ;\r
+\r
+ var domRange = this.ToDomRange() ;\r
+ HighlightStyle.ApplyToRange( domRange, false, true ) ;\r
+ this._highlightRange = domRange ;\r
+\r
+ var charRange = CharacterRange.CreateFromDomRange( domRange ) ;\r
+ var focusNode = domRange.StartNode ;\r
+ if ( focusNode.nodeType != 1 )\r
+ focusNode = focusNode.parentNode ;\r
+ FCKDomTools.ScrollIntoView( focusNode, false ) ;\r
+ this._cursors = charRange._cursors ;\r
+ },\r
+\r
+ RemoveHighlight : function()\r
+ {\r
+ if ( this._highlightRange )\r
+ {\r
+ HighlightStyle.RemoveFromRange( this._highlightRange, false, true ) ;\r
+ var charRange = CharacterRange.CreateFromDomRange( this._highlightRange ) ;\r
+ this._cursors = charRange._cursors ;\r
+ this._highlightRange = null ;\r
+ }\r
+ },\r
+\r
+ GetHighlightDomRange : function()\r
+ {\r
+ return this._highlightRange;\r
+ },\r
+\r
+ MoveNext : function()\r
+ {\r
+ var next = this._cursors[ this._cursors.length - 1 ].Clone() ;\r
+ var retval = next.MoveNext() ;\r
+ if ( retval )\r
+ this._cursors = [] ;\r
+ this._cursors.push( next ) ;\r
+ if ( this._cursors.length > this._maxLength )\r
+ this._cursors.shift() ;\r
+ return retval ;\r
+ },\r
+\r
+ MoveBack : function()\r
+ {\r
+ var prev = this._cursors[0].Clone() ;\r
+ var retval = prev.MoveBack() ;\r
+ if ( retval )\r
+ this._cursors = [] ;\r
+ this._cursors.unshift( prev ) ;\r
+ if ( this._cursors.length > this._maxLength )\r
+ this._cursors.pop() ;\r
+ return retval ;\r
+ },\r
+\r
+ GetEndCharacter : function()\r
+ {\r
+ if ( this._cursors.length < 1 )\r
+ return null ;\r
+ var retval = this._cursors[ this._cursors.length - 1 ].GetCharacter() ;\r
+ return retval ;\r
+ },\r
+\r
+ GetNextRange : function( len )\r
+ {\r
+ if ( this._cursors.length == 0 )\r
+ return null ;\r
+ var cur = this._cursors[ this._cursors.length - 1 ].Clone() ;\r
+ cur.MoveNext() ;\r
+ return new CharacterRange( cur, len ) ;\r
+ },\r
+\r
+ GetCursors : function()\r
+ {\r
+ return this._cursors ;\r
+ }\r
+} ;\r
+\r
+CharacterRange.CreateFromDomRange = function( domRange )\r
+{\r
+ var w3cRange = domRange._Range ;\r
+ var startContainer = w3cRange.startContainer ;\r
+ var endContainer = w3cRange.endContainer ;\r
+ var startTextNode, startIndex, endTextNode, endIndex ;\r
+\r
+ if ( startContainer.nodeType == 3 )\r
+ {\r
+ startTextNode = startContainer ;\r
+ startIndex = w3cRange.startOffset ;\r
+ }\r
+ else if ( domRange.StartNode.nodeType == 3 )\r
+ {\r
+ startTextNode = domRange.StartNode ;\r
+ startIndex = 0 ;\r
+ }\r
+ else\r
+ {\r
+ startTextNode = GetNextNonEmptyTextNode( domRange.StartNode, domRange.StartNode.parentNode ) ;\r
+ if ( !startTextNode )\r
+ return null ;\r
+ startIndex = 0 ;\r
+ }\r
+\r
+ if ( endContainer.nodeType == 3 && w3cRange.endOffset > 0 )\r
+ {\r
+ endTextNode = endContainer ;\r
+ endIndex = w3cRange.endOffset - 1 ;\r
+ }\r
+ else\r
+ {\r
+ endTextNode = domRange.EndNode ;\r
+ while ( endTextNode.nodeType != 3 )\r
+ endTextNode = endTextNode.lastChild ;\r
+ endIndex = endTextNode.length - 1 ;\r
+ }\r
+\r
+ var cursors = [] ;\r
+ var current = new CharacterCursor( startTextNode, startIndex ) ;\r
+ cursors.push( current ) ;\r
+ if ( !( current.GetTextNode() == endTextNode && current.GetIndex() == endIndex ) && !domRange.CheckIsEmpty() )\r
+ {\r
+ do\r
{\r
- var sReplaced = oNode.nodeValue.replace( regex, replaceValue ) ;\r
- if ( oNode.nodeValue != sReplaced )\r
+ current = current.Clone() ;\r
+ current.MoveNext() ;\r
+ cursors.push( current ) ;\r
+ }\r
+ while ( !( current.GetTextNode() == endTextNode && current.GetIndex() == endIndex ) ) ;\r
+ }\r
+\r
+ return new CharacterRange( cursors, cursors.length ) ;\r
+}\r
+\r
+// Knuth-Morris-Pratt Algorithm for stream input\r
+KMP_NOMATCH = 0 ;\r
+KMP_ADVANCED = 1 ;\r
+KMP_MATCHED = 2 ;\r
+KmpMatch = function( pattern, ignoreCase )\r
+{\r
+ var overlap = [ -1 ] ;\r
+ for ( var i = 0 ; i < pattern.length ; i++ )\r
+ {\r
+ overlap.push( overlap[i] + 1 ) ;\r
+ while ( overlap[ i + 1 ] > 0 && pattern.charAt( i ) != pattern.charAt( overlap[ i + 1 ] - 1 ) )\r
+ overlap[ i + 1 ] = overlap[ overlap[ i + 1 ] - 1 ] + 1 ;\r
+ }\r
+ this._Overlap = overlap ;\r
+ this._State = 0 ;\r
+ this._IgnoreCase = ( ignoreCase === true ) ;\r
+ if ( ignoreCase )\r
+ this.Pattern = pattern.toLowerCase();\r
+ else\r
+ this.Pattern = pattern ;\r
+}\r
+KmpMatch.prototype = {\r
+ FeedCharacter : function( c )\r
+ {\r
+ if ( this._IgnoreCase )\r
+ c = c.toLowerCase();\r
+\r
+ while ( true )\r
+ {\r
+ if ( c == this.Pattern.charAt( this._State ) )\r
{\r
- oNode.nodeValue = sReplaced ;\r
- if ( ! replaceAll )\r
- return true ;\r
- hasFound = true ;\r
+ this._State++ ;\r
+ if ( this._State == this.Pattern.length )\r
+ {\r
+ // found a match, start over, don't care about partial matches involving the current match\r
+ this._State = 0;\r
+ return KMP_MATCHED;\r
+ }\r
+ return KMP_ADVANCED ;\r
}\r
+ else if ( this._State == 0 )\r
+ return KMP_NOMATCH;\r
+ else\r
+ this._State = this._Overlap[ this._State ];\r
}\r
\r
- hasFound = ReplaceTextNodes( oNode, regex, replaceValue, replaceAll, hasFound ) ;\r
- if ( ! replaceAll && hasFound )\r
- return true ;\r
+ return null ;\r
+ },\r
+\r
+ Reset : function()\r
+ {\r
+ this._State = 0 ;\r
+ }\r
+};\r
+\r
+// Place a range at the start of document.\r
+function OnLoad()\r
+{\r
+ // First of all, translate the dialog box texts.\r
+ oEditor.FCKLanguageManager.TranslatePage( document ) ;\r
+\r
+ // Show the appropriate tab at startup.\r
+ if ( dialogArguments.CustomValue == 'Find' )\r
+ {\r
+ dialog.SetSelectedTab( 'Find' ) ;\r
+ dialog.SetAutoSize( true ) ;\r
}\r
+ else\r
+ dialog.SetSelectedTab( 'Replace' ) ;\r
\r
- return hasFound ;\r
+ SelectField( 'txtFind' + dialogArguments.CustomValue ) ;\r
}\r
\r
-function GetRegexExpr()\r
+function btnStat()\r
{\r
- var sExpr = EscapeRegexString( document.getElementById('txtFind').value ) ;\r
+ GetE('btnReplace').disabled =\r
+ GetE('btnReplaceAll').disabled =\r
+ GetE('btnFind').disabled =\r
+ ( GetE(idMap["FindText"]).value.length == 0 ) ;\r
+}\r
+\r
+function btnStatDelayed()\r
+{\r
+ setTimeout( btnStat, 1 ) ;\r
+}\r
\r
- if ( document.getElementById('chkWord').checked )\r
- sExpr = '\\b' + sExpr + '\\b' ;\r
+function GetSearchString()\r
+{\r
+ return GetE(idMap['FindText']).value ;\r
+}\r
\r
- return sExpr ;\r
+function GetReplaceString()\r
+{\r
+ return GetE("txtReplace").value ;\r
}\r
\r
-function GetCase()\r
+function GetCheckCase()\r
{\r
- return ( document.getElementById('chkCase').checked ? '' : 'i' ) ;\r
+ return !! ( GetE(idMap['CheckCase']).checked ) ;\r
}\r
\r
-function GetReplacement()\r
+function GetMatchWord()\r
{\r
- return document.getElementById('txtReplace').value.replace( /\$/g, '$$$$' ) ;\r
+ return !! ( GetE(idMap['CheckWord']).checked ) ;\r
+}\r
+\r
+/* Is this character a unicode whitespace or a punctuation mark?\r
+ * References:\r
+ * http://unicode.org/Public/UNIDATA/PropList.txt (whitespaces)\r
+ * http://php.chinaunix.net/manual/tw/ref.regex.php (punctuation marks)\r
+ */\r
+function CheckIsWordSeparator( c )\r
+{\r
+ if ( !c )\r
+ return true;\r
+ var code = c.charCodeAt( 0 );\r
+ if ( code >= 9 && code <= 0xd )\r
+ return true;\r
+ if ( code >= 0x2000 && code <= 0x200a )\r
+ return true;\r
+ switch ( code )\r
+ {\r
+ case 0x20:\r
+ case 0x85:\r
+ case 0xa0:\r
+ case 0x1680:\r
+ case 0x180e:\r
+ case 0x2028:\r
+ case 0x2029:\r
+ case 0x202f:\r
+ case 0x205f:\r
+ case 0x3000:\r
+ return true;\r
+ default:\r
+ }\r
+ return /[.,"'?!;:]/.test( c ) ;\r
+}\r
+\r
+FindRange = null ;\r
+function _Find()\r
+{\r
+ var searchString = GetSearchString() ;\r
+ if ( !FindRange )\r
+ FindRange = new CharacterRange( new CharacterCursor( EditorDocument ), searchString.length ) ;\r
+ else\r
+ {\r
+ FindRange.RemoveHighlight() ;\r
+ FindRange = FindRange.GetNextRange( searchString.length ) ;\r
+ }\r
+ var matcher = new KmpMatch( searchString, ! GetCheckCase() ) ;\r
+ var matchState = KMP_NOMATCH ;\r
+ var character = '%' ;\r
+\r
+ while ( character != null )\r
+ {\r
+ while ( ( character = FindRange.GetEndCharacter() ) )\r
+ {\r
+ matchState = matcher.FeedCharacter( character ) ;\r
+ if ( matchState == KMP_MATCHED )\r
+ break ;\r
+ if ( FindRange.MoveNext() )\r
+ matcher.Reset() ;\r
+ }\r
+\r
+ if ( matchState == KMP_MATCHED )\r
+ {\r
+ if ( GetMatchWord() )\r
+ {\r
+ var cursors = FindRange.GetCursors() ;\r
+ var head = cursors[ cursors.length - 1 ].Clone() ;\r
+ var tail = cursors[0].Clone() ;\r
+ if ( !head.MoveNext() && !CheckIsWordSeparator( head.GetCharacter() ) )\r
+ continue ;\r
+ if ( !tail.MoveBack() && !CheckIsWordSeparator( tail.GetCharacter() ) )\r
+ continue ;\r
+ }\r
+\r
+ FindRange.Highlight() ;\r
+ return true ;\r
+ }\r
+ }\r
+\r
+ FindRange = null ;\r
+ return false ;\r
}\r
\r
-function EscapeRegexString( str )\r
+function Find()\r
{\r
- return str.replace( /[\\\^\$\*\+\?\{\}\.\(\)\!\|\[\]\-]/g, '\\$&' ) ;\r
+ if ( ! _Find() )\r
+ alert( FCKLang.DlgFindNotFoundMsg ) ;\r
}\r
\r
function Replace()\r
{\r
- var oRegex = new RegExp( GetRegexExpr(), GetCase() ) ;\r
- if ( !ReplaceTextNodes( oEditor.FCK.EditorDocument.body, oRegex, GetReplacement(), false, false ) )\r
- alert( oEditor.FCKLang.DlgFindNotFoundMsg ) ;\r
+ var saveUndoStep = function( selectRange )\r
+ {\r
+ var ieRange ;\r
+ if ( oEditor.FCKBrowserInfo.IsIE )\r
+ ieRange = document.selection.createRange() ;\r
+\r
+ selectRange.Select() ;\r
+ oEditor.FCKUndo.SaveUndoStep() ;\r
+ var cloneRange = selectRange.Clone() ;\r
+ cloneRange.Collapse( false ) ;\r
+ cloneRange.Select() ;\r
+\r
+ if ( ieRange )\r
+ setTimeout( function(){ ieRange.select() ; }, 1 ) ;\r
+ }\r
+\r
+ if ( FindRange && FindRange.GetHighlightDomRange() )\r
+ {\r
+ var range = FindRange.GetHighlightDomRange() ;\r
+ var bookmark = range.CreateBookmark() ;\r
+ FindRange.RemoveHighlight() ;\r
+ range.MoveToBookmark( bookmark ) ;\r
+\r
+ saveUndoStep( range ) ;\r
+ range.DeleteContents() ;\r
+ range.InsertNode( EditorDocument.createTextNode( GetReplaceString() ) ) ;\r
+ range._UpdateElementInfo() ;\r
+\r
+ FindRange = CharacterRange.CreateFromDomRange( range ) ;\r
+ }\r
+ else\r
+ {\r
+ if ( ! _Find() )\r
+ {\r
+ FindRange && FindRange.RemoveHighlight() ;\r
+ alert( FCKLang.DlgFindNotFoundMsg ) ;\r
+ }\r
+ }\r
}\r
\r
function ReplaceAll()\r
{\r
- var oRegex = new RegExp( GetRegexExpr(), GetCase() + 'g' ) ;\r
- if ( !ReplaceTextNodes( oEditor.FCK.EditorDocument.body, oRegex, GetReplacement(), true, false ) )\r
- alert( oEditor.FCKLang.DlgFindNotFoundMsg ) ;\r
- window.parent.Cancel() ;\r
+ oEditor.FCKUndo.SaveUndoStep() ;\r
+ var replaceCount = 0 ;\r
+\r
+ while ( _Find() )\r
+ {\r
+ var range = FindRange.GetHighlightDomRange() ;\r
+ var bookmark = range.CreateBookmark() ;\r
+ FindRange.RemoveHighlight() ;\r
+ range.MoveToBookmark( bookmark) ;\r
+\r
+ range.DeleteContents() ;\r
+ range.InsertNode( EditorDocument.createTextNode( GetReplaceString() ) ) ;\r
+ range._UpdateElementInfo() ;\r
+\r
+ FindRange = CharacterRange.CreateFromDomRange( range ) ;\r
+ replaceCount++ ;\r
+ }\r
+ if ( replaceCount == 0 )\r
+ {\r
+ FindRange && FindRange.RemoveHighlight() ;\r
+ alert( FCKLang.DlgFindNotFoundMsg ) ;\r
+ }\r
+ dialog.Cancel() ;\r
+}\r
+\r
+window.onunload = function()\r
+{\r
+ if ( FindRange )\r
+ {\r
+ FindRange.RemoveHighlight() ;\r
+ FindRange.ToDomRange().Select() ;\r
+ }\r
}\r
</script>\r
</head>\r
<body onload="OnLoad()" style="overflow: hidden">\r
- <table cellspacing="3" cellpadding="2" width="100%" border="0">\r
- <tr>\r
- <td nowrap="nowrap">\r
- <label for="txtFind" fcklang="DlgReplaceFindLbl">\r
- Find what:</label>\r
- </td>\r
- <td width="100%">\r
- <input id="txtFind" onkeyup="btnStat(this.form)" style="width: 100%" tabindex="1"\r
- type="text" />\r
- </td>\r
- <td>\r
- <input id="btnReplace" style="width: 100%" disabled="disabled" onclick="Replace();"\r
- type="button" value="Replace" fcklang="DlgReplaceReplaceBtn" />\r
- </td>\r
- </tr>\r
- <tr>\r
- <td valign="top" nowrap="nowrap">\r
- <label for="txtReplace" fcklang="DlgReplaceReplaceLbl">\r
- Replace with:</label>\r
- </td>\r
- <td valign="top">\r
- <input id="txtReplace" style="width: 100%" tabindex="2" type="text" />\r
- </td>\r
- <td>\r
- <input id="btnReplaceAll" disabled="disabled" onclick="ReplaceAll()" type="button"\r
- value="Replace All" fcklang="DlgReplaceReplAllBtn" />\r
- </td>\r
- </tr>\r
- <tr>\r
- <td valign="bottom" colspan="3">\r
- <input id="chkCase" tabindex="3" type="checkbox" /><label for="chkCase" fcklang="DlgReplaceCaseChk">Match\r
- case</label>\r
- <br />\r
- <input id="chkWord" tabindex="4" type="checkbox" /><label for="chkWord" fcklang="DlgReplaceWordChk">Match\r
- whole word</label>\r
- </td>\r
- </tr>\r
- </table>\r
+ <div id="divFind" style="display: none">\r
+ <table cellspacing="3" cellpadding="2" width="100%" border="0">\r
+ <tr>\r
+ <td nowrap="nowrap">\r
+ <label for="txtFindFind" fcklang="DlgReplaceFindLbl">\r
+ Find what:</label>\r
+ </td>\r
+ <td width="100%">\r
+ <input id="txtFindFind" onkeyup="btnStat()" oninput="btnStat()" onpaste="btnStatDelayed()" style="width: 100%" tabindex="1"\r
+ type="text" />\r
+ </td>\r
+ <td>\r
+ <input id="btnFind" style="width: 80px" disabled="disabled" onclick="Find();"\r
+ type="button" value="Find" fcklang="DlgFindFindBtn" />\r
+ </td>\r
+ </tr>\r
+ <tr>\r
+ <td valign="bottom" colspan="3">\r
+ <input id="chkCaseFind" tabindex="3" type="checkbox" /><label for="chkCaseFind" fcklang="DlgReplaceCaseChk">Match\r
+ case</label>\r
+ <br />\r
+ <input id="chkWordFind" tabindex="4" type="checkbox" /><label for="chkWordFind" fcklang="DlgReplaceWordChk">Match\r
+ whole word</label>\r
+ </td>\r
+ </tr>\r
+ </table>\r
+ </div>\r
+ <div id="divReplace" style="display:none">\r
+ <table cellspacing="3" cellpadding="2" width="100%" border="0">\r
+ <tr>\r
+ <td nowrap="nowrap">\r
+ <label for="txtFindReplace" fcklang="DlgReplaceFindLbl">\r
+ Find what:</label>\r
+ </td>\r
+ <td width="100%">\r
+ <input id="txtFindReplace" onkeyup="btnStat()" oninput="btnStat()" onpaste="btnStatDelayed()" style="width: 100%" tabindex="1"\r
+ type="text" />\r
+ </td>\r
+ <td>\r
+ <input id="btnReplace" style="width: 80px" disabled="disabled" onclick="Replace();"\r
+ type="button" value="Replace" fcklang="DlgReplaceReplaceBtn" />\r
+ </td>\r
+ </tr>\r
+ <tr>\r
+ <td valign="top" nowrap="nowrap">\r
+ <label for="txtReplace" fcklang="DlgReplaceReplaceLbl">\r
+ Replace with:</label>\r
+ </td>\r
+ <td valign="top">\r
+ <input id="txtReplace" style="width: 100%" tabindex="2" type="text" />\r
+ </td>\r
+ <td>\r
+ <input id="btnReplaceAll" style="width: 80px" disabled="disabled" onclick="ReplaceAll()" type="button"\r
+ value="Replace All" fcklang="DlgReplaceReplAllBtn" />\r
+ </td>\r
+ </tr>\r
+ <tr>\r
+ <td valign="bottom" colspan="3">\r
+ <input id="chkCaseReplace" tabindex="3" type="checkbox" /><label for="chkCaseReplace" fcklang="DlgReplaceCaseChk">Match\r
+ case</label>\r
+ <br />\r
+ <input id="chkWordReplace" tabindex="4" type="checkbox" /><label for="chkWordReplace" fcklang="DlgReplaceWordChk">Match\r
+ whole word</label>\r
+ </td>\r
+ </tr>\r
+ </table>\r
+ </div>\r
</body>\r
</html>\r