Foros del Web » Programando para Internet » Javascript »

Mini editor web wysiwyg

Estas en el tema de Mini editor web wysiwyg en el foro de Javascript en Foros del Web. Buenas: Ayer hice una pregunta, y fue motivada por este código. Es un minieditor parecido a este de foros del web. Fui cogiendo recortes de ...
  #1 (permalink)  
Antiguo 24/05/2005, 02:56
 
Fecha de Ingreso: diciembre-2004
Mensajes: 71
Antigüedad: 19 años, 4 meses
Puntos: 0
Mini editor web wysiwyg

Buenas:

Ayer hice una pregunta, y fue motivada por este código.
Es un minieditor parecido a este de foros del web. Fui cogiendo recortes
de la FAQ de Javascript, y del código de vbulletin.


Pongo el código abajo, pero si da problemas, podéis ver el e
ejemplo online ejemplo


El script funciona tiene el comportamiento que espero en Firefox 1.03
(falta quitar el bbcode si lo tiene el texto seleccinado.)

La función que falla es getSel, en el explorer. Esta función debe hacer:

pretext=capturar el texto antes de la seleccion,
addtext=capturar el texto seleccionado
fintext=capturar el texto después de la selección
añadir etiquetas a addtext

borrar todo

concatenar: pretext+addtext+fintext
mostrar

Lo que veo y motivaba mi pregunta, es que hay tres formas
de captura el texto seleccionado en un textarea o en la página,
el script detecta que método usa con setencias if:

// basados Mozilla
if (window.getSelection() )

// ¿Explorer?
if (document.getSelection)

¿¿¿¿¿¿¿¿¿¿????????????
if (document.selection) <------ ¿qué navegador sería este -->


¿Y como adapto el código de mozilla a ie?

¿Cual sería la manera estandar?

P.D.: [cita ] ha sido cambiado para no interferir con el bbcode. El
ejemplo online si funciona.

Código:
<?php
?>
<HTML>
<HEAD>
<style>
 
 a.editor:link {
  color: black;
  text-decoration: none;
  
  }
 a.editor:visited {
   color: black 
   text-decoration: none;


  
 }
 a.editor:hover {
  color: #cc0000;
  }
 
 </style>
 
</HEAD>
<BODY>
<!--<script src="js/vbulletin_stdedit.js"></script>-->
<SCRIPT language="Javascript" type="text/javascript">

// Captura la selección, y añade las etiquetas.
 function getSel(ini_etiqueta,fin_etiquita)
{
	var txt = '';
	var foundIn = '';
        editor=document.getElementById('editor');
        // Si mozilla o firefox.
	if (window.getSelection)
	{
                ini=editor.mensaje.selectionStart;
                fin=editor.mensaje.selectionEnd;
                pretext=editor.mensaje.value.substring (0,ini);
                addtext=ini_etiqueta+editor.mensaje.value.substring (ini,fin)+fin_etiqueta;
                fintext=editor.mensaje.value.substring (fin, editor.mensaje.value.length);
                  
		//foundIn = 'window.getSelection()';
                final_text=pretext+addtext+fintext;
                editor.mensaje.value='';
                editor.mensaje.value=final_text;
                return final_text;
	}
        // If ie
	else if (document.getSelection)
        {
                // Este código no funciona en Ie
                ini=editor.mensaje.selectionStart;
                fin=editor.mensaje.selectionEnd;
                alert (editor.mensaje.selectedtext.value);        
                pretext=editor.mensaje.value.substring (0,ini);
                addtext=ini_etiqueta+editor.mensaje.value.substring (ini,fin)+fin_etiqueta;
                fintext=editor.mensaje.value.substring (fin, editor.mensaje.value.length);
                  
		//foundIn = 'window.getSelection()';
                final_text=pretext+addtext+fintext;
                editor.mensaje.value='';
                editor.mensaje.value=final_text;
                return final_text;
	}
	else if (document.selection)
	{
       ;          
	}
	else return;
//	document.forms[0].selectedtext.value = 'Found in: ' + foundIn + '\n' + txt;
} 
   
