Zur Navigation

BBCode einfügen

1 Micha

Hallo Jörg,
wenn ich BBCode einfüge, dann passiert das immer am Ende des Textes, nicht da, wo der Cursor steht. Das ist in vielen Foren so und immer nervt es mich. Hier springt die Anzeige noch dazu wieder nach ganz oben.
Geht das zu ändern?

Micha

26.05.2005 21:23

2 Jörg Kruse

Hallo Micha,

danke für das Feedback. Ich werd mal schauen, ob ich das ändern kann. Falls du oder jemand anders ein Forum kennt, in dem das Einfügen des BBCode beispielhaft korrekt umgesetzt wird, bitte mitteilen :)

Jörg

26.05.2005 22:13 | geändert: 26.05.2005 22:20

3 Micha

Also ich kenne keins, bewege mich allerdings auch lieber in Newsgroups als in Foren...

Micha

27.05.2005 09:50

4 Jörg Kruse

Ich hatte da bislang auch nicht drauf geachtet, da ich die Tags immer manuell eingebe - ich werd mir diesbezüglich mal die verschiedenen Foren anschauen, die ich kenne

27.05.2005 10:54

5 C)-(iLL@

Hi Jörg,

Da Du bisher sowieso JS verwendest (wie sollte es auch anders gehen) um BBCode einzufügen, kannst Du es so machen, damit der Code an der Cursorposition eingefügt wird:

...
<head>
<script language="JavaScript" type="text/javascript">
function cur_ins(field, text) {
  if (document.selection) {
    field.focus();
    selected = document.selection.createRange();
    selected.text = text;
  } else {
    if (field.selectionStart || field.selectionStart == '0') {
      field.value = field.value.substring(0, field.selectionStart) + text + field.value.substring(field.selectionEnd, field.value.length);
    } else {
      field.value.concat(text);
    } 
  }
} //cur_ins
</script>
</head>
<body>
<form action="neu/post.php" method="post">
<p><textarea id="text" name="text" cols="48" rows="10"></textarea></p>
<p style="float:right">&nbsp;</p>
<p>
<input type="button" class="button klein" value="fett" onclick="cur_ins(this.form.text, '');" name="fett" /> 
...
</p>
</form>
...

Gruß,
Rudy

28.05.2005 10:27 | geändert: 28.05.2005 10:31

6 C)-(iLL@

Wenn Du grad dabei bist... *g*

wie wäre es mit einem Button, um ein Posting, falls nicht beantwortet, zu löschen? Der 'Beitrag ändern'-Button sollte vielleicht ebenfalls ein Wölkchen werden, wenn das Posting bereits beantwortet wurde. Es macht IMHO wenig Sinn, die Änderung eines bereits beantworteten Beitrags zuzulassen. Bleibt aber Dir überlassen, nur ein Vorschlag.

28.05.2005 10:37

7 Jörg Kruse

Danke für den Code - ich werd das mal gleich testen und einbauen :)

wie wäre es mit einem Button, um ein Posting, falls nicht beantwortet, zu löschen?

ja, werd ich mal schauen - ich hatte mich anfangs der Einfachheit halber mit dem Editbutton beschieden, mit dem man den Inhalt ja auch rauslöschen kann :)

Es macht IMHO wenig Sinn, die Änderung eines bereits beantworteten Beitrags zuzulassen.

ich kann mir schon Fälle vorstellen, in denen man z.B. das Anfangspost eines längeren Threads nacheditiert, wenn der darin enthaltene Code (für das weitere Verständnis) unvollständig ist; damit aber ersichtlich ist, dass Postings nachträglich geändert wurden, wird jeweils unterhalb das Datum der letzten Änderung angegeben

28.05.2005 13:33

8 Jörg Kruse

Es scheint jetzt zu funktionieren?
Noch ein Test
Test
Test

28.05.2005 14:12 | geändert: 28.05.2005 14:14

9 C)-(iLL@

Hi Jörg,

da ich erst neulich wieder so eine Funktion brauchte ging ich von dieser aus und habe sie verbessert. Der markierte Text wird nun von den Tags umschlossen und nicht ersetzt, der Cursor nach den Endtag gesetzt bzw. für Tags wie url lässt sich ein Offset angeben, sodass der Cursor gleich danach an der gewünschten Position im Tag steht. Dachte mir, Du kannst das brauchen.

Javascript:
function cur_ins(field, startTag, endTag, offset) {
  field.focus();
  if (document.getSelection) { //FF, NS
    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 (text.length > 0) {
      if (offset != 0) {
        field.selectionStart = selStart + startTag.length + text.length - offset;
	      } else {
        field.selectionStart = selStart + startTag.length + text.length + endTag.length;
	      }
	    } else {
       field.selectionStart = selStart + startTag.length;
	    }
    field.selectionEnd = field.selectionStart;
  } else 
  if (document.selection) { //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 + text.length - offset);
	        } else {
          marker.move('character', startTag.length + text.length + endTag.length + offset);
        }
      } else {
        marker.move('character', -(endTag.length));
      }
      marker.select();
   }
}

Html-Snippet:
<input type="button" class="button klein" value="fett" onclick="cur_ins(this.form.text, '[ b]', '[/ b]', 0);" name="fett" /> 
<input type="button" class="button klein" value="Link" onclick="cur_ins(this.form.text, '[url=', '][/url]', -1);" name="link" /> 

Beim HTML-Snippet konnte ich natürlich den richtigen b-Tag nicht verwenden und habe ihn gespaced. Der Offset tritt dann in Kraft, wenn ein Text markiert wurde und ein bb-Tag eingefügt wird, welcher aus mehreren Teilen besteht (bei Dir nur url, ich brauchte das für einen color-tag).

Nachtrag: hab nochmal die neuere Version der Funktion draufgepackt, da ich für das CM noch ein bisschen dran rumgetipselt habe.

30.06.2005 00:47 | geändert: 02.07.2005 16:27

10 Jörg Kruse

DAnke dir für das verbesserte Script - sobald ich dazu komme, werd ich es testen und hier einbauen :)

30.06.2005 14:42