]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - include/javascript/tiny_mce/plugins/searchreplace/js/searchreplace.js
Release 6.5.0
[Github/sugarcrm.git] / include / javascript / tiny_mce / plugins / searchreplace / js / searchreplace.js
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);