Verzeichnisstruktur phpBB-3.0.0
- Veröffentlicht
- 12.12.2007
So funktioniert es
|
Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück |
Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
editor.js
001 /**
002 * bbCode control by subBlue design [ www.subBlue.com ]
003 * Includes unixsafe colour palette selector by SHS`
004 */
005
006 // Startup variables
007 var imageTag = false;
008 var theSelection = false;
009
010 // Check for Browser & Platform for PC & IE specific bits
011 // More details from: http://www.mozilla.org/docs/web-developer/sniffer/browser_type.html
012 var clientPC = navigator.userAgent.toLowerCase(); // Get client info
013 var clientVer = parseInt(navigator.appVersion); // Get browser version
014
015 var is_ie = ((clientPC.indexOf('msie') != -1) && (clientPC.indexOf('opera') == -1));
016 var is_win = ((clientPC.indexOf('win') != -1) || (clientPC.indexOf('16bit') != -1));
017
018 var baseHeight;
019 window.onload = initInsertions;
020
021 /**
022 * Shows the help messages in the helpline window
023 */
024 function helpline(help)
025 {
026 document.forms[form_name].helpbox.value = help_line[help];
027 }
028
029 /**
030 * Fix a bug involving the TextRange object. From
031 * http://www.frostjedi.com/terra/scripts/demo/caretBug.html
032 */
033 function initInsertions()
034 {
035 var doc;
036
037 if (document.forms[form_name])
038 {
039 doc = document;
040 }
041 else
042 {
043 doc = opener.document;
044 }
045
046 var textarea = doc.forms[form_name].elements[text_name];
047 if (is_ie && typeof(baseHeight) != 'number')
048 {
049 textarea.focus();
050 baseHeight = doc.selection.createRange().duplicate().boundingHeight;
051
052 if (!document.forms[form_name])
053 {
054 document.body.focus();
055 }
056 }
057 }
058
059 /**
060 * bbstyle
061 */
062 function bbstyle(bbnumber)
063 {
064 if (bbnumber != -1)
065 {
066 bbfontstyle(bbtags[bbnumber], bbtags[bbnumber+1]);
067 }
068 else
069 {
070 insert_text('[*]');
071 document.forms[form_name].elements[text_name].focus();
072 }
073 }
074
075 /**
076 * Apply bbcodes
077 */
078 function bbfontstyle(bbopen, bbclose)
079 {
080 theSelection = false;
081
082 var textarea = document.forms[form_name].elements[text_name];
083
084 textarea.focus();
085
086 if ((clientVer >= 4) && is_ie && is_win)
087 {
088 // Get text selection
089 theSelection = document.selection.createRange().text;
090
091 if (theSelection)
092 {
093 // Add tags around selection
094 document.selection.createRange().text = bbopen + theSelection + bbclose;
095 document.forms[form_name].elements[text_name].focus();
096 theSelection = '';
097 return;
098 }
099 }
100 else if (document.forms[form_name].elements[text_name].selectionEnd && (document.forms[form_name].elements[text_name].selectionEnd - document.forms[form_name].elements[text_name].selectionStart > 0))
101 {
102 mozWrap(document.forms[form_name].elements[text_name], bbopen, bbclose);
103 document.forms[form_name].elements[text_name].focus();
104 theSelection = '';
105 return;
106 }
107
108 //The new position for the cursor after adding the bbcode
109 var caret_pos = getCaretPosition(textarea).start;
110 var new_pos = caret_pos + bbopen.length;
111
112 // Open tag
113 insert_text(bbopen + bbclose);
114
115 // Center the cursor when we don't have a selection
116 // Gecko and proper browsers
117 if (!isNaN(textarea.selectionStart))
118 {
119 textarea.selectionStart = new_pos;
120 textarea.selectionEnd = new_pos;
121 }
122 // IE
123 else if (document.selection)
124 {
125 var range = textarea.createTextRange();
126 range.move("character", new_pos);
127 range.select();
128 storeCaret(textarea);
129 }
130
131 textarea.focus();
132 return;
133 }
134
135 /**
136 * Insert text at position
137 */
138 function insert_text(text, spaces, popup)
139 {
140 var textarea;
141
142 if (!popup)
143 {
144 textarea = document.forms[form_name].elements[text_name];
145 }
146 else
147 {
148 textarea = opener.document.forms[form_name].elements[text_name];
149 }
150 if (spaces)
151 {
152 text = ' ' + text + ' ';
153 }
154
155 if (!isNaN(textarea.selectionStart))
156 {
157 var sel_start = textarea.selectionStart;
158 var sel_end = textarea.selectionEnd;
159
160 mozWrap(textarea, text, '')
161 textarea.selectionStart = sel_start + text.length;
162 textarea.selectionEnd = sel_end + text.length;
163 }
164
165 else if (textarea.createTextRange && textarea.caretPos)
166 {
167 if (baseHeight != textarea.caretPos.boundingHeight)
168 {
169 textarea.focus();
170 storeCaret(textarea);
171 }
172 var caret_pos = textarea.caretPos;
173 caret_pos.text = caret_pos.text.charAt(caret_pos.text.length - 1) == ' ' ? caret_pos.text + text + ' ' : caret_pos.text + text;
174
175 }
176 else
177 {
178 textarea.value = textarea.value + text;
179 }
180 if (!popup)
181 {
182 textarea.focus();
183 }
184
185 }
186
187 /**
188 * Add inline attachment at position
189 */
190 function attach_inline(index, filename)
191 {
192 insert_text('[attachment=' + index + ']' + filename + '[/attachment]');
193 document.forms[form_name].elements[text_name].focus();
194 }
195
196 /**
197 * Add quote text to message
198 */
199 function addquote(post_id, username)
200 {
201 var message_name = 'message_' + post_id;
202 var theSelection = '';
203 var divarea = false;
204
205 if (document.all)
206 {
207 divarea = document.all[message_name];
208 }
209 else
210 {
211 divarea = document.getElementById(message_name);
212 }
213
214 // Get text selection - not only the post content :(
215 if (window.getSelection)
216 {
217 theSelection = window.getSelection().toString();
218 }
219 else if (document.getSelection)
220 {
221 theSelection = document.getSelection();
222 }
223 else if (document.selection)
224 {
225 theSelection = document.selection.createRange().text;
226 }
227
228 if (theSelection == '' || typeof theSelection == 'undefined' || theSelection == null)
229 {
230 if (divarea.innerHTML)
231 {
232 theSelection = divarea.innerHTML.replace(/<br>/ig, '\n');
233 theSelection = theSelection.replace(/<br\/>/ig, '\n');
234 theSelection = theSelection.replace(/<\;/ig, '<');
235 theSelection = theSelection.replace(/>\;/ig, '>');
236 theSelection = theSelection.replace(/&\;/ig, '&');
237 }
238 else if (document.all)
239 {
240 theSelection = divarea.innerText;
241 }
242 else if (divarea.textContent)
243 {
244 theSelection = divarea.textContent;
245 }
246 else if (divarea.firstChild.nodeValue)
247 {
248 theSelection = divarea.firstChild.nodeValue;
249 }
250 }
251
252 if (theSelection)
253 {
254 insert_text('[quote="' + username + '"]' + theSelection + '[/quote]');
255 }
256
257 return;
258 }
259
260 /**
261 * From http://www.massless.org/mozedit/
262 */
263 function mozWrap(txtarea, open, close)
264 {
265 var selLength = txtarea.textLength;
266 var selStart = txtarea.selectionStart;
267 var selEnd = txtarea.selectionEnd;
268 var scrollTop = txtarea.scrollTop;
269
270 if (selEnd == 1 || selEnd == 2)
271 {
272 selEnd = selLength;
273 }
274
275 var s1 = (txtarea.value).substring(0,selStart);
276 var s2 = (txtarea.value).substring(selStart, selEnd)
277 var s3 = (txtarea.value).substring(selEnd, selLength);
278
279 txtarea.value = s1 + open + s2 + close + s3;
280 txtarea.selectionStart = selEnd + open.length + close.length;
281 txtarea.selectionEnd = txtarea.selectionStart;
282 txtarea.focus();
283 txtarea.scrollTop = scrollTop;
284
285 return;
286 }
287
288 /**
289 * Insert at Caret position. Code from
290 * http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130
291 */
292 function storeCaret(textEl)
293 {
294 if (textEl.createTextRange)
295 {
296 textEl.caretPos = document.selection.createRange().duplicate();
297 }
298 }
299
300 /**
301 * Color pallette
302 */
303 function colorPalette(dir, width, height)
304 {
305 var r = 0, g = 0, b = 0;
306 var numberList = new Array(6);
307 var color = '';
308
309 numberList[0] = '00';
310 numberList[1] = '40';
311 numberList[2] = '80';
312 numberList[3] = 'BF';
313 numberList[4] = 'FF';
314
315 document.writeln('<table cellspacing="1" cellpadding="0" border="0">');
316
317 for (r = 0; r < 5; r++)
318 {
319 if (dir == 'h')
320 {
321 document.writeln('<tr>');
322 }
323
324 for (g = 0; g < 5; g++)
325 {
326 if (dir == 'v')
327 {
328 document.writeln('<tr>');
329 }
330
331 for (b = 0; b < 5; b++)
332 {
333 color = String(numberList[r]) + String(numberList[g]) + String(numberList[b]);
334 document.write('<td bgcolor="#' + color + '">');
335 document.write('<a href="#" onclick="bbfontstyle(\'[color=#' + color + ']\', \'[/color]\'); return false;" onmouseover="helpline(\'s\');" onmouseout="helpline(\'tip\');"><img src="images/spacer.gif" width="' + width + '" height="' + height + '" alt="#' + color + '" title="#' + color + '" /></a>');
336 document.writeln('</td>');
337 }
338
339 if (dir == 'v')
340 {
341 document.writeln('</tr>');
342 }
343 }
344
345 if (dir == 'h')
346 {
347 document.writeln('</tr>');
348 }
349 }
350 document.writeln('</table>');
351 }
352
353
354 /**
355 * Caret Position object
356 */
357 function caretPosition()
358 {
359 var start = null;
360 var end = null;
361 }
362
363
364 /**
365 * Get the caret position in an textarea
366 */
367 function getCaretPosition(txtarea)
368 {
369 var caretPos = new caretPosition();
370
371 // simple Gecko/Opera way
372 if(txtarea.selectionStart || txtarea.selectionStart == 0)
373 {
374 caretPos.start = txtarea.selectionStart;
375 caretPos.end = txtarea.selectionEnd;
376 }
377 // dirty and slow IE way
378 else if(document.selection)
379 {
380 // get current selection
381 var range = document.selection.createRange();
382
383 // a new selection of the whole textarea
384 var range_all = document.body.createTextRange();
385 range_all.moveToElementText(txtarea);
386
387 // calculate selection start point by moving beginning of range_all to beginning of range
388 var sel_start;
389 for (sel_start = 0; range_all.compareEndPoints('StartToStart', range) < 0; sel_start++)
390 {
391 range_all.moveStart('character', 1);
392 }
393
394 txtarea.sel_start = sel_start;
395
396 // we ignore the end value for IE, this is already dirty enough and we don't need it
397 caretPos.start = txtarea.sel_start;
398 caretPos.end = txtarea.sel_start;
399 }
400
401 return caretPos;
402 }