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