1 // new edit toolbar used with permission
3 // http://www.alexking.org/
5 var edButtons = new Array();
6 var edLinks = new Array();
7 var edOpenTags = new Array();
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
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 }
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) +
36 edButtons[edButtons.length] =
37 new edButton('ed_strong'
44 edButtons[edButtons.length] =
52 edButtons[edButtons.length] =
53 new edButton('ed_link'
60 edButtons[edButtons.length] =
61 new edButton('ed_block'
69 edButtons[edButtons.length] =
72 ,'<del datetime="' + datetime + '">'
77 edButtons[edButtons.length] =
80 ,'<ins datetime="' + datetime + '">'
85 edButtons[edButtons.length] =
94 edButtons[edButtons.length] =
102 edButtons[edButtons.length] =
110 edButtons[edButtons.length] =
118 edButtons[edButtons.length] =
119 new edButton('ed_code'
126 edButtons[edButtons.length] =
127 new edButton('ed_more'
135 edButtons[edButtons.length] =
136 new edButton('ed_next'
150 edLinks[edLinks.length] = new edLink('WordPress'
151 ,'http://wordpress.org/'
154 edLinks[edLinks.length] = new edLink('alexking.org'
155 ,'http://www.alexking.org/'
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 + '" />');
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 + '" />');
166 document.write('<input type="button" id="' + button.id + '" accesskey="' + button.access + '" class="ed_button" onclick="edInsertTag(edCanvas, ' + i + ');" value="' + button.display + '" />');
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>';
175 tempStr += '</select>';
176 document.write(tempStr);
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;
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('/', '');
195 function edCheckOpenTags(button) {
197 for (i = 0; i < edOpenTags.length; i++) {
198 if (edOpenTags[i] == button) {
203 return true; // tag found
206 return false; // tag not found
210 function edCloseAllTags() {
211 var count = edOpenTags.length;
212 for (o = 0; o < count; o++) {
213 edInsertTag(edCanvas, edOpenTags[edOpenTags.length - 1]);
217 function edQuickLink(i, thisSelect) {
220 if (edLinks[i].newWin == 1) {
221 newWin = ' target="_blank"';
223 var tempStr = '<a href="' + edLinks[i].URL + '"' + newWin + '>'
226 thisSelect.selectedIndex = 0;
227 edInsertContent(edCanvas, tempStr);
230 thisSelect.selectedIndex = 0;
234 function edSpell(myField) {
236 if (document.selection) {
238 var sel = document.selection.createRange();
239 if (sel.text.length > 0) {
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);
251 word = prompt(quicktagsL10n.wordLookup, '');
253 if (word !== null && /^\w[\w ]*$/.test(word)) {
254 window.open('http://www.answers.com/' + escape(word));
258 function edToolbar() {
259 document.write('<div id="ed_toolbar">');
260 for (i = 0; i < edButtons.length; i++) {
261 edShowButton(edButtons[i], i);
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>');
271 function edInsertTag(myField, i) {
273 if (document.selection) {
275 sel = document.selection.createRange();
276 if (sel.text.length > 0) {
277 sel.text = edButtons[i].tagStart + sel.text + edButtons[i].tagEnd;
280 if (!edCheckOpenTags(i) || edButtons[i].tagEnd == '') {
281 sel.text = edButtons[i].tagStart;
285 sel.text = edButtons[i].tagEnd;
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;
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;
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);
312 cursorPos = startPos + edButtons[i].tagStart.length;
315 myField.value = myField.value.substring(0, startPos)
316 + edButtons[i].tagEnd
317 + myField.value.substring(endPos, myField.value.length);
319 cursorPos = startPos + edButtons[i].tagEnd.length;
323 myField.selectionStart = cursorPos;
324 myField.selectionEnd = cursorPos;
325 myField.scrollTop = scrollTop;
328 if (!edCheckOpenTags(i) || edButtons[i].tagEnd == '') {
329 myField.value += edButtons[i].tagStart;
333 myField.value += edButtons[i].tagEnd;
340 function edInsertContent(myField, myValue) {
342 if (document.selection) {
344 sel = document.selection.createRange();
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)
354 + myField.value.substring(endPos, myField.value.length);
356 myField.selectionStart = startPos + myValue.length;
357 myField.selectionEnd = startPos + myValue.length;
359 myField.value += myValue;
364 function edInsertLink(myField, i, defaultValue) {
366 defaultValue = 'http://';
368 if (!edCheckOpenTags(i)) {
369 var URL = prompt(quicktagsL10n.enterURL, defaultValue);
371 edButtons[i].tagStart = '<a href="' + URL + '">';
372 edInsertTag(myField, i);
376 edInsertTag(myField, i);
380 function edInsertImage(myField) {
381 var myValue = prompt(quicktagsL10n.enterImageURL, 'http://');
383 myValue = '<img src="'
385 + '" alt="' + prompt(quicktagsL10n.enterImageDescription, '')
387 edInsertContent(myField, myValue);