/[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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 192 - (hide 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 dpavlin 175 /*
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 dpavlin 179 if (edActiveToolbar[name]) return false;
167 dpavlin 175
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 dpavlin 176 for (var i = 0; i < edButtons.length; i++) {
181 dpavlin 175 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 dpavlin 179 Logger.debug('before: '+edActiveToolbar[name]);
188     edActiveToolbar[name] = 1;
189     Logger.debug('after: '+edActiveToolbar[name]);
190 dpavlin 176 return false;
191 dpavlin 175 }
192    
193     // insertion code
194    
195     function edInsertTag(myField, i) {
196    
197 dpavlin 188 var pos = myField.scrollTop;
198     Logger.debug('edInsertTag "'+i+'", scrollTop='+pos);
199    
200 dpavlin 175 //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 dpavlin 188
267     if (pos && myField.scrollTop != pos) myField.scrollTop = pos;
268 dpavlin 175 }
269    
270     function edInsertContent(myField, myValue) {
271 dpavlin 188
272     var pos = myField.scrollTop;
273    
274     Logger.debug('edInsertContent "'+myValue+'", scrollTop='+pos);
275 dpavlin 175 //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 dpavlin 188
297     if (pos && myField.scrollTop != pos) myField.scrollTop = pos;
298 dpavlin 175 }
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 dpavlin 192 // 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 dpavlin 175 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 dpavlin 192 edCanvas = null;
351 dpavlin 175 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 dpavlin 179 edActiveToolbar[name] = null;
361 dpavlin 175 }

  ViewVC Help
Powered by ViewVC 1.1.26