Fermer

mai 25, 2021

Ajouter un composant éditeur en toute simplicité


Les éditeurs de texte enrichi sont utilisés dans de nombreuses applications React. Heureusement, vous n'êtes pas obligé d'en créer un vous-même. Dans cet article, vous apprendrez à ajouter facilement un éditeur de texte enrichi React à l'aide de la bibliothèque de composants KendoReact et à implémenter certaines de ses fonctionnalités impressionnantes.

Fréquemment utilisé dans les applications React, un éditeur de texte enrichi ou un éditeur WYSIWYG vous voyez ce que vous obtenez) est un excellent moyen de permettre aux utilisateurs de créer du texte riche avec des listes, des images, des vidéos et plus encore. Heureusement, vous n'avez pas à en créer un vous-même, car il existe des éditeurs prêts à l'emploi qui offrent une variété de fonctionnalités. Dans cet article, vous apprendrez à ajouter facilement un React Rich Text Editor à partir de la bibliothèque de composants KendoReact et à implémenter certaines de ses fonctionnalités phares.

L'éditeur de texte enrichi KendoReact se construit sur la boîte à outils ProseMirror étendant ses capacités solides avec des fonctionnalités telles que édition de démarque plugins et exportation au format PDF et Excel. KendoReact propose une installation extrêmement simple, trois thèmes à choisir (ou à personnaliser), ainsi qu'une multitude de fonctionnalités qui ne sont normalement pas présentes dans les bibliothèques de composants React UI prêtes à l'emploi.

Project Setup [19659005] Avant de commencer, nous devons créer un projet React. Pour créer rapidement un nouveau projet, vous pouvez utiliser Create React App ou Vite . Pour cette démo, nous allons utiliser Create React App. Vous pouvez créer un projet React en exécutant l'une des commandes ci-dessous dans votre terminal.
 npx create-react-app my-kendo-react-editor
cd my-kendo-react-editor
npm début

KendoReact propose un éditeur React puissant et riche en fonctionnalités. Il fournit de nombreuses fonctionnalités utiles et, pour cette raison, nécessite quelques dépendances. Ci-dessous, vous pouvez voir la liste des bibliothèques que nous devrons installer.

  • @ progress / kendo-react-editor
  • @ progress / kendo-react-intl
  • @ progress / kendo-drawing
  • @ progress / kendo-licensing
  • @ progress / kendo-react-boutons
  • @ progress / kendo-react-dialogs
  • @ progress / kendo-react-dropdowns
  • @ progress / kendo-react-inputs
  • @ progress / kendo-react-layout
  • @ progress / kendo-react-pdf
  • @ progress / kendo-react-popup
  • @ progress / kendo-react-progressbars
  • @ progress / kendo-react-treeview

Vous pouvez copier le texte ci-dessous et le coller dans votre terminal. Si vous utilisez yarn remplacez simplement npm install par yarn add .

 npm install @ progress / kendo-react-editor @ progress / kendo -react-intl @ progress / kendo-drawing @ progress / kendo-licensing @ progress / kendo-react-buttons @ progress / kendo-react-dialogs @ progress / kendo-react-dropdowns @ progress / kendo-react-inputs @progress / kendo-react-layout @ progress / kendo-react-pdf @ progress / kendo-react-popup @ progress / kendo-react-progressbars @ progress / kendo-react-treeview

Outre les dépendances requises par l'éditeur de texte enrichi, nous devons également installer l'un des thèmes Kendo UI . Pour cette démo, nous allons utiliser le Thème par défaut développé par les experts UX de Progress Telerik.

 npm install --save @ progress / kendo-theme-default

Ensuite, nous devons importer les styles de thème dans le fichier App.jsx .

 import   '@ progress / kendo-theme-default / dist / all.css' [19659028]; 

Note sur le paquetage kendo-licensing : KendoReact est une bibliothèque d'interface utilisateur développée par des professionnels et distribuée sous une licence commerciale. Son utilisation nécessite soit une clé de licence commerciale, soit une clé de licence d'essai active, facilement acquise en suivant ces étapes .

Nous avons mis en place toutes les bases. Ajoutons un éditeur à l'application React.

Ajout de l'éditeur KendoReact à une application React

Commençons par créer un fichier de contenu qui contiendra le texte initial de l'éditeur.

src / content.js [19659034] const content = `

L'éditeur KendoReact permet à vos utilisateurs d'éditer du HTML d'une manière familière et conviviale.
L'éditeur fournit le moteur d'édition HTML de base, qui comprend mise en forme du texte, hyperliens et listes. Le composant produit un code HTML identique dans tous les principaux navigateurs, suit les normes d'accessibilité et fournit une API pour la manipulation de contenu.

Les fonctionnalités incluent:

  • Formatage du texte
  • Listes à puces et numérotées
  • Hyperliens [19659038] Prise en charge de plusieurs navigateurs
  • Sortie HTML identique dans tous les navigateurs

` ;

