/[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 179 - (hide annotations)
Sun Nov 27 15:14:54 2005 UTC (18 years, 5 months ago) by dpavlin
File MIME type: application/javascript
File size: 7679 byte(s)
 r11194@llin:  dpavlin | 2005-11-27 16:17:24 +0100
 0.05: all requests in controller editor/ now send correct
 Content-type: text/html; charset=utf-8,
 simplified conversion to on-disk encoding when saving files,
 added editor toolbar to CSS tab, fixed edKill

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     //IE support
198     if (document.selection) {
199     myField.focus();
200     sel = document.selection.createRange();
201     if (sel.text.length > 0) {
202     sel.text = edButtons[i].tagStart + sel.text + edButtons[i].tagEnd;
203     }
204     else {
205     if (!edCheckOpenTags(i) || edButtons[i].tagEnd == '') {
206     sel.text = edButtons[i].tagStart;
207     edAddTag(i);
208     }
209     else {
210     sel.text = edButtons[i].tagEnd;
211     edRemoveTag(i);
212     }
213     }
214     myField.focus();
215     }
216     //MOZILLA/NETSCAPE support
217     else if (myField.selectionStart || myField.selectionStart == '0') {
218     var startPos = myField.selectionStart;
219     var endPos = myField.selectionEnd;
220     var cursorPos = endPos;
221     var scrollTop = myField.scrollTop;
222    
223     if (startPos != endPos) {
224     myField.value = myField.value.substring(0, startPos)
225     + edButtons[i].tagStart
226     + myField.value.substring(startPos, endPos)
227     + edButtons[i].tagEnd
228     + myField.value.substring(endPos, myField.value.length);
229     cursorPos += edButtons[i].tagStart.length + edButtons[i].tagEnd.length;
230     }
231     else {
232     if (!edCheckOpenTags(i) || edButtons[i].tagEnd == '') {
233     myField.value = myField.value.substring(0, startPos)
234     + edButtons[i].tagStart
235     + myField.value.substring(endPos, myField.value.length);
236     edAddTag(i);
237     cursorPos = startPos + edButtons[i].tagStart.length;
238     }
239     else {
240     myField.value = myField.value.substring(0, startPos)
241     + edButtons[i].tagEnd
242     + myField.value.substring(endPos, myField.value.length);
243     edRemoveTag(i);
244     cursorPos = startPos + edButtons[i].tagEnd.length;
245     }
246     }
247     myField.focus();
248     myField.selectionStart = cursorPos;
249     myField.selectionEnd = cursorPos;
250     myField.scrollTop = scrollTop;
251     }
252     else {
253     if (!edCheckOpenTags(i) || edButtons[i].tagEnd == '') {
254     myField.value += edButtons[i].tagStart;
255     edAddTag(i);
256     }
257     else {
258     myField.value += edButtons[i].tagEnd;
259     edRemoveTag(i);
260     }
261     myField.focus();
262     }
263     }
264    
265     function edInsertContent(myField, myValue) {
266     //IE support
267     if (document.selection) {
268     myField.focus();
269     sel = document.selection.createRange();
270     sel.text = myValue;
271     myField.focus();
272     }
273     //MOZILLA/NETSCAPE support
274     else if (myField.selectionStart || myField.selectionStart == '0') {
275     var startPos = myField.selectionStart;
276     var endPos = myField.selectionEnd;
277     myField.value = myField.value.substring(0, startPos)
278     + myValue
279     + myField.value.substring(endPos, myField.value.length);
280     myField.focus();
281     myField.selectionStart = startPos + myValue.length;
282     myField.selectionEnd = startPos + myValue.length;
283     } else {
284     myField.value += myValue;
285     myField.focus();
286     }
287     }
288    
289     function edInsertLink(myField, i, defaultValue) {
290     if (!defaultValue) {
291     defaultValue = 'http://';
292     }
293     if (!edCheckOpenTags(i)) {
294     var URL = prompt('Enter the URL' ,defaultValue);
295     if (URL) {
296     edButtons[i].tagStart = '<a href="' + URL + '">';
297     edInsertTag(myField, i);
298     }
299     }
300     else {
301     edInsertTag(myField, i);
302     }
303     }
304    
305     /* additional methods on textarea */
306    
307     /*
308     onkeydown="return edTab(event);"
309     */
310     function edTab(event) {
311     var e = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
312     if (e == 9) {
313     edInsertContent(edCanvas, '\t');
314     return false;
315     }
316     return true;
317     }
318    
319     /*
320     onfocus="return edFocus('template_content');"
321     */
322     function edFocus( name ) {
323     Logger.info('edFocus '+name);
324     edCanvas = $( name );
325     if (! edCanvas) Logger.error("can't find "+name);
326     edToolbar( name );
327     return false;
328     }
329    
330     /*
331     onblur="return edBlur();"
332     */
333     function edBlur() {
334     Logger.info('edBlur');
335     edChanvas = null;
336     return false;
337     }
338    
339     /*
340     call this function for cleanup of toolbar and other
341     temporary data.
342     */
343     function edKill( name ) {
344     Logger.info('edKill '+name);
345 dpavlin 179 edActiveToolbar[name] = null;
346 dpavlin 175 }

  ViewVC Help
Powered by ViewVC 1.1.26