[js] coś a'la bbCode

0

Witam :)
1. mam skrypt:

function wstaw(formularz, znacznik)
{
 if(formularz.value == znacznik)
 {
   formularz.value = znacznik+'*';
   formularz.form.tresc.value += '['+znacznik+']';
 }
 else
 {
   formularz.value = znacznik;
   formularz.form.tresc.value += '[/'+znacznik+']';
 }
 formularz.form.tresc.focus();
}

i wywołanie:

<input type="button" value="b" onclick="javascript:wstaw(this,'b')">
// this w przypadku, gdy inpu znajduje sie w formularzu

Funkcja 'wstaw' słuzy do wstawiania znaczników bbCode do pola w formularzu. Tak jak na tym forum (skrypt zaczerpnięty z phpBB). Tylko jest jedno "ale": znaczniki nie wstawia w miejsce, w którym aktualnie jest kursor - tylko na sam koniec :-/ Wiecie co zrobić, aby wstawiało znaczniki koło kursora??
2. I druga sprawa, związana z poprzednim skryptem. W tamtym przykładzie wstawiało mi do pola textowego o nazwie 'tresc'. A ja chcę, aby ten skrypt był uniwersalny i aby nazwę można było ustawić z wywołania. Próbowałem tak (analogiczny fragment):

function wstaw(formularz, znacznik, nazwa)
// ...
 formularz.form.nazwa.focus();

I wywołanie oczywiscie zawierać będzie jeden parametr więcej (ostatnim będzie nazwa pola). Wiem, że takie coś nie zadziała, dlatego próbowałem jakoś tak:

// ...
 formularz.form.+nazwa+.focus();

...ale też nie pomogło [sciana] Heh, macie na to jakiś pomysł?
Z góry thx za odp. ;)

0

Wiem ze programowanie nie polega na kopiowaniu cudzych rozwiazan, ale jeżeli zależy Ci na osiagnieciu efektu a nie samodzielnym dojściu do rozwiazania, to polecam prosty aczkolwiek bardzo funkcjonalny skrypt piechnata

http://piechnat.iglu.cz/download/textarea_test.html

jest dużo lepszy od kobyły z phpBB którą cieżko dostosowac do własnej strony

0

Kiedyś było mi coś podobnego potrzebne. Najlepiej zrobili to chyba na Wikipedii, więc poniżej wklejam kod, który obsługuje wstawianie znaczników do textarea:

var clientPC = navigator.userAgent.toLowerCase();
var is_gecko = ((clientPC.indexOf('gecko')!=-1) && (clientPC.indexOf('spoofer')==-1)
                && (clientPC.indexOf('khtml') == -1) && (clientPC.indexOf('netscape/7.0')==-1));

function insertTags(txtarea, tagOpen, tagClose, sampleText) {
	
	// IE
	if(document.selection  && !is_gecko) {
		var theSelection = document.selection.createRange().text;
		if(!theSelection) { theSelection=sampleText;}
		txtarea.focus();
		if(theSelection.charAt(theSelection.length - 1) == " "){
                        // exclude ending space char, if any
			theSelection = theSelection.substring(0, theSelection.length - 1);
			document.selection.createRange().text = tagOpen + theSelection + tagClose + " ";
		} else {
			document.selection.createRange().text = tagOpen + theSelection + tagClose;
		}
	
	// Mozilla
	} else if(txtarea.selectionStart || txtarea.selectionStart == '0') {
		var replaced = false;
		var startPos = txtarea.selectionStart;
		var endPos = txtarea.selectionEnd;
		if(endPos-startPos) replaced=true;
		var scrollTop=txtarea.scrollTop;
		var myText = (txtarea.value).substring(startPos, endPos);
		if(!myText) { myText=sampleText;}
		if(myText.charAt(myText.length - 1) == " "){
                        // exclude ending space char, if any
			subst = tagOpen + myText.substring(0, (myText.length - 1)) + tagClose + " ";
		} else {
			subst = tagOpen + myText + tagClose;
		}
		txtarea.value = txtarea.value.substring(0, startPos) + subst +
		  txtarea.value.substring(endPos, txtarea.value.length);
		txtarea.focus();
		//set new selection
		if(replaced){
			var cPos=startPos+(tagOpen.length+myText.length+tagClose.length);
			txtarea.selectionStart=cPos;
			txtarea.selectionEnd=cPos;
		}else{
			txtarea.selectionStart=startPos+tagOpen.length;   
			txtarea.selectionEnd=startPos+tagOpen.length+myText.length;
		}	
		txtarea.scrollTop=scrollTop;
	}
	// reposition cursor if possible
	if (txtarea.createTextRange) txtarea.caretPos = document.selection.createRange().duplicate();
}

Przykładowe użycie:

<input type="button" value="b" onclick="insertTags(formularz.nazwa, '<b>','</b>','tekst pogrubiony');" />

Pod Gecko/Opera/IE działa znakomicie. :)

0

Dzięki Krzemin :) Też właśnie byłem zainteresowany skryptem z wikipedii, dlatego sobie go ściagnąłem, ale był tak długi i nie miałem czasu go modyfikować... A tu nagle mam podany skrypcik jak na tacy ;)

EDIT:
...szkoda, że skrypt nie działa poprawnie pod Operą (8.50) i IE (6.0) (a podobno działa) [rotfl] Za to pod FF 1.5 działa znakomicie...

1 użytkowników online, w tym zalogowanych: 0, gości: 1