]> git.donarmstrong.com Git - roundcube.git/blobdiff - program/js/tiny_mce/plugins/searchreplace/js/searchreplace.js
Imported Debian patch 0.5.2+dfsg-1
[roundcube.git] / program / js / tiny_mce / plugins / searchreplace / js / searchreplace.js
index 890eb37f1abb8e12b8f3ebfdb32c23dcc9cf87c2..80284b9f3ff0b33d7348de16cbdf0a162bb89419 100644 (file)
@@ -2,14 +2,18 @@ tinyMCEPopup.requireLangPack();
 \r
 var SearchReplaceDialog = {\r
        init : function(ed) {\r
-               var f = document.forms[0], m = tinyMCEPopup.getWindowArg("mode");\r
+               var t = this, f = document.forms[0], m = tinyMCEPopup.getWindowArg("mode");\r
 \r
-               this.switchMode(m);\r
+               t.switchMode(m);\r
 \r
                f[m + '_panel_searchstring'].value = tinyMCEPopup.getWindowArg("search_string");\r
 \r
                // Focus input field\r
                f[m + '_panel_searchstring'].focus();\r
+               \r
+               mcTabs.onChange.add(function(tab_id, panel_id) {\r
+                       t.switchMode(tab_id.substring(0, tab_id.indexOf('_')));\r
+               });\r
        },\r
 \r
        switchMode : function(m) {\r
@@ -42,18 +46,23 @@ var SearchReplaceDialog = {
                ca = f[m + '_panel_casesensitivebox'].checked;\r
                rs = f['replace_panel_replacestring'].value;\r
 \r
+               if (tinymce.isIE) {\r
+                       r = ed.getDoc().selection.createRange();\r
+               }\r
+\r
+               if (s == '')\r
+                       return;\r
+\r
                function fix() {\r
                        // Correct Firefox graphics glitches\r
+                       // TODO: Verify if this is actually needed any more, maybe it was for very old FF versions? \r
                        r = se.getRng().cloneRange();\r
                        ed.getDoc().execCommand('SelectAll', false, null);\r
                        se.setRng(r);\r
                };\r
 \r
                function replace() {\r
-                       if (tinymce.isIE)\r
-                               ed.selection.getRng().duplicate().pasteHTML(rs); // Needs to be duplicated due to selection bug in IE\r
-                       else\r
-                               ed.getDoc().execCommand('InsertHTML', false, rs);\r
+                       ed.selection.setContent(rs); // Needs to be duplicated due to selection bug in IE\r
                };\r
 \r
                // IE flags\r
@@ -62,12 +71,23 @@ var SearchReplaceDialog = {
 \r
                switch (a) {\r
                        case 'all':\r
+                               // Move caret to beginning of text\r
+                               ed.execCommand('SelectAll');\r
+                               ed.selection.collapse(true);\r
+\r
                                if (tinymce.isIE) {\r
+                                       ed.focus();\r
+                                       r = ed.getDoc().selection.createRange();\r
+\r
                                        while (r.findText(s, b ? -1 : 1, fl)) {\r
                                                r.scrollIntoView();\r
                                                r.select();\r
                                                replace();\r
                                                fo = 1;\r
+\r
+                                               if (b) {\r
+                                                       r.moveEnd("character", -(rs.length)); // Otherwise will loop forever\r
+                                               }\r
                                        }\r
 \r
                                        tinyMCEPopup.storeSelection();\r
@@ -79,14 +99,16 @@ var SearchReplaceDialog = {
                                }\r
 \r
                                if (fo)\r
-                                       wm.alert(ed.getLang('searchreplace_dlg.allreplaced'));\r
+                                       tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.allreplaced'));\r
                                else\r
-                                       wm.alert(ed.getLang('searchreplace_dlg.notfound'));\r
+                                       tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound'));\r
 \r
                                return;\r
 \r
                        case 'current':\r
-                               replace();\r
+                               if (!ed.selection.isCollapsed())\r
+                                       replace();\r
+\r
                                break;\r
                }\r
 \r
@@ -98,16 +120,19 @@ var SearchReplaceDialog = {
                        return;\r
 \r
                if (tinymce.isIE) {\r
+                       ed.focus();\r
+                       r = ed.getDoc().selection.createRange();\r
+\r
                        if (r.findText(s, b ? -1 : 1, fl)) {\r
                                r.scrollIntoView();\r
                                r.select();\r
                        } else\r
-                               wm.alert(ed.getLang('searchreplace_dlg.notfound'));\r
+                               tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound'));\r
 \r
                        tinyMCEPopup.storeSelection();\r
                } else {\r
                        if (!w.find(s, ca, b, false, false, false, false))\r
-                               wm.alert(ed.getLang('searchreplace_dlg.notfound'));\r
+                               tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound'));\r
                        else\r
                                fix();\r
                }\r