Verzeichnisstruktur phpBB-3.2.0


Veröffentlicht
06.01.2017

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.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

      (Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

editor.js

Zuletzt modifiziert: 09.10.2024, 12:52 - Dateigröße: 11.14 KiB


 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  }
 115   
 116  /**
 117  * Insert text at position
 118  */
 119  function insert_text(text, spaces, popup) {
 120      var textarea;
 121   
 122      if (!popup) {
 123          textarea = document.forms[form_name].elements[text_name];
 124      } else {
 125          textarea = opener.document.forms[form_name].elements[text_name];
 126      }
 127   
 128      if (spaces) {
 129          text = ' ' + text + ' ';
 130      }
 131   
 132      // Since IE9, IE also has textarea.selectionStart, but it still needs to be treated the old way.
 133      // Therefore we simply add a !is_ie here until IE fixes the text-selection completely.
 134      if (!isNaN(textarea.selectionStart) && !is_ie) {
 135          var sel_start = textarea.selectionStart;
 136          var sel_end = textarea.selectionEnd;
 137   
 138          mozWrap(textarea, text, '');
 139          textarea.selectionStart = sel_start + text.length;
 140          textarea.selectionEnd = sel_end + text.length;
 141      } else if (textarea.createTextRange && textarea.caretPos) {
 142          if (baseHeight !== textarea.caretPos.boundingHeight) {
 143              textarea.focus();
 144              storeCaret(textarea);
 145          }
 146   
 147          var caret_pos = textarea.caretPos;
 148          caret_pos.text = caret_pos.text.charAt(caret_pos.text.length - 1) === ' ' ? caret_pos.text + text + ' ' : caret_pos.text + text;
 149      } else {
 150          textarea.value = textarea.value + text;
 151      }
 152   
 153      if (!popup) {
 154          textarea.focus();
 155      }
 156  }
 157   
 158  /**
 159  * Add inline attachment at position
 160  */
 161  function attachInline(index, filename) {
 162      insert_text('[attachment=' + index + ']' + filename + '[/attachment]');
 163      document.forms[form_name].elements[text_name].focus();
 164  }
 165   
 166  /**
 167  * Add quote text to message
 168  */
 169  function addquote(post_id, username, l_wrote, attributes) {
 170      var message_name = 'message_' + post_id;
 171      var theSelection = '';
 172      var divarea = false;
 173      var i;
 174   
 175      if (l_wrote === undefined) {
 176          // Backwards compatibility
 177          l_wrote = 'wrote';
 178      }
 179      if (typeof attributes !== 'object') {
 180          attributes = {};
 181      }
 182   
 183      if (document.all) {
 184          divarea = document.all[message_name];
 185      } else {
 186          divarea = document.getElementById(message_name);
 187      }
 188   
 189      // Get text selection - not only the post content :(
 190      // IE9 must use the document.selection method but has the *.getSelection so we just force no IE
 191      if (window.getSelection && !is_ie && !window.opera) {
 192          theSelection = window.getSelection().toString();
 193      } else if (document.getSelection && !is_ie) {
 194          theSelection = document.getSelection();
 195      } else if (document.selection) {
 196          theSelection = document.selection.createRange().text;
 197      }
 198   
 199      if (theSelection === '' || typeof theSelection === 'undefined' || theSelection === null) {
 200          if (divarea.innerHTML) {
 201              theSelection = divarea.innerHTML.replace(/<br>/ig, '\n');
 202              theSelection = theSelection.replace(/<br\/>/ig, '\n');
 203              theSelection = theSelection.replace(/&lt\;/ig, '<');
 204              theSelection = theSelection.replace(/&gt\;/ig, '>');
 205              theSelection = theSelection.replace(/&amp\;/ig, '&');
 206              theSelection = theSelection.replace(/&nbsp\;/ig, ' ');
 207          } else if (document.all) {
 208              theSelection = divarea.innerText;
 209          } else if (divarea.textContent) {
 210              theSelection = divarea.textContent;
 211          } else if (divarea.firstChild.nodeValue) {
 212              theSelection = divarea.firstChild.nodeValue;
 213          }
 214      }
 215   
 216      if (theSelection) {
 217          if (bbcodeEnabled) {
 218              attributes.author = username;
 219              insert_text(generateQuote(theSelection, attributes));
 220          } else {
 221              insert_text(username + ' ' + l_wrote + ':' + '\n');
 222              var lines = split_lines(theSelection);
 223              for (i = 0; i < lines.length; i++) {
 224                  insert_text('> ' + lines[i] + '\n');
 225              }
 226          }
 227      }
 228  }
 229   
 230  /**
 231  * Create a quote block for given text
 232  *
 233  * Possible attributes:
 234  *   - author:  author's name (usually a username)
 235  *   - post_id: post_id of the post being quoted
 236  *   - user_id: user_id of the user being quoted
 237  *   - time:    timestamp of the original message
 238  *
 239  * @param  {!string} text       Quote's text
 240  * @param  {!Object} attributes Quote's attributes
 241  * @return {!string}            Quote block to be used in a new post/text
 242  */
 243  function generateQuote(text, attributes) {
 244      text = text.replace(/^\s+/, '').replace(/\s+$/, '');
 245      var quote = '[quote';
 246      if (attributes.author) {
 247          // Add the author as the BBCode's default attribute
 248          quote += '=' + formatAttributeValue(attributes.author);
 249          delete attributes.author;
 250      }
 251      for (var name in attributes) {
 252          if (attributes.hasOwnProperty(name)) {
 253              var value = attributes[name];
 254              quote += ' ' + name + '=' + formatAttributeValue(value.toString());
 255          }
 256      }
 257      quote += ']';
 258      var newline = ((quote + text + '[/quote]').length > 80 || text.indexOf('\n') > -1) ? '\n' : '';
 259      quote += newline + text + newline + '[/quote]';
 260   
 261      return quote;
 262  }
 263   
 264  /**
 265  * Format given string to be used as an attribute value
 266  *
 267  * Will return the string as-is if it can be used in a BBCode without quotes. Otherwise,
 268  * it will use either single- or double- quotes depending on whichever requires less escaping.
 269  * Quotes and backslashes are escaped with backslashes where necessary
 270  *
 271  * @param  {!string} str Original string
 272  * @return {!string}     Same string if possible, escaped string within quotes otherwise
 273  */
 274  function formatAttributeValue(str) {
 275      if (!/[ "'\\\]]/.test(str)) {
 276          // Return as-is if it contains none of: space, ' " \ or ]
 277          return str;
 278      }
 279      var singleQuoted = "'" + str.replace(/[\\']/g, '\\$&') + "'",
 280          doubleQuoted = '"' + str.replace(/[\\"]/g, '\\$&') + '"';
 281   
 282      return (singleQuoted.length < doubleQuoted.length) ? singleQuoted : doubleQuoted;
 283  }
 284   
 285  function split_lines(text) {
 286      var lines = text.split('\n');
 287      var splitLines = new Array();
 288      var j = 0;
 289      var i;
 290   
 291      for(i = 0; i < lines.length; i++) {
 292          if (lines[i].length <= 80) {
 293              splitLines[j] = lines[i];
 294              j++;
 295          } else {
 296              var line = lines[i];
 297              var splitAt;
 298              do {
 299                  splitAt = line.indexOf(' ', 80);
 300   
 301                  if (splitAt === -1) {
 302                      splitLines[j] = line;
 303                      j++;
 304                  } else {
 305                      splitLines[j] = line.substring(0, splitAt);
 306                      line = line.substring(splitAt);
 307                      j++;
 308                  }
 309              }
 310              while(splitAt !== -1);
 311          }
 312      }
 313      return splitLines;
 314  }
 315   
 316  /**
 317  * From http://www.massless.org/mozedit/
 318  */
 319  function mozWrap(txtarea, open, close) {
 320      var selLength = (typeof(txtarea.textLength) === 'undefined') ? txtarea.value.length : txtarea.textLength;
 321      var selStart = txtarea.selectionStart;
 322      var selEnd = txtarea.selectionEnd;
 323      var scrollTop = txtarea.scrollTop;
 324   
 325      var s1 = (txtarea.value).substring(0,selStart);
 326      var s2 = (txtarea.value).substring(selStart, selEnd);
 327      var s3 = (txtarea.value).substring(selEnd, selLength);
 328   
 329      txtarea.value = s1 + open + s2 + close + s3;
 330      txtarea.selectionStart = selStart + open.length;
 331      txtarea.selectionEnd = selEnd + open.length;
 332      txtarea.focus();
 333      txtarea.scrollTop = scrollTop;
 334   
 335      return;
 336  }
 337   
 338  /**
 339  * Insert at Caret position. Code from
 340  * http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130
 341  */
 342  function storeCaret(textEl) {
 343      if (textEl.createTextRange && document.selection) {
 344          textEl.caretPos = document.selection.createRange().duplicate();
 345      }
 346  }
 347   
 348  /**
 349  * Caret Position object
 350  */
 351  function caretPosition() {
 352      var start = null;
 353      var end = null;
 354  }
 355   
 356  /**
 357  * Get the caret position in an textarea
 358  */
 359  function getCaretPosition(txtarea) {
 360      var caretPos = new caretPosition();
 361   
 362      // simple Gecko/Opera way
 363      if (txtarea.selectionStart || txtarea.selectionStart === 0) {
 364          caretPos.start = txtarea.selectionStart;
 365          caretPos.end = txtarea.selectionEnd;
 366      }
 367      // dirty and slow IE way
 368      else if (document.selection) {
 369          // get current selection
 370          var range = document.selection.createRange();
 371   
 372          // a new selection of the whole textarea
 373          var range_all = document.body.createTextRange();
 374          range_all.moveToElementText(txtarea);
 375   
 376          // calculate selection start point by moving beginning of range_all to beginning of range
 377          var sel_start;
 378          for (sel_start = 0; range_all.compareEndPoints('StartToStart', range) < 0; sel_start++) {
 379              range_all.moveStart('character', 1);
 380          }
 381   
 382          txtarea.sel_start = sel_start;
 383   
 384          // we ignore the end value for IE, this is already dirty enough and we don't need it
 385          caretPos.start = txtarea.sel_start;
 386          caretPos.end = txtarea.sel_start;
 387      }
 388   
 389      return caretPos;
 390  }
 391   
 392  /**
 393  * Allow to use tab character when typing code
 394  * Keep indentation of last line of code when typing code
 395  */
 396  (function($) {
 397      $(document).ready(function() {
 398          var doc, textarea;
 399   
 400          // find textarea, make sure browser supports necessary functions
 401          if (document.forms[form_name]) {
 402              doc = document;
 403          } else {
 404              doc = opener.document;
 405          }
 406   
 407          if (!doc.forms[form_name]) {
 408              return;
 409          }
 410   
 411          textarea = doc.forms[form_name].elements[text_name];
 412   
 413          phpbb.applyCodeEditor(textarea);
 414          if ($('#attach-panel').length) {
 415              phpbb.showDragNDrop(textarea);
 416          }
 417   
 418          $('textarea').on('keydown', function (e) {
 419              if (e.which === 13 && (e.metaKey || e.ctrlKey)) {
 420                  $(this).closest('form').submit();
 421              }
 422          });
 423      });
 424  })(jQuery);
 425   
 426