Foros del Web » Programando para Internet » Javascript »

Problemas con bbcode en textarea

Estas en el tema de Problemas con bbcode en textarea en el foro de Javascript en Foros del Web. Muy buenas. Antes de nada, decir que tengo conocimientos bastantes limitados de javascript. Por eso he buscado por FDW y por Google algún script ya ...
  #1 (permalink)  
Antiguo 02/08/2007, 07:45
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 9 meses
Puntos: 2114
Pregunta Problemas con bbcode en textarea

Muy buenas.

Antes de nada, decir que tengo conocimientos bastantes limitados de javascript. Por eso he buscado por FDW y por Google algún script ya hecho para usar en un textarea de forma que sea mas fácil para el usuario usar bbcode (como lo hace FDW, pero no el editor visual, el "normal").

Entonces, encontré en este mensaje, este código (lo pongo a continuación):
Código:
function init(){
	incluidos=init.arguments;
	for(i=0;i<incluidos.length;i++){
		cuerpo=document.body.innerHTML;
		html="<table><tr><td valign=\"top\"> <img src=\"bbcode/buttons/bold.gif\" width=\"21\" height=\"20\" onclick=\"instag('b','"+incluidos[i]+"')\" onmouseover=\"this.style.border='solid 1px #000000';\" onMouseOut=\"this.style.border='solid 1px #F7F7F7';\" style=\"border:solid 1px #F7F7F7;\" title=\"Negrita\">&nbsp;<img src=\"bbcode/buttons/underline.gif\" width=\"21\" height=\"20\" onclick=\"instag('u','"+incluidos[i]+"')\" onmouseover=\"this.style.border='solid 1px #000000';\" onmouseout=\"this.style.border='solid 1px #F7F7F7';\" style=\"border:solid 1px #F7F7F7;\" title=\"Subrayado\">&nbsp;<img src=\"bbcode/buttons/italic.gif\" width=\"21\" height=\"20\" onclick=\"instag('i','"+incluidos[i]+"')\" onmouseover=\"this.style.border='solid 1px #000000';\" onmouseout=\"this.style.border='solid 1px #F7F7F7';\" style=\"border:solid 1px #F7F7F7;\" title=\"Cursiva\">&nbsp;<img src=\"bbcode/buttons/link.gif\" width=\"21\" height=\"20\" onclick=\"inslink('"+incluidos[i]+"')\" onmouseover=\"this.style.border='solid 1px #000000';\" onmouseout=\"this.style.border='solid 1px #F7F7F7';\" style=\"border:solid 1px #F7F7F7;\" title=\"Insertar enlace\">&nbsp;<img src=\"bbcode/buttons/insertimage.gif\" width=\"21\" height=\"20\" onclick=\"captura_imag('"+incluidos[i]+"')\" onmouseover=\"this.style.border='solid 1px #000000';\" onmouseout=\"this.style.border='solid 1px #F7F7F7';\" style=\"border:solid 1px #F7F7F7;\" title=\"Insertar imagen\">&nbsp;<img src=\"bbcode/buttons/smile.gif\" width=\"21\" height=\"20\" onclick=\"ventana_emot('"+incluidos[i]+"')\" onmouseover=\"this.style.border='solid 1px #000000';\" onmouseout=\"this.style.border='solid 1px #F7F7F7';\" style=\"border:solid 1px #F7F7F7;\" title=\"Insertar emoticon\">&nbsp;<img src=\"bbcode/buttons/code.gif\" width=\"21\" height=\"20\"  onclick=\"instag('code','"+incluidos[i]+"')\" onmouseover=\"this.style.border='solid 1px #000000';\" onmouseout=\"this.style.border='solid 1px #F7F7F7';\" style=\"border:solid 1px #F7F7F7;\" title=\"C&oacute;digo\">&nbsp;<img src=\"bbcode/buttons/quote.gif\" width=\"21\" height=\"20\" onclick=\"instag('quote','"+incluidos[i]+"')\" onmouseover=\"this.style.border='solid 1px #000000';\" onmouseout=\"this.style.border='solid 1px #F7F7F7';\" style=\"border:solid 1px #F7F7F7;\" title=\"Citar\">&nbsp;<img src=\"bbcode/buttons/bullist.gif\" width=\"20\" height=\"20\" onclick=\"ins_imag('•','"+incluidos[i]+"')\" onmouseover=\"this.style.border='solid 1px #000000';\" onmouseout=\"this.style.border='solid 1px #F7F7F7';\" style=\"border:solid 1px #F7F7F7;\" title=\"Vi&ntilde;eta\" /></td><td valign=\"top\"><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><img src=\"bbcode/buttons/resize_0.gif\" width=\"21\" height=\"9\"  onclick=\"quitar('"+incluidos[i]+"')\" onmouseover=\"this.style.border='solid 1px #000000';\" onmouseout=\"this.style.border='solid 1px #F7F7F7';\" style=\"border:solid 1px #F7F7F7;\" title=\"Disminuir tama&ntilde;o\"></td></tr><tr><td><img src=\"bbcode/buttons/resize_1.gif\" width=\"21\" height=\"9\" id=\"quita\"  onclick=\"agregar('"+incluidos[i]+"')\" onmouseover=\"this.style.border='solid 1px #000000';\" onmouseout=\"this.style.border='solid 1px #F7F7F7';\" style=\"border:solid 1px #F7F7F7;\" title=\"Aumentar tama&ntilde;o\"></td></tr></table></td></tr></table><textarea name=\""+incluidos[i]+"\" cols=\"45\" rows=\"5\" id=\""+incluidos[i]+"\">";
		pat="<textarea+[^>]*"+incluidos[i]+"+[^<]+"; 	
		patron =new RegExp(pat,"gi");
		coincidencias=new Array();
		coincidencias=cuerpo.match(patron);
		for(j=0;j<coincidencias.length;j++){
			result=new Array();
			result=coincidencias[j].match(/\s+id=[^>\s]+/g);
			result[0]=result[0].split('"').join(''); 
			result[0]=result[0].split('id=').join(''); 
			result[0]=result[0].split(' ').join(''); 
			if(result[0]==incluidos[i])cuerpo2=cuerpo.split(coincidencias[j]);
		}
		document.body.innerHTML=cuerpo2[0]+html+cuerpo2[1];
	}
}
function instag(tag,campo){
	var input = document.getElementById(campo);
		if(typeof document.selection != 'undefined' && document.selection) {
			var str = document.selection.createRange().text;
			input.focus();
			var sel = document.selection.createRange();
			sel.text = "[" + tag + "]" + str + "[/" +tag+ "]";
			sel.select();
			return;
		}
		else if(typeof input.selectionStart != 'undefined'){
			var start = input.selectionStart;
			var end = input.selectionEnd;
			var insText = input.value.substring(start, end);
			input.value = input.value.substr(0, start) + '['+tag+']' + insText + '[/'+tag+']'+ input.value.substr(end);
			input.focus();
			input.setSelectionRange(start+2+tag.length+insText.length+3+tag.length,start+2+tag.length+insText.length+3+tag.length);
			return;
		}
		else{
			input.value+=' ['+tag+']Reemplace este texto[/'+tag+']';
			return;
		}
}
function inslink(campo){
	var input = document.getElementById(campo);
		if(typeof document.selection != 'undefined' && document.selection) {
			var str = document.selection.createRange().text;
			input.focus();
			var my_link = prompt("Enter URL:","http://");
				if (my_link != null) {
					if(str.length==0){
						str=my_link;
					}
					var sel = document.selection.createRange();
					sel.text = "[a href=\"" + my_link + "\"]" + str + "[/a]";
					sel.select();
					}
			return;
		}else if(typeof input.selectionStart != 'undefined'){
					var start = input.selectionStart;
					var end = input.selectionEnd;
					var insText = input.value.substring(start, end);
					var my_link = prompt("Enter URL:","http://");
						if (my_link != null) {
							if(insText.length==0){
								insText=my_link;
							}
							input.value = input.value.substr(0, start) +"[a href=\"" + my_link +"\"]" + insText  + "[/a]"+ input.value.substr(end);
							input.focus();
							input.setSelectionRange(start+11+my_link.length+insText.length+4,start+11+my_link.length+insText.length+4);
						}
			return;
		}else{
			var my_link = prompt("Ingresar URL:","http://");
			var my_text = prompt("Ingresar el texto del link:","");
			input.value+=" [a href=\"" + my_link +  "\"]" + my_text + "[/a]";
			return;
		}
}
var reng=5;
function agregar(area){
	document.getElementById('quita').disabled=false;
	reng=reng+5;
	document.getElementById(area).rows=reng;
}
function quitar(area){
	reng=reng-5;
		if(reng<6){reng=5;
		}
	document.getElementById(area).rows=reng;
}
function ventana_emot(area){
	coordx=screen.width?(screen.width-300)/2:0;
	coordy=screen.height?(screen.height-150)/2:0;
	window.open("bbcode/emoticons/emoticons.html?campo="+area,"EMOTICONS","width=300,height=150,menubar=no,resizable=yes,left="+coordx+",top="+coordy);
}
function ins_imag(emot,area){
	var input = document.getElementById(area);
		if(typeof document.selection != 'undefined' && document.selection) {
			var str =document.selection.createRange().text;
			input.focus();
			var sel =document.selection.createRange();
			sel.text = str + emot;
			sel.select();
			return;
		}
		else if(typeof input.selectionStart != 'undefined'){
			var start = input.selectionStart;
			var end = input.selectionEnd;
			var insText = input.value.substring(start, end);
			input.value = input.value.substr(0, start) + insText+ emot + input.value.substr(end);
			input.focus();
			input.setSelectionRange(end+emot.length,end+emot.length);
			return;
		}
		else{
			input.value+=emot;
			return;
		}
}
function captura_imag(area){
	var my_link = prompt("Ingresar URL:","http://");
		if (my_link != null) {
			ins_imag('[img src=\"'+my_link+'\"]',area);
		}
}
Tengo dos problemas con el código, una es que por alguna razón extraña no logro que funcione en IE (aunque sé que puede funcionar en IE, eso seguro), ya que me da este error:
Linea: 5
Car.: 3
Error: El objeto no acepta esta propiedad o método
Codigo: 0
URL: ....


