Zur Navigation

BBCode einfügen [4]

31 Rudy

I'll try.

Edit: Gut, ich hab mal Windows gebootet, weils schneller als dieses Wine-Gefrickel ist. Safari ist schnell! Respekt. Die Buttons funktionieren tatsächlich nicht, ich schau mal, woran es liegt.

22.01.2008 20:32 | geändert: 22.01.2008 20:44

32 Rudy

So funktionierts bei mir auch in Safari:

function cur_ins(field, startTag, endTag, offset) {
  field.focus();
  if (window.getSelection && document.createRange) { // FF, Op., Ko., Safari
    var scrollTop, scrollLeft;
    if (field.type == 'textarea' && typeof field.scrollTop != 'undefined') {
      scrollTop = field.scrollTop;
      scrollLeft = field.scrollLeft;
    }
    selStart = field.selectionStart;
    selEnd = field.selectionEnd;
    text = field.value.substring(selStart, selEnd);
    field.value = field.value.substring(0, selStart) + startTag + text + endTag + field.value.substring(selEnd);
    if (typeof scrollTop != 'undefined') {
      field.scrollTop = scrollTop;
      field.scrollLeft = scrollLeft;
    }
    if (text.length > 0) {
      if (offset != 0) {
        field.selectionEnd = selStart + startTag.length - offset;
      } else {
        field.selectionEnd = selStart + startTag.length + text.length + endTag.length;
      }
    } else {
      field.selectionEnd = selStart + startTag.length;
    }
    field.selectionStart = field.selectionEnd;
  } else if (document.selection && document.selection.createRange) { // IE
    marker = document.selection.createRange();
    text = marker.text;
    marker.text = startTag + text + endTag;
    marker = document.selection.createRange();
    if (text.length > 0) {
      if (offset != 0) {
        marker.move('character', startTag.length - offset);
      } else {
        marker.move('character', startTag.length + text.length + endTag.length + offset);
      }
    } else {
      marker.move('character', -(endTag.length));
    }
    marker.select();
  } 
}

22.01.2008 21:12

33 Jörg Kruse

Danke fürs Testen :)

Leider funktioniert's dann nicht mehr im Konqueror ;)

Wäre vielleicht so etwas möglich (?):

if ((window.getSelection && document.createRange) || document.getSelection) { // FF, Op., Ko., Safari

Mit dem IE, Firefox, Opera und Konqueror funktioniert's dann

Ich habe zur Zeit kein Windows auf dem Rechner, vielleicht kannst du beizeiten nochmal testen? ist nicht eilig, nur wenn du eh grad wieder dorthin bootest ;)

PS: ich werd das so auc hgleich mal ins andere Forum setzen, dann können die Safari Userinnen auch testen..

22.01.2008 21:46 | geändert: 22.01.2008 21:48

34 Rudy

Konqueror ... grmbl. Hätte ich nur eine Maschine, auf der ich alle in einem Rutsch testen könnte :/ Dein Vorschlag klingt aber gut, ich sehe darin keine Probleme. Der Safari hat nur mit document.getSelection ein Problem, dass Konqueror auf window.getSelection nicht anspringt war ja klar ^^. Beim nächsten Mal unter Windows teste ich es, nach der Natur des Problems sieht es aber verheißungsvoll aus.

22.01.2008 21:58

35 Jörg Kruse

Ich bekam inzwischen die Rückmeldung, dass es so auch unter dem Mac funktioniert :)

24.01.2008 19:35

36 Rudy

Gute Neuigkeit, dann kann ich Redmond ja weiter ruhen lassen.

24.01.2008 20:34

37 Stiff (Gast)

Sorry das ich das ganze nochmal hochhole

aber mich würde sowas für ein kleines CMS interessieren

wäre am ganzen code interessiert
und vielleicht auch noch wie man das ganze dann in HTML umwandelt

thx

23.06.2008 13:35

39 Rudy

Der ganze neue code:

function cur_ins(field, startTag, endTag, offset) {
  field.focus();
  if ((window.getSelection && document.createRange) || document.getSelection) { // FF, Op., Ko., Safari
    var scrollTop, scrollLeft;
    if (field.type == 'textarea' && typeof field.scrollTop != 'undefined') {
      scrollTop = field.scrollTop;
      scrollLeft = field.scrollLeft;
    }
    selStart = field.selectionStart;
    selEnd = field.selectionEnd;
    text = field.value.substring(selStart, selEnd);
    field.value = field.value.substring(0, selStart) + startTag + text + endTag + field.value.substring(selEnd);
    if (typeof scrollTop != 'undefined') {
      field.scrollTop = scrollTop;
      field.scrollLeft = scrollLeft;
    }
    if (text.length > 0) {
      if (offset != 0) {
        field.selectionEnd = selStart + startTag.length - offset;
      } else {
        field.selectionEnd = selStart + startTag.length + text.length + endTag.length;
      }
    } else {
      field.selectionEnd = selStart + startTag.length;
    }
    field.selectionStart = field.selectionEnd;
  } else if (document.selection && document.selection.createRange) { // IE
    marker = document.selection.createRange();
    text = marker.text;
    marker.text = startTag + text + endTag;
    marker = document.selection.createRange();
    if (text.length > 0) {
      if (offset != 0) {
        marker.move('character', startTag.length - offset);
      } else {
        marker.move('character', startTag.length + text.length + endTag.length + offset);
      }
    } else {
      marker.move('character', -(endTag.length));
    }
    marker.select();
  }
}

und vielleicht auch noch wie man das ganze dann in HTML umwandelt
ich bin immer noch für QuickerUBB... :) Vor allem weil da auch highlighting und so dabei ist. Aber natürlich ist der "reguläre" Weg weniger Code - über die Performance lässt sich streiten.

Aber für ein CMS würde ich insgesamt das ganze BBCode-Zeugs über Bord werfen und einen WYSIWYG-Editor wie TinyMCE verwenden. Ist mE viel benutzerfreundlicher...

23.06.2008 21:03 | geändert: 23.06.2008 21:10

40 Stiff (Gast)

Hey Danke

da ich doch grade am experimentieren bin
versuche ich mal selber etwas kleines auf die beine zu stellen

ich danke euch auch für die anderen vorschläge

(vllt werde ich öfter mal vorbeischneien, finde es interessant hier ;) )

24.06.2008 14:15