summaryrefslogtreecommitdiffstats
path: root/extensions/tinymce/jscripts/tiny_mce/plugins/searchreplace/js/searchreplace.js
blob: a8585cccce9d1342ef37a3a6e40845680f906f11 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
tinyMCEPopup.requireLangPack();



var SearchReplaceDialog = {

	init : function(ed) {

		var f = document.forms[0], m = tinyMCEPopup.getWindowArg("mode");



		this.switchMode(m);



		f[m + '_panel_searchstring'].value = tinyMCEPopup.getWindowArg("search_string");



		// Focus input field

		f[m + '_panel_searchstring'].focus();

	},



	switchMode : function(m) {

		var f, lm = this.lastMode;



		if (lm != m) {

			f = document.forms[0];



			if (lm) {

				f[m + '_panel_searchstring'].value = f[lm + '_panel_searchstring'].value;

				f[m + '_panel_backwardsu'].checked = f[lm + '_panel_backwardsu'].checked;

				f[m + '_panel_backwardsd'].checked = f[lm + '_panel_backwardsd'].checked;

				f[m + '_panel_casesensitivebox'].checked = f[lm + '_panel_casesensitivebox'].checked;

			}



			mcTabs.displayTab(m + '_tab',  m + '_panel');

			document.getElementById("replaceBtn").style.display = (m == "replace") ? "inline" : "none";

			document.getElementById("replaceAllBtn").style.display = (m == "replace") ? "inline" : "none";

			this.lastMode = m;

		}

	},



	searchNext : function(a) {

		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;



		// Get input

		f = document.forms[0];

		s = f[m + '_panel_searchstring'].value;

		b = f[m + '_panel_backwardsu'].checked;

		ca = f[m + '_panel_casesensitivebox'].checked;

		rs = f['replace_panel_replacestring'].value;



		if (s == '')

			return;



		function fix() {

			// Correct Firefox graphics glitches

			r = se.getRng().cloneRange();

			ed.getDoc().execCommand('SelectAll', false, null);

			se.setRng(r);

		};



		function replace() {

			if (tinymce.isIE)

				ed.selection.getRng().duplicate().pasteHTML(rs); // Needs to be duplicated due to selection bug in IE

			else

				ed.getDoc().execCommand('InsertHTML', false, rs);

		};



		// IE flags

		if (ca)

			fl = fl | 4;



		switch (a) {

			case 'all':

				// Move caret to beginning of text

				ed.execCommand('SelectAll');

				ed.selection.collapse(true);



				if (tinymce.isIE) {

					while (r.findText(s, b ? -1 : 1, fl)) {

						r.scrollIntoView();

						r.select();

						replace();

						fo = 1;

					}



					tinyMCEPopup.storeSelection();

				} else {

					while (w.find(s, ca, b, false, false, false, false)) {

						replace();

						fo = 1;

					}

				}



				if (fo)

					tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.allreplaced'));

				else

					tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound'));



				return;



			case 'current':

				if (!ed.selection.isCollapsed())

					replace();



				break;

		}



		se.collapse(b);

		r = se.getRng();



		// Whats the point

		if (!s)

			return;



		if (tinymce.isIE) {

			if (r.findText(s, b ? -1 : 1, fl)) {

				r.scrollIntoView();

				r.select();

			} else

				tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound'));



			tinyMCEPopup.storeSelection();

		} else {

			if (!w.find(s, ca, b, false, false, false, false))

				tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound'));

			else

				fix();

		}

	}

};



tinyMCEPopup.onInit.add(SearchReplaceDialog.init, SearchReplaceDialog);