exportation default content ;

src / App.css

 .app   {
   max-width :   1180  px ; 
   margin [19659028]:   0  auto ; 
   padding :   2  rem ; 
} 

src / App.js

 import  React  from   "react" ; 
 import   "./ App.css" ; 
 import   { Editor  EditorTools }   from   "@ progress / kendo-react-editor" ; [19659063] import  contenu  de   "./ content" ; 

 const   {
  Gras 
  Italique 
  Souligner 
  AlignLeft 
  AlignRight 
  AlignCenter 
  Retrait 
  Outdent 
  OrderedList 
  UnorderedList 
  Annuler 
  Refaire 
  Lien 
  Dissocier 
}   =  EditorTools ; 

 function   App  ()   {
   return   ([19659085] < div   className  =  " app "  > 
       < Editor 
         tools  =  { [
           [ Gras  Italique  Souligné ] 
           [ Annuler  Refaire ] 
           [ Link  Unlink ] 
           [ AlignLeft  AlignCenter  AlignRight ] 
           [ OrderedList  UnorderedList  Indent  Indent  ] Outdent ] 
        ] }  
         contentStyle  =  { { height :   320 [19659067]} }  
         defaultContent  =  { content } 
       />  
     </  div  > 
  ) ; 
} 

 export   default  App ; 

Vous trouverez ci-dessous un exemple d'implémentation StackBlitz interactif de l'éditeur KendoReact WYSIWYG.

Fonctionnalités de l'éditeur React

L'éditeur de texte riche de KendoReact offre de nombreuses fonctionnalités utiles, et nous allons maintenant en couvrir quelques-unes. que l'on ne trouve pas souvent dans les éditeurs React WYSIWYG.

Rechercher et remplacer

L'une des fonctionnalités notables fournies par l'éditeur KendoReact est «Rechercher et remplacer». L'ajouter à l'éditeur est aussi simple que de passer le composant FindAndReplace dans l'accessoire tools comme illustré ci-dessous.

src / App.js

 import  React  from   "react" ; 
 import   "./ App.css" ; 
 import   { Editor  EditorTools }   from   "@ progress / kendo-react-editor" ; 
 import  content  from   "./ content "; 

 const   {
  FindAndReplace 
}   =  EditorTools ; 

 function   App  ()   {
   return   ([19659085] < div   className  =  " app "  > 
       < Editor 
         tools  =  { [
           [ FindAndReplace ] 
        ] }  
         contentStyle  =  { { height :   320  } }  
         defaultContent  =  { content } 
       />  
     </  div > 
  ) ; 
} 

 export   default  App ; 

Le modal «Rechercher et remplacer» fournit des filtres améliorés qui peuvent être utilisés pour faire correspondre une casse spécifique, des mots entiers uniquement, cycliques, ainsi que des expressions régulières. Après avoir trouvé une correspondance, vous pouvez remplacer le mot spécifique ou tous les mots correspondants par un autre texte.

 Rechercher et remplacer

Il existe des scénarios dans lesquels il est intéressant de permettre aux utilisateurs de imprimer ou exporter le contenu de l'éditeur vers un PDF. Avec KendoReact Editor, l'ajout de ces fonctionnalités est un jeu d'enfant car – comme dans l'exemple précédent – il suffit d'ajouter plus d'outils d'édition, appelés Print et Pdf et de les transmettre au Editor component.

src / App.js

 import  React  from   "react" ; 
 import   ] "./ App.css" ; 
 import   { Editor  EditorTools }   from   "@ progress / kendo-react -editor "; 
 import  content  from  " ./ content "; 

 const   { FindAndReplace  Pdf  Print }   =  EditorTools ; 

 function   App  ()   {
   return [19659067] (
     < div   className  =  " app "  [19659028]> 
       < Outils de l'éditeur 
          =  { [ [ FindAndReplace  Pdf  Imprimer ] ] }  
         contentStyle  =  { { hauteur :   320  } [19659028]}  
         defaultContent  =  { content } 
       />  
     </  div > 
  ) ; 
} 

 exportation   par défaut  App ; 

 Un bouton d’impression fait apparaître la boîte de dialogue d’impression et le bouton d’exportation PDF télécharge un fichier PDF du contenu.

