Seite 1 von 2

Cursor an MAUSPOS: In Mozilla

Verfasst: 04.10.2003 18:44
von thl1000
Moin,

ich verzweifle grad...

Gibt es irgendein Workaround, um Mozilla zu veranlassen, den BBCode an der Cursorposition einzufügen?

Alle Mods, die zu diesem Thema vorhanden sind, funktionieren nicht in gewünschterweise mit Mozilla bzw. Firebird.

Für gute Ideen bin ich dankbar.

Verfasst: 04.10.2003 19:05
von Warren
im ie fügt er den bbcode auch am schluss an, wenn schon text geschrieben wurde!

Verfasst: 04.10.2003 19:06
von Henne
Da gibts aber Alternativen, bei denen das behoben ist...

Verfasst: 04.10.2003 19:07
von Warren
schon?

RE...

Verfasst: 05.10.2003 00:14
von thl1000
Also, ich habe folgendes geändert (funzt im IE und im Mozilla...

1. Smilies:

Code: Alles auswählen

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) == ' ' ? caretPos.text + text + ' ' : caretPos.text + text;
		txtarea.focus();
	} 
	else if (document.getElementById && !document.all) // Mozilla
   	{
    	var selEnd = txtarea.selectionEnd;
    	var txtLen = txtarea.value.length;
    	var txtbefore = txtarea.value.substring(0,selEnd);
    	var txtafter =  txtarea.value.substring(selEnd, txtLen);
    	txtarea.value = txtbefore + text + txtafter;
   	}
	else 
	{
		txtarea.focus();
		txtarea.value  += text;
	}
}
2. Schriftfarbe und -grösse:

Code: Alles auswählen

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

	if ((clientVer >= 4) && is_ie && is_win) 
	{
		theSelection = document.selection.createRange().text;
		if (!theSelection) 
		{
			var caretPos = txtarea.caretPos;
        	caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? bbopen + bbclose + ' ' : bbopen + bbclose;
        	txtarea.focus();
			//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 if (document.getElementById && !document.all) // Mozilla
   	{
    	var selEnd = txtarea.selectionEnd;
    	var txtLen = txtarea.value.length;
    	var txtbefore = txtarea.value.substring(0,selEnd);
    	var txtafter =  txtarea.value.substring(selEnd, txtLen);
    	txtarea.value = txtbefore + bbopen + bbclose + txtafter;
   	}
	else
	{
		txtarea.value += bbopen + bbclose;
		txtarea.focus();
	}
	storeCaret(txtarea);
}
Bei diesen Code-Änderungen werden die Smilies und der BBCode für Schriftfarbe u. -grösse an der Cursor-Position eingefügt.

Nur bei der Funktion bbstyle(bbnumber) komme ich nicht weiter.
Hier bräuchte ich Hilfe...

die Lösung?

Verfasst: 05.10.2003 14:01
von thl1000
So, habe jetzt diesen Code, der allerdings beim Mozilla noch einen Bug hat:

Der Cursor springt nach jedem Einfügen eines BBCodes an das Ende des Textfeldes. Hier bräuchte ich jetzt noch Hilfe.

Code: Alles auswählen

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, '');
   	}
	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();
			//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 if (document.getElementById && !document.all) // Mozilla cursor fix
   	{
    	mozWrap(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)) + '"');
    				
    			}
    		}
    		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)) + '"');
    			
    		}
			//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]) 
		{
			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)) + '"');
            		imageTag = false;
            		
    			}
    			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)) + '"');
            		imageTag = false;
            		
    			}
    		} 
    		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)) + '"');
            	imageTag = false;
            	
    		}
    		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)) + '"');
            	imageTag = false;
            	
    		}
			//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 (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 += "*"');
				//txtarea.focus();
        		//return;
			}
   			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 += "*"');
				txtarea.focus();
				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);
}

RE...

Verfasst: 06.10.2003 18:00
von thl1000
Hat denn keiner eine Idee?

Verfasst: 06.10.2003 18:22
von SevenIsMy
http://www.c-plusplus.de/forum/posting. ... topic&f=15

kuck dir mal den quellcode an, (ich habe das gecodet) wollte das auch schon public machen, nur war mir das zu dumm die neuerung in das halbhertzig gecodet standard phpbb einzucoden

RE...

Verfasst: 06.10.2003 18:26
von thl1000
Moin,,

Dein Code fügt den BBCode am Ende des Textes ein (zumindest beim Mozilla). Aber Danke für den Tipp...

Verfasst: 06.10.2003 18:35
von SevenIsMy
scheisse das hatt doch mal funktioniert, mom ich muss mal kucken