/[webpac2]/Webpacus/root/editor/quicktags.js
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /Webpacus/root/editor/quicktags.js

Parent Directory Parent Directory | Revision Log Revision Log


Revision 192 - (show annotations)
Tue Nov 29 13:21:41 2005 UTC (18 years, 5 months ago) by dpavlin
File MIME type: application/javascript
File size: 8183 byte(s)
fix typo and make focus on timeout to fix gecko based browsers which force
focus on next element

1 /*
2 original version from WordPress
3 by Alex King http://www.alexking.org/
4
5 tax fix and conversion to Prototype by Dobrica Pavlinusic <dpavlin@rot13.org>
6 */
7
8
9 var edButtons = new Array();
10 var edLinks = new Array();
11 var edOpenTags = new Array();
12 var edCanvas = null;
13
14 function edButton(id, display, tagStart, tagEnd, access, open) {
15 Logger.debug('edButton '+id+': '+display);
16 this.id = id; // used to name the toolbar button
17 this.display = display; // label on button
18 this.tagStart = tagStart; // open tag
19 this.tagEnd = tagEnd; // close tag
20 this.access = access; // access key
21 this.open = open; // set to -1 if tag does not need to be closed
22 }
23
24 edButtons[edButtons.length] =
25 new edButton('ed_div'
26 ,'div'
27 ,'<div>\n'
28 ,'\n</div>\n'
29 ,'d'
30 );
31
32 edButtons[edButtons.length] =
33 new edButton('ed_span'
34 ,'span'
35 ,'<span>'
36 ,'</span>'
37 ,'s'
38 );
39
40 edButtons[edButtons.length] =
41 new edButton('ed_strong'
42 ,'str'
43 ,'<strong>'
44 ,'</strong>'
45 ,'b'
46 );
47
48 edButtons[edButtons.length] =
49 new edButton('ed_em'
50 ,'em'
51 ,'<em>'
52 ,'</em>'
53 ,'i'
54 );
55
56 /*
57 edButtons[edButtons.length] =
58 new edButton('ed_pre'
59 ,'code'
60 ,'<code>'
61 ,'</code>'
62 ,'c'
63 );
64
65 edButtons[edButtons.length] =
66 new edButton('ed_block'
67 ,'b-quote'
68 ,'<blockquote>'
69 ,'</blockquote>'
70 ,'q'
71 );
72 */
73
74 edButtons[edButtons.length] =
75 new edButton('ed_link'
76 ,'link'
77 ,''
78 ,'</a>'
79 ,'a'
80 ); // special case
81
82 function edLink() {
83 this.display = '';
84 this.URL = '';
85 this.newWin = 0;
86 }
87
88 edButtons[edButtons.length] =
89 new edButton('ed_table'
90 ,'table'
91 ,'\n<table>\n'
92 ,'\n</table>\n'
93 ,'t'
94 );
95
96 edButtons[edButtons.length] =
97 new edButton('ed_tr'
98 ,'tr'
99 ,'<tr>'
100 ,'</tr>'
101 ,'r'
102 );
103
104 edButtons[edButtons.length] =
105 new edButton('ed_td'
106 ,'td'
107 ,'<td>'
108 ,'</td>'
109 ,'e'
110 );
111
112 function edShowButton(button, i) {
113 if (button.id == 'ed_img') {
114 return('<input type="button" id="' + button.id + '" accesskey="' + button.access + '" class="ed_button" onclick="edInsertImage(edCanvas);" value="' + button.display + '" />');
115 }
116 else if (button.id == 'ed_link') {
117 return('<input type="button" id="' + button.id + '" accesskey="' + button.access + '" class="ed_button" onclick="edInsertLink(edCanvas, ' + i + ');" value="' + button.display + '" />');
118 }
119 else {
120 return('<input type="button" id="' + button.id + '" accesskey="' + button.access + '" class="ed_button" onclick="edInsertTag(edCanvas, ' + i + ');" value="' + button.display + '" />');
121 }
122 }
123
124 function edAddTag(button) {
125 if (edButtons[button].tagEnd != '') {
126 edOpenTags[edOpenTags.length] = button;
127 $( edButtons[button].id ).value = '/' + $( edButtons[button].id ).value;
128 }
129 }
130
131 function edRemoveTag(button) {
132 for (i = 0; i < edOpenTags.length; i++) {
133 if (edOpenTags[i] == button) {
134 edOpenTags.splice(i, 1);
135 $( edButtons[button].id ).value = $( edButtons[button].id ).value.replace('/', '');
136 }
137 }
138 }
139
140 function edCheckOpenTags(button) {
141 var tag = 0;
142 for (i = 0; i < edOpenTags.length; i++) {
143 if (edOpenTags[i] == button) {
144 tag++;
145 }
146 }
147 if (tag > 0) {
148 return true; // tag found
149 }
150 else {
151 return false; // tag not found
152 }
153 }
154
155 function edCloseAllTags() {
156 var count = edOpenTags.length;
157 for (o = 0; o < count; o++) {
158 edInsertTag(edCanvas, edOpenTags[edOpenTags.length - 1]);
159 }
160 }
161
162 var edActiveToolbar = {};
163
164 function edToolbar( name ) {
165
166 if (edActiveToolbar[name]) return false;
167
168 var toolbar_div = name + '_toolbar';
169
170 Logger.info('edToolbar of '+name+' is '+toolbar_div);
171
172 var div = $( toolbar_div );
173 if (! div) {
174 Logger.error('div not found');
175 return false;
176 }
177
178 var toolbar = '';
179
180 for (var i = 0; i < edButtons.length; i++) {
181 toolbar += edShowButton(edButtons[i], i);
182 }
183 toolbar += '&nbsp;&nbsp';
184 toolbar += '<input type="button" id="ed_close" class="ed_button" onclick="edCloseAllTags();" title="Close all open tags" value="Close Tags" />';
185
186 div.innerHTML = toolbar;
187 Logger.debug('before: '+edActiveToolbar[name]);
188 edActiveToolbar[name] = 1;
189 Logger.debug('after: '+edActiveToolbar[name]);
190 return false;
191 }
192
193 // insertion code
194
195 function edInsertTag(myField, i) {
196
197 var pos = myField.scrollTop;
198 Logger.debug('edInsertTag "'+i+'", scrollTop='+pos);
199
200 //IE support
201 if (document.selection) {
202 myField.focus();
203 sel = document.selection.createRange();
204 if (sel.text.length > 0) {
205 sel.text = edButtons[i].tagStart + sel.text + edButtons[i].tagEnd;
206 }
207 else {
208 if (!edCheckOpenTags(i) || edButtons[i].tagEnd == '') {
209 sel.text = edButtons[i].tagStart;
210 edAddTag(i);
211 }
212 else {
213 sel.text = edButtons[i].tagEnd;
214 edRemoveTag(i);
215 }
216 }
217 myField.focus();
218 }
219 //MOZILLA/NETSCAPE support
220 else if (myField.selectionStart || myField.selectionStart == '0') {
221 var startPos = myField.selectionStart;
222 var endPos = myField.selectionEnd;
223 var cursorPos = endPos;
224 var scrollTop = myField.scrollTop;
225
226 if (startPos != endPos) {
227 myField.value = myField.value.substring(0, startPos)
228 + edButtons[i].tagStart
229 + myField.value.substring(startPos, endPos)
230 + edButtons[i].tagEnd
231 + myField.value.substring(endPos, myField.value.length);
232 cursorPos += edButtons[i].tagStart.length + edButtons[i].tagEnd.length;
233 }
234 else {
235 if (!edCheckOpenTags(i) || edButtons[i].tagEnd == '') {
236 myField.value = myField.value.substring(0, startPos)
237 + edButtons[i].tagStart
238 + myField.value.substring(endPos, myField.value.length);
239 edAddTag(i);
240 cursorPos = startPos + edButtons[i].tagStart.length;
241 }
242 else {
243 myField.value = myField.value.substring(0, startPos)
244 + edButtons[i].tagEnd
245 + myField.value.substring(endPos, myField.value.length);
246 edRemoveTag(i);
247 cursorPos = startPos + edButtons[i].tagEnd.length;
248 }
249 }
250 myField.focus();
251 myField.selectionStart = cursorPos;
252 myField.selectionEnd = cursorPos;
253 myField.scrollTop = scrollTop;
254 }
255 else {
256 if (!edCheckOpenTags(i) || edButtons[i].tagEnd == '') {
257 myField.value += edButtons[i].tagStart;
258 edAddTag(i);
259 }
260 else {
261 myField.value += edButtons[i].tagEnd;
262 edRemoveTag(i);
263 }
264 myField.focus();
265 }
266
267 if (pos && myField.scrollTop != pos) myField.scrollTop = pos;
268 }
269
270 function edInsertContent(myField, myValue) {
271
272 var pos = myField.scrollTop;
273
274 Logger.debug('edInsertContent "'+myValue+'", scrollTop='+pos);
275 //IE support
276 if (document.selection) {
277 myField.focus();
278 sel = document.selection.createRange();
279 sel.text = myValue;
280 myField.focus();
281 }
282 //MOZILLA/NETSCAPE support
283 else if (myField.selectionStart || myField.selectionStart == '0') {
284 var startPos = myField.selectionStart;
285 var endPos = myField.selectionEnd;
286 myField.value = myField.value.substring(0, startPos)
287 + myValue
288 + myField.value.substring(endPos, myField.value.length);
289 myField.focus();
290 myField.selectionStart = startPos + myValue.length;
291 myField.selectionEnd = startPos + myValue.length;
292 } else {
293 myField.value += myValue;
294 myField.focus();
295 }
296
297 if (pos && myField.scrollTop != pos) myField.scrollTop = pos;
298 }
299
300 function edInsertLink(myField, i, defaultValue) {
301 if (!defaultValue) {
302 defaultValue = 'http://';
303 }
304 if (!edCheckOpenTags(i)) {
305 var URL = prompt('Enter the URL' ,defaultValue);
306 if (URL) {
307 edButtons[i].tagStart = '<a href="' + URL + '">';
308 edInsertTag(myField, i);
309 }
310 }
311 else {
312 edInsertTag(myField, i);
313 }
314 }
315
316 /* additional methods on textarea */
317
318 /*
319 onkeydown="return edTab(event);"
320 */
321 function edTab(event) {
322 var e = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
323 if (e == 9) {
324 edInsertContent(edCanvas, '\t');
325 // this is a fix for gecko-based browsers which force
326 // focus change on tab. It *should* be harmless for
327 // others, since edCavnas is allready focused
328 setTimeout('edCanvas.focus();', 1);
329 return false;
330 }
331 return true;
332 }
333
334 /*
335 onfocus="return edFocus('template_content');"
336 */
337 function edFocus( name ) {
338 Logger.info('edFocus '+name);
339 edCanvas = $( name );
340 if (! edCanvas) Logger.error("can't find "+name);
341 edToolbar( name );
342 return false;
343 }
344
345 /*
346 onblur="return edBlur();"
347 */
348 function edBlur() {
349 Logger.info('edBlur');
350 edCanvas = null;
351 return false;
352 }
353
354 /*
355 call this function for cleanup of toolbar and other
356 temporary data.
357 */
358 function edKill( name ) {
359 Logger.info('edKill '+name);
360 edActiveToolbar[name] = null;
361 }

  ViewVC Help
Powered by ViewVC 1.1.26