Verzeichnisstruktur phpBB-3.1.0
- Veröffentlicht
- 27.10.2014
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 var bbcodeEnabled = true;
010
011 // Check for Browser & Platform for PC & IE specific bits
012 // More details from: http://www.mozilla.org/docs/web-developer/sniffer/browser_type.html
013 var clientPC = navigator.userAgent.toLowerCase(); // Get client info
014 var clientVer = parseInt(navigator.appVersion, 10); // Get browser version
015
016 var is_ie = ((clientPC.indexOf('msie') !== -1) && (clientPC.indexOf('opera') === -1));
017 var is_win = ((clientPC.indexOf('win') !== -1) || (clientPC.indexOf('16bit') !== -1));
018 var baseHeight;
019
020 /**
021 * Shows the help messages in the helpline window
022 */
023 function helpline(help) {
024 document.forms[form_name].helpbox.value = help_line[help];
025 }
026
027 /**
028 * Fix a bug involving the TextRange object. From
029 * http://www.frostjedi.com/terra/scripts/demo/caretBug.html
030 */
031 function initInsertions() {
032 var doc;
033
034 if (document.forms[form_name]) {
035 doc = document;
036 } else {
037 doc = opener.document;
038 }
039
040 var textarea = doc.forms[form_name].elements[text_name];
041
042 if (is_ie && typeof(baseHeight) !== 'number') {
043 textarea.focus();
044 baseHeight = doc.selection.createRange().duplicate().boundingHeight;
045
046 if (!document.forms[form_name]) {
047 document.body.focus();
048 }
049 }
050 }
051
052 /**
053 * bbstyle
054 */
055 function bbstyle(bbnumber) {
056 if (bbnumber !== -1) {
057 bbfontstyle(bbtags[bbnumber], bbtags[bbnumber+1]);
058 } else {
059 insert_text('[*]');
060 document.forms[form_name].elements[text_name].focus();
061 }
062 }
063
064 /**
065 * Apply bbcodes
066 */
067 function bbfontstyle(bbopen, bbclose) {
068 theSelection = false;
069
070 var textarea = document.forms[form_name].elements[text_name];
071
072 textarea.focus();
073
074 if ((clientVer >= 4) && is_ie && is_win) {
075 // Get text selection
076 theSelection = document.selection.createRange().text;
077
078 if (theSelection) {
079 // Add tags around selection
080 document.selection.createRange().text = bbopen + theSelection + bbclose;
081 textarea.focus();
082 theSelection = '';
083 return;
084 }
085 } else if (textarea.selectionEnd && (textarea.selectionEnd - textarea.selectionStart > 0)) {
086 mozWrap(textarea, bbopen, bbclose);
087 textarea.focus();
088 theSelection = '';
089 return;
090 }
091
092 //The new position for the cursor after adding the bbcode
093 var caret_pos = getCaretPosition(textarea).start;
094 var new_pos = caret_pos + bbopen.length;
095
096 // Open tag
097 insert_text(bbopen + bbclose);
098
099 // Center the cursor when we don't have a selection
100 // Gecko and proper browsers
101 if (!isNaN(textarea.selectionStart)) {
102 textarea.selectionStart = new_pos;
103 textarea.selectionEnd = new_pos;
104 }
105 // IE
106 else if (document.selection) {
107 var range = textarea.createTextRange();
108 range.move("character", new_pos);
109 range.select();
110 storeCaret(textarea);
111 }
112
113 textarea.focus();
114 return;
115 }
116
117 /**
118 * Insert text at position
119 */
120 function insert_text(text, spaces, popup) {
121 var textarea;
122
123 if (!popup) {
124 textarea = document.forms[form_name].elements[text_name];
125 } else {
126 textarea = opener.document.forms[form_name].elements[text_name];
127 }
128
129 if (spaces) {
130 text = ' ' + text + ' ';
131 }
132
133 // Since IE9, IE also has textarea.selectionStart, but it still needs to be treated the old way.
134 // Therefore we simply add a !is_ie here until IE fixes the text-selection completely.
135 if (!isNaN(textarea.selectionStart) && !is_ie) {
136 var sel_start = textarea.selectionStart;
137 var sel_end = textarea.selectionEnd;
138
139 mozWrap(textarea, text, '');
140 textarea.selectionStart = sel_start + text.length;
141 textarea.selectionEnd = sel_end + text.length;
142 } else if (textarea.createTextRange && textarea.caretPos) {
143 if (baseHeight !== textarea.caretPos.boundingHeight) {
144 textarea.focus();
145 storeCaret(textarea);
146 }
147
148 var caret_pos = textarea.caretPos;
149 caret_pos.text = caret_pos.text.charAt(caret_pos.text.length - 1) === ' ' ? caret_pos.text + text + ' ' : caret_pos.text + text;
150 } else {
151 textarea.value = textarea.value + text;
152 }
153
154 if (!popup) {
155 textarea.focus();
156 }
157 }
158
159 /**
160 * Add inline attachment at position
161 */
162 function attach_inline(index, filename) {
163 insert_text('[attachment=' + index + ']' + filename + '[/attachment]');
164 document.forms[form_name].elements[text_name].focus();
165 }
166
167 /**
168 * Add quote text to message
169 */
170 function addquote(post_id, username, l_wrote) {
171 var message_name = 'message_' + post_id;
172 var theSelection = '';
173 var divarea = false;
174 var i;
175
176 if (l_wrote === undefined) {
177 // Backwards compatibility
178 l_wrote = 'wrote';
179 }
180
181 if (document.all) {
182 divarea = document.all[message_name];
183 } else {
184 divarea = document.getElementById(message_name);
185 }
186
187 // Get text selection - not only the post content :(
188 // IE9 must use the document.selection method but has the *.getSelection so we just force no IE
189 if (window.getSelection && !is_ie && !window.opera) {
190 theSelection = window.getSelection().toString();
191 } else if (document.getSelection && !is_ie) {
192 theSelection = document.getSelection();
193 } else if (document.selection) {
194 theSelection = document.selection.createRange().text;
195 }
196
197 if (theSelection === '' || typeof theSelection === 'undefined' || theSelection === null) {
198 if (divarea.innerHTML) {
199 theSelection = divarea.innerHTML.replace(/<br>/ig, '\n');
200 theSelection = theSelection.replace(/<br\/>/ig, '\n');
201 theSelection = theSelection.replace(/<\;/ig, '<');
202 theSelection = theSelection.replace(/>\;/ig, '>');
203 theSelection = theSelection.replace(/&\;/ig, '&');
204 theSelection = theSelection.replace(/ \;/ig, ' ');
205 } else if (document.all) {
206 theSelection = divarea.innerText;
207 } else if (divarea.textContent) {
208 theSelection = divarea.textContent;
209 } else if (divarea.firstChild.nodeValue) {
210 theSelection = divarea.firstChild.nodeValue;
211 }
212 }
213
214 if (theSelection) {
215 if (bbcodeEnabled) {
216 insert_text('[quote="' + username + '"]' + theSelection + '[/quote]');
217 } else {
218 insert_text(username + ' ' + l_wrote + ':' + '\n');
219 var lines = split_lines(theSelection);
220 for (i = 0; i < lines.length; i++) {
221 insert_text('> ' + lines[i] + '\n');
222 }
223 }
224 }
225
226 return;
227 }
228
229 function split_lines(text) {
230 var lines = text.split('\n');
231 var splitLines = new Array();
232 var j = 0;
233 var i;
234
235 for(i = 0; i < lines.length; i++) {
236 if (lines[i].length <= 80) {
237 splitLines[j] = lines[i];
238 j++;
239 } else {
240 var line = lines[i];
241 var splitAt;
242 do {
243 splitAt = line.indexOf(' ', 80);
244
245 if (splitAt === -1) {
246 splitLines[j] = line;
247 j++;
248 } else {
249 splitLines[j] = line.substring(0, splitAt);
250 line = line.substring(splitAt);
251 j++;
252 }
253 }
254 while(splitAt !== -1);
255 }
256 }
257 return splitLines;
258 }
259
260 /**
261 * From http://www.massless.org/mozedit/
262 */
263 function mozWrap(txtarea, open, close) {
264 var selLength = (typeof(txtarea.textLength) === 'undefined') ? txtarea.value.length : txtarea.textLength;
265 var selStart = txtarea.selectionStart;
266 var selEnd = txtarea.selectionEnd;
267 var scrollTop = txtarea.scrollTop;
268
269 var s1 = (txtarea.value).substring(0,selStart);
270 var s2 = (txtarea.value).substring(selStart, selEnd);
271 var s3 = (txtarea.value).substring(selEnd, selLength);
272
273 txtarea.value = s1 + open + s2 + close + s3;
274 txtarea.selectionStart = selStart + open.length;
275 txtarea.selectionEnd = selEnd + open.length;
276 txtarea.focus();
277 txtarea.scrollTop = scrollTop;
278
279 return;
280 }
281
282 /**
283 * Insert at Caret position. Code from
284 * http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130
285 */
286 function storeCaret(textEl) {
287 if (textEl.createTextRange && document.selection) {
288 textEl.caretPos = document.selection.createRange().duplicate();
289 }
290 }
291
292 /**
293 * Caret Position object
294 */
295 function caretPosition() {
296 var start = null;
297 var end = null;
298 }
299
300 /**
301 * Get the caret position in an textarea
302 */
303 function getCaretPosition(txtarea) {
304 var caretPos = new caretPosition();
305
306 // simple Gecko/Opera way
307 if (txtarea.selectionStart || txtarea.selectionStart === 0) {
308 caretPos.start = txtarea.selectionStart;
309 caretPos.end = txtarea.selectionEnd;
310 }
311 // dirty and slow IE way
312 else if (document.selection) {
313 // get current selection
314 var range = document.selection.createRange();
315
316 // a new selection of the whole textarea
317 var range_all = document.body.createTextRange();
318 range_all.moveToElementText(txtarea);
319
320 // calculate selection start point by moving beginning of range_all to beginning of range
321 var sel_start;
322 for (sel_start = 0; range_all.compareEndPoints('StartToStart', range) < 0; sel_start++) {
323 range_all.moveStart('character', 1);
324 }
325
326 txtarea.sel_start = sel_start;
327
328 // we ignore the end value for IE, this is already dirty enough and we don't need it
329 caretPos.start = txtarea.sel_start;
330 caretPos.end = txtarea.sel_start;
331 }
332
333 return caretPos;
334 }
335
336 /**
337 * Allow to use tab character when typing code
338 * Keep indentation of last line of code when typing code
339 */
340 (function($) {
341 $(document).ready(function() {
342 var doc, textarea;
343
344 // find textarea, make sure browser supports necessary functions
345 if (document.forms[form_name]) {
346 doc = document;
347 } else {
348 doc = opener.document;
349 }
350
351 if (!doc.forms[form_name]) {
352 return;
353 }
354
355 textarea = doc.forms[form_name].elements[text_name];
356
357 phpbb.applyCodeEditor(textarea);
358 });
359 })(jQuery);
360
361