De plus, il est possible de personnaliser le PDF exporté. Pour ce faire, créez un composant wrapper autour du composant Pdf fourni par KendoReact et transmettez les options souhaitées à savePdfOptions prop.

 import  React  from   "react" ; 
 import   "./ App.css" ; 
 import   { Editor  EditorTools } [19659045] de   "@ progress / kendo-react-editor" ; 
 import  content  from   "./ content" ; 

 const   ] { FindAndReplace  Pdf  Print }   =  EditorTools ; 

 const   CustomPdf   =  props  =>   (
   < Pdf 
     { ...  props } 
     savePdfOptions  =  { {
      fileName :   "React Rich Text Editor" 
      paperSize :   "A4" 
      marge :   "3cm" 
    } } 
   />  
) ; 

 function   App  ()   {
   return   (
     < div   className  =  " app "  [19659028]> 
       < Outils de l'éditeur 
          =  { [ [ FindAndReplace  CustomPdf  Imprimer ] ] }  
         contentStyle  =  { { height :   320  }  }  
         defaultContent  =  { content } 
       />  
     </  div > 
  ) [19659028]; 
} 

 exportation   par défaut  App ; 

Dans le code ci-dessus, nous avons configuré le nom du fichier, la taille du papier et la marge. Vous pouvez trouver toutes les options PDF possibles ici .

Coller à partir de Word / Excel / Outlook

Un autre avantage de l'éditeur de texte enrichi KendoReact est le fait qu'il conserve une mise en forme correcte lors du collage à partir d'autres logiciels, tels que Microsoft Office Word, Excel et Outlook. Ci-dessous, vous pouvez voir de courts GIF qui montrent le collage du contenu de Word et Excel dans l'éditeur KendoReact WYSIWYG. Comme vous le verrez, l'éditeur préserve la mise en forme, les liens, les titres et, dans le cas d'un collage à partir d'Excel, il crée même un tableau bien formaté.

Coller à partir de Microsoft Word

 Le copier-coller de Microsoft Word dans l'éditeur préserve l'en-tête et le corps et un lien hypertexte.

Coller à partir de Microsoft Excel

 Copier et coller à partir d'exemples Microsoft Excel montre un tableau des fonctionnalités développées par mois. Ce format de tableau est correctement inséré dans l'éditeur KendoReact.

Accessibilité, globalisation et prise en charge RTL

Les applications peuvent servir les utilisateurs du monde entier, et il est crucial de fournir une expérience accessible et facile à utiliser. Tout d'abord, l'éditeur KendoReact suit les normes d'accessibilité, de sorte que les utilisateurs handicapés et handicapés peuvent l'utiliser. De plus, il a également un grand soutien pour l’internationalisation. Par défaut, les outils d'édition sont en anglais, comme indiqué sur l'image ci-dessous:

 Par défaut, l'éditeur KendoReact utilise la langue anglaise pour les outils et les info-bulles. Le survol du bouton B, par exemple, affiche une info-bulle avec 'Gras'.

Cependant, nous pouvons facilement fournir nos propres traductions pour les outils d'édition. Tout d'abord, nous devons créer un objet avec des messages de traduction. Vous trouverez ci-dessous un exemple pour la langue allemande.

src / deMessages.js

 export   const  deMessages  =   {
  éditeur :   {
    gras :   "Fett" 
    italique :   "Kursiv" 
    souligné :   "Unterstrichen" 
    barré :   "Durchgestrichen" 
    indice :   "Tiefgestellt" 
    exposant :   "Hochgestellt" 
    hyperlien :   "Hyperlink einfügen" 
     "hyperlink-dialog-title" :   "Hyperlink einfügen" 
     "hyperlink-dialog-content -adresse ":  " Web-Adresse "
    " hyperlink-dialog-content-title ":  " Titel "
    " hyperlien -dialog-content-newwindow ":  " Link in einem neuen Fenster öffnen "
    " hyperlink-dialog-cancel ":  " Abbrechen "
     "hyperlink-dialog-insert" :   "Einfügen" 
    image :   "Bild einfügen" 
     "image-dialog-title" :   "Bild einfügen" 
     "image-address" [19659028]:   "Web-Adresse" 
     "image-title" :   "Titel" 
     "image-altText" : [19659027] "Abwechselnder Text" 
     "image-width" :   "Breite (px)" 
     "image-height" :   "Höhe (px)" 
     "image-cancel" :   "Abbrechen" 
     "image-insert" :   "Einfügen" 
    viewHtml :   "HTML anzeigen" 
     "viewHtml-dialog-title" :   "HTML anzeigen" 
     "viewHtml-cancel" [19659028]:   "Abbrechen" 
     "viewHtml-update" :   "Aktualisieren" 
    Dissocier :   "Hyperlink entfernen" 
    annuler :   "Rückgängig machen" 
    refaire :   "Wiederholen" 
    fontSize :   "Größe" 
    fontName :   "Schrift" 
    format :   "Absatzstil" 
    alignLeft :   "Linksbündig" 
    alignRight :   "Rechtsbündig" 
    alignCenter :   "Zentriert" 
    tiret :   "Einzug vergrößern" 
    outdent :   "Einzug verkleinern" 
    orderList :   "Numerierte Liste" 
    bulletList :   "Aufzählliste" 
  } 
} ; 