// 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.editor.mensaje;
   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 ('Introduzca dirección','http://');
     ini_etiqueta='[a href=\"'+url+'\"]';
     fin_etiqueta='[/a]'
      break;
     case "bold":
     ini_etiqueta='';
     fin_etiqueta=''
      break;
    case "italics":
     ini_etiqueta='';
     fin_etiqueta=''
      break;
    case "quote":
     ini_etiqueta='[quota]';
     fin_etiqueta='[/quota]';
     break;
    case "underlayed":
     ini_etiqueta='';
     fin_etiqueta='';
     break;
    default:
     break;
   }
   getSel(ini_etiqueta,fin_etiqueta);
  }

  function textCounter(field, countfield, maxlimit) {
   if (field.value.length > maxlimit)
    field.value = field.value.substring(0, maxlimit);
   else
    countfield.value = maxlimit - field.value.length;
  }
</script>



  

<form name="editor" id="editor" method="post">
<div style="padding: 15px;background-color: #efebdf;  width: 500px">

<a class="editor" href="javascript:codigo('bold')"><b>N</b></a>
&nbsp;
<a class="editor" href="javascript:codigo('italics')"><i>I</i></a>
&nbsp;
<a class="editor" href="javascript:codigo('underlayed')"><u>U</u></a>
&nbsp;&nbsp;&nbsp;&nbsp;
<span style="margin-left: 255px;">
<a class="editor" href="javascript:codigo('url')">Enlace</a>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<!--<a class="editor" href="javascript:codigo('code')">codigo</a>-->
<a class="editor" href="javascript:codigo('quote')">Citar</a>
  </span>
<br />
<textarea name="mensaje"  id="mensaje"

onKeyDown="textCounter(this.form.mensaje,this.form.remLen,600,0);"

onKeyUp="javascript:storeCaret(this);
textCounter(this.form.mensaje,this.form.remLen,600, 0);" 

onchange="javascript:storeCaret(this));"

onclick="javascript:storeCaret(this);" rows="10" wrap="physical" cols="45">
<?echo $_POST['mensaje'];?></textarea><br  />
  Tiene
  <input readonly type=text name=remLen size=5 maxlength=3 value="600">
  caracteres para su mensaje.<br />
  <input type="reset"  value="Borra todo" />
  <input type="submit" value="Previsualizar" />
  </div> 
</form>
 
</BODY>
</HTML> 
<?


// definimos nuestras etiquetas
$bb_code = array(
// emoticonos: debéis apuntar a vuestras imágenes en el código HTML
':)' => '<img src="feliz.gif" />',
':(' => '<img src="triste.gif" />',
':D' => '<img src="contento.gif" />',

// letra negrita
'' => '<span style="font-weight:bold">',
'' => '</span>',

// letra cursiva
'' => '<span style="font-style:italic">',  '' => '</span>',

// letra subrayada
'' => '<span style="text-decoration:underline">',
'' => '</span>',

// salto de línea
'[salto]' => '<br><br>',

// Cita
'[quota]'=>'<cite>',
'[/quota]'=>'</cite>',

// imagenes
'[imagen]' => '<img src="',
'[/imagen]' => '" />',

// Enlace
'[a'=>'<a',
'"]'=>'">',
'[/a]'=>'</a>'

// recordad que después del último elemento no hay coma
);

   $mensaje=
   //$mensaje=htmlentities($mensaje);
   $mensaje=strip_tags($mensaje);
   $mensaje=nl2br($mensaje);

// Reemplazamos el BBCode por código HTML y lo mostramos en la página
echo '<p style="width: 500px; padding: 15px; border: 1px solid black">'.reemplazar( $mensaje ).'</p>';

// Incluimos la función para reemplazar el código
function reemplazar( $codigo )
{
$search = array_keys( $GLOBALS['bb_code'] );
$codigo = str_replace( $search, $GLOBALS['bb_code'], $codigo );

return $codigo;
}

?>
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.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:53.