bbcodes nur im IE

  • Ich weis nicht warum der Firebird mir das nicht ausführt im IE funktioniert das einwandfrei.

    Es geht um ein Texteingabefeld wie hier nur werden die bbcodes und Smilies nicht ausgeführt im Firebird/Mozilla
    Der Mann von den ich das habe ist wohl ein eingefleischter IE-User und will das nicht ändern.

    Ich hänge das mal hier rein vielleicht weis ja jemand rat !

    Grüße von Reini
    //Lebe lang und in Frieden//

  • Moin,

    seit Mozilla 1.xx, und dementsprechend auch Firebird, funktioniert dieser Code nicht mehr:

    Code
    createRange()

    Es gibt ein Workaround, allerdings ist der für phpBB2.xx mit dem Original-BBCode:

    ','

      ','

    ','

      ','

    ','','http://,');
    imageTag = false;

    // Shows the help messages in the helpline window
    function helpline(help) {
    document.post.helpbox.value = eval(help + "_help");
    }


    // Replacement for arrayname.length property
    function getarraysize(thearray) {
    for (i = 0; i < thearray.length; i++) {
    if ((thearray == "undefined") || (thearray[i] == "") || (thearray[i] == null))
    return i;
    }
    return thearray.length;
    }

    // Replacement for arrayname.push(value) not implemented in IE until version 5.5
    // Appends element to the array
    function arraypush(thearray,value) {
    thearray[ getarraysize(thearray) ] = value;
    }

    // Replacement for arrayname.pop() not implemented in IE until version 5.5
    // Removes and returns the last element of an array
    function arraypop(thearray) {
    thearraysize = getarraysize(thearray);
    retval = thearray[thearraysize - 1];
    delete thearray[thearraysize - 1];
    return retval;
    }


    function checkForm() {

    formErrors = false;

    if (document.post.message.value.length < 2) {
    formErrors = "{L_EMPTY_MESSAGE}";
    }

    if (formErrors) {
    alert(formErrors);
    return false;
    } else {
    bbstyle(-1);
    //formObj.preview.disabled = true;
    //formObj.submit.disabled = true;
    return true;
    }
    }

    function emoticon(text) {
    var txtarea = document.post.message;
    text = ' ' + text + ' ';
    if (txtarea.createTextRange && txtarea.caretPos) {
    var caretPos = txtarea.caretPos;
    caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text + ' ' : text;
    txtarea.focus();
    } else {
    txtarea.value += text;
    txtarea.focus();
    }
    }

    function bbfontstyle(bbopen, bbclose) {
    var txtarea = document.post.message;

    if ((clientVer >= 4) && is_ie && is_win) {
    theSelection = document.selection.createRange().text;
    if (!theSelection) {
    txtarea.value += bbopen + bbclose;
    txtarea.focus();
    return;
    }
    document.selection.createRange().text = bbopen + theSelection + bbclose;
    txtarea.focus();
    return;
    }
    else if (txtarea.selectionEnd && (txtarea.selectionEnd - txtarea.selectionStart > 0))
    {
    mozWrap(txtarea, bbopen, bbclose);
    return;
    }
    else
    {
    txtarea.value += bbopen + bbclose;
    txtarea.focus();
    }
    storeCaret(txtarea);
    }


    function bbstyle(bbnumber) {
    var txtarea = document.post.message;

    donotinsert = false;
    theSelection = false;
    bblast = 0;

    if (bbnumber == -1) { // Close all open tags & default button names
    while (bbcode[0]) {
    butnumber = arraypop(bbcode) - 1;
    txtarea.value += bbtags[butnumber + 1];
    buttext = eval('document.post.addbbcode' + butnumber + '.value');
    eval('document.post.addbbcode' + butnumber + '.value ="' + buttext.substr(0,(buttext.length - 1)) + '"');
    }
    imageTag = false; // All tags are closed including image tags :D
    txtarea.focus();
    return;
    }

    if ((clientVer >= 4) && is_ie && is_win)
    {
    theSelection = document.selection.createRange().text; // Get text selection
    if (theSelection) {
    // Add tags around selection
    document.selection.createRange().text = bbtags[bbnumber] + theSelection + bbtags[bbnumber+1];
    txtarea.focus();
    theSelection = '';
    return;
    }
    }
    else if (txtarea.selectionEnd && (txtarea.selectionEnd - txtarea.selectionStart > 0))
    {
    mozWrap(txtarea, bbtags[bbnumber], bbtags[bbnumber+1]);
    return;
    }

    // Find last occurance of an open tag the same as the one just clicked
    for (i = 0; i < bbcode.length; i++) {
    if (bbcode[i] == bbnumber+1) {
    bblast = i;
    donotinsert = true;
    }
    }

    if (donotinsert) { // Close all open tags up to the one just clicked & default button names
    while (bbcode[bblast]) {
    butnumber = arraypop(bbcode) - 1;
    txtarea.value += bbtags[butnumber + 1];
    buttext = eval('document.post.addbbcode' + butnumber + '.value');
    eval('document.post.addbbcode' + butnumber + '.value ="' + buttext.substr(0,(buttext.length - 1)) + '"');
    imageTag = false;
    }
    txtarea.focus();
    return;
    } else { // Open tags

    if (imageTag && (bbnumber != 14)) { // Close image tag before adding another
    txtarea.value += bbtags[15];
    lastValue = arraypop(bbcode) - 1; // Remove the close image tag from the list
    document.post.addbbcode14.value = "Img"; // Return button back to normal state
    imageTag = false;
    }

    // Open tag
    txtarea.value += bbtags[bbnumber];
    if ((bbnumber == 14) && (imageTag == false)) imageTag = 1; // Check to stop additional tags after an unclosed image tag
    arraypush(bbcode,bbnumber+1);
    eval('document.post.addbbcode'+bbnumber+'.value += "*"');
    txtarea.focus();
    return;
    }
    storeCaret(txtarea);
    }

    // From http://www.massless.org/mozedit/
    function mozWrap(txtarea, open, close)
    {
    var selLength = txtarea.textLength;
    var selStart = txtarea.selectionStart;
    var selEnd = txtarea.selectionEnd;
    if (selEnd == 1 || selEnd == 2)
    selEnd = selLength;

    var s1 = (txtarea.value).substring(0,selStart);
    var s2 = (txtarea.value).substring(selStart, selEnd)
    var s3 = (txtarea.value).substring(selEnd, selLength);
    txtarea.value = s1 + open + s2 + close + s3;
    return;
    }

    // Insert at Claret position. Code from
    // http://www.faqts.com/knowledge_base…id/1052/fid/130
    function storeCaret(textEl) {
    if (textEl.createTextRange) textEl.caretPos = document.selection.createRange().duplicate();
    }

    //-->
    </script>
    [/code]

    Allerdings funzt auch dieser Code im Mozilla/Firebird nicht zufriedenstellend, da alle BBCodes immer nur am Ende des Eingabefeldes eingefügt werden.

    Ich habe daher den Code umgeschrieben und ausgelagert.
    Hier meine bbcode.js (muss dann in der posting.php usw. verlinkt werden):

    Code
    / Startup variablesvar imageTag = false;var theSelection = false;// Check for Browser & Platform for PC & IE specific bits// More details from: http://www.mozilla.org/docs/web-developer/sniffer/browser_type.htmlvar clientPC = navigator.userAgent.toLowerCase(); // Get client infovar clientVer = parseInt(navigator.appVersion); // Get browser versionvar is_ie = ((clientPC.indexOf("msie") != -1) && (clientPC.indexOf("opera") == -1));var is_nav  = ((clientPC.indexOf('mozilla')!=-1) && (clientPC.indexOf('spoofer')==-1)                && (clientPC.indexOf('compatible') == -1) && (clientPC.indexOf('opera')==-1)                && (clientPC.indexOf('webtv')==-1) && (clientPC.indexOf('hotjava')==-1));var is_moz = 0;var is_win   = ((clientPC.indexOf("win")!=-1) || (clientPC.indexOf("16bit") != -1));var is_mac    = (clientPC.indexOf("mac")!=-1);// Helpline messagesa_help = "Alle offenen BBCodes schließen";b_help = "Text in fett: [b]Text[/b]  (alt+b)";c_help = "Code anzeigen: [code]Code

    (alt+c)";
    //d_help = "{L_BBCODE_D_HELP}";
    //e_help = "{L_BBCODE_E_HELP}";
    f_help = "Schriftgröße: [size=x-small]Kleiner Text[/size]";
    //g_help = "{L_BBCODE_G_HELP}";
    h_help = "Quellennachweis einfügen (alt+h)";
    i_help = "Text in kursiv: [i]Text
    (alt+i)";
    j_help = "Glühender Text: [glow=Farbe]Text[/glow] Tipp: Sie können ebenfalls glow=#FF0000 benutzen";
    k_help = "Scrollender Text: [scroll]text[/scroll] (alt+k)";
    l_help = "Liste:

      Text

    (alt+l)";
    m_help = "Schattierter Text: [shadow=Farbe]Text[/shadow] Tipp: Sie können ebenfalls shadow=#FF0000 benutzen";
    n_help = "Flash: [flash width=699 height=499 loop=true] url [/flash]";
    o_help = "Geordnete Liste:

      Text

    (alt+o)";
    p_help = "Bild einfügen: [Blockierte Grafik: http://URL_des_Bildes] (alt+p)";
    q_help = "Zitat:

    Zitat

    Text

    (alt+q)";
    r_help = "Zeile: [row]text[/row] (alt+r)";
    s_help = "Schriftfarbe: Text Tip: Du kannst ebenfalls color=#FF0000 benutzen";
    t_help = "Tabelle:

    (alt+t)";
    u_help = "Unterstrichener Text: Text (alt+u)";
    v_help = "Cutposition einfügen (alt+v)";
    w_help = "URL einfügen: http://URL oder URL Text (alt+w)";
    x_help = "Ausrichtung: [align=left | center | right]text[/align] (alt+x)";
    y_help = "Listenpunkt: [*] (alt+y)";
    z_help = "Spalte: [col]text[/col] (alt+z)";

    // Define the bbCode tags
    bbcode = new Array();
    bbtags = new Array('','','','','','','

    Zitat

    ','

    ','

    Code
    ','

    ','

      ','

    ','

      ','

    ','','http://,','[scroll]','[/scroll]','[flash]','[/flash]','

    ','[row]','[/row]','[col]','[/col]','[*]','[*]','[align]','[/align]','[glow]','[/glow]','[shadow]','[/shadow]');
    imageTag = false;

    // Shows the help messages in the helpline window
    function helpline(help)
    {
    document.post.helpbox.value = eval(help + "_help");
    }


    // Replacement for arrayname.length property
    function getarraysize(thearray)
    {
    for (i = 0; i < thearray.length; i++)
    {
    if ((thearray[i] == "undefined") || (thearray[i] == "") || (thearray[i] == null))
    {
    return i;
    }
    }

    return thearray.length;
    }

    // Replacement for arrayname.push(value) not implemented in IE until version 5.5
    // Appends element to the array
    function arraypush(thearray,value)
    {
    thearray[ getarraysize(thearray) ] = value;
    }

    // Replacement for arrayname.pop() not implemented in IE until version 5.5
    // Removes and returns the last element of an array
    function arraypop(thearray)
    {
    thearraysize = getarraysize(thearray);
    retval = thearray[thearraysize - 1];
    delete thearray[thearraysize - 1];
    return retval;
    }


    function checkForm()
    {

    formErrors = false;

    if (document.post.message.value.length < 2)
    {
    formErrors = "{L_EMPTY_MESSAGE}";
    }

    if (formErrors)
    {
    alert(formErrors);
    return false;
    }
    else
    {
    bbstyle(-1);
    //formObj.preview.disabled = true;
    //formObj.submit.disabled = true;
    return true;
    }
    }

    function emoticon(text)
    {
    var txtarea = document.post.message;
    text = ' ' + text + ' ';

    if (is_ie)
    {
    if (txtarea.createTextRange && txtarea.caretPos)
    {
    var caretPos = txtarea.caretPos;
    caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? caretPos.text + text + ' ' : caretPos.text + text;
    txtarea.focus();
    }
    else
    {
    txtarea.focus();
    txtarea.value += text;
    }
    }
    else if (document.getElementById && !document.all) // Mozilla cursor fix
    {
    mozWrap(txtarea, text, '');
    return;
    }
    else // Other browsers
    {
    txtarea.focus();
    txtarea.value += text;
    }
    }

    function bbfontstyle(bbopen, bbclose)
    {
    var txtarea = document.post.message;

    if ((clientVer >= 4) && is_ie && is_win)
    {
    theSelection = document.selection.createRange().text;
    if (!theSelection)
    {
    // IE Cursor Fix
    var caretPos = txtarea.caretPos;
    caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? bbopen + bbclose + ' ' : bbopen + bbclose;
    txtarea.focus();
    return;
    }
    document.selection.createRange().text = bbopen + theSelection + bbclose;
    txtarea.focus();
    return;
    }
    else if (txtarea.selectionEnd && (txtarea.selectionEnd - txtarea.selectionStart > 0))
    {
    mozWrap(txtarea, bbopen, bbclose);
    return;
    }
    else if (document.getElementById && !document.all) // Mozilla cursor fix
    {
    mozWrap_1(txtarea, bbopen, bbclose);
    return;
    }
    else // Other browsers
    {
    txtarea.value += bbopen + bbclose;
    txtarea.focus();
    }
    storeCaret(txtarea);
    }


    function bbstyle(bbnumber)
    {
    var txtarea = document.post.message;

    txtarea.focus();
    donotinsert = false;
    theSelection = false;
    bblast = 0;

    if (bbnumber == -1)
    {
    // Close all open tags & default button names
    while (bbcode[0])
    {
    if(is_ie) // IE cursor fix
    {
    if (txtarea.createTextRange && txtarea.caretPos)
    {
    var caretPos = txtarea.caretPos;
    butnumber = arraypop(bbcode) - 1;
    caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? bbtags[butnumber + 1] + ' ' : bbtags[butnumber + 1];
    buttext = eval('document.post.addbbcode' + butnumber + '.value');
    eval('document.post.addbbcode' + butnumber + '.value ="' + buttext.substr(0,(buttext.length - 1)) + '"');

    }
    else
    {
    butnumber = arraypop(bbcode) - 1;
    txtarea.value += bbtags[butnumber + 1];
    buttext = eval('document.post.addbbcode' + butnumber + '.value');
    eval('document.post.addbbcode' + butnumber + '.value ="' + buttext.substr(0,(buttext.length - 1)) + '"');
    txtarea.focus();
    }
    }
    else if (document.getElementById && !document.all) // Mozilla cursor fix
    {
    butnumber = arraypop(bbcode) - 1;
    mozWrap(txtarea, bbtags[butnumber + 1], '');
    buttext = eval('document.post.addbbcode' + butnumber + '.value');
    eval('document.post.addbbcode' + butnumber + '.value ="' + buttext.substr(0,(buttext.length - 1)) + '"');
    }
    else // Other browsers
    {
    butnumber = arraypop(bbcode) - 1;
    txtarea.value += bbtags[butnumber + 1];
    buttext = eval('document.post.addbbcode' + butnumber + '.value');
    eval('document.post.addbbcode' + butnumber + '.value ="' + buttext.substr(0,(buttext.length - 1)) + '"');
    txtarea.focus();
    }
    }
    imageTag = false; // All tags are closed including image tags :D
    return;
    }

    if ((clientVer >= 4) && is_ie && is_win)
    {
    theSelection = document.selection.createRange().text; // Get text selection
    if (theSelection)
    {
    // Add tags around selection
    document.selection.createRange().text = bbtags[bbnumber] + theSelection + bbtags[bbnumber+1];
    txtarea.focus();
    theSelection = '';
    return;
    }
    }
    else if (txtarea.selectionEnd && (txtarea.selectionEnd - txtarea.selectionStart > 0))
    {
    mozWrap(txtarea, bbtags[bbnumber], bbtags[bbnumber+1]);
    return;
    }

    // Find last occurance of an open tag the same as the one just clicked
    for (i = 0; i < bbcode.length; i++) {
    if (bbcode[i] == bbnumber+1) {
    bblast = i;
    donotinsert = true;
    }
    }

    if (donotinsert)
    {
    // Close all open tags up to the one just clicked & default button names
    while (bbcode[bblast])
    {
    if (is_ie) // IE cursor fix
    {
    if (txtarea.createTextRange && txtarea.caretPos)
    {
    var caretPos = txtarea.caretPos;
    butnumber = arraypop(bbcode) - 1;
    caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? bbtags[butnumber + 1] + ' ' : bbtags[butnumber + 1];
    buttext = eval('document.post.addbbcode' + butnumber + '.value');
    eval('document.post.addbbcode' + butnumber + '.value ="' + buttext.substr(0,(buttext.length - 1)) + '"');
    txtarea.focus();
    }
    else
    {
    butnumber = arraypop(bbcode) - 1;
    txtarea.value += bbtags[butnumber + 1];
    buttext = eval('document.post.addbbcode' + butnumber + '.value');
    eval('document.post.addbbcode' + butnumber + '.value ="' + buttext.substr(0,(buttext.length - 1)) + '"');
    txtarea.focus();
    }
    }
    else if (document.getElementById && !document.all) // Mozilla cursor fix
    {
    butnumber = arraypop(bbcode) - 1;
    mozWrap(txtarea, bbtags[butnumber + 1], '');
    buttext = eval('document.post.addbbcode' + butnumber + '.value');
    eval('document.post.addbbcode' + butnumber + '.value ="' + buttext.substr(0,(buttext.length - 1)) + '"');
    }
    else // Other browsers
    {
    butnumber = arraypop(bbcode) - 1;
    txtarea.value += bbtags[butnumber + 1];
    buttext = eval('document.post.addbbcode' + butnumber + '.value');
    eval('document.post.addbbcode' + butnumber + '.value ="' + buttext.substr(0,(buttext.length - 1)) + '"');
    txtarea.focus();
    }
    }
    imageTag = false;
    return;
    }
    else
    {
    // Open tags
    if (is_ie) // IE cursor fix
    {
    if (imageTag && (bbnumber != 14))
    {
    // Close image tag before adding another
    var caretPos = txtarea.caretPos;
    caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? bbtags[15] + ' ' : bbtags[15];
    lastValue = arraypop(bbcode) - 1; // Remove the close image tag from the list
    document.post.addbbcode14.value = "Img"; // Return button back to normal state
    imageTag = false;
    }

    // Open tag
    if (txtarea.createTextRange && document.post.message.caretPos)
    {
    var caretPos = txtarea.caretPos;
    caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? bbtags[bbnumber] + ' ' : bbtags[bbnumber];
    if ((bbnumber == 14) && (imageTag == false)) imageTag = 1; // Check to stop additional tags after an unclosed image tag
    arraypush(bbcode,bbnumber+1);
    eval('document.post.addbbcode'+bbnumber+'.value += "*"');
    txtarea.focus();
    return;
    }
    else
    {
    txtarea.value += bbtags[bbnumber];
    if ((bbnumber == 14) && (imageTag == false)) imageTag = 1; // Check to stop additional tags after an unclosed image tag
    arraypush(bbcode,bbnumber+1);
    eval('document.post.addbbcode'+bbnumber+'.value += "*"');
    txtarea.focus();
    return;
    }
    }
    else if (document.getElementById && !document.all) // Mozilla cursor fix
    {
    // Open tags
    if (imageTag && (bbnumber != 14))
    {
    // Close image tag before adding another
    mozWrap(txtarea, bbtags[15], bbtags[bbnumber]);
    lastValue = arraypop(bbcode) - 1; // Remove the close image tag from the list
    document.post.addbbcode14.value = "Img"; // Return button back to normal state
    imageTag = false;
    arraypush(bbcode,bbnumber+1);
    eval('document.post.addbbcode'+bbnumber+'.value += "*"');
    }
    else
    {
    // Open tag
    mozWrap(txtarea, bbtags[bbnumber], '');
    if ((bbnumber == 14) && (imageTag == false)) imageTag = 1; // Check to stop additional tags after an unclosed image tag
    arraypush(bbcode,bbnumber+1);
    eval('document.post.addbbcode'+bbnumber+'.value += "*"');
    return;
    }
    }
    else // Other browsers
    {
    if (imageTag && (bbnumber != 14))
    {
    // Close image tag before adding another
    txtarea.value += bbtags[15];
    lastValue = arraypop(bbcode) - 1; // Remove the close image tag from the list
    document.post.addbbcode14.value = "Img"; // Return button back to normal state
    imageTag = false;
    }
    else
    {
    // Open tag
    txtarea.value += bbtags[bbnumber];
    if ((bbnumber == 14) && (imageTag == false)) imageTag = 1; // Check to stop additional tags after an unclosed image tag
    arraypush(bbcode,bbnumber+1);
    eval('document.post.addbbcode'+bbnumber+'.value += "*"');
    txtarea.focus();
    return;
    }
    }
    }
    storeCaret(txtarea);
    }

    function setbutton(text)
    {
    var txtarea = document.post.message;
    text = '' + text + ' ';

    if (is_ie)
    {
    if (txtarea.createTextRange && txtarea.caretPos)
    {
    var caretPos = txtarea.caretPos;
    caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? caretPos.text + text + ' ' : caretPos.text + text;
    txtarea.focus();
    }
    else
    {
    txtarea.focus();
    txtarea.value += text;
    }
    }
    else if (document.getElementById && !document.all) // Mozilla cursor fix
    {
    mozWrap_1(txtarea, '', text);
    return;
    }
    else // Other browsers
    {
    txtarea.focus();
    txtarea.value += text;
    }
    }

    // From http://www.massless.org/mozedit/
    function mozWrap(txtarea, open, close)
    {
    var selLength = txtarea.textLength;
    var selStart = txtarea.selectionStart;
    var selEnd = txtarea.selectionEnd;
    if (selEnd == 1 || selEnd == 2)
    selEnd = selLength;

    var s1 = (txtarea.value).substring(0,selStart);
    var s2 = (txtarea.value).substring(selStart, selEnd)
    var s3 = (txtarea.value).substring(selEnd, selLength);
    txtarea.value = s1 + open + s2 + close + s3;
    txtarea.blur();
    return;
    }
    [/code]
    Du musst natürlich die Help-Messages anpassen, da ich einige BBCCodes mehr als üblich eingebaut habe...

    Ansehen kannst Du Dir das bei den WinTipps 2001.

    M.f.G.

    thl1000

  • meine güte da hätte ich auch erstmal dran denken können ! :shock:

    Dank dir erstmal :D

    Ist übrigens so ein Gästebuchserver-Script hat nichts mit meinen wbb2 zu tun
    da funktioniert das alles !

    Dank und Gruß
    Reini

    Grüße von Reini
    //Lebe lang und in Frieden//