Création d'une intégration d'éditeur HTML personnalisée
Vous pouvez utiliser des éditeurs HTML personnalisés dans toutes les zones HTML de l'interface de création ou dans des éléments HTML spécifiques définis dans un modèle de création. Les zones HTML personnalisées sont utilisées pour intégrer des éditeurs tiers dans l'interface de création.
Une zone HTML personnalisée est un élément JSP qui est affiché à la place de la zone HTML standard de l'interface de création. La zone personnalisée est composée d'un certain nombre de pièces qui fonctionnent conjointement pour permettre à l'utilisateur d'identifier la zone modifiée, d'enregistrer la personnalisation avec l'interface de création, d'accéder aux boîtes de dialogue de zone HTML standard et de mettre à jour des valeurs lorsque des modifications doivent être validées. L'élément com.ibm.workplace.wcm.api.authoring.HTMLEditorBean
, disponible dans l'élément JSP, fournit des métadonnées de zone de base, telles que le nom et une indication sur le caractère éditable de la zone. La bibliothèque JavaScript ibm.wcm.ui.html.HTMLEditor
définit la structure côté client qui intègre la zone personnalisée sur l'interface de création. Chaque intégration doit implémenter son propre HTMLEditor.
Une valeur de chemin de contexte dynamique peut être définie en ajoutant un jeton au chemin de contexte qui correspond à une paire clé/valeur au fournisseur d'environnement du service de configuration Web Content Manager. Lorsque cette clé est utilisée comme jeton dans la zone de valeur JSP , elle est remplacée de manière dynamique au moment de l'affichage. Par exemple: [my.custom.key];myfile where my.custom.key is a constant within the Web Content Manager configuration service.
Les fichiers JSP qui sont stockés dans l'application PA_WCM_Authoring_UI ne sont pas rechargés, même lorsqu'ils sont mis à jour. Vous devez redémarrer le serveur ou placer le fichier JSP dans une application Web distincte configurée en vue du rechargement des fichiers JSP pour que les modifications que vous apportez au fichier JSP soient affichées.
Exemple d'intégration
Voici un exemple simple d'une intégration de base montrant toutes les étapes nécessaires au rendu et à l'enregistrement d'une zone personnalisée avec l'interface de création. Dans cet exemple, la zone de texte utilisée pour modifier le code HTML est étendue à l'aide du dijit de zone de texte Dojo.
ibm.wcm.ui.html.HTMLEditor
personnalisé. L'élément ibm.sample.Editor
définit un constructeur permettant de capturer le dijit en vue de gérer et d'implémenter les méthodes nécessaires à l'intégration avec l'interface de création. this.showToolbar(true)
qui démarre la méthode sur l'objet ibm.wcm.ui.html.HTMLEditor
qui contrôle la visibilité de la barre d'outils.ibm.sample.Editor
est créée. ibm.sample.Editor
dans l'élément JSP, mais il est plus efficace de le charger à l'aide de la bibliothèque JavaScript statique. Cela est important car si vous disposez de plusieurs éditeurs sur la page, la définition JavaScript de ibm.sample.Editor
est chargée à chaque fois, mais seule la dernière est chargée et utilisée.<%-- /* Sample HTML Editor */ --%> <%@ taglib uri="/WEB-INF/tld/portlet.tld" prefix="portletAPI" %> <%@ page import="com.ibm.workplace.wcm.api.authoring.HTMLEditorBean" %><portletAPI:init /><% HTMLEditorBean editor = (HTMLEditorBean) request.getAttribute("EditorBean"); // The name of the editor corresponds to the ID of the text area field that will be rendered within the authoring form String docId = editor.getName(); %> <script> dojo.declare("ibm.sample.Editor", [ibm.wcm.ui.html.HTMLEditor], { /** Hold a reference to the text area we enriched. */ theTextArea: null, /** Simple overloaded constructor that will dynamically enrich the target text area with a dojo dijit text area. */ constructor: function(editorId, textArea) { this.inherited(arguments); this.theTextArea = textArea; textArea.startup(); this.showToolbar(true); }, /** This method is called by the HTML/RTF field dialogs. For example when the user has selected a tag to insert into the field. */ insertMarkupAtCursor: function(markup){ // Do cross browser text insertion if (document.selection && (!this.theTextArea.textbox.selectionStart || this.theTextArea.textbox.selectionStart === null)) { // Handle IE, which defines document.selection this.theTextArea.focus(); var textRange = document.selection.createRange(); textRange.text = markup; } else if (this.theTextArea.textbox.selectionStart || this.theTextArea.textbox.selectionStart == '0') { // Handle Mozilla, Opera, which define document.selectionStart // Create the new text for the text field. createRange() isn't supported by these browsers var startPos = this.theTextArea.textbox.selectionStart; var endPos = this.theTextArea.textbox.selectionEnd; var scrollTop = this.theTextArea.textbox.scrollTop; this.setMarkup(this.theTextArea.value.substring(0, startPos) + markup + this.theTextArea.value.substring(endPos, this.theTextArea.value.length)); // Restore the cursor and scroll position which were lost by replacing the text field's text this.theTextArea.focus(); } }, /** This method is called when a user triggers the import markup action of the field. */ setMarkup: function(markup){ this.theTextArea.set("value", markup); }, /** This method is called whenever the authoring interface requires the current value of the field such as when the export markup button is clicked in edit mode. */ getMarkup: function(){ return this.theTextArea.value; }, /** This method will be called when the user submits the form to the server. This gives the integration an opportunity to update the text area field with the value that should be committed on the server. */ notifySubmit: function() { // As we are enriching the text area being submitted, the value // is already up to date and we do not need to do anything } }); require(["dijit/form/Textarea", "dojo/domReady!"], function(Textarea){ var textArea = new Textarea({name: '<%= docId %>', style: "width:100%;max-width:910px;min-height:200px;_height:200px;"}, '<%= docId %>'); new ibm.sample.Editor('<%= docId %>', textArea); }); </script>
Méthodes d'auxiliaire
L'élément ibm.wcm.ui.html.HTMLEditor
comprend un certain nombre de méthodes d'auxiliaire qui permettent de démarrer l'ensemble de boîtes de dialogue de zone HTML standard à l'aide d'un programme. Cela signifie qu'il est possible de masquer la barre d'outils de l'éditeur HTML et d'obtenir tout de même toutes les fonctionnalités exposées.
launchInsertImageDialog()
launchInsertLinkDialog(/* String */ linkText, /* String */ linkHref, /* String */ linkTarget, /* String */ linkDescription, /* String */ linkAttributes)
launchInsertTagDialog(/* boolean */ includeConsumableTags){