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