[Phpcms-plugins-cvs] admin4phpCMS/modules/phpcms-content/wysiwyg/tiny_mce/plugins/searchreplace edit
Brought to you by:
mjahn
Update of /cvsroot/phpcms-plugins/admin4phpCMS/modules/phpcms-content/wysiwyg/tiny_mce/plugins/searchreplace In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19290/modules/phpcms-content/wysiwyg/tiny_mce/plugins/searchreplace Added Files: editor_plugin_src.js search.htm editor_plugin.js readme.txt replace.htm Log Message: beginning of phpcms-content and filemanager --- NEW FILE: replace.htm --- <html> <head> <title>{$lang_searchreplace_replace_title}</title> <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script> <script language="javascript" type="text/javascript"> <!-- function init() { var formObj = document.forms[0]; formObj.searchstring.value = tinyMCE.getWindowArg("searchstring"); formObj.replacestring.value = tinyMCE.getWindowArg("replacestring"); formObj.casesensitivebox.checked = tinyMCE.getWindowArg("casesensitive"); formObj.backwards[0].checked = tinyMCE.getWindowArg("backwards"); formObj.backwards[1].checked = !tinyMCE.getWindowArg("backwards"); // formObj.wrapatend.checked = tinyMCE.getWindowArg("wrap"); // formObj.wholeword.checked = tinyMCE.getWindowArg("wholeword"); tinyMCE.execInstanceCommand(tinyMCE.getWindowArg("editor_id"), "mceResetSearch", false, {dummy : ""}, false); window.focus(); } function searchNext(replacemode) { var formObj = document.forms[0]; // Whats the point? if (formObj.searchstring.value == formObj.replacestring.value) return; // Do search tinyMCE.execInstanceCommand(tinyMCE.getWindowArg("editor_id"), 'mceSearch', false, { string : formObj.searchstring.value, replacestring : formObj.replacestring.value, replacemode : replacemode, casesensitive : formObj.casesensitivebox.checked, backwards : formObj.backwards[0].checked // wrap : formObj.wrapatend.checked, // wholeword : formObj.wholeword.checked }, false); } function cancelAction() { top.close(); } //--> </script> </head> <body onload="init();" style="margin: 4px;"> <form onsubmit="searchNext('none');return false;"> <table border="0" cellspacing="0" cellpadding="2"> <tr> <td>{$lang_searchreplace_findwhat}: </td> <td><input type="text" name="searchstring" style="width: 200px" /></td> </tr> <tr> <td>{$lang_searchreplace_replacewith}: </td> <td><input type="text" name="replacestring" style="width: 200px" /></td> </tr> <tr> <td colspan="2"><table border="0" cellspacing="0" cellpadding="0"> <tr> <td>{$lang_searchreplace_direction}: </td> <td><input name="backwards" class="radio" type="radio" value="true" /></td> <td>{$lang_searchreplace_up}</td> <td><input name="backwards" class="radio" type="radio" value="false" /></td> <td>{$lang_searchreplace_down}</td> </tr> </table></td> </tr> <tr> <td colspan="2"><table border="0" cellspacing="0" cellpadding="0"> <tr> <td><input class="checkbox" type="checkbox" name="casesensitivebox" value="true" /></td> <td>{$lang_searchreplace_case}</td> </tr> </table></td> </tr> </table> <table border="0" width="100%" cellspacing="0" cellpadding="4"> <tr> <td><input name="findBtn" type="button" id="findBtn" value="{$lang_searchreplace_findnext}" onclick="searchNext('none');" /></td> <td><input name="replaceBtn" type="button" id="replaceBtn" value="{$lang_searchreplace_replace}" onclick="searchNext('current');" /></td> <td><input name="replaceBtn" type="button" id="replaceAllBtn" value="{$lang_searchreplace_replaceall}" onclick="searchNext('all');" /></td> <td align="right"><input name="cancelBtn" type="button" id="cancelBtn" value="{$lang_searchreplace_cancel}" onclick="cancelAction();" /></td> </tr> </table> </form> </body> </html> --- NEW FILE: editor_plugin.js --- /* Import theme specific language pack */ tinyMCE.importPluginLanguagePack('searchreplace','en,sv,zh_cn,fa,fr_ca,fr,de,pl');function TinyMCE_searchreplace_getControlHTML(control_name){switch(control_name){case "search":return '<img id="{$editor_id}_search" src="{$pluginurl}/images/search.gif" title="{$lang_searchreplace_search_desc}" width="20" height="20" class="mceButtonNormal" onmouseover="tinyMCE.switchClass(this,\'mceButtonOver\');" onmouseout="tinyMCE.restoreClass(this);" onmousedown="tinyMCE.restoreAndSwitchClass(this,\'mceButtonDown\');" onclick="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'mceSearch\',true);" />';case "replace":return '<img id="{$editor_id}_replace" src="{$pluginurl}/images/replace.gif" title="{$lang_searchreplace_replace_desc}" width="20" height="20" class="mceButtonNormal" onmouseover="tinyMCE.switchClass(this,\'mceButtonOver\');" onmouseout="tinyMCE.restoreClass(this);" onmousedown="tinyMCE.restoreAndSwitchClass(this,\'mceButtonDown\');" onclick="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'mceSearchReplace\',true);" />';}return "";}function TinyMCE_searchreplace_execCommand(editor_id,element,command,user_interface,value){function defValue(key,default_value){value[key]=typeof(value[key])=="undefined"?default_value:value[key];}function replaceSel(search_str,str){if(!tinyMCE.isMSIE){var sel=instance.contentWindow.getSelection();var rng=sel.getRangeAt(0);}else{var rng=instance.contentWindow.document.selection.createRange();}if(!tinyMCE.isMSIE){var doc=instance.contentWindow.document;if(str.indexOf(search_str)==-1){rng.deleteContents();rng.insertNode(rng.createContextualFragment(str));rng.collapse(false);}else{doc.execCommand("insertimage",false,"#mce_temp_url#");var elm=tinyMCE.getElementByAttributeValue(doc.body,"img","src","#mce_temp_url#");elm.parentNode.replaceChild(doc.createTextNode(str),elm);}}else{if(rng.item)rng.item(0).outerHTML=str;else rng.pasteHTML(str);}}var instance=tinyMCE.getInstanceById(editor_id);if(!value)value=new Array();defValue("editor_id",editor_id);defValue("searchstring","");defValue("replacestring",null);defValue("replacemode","none");defValue("casesensitive",false);defValue("backwards",false);defValue("wrap",false);defValue("wholeword",false);switch(command){case "mceResetSearch":tinyMCE.lastSearchRng=null;return true;case "mceSearch":if(user_interface){var template=new Array();if(value['replacestring']!=null){template['file']='../../plugins/searchreplace/replace.htm';template['width']=310;template['height']=180;}else{template['file']='../../plugins/searchreplace/search.htm';template['width']=280;template['height']=180;}tinyMCE.openWindow(template,value);}else{var win=tinyMCE.getInstanceById(editor_id).contentWindow;var doc=tinyMCE.getInstanceById(editor_id).contentWindow.document;if(value['replacemode']=="current"){replaceSel(value['string'],value['replacestring']);value['replacemode']="none";tinyMCE.execInstanceCommand(editor_id,'mceSearch',user_interface,value,false);return true;}if(tinyMCE.isMSIE){var rng=tinyMCE.lastSearchRng?tinyMCE.lastSearchRng:doc.selection.createRange();var flags=0;if(value['wholeword'])flags=flags|2;if(value['casesensitive'])flags=flags|4;if(value['replacemode']=="all"){while(rng.findText(value['string'],value['backwards']?-1:1,flags)){rng.scrollIntoView();rng.select();rng.collapse(false);replaceSel(value['string'],value['replacestring']);}alert(tinyMCE.getLang('lang_searchreplace_allreplaced'));return true;}if(rng.findText(value['string'],value['backwards']?-1:1,flags)){rng.scrollIntoView();rng.select();rng.collapse(value['backwards']);tinyMCE.lastSearchRng=rng;}else alert(tinyMCE.getLang('lang_searchreplace_notfound'));}else{if(value['replacemode']=="all"){while(win.find(value['string'],value['casesensitive'],value['backwards'],value['wrap'],value['wholeword'],false,false))replaceSel(value['string'],value['replacestring']);alert(tinyMCE.getLang('lang_searchreplace_allreplaced'));return true;}if(!win.find(value['string'],value['casesensitive'],value['backwards'],value['wrap'],value['wholeword'],false,false))alert(tinyMCE.getLang('lang_searchreplace_notfound'));}}return true;case "mceSearchReplace":value['replacestring']="";tinyMCE.execInstanceCommand(editor_id,'mceSearch',user_interface,value,false);return true;}return false;}function TinyMCE_searchreplace_handleNodeChange(editor_id,node,undo_index,undo_levels,visual_aid,any_selection){return true;} --- NEW FILE: editor_plugin_src.js --- /* Import theme specific language pack */ tinyMCE.importPluginLanguagePack('searchreplace', 'en,sv,zh_cn,fa,fr_ca,fr,de,pl'); function TinyMCE_searchreplace_getControlHTML(control_name) { switch (control_name) { case "search": return '<img id="{$editor_id}_search" src="{$pluginurl}/images/search.gif" title="{$lang_searchreplace_search_desc}" width="20" height="20" class="mceButtonNormal" onmouseover="tinyMCE.switchClass(this,\'mceButtonOver\');" onmouseout="tinyMCE.restoreClass(this);" onmousedown="tinyMCE.restoreAndSwitchClass(this,\'mceButtonDown\');" onclick="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'mceSearch\',true);" />'; case "replace": return '<img id="{$editor_id}_replace" src="{$pluginurl}/images/replace.gif" title="{$lang_searchreplace_replace_desc}" width="20" height="20" class="mceButtonNormal" onmouseover="tinyMCE.switchClass(this,\'mceButtonOver\');" onmouseout="tinyMCE.restoreClass(this);" onmousedown="tinyMCE.restoreAndSwitchClass(this,\'mceButtonDown\');" onclick="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'mceSearchReplace\',true);" />'; } return ""; } /** * Executes the search/replace commands. */ function TinyMCE_searchreplace_execCommand(editor_id, element, command, user_interface, value) { function defValue(key, default_value) { value[key] = typeof(value[key]) == "undefined" ? default_value : value[key]; } function replaceSel(search_str, str) { // Get current selection if (!tinyMCE.isMSIE) { var sel = instance.contentWindow.getSelection(); var rng = sel.getRangeAt(0); } else { var rng = instance.contentWindow.document.selection.createRange(); } // Replace current one if (!tinyMCE.isMSIE) { var doc = instance.contentWindow.document; // This way works when the replace doesn't contain the search string if (str.indexOf(search_str) == -1) { rng.deleteContents(); rng.insertNode(rng.createContextualFragment(str)); rng.collapse(false); } else { // Insert content ugly way! Needed to move selection to after replace item doc.execCommand("insertimage", false, "#mce_temp_url#"); var elm = tinyMCE.getElementByAttributeValue(doc.body, "img", "src", "#mce_temp_url#"); elm.parentNode.replaceChild(doc.createTextNode(str), elm); } } else { if (rng.item) rng.item(0).outerHTML = str; else rng.pasteHTML(str); } } var instance = tinyMCE.getInstanceById(editor_id); if (!value) value = new Array(); // Setup defualt values defValue("editor_id", editor_id); defValue("searchstring", ""); defValue("replacestring", null); defValue("replacemode", "none"); defValue("casesensitive", false); defValue("backwards", false); defValue("wrap", false); defValue("wholeword", false); // Handle commands switch (command) { case "mceResetSearch": tinyMCE.lastSearchRng = null; return true; case "mceSearch": if (user_interface) { // Open search dialog var template = new Array(); if (value['replacestring'] != null) { template['file'] = '../../plugins/searchreplace/replace.htm'; // Relative to theme template['width'] = 310; template['height'] = 180; } else { template['file'] = '../../plugins/searchreplace/search.htm'; // Relative to theme template['width'] = 280; template['height'] = 180; } tinyMCE.openWindow(template, value); } else { var win = tinyMCE.getInstanceById(editor_id).contentWindow; var doc = tinyMCE.getInstanceById(editor_id).contentWindow.document; // Handle replace current if (value['replacemode'] == "current") { replaceSel(value['string'], value['replacestring']); // Search next one value['replacemode'] = "none"; tinyMCE.execInstanceCommand(editor_id, 'mceSearch', user_interface, value, false); return true; } if (tinyMCE.isMSIE) { var rng = tinyMCE.lastSearchRng ? tinyMCE.lastSearchRng : doc.selection.createRange(); var flags = 0; if (value['wholeword']) flags = flags | 2; if (value['casesensitive']) flags = flags | 4; // Handle replace all mode if (value['replacemode'] == "all") { while (rng.findText(value['string'], value['backwards'] ? -1 : 1, flags)) { rng.scrollIntoView(); rng.select(); rng.collapse(false); replaceSel(value['string'], value['replacestring']); } alert(tinyMCE.getLang('lang_searchreplace_allreplaced')); return true; } if (rng.findText(value['string'], value['backwards'] ? -1 : 1, flags)) { rng.scrollIntoView(); rng.select(); rng.collapse(value['backwards']); tinyMCE.lastSearchRng = rng; } else alert(tinyMCE.getLang('lang_searchreplace_notfound')); } else { if (value['replacemode'] == "all") { while (win.find(value['string'], value['casesensitive'], value['backwards'], value['wrap'], value['wholeword'], false, false)) replaceSel(value['string'], value['replacestring']); alert(tinyMCE.getLang('lang_searchreplace_allreplaced')); return true; } if (!win.find(value['string'], value['casesensitive'], value['backwards'], value['wrap'], value['wholeword'], false, false)) alert(tinyMCE.getLang('lang_searchreplace_notfound')); } } return true; case "mceSearchReplace": value['replacestring'] = ""; tinyMCE.execInstanceCommand(editor_id, 'mceSearch', user_interface, value, false); return true; } // Pass to next handler in chain return false; } function TinyMCE_searchreplace_handleNodeChange(editor_id, node, undo_index, undo_levels, visual_aid, any_selection) { return true; } --- NEW FILE: search.htm --- <html> <head> <title>{$lang_searchreplace_search_title}</title> <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script> <script language="javascript" type="text/javascript"> <!-- function init() { var formObj = document.forms[0]; formObj.searchstring.value = tinyMCE.getWindowArg("searchstring"); formObj.casesensitivebox.checked = tinyMCE.getWindowArg("casesensitive"); formObj.backwards[0].checked = tinyMCE.getWindowArg("backwards"); formObj.backwards[1].checked = !tinyMCE.getWindowArg("backwards"); // formObj.wrapatend.checked = tinyMCE.getWindowArg("wrap"); // formObj.wholeword.checked = tinyMCE.getWindowArg("wholeword"); tinyMCE.execInstanceCommand(tinyMCE.getWindowArg("editor_id"), "mceResetSearch", false, {dummy : ""}, false); window.focus(); } function searchNext() { var formObj = document.forms[0]; // Do search tinyMCE.execInstanceCommand(tinyMCE.getWindowArg("editor_id"), 'mceSearch', false, { string : formObj.searchstring.value, casesensitive : formObj.casesensitivebox.checked, backwards : formObj.backwards[0].checked // wrap : formObj.wrapatend.checked, // wholeword : formObj.wholeword.checked }, false); } function cancelAction() { top.close(); } //--> </script> </head> <body onload="init();" style="margin: 4px;"> <form onsubmit="searchNext();return false;"> <table border="0" cellspacing="0" cellpadding="2"> <tr> <td>{$lang_searchreplace_findwhat}: <input type="text" name="searchstring" style="width: 200px" /></td> </tr> <tr> <td><table border="0" cellspacing="0" cellpadding="0"> <tr> <td>{$lang_searchreplace_direction}: </td> <td><input name="backwards" class="radio" type="radio" value="true" /></td> <td>{$lang_searchreplace_up}</td> <td><input name="backwards" class="radio" type="radio" value="false" /></td> <td>{$lang_searchreplace_down}</td> </tr> </table></td> </tr> <tr> <td><table border="0" cellspacing="0" cellpadding="0"> <tr> <td><input class="checkbox" type="checkbox" name="casesensitivebox" value="true" /></td> <td>{$lang_searchreplace_case}</td> </tr> </table></td> </tr> </table> <table border="0" width="100%" cellspacing="0" cellpadding="4"> <tr> <td><input name="findBtn" type="submit" id="findBtn" value="{$lang_searchreplace_findnext}" /></td> <td align="right"><input name="cancelBtn" type="button" id="cancelBtn" value="{$lang_searchreplace_cancel}" onclick="cancelAction();" /></td> </tr> </table> </form> </body> </html> --- NEW FILE: readme.txt --- searchreplace plugin for TinyMCE ----------------------------- About: This plugin adds search/replace dialogs to TinyMCE. Installation instructions: * Copy the searchreplace directory to the plugins directory of TinyMCE (/jscripts/tiny_mce/plugins). * Add plugin to TinyMCE plugin option list example: plugins : "searchreplace". * Add buttons "search,replace" to the button list. Initialization example: tinyMCE.init({ theme : "advanced", mode : "textareas", plugins : "searchreplace", theme_advanced_buttons1_add : "search,replace", }); |