Ver Mensaje Individual
  #31 (permalink)  
Antiguo 02/12/2002, 18:39
Avatar de Kaopectate
Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 22 años, 3 meses
Puntos: 38
31.- Textbox con botones para formato (tipo ForosDelWeb)

P: ¿Como puedo construir con un texarea y algunos botones una pantalla de captura para que los usuarios escriban un texto y puedan insertar comandos para negritas, subrayado, etc. y que dichos comandos se inserten justo en el punto donde esté el cursor?

R: [ver ejemplo]
El siguiente script es un extracto del usado en los ForosDelWeb, en su versión anterior.

Créditos: Tukzone, SirMatrix y UnKnown.

NOTAS: Se debe reemplazar "java script" por "JavaScript" para que funcione.

Se ha reportado que no funciona correctamente en NetScape 4.

Código PHP:
<HTML>
 <
HEAD>
 </
HEAD>
 <
BODY>
  <
SCRIPT language="Javascript" type="text/javascript">

   
// Este genial Script fue desarrollado por Tukzone, SirMatrix y Unknow, 
   // todos usuarios del Foro.. Gracias a ellos por su colaboración

  
function storeCaret(text) { 
   if (
text.createTextRange) {
    
text.caretPos document.selection.createRange().duplicate();
   }
  }

  function 
meter(text) {
   var 
postopic document.PostTopic.Message;
   if (
postopic.createTextRange && postopic.caretPos) {      
    var 
caretPos postopic.caretPos;      
    
caretPos.text caretPos.text.charAt(caretPos.text.length 1) == ' ' 

text ' ' text;
   }
   else 
postopic.value += text;
   
postopic.focus(caretPos)
  }

  function 
codigo(accion) {
   switch(
accion) {
    case 
"url":
     
url prompt("URL de el Enlace""http://");
     if(
url) {
      
url="[ a]"+url+"[ /a]";
      
meter(url);
     }
     break;
    case 
"bold":
     
negras prompt("Texto en Negritas""");
     if(
negras) {
      
negras="[ b]"+negras+"[ /b]";
      
meter(negras);
     }
     break;
    case 
"italics":
     
italics prompt("Texto en Italicas""");
     if(
italics) {
      
italics="[ i]"+italics+"[ /i]";
      
meter(italics);
     }
     break;
    case 
"code":
     
code="[ code]  [ /code]";
     
meter(code);
     break;
    case 
"quote":
     
quote="[ quote]  [ /quote]";
     
meter(quote);
     break;
    default:
     
meter(accion);
     break;
   }
  }

  function 
textCounter(fieldcountfieldmaxlimit) {
   if (
field.value.length maxlimit)
    
field.value field.value.substring(0maxlimit);
   else 
    
countfield.value maxlimit field.value.length;
  }
 
</script>
 <form name="PostTopic">
  Nombre de usuario:
  <INPUT TYPE="text" NAME="UserName" SIZE="12" MAXLENGTH="25" 

VALUE='Kaopectate'> 
  Password:
  <input maxLength="13" name="Password" size="12" type="password" 

VALUE='**********'>
  Mensaje:
  <textarea 

onKeyDown="textCounter(this.form.Message,this.form.remLen,2000);" 

onKeyUp="javascript:storeCaret(this); 

textCounter(this.form.Message,this.form.remLen,2000);" name="Message" 

onchange="javascript:storeCaret(this);" 

onclick="javascript:storeCaret(this);" rows="10" wrap="VIRTUAL" cols="45">
  </textarea>
  <a href="javascript:codigo('url')">Enlace</a> 
  <a href="javascript:codigo('bold')">negrita</a>
  <a href="javascript:codigo('italics')">italica</a> 
  <a href="javascript:codigo('code')">codigo</a>
  <a href="javascript:codigo('quote')">citar</a>
  Tiene
  <input readonly type=text name=remLen size=5 maxlength=3 value="2000">
  caracteres para su mensaje.
 </form>
</BODY>
</HTML> 

Última edición por Kaopectate; 23/12/2002 a las 23:52