|
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); |