Skip to content

Native web components for the Quill Rich Text Editor built with stencil

License

Notifications You must be signed in to change notification settings

KillerCodeMonkey/stencil-quill

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

stencil-quill Build Status

Native web components for the Quill Rich Text Editor

Built With Stencil

Donate/Support

If you like my work, feel free to support it. Donations to the project are always welcomed :)

PayPal: PayPal.Me/bengtler

Buy Me A Coffee

Examples

Installation

  • npm install stencil-quill
  • load node_modules/stencil-quill/dist/quill-components.js in your index.html or add it to your build process or project
  • do not forget to install quill v2! and include it + theme css in your buildprocess, module or index.html! (the component is using the global Quill object)

QuillEditor component

HTML-Tag

<quill-editor content="" format="html" theme="snow"></quill-editor>

Config

  • Check the component readme
  • content - the base content of the editor passed as string or JSON string
  • readOnly (true | false) if user can edit content
  • formats - array of allowed formats/groupings
  • format - model format - default: html, values: html | text | json, sets the model value type - html = html string, json = quill operations as json string, text = plain text
  • modules - configure/disable quill modules, passed as JSON-string!, e.g toolbar or add custom toolbar via html element default is
{
  toolbar: [
    ['bold', 'italic', 'underline', 'strike'],        // toggled buttons
    ['blockquote', 'code-block'],

    [{ 'header': 1 }, { 'header': 2 }],               // custom button values
    [{ 'list': 'ordered'}, { 'list': 'bullet' }],
    [{ 'script': 'sub'}, { 'script': 'super' }],      // superscript/subscript
    [{ 'indent': '-1'}, { 'indent': '+1' }],          // outdent/indent
    [{ 'direction': 'rtl' }],                         // text direction

    [{ 'size': ['small', false, 'large', 'huge'] }],  // custom dropdown
    [{ 'header': [1, 2, 3, 4, 5, 6, false] }],

    [{ 'color': [] }, { 'background': [] }],          // dropdown with defaults from theme
    [{ 'font': [] }],
    [{ 'align': [] }],

    ['clean'],                                         // remove formatting button

    ['link', 'image', 'video']                         // link and image, video
  ]
};
  • theme - bubble/snow, default is snow
  • styles - set a styles object, e.g. styles="{height: '250px'}"
  • placeholder - placeholder text, default is Insert text here ...
  • bounds - boundary of the editor, default document.body, pass 'self' to attach the editor element
  • possbility to create a custom toolbar via a custom slot quill-toolbar:
<quill-component content="test">
  <div slot="quill-toolbar">
    <span class="ql-formats">
      <select class="ql-font">
        <option value="aref">Aref Ruqaa</option>
        <option value="mirza">Mirza</option>
        <option selected>Roboto</option>
      </select>
      <select class="ql-align" title="Aligment">
        <option selected></option>
        <option value="center"></option>
        <option value="right"></option>
        <option value="justify"></option>
      </select>
      <select class="ql-align" title="Aligment2">
        <option selected></option>
        <option value="center"></option>
        <option value="right"></option>
        <option value="justify"></option>
      </select>
    </span>
    <span class="ql-formats">
      <div id="counter"></div>
    </span>
  </div>
</quill-component>
  • customToolbarPosition - if you are working with a custom toolbar you can switch the position :). - default: top, possible values top, bottom
  • debug - set log level warn, error, log or false to deactivate logging, default: warn
  • defaultEmptValue - set the default empty value, e.g. empty string, default null

Full Quill Toolbar HTML

Events

  • editorInit - editor instance
editor
  • editorContentChange - text is updated by 'user'
{
  editor: editorInstance,
  html: html,
  text: text,
  content: content,
  delta: delta,
  oldDelta: oldDelta,
  source: source
}
  • editorSelectionChange - selection is updated, also triggered for onBlur and onFocus, because the selection changed
{
  editor: editorInstance,
  range: range,
  oldRange: oldRange,
  source: source
}
  • editorChange - text or selection is updated - independent of the source
{
  editor: editorInstance, // Quill
  event: 'text-change' // event type
  html: html, // html string
  text: text, // plain text string
  content: content, // Content - operatins representation
  delta: delta, // Delta
  oldDelta: oldDelta, // Delta
  source: source // ('user', 'api', 'silent' , undefined)
}

or

{
  editor: editorInstance, // Quill
  event: 'selection-change' // event type
  range: range, // Range
  oldRange: oldRange, // Range
  source: source // ('user', 'api', 'silent' , undefined)
}
  • editorFocus - editor is focused
{
  editor: editorInstance, // Quill
  source: source // ('user', 'api', 'silent' , undefined)
}
  • editorBlur - editor is blured
{
  editor: editorInstance, // Quill
  source: source // ('user', 'api', 'silent' , undefined)
}

QuillView component

It renders a readOnly quilljs editor without a border and toolbar. Does not provide any Events, but has similar properties.

HTML-Tag

<quill-view content="" format="html" theme="snow"></quill-view>

Config

  • Check the component readme
  • content - the base content of the editor passed as string or JSON string
  • formats - array of allowed formats/groupings
  • format - model format - default: html, values: html | text | json, sets the model value type - html = html string, json = quill operations as json string, text = plain text
  • modules - configure/disable quill modules, passed as JSON-string! - keep in mind toolbar will be set to false anyways
  • theme - bubble/snow, default is snow
  • styles - set a styles object, e.g. styles="{height: '250px'}"
  • debug - set log level warn, error, log or false to deactivate logging, default: warn
  • defaultEmptValue - set the default empty value, e.g. empty string, default null

QuillViewHTML component

It renders an quilljs html string as you would expect it without createing a quilljs instance.

HTML-Tag

<quill-view-html content="" theme="snow"></quill-view-html>

Config

  • Check the component readme
  • content - the base content of the editor passed as string or JSON string
  • theme - bubble/snow, default is snow

Using the components

Script tag

  • Publish to NPM
  • Put a script tag similar to this <script src='https://unpkg.com/stencil-quill/dist/quill-components/quill-components.js'></script> in the head of your index.html
  • Then you can use the element anywhere in your template, JSX, html etc

Node Modules

  • Run npm install stencil-quill --save
  • Put a script tag similar to this <script src='node_modules/stencil-quill/dist/quill-components/quill-components.js'></script> in the head of your index.html
  • Then you can use the element anywhere in your template, JSX, html etc

In a stencil-starter app

  • Run npm install stencil-quill --save
  • Add an import to the npm packages import quill-components;
  • Then you can use the element anywhere in your template, JSX, html etc