Carnet Wiki

wrap_embed_html

Version 7 — Mars 2015 JLuc

mémo

r21894 et r21895 dans le core, ainsi que z87162 et z87163 dans textwheel, introduisent wrap_embed_html avec le log suivant :

<blockquote class="spip">

Si une fonction wrap_embed_html est definie, on l’appelle en lui passant le contenu source et le html qu’on s’apprete a embed dans le contenu riche.
Cette fonction peut etre utilisee pour encapsuler ce contenu dans un markup qui l’indique comme non editable dans un editeur wysiwyg et qui porte la trace du raccourci source pour permettre la conversion html=>raccourcis SPIP

</blockquote>

Exemple d’utilisation

Cet exemple s’inscrit et n’a de sens que dans le contexte de l’editeur wysiwyg que Cedric met en place pour les blogs qu’il propose.

Rq : l’éditeur est https://github.com/Cerdic/wysihtml (un fork de http://wysihtml.com = https://github.com/Voog/wysihtml/, qui est un fork étendu et moins strict de https://xing.github.io/wysihtml5/ = https://github.com/xing/wysihtml5/ qui n’est plus maintenu)

<blockquote class="spip">

Cerdic : J’edite en wysiwyg le html de mon article. Dedans il y a du html qui vient des modèles ou du oembed. Je veux pas qu’il soit éditable, et je veux pouvoir le revert pour stocker mon article en raccourcis SPIP. Donc quand je propre() avant d’éditer, j’encapsule le html des modèles et des oembed dans un div avec une class et un commentaire html qui contient le code source initial.
Comme ça, ce html n’est pas modifié lors de l’édition et quand on enregistre je rechoppe le code source initial et je le remet à la place du html du modele/oembed.
Un peu comme faire propre(), puis éditer en HTML, puis faire sale() pour remettre le HTML en raccourcis SPIP.

</blockquote>
/**
 * Fonction qui va wrapper le html embeded dans le contenu
 * @param $texte
 * @param $html
 * @return string
 */
function inc_wrap_embed_html_dist($texte,$html){
	if (isset($GLOBALS['wrap_embed_html']) AND $GLOBALS['wrap_embed_html']){
		if (strpos($texte,"base64")!==false){
			$texte = echappe_retour($texte);
		}
		$texte = base64_encode($texte);
		return "<div class='wysihtml5-uneditable-container'><!--html_from:$texte -->$html<!--/html_from--></div>";
	}
	return $html;
}

Questions et Réponses

Q et R sur wrap_embed_html et sur le contexte de l’exemple

Q : Comment et quand les modèles et oembed sont-ils éditables ?
R : pour les oembed, tu colles l’url comme d’hab et ils sont convertis en html au premier enregistrement. Tu peux supprimer le html, mais tu ne peux pas le modifier.
Les modèles seraient insérés via un formulaire mais je fais pas encore.

Q : Que devient le HTML qu’on n’arrive pas à retransformer en raccourcis SPIP ? Ça le détecte et ça met <html> autour dans la base ?
R : il devrait pas y avoir puisque le html vient de ton éditeur donc tu sais ce qu’il génère.
Sinon je nettoie les trucs trop moches dont je veux pas et je laisse le reste inchangé.
Par exemple l’éditeur me fait un <pre> pour les blocs de code et je laisse <pre> dans le texte spip
On pourrait aussi éventuellement le transformer en <cadre class="truc"> par exemple. C’est ouvert. Là je gère pas encore toutes les complexités. J’ai un truc pas trop pourri pour un blog simple, avec des contenus simples.
Ça évite que les utilisateurs mettent n’importe quel html pourri. Du coup la saisie est wysiwyg, mais comme je nettoie derrière, je laisse pas faire n’importe quoi. C’est un compromis.