Avatar

BB-Code LINK vs. MSG - neues Feature (German / Deutsch)

by Micha ⌂, Friday, August 24, 2012, 08:31 (4266 days ago) @ Auge

Hi,

Warum sich aber der von Milo entdeckte Bug im Bereich "more Smilies" auf die Buttons, die vorher generiert werden, auswirkt (bzw. auszuwirken scheint), ... wer weiß ...

Die Button scheinen nicht direkt ins Dokument eingesetzt zu werden. Der IE "wartet" hier wohl, bis das gesamte (oder große Teile) vom Script geladen werden?! Möglich, dass es auch ein CSS-Problem noch gibt. Ich habe derzeit keine Möglichkeit das genauer zu untersuchen, da ich keinen eigenen PC habe. Ich hatte in der genannten Funktion ein alert drin. Beim FF kam nach jedem Button ein Fenster mit der Debuggausgabe und anschließend war der Button auch da. Im IE kam nur das alert, die Button wurden (optisch) nicht generiert. Es ist daher gut möglich, das es nach wie vor im IE so aussieht wie auf dem Screenshot aber JS Fehler gibt es nun keine mehr und die Funktionen sollten grundsätzliche alle gehen.

* Als ich deinen Screenshot sah, wusste ich, dass ich das irgendwoher kenne.

Ich hatte wohl den anderen Thread übersehen oder mangels IE ignoriert. So ein Fremd-PC wirkt machmal Wunder. ;-)

PS @Milo: Wenn ich in einem Link nur die ID eines Postings angebe, sollte via JavaScript doch [msg=XXX] statt [link=XXX] generiert werden.

Nein, das ist bisher nicht so angedacht. Das Script versucht aus der URI zu ermitteln, ob es zu einem anderen Thread im Forum ein Link ist. Wenn Du also die vollständige URI eingibst, reduziert das Script diese auf den msg-Part. Aus http://mylittleforum.net/forum/index.php?id=6699 wird somit [msg]6699[/msg].

Um Dein genanntes Feature noch zu implementieren, muss BBCodeLinkButton erweitert werden. Ich würde es wie folgt machen:

function BBCodeLinkButton(el) {
 this.constructor(el);
 var link_bb_code = "link";
 var regExpURI = new RegExp(/[http|https|ftp|ftps]:\/\/[a-zA-Z0-9-.][a-zA-Z0-9-.]+(S+)?/);
 var regExpFID = new RegExp(/[?|&]id=([0-9]+)/);
 var regExpINT = new RegExp(/(^[0-9]+$)/);
 var forumURI = window.location.hostname + window.location.pathname;
 this.insertCode = function(obj) {
  if (!this.canInsert()) 
   return;
  var buttonGroup = this.getButtonGroup(); 
  var txtarea = buttonGroup.getTextArea();
  var selectionRange = txtarea.getSelection().trim();
 
  var insert_link = (regExpURI.test( selectionRange ))?window.prompt(lang["bbcode_link_url"], selectionRange):window.prompt(lang["bbcode_link_url"],"http://");
 
  if (!insert_link || insert_link == '' || insert_link == "http://") 
   return;
 
  var msgQuery = insert_link.indexOf(forumURI) > 0 ? regExpFID.exec(insert_link) : regExpINT.exec(insert_link); 
  if (insert_link.indexOf("mode=page") < 0 && insert_link.indexOf("mode=contact") < 0 && msgQuery != null) {
   link_bb_code = "msg";
   insert_link = msgQuery[1];
  }
  else
   link_bb_code = "link";
 
  if (selectionRange == '' || regExpURI.test( selectionRange )) 
   selectionRange = window.prompt(lang["bbcode_link_text"], "");
  if (selectionRange != null) {
   if(selectionRange != '')
    txtarea.insertTextRange( "["+link_bb_code+"=" + insert_link + "]" + selectionRange + "[/"+link_bb_code+"]" );
   else
    txtarea.insertTextRange( "["+link_bb_code+"]" + insert_link + "[/"+link_bb_code+"]" );
  }
    };
}

Hinzugekommen ist der Ausdruck var regExpINT = new RegExp(/(^[0-9]+$)/);, der den Inhalt der URI auf Ziffern prüft. Das Ergebnis landet in

var msgQuery = insert_link.indexOf(forumURI) > 0 ? regExpFID.exec(insert_link) : regExpINT.exec(insert_link);
 

Der Ausdruck regExpFID existierte bereits für den oben genannten Fall via vollständiger URI (wobei noch geprüft wird, ob der Link aus _dem_ Forum oder einem fremden Forum kommt).

Wenn Alex eine neue Version publiziert, kann er das Script ja mit übernehmen. ;-)

Schöne Grüße
Micha

--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences


Complete thread:

 RSS Feed of thread