Ik ben bezig met een eigen UBB editor. Als iemand aan het typen is, zorgt CTRL-B voor een [b]-tag en nogmaals CTRL-B voor een [/b] tag. Als je eerst een selectie maakt en dan CTRL-B drukt, wordt de selectie ingesloten door [b] en [/b], net als hier op GoT.
Wat ik nu probeer is, om de B-knop uit de toolbar te laten oplichten als de cursor op een woord staat dat omgeven is door B-tags:
Er is hier al eerder een topic over geweest, maar daar kwam weinig respons op. Het idee werd geopperd om naar de source van widgEditor te kijken, omdat deze WYSIWYG de relevante toolbar buttons doet oplichten als de cursor op een woord staat. De relevante delen van deze code zijn (voor IE):
Ik snap het principe hiervan, maar omdat ik hier te maken heb met een textarea met UBB codes (ipv een iframe met HTML codes), gaat dit verhaal niet op. Ik kan weliswaar op dezelfde wijze een selectie in de textarea detecteren, maar omdat UBB codes niet aan de DOM hangen, hebben zijn er geen parentNodes aan te geven. En ook al zou ik HTML tags ipv UBB tags in de textarea typen, dan nog gaat het parentNode verhaal imho niet op, omdat deze tags niet in de DOM terug te vinden zijn omdat ze slechts tekst zijn in een textarea (die opzich wel in de DOM terug te vinden is).
Ik heb wel de volgende functie gevonden, die de <b> en </b> tags om een selectie weghaalt, als de selectie uit de textarea als door bold-tags omvat is en er wederom op de bold knop gedrukt wordt:
Wellicht dat hier een deel van de oplossing zit, maar als dat zo is vraag ik bij deze hulp om dit te implementeren voor als er meerdere tags om een selectie staan, zoals bold en underline tags. Kan iemand mij uitleggen hoe ik de UBB (of HTML, wat dat betreft) tags om een selectie in een tekstarea kan detecteren, gelijk aan hoe widgEditor parentNodes detecteert?
Wat ik nu probeer is, om de B-knop uit de toolbar te laten oplichten als de cursor op een woord staat dat omgeven is door B-tags:
code:
1
2
3
4
5
6
7
8
9
| +---+ +---+ +---+ | B*| | U | | I | +---+ +---+ +---+ +-----------------------------------------------+ | Dit is [b]ve|t[/b] en dit is | | [b][u]vet en cursief[/u][/b] | | | | | +-----------------------------------------------+ |
Er is hier al eerder een topic over geweest, maar daar kwam weinig respons op. Het idee werd geopperd om naar de source van widgEditor te kijken, omdat deze WYSIWYG de relevante toolbar buttons doet oplichten als de cursor op een woord staat. De relevante delen van deze code zijn (voor IE):
JavaScript:
1
2
3
4
5
6
7
8
9
| theSelection = theWidgEditor.theIframe.contentWindow.document.selection; theRange = theSelection.createRange(); theParentNode = theRange.parentElement(); switch (theParentNode.nodeName.toLowerCase()) { case "a": theWidgEditor.theToolbar.setState("Link", "on"); break; } |
Ik snap het principe hiervan, maar omdat ik hier te maken heb met een textarea met UBB codes (ipv een iframe met HTML codes), gaat dit verhaal niet op. Ik kan weliswaar op dezelfde wijze een selectie in de textarea detecteren, maar omdat UBB codes niet aan de DOM hangen, hebben zijn er geen parentNodes aan te geven. En ook al zou ik HTML tags ipv UBB tags in de textarea typen, dan nog gaat het parentNode verhaal imho niet op, omdat deze tags niet in de DOM terug te vinden zijn omdat ze slechts tekst zijn in een textarea (die opzich wel in de DOM terug te vinden is).
Ik heb wel de volgende functie gevonden, die de <b> en </b> tags om een selectie weghaalt, als de selectie uit de textarea als door bold-tags omvat is en er wederom op de bold knop gedrukt wordt:
JavaScript:
1
2
3
4
5
6
7
8
| function selection_replace(type, text) { switch (type) { case 'bold': var re = new RegExp('^<b[^>]*>(.*?)</b>$'); text = (!re.test(text)) ? '<b>'+ text +'</b>' : text.replace(re, '$1'); break; } } |
Wellicht dat hier een deel van de oplossing zit, maar als dat zo is vraag ik bij deze hulp om dit te implementeren voor als er meerdere tags om een selectie staan, zoals bold en underline tags. Kan iemand mij uitleggen hoe ik de UBB (of HTML, wat dat betreft) tags om een selectie in een tekstarea kan detecteren, gelijk aan hoe widgEditor parentNodes detecteert?