Partage
  • Partager sur Facebook
  • Partager sur Twitter

Affichage en live du contenu d'une zone de texte

Source: Tutoriel du SDZ

    19 octobre 2008 à 17:16:46

    Bonjour,

    J'ai aujourd'hui appliqué le tutoriel suivant: http://www.siteduzero.com/tutoriel-3-3 [...] de-texte.html (en utilisant notamment le Zcode)

    J'ai deux soucis après application:

    1/ Je souhaite afficher ma balise RP en live mais apres selection et encadrement du texte par cette balise, j'ai la même chose réaffiché en live, soit
    Dans mon textarea j'ai:
    <rp="Auteur">Ceci est un exemple</rp>
    Et dans ma div qui m'affiche ceci en prévisualisation live j'ai:
    <rp="Auteur">Ceci est un exemple</rp>
    Soit la même chose, or vous vous en doutez, je dois normalement avoir une mise en forme correspondante à ma balise 'rp'

    2/ Je souhaiterais une modification de la balise rp (exactement la même que celle du présent forum SDZ pour sa balise citation): En faite je ne veux pas l'ouverture de l'alerte qui ouvre une petite fenêtre avec un champ pour le completer (soit par le nom de l'auteur ou par la citation). En faite je veux juste qu'en encadrant mon texte par la balise, je voudrais moi même remplir directement dans le textarea le nom de l'auteur (facultatif) et la citation (comme sur les forums phpBB par exemple où il n'y a pas d'alerte). Car je trouve que les alertes sont très génântes et font perdre du temps.

    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::

    Voici mon code javascript:
    <!-- Fonctions du forum -->
    <!-- Insertion de balise dans le champ de post du forum -->
    <!-- Source du SDZ: http://www.siteduzero.com/tutoriel-3-34703-insertion-de-balises-dans-une-zone-de-texte.html -->
    function insertTag(startTag, endTag, textareaId, tagType) {
    	var field = document.getElementById(textareaId); // On récupère la zone de texte
    	field.focus(); // On remet le focus sur la zone de texte, suivant les navigateurs, on perd le focus en appelant la fonction. 
        
    	/* === Partie 1 : on récupère la sélection === */
        if (window.ActiveXObject) {
        	var textRange = document.selection.createRange();            
            var currentSelection = textRange.text;
        } 
    	else {
            var startSelection   = field.value.substring(0, field.selectionStart);
            var currentSelection = field.value.substring(field.selectionStart, field.selectionEnd);
            var endSelection     = field.value.substring(field.selectionEnd);               
        }
            
        /* === Partie 2 : on analyse le tagType === */
        if (tagType) {
        	switch (tagType) {
            	case "lien":
                	// Si c'est un lien
                    break;
                    case "rp":
            			endTag = "</rp>";
            			if (currentSelection) { // Il y a une sélection
                    		if (currentSelection.length > 30) { // La longueur de la sélection est plus grande que 30. C'est certainement la citation, le pseudo fait rarement 20 caractères
                            	var auteur = prompt("Quel est l'auteur de la citation ?") || "";
                            	startTag = "<rp=\"" + auteur + "\">";
                    		} 
    						else { // On a l'Auteur, on demande la citation
                            	var citation = prompt("Quelle est la citation ?") || "";
                            	startTag = "<rp=\"" + currentSelection + "\">";
                            	currentSelection = citation;    
                    		}
            			} 
    					else { // Pas de selection, donc on demande l'Auteur et la Citation
                    		var auteur = prompt("Quel est l'auteur de la citation ?") || "";
                    		var citation = prompt("Quelle est la citation ?") || "";
                    		startTag = "<rp=\"" + auteur + "\">";
                   			currentSelection = citation;    
            			}
    				break;
           	}
        }
            
        /* === Partie 3 : on insère le tout === */
        if (window.ActiveXObject) { // IE
        	textRange.text = startTag + currentSelection + endTag;
            textRange.moveStart("character", -endTag.length - currentSelection.length);
            textRange.moveEnd("character", -endTag.length);
            textRange.select();     
        } 
    	else { // Ce n'est pas IE
        	field.value = startSelection + startTag + currentSelection + endTag + endSelection;
            field.focus();
            field.setSelectionRange(startSelection.length + startTag.length, startSelection.length + startTag.length + currentSelection.length);
        }       
    }
    
    <!-- Prévisualisation -->
    function preview(textareaId, previewDiv) {
        var field = textareaId.value; // Le contenu du textarea est dans la variable field
    	if (field) {
    		field = field.replace(/&/g, '&amp;');
    		field = field.replace(/</g, '&lt;').replace(/>/g, '&gt;');
    		field = field.replace(/\n/g, '<br />').replace(/\t/g, '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;');
    
    		
    		field = field.replace(/&lt;gras&gt;([\s\S]*?)&lt;\/gras&gt;/g, '<strong>$1</strong>');
    		field = field.replace(/&lt;italique&gt;([\s\S]*?)&lt;\/italique&gt;/g, '<em>$1</em>');
    		field = field.replace(/&lt;souligne&gt;([\s\S]*?)&lt;\/souligne&gt;/g, '<u>$1</u>');
    		field = field.replace(/&lt;rp =\"(.*?)\"&gt;([\s\S]*?)&lt;\/rp&gt;/g, '<br /><span class="roleplay">RP : $1</span><div class="roleplay2">$2</div>');
    		
    		document.getElementById(previewDiv).innerHTML = field;
    	}
    }
    

    Voici ma page du formulaire en PHP
    <form method="post">
      	<p>
      		<label>Titre
        	<input name="titre" type="text" size="80" maxlength="50" value="<?php echo $topic_title; ?>">
        	</label>
    	</p>
        <input type="button" value="G" onclick="insertTag('<gras>','</gras>','message')" />
        <input type="button" value="I" onclick="insertTag('<italique>','</italique>','message')" />
        <input type="button" value="S" onclick="insertTag('<souligne>','</souligne>','message')" />
        <input type="button" value="RP" onclick="insertTag('','','message','rp')" />
      	<p>
        	<label>Message
        	<textarea onkeyup="preview(this, 'livepost');" onselect="preview(this, 'livepost');" name="message" id="message" cols="65" rows="15"></textarea>
        	</label>
    	</p>
      	<p>
        	<input type="hidden" name="topic_id" value="<?php echo $topic_id; ?>" />
      	</p>
      	<p>
        	<label>
        	<input type="submit" onclick="affdyn_form('site','forum/process_posting.php',Form.serialize(this.form)); return false;" value="Envoyer">
        	</label>
      	</p>
    	</form>
    </div>
    <div id="livepost">
    	<div class="content">
    		<?php //Contenu du champs de texte en live ?>
        </div>
    </div>
    
    Merci de l'aide que vous pourrez m'apporter
    
    • Partager sur Facebook
    • Partager sur Twitter
      19 octobre 2008 à 21:05:32

      Essaye cette regex :
      /&lt;rp =\"(^"?)\"&gt;([\s\S]*?)&lt;\/rp&gt;/g
      • Partager sur Facebook
      • Partager sur Twitter
        19 octobre 2008 à 23:03:14

        J'ai testé mais pas de changement, toujours le même problème: ma balise 'rp' n'est pas parser

        Edit
        En faite faut mettre "rp=" et non "rp =" En effet, le petit espace change tout ;)

        Bon le dernier problème qu'il me reste a résoudre est la suppression des alertes avec le champ de texte pour renseigner l'auteur ou la citation.

        Quelqu'un à une idée?
        • Partager sur Facebook
        • Partager sur Twitter
          21 octobre 2008 à 14:48:41

          Personne a une petite idée pour supprimer les alertes des citations et tout remplire manuellement soit même avec l'option 'Auteur' facultative? :euh:
          • Partager sur Facebook
          • Partager sur Twitter
            22 octobre 2008 à 16:50:22

            Vraiment personne ne sait comment supprimer ces malheureuses alertes??? :(:(:(
            • Partager sur Facebook
            • Partager sur Twitter
              22 octobre 2008 à 19:28:38

              "Réfléchir ne tue pas" :
              Tu as des liens quand tu cliques dessus, ca te met pas d'alerte.
              A toi de voir qu'est ce qui est différent avec les citations et de changer comme tu le veux ;) .
              • Partager sur Facebook
              • Partager sur Twitter

              Affichage en live du contenu d'une zone de texte

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown