Plusieurs zones modifiables
Fait fonctionner plusieurs éditeurs d’une page comme un ensemble : seule la zone où travaille l’auteur affiche une barre d’outils, et une API de groupe lit et écrit toutes les zones à la fois. Utile pour un formulaire de CMS avec titre, résumé et corps, sans barre d’outils complète sur chacun.

"article". La barre d’outils n’apparaît que sur la zone ayant le focus, ici Summary.Activation
Cette fonctionnalité est fournie par le plugin multiroot.js (également inclus dans plugins/all_plugins.js). Créez un éditeur par zone et donnez-leur le même multiRootGroup. Aucun bouton.
<label>Title</label><div id="title"><h1>Spring release notes</h1></div>
<label>Summary</label><div id="summary"><p>What changed in the editor this quarter.</p></div>
<label>Body</label><div id="body"><p>The body text goes here.</p></div>
<script>
function root(id, height) {
return new RichTextEditor("#" + id, { multiRootGroup: "article", height: height, toolbar: "basic" });
}
var title = root("title", "110px");
var summary = root("summary", "110px");
var body = root("body", "200px");
</script>
Chaque zone porte le nom de l’attribut id de son élément : ce groupe possède donc les racines title, summary et body. La première est initialement active.
Options
| Option | Valeur par défaut | Fonctionnement |
|---|---|---|
multiRootGroup | null (désactivé) | Les éditeurs ayant le même nom de groupe forment un éditeur multizone. |
multiRootName | l’attribut id de l’élément, sinon root1, root2… | Nom de la racine dans l’API du groupe. |
multiRootToolbarHost | null | Élément ou identifiant d’élément dans lequel déplacer la barre d’outils active. Ne l’utilisez pas dans la version 2.6.12 ; consultez « À savoir ». |
API du groupe
Chaque éditeur du groupe reçoit le même objet editor.multiRoot :
| Membre | Fonctionnement |
|---|---|
getRoots() | ["title", "summary", "body"] |
getActive() | Nom de la racine ayant la barre d’outils, par exemple "summary". |
getEditor(name) | Instance d’éditeur de cette racine. |
focusRoot(name) | Active cette racine et lui donne le focus. |
getHTML() | Une entrée par racine, que le CMS enregistre : {"title":"<h1 id=\"spring-release-notes\">Spring release notes</h1>","summary":"<p>What changed in the editor this quarter.</p>","body":"<p>The body text goes here.</p>"} |
setHTML(map) | Charge chaque racine nommée dans la table ; celles qui n’y figurent pas restent inchangées. |
onActiveChange(fn) | Appelle fn({ active, editor }) lorsqu’une autre racine devient active. Renvoie une fonction qui retire l’écouteur. |
getCapabilities() | { sharedToolbar: true, sharedGroupApi: true, perRootUndo: true, sharedUndoStack: false, selectionAcrossRoots: false, sharedCollaborationSession: false, note } |
title.multiRoot.onActiveChange(function (e) {
document.getElementById("where").textContent = "Editing: " + e.active;
});
fetch("/api/article/42", { method: "PUT", body: JSON.stringify(title.multiRoot.getHTML()) });
Utilisation
Cliquer dans une zone, ou lui donner le focus de toute autre manière (y compris avec focusRoot()), l’active : sa barre apparaît et les autres sont masquées. Les boutons agissent sur cette zone. Dans le test, sélectionner la fin du corps puis cliquer sur Bold a enregistré <p>The body text goes h<b>ere.</b></p> dans body sans modifier les autres racines.
À savoir
- Les zones sont des éditeurs distincts. L’annulation est propre à chaque zone, une sélection ne peut pas s’étendre sur deux zones et, en collaboration, chacune se synchronise séparément.
getCapabilities()indique la même chose. - Les barres masquées n’occupent aucun espace, donc le contenu en dessous se déplace d’une hauteur de barre lorsque la zone active change.
- Redimensionner la fenêtre réaffiche toutes les barres dans la version 2.6.12, jusqu’au passage à une autre zone. Le code adaptatif de l’éditeur les restaure.
multiRootToolbarHostne fonctionne pas dans la version 2.6.12. Une barre déplacée dans l’hôte perd les styles de l’éditeur (ses icônes deviennent très grandes), et les barres déjà déplacées ne sont plus masquées : elles s’accumulent lors des changements de zone. Laissez les barres à leur place.- Chaque zone est un éditeur normal avec sa configuration ; les barres peuvent donc différer d’une zone à l’autre. Définissez le même
multiRootGroupsur toutes.
Voir aussi : démonstration de plusieurs éditeurs sur une page, récupérer le HTML.