Ensuite, nous devons utiliser la méthode loadMessages du package @ progress / kendo-react-intl et LocalizationProvider de sorte que l'éditeur React WYSIWYG peut accéder aux traductions. Les paramètres régionaux actuels peuvent être spécifiés en passant le paramètre language au LocalizationProvider . Voir l'exemple de code ci-dessous.

src / App.js

 import  React  from   "react" ; 
 import   " ./App.css"[19659028Often;[19659063</font>import[19659067</font>{ Editor  EditorTools }   from   "@ progress / kendo-react-editor "; 
 import   { loadMessages  LocalizationProvider }   from  " @ progress / kendo-react-intl "; 
 import   { deMessages }   from   "./ deMessages" ; 
 import  content  from   "./ content "; 

 loadMessages  ( deMessages  " de ") ; 

 const   {
  FindAndReplace 
  Pdf 
  Gras 
  Italique 
  Souligner 
  AlignLeft 
  AlignRight 
  AlignCenter 
  Retrait 
  Outdent 
  OrderedList 
  UnorderedList 
  Annuler 
  Refaire 
  Lien 
  Dissocier 
}   =  EditorTools ; 

 function   App  ()   {
   return   ([19659085] < LocalizationProvider   language  =  " de "  > 
       < div   className  =  " app "  > 
         < Editor 
           tools  =  { [
             [ Gras  Italique  Souligné ] 
             [ Annuler  Rétablir ] [19659518] [ Link  Unlink ] 
             [ AlignLeft  AlignCenter  AlignRight  ] 
             [ OrderedList  UnorderedList  Indent  Outdent ] 
             [ FindAndReplace  Pdf ] 
          ] }  
           contentStyle  =  { { ] height :   320  } }  
           defaultContent  =  { content }  
         /> [19659090] </  div >  
     </  LocalizationProvider > 
  ) ; 
} 

 export   default  App ; 

Si vous avez plus de traductions, vous pouvez appeler la fonction loadMessages plusieurs fois. Désormais, chaque fois que vous survolez les outils de l'éditeur, les étiquettes doivent être en allemand, comme indiqué dans le GIF ci-dessous.

 En survolant les boutons gras, italique et souligné, les info-bulles indiquent: Fett, Kursiv et Unterstrichen ]

Enfin, si vous avez des utilisateurs dont la langue principale utilise les scripts de droite à gauche, l'éditeur peut être mis en mode RTL simplement en passant le dir = "rtl" prop. [19659555] < Editeur
dir = "rtl"

/ >

L'image ci-dessous montre à quoi devrait ressembler l'éditeur après avoir changé la direction du texte en RTL.

 KendoReact Editor prend en charge RTL. L'éditeur affiche du texte anglais aligné à droite, mais la ponctuation se déplace vers la gauche. Les puces sont sur la droite.

Style de l'éditeur et prise en charge des thèmes

KendoReact propose trois thèmes prêts à l'emploi: Default, Bootstrap et Material. Au début de cette démo, nous avons installé et importé le thème par défaut. Cependant, si vous souhaitez modifier les styles de thème par défaut, vous pouvez facilement le faire.

Initialement, l'éditeur KendoReact est rendu dans un iframe, car de cette façon, les styles d'application ne modifieront pas accidentellement le style de l'éditeur, mais il peut également être rendu dans un mode div .

Nous allons passer par trois manières différentes de styliser et de thématiser l'éditeur KendoReact:

  • en mode frame
  • en mode div
  • via variables SCSS de thème

Pour plus de détails sur le style, vous pouvez vous référer à ce blog: Comment ajouter des styles personnalisés aux composants KendoReact avec Sass .

Mise à jour des styles de l'éditeur KendoReact en mode «iframe» [19659570] La mise à jour des styles dans le mode iframe est un peu plus complexe que dans le mode div car nous devons injecter des styles dans l'iframe.

Nous pouvons le faire en passant un rappel à l'accessoire onMount . Le rappel recevra un événement comme premier argument par lequel nous pouvons accéder à l'élément DOM à l'intérieur de l'iframe . C'est à ce moment que nous pouvons créer un nouveau nœud de texte de style et l'injecter.

Dans l'extrait ci-dessous, nous modifions la taille de police et la couleur par défaut du contenu de l'éditeur.

src / App.js


 const  editorStyles  =   `
    .k-content {
      taille de la police: 24px;
      couleur: # 92400E;
    }
` ; 

 function   App  ()   {
   const   onMount   =  event  => [19659067] {
     const  iframeDocument  =  event .  dom .  ownerDocument ; 
     const  style  =  iframeDocument .  createElement  ( "style" ) ; 
    style .  appendChild  ( iframeDocument .  createTextNode  ( editorStyles ) ) ; 
    iframeDocument .  head .  appendChild  ( style ) ; 
  } ; 

   return   ([19659085] < div   className  =  " app "  > 
       < Editor 
         tools  =  { [
           [ FindAndReplace  Pdf  Print ] 
        ] }  
         contentStyle  =  { { height :   320  } }  
         defaultContent  = [19659028] { contenu }  
         onMount  =  { onMount } 
       />  
     </  div > 
  ) ; 
} 

 export   default  App ; 

Ci-dessous, vous pouvez voir à quoi devrait ressembler l'éditeur maintenant. La taille de la police doit être plus grande et la couleur doit être brunâtre.

 Styles mis à jour en mode iframe de l'éditeur: La taille de la police est plus grande et la couleur est brune

Mise à jour des styles de l'éditeur KendoReact en mode «div»

Pour changer le mode éditeur d'une iframe à div, nous pouvons passer le defaultEditMode = "div" prop.

 < Editor
  defaultEditMode  =  "div" 
  
   / > 

Nous n'avons plus besoin du rappel onMount. Au lieu de cela, nous pouvons nous diriger vers le fichier App.css et y ajouter nos propres styles.

src / App.css

 .k-editor   .k-editor- content   {
   font-size :   22  px ; 
   color :   # 53d2fa ; 
 } 

Ci-dessous, vous pouvez voir à quoi devrait ressembler l'éditeur maintenant. La taille de la police doit être un peu plus grande et la couleur doit être bleuâtre.

 Styles mis à jour en mode éditeur div: La police est un peu plus grande et maintenant une police sans empattement, et la couleur est un bleu clair

Remplacement des variables SCSS du thème

Une autre façon de mettre à jour les styles de l'éditeur consiste à personnaliser le thème. Tout d'abord, assurez-vous d'installer le package sass en exécutant npm install sass ou yarn add sass car le thème de l'interface utilisateur de Kendo peut être personnalisé en remplaçant les variables SCSS. De plus, supprimez les styles ajoutés dans la section précédente du fichier App.css . Ensuite, nous devons créer un nouveau fichier appelé theme.scss et déplacer l'importation de thème du fichier index.js .

src / theme.scss

 ] @import   "@ progress / kendo-theme-default / dist / all.scss" ; 