Este error, que he buscado por Internet, lo he intentado solucionar (en FDW, me parece que en un mensaje de Tunait, decía que pudiera ser que fueran dos funciones que se llamaran igual, en un foro inglés, no recuerdo la posibilidad que daban a este error, pero recuerdo haberlo intentado también) pero sin éxito.

Otro error, o mas bien, la forma en que funciona este código me crea un problema.
Me parece, que el código crea un textarea (no estoy seguro) y reemplaza al otro, entonces, si yo hago esto:
Código HTML:
<textarea...>Hola mundo</textarea> 
No me sale en el textarea la cadena "Hola mundo", y esto me supone un problema, por un lado porque si el mensaje tiene algún error, el usuario debe volver a escribir el mensaje y, al querer editar el mensaje, pues como no hay mensaje en el textarea, no hay nada que editar.

Los dos errores o problemas que tengo, son igual de graves, así que ahora mismo es casi mejor no usar este bbcode, pero me gustaría poder solucionarlo ya que es una gran ventaja para el usuario.

Tal vez sea demasaido complejo intentar arreglar esto y es mas sencillo usar otro código, en ese caso, si alguien sabe de alguno (que no sea visual, y tenga, aparte de negrita, itálica y subrayado, url e img) y me pudiera facilitar la URL o el código, también se lo agradecería.

