]> scripts.mit.edu Git - autoinstalls/wordpress.git/blob - wp-includes/js/quicktags.js
Wordpress 2.3.2
[autoinstalls/wordpress.git] / wp-includes / js / quicktags.js
1 // new edit toolbar used with permission
2 // by Alex King
3 // http://www.alexking.org/
4
5 var edButtons = new Array();
6 var edLinks = new Array();
7 var edOpenTags = new Array();
8
9 function edButton(id, display, tagStart, tagEnd, access, open) {
10         this.id = id;                           // used to name the toolbar button
11         this.display = display;         // label on button
12         this.tagStart = tagStart;       // open tag
13         this.tagEnd = tagEnd;           // close tag
14         this.access = access;           // access key
15         this.open = open;                       // set to -1 if tag does not need to be closed
16 }
17
18 function zeroise(number, threshold) {
19         // FIXME: or we could use an implementation of printf in js here
20         var str = number.toString();
21         if (number < 0) { str = str.substr(1, str.length) }
22         while (str.length < threshold) { str = "0" + str }
23         if (number < 0) { str = '-' + str }
24         return str;
25 }
26
27 var now = new Date();
28 var datetime = now.getUTCFullYear() + '-' + 
29 zeroise(now.getUTCMonth() + 1, 2) + '-' +
30 zeroise(now.getUTCDate(), 2) + 'T' + 
31 zeroise(now.getUTCHours(), 2) + ':' + 
32 zeroise(now.getUTCMinutes(), 2) + ':' + 
33 zeroise(now.getUTCSeconds() ,2) +
34 '+00:00';
35
36 edButtons[edButtons.length] = 
37 new edButton('ed_strong'
38 ,'b'
39 ,'<strong>'
40 ,'</strong>'
41 ,'b'
42 );
43
44 edButtons[edButtons.length] = 
45 new edButton('ed_em'
46 ,'i'
47 ,'<em>'
48 ,'</em>'
49 ,'i'
50 );
51
52 edButtons[edButtons.length] = 
53 new edButton('ed_link'
54 ,'link'
55 ,''
56 ,'</a>'
57 ,'a'
58 ); // special case
59
60 edButtons[edButtons.length] = 
61 new edButton('ed_block'
62 ,'b-quote'
63 ,'\n\n<blockquote>'
64 ,'</blockquote>\n\n'
65 ,'q'
66 );
67
68
69 edButtons[edButtons.length] = 
70 new edButton('ed_del'
71 ,'del'
72 ,'<del datetime="' + datetime + '">'
73 ,'</del>'
74 ,'d'
75 );
76
77 edButtons[edButtons.length] = 
78 new edButton('ed_ins'
79 ,'ins'
80 ,'<ins datetime="' + datetime + '">'
81 ,'</ins>'
82 ,'s'
83 );
84
85 edButtons[edButtons.length] = 
86 new edButton('ed_img'
87 ,'img'
88 ,''
89 ,''
90 ,'m'
91 ,-1
92 ); // special case
93
94 edButtons[edButtons.length] = 
95 new edButton('ed_ul'
96 ,'ul'
97 ,'<ul>\n'
98 ,'</ul>\n\n'
99 ,'u'
100 );
101
102 edButtons[edButtons.length] = 
103 new edButton('ed_ol'
104 ,'ol'
105 ,'<ol>\n'
106 ,'</ol>\n\n'
107 ,'o'
108 );
109
110 edButtons[edButtons.length] = 
111 new edButton('ed_li'
112 ,'li'
113 ,'\t<li>'
114 ,'</li>\n'
115 ,'l'
116 );
117
118 edButtons[edButtons.length] = 
119 new edButton('ed_code'
120 ,'code'
121 ,'<code>'
122 ,'</code>'
123 ,'c'
124 );
125
126 edButtons[edButtons.length] = 
127 new edButton('ed_more'
128 ,'more'
129 ,'<!--more-->'
130 ,''
131 ,'t'
132 ,-1
133 );
134 /*
135 edButtons[edButtons.length] = 
136 new edButton('ed_next'
137 ,'page'
138 ,'<!--nextpage-->'
139 ,''
140 ,'p'
141 ,-1
142 );
143 */
144 function edLink() {
145         this.display = '';
146         this.URL = '';
147         this.newWin = 0;
148 }
149
150 edLinks[edLinks.length] = new edLink('WordPress'
151                                     ,'http://wordpress.org/'
152                                     );
153
154 edLinks[edLinks.length] = new edLink('alexking.org'
155                                     ,'http://www.alexking.org/'
156                                     );
157
158 function edShowButton(button, i) {
159         if (button.id == 'ed_img') {
160                 document.write('<input type="button" id="' + button.id + '" accesskey="' + button.access + '" class="ed_button" onclick="edInsertImage(edCanvas);" value="' + button.display + '" />');
161         }
162         else if (button.id == 'ed_link') {
163                 document.write('<input type="button" id="' + button.id + '" accesskey="' + button.access + '" class="ed_button" onclick="edInsertLink(edCanvas, ' + i + ');" value="' + button.display + '" />');
164         }
165         else {
166                 document.write('<input type="button" id="' + button.id + '" accesskey="' + button.access + '" class="ed_button" onclick="edInsertTag(edCanvas, ' + i + ');" value="' + button.display + '"  />');
167         }
168 }
169
170 function edShowLinks() {
171         var tempStr = '<select onchange="edQuickLink(this.options[this.selectedIndex].value, this);"><option value="-1" selected>' + quicktagsL10n.quickLinks + '</option>';
172         for (i = 0; i < edLinks.length; i++) {
173                 tempStr += '<option value="' + i + '">' + edLinks[i].display + '</option>';
174         }
175         tempStr += '</select>';
176         document.write(tempStr);
177 }
178
179 function edAddTag(button) {
180         if (edButtons[button].tagEnd != '') {
181                 edOpenTags[edOpenTags.length] = button;
182                 document.getElementById(edButtons[button].id).value = '/' + document.getElementById(edButtons[button].id).value;
183         }
184 }
185
186 function edRemoveTag(button) {
187         for (i = 0; i < edOpenTags.length; i++) {
188                 if (edOpenTags[i] == button) {
189                         edOpenTags.splice(i, 1);
190                         document.getElementById(edButtons[button].id).value =           document.getElementById(edButtons[button].id).value.replace('/', '');
191                 }
192         }
193 }
194
195 function edCheckOpenTags(button) {
196         var tag = 0;
197         for (i = 0; i < edOpenTags.length; i++) {
198                 if (edOpenTags[i] == button) {
199                         tag++;
200                 }
201         }
202         if (tag > 0) {
203                 return true; // tag found
204         }
205         else {
206                 return false; // tag not found
207         }
208 }
209
210 function edCloseAllTags() {
211         var count = edOpenTags.length;
212         for (o = 0; o < count; o++) {
213                 edInsertTag(edCanvas, edOpenTags[edOpenTags.length - 1]);
214         }
215 }
216
217 function edQuickLink(i, thisSelect) {
218         if (i > -1) {
219                 var newWin = '';
220                 if (edLinks[i].newWin == 1) {
221                         newWin = ' target="_blank"';
222                 }
223                 var tempStr = '<a href="' + edLinks[i].URL + '"' + newWin + '>' 
224                             + edLinks[i].display
225                             + '</a>';
226                 thisSelect.selectedIndex = 0;
227                 edInsertContent(edCanvas, tempStr);
228         }
229         else {
230                 thisSelect.selectedIndex = 0;
231         }
232 }
233
234 function edSpell(myField) {
235         var word = '';
236         if (document.selection) {
237                 myField.focus();
238             var sel = document.selection.createRange();
239                 if (sel.text.length > 0) {
240                         word = sel.text;
241                 }
242         }
243         else if (myField.selectionStart || myField.selectionStart == '0') {
244                 var startPos = myField.selectionStart;
245                 var endPos = myField.selectionEnd;
246                 if (startPos != endPos) {
247                         word = myField.value.substring(startPos, endPos);
248                 }
249         }
250         if (word == '') {
251                 word = prompt(quicktagsL10n.wordLookup, '');
252         }
253         if (word !== null && /^\w[\w ]*$/.test(word)) {
254                 window.open('http://www.answers.com/' + escape(word));
255         }
256 }
257
258 function edToolbar() {
259         document.write('<div id="ed_toolbar">');
260         for (i = 0; i < edButtons.length; i++) {
261                 edShowButton(edButtons[i], i);
262         }
263         document.write('<input type="button" id="ed_spell" class="ed_button" onclick="edSpell(edCanvas);" title="' + quicktagsL10n.dictionaryLookup + '" value="' + quicktagsL10n.lookup + '" />');
264         document.write('<input type="button" id="ed_close" class="ed_button" onclick="edCloseAllTags();" title="' + quicktagsL10n.closeAllOpenTags + '" value="' + quicktagsL10n.closeTags + '" />');
265 //      edShowLinks(); // disabled by default
266         document.write('</div>');
267 }
268
269 // insertion code
270
271 function edInsertTag(myField, i) {
272         //IE support
273         if (document.selection) {
274                 myField.focus();
275             sel = document.selection.createRange();
276                 if (sel.text.length > 0) {
277                         sel.text = edButtons[i].tagStart + sel.text + edButtons[i].tagEnd;
278                 }
279                 else {
280                         if (!edCheckOpenTags(i) || edButtons[i].tagEnd == '') {
281                                 sel.text = edButtons[i].tagStart;
282                                 edAddTag(i);
283                         }
284                         else {
285                                 sel.text = edButtons[i].tagEnd;
286                                 edRemoveTag(i);
287                         }
288                 }
289                 myField.focus();
290         }
291         //MOZILLA/NETSCAPE support
292         else if (myField.selectionStart || myField.selectionStart == '0') {
293                 var startPos = myField.selectionStart;
294                 var endPos = myField.selectionEnd;
295                 var cursorPos = endPos;
296                 var scrollTop = myField.scrollTop;
297
298                 if (startPos != endPos) {
299                         myField.value = myField.value.substring(0, startPos)
300                                       + edButtons[i].tagStart
301                                       + myField.value.substring(startPos, endPos) 
302                                       + edButtons[i].tagEnd
303                                       + myField.value.substring(endPos, myField.value.length);
304                         cursorPos += edButtons[i].tagStart.length + edButtons[i].tagEnd.length;
305                 }
306                 else {
307                         if (!edCheckOpenTags(i) || edButtons[i].tagEnd == '') {
308                                 myField.value = myField.value.substring(0, startPos) 
309                                               + edButtons[i].tagStart
310                                               + myField.value.substring(endPos, myField.value.length);
311                                 edAddTag(i);
312                                 cursorPos = startPos + edButtons[i].tagStart.length;
313                         }
314                         else {
315                                 myField.value = myField.value.substring(0, startPos) 
316                                               + edButtons[i].tagEnd
317                                               + myField.value.substring(endPos, myField.value.length);
318                                 edRemoveTag(i);
319                                 cursorPos = startPos + edButtons[i].tagEnd.length;
320                         }
321                 }
322                 myField.focus();
323                 myField.selectionStart = cursorPos;
324                 myField.selectionEnd = cursorPos;
325                 myField.scrollTop = scrollTop;
326         }
327         else {
328                 if (!edCheckOpenTags(i) || edButtons[i].tagEnd == '') {
329                         myField.value += edButtons[i].tagStart;
330                         edAddTag(i);
331                 }
332                 else {
333                         myField.value += edButtons[i].tagEnd;
334                         edRemoveTag(i);
335                 }
336                 myField.focus();
337         }
338 }
339
340 function edInsertContent(myField, myValue) {
341         //IE support
342         if (document.selection) {
343                 myField.focus();
344                 sel = document.selection.createRange();
345                 sel.text = myValue;
346                 myField.focus();
347         }
348         //MOZILLA/NETSCAPE support
349         else if (myField.selectionStart || myField.selectionStart == '0') {
350                 var startPos = myField.selectionStart;
351                 var endPos = myField.selectionEnd;
352                 myField.value = myField.value.substring(0, startPos)
353                               + myValue 
354                       + myField.value.substring(endPos, myField.value.length);
355                 myField.focus();
356                 myField.selectionStart = startPos + myValue.length;
357                 myField.selectionEnd = startPos + myValue.length;
358         } else {
359                 myField.value += myValue;
360                 myField.focus();
361         }
362 }
363
364 function edInsertLink(myField, i, defaultValue) {
365         if (!defaultValue) {
366                 defaultValue = 'http://';
367         }
368         if (!edCheckOpenTags(i)) {
369                 var URL = prompt(quicktagsL10n.enterURL, defaultValue);
370                 if (URL) {
371                         edButtons[i].tagStart = '<a href="' + URL + '">';
372                         edInsertTag(myField, i);
373                 }
374         }
375         else {
376                 edInsertTag(myField, i);
377         }
378 }
379
380 function edInsertImage(myField) {
381         var myValue = prompt(quicktagsL10n.enterImageURL, 'http://');
382         if (myValue) {
383                 myValue = '<img src="' 
384                                 + myValue 
385                                 + '" alt="' + prompt(quicktagsL10n.enterImageDescription, '') 
386                                 + '" />';
387                 edInsertContent(myField, myValue);
388         }
389 }