/modules/mod_base/lib/js/modules/tinymce3.4.3.2/plugins/searchreplace/js/searchreplace.js

http://github.com/zotonic/zotonic · JavaScript · 142 lines · 104 code · 31 blank · 7 comment · 22 complexity · 8837281d6a75f4dc9c6fa4e915c094d6 MD5 · raw file

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