Muchas gracias, un saludo y perdón por la parrafada.
  #2 (permalink)  
Antiguo 02/08/2007, 10:46
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Re: Problemas con bbcode en textarea

Hola:

Si prefieres un editor algo mejor (aunque evidentemente el de Panino es muy bueno) prueba con el de esta otra página: Editor de texto... o tal vez el autor del tema (que suele estar activo) te pueda asesorar.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 02/08/2007, 19:28
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 9 meses
Puntos: 2114
Re: Problemas con bbcode en textarea

Gracias por responder caricatos.

El editor de Panino es muy bueno si, a mi me gusta mucho. El tuyo tiene cosas que también me gustan mucho (¡lo había visto antes ya!). Como ves, me gusta todo... jaja.

Intentaré hacer una simbiosis entre los dos, y si sale algo usable lo dejo por aquí, aunque tal vez fracase en el intento.

Muchas gracias de nuevo.
  #4 (permalink)  
Antiguo 05/08/2007, 12:09
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 9 meses
Puntos: 2114
Re: Problemas con bbcode en textarea

Bueno, pues de momento hacer la simbiosis me resulta imposible... A ver que hago al final.
  #5 (permalink)  
Antiguo 05/08/2007, 12:59
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Re: Problemas con bbcode en textarea

Hola, Caricatos! hola, Bonez! Estás usando una versión vieja, por eso no te muestra el contenido. Bajate la más reciente desde este enlace:
http://www.disegnocentell.com.ar/new...los.php?id=131
Por el tema del error, fijate si no tenés en algún lado otra función llamada init. El script es perfectamente compatible con todas las versiones de Explorer (hasta funciona en el explorer 5 de mac en versión reducida y no le hice algunas mejoras que tenía en mente para que esto siguiera ocurriendo). Yo lo usé sin problemas en muchos proyectos ;)
Saludos!
  #6 (permalink)  
Antiguo 05/08/2007, 13:05
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 9 meses
Puntos: 2114
Re: Problemas con bbcode en textarea

Hola Panino.

Gracias por contestar.
Si, sé que funciona en IE (el example.php me va perfectamente), y sé que de algún error se trataba. Voy a mirar lo que me dices de si hay una función con el mismo nombre.

¡Gracias por el vínculo! ahora me lo bajo.

Ya comentaré que tal me fue.

Gracias otra vez.
  #7 (permalink)  
Antiguo 05/08/2007, 13:28
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 9 meses
Puntos: 2114
Re: Problemas con bbcode en textarea

Muy buenas de nuevo.

Acabo de probar lo que me has dicho y ya algo vamos descubriendo.

Donde uso bbcode.js, solamente llamo un único archivo .js mas aparte de ese, y no hay mas scripts. En ese archivo, no hay función alguna llamada init, pero, por si acaso, he probado a no llamarlo y pasan dos cosas.

Efectivamente ya puedo editar mensajes usando la librería, pero, IE sigue con el mismo error.

Subo el archivo tal cual, sin modificaciones.
En el HTML tengo esto:
Código HTML:
<body onload="init('respuesta')">
....
<textarea name="respuesta" id="respuesta">texto</textarea> 
Yo voy a volverme loco.
  #8 (permalink)  
Antiguo 05/08/2007, 13:36
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Re: Problemas con bbcode en textarea

Podés subirlo a algún lado donde podamos verlo?
  #9 (permalink)  
Antiguo 05/08/2007, 13:54
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 9 meses
Puntos: 2114
Re: Problemas con bbcode en textarea

Si, está publicado por aquí.
  #10 (permalink)  
Antiguo 05/08/2007, 15:30
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Re: Problemas con bbcode en textarea

Aparentemente se trata de un problema con la codificación de caracteres de tus páginas, pero no logro descubrirlo.
  #11 (permalink)  
Antiguo 05/08/2007, 15:32
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 9 meses
Puntos: 2114
Re: Problemas con bbcode en textarea

Uhm... Pudiera ser, si. Trataré a ver si veo algo, muchas gracias.
  #12 (permalink)  
Antiguo 05/08/2007, 16:04
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 9 meses
Puntos: 2114
Re: Problemas con bbcode en textarea

Cita:
Iniciado por Panino5001 Ver Mensaje
Aparentemente se trata de un problema con la codificación de caracteres de tus páginas, pero no logro descubrirlo.
Pues si que había un problema con la codificación (había un archivo guardado con la codificación en utf-8), está solventado, pero, no así el problema del bbcode.
  #13 (permalink)  
Antiguo 06/08/2007, 13:35
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Re: Problemas con bbcode en textarea

Hola, en estos días de vacaciones he terminado este código para editar texto. Aún no está lo suficientemente probado, pero las prubas que he hecho en IE 6 y 7, FF 2 y opera 9 han funcionado. Este último con algunas limitaciones. Pruebalo y ya me diras.

Esta es la primera parte, la segunda está en el siguiente post.

