1 | tinyMCEPopup.requireLangPack();
|
---|
2 |
|
---|
3 | var SearchReplaceDialog = {
|
---|
4 | init : function(ed) {
|
---|
5 | var t = this, f = document.forms[0], m = tinyMCEPopup.getWindowArg("mode");
|
---|
6 |
|
---|
7 | t.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 | mcTabs.onChange.add(function(tab_id, panel_id) {
|
---|
15 | t.switchMode(tab_id.substring(0, tab_id.indexOf('_')));
|
---|
16 | });
|
---|
17 | },
|
---|
18 |
|
---|
19 | switchMode : function(m) {
|
---|
20 | var f, lm = this.lastMode;
|
---|
21 |
|
---|
22 | if (lm != m) {
|
---|
23 | f = document.forms[0];
|
---|
24 |
|
---|
25 | if (lm) {
|
---|
26 | f[m + '_panel_searchstring'].value = f[lm + '_panel_searchstring'].value;
|
---|
27 | f[m + '_panel_backwardsu'].checked = f[lm + '_panel_backwardsu'].checked;
|
---|
28 | f[m + '_panel_backwardsd'].checked = f[lm + '_panel_backwardsd'].checked;
|
---|
29 | f[m + '_panel_casesensitivebox'].checked = f[lm + '_panel_casesensitivebox'].checked;
|
---|
30 | }
|
---|
31 |
|
---|
32 | mcTabs.displayTab(m + '_tab', m + '_panel');
|
---|
33 | document.getElementById("replaceBtn").style.display = (m == "replace") ? "inline" : "none";
|
---|
34 | document.getElementById("replaceAllBtn").style.display = (m == "replace") ? "inline" : "none";
|
---|
35 | this.lastMode = m;
|
---|
36 | }
|
---|
37 | },
|
---|
38 |
|
---|
39 | searchNext : function(a) {
|
---|
40 | 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;
|
---|
41 |
|
---|
42 | // Get input
|
---|
43 | f = document.forms[0];
|
---|
44 | s = f[m + '_panel_searchstring'].value;
|
---|
45 | b = f[m + '_panel_backwardsu'].checked;
|
---|
46 | ca = f[m + '_panel_casesensitivebox'].checked;
|
---|
47 | rs = f['replace_panel_replacestring'].value;
|
---|
48 |
|
---|
49 | if (tinymce.isIE) {
|
---|
50 | r = ed.getDoc().selection.createRange();
|
---|
51 | }
|
---|
52 |
|
---|
53 | if (s == '')
|
---|
54 | return;
|
---|
55 |
|
---|
56 | function fix() {
|
---|
57 | // Correct Firefox graphics glitches
|
---|
58 | // TODO: Verify if this is actually needed any more, maybe it was for very old FF versions?
|
---|
59 | r = se.getRng().cloneRange();
|
---|
60 | ed.getDoc().execCommand('SelectAll', false, null);
|
---|
61 | se.setRng(r);
|
---|
62 | };
|
---|
63 |
|
---|
64 | function replace() {
|
---|
65 | ed.selection.setContent(rs); // Needs to be duplicated due to selection bug in IE
|
---|
66 | };
|
---|
67 |
|
---|
68 | // IE flags
|
---|
69 | if (ca)
|
---|
70 | fl = fl | 4;
|
---|
71 |
|
---|
72 | switch (a) {
|
---|
73 | case 'all':
|
---|
74 | // Move caret to beginning of text
|
---|
75 | ed.execCommand('SelectAll');
|
---|
76 | ed.selection.collapse(true);
|
---|
77 |
|
---|
78 | if (tinymce.isIE) {
|
---|
79 | ed.focus();
|
---|
80 | r = ed.getDoc().selection.createRange();
|
---|
81 |
|
---|
82 | while (r.findText(s, b ? -1 : 1, fl)) {
|
---|
83 | r.scrollIntoView();
|
---|
84 | r.select();
|
---|
85 | replace();
|
---|
86 | fo = 1;
|
---|
87 |
|
---|
88 | if (b) {
|
---|
89 | r.moveEnd("character", -(rs.length)); // Otherwise will loop forever
|
---|
90 | }
|
---|
91 | }
|
---|
92 |
|
---|
93 | tinyMCEPopup.storeSelection();
|
---|
94 | } else {
|
---|
95 | while (w.find(s, ca, b, false, false, false, false)) {
|
---|
96 | replace();
|
---|
97 | fo = 1;
|
---|
98 | }
|
---|
99 | }
|
---|
100 |
|
---|
101 | if (fo)
|
---|
102 | tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.allreplaced'));
|
---|
103 | else
|
---|
104 | tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound'));
|
---|
105 |
|
---|
106 | return;
|
---|
107 |
|
---|
108 | case 'current':
|
---|
109 | if (!ed.selection.isCollapsed())
|
---|
110 | replace();
|
---|
111 |
|
---|
112 | break;
|
---|
113 | }
|
---|
114 |
|
---|
115 | se.collapse(b);
|
---|
116 | r = se.getRng();
|
---|
117 |
|
---|
118 | // Whats the point
|
---|
119 | if (!s)
|
---|
120 | return;
|
---|
121 |
|
---|
122 | if (tinymce.isIE) {
|
---|
123 | ed.focus();
|
---|
124 | r = ed.getDoc().selection.createRange();
|
---|
125 |
|
---|
126 | if (r.findText(s, b ? -1 : 1, fl)) {
|
---|
127 | r.scrollIntoView();
|
---|
128 | r.select();
|
---|
129 | } else
|
---|
130 | tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound'));
|
---|
131 |
|
---|
132 | tinyMCEPopup.storeSelection();
|
---|
133 | } else {
|
---|
134 | if (!w.find(s, ca, b, false, false, false, false))
|
---|
135 | tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound'));
|
---|
136 | else
|
---|
137 | fix();
|
---|
138 | }
|
---|
139 | }
|
---|
140 | };
|
---|
141 |
|
---|
142 | tinyMCEPopup.onInit.add(SearchReplaceDialog.init, SearchReplaceDialog);
|
---|