searchreplace.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. tinyMCEPopup.requireLangPack();
  2. var SearchReplaceDialog = {
  3. init : function(ed) {
  4. var f = document.forms[0], m = tinyMCEPopup.getWindowArg("mode");
  5. this.switchMode(m);
  6. f[m + '_panel_searchstring'].value = tinyMCEPopup.getWindowArg("search_string");
  7. // Focus input field
  8. f[m + '_panel_searchstring'].focus();
  9. },
  10. switchMode : function(m) {
  11. var f, lm = this.lastMode;
  12. if (lm != m) {
  13. f = document.forms[0];
  14. if (lm) {
  15. f[m + '_panel_searchstring'].value = f[lm + '_panel_searchstring'].value;
  16. f[m + '_panel_backwardsu'].checked = f[lm + '_panel_backwardsu'].checked;
  17. f[m + '_panel_backwardsd'].checked = f[lm + '_panel_backwardsd'].checked;
  18. f[m + '_panel_casesensitivebox'].checked = f[lm + '_panel_casesensitivebox'].checked;
  19. }
  20. mcTabs.displayTab(m + '_tab', m + '_panel');
  21. document.getElementById("replaceBtn").style.display = (m == "replace") ? "inline" : "none";
  22. document.getElementById("replaceAllBtn").style.display = (m == "replace") ? "inline" : "none";
  23. this.lastMode = m;
  24. }
  25. },
  26. searchNext : function(a) {
  27. 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;
  28. // Get input
  29. f = document.forms[0];
  30. s = f[m + '_panel_searchstring'].value;
  31. b = f[m + '_panel_backwardsu'].checked;
  32. ca = f[m + '_panel_casesensitivebox'].checked;
  33. rs = f['replace_panel_replacestring'].value;
  34. if (s == '')
  35. return;
  36. function fix() {
  37. // Correct Firefox graphics glitches
  38. r = se.getRng().cloneRange();
  39. ed.getDoc().execCommand('SelectAll', false, null);
  40. se.setRng(r);
  41. };
  42. function replace() {
  43. if (tinymce.isIE)
  44. ed.selection.getRng().duplicate().pasteHTML(rs); // Needs to be duplicated due to selection bug in IE
  45. else
  46. ed.getDoc().execCommand('InsertHTML', false, rs);
  47. };
  48. // IE flags
  49. if (ca)
  50. fl = fl | 4;
  51. switch (a) {
  52. case 'all':
  53. // Move caret to beginning of text
  54. ed.execCommand('SelectAll');
  55. ed.selection.collapse(true);
  56. if (tinymce.isIE) {
  57. while (r.findText(s, b ? -1 : 1, fl)) {
  58. r.scrollIntoView();
  59. r.select();
  60. replace();
  61. fo = 1;
  62. }
  63. tinyMCEPopup.storeSelection();
  64. } else {
  65. while (w.find(s, ca, b, false, false, false, false)) {
  66. replace();
  67. fo = 1;
  68. }
  69. }
  70. if (fo)
  71. tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.allreplaced'));
  72. else
  73. tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound'));
  74. return;
  75. case 'current':
  76. if (!ed.selection.isCollapsed())
  77. replace();
  78. break;
  79. }
  80. se.collapse(b);
  81. r = se.getRng();
  82. // Whats the point
  83. if (!s)
  84. return;
  85. if (tinymce.isIE) {
  86. if (r.findText(s, b ? -1 : 1, fl)) {
  87. r.scrollIntoView();
  88. r.select();
  89. } else
  90. tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound'));
  91. tinyMCEPopup.storeSelection();
  92. } else {
  93. if (!w.find(s, ca, b, false, false, false, false))
  94. tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound'));
  95. else
  96. fix();
  97. }
  98. }
  99. };
  100. tinyMCEPopup.onInit.add(SearchReplaceDialog.init, SearchReplaceDialog);