Código PHP:
<html>
<
head>
<
title></title>
<!
DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<
script language="JavaScript" type="text/javascript">
// Comprueba Navegador y Plataforma del pc
var clientPC navigator.userAgent.toLowerCase(); // Coge info cliente
var clientVer parseInt(navigator.appVersion); // Coge versión navegador
var is_ie = ((clientPC.indexOf("msie") != -1) && (clientPC.indexOf("opera") == -1));
var 
is_nav = ((clientPC.indexOf('mozilla')!=-1) && (clientPC.indexOf('spoofer')==-1)
                && (
clientPC.indexOf('compatible') == -1) && (clientPC.indexOf('opera')==-1)
                && (
clientPC.indexOf('webtv')==-1) && (clientPC.indexOf('hotjava')==-1));
var 
is_moz 0;
var 
is_win = ((clientPC.indexOf("win")!=-1) || (clientPC.indexOf("16bit") != -1));
var 
is_mac = (clientPC.indexOf("mac")!=-1);
var 
valor_boton = new Array('Arial','Times New Roman','Verdana','9','10','11','#ff0000','#000000','#ffffff','left','center','right');
var 
recortar_posAtras = new Array('7','7','7','7','7','7','8','8','8','8','8','8','4','4','4');
var 
num_caracteres = new Array('19','29','21','15','16','16','23','23','23','20','22','21','7','7','7','12');
var 
num_caracteresAtras = new Array('12','22','14','8','9','9','15','15','15','12','14','13','4','4','4');
var 
valor_tag = new Array('FACE','SIZE','COLOR','ALIGN','B','U','I','URL');
// Insertar vinculo
function inserta_url(boton,tag) {
var 
txtarea document.getElementById("firma");
var 
reg = new RegExp();
reg =  "(www+\.tuweb+\.com)([\/\?\._-]+\w*)";
var 
vinculo null;
vinculoprompt("Ingresa una dirección","http://");
var 
IniCursor 0
if ((clientVer >= 4) && is_ie && is_win) {
var 
theSelection document.selection.createRange().text;
 
 if (
document.selection) {
  if (!
theSelection) {
   if ((
vinculo==null) || (vinculo== "undefined") || (vinculo=="") || (vinculo==' ') || (vinculo =="http://")) {
   
txtarea.focus(); 
   var 
Sel document.selection.createRange ();
   
Sel.moveStart ('character', -txtarea.value.length);
   
iniCursor Sel.text.length//caracteres que deja atras
   
alert("No has introducido una dirección válida");
   return(
iniCursor);
   }
   else if (
vinculo.match(reg)) {
   
txtarea.focus();
   var 
Sel document.selection.createRange ();
   
document.selection.createRange().text "[" valor_tag[tag] + "=" vinculo "]" vinculo.substring(7,vinculo.length) +"[/" valor_tag[tag] + "]";
   
Sel.moveStart ('character', -txtarea.value.length);
   
iniCursor Sel.text.length//caracteres que deja atras
   
var  sumarPosparseInt(num_caracteres[boton]);
   var 
LargoVinHTTP vinculo.length;
   var 
LargoVin vinculo.length -7// Largo del vinculo sin http://
   
var Cursor iniCursor +  sumarPos LargoVinHTTP LargoVin;
   return(
Cursor);
   }
   else {
   
txtarea.focus(); 
   var 
Sel document.selection.createRange ();
   
Sel.moveStart ('character', -txtarea.value.length);
   
iniCursor Sel.text.length//caracteres que deja atras
   
alert("Solo se admiten vinculos directos que apunten hacía esta página");
   return(
iniCursor);
   }
  }
  if (
theSelection) {
   if ((
vinculo==null) || (vinculo== "undefined") || (vinculo=="") || (vinculo==' ') || (vinculo =="http://")) {
   
txtarea.focus(); 
   var 
Sel document.selection.createRange ();
   
Sel.moveStart ('character', -txtarea.value.length);
   
iniCursor Sel.text.length//caracteres que deja atras
   
alert("No has introducido una dirección válida");
   return(
iniCursor);
   }
   else if (
vinculo.match(reg)) {
   
txtarea.focus();
   var 
Sel document.selection.createRange ();
   
document.selection.createRange().text "[" valor_tag[tag] + "=" vinculo "]" theSelection +"[/" valor_tag[tag] + "]";
   
Sel.moveStart ('character', -txtarea.value.length);
   
iniCursor Sel.text.length//caracteres que deja atras
   
var  sumarPosparseInt(num_caracteres[boton]);
   var 
LargoVinHTTP vinculo.length;
   var 
LargoSeleccion theSelection.length;
   var 
Cursor iniCursor +  sumarPos LargoVinHTTP LargoSeleccion;
   return(
Cursor);
   }
   else {
   
txtarea.focus(); 
   var 
Sel document.selection.createRange ();
   
Sel.moveStart ('character', -txtarea.value.length);
   
iniCursor Sel.text.length//caracteres que deja atras
   
alert("Solo se admiten vinculos directos que apunten hacía esta página");
   return(
iniCursor);
   }
  }
 }
}
else if (
txtarea.selectionEnd && (txtarea.selectionEnd txtarea.selectionStart 0))
{
 var 
selLargo txtarea.textLength;
 var 
selEmpz txtarea.selectionStart;
 var 
selFin txtarea.selectionEnd;
 var 
s1 = (txtarea.value).substring(0,selEmpz);
 var 
s2 = (txtarea.value).substring(selEmpzselFin);
 var 
s3 = (txtarea.value).substring(selFinselLargo);
 var 
iniText s1.length;
 var 
textSel s2.length;
 
 if ((
vinculo==null) || (vinculo== "undefined") || (vinculo=="") || (vinculo==' ') || (vinculo =="http://")) {
 var 
Cursor iniText textSel;
 
alert("No has introducido una dirección válida");
 return(
Cursor);
 }
 else if (
vinculo.match(reg)) {
 var 
vinLength vinculo.length;
 var 
sumarPosparseInt(num_caracteres[boton]);
 
txtarea.value =  s1 "[" valor_tag[tag] + "=" +vinculo"]" +s2 "[/" +valor_tag[tag] + "]" s3;
 var 
Cursor iniText textSel vinLength sumarPos;
 return(
Cursor);
 }
 else {
 var 
Cursor iniText;
 
alert("Solo se admiten vinculos directos que apunten hacía esta página");
 return(
Cursor);
 } 
}
else
{
 if (
txtarea.selectionStart || txtarea.selectionStart == '0') {
 var 
selLargo txtarea.textLength;
 var 
selEmpz txtarea.selectionStart;
 var 
selFin txtarea.selectionEnd;
 var 
s1 = (txtarea.value).substring(0,selEmpz);
 var 
s2 = (txtarea.value).substring(selEmpzselFin);
 var 
s3 = (txtarea.value).substring(selFinselLargo);
 var 
iniText s1.length;
  if ((
vinculo==null) || (vinculo== "undefined") || (vinculo=="") || (vinculo==' ') || (vinculo =="http://")) {
  var 
Cursor iniText;
  
alert("No has introducido una dirección válida");
  return(
Cursor);
  }
  else if (
vinculo.match(reg)) {
  var 
vinLength vinculo.length;
  var 
sumarPosparseInt(num_caracteres[boton]);
  
txtarea.value =  s1 "[" valor_tag[tag] + "=" +vinculo"]" vinculo.substring(7,vinculo.length) + "[/" +valor_tag[tag] + "]" s3;
  var 
Cursor iniText vinLength vinLength sumarPos 7;
  return(
Cursor); 
  }
  else {
  var 
Cursor iniText;
  
alert("Solo se admiten vinculos directos que apunten hacía esta página");
  return(
Cursor);
  }
 }
 }
 
almznaCursor(txtarea);
}
 
 
//Lista Ordenada
function listaord () {
var 
txtarea document.getElementById("firma");
var 
opcion= new Array();
var 
i,j
var suma 0
if ((clientVer >= 4) && is_ie && is_win) {
var 
theSelection document.selection.createRange().text;
 
 if (
document.selection) {
  if (!
theSelection) {
  
txtarea.focus();
  var 
Sel document.selection.createRange ();
  var 
PosSel1 Sel.moveStart ('character', -txtarea.value.length); 
  var 
SelLargo txtarea.value.length;
  
// La linea siguiente es necesaria por que -- PosSel1 -- da un valor negativo
  
var ValorPositivo PosSel1 SelLargo 1
  
var SelEmpz SelLargo ValorPositivo
  
var PosSel2 Sel.moveStart ('character', -txtarea.value.length); 
  var 
SelFin SelLargo PosSel2
  
var s1 = (txtarea.value).substring(0,SelEmpz);
  var 
s2 = (txtarea.value).substring(SelEmpz,SelFin);
  
//var s3 = (txtarea.value).substring(selFin, selLargo);
  
var abre "[list=1]\n";
  var 
cierra "[/LIST=]";
  
txtarea.value =  s1 +  abre cierra s2;
  for (
i=0i<=opcion.lengthi++) {
  
opcion[i]=prompt("Ingresa los elementos de la lista de uno en uno","");
  if ((
opcion[i]== null) || (opcion[i]== "undefined") || (opcion[i] == "") || (opcion[i] ==' ')) {
  var 
Cursor =  s1.length abre.length suma cierra.length;
  return(
Cursor); 
  }
  
txtarea.value =  s1 +  abre;
  for (
j=0j<=ij++) {
  
txtarea.value +=  "[*]" opcion[j] + "\n"
  }
  
txtarea.value += cierra s2;
  
suma += (opcion[i].length+4);
  }
 }
 
  if (
theSelection) {
  
txtarea.focus();
  var 
Sel document.selection.createRange ();
  var 
PosSel1 Sel.moveStart ('character', -txtarea.value.length); 
  var 
SelLargo txtarea.value.length;
  
// La linea siguiente es necesaria por que -- PosSel1 -- da un valor negativo
  
var ValorPositivo PosSel1 SelLargo 1
  
var SelEmpz SelLargo ValorPositivo
  
var s1 = (txtarea.value).substring(0,SelEmpz);
  var 
selFin s1.length theSelection.length
  
var s2 = (txtarea.value).substring(selFinselLargo);
  var 
abre "[list=1]\n";
  var 
cierra "[/LIST=]";
  
txtarea.value =  s1 abre;
  
opcion theSelection.split(" ");
  for (
j=0j<opcion.lengthj++) {
  
txtarea.value +=  "[*]" opcion[j] + "\n"
  
suma += (opcion[j].length+4);
  }
  
txtarea.value += cierra s2;
  var 
Cursor =  s1.length abre.length suma cierra.length;
  return(
Cursor); 
  }
 }
}
 
 
else if (
txtarea.selectionEnd && (txtarea.selectionEnd txtarea.selectionStart 0))
{
 var 
selLargo txtarea.textLength;
 var 
selEmpz txtarea.selectionStart;
 var 
selFin txtarea.selectionEnd;
 var 
s1 = (txtarea.value).substring(0,selEmpz);
 var 
s2 = (txtarea.value).substring(selEmpzselFin);
 var 
s3 = (txtarea.value).substring(selFinselLargo);
 var 
abre "[list=1]\n";
 var 
cierra "[/LIST=]";
 
opcion s2.split(" ");
 
txtarea.value =  s1 +  abre;
 for (
j=0j<opcion.lengthj++) {
 
txtarea.value +=  "[*]" opcion[j] + "\n"
 
suma += (opcion[j].length+4);
 }
 
txtarea.value += cierra s3;
 var 
Cursor =  s1.length abre.length +  suma cierra.length;
 return(
Cursor); 
}
else
{
 var 
selLargo txtarea.textLength;
 var 
selEmpz txtarea.selectionStart;
 var 
selFin txtarea.selectionEnd
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />

Última edición por Adler; 07/08/2007 a las 13:11
  #14 (permalink)  
Antiguo 06/08/2007, 13:53
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Re: Problemas con bbcode en textarea

Segunda parte

Código PHP:
 var s1 = (txtarea.value).substring(0,selEmpz);
 
//var s2 = (txtarea.value).substring(selEmpz, selFin);
 
var s3 = (txtarea.value).substring(selFinselLargo);
 var 
abre "[LIST=1]\n";
 var 
cierra "[/LIST=]";
 
txtarea.value =  s1 +  abre cierra s3;
 for (
i=0i<=opcion.lengthi++) {
 
opcion[i]=prompt("Ingresa los elementos de la lista de uno en uno","");
 if ((
opcion[i]== null) || (opcion[i]== "undefined") || (opcion[i] == "") || (opcion[i] ==' ')) {
 var 
Cursor =  s1.length abre.length suma cierra.length;
 return(
Cursor); 
 }
 
txtarea.value =  s1 +  abre;
 for (
j=0j<=ij++) {
 
txtarea.value +=  "[*]" opcion[j] + "\n"
 }
 
txtarea.value += cierra s3;
 
suma += (opcion[i].length+4);
 }
}

 
//Lista Desordenada
function listades () {
var 
txtarea document.getElementById("firma");
var 
opcion= new Array();
var 
i,j
var suma 0
if ((clientVer >= 4) && is_ie && is_win) {
var 
theSelection document.selection.createRange().text;

 if (
document.selection) {
  if (!
theSelection) {
  
txtarea.focus();
  var 
Sel document.selection.createRange ();
  var 
PosSel1 Sel.moveStart ('character', -txtarea.value.length); 
  var 
SelLargo txtarea.value.length;
  
// La linea siguiente es necesaria por que -- y -- da un valor negativo
  
var ValorPositivo PosSel1 SelLargo 1
  
var SelEmpz SelLargo ValorPositivo
  
var PosSel2 Sel.moveStart ('character', -txtarea.value.length); 
  var 
SelFin SelLargo PosSel2
  
var s1 = (txtarea.value).substring(0,SelEmpz);
  var 
s2 = (txtarea.value).substring(SelEmpz,SelFin);
  
//var s3 = (txtarea.value).substring(selFin, selLargo);
  
var abre "[LIST]\n";
  var 
cierra "[/LIST]";
  
txtarea.value =  s1 +  abre cierra s2;
  for (
i=0i<=opcion.lengthi++) {
  
opcion[i]=prompt("Ingresa los elementos de la lista de uno en uno","");
  if ((
opcion[i]== null) || (opcion[i]== "undefined") || (opcion[i] == "") || (opcion[i] ==' ')) {
  var 
Cursor =  s1.length abre.length suma cierra.length;
  return(
Cursor); 
  }
  
txtarea.value =  s1 +  abre;
  for (
j=0j<=ij++) {
  
txtarea.value +=  "[*]" opcion[j] + "\n"
  }
  
txtarea.value += cierra s2;
  
suma += (opcion[i].length+4);
  }
 }
 
  if (
theSelection) {
  
txtarea.focus();
  var 
Sel document.selection.createRange ();
  var 
PosSel1 Sel.moveStart ('character', -txtarea.value.length); 
  var 
SelLargo txtarea.value.length;
  
// La linea siguiente es necesaria por que -- PosSel1 -- da un valor negativo
  
var ValorPositivo PosSel1 SelLargo 1
  
var SelEmpz SelLargo ValorPositivo
  
var s1 = (txtarea.value).substring(0,SelEmpz);
  var 
selFin s1.length theSelection.length
  
var s2 = (txtarea.value).substring(selFinselLargo);
  var 
abre "[LIST]\n";
  var 
cierra "[/LIST]";
  
txtarea.value =  s1 abre;
  
opcion theSelection.split(" ");
  for (
j=0j<opcion.lengthj++) {
  
txtarea.value +=  "[*]" opcion[j] + "\n"
  
suma += (opcion[j].length+4);
  }
  
txtarea.value += cierra s2;
  var 
Cursor =  s1.length abre.length suma cierra.length;
  return(
Cursor); 
  }
 }
}
else if (
txtarea.selectionEnd && (txtarea.selectionEnd txtarea.selectionStart 0))
{
 var 
selLargo txtarea.textLength;
 var 
selEmpz txtarea.selectionStart;
 var 
selFin txtarea.selectionEnd;
 var 
s1 = (txtarea.value).substring(0,selEmpz);
 var 
s2 = (txtarea.value).substring(selEmpzselFin);
 var 
s3 = (txtarea.value).substring(selFinselLargo);
 var 
abre "[LIST]\n";
 var 
cierra "[/LIST]";
 
opcion s2.split(" ");
 
txtarea.value =  s1 +  abre;
 for (
j=0j<opcion.lengthj++) {
 
txtarea.value +=  "[*]" opcion[j] + "\n"
 
suma += (opcion[j].length+4);
 }
 
txtarea.value += cierra s3;
 var 
Cursor =  s1.length abre.length +  suma cierra.length;
 return(
Cursor); 
}
else
{
 var 
selLargo txtarea.textLength;
 var 
selEmpz txtarea.selectionStart;
 var 
selFin txtarea.selectionEnd;
 var 
s1 = (txtarea.value).substring(0,selEmpz);
 
//var s2 = (txtarea.value).substring(selEmpz, selFin);
 
var s3 = (txtarea.value).substring(selFinselLargo);
 var 
abre "[LIST]\n";
 var 
cierra "[/LIST]";
 
txtarea.value =  s1 +  abre cierra s3;
 for (
i=0i<=opcion.lengthi++) {
 
opcion[i]=prompt("Ingresa los elementos de la lista de uno en uno","");
 if ((
opcion[i]== null) || (opcion[i]== "undefined") || (opcion[i] == "") || (opcion[i] ==' ')) {
 var 
Cursor =  s1.length abre.length suma cierra.length;
 return(
Cursor); 
 }
 
txtarea.value =  s1 +  abre;
 for (
j=0j<=ij++) {
 
txtarea.value +=  "[*]" opcion[j] + "\n"
 }
 
txtarea.value += cierra s3;
 
suma += (opcion[i].length+4);
 }
}
}
 

function 
etiquetastilo (boton,tag) {
var 
txtarea document.getElementById("firma");
var 
iniCursor 0;
if ((
clientVer >= 4) && is_ie && is_win) {
txtSeleccion document.selection.createRange().text;
 if (
document.selection) {
  if (!
txtSeleccion) {
  
txtarea.focus();
  var 
Sel document.selection.createRange ();
  if (
tag <=3) {
  
document.selection.createRange().text ="[" +valor_tag[tag]+ "=" +valor_boton[boton]+ "][/"  +valor_tag[tag]+ "]";
  }
  else
  {
  
document.selection.createRange().text ="[" +valor_tag[tag]+ "][/"  +valor_tag[tag]+ "]";
  }
  
Sel.moveStart ('character', -txtarea.value.length);
  
iniCursor Sel.text.length//caracteres que deja atras
  //var  sumarPos= parseInt(num_caracteresAtras[boton]);
  
var Cursor iniCursor +  3;
  return(
Cursor);
  }
  
txtarea.focus();
  var 
Sel document.selection.createRange ();
  if (
tag <=3) {
  
document.selection.createRange().text "[" +valor_tag[tag]+ "=" +valor_boton[boton]+ "]" txtSeleccion "[/"  +valor_tag[tag]+ "]";
  }
  else
  {
  
document.selection.createRange().text "[" +valor_tag[tag]+ "]" txtSeleccion "[/"  +valor_tag[tag]+ "]";
  }
  
Sel.moveStart ('character', -txtarea.value.length);
  var 
StrSeleccion txtSeleccion.length;
  
iniCursor Sel.text.length;
  var  
sumarPosparseInt(num_caracteres[boton]);
  var 
Cursor iniCursor StrSeleccion  +  sumarPos;
  return(
Cursor);
 }
      }
 
// Firefox support 
else if (txtarea.selectionEnd && (txtarea.selectionEnd txtarea.selectionStart 0))
 {
 var 
selLargo txtarea.textLength;
 var 
selEmpz txtarea.selectionStart;
 var 
selFin txtarea.selectionEnd;
 var 
s1 = (txtarea.value).substring(0,selEmpz);
 var 
s2 = (txtarea.value).substring(selEmpzselFin);
 var 
s3 = (txtarea.value).substring(selFinselLargo);
 if (
tag <=3) {
 
txtarea.value =  s1 "[" valor_tag[tag] + "=" +valor_boton[boton]+ "]" +s2 "[/" +valor_tag[tag] + "]" s3;
 }
 else
 {
 
txtarea.value =  s1 "[" valor_tag[tag] + "]" +s2 "[/" +valor_tag[tag] + "]" s3;
 }
 var 
iniText s1.length;
 var 
textSel s2.length;
 var 
sumarPosparseInt(num_caracteres[boton]);
 var 
Cursor iniText textSel sumarPos;
 return(
Cursor); 
}
else
{
 var 
selLargo txtarea.textLength;
 var 
selEmpz txtarea.selectionStart;
 var 
selFin txtarea.selectionEnd;
 var 
s1 = (txtarea.value).substring(0,selEmpz);
 var 
s2 = (txtarea.value).substring(selEmpzselFin);
 var 
s3 = (txtarea.value).substring(selFinselLargo);
 if (
tag <=3) {
 
txtarea.value =  s1 "[" valor_tag[tag] + "=" +valor_boton[boton]+ "][/" +valor_tag[tag] + "]"  s2 s3;
 }
 else
 {
 
txtarea.value =  s1 "[" valor_tag[tag] + "][/" +valor_tag[tag] + "]"  s2 s3;
 }
 var 
Cursor txtarea.textLength recortar_posAtras[boton] - s2.length s3.length;
 return(
Cursor); 
 }
 
almznaCursor(txtarea);
}
function 
almznaCursor(textEl) {
 if (
textEl.createTextRangetextEl.caretPos document.selection.createRange().duplicate();
}
 
function 
PosicionCursor(pos) {
var 
txtarea document.getElementById("firma");
 
//Firefox
 
if (txtarea .setSelectionRange) {
  
txtarea .focus();
  
txtarea .setSelectionRange(pos,pos);
 }
 else if (
txtarea .createTextRange) {
  var 
rango txtarea .createTextRange();
  
rango.collapse(true);
  
rango.moveEnd('character'pos);
  
rango.moveStart('character'pos);
  
rango.select();
 }
}
function 
ImpEtiqueta(val,etta)
{
 
PosicionCursor(etiquetastilo(val,etta));
}
function 
ImpUrl(val,etta)
{
 
PosicionCursor(inserta_url(val,etta));
}
function 
Lista_Ord()
{
 
PosicionCursor(listaord());
}
function 
Lista_Des()
{
 
PosicionCursor(listades());
}
</script>
 
</head>
<body>
<form name="perfil">
<input type="button"  value="Times New Roman"  onClick="ImpEtiqueta(0,0);" />
<input type="button" value="Verdana" onClick="ImpEtiqueta(1,0);" />
<input type="button" value="Arial"  onClick="ImpEtiqueta(2,0);" />
<br>
<input type="button"  value="9"  onClick="ImpEtiqueta(3,1);" />
<input type="button" value="10" onClick="ImpEtiqueta(4,1);" />
<input type="button" value="11"  onClick="ImpEtiqueta(5,1);" />
<br>
<input type="button"  value="Rojo"  onClick="ImpEtiqueta(6,2);" />
<input type="button" value="Negro" onClick="ImpEtiqueta(7,2);" />
<input type="button" value="Blanco"  onClick="ImpEtiqueta(8,2);" />
<br>
<input type="button"  value="B" onclick="ImpEtiqueta(12,4);" />
<input type="button"  value="U" onclick="ImpEtiqueta(13,5);" />
<input type="button"  value="I" onclick="ImpEtiqueta(14,6);" />
<br>
<input type="button"  value="Left" onclick="ImpEtiqueta(9,3);" />
<input type="button"  value="Center" onclick="ImpEtiqueta(10,3);" />
<input type="button"  value="Right" onclick="ImpEtiqueta(11,3);" />
<br>
<input type="button"  value="URL" onclick="ImpUrl(15,7);" />
<br>
<input type="button"  value="Lordenada" onclick="Lista_Ord();" />
<br>
<input type="button"  value="Ldesordenada" onclick="Lista_Des();" />
<br><br>
 
<textarea id="firma" name="firma" rows="10" cols="80"></textarea>

</form>
</body>
</html> 
Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />

Última edición por Adler; 07/08/2007 a las 06:08
  #15 (permalink)  
Antiguo 06/08/2007, 16:30
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 9 meses
Puntos: 2114
Re: Problemas con bbcode en textarea

Hola Adler.

Gracias por compartir el código.

No me ha funcionado, pero me temo que lo publicaste mal, ya que por esta linea hay algo raro, algo comentado que no debiera o al revés:
Código PHP:
var abre "[list=1]\n"; var cierra "[/LIST=]"txtarea.value s1 abre cierra s3; for (i=0i<=opcion.lengthi++) { opcion[i]=prompt("Ingresa los elementos de la lista de uno en uno",""); if ((opcion[i]== null) || (opcion[i]== "undefined") || (opcion[i] == "") || (opcion[i] ==' ')) { var Cursor s1.length abre.length suma cierra.length; return(Cursor); } txtarea.value s1 abre; for (j=0j<=ij++) { txtarea.value += "[*]" opcion[j] + "\n"; } txtarea.value += cierra s3suma += (opcion[i].length+4); } } } //Lista Desordenada function listades () { var txtarea = document.getElementById("firma"); var opcion= new Array(); var i,j var suma = 0 if ((clientVer >= 4) && is_ie && is_win) { var theSelection = document.selection.createRange().text; if (document.selection) { if (!theSelection) { txtarea.focus(); var Sel = document.selection.createRange (); var PosSel1 = Sel.moveStart ('character', -txtarea.value.length); var SelLargo = txtarea.value.length; // La linea siguiente es necesaria por que -- y -- da un valor negativo var ValorPositivo = PosSel1 + SelLargo + 1 var SelEmpz = SelLargo - ValorPositivo var PosSel2 = Sel.moveStart ('character', -txtarea.value.length); var SelFin = SelLargo - PosSel2 var s1 = (txtarea.value).substring(0,SelEmpz); var s2 = (txtarea.value).substring(SelEmpz,SelFin); //var s3 = (txtarea.value).substring(selFin, selLargo); var abre = " 
n"; 
Un saludo.
  #16 (permalink)  
