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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 179 - (show 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 /*
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 if (edActiveToolbar[name]) return false;
167
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 for (var i = 0; i < edButtons.length; i++) {
181 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 Logger.debug('before: '+edActiveToolbar[name]);
188 edActiveToolbar[name] = 1;
189 Logger.debug('after: '+edActiveToolbar[name]);
190 return false;
191 }
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 edActiveToolbar[name] = null;
346 }

  ViewVC Help
Powered by ViewVC 1.1.26