source: trunk/www.guidonia.net/wp/wp-includes/js/quicktags.dev.js@ 44

Last change on this file since 44 was 44, checked in by luciano, 14 years ago
File size: 16.6 KB
Line 
1// new edit toolbar used with permission
2// by Alex King
3// http://www.alexking.org/
4
5var edButtons = new Array(), edLinks = new Array(), edOpenTags = new Array(), now = new Date(), datetime;
6
7function edButton(id, display, tagStart, tagEnd, access, open) {
8 this.id = id; // used to name the toolbar button
9 this.display = display; // label on button
10 this.tagStart = tagStart; // open tag
11 this.tagEnd = tagEnd; // close tag
12 this.access = access; // access key
13 this.open = open; // set to -1 if tag does not need to be closed
14}
15
16function zeroise(number, threshold) {
17 // FIXME: or we could use an implementation of printf in js here
18 var str = number.toString();
19 if (number < 0) { str = str.substr(1, str.length) }
20 while (str.length < threshold) { str = "0" + str }
21 if (number < 0) { str = '-' + str }
22 return str;
23}
24
25datetime = now.getUTCFullYear() + '-' +
26zeroise(now.getUTCMonth() + 1, 2) + '-' +
27zeroise(now.getUTCDate(), 2) + 'T' +
28zeroise(now.getUTCHours(), 2) + ':' +
29zeroise(now.getUTCMinutes(), 2) + ':' +
30zeroise(now.getUTCSeconds() ,2) +
31'+00:00';
32
33edButtons[edButtons.length] =
34new edButton('ed_strong'
35,'b'
36,'<strong>'
37,'</strong>'
38,'b'
39);
40
41edButtons[edButtons.length] =
42new edButton('ed_em'
43,'i'
44,'<em>'
45,'</em>'
46,'i'
47);
48
49edButtons[edButtons.length] =
50new edButton('ed_link'
51,'link'
52,''
53,'</a>'
54,'a'
55); // special case
56
57edButtons[edButtons.length] =
58new edButton('ed_block'
59,'b-quote'
60,'\n\n<blockquote>'
61,'</blockquote>\n\n'
62,'q'
63);
64
65
66edButtons[edButtons.length] =
67new edButton('ed_del'
68,'del'
69,'<del datetime="' + datetime + '">'
70,'</del>'
71,'d'
72);
73
74edButtons[edButtons.length] =
75new edButton('ed_ins'
76,'ins'
77,'<ins datetime="' + datetime + '">'
78,'</ins>'
79,'s'
80);
81
82edButtons[edButtons.length] =
83new edButton('ed_img'
84,'img'
85,''
86,''
87,'m'
88,-1
89); // special case
90
91edButtons[edButtons.length] =
92new edButton('ed_ul'
93,'ul'
94,'<ul>\n'
95,'</ul>\n\n'
96,'u'
97);
98
99edButtons[edButtons.length] =
100new edButton('ed_ol'
101,'ol'
102,'<ol>\n'
103,'</ol>\n\n'
104,'o'
105);
106
107edButtons[edButtons.length] =
108new edButton('ed_li'
109,'li'
110,'\t<li>'
111,'</li>\n'
112,'l'
113);
114
115edButtons[edButtons.length] =
116new edButton('ed_code'
117,'code'
118,'<code>'
119,'</code>'
120,'c'
121);
122
123edButtons[edButtons.length] =
124new edButton('ed_more'
125,'more'
126,'<!--more-->'
127,''
128,'t'
129,-1
130);
131/*
132edButtons[edButtons.length] =
133new edButton('ed_next'
134,'page'
135,'<!--nextpage-->'
136,''
137,'p'
138,-1
139);
140*/
141function edLink() {
142 this.display = '';
143 this.URL = '';
144 this.newWin = 0;
145}
146
147edLinks[edLinks.length] = new edLink('WordPress'
148 ,'http://wordpress.org/'
149 );
150
151edLinks[edLinks.length] = new edLink('alexking.org'
152 ,'http://www.alexking.org/'
153 );
154
155function edShowButton(button, i) {
156 if (button.id == 'ed_img') {
157 document.write('<input type="button" id="' + button.id + '" accesskey="' + button.access + '" class="ed_button" onclick="edInsertImage(edCanvas);" value="' + button.display + '" />');
158 }
159 else if (button.id == 'ed_link') {
160 document.write('<input type="button" id="' + button.id + '" accesskey="' + button.access + '" class="ed_button" onclick="edInsertLink(edCanvas, ' + i + ');" value="' + button.display + '" />');
161 }
162 else {
163 document.write('<input type="button" id="' + button.id + '" accesskey="' + button.access + '" class="ed_button" onclick="edInsertTag(edCanvas, ' + i + ');" value="' + button.display + '" />');
164 }
165}
166
167function edShowLinks() {
168 var tempStr = '<select onchange="edQuickLink(this.options[this.selectedIndex].value, this);"><option value="-1" selected>' + quicktagsL10n.quickLinks + '</option>', i;
169 for (i = 0; i < edLinks.length; i++) {
170 tempStr += '<option value="' + i + '">' + edLinks[i].display + '</option>';
171 }
172 tempStr += '</select>';
173 document.write(tempStr);
174}
175
176function edAddTag(button) {
177 if (edButtons[button].tagEnd != '') {
178 edOpenTags[edOpenTags.length] = button;
179 document.getElementById(edButtons[button].id).value = '/' + document.getElementById(edButtons[button].id).value;
180 }
181}
182
183function edRemoveTag(button) {
184 for (var i = 0; i < edOpenTags.length; i++) {
185 if (edOpenTags[i] == button) {
186 edOpenTags.splice(i, 1);
187 document.getElementById(edButtons[button].id).value = document.getElementById(edButtons[button].id).value.replace('/', '');
188 }
189 }
190}
191
192function edCheckOpenTags(button) {
193 var tag = 0, i;
194 for (i = 0; i < edOpenTags.length; i++) {
195 if (edOpenTags[i] == button) {
196 tag++;
197 }
198 }
199 if (tag > 0) {
200 return true; // tag found
201 }
202 else {
203 return false; // tag not found
204 }
205}
206
207function edCloseAllTags() {
208 var count = edOpenTags.length, o;
209 for (o = 0; o < count; o++) {
210 edInsertTag(edCanvas, edOpenTags[edOpenTags.length - 1]);
211 }
212}
213
214function edQuickLink(i, thisSelect) {
215 if (i > -1) {
216 var newWin = '', tempStr;
217 if (edLinks[i].newWin == 1) {
218 newWin = ' target="_blank"';
219 }
220 tempStr = '<a href="' + edLinks[i].URL + '"' + newWin + '>'
221 + edLinks[i].display
222 + '</a>';
223 thisSelect.selectedIndex = 0;
224 edInsertContent(edCanvas, tempStr);
225 }
226 else {
227 thisSelect.selectedIndex = 0;
228 }
229}
230
231function edSpell(myField) {
232 var word = '', sel, startPos, endPos;
233 if (document.selection) {
234 myField.focus();
235 sel = document.selection.createRange();
236 if (sel.text.length > 0) {
237 word = sel.text;
238 }
239 }
240 else if (myField.selectionStart || myField.selectionStart == '0') {
241 startPos = myField.selectionStart;
242 endPos = myField.selectionEnd;
243 if (startPos != endPos) {
244 word = myField.value.substring(startPos, endPos);
245 }
246 }
247 if (word == '') {
248 word = prompt(quicktagsL10n.wordLookup, '');
249 }
250 if (word !== null && /^\w[\w ]*$/.test(word)) {
251 window.open('http://www.answers.com/' + escape(word));
252 }
253}
254
255function edToolbar() {
256 document.write('<div id="ed_toolbar">');
257 for (var i = 0; i < edButtons.length; i++) {
258 edShowButton(edButtons[i], i);
259 }
260 document.write('<input type="button" id="ed_spell" class="ed_button" onclick="edSpell(edCanvas);" title="' + quicktagsL10n.dictionaryLookup + '" value="' + quicktagsL10n.lookup + '" />');
261 document.write('<input type="button" id="ed_close" class="ed_button" onclick="edCloseAllTags();" title="' + quicktagsL10n.closeAllOpenTags + '" value="' + quicktagsL10n.closeTags + '" />');
262// edShowLinks(); // disabled by default
263 document.write('</div>');
264}
265
266// insertion code
267
268function edInsertTag(myField, i) {
269 //IE support
270 if (document.selection) {
271 myField.focus();
272 var sel = document.selection.createRange();
273 if (sel.text.length > 0) {
274 sel.text = edButtons[i].tagStart + sel.text + edButtons[i].tagEnd;
275 }
276 else {
277 if (!edCheckOpenTags(i) || edButtons[i].tagEnd == '') {
278 sel.text = edButtons[i].tagStart;
279 edAddTag(i);
280 }
281 else {
282 sel.text = edButtons[i].tagEnd;
283 edRemoveTag(i);
284 }
285 }
286 myField.focus();
287 }
288 //MOZILLA/NETSCAPE support
289 else if (myField.selectionStart || myField.selectionStart == '0') {
290 var startPos = myField.selectionStart, endPos = myField.selectionEnd, cursorPos = endPos, scrollTop = myField.scrollTop;
291
292 if (startPos != endPos) {
293 myField.value = myField.value.substring(0, startPos)
294 + edButtons[i].tagStart
295 + myField.value.substring(startPos, endPos)
296 + edButtons[i].tagEnd
297 + myField.value.substring(endPos, myField.value.length);
298 cursorPos += edButtons[i].tagStart.length + edButtons[i].tagEnd.length;
299 }
300 else {
301 if (!edCheckOpenTags(i) || edButtons[i].tagEnd == '') {
302 myField.value = myField.value.substring(0, startPos)
303 + edButtons[i].tagStart
304 + myField.value.substring(endPos, myField.value.length);
305 edAddTag(i);
306 cursorPos = startPos + edButtons[i].tagStart.length;
307 }
308 else {
309 myField.value = myField.value.substring(0, startPos)
310 + edButtons[i].tagEnd
311 + myField.value.substring(endPos, myField.value.length);
312 edRemoveTag(i);
313 cursorPos = startPos + edButtons[i].tagEnd.length;
314 }
315 }
316 myField.focus();
317 myField.selectionStart = cursorPos;
318 myField.selectionEnd = cursorPos;
319 myField.scrollTop = scrollTop;
320 }
321 else {
322 if (!edCheckOpenTags(i) || edButtons[i].tagEnd == '') {
323 myField.value += edButtons[i].tagStart;
324 edAddTag(i);
325 }
326 else {
327 myField.value += edButtons[i].tagEnd;
328 edRemoveTag(i);
329 }
330 myField.focus();
331 }
332}
333
334function edInsertContent(myField, myValue) {
335 var sel, startPos, endPos, scrollTop;
336
337 //IE support
338 if (document.selection) {
339 myField.focus();
340 sel = document.selection.createRange();
341 sel.text = myValue;
342 myField.focus();
343 }
344 //MOZILLA/NETSCAPE support
345 else if (myField.selectionStart || myField.selectionStart == '0') {
346 startPos = myField.selectionStart;
347 endPos = myField.selectionEnd;
348 scrollTop = myField.scrollTop;
349 myField.value = myField.value.substring(0, startPos)
350 + myValue
351 + myField.value.substring(endPos, myField.value.length);
352 myField.focus();
353 myField.selectionStart = startPos + myValue.length;
354 myField.selectionEnd = startPos + myValue.length;
355 myField.scrollTop = scrollTop;
356 } else {
357 myField.value += myValue;
358 myField.focus();
359 }
360}
361
362function edInsertLink(myField, i, defaultValue) {
363 if (!defaultValue) {
364 defaultValue = 'http://';
365 }
366 if (!edCheckOpenTags(i)) {
367 var URL = prompt(quicktagsL10n.enterURL, defaultValue);
368 if (URL) {
369 edButtons[i].tagStart = '<a href="' + URL + '">';
370 edInsertTag(myField, i);
371 }
372 }
373 else {
374 edInsertTag(myField, i);
375 }
376}
377
378function edInsertImage(myField) {
379 var myValue = prompt(quicktagsL10n.enterImageURL, 'http://');
380 if (myValue) {
381 myValue = '<img src="'
382 + myValue
383 + '" alt="' + prompt(quicktagsL10n.enterImageDescription, '')
384 + '" />';
385 edInsertContent(myField, myValue);
386 }
387}
388
389
390// Allow multiple instances.
391// Name = unique value, id = textarea id, container = container div.
392// Can disable some buttons by passing comma delimited string as 4th param.
393var QTags = function(name, id, container, disabled) {
394 var t = this, cont = document.getElementById(container), i, tag, tb, html, sel;
395
396 t.Buttons = [];
397 t.Links = [];
398 t.OpenTags = [];
399 t.Canvas = document.getElementById(id);
400
401 if ( ! t.Canvas || ! cont )
402 return;
403
404 disabled = ( typeof disabled != 'undefined' ) ? ','+disabled+',' : '';
405
406 t.edShowButton = function(button, i) {
407 if ( disabled && (disabled.indexOf(','+button.display+',') != -1) )
408 return '';
409 else if ( button.id == name+'_img' )
410 return '<input type="button" id="' + button.id + '" accesskey="' + button.access + '" class="ed_button" onclick="edInsertImage('+name+'.Canvas);" value="' + button.display + '" />';
411 else if (button.id == name+'_link')
412 return '<input type="button" id="' + button.id + '" accesskey="' + button.access + '" class="ed_button" onclick="'+name+'.edInsertLink('+i+');" value="'+button.display+'" />';
413 else
414 return '<input type="button" id="' + button.id + '" accesskey="'+button.access+'" class="ed_button" onclick="'+name+'.edInsertTag('+i+');" value="'+button.display+'" />';
415 };
416
417 t.edAddTag = function(button) {
418 if ( t.Buttons[button].tagEnd != '' ) {
419 t.OpenTags[t.OpenTags.length] = button;
420 document.getElementById(t.Buttons[button].id).value = '/' + document.getElementById(t.Buttons[button].id).value;
421 }
422 };
423
424 t.edRemoveTag = function(button) {
425 for ( i = 0; i < t.OpenTags.length; i++ ) {
426 if ( t.OpenTags[i] == button ) {
427 t.OpenTags.splice(i, 1);
428 document.getElementById(t.Buttons[button].id).value = document.getElementById(t.Buttons[button].id).value.replace('/', '');
429 }
430 }
431 };
432
433 t.edCheckOpenTags = function(button) {
434 tag = 0;
435 for ( var i = 0; i < t.OpenTags.length; i++ ) {
436 if ( t.OpenTags[i] == button )
437 tag++;
438 }
439 if ( tag > 0 ) return true; // tag found
440 else return false; // tag not found
441 };
442
443 this.edCloseAllTags = function() {
444 var count = t.OpenTags.length;
445 for ( var o = 0; o < count; o++ )
446 t.edInsertTag(t.OpenTags[t.OpenTags.length - 1]);
447 };
448
449 this.edQuickLink = function(i, thisSelect) {
450 if ( i > -1 ) {
451 var newWin = '', tempStr;
452 if ( Links[i].newWin == 1 ) {
453 newWin = ' target="_blank"';
454 }
455 tempStr = '<a href="' + Links[i].URL + '"' + newWin + '>'
456 + Links[i].display
457 + '</a>';
458 thisSelect.selectedIndex = 0;
459 edInsertContent(t.Canvas, tempStr);
460 } else {
461 thisSelect.selectedIndex = 0;
462 }
463 };
464
465 // insertion code
466 t.edInsertTag = function(i) {
467 //IE support
468 if ( document.selection ) {
469 t.Canvas.focus();
470 sel = document.selection.createRange();
471 if ( sel.text.length > 0 ) {
472 sel.text = t.Buttons[i].tagStart + sel.text + t.Buttons[i].tagEnd;
473 } else {
474 if ( ! t.edCheckOpenTags(i) || t.Buttons[i].tagEnd == '' ) {
475 sel.text = t.Buttons[i].tagStart;
476 t.edAddTag(i);
477 } else {
478 sel.text = t.Buttons[i].tagEnd;
479 t.edRemoveTag(i);
480 }
481 }
482 t.Canvas.focus();
483 } else if ( t.Canvas.selectionStart || t.Canvas.selectionStart == '0' ) { //MOZILLA/NETSCAPE support
484 var startPos = t.Canvas.selectionStart, endPos = t.Canvas.selectionEnd, cursorPos = endPos, scrollTop = t.Canvas.scrollTop;
485
486 if ( startPos != endPos ) {
487 t.Canvas.value = t.Canvas.value.substring(0, startPos)
488 + t.Buttons[i].tagStart
489 + t.Canvas.value.substring(startPos, endPos)
490 + t.Buttons[i].tagEnd
491 + t.Canvas.value.substring(endPos, t.Canvas.value.length);
492 cursorPos += t.Buttons[i].tagStart.length + t.Buttons[i].tagEnd.length;
493 } else {
494 if ( !t.edCheckOpenTags(i) || t.Buttons[i].tagEnd == '' ) {
495 t.Canvas.value = t.Canvas.value.substring(0, startPos)
496 + t.Buttons[i].tagStart
497 + t.Canvas.value.substring(endPos, t.Canvas.value.length);
498 t.edAddTag(i);
499 cursorPos = startPos + t.Buttons[i].tagStart.length;
500 } else {
501 t.Canvas.value = t.Canvas.value.substring(0, startPos)
502 + t.Buttons[i].tagEnd
503 + t.Canvas.value.substring(endPos, t.Canvas.value.length);
504 t.edRemoveTag(i);
505 cursorPos = startPos + t.Buttons[i].tagEnd.length;
506 }
507 }
508 t.Canvas.focus();
509 t.Canvas.selectionStart = cursorPos;
510 t.Canvas.selectionEnd = cursorPos;
511 t.Canvas.scrollTop = scrollTop;
512 } else {
513 if ( ! t.edCheckOpenTags(i) || t.Buttons[i].tagEnd == '' ) {
514 t.Canvas.value += Buttons[i].tagStart;
515 t.edAddTag(i);
516 } else {
517 t.Canvas.value += Buttons[i].tagEnd;
518 t.edRemoveTag(i);
519 }
520 t.Canvas.focus();
521 }
522 };
523
524 this.edInsertLink = function(i, defaultValue) {
525 if ( ! defaultValue )
526 defaultValue = 'http://';
527
528 if ( ! t.edCheckOpenTags(i) ) {
529 var URL = prompt(quicktagsL10n.enterURL, defaultValue);
530 if ( URL ) {
531 t.Buttons[i].tagStart = '<a href="' + URL + '">';
532 t.edInsertTag(i);
533 }
534 } else {
535 t.edInsertTag(i);
536 }
537 };
538
539 this.edInsertImage = function() {
540 var myValue = prompt(quicktagsL10n.enterImageURL, 'http://');
541 if ( myValue ) {
542 myValue = '<img src="'
543 + myValue
544 + '" alt="' + prompt(quicktagsL10n.enterImageDescription, '')
545 + '" />';
546 edInsertContent(t.Canvas, myValue);
547 }
548 };
549
550 t.Buttons[t.Buttons.length] = new edButton(name+'_strong','b','<strong>','</strong>','b');
551 t.Buttons[t.Buttons.length] = new edButton(name+'_em','i','<em>','</em>','i');
552 t.Buttons[t.Buttons.length] = new edButton(name+'_link','link','','</a>','a'); // special case
553 t.Buttons[t.Buttons.length] = new edButton(name+'_block','b-quote','\n\n<blockquote>','</blockquote>\n\n','q');
554 t.Buttons[t.Buttons.length] = new edButton(name+'_del','del','<del datetime="' + datetime + '">','</del>','d');
555 t.Buttons[t.Buttons.length] = new edButton(name+'_ins','ins','<ins datetime="' + datetime + '">','</ins>','s');
556 t.Buttons[t.Buttons.length] = new edButton(name+'_img','img','','','m',-1); // special case
557 t.Buttons[t.Buttons.length] = new edButton(name+'_ul','ul','<ul>\n','</ul>\n\n','u');
558 t.Buttons[t.Buttons.length] = new edButton(name+'_ol','ol','<ol>\n','</ol>\n\n','o');
559 t.Buttons[t.Buttons.length] = new edButton(name+'_li','li','\t<li>','</li>\n','l');
560 t.Buttons[t.Buttons.length] = new edButton(name+'_code','code','<code>','</code>','c');
561 t.Buttons[t.Buttons.length] = new edButton(name+'_more','more','<!--more-->','','t',-1);
562// t.Buttons[t.Buttons.length] = new edButton(name+'_next','page','<!--nextpage-->','','p',-1);
563
564 tb = document.createElement('div');
565 tb.id = name+'_qtags';
566
567 html = '<div id="'+name+'_toolbar">';
568 for (i = 0; i < t.Buttons.length; i++)
569 html += t.edShowButton(t.Buttons[i], i);
570
571 html += '<input type="button" id="'+name+'_ed_spell" class="ed_button" onclick="edSpell('+name+'.Canvas);" title="' + quicktagsL10n.dictionaryLookup + '" value="' + quicktagsL10n.lookup + '" />';
572 html += '<input type="button" id="'+name+'_ed_close" class="ed_button" onclick="'+name+'.edCloseAllTags();" title="' + quicktagsL10n.closeAllOpenTags + '" value="' + quicktagsL10n.closeTags + '" /></div>';
573
574 tb.innerHTML = html;
575 cont.parentNode.insertBefore(tb, cont);
576
577};
Note: See TracBrowser for help on using the repository browser.