Antiguo 06/08/2007, 20:44
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Re: Problemas con bbcode en textarea

Hola, Bónez, no vas a poder creer cuál era el problema: cambiale el id a esto y todo fa a funcionar correctamente:
<div id="cuerpo">

O, mejor todavía, no cambies el nombre y agregale la palabra reservada var a la variable cuerpo de mi función init:
...
var cuerpo=document.body.innerHTML;
...
Yo voy a agregarla al código original para evitar que le suceda a otro y te voy a agregar a los créditos.

Última edición por Panino5001; 06/08/2007 a las 20:57
  #17 (permalink)  
Antiguo 07/08/2007, 06:10
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Re: Problemas con bbcode en textarea

Ok, prueba ahora. Talvez al tener que dividirlo, se me pasó copiar alguna línea. He vuelto a editar los mismos post.
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #18 (permalink)  
Antiguo 07/08/2007, 10:32
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 9 meses
Puntos: 2114
Re: Problemas con bbcode en textarea

Cita:
Iniciado por Panino5001 Ver Mensaje
Hola, Bónez, no vas a poder creer cuál era el problema: cambiale el id a esto y todo fa a funcionar correctamente:
<div id="cuerpo">

O, mejor todavía, no cambies el nombre y agregale la palabra reservada var a la variable cuerpo de mi función init:
...
var cuerpo=document.body.innerHTML;
...
Yo voy a agregarla al código original para evitar que le suceda a otro y te voy a agregar a los créditos.