Notez que l'extension d'importation du thème Kendo UI est passée de all.css à all.scss . Enfin, importez le fichier theme.scss .

src / index.js

 import  React  de   "react"  ; 
 import  ReactDOM  de   "react-dom" ; 
 import   "./ index.css" ; 
 import   "./theme.scss"[19659028Often;[19659044Often App  from  " ./ App "; 

ReactDOM .  render  (
   < React .  StrictMode > 
     < App  / > [19659689] < /  React .  StrictMode > 
  document .  getElementById  ( "root" ) 
) ; 

Les styles devraient fonctionner comme avant, alors maintenant, remplaçons certains d’entre eux. Revenez au fichier theme.scss .

src / theme.scss

 $ editor-border-width  :   3  px ; 
 $ editor-font-size  :   25  px ; 
 $ editor-font-family  : [19659027] "Helvetica Neue" Arial, sans-serif ; 
 @import   "@ progress / kendo-theme-default / dist / all.scss" ; 

Nous avons changé la largeur par défaut de la bordure, la taille de la police et la famille de polices. Si vous souhaitez essayer les méthodes que nous venons de décrire, voici un projet StackBlitz interactif:

Pour en savoir plus sur la personnalisation des thèmes KendoReact, consultez la page de documentation Styling & Themes .

Conclusion

KendoReact propose un éditeur React WYSIWYG très puissant et riche en fonctionnalités. C'est un excellent choix lorsque vous souhaitez fournir à vos utilisateurs des fonctionnalités de texte enrichi. Nous n'avons couvert que quelques fonctionnalités de l'éditeur KendoReact, vous devriez donc absolument consulter la documentation pour en savoir plus sur toutes les fonctionnalités qu'il offre.




Source link