app/tiny_mce/plugins/searchreplace/js/searchreplace.js
changeset 154 d2377425d3f2
parent 126 6186c115a210
equal deleted inserted replaced
153:79d52c2d50a2 154:d2377425d3f2
       
     1 tinyMCEPopup.requireLangPack();
       
     2 
       
     3 var SearchReplaceDialog = {
       
     4 	init : function(ed) {
       
     5 		var f = document.forms[0], m = tinyMCEPopup.getWindowArg("mode");
       
     6 
       
     7 		this.switchMode(m);
       
     8 
       
     9 		f[m + '_panel_searchstring'].value = tinyMCEPopup.getWindowArg("search_string");
       
    10 
       
    11 		// Focus input field
       
    12 		f[m + '_panel_searchstring'].focus();
       
    13 	},
       
    14 
       
    15 	switchMode : function(m) {
       
    16 		var f, lm = this.lastMode;
       
    17 
       
    18 		if (lm != m) {
       
    19 			f = document.forms[0];
       
    20 
       
    21 			if (lm) {
       
    22 				f[m + '_panel_searchstring'].value = f[lm + '_panel_searchstring'].value;
       
    23 				f[m + '_panel_backwardsu'].checked = f[lm + '_panel_backwardsu'].checked;
       
    24 				f[m + '_panel_backwardsd'].checked = f[lm + '_panel_backwardsd'].checked;
       
    25 				f[m + '_panel_casesensitivebox'].checked = f[lm + '_panel_casesensitivebox'].checked;
       
    26 			}
       
    27 
       
    28 			mcTabs.displayTab(m + '_tab',  m + '_panel');
       
    29 			document.getElementById("replaceBtn").style.display = (m == "replace") ? "inline" : "none";
       
    30 			document.getElementById("replaceAllBtn").style.display = (m == "replace") ? "inline" : "none";
       
    31 			this.lastMode = m;
       
    32 		}
       
    33 	},
       
    34 
       
    35 	searchNext : function(a) {
       
    36 		var ed = tinyMCEPopup.editor, se = ed.selection, r = se.getRng(), f, m = this.lastMode, s, b, fl = 0, w = ed.getWin(), wm = ed.windowManager, fo = 0;
       
    37 
       
    38 		// Get input
       
    39 		f = document.forms[0];
       
    40 		s = f[m + '_panel_searchstring'].value;
       
    41 		b = f[m + '_panel_backwardsu'].checked;
       
    42 		ca = f[m + '_panel_casesensitivebox'].checked;
       
    43 		rs = f['replace_panel_replacestring'].value;
       
    44 
       
    45 		function fix() {
       
    46 			// Correct Firefox graphics glitches
       
    47 			r = se.getRng().cloneRange();
       
    48 			ed.getDoc().execCommand('SelectAll', false, null);
       
    49 			se.setRng(r);
       
    50 		};
       
    51 
       
    52 		function replace() {
       
    53 			if (tinymce.isIE)
       
    54 				ed.selection.getRng().duplicate().pasteHTML(rs); // Needs to be duplicated due to selection bug in IE
       
    55 			else
       
    56 				ed.getDoc().execCommand('InsertHTML', false, rs);
       
    57 		};
       
    58 
       
    59 		// IE flags
       
    60 		if (ca)
       
    61 			fl = fl | 4;
       
    62 
       
    63 		switch (a) {
       
    64 			case 'all':
       
    65 				// Move caret to beginning of text
       
    66 				ed.execCommand('SelectAll');
       
    67 				ed.selection.collapse(true);
       
    68 
       
    69 				if (tinymce.isIE) {
       
    70 					while (r.findText(s, b ? -1 : 1, fl)) {
       
    71 						r.scrollIntoView();
       
    72 						r.select();
       
    73 						replace();
       
    74 						fo = 1;
       
    75 					}
       
    76 
       
    77 					tinyMCEPopup.storeSelection();
       
    78 				} else {
       
    79 					while (w.find(s, ca, b, false, false, false, false)) {
       
    80 						replace();
       
    81 						fo = 1;
       
    82 					}
       
    83 				}
       
    84 
       
    85 				if (fo)
       
    86 					tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.allreplaced'));
       
    87 				else
       
    88 					tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound'));
       
    89 
       
    90 				return;
       
    91 
       
    92 			case 'current':
       
    93 				if (!ed.selection.isCollapsed())
       
    94 					replace();
       
    95 
       
    96 				break;
       
    97 		}
       
    98 
       
    99 		se.collapse(b);
       
   100 		r = se.getRng();
       
   101 
       
   102 		// Whats the point
       
   103 		if (!s)
       
   104 			return;
       
   105 
       
   106 		if (tinymce.isIE) {
       
   107 			if (r.findText(s, b ? -1 : 1, fl)) {
       
   108 				r.scrollIntoView();
       
   109 				r.select();
       
   110 			} else
       
   111 				tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound'));
       
   112 
       
   113 			tinyMCEPopup.storeSelection();
       
   114 		} else {
       
   115 			if (!w.find(s, ca, b, false, false, false, false))
       
   116 				tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound'));
       
   117 			else
       
   118 				fix();
       
   119 		}
       
   120 	}
       
   121 };
       
   122 
       
   123 tinyMCEPopup.onInit.add(SearchReplaceDialog.init, SearchReplaceDialog);