¡Qué cosas!

Muchas gracias por tomarte las molestias Panonino. No voy a preguntarte cómo te diste cuenta de que era el id="cuerpo", porque tuvo que ser toda una odisea, jeje.

Efectivamente, ya funciona perfecto tanto en FF como en IE (6 y 7), al menos que yo haya probado.

Muchas gracias también por lo de los créditos (no es Bonex, sino Bonez :P), aunque haya sido mas cosas tuya que mia la verdad.

Bueno, lo dicho, se agradece mucho tu implicación.

Un saludo.
  #19 (permalink)  
Antiguo 24/10/2013, 20:12
 
Fecha de Ingreso: septiembre-2003
Ubicación: Capital Federal
Mensajes: 38
Antigüedad: 20 años, 7 meses
Puntos: 0
Pregunta Respuesta: Problemas con bbcode en textarea

Hola a todos, veo que este tema es relativamente viejo, pero bueno... como estoy usando el mismo script de Panino me atrevo a hacer una , consulta.
Estoy utilizando el bbcode y sinceramente nunca había tenido problema. En local me funciona muy bien, ahora cuando lo subo al servidor, la línea que me debería mostrar los caracteres con los estilos me pone caracteres extraños, como : ó, é. (acentos y ñ).
A ver si me puedo explicar mejor, eso me pasa para la tabla por ejemplo noticias donde tengo el campo titulo, copete, texto. El campo texto tiene aplicado el bbcode , los campos titulo y copete no, pero en esos campos los acentos y ñ salen bien, solo me muestra mal los caracteres cuando uso por ejemplo:

echo bbcode($row_destacada['texto']);

Alguien podría darme una mano con esto? Comentenme que se podría necesitar de los archivos como para pegar alguna línea. Desde ya muchas gracias por todo!

Saludos,
Josea
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 12:59.