J'ai un besoin, quelque chose que je suis sûr que d'autres développeurs ont et que StackOverflow a.
Scénario
Je suis en train de construire un site pour poster des exemples de code, des articles qui sont écrits par moi à travers un système d'administration mais aussi éventuellement des utilisateurs enregistrés Front-end.
Mission
Disposer d'un éditeur WYSIWYG permettant à un utilisateur de publier des articles. Évidemment, il peut s'agir d'un paragraphe de texte, de quelques titres... ce n'est pas un problème puisque TinyMCE s'en occupe actuellement. Mélangé avec le texte sera des exemples de code, de préférence dans un tag de code.
Exécution
J'ai donc joué avec l'extension de TinyMCE. Je peux autoriser les balises de code, mais je n'arrive pas à mettre le texte en surbrillance dans les balises de code, mais je peux le mettre dans les balises de pré. Ce n'est pas un problème. Alors je colle :
<xsl:template match="*" mode="jsonObjectOrElementProperty">
<xsl:text>"</xsl:text>
<xsl:value-of select="name()"/>
<xsl:text>":</xsl:text>
<xsl:apply-templates select="." mode="jsonObjectProperties"/>
</xsl:template>
dans le WYSIWIG, la mise en surbrillance et la sélection de Préformaté sont correctes, elles encodent toutes les parenthèses en < et > et c'est tout à fait correct. Il est stocké dans ma base de données et apparaît comme tel ;
<pre><xsl:template match="*" mode="jsonObjectOrElementProperty"><br /> <xsl:text>"</xsl:text><br /> <xsl:value-of select="name()"/><br /> <xsl:text>":</xsl:text><br /> <xsl:apply-templates select="." mode="jsonObjectProperties"/><br /> </xsl:template></pre>
MAIS lors de l'édition, donc en chargeant la zone de texte avec du contenu existant ; voir HTML ;
<textarea class="tinyMCE"><pre><xsl:template match="*" mode="jsonObjectOrElementProperty"><br /> <xsl:text>"</xsl:text><br /> <xsl:value-of select="name()"/><br /> <xsl:text>":</xsl:text><br /> <xsl:apply-templates select="." mode="jsonObjectProperties"/><br /> </xsl:template></pre></textarea>
TinyMCE ré-encode toutes les parenthèses et supprime TOUT et N'IMPORTE QUEL code basé sur XML, les balises script comme éléments non valides, plutôt que de les traiter comme du texte brut.
Ajoutez à cela qu'il n'a aucune sorte de fonctionnalité CDATA, de sorte qu'il ignore certaines parties...
J'ai besoin d'un plugin, car je ne peux pas l'écrire à partir de zéro, je n'ai ni le temps ni le budget. Pour ce que StackOverflow m'a permis de faire exactement dans la création de cette question ! !! Bon Stackoverflow
Question
Quelqu'un a-t-il réussi à faire cela avec TinyMCE ? Puis-je voler/emprunter Stackoverflows ? En vérifiant la source, je ne vois pas qu'il s'agit d'un plugin, mais plutôt d'une construction personnalisée. Quelqu'un connaît-il d'autres plugins de formatage qui permettent d'utiliser des extraits de code ?