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

RealKinetic/witful-quill-internal

 
 

Repository files navigation

witful-quill-internal

Native web components for the Quill Rich Text Editor

Built With Stencil

Installation

  • npm install witful-quill-internal
  • load node_modules/witful-quill-internal/dist/quill-components.js in your index.html or add it to your build process or project
  • do not forget to install quill 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
  • strict - default: true, sets editor in strict mode
  • scrollingContainer - default '.ql-editor', allows to set scrolling container
  • 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
  • preserveWhitespace - default: false - possbility to use a pre-tag instead of a div-tag for the contenteditable area to preserve duplicated whitespaces | caution if used with syntax plugin Related issue

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'}"
  • strict - default: true, sets editor in strict mode
  • debug - set log level warn, error, log or false to deactivate logging, default: warn
  • preserveWhitespace - default: false - possbility to use a pre-tag instead of a div-tag for the contenteditable area to preserve duplicated whitespaces | caution if used with syntax plugin Related issue

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/witful-quill-internal@latest/dist/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

Note: has issues with parcel bundler. Use script tag instead.

  • Run npm install witful-quill-internal --save
  • Put a script tag similar to this <script src='node_modules/witful-quill-internal/dist/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 witful-quill-internal --save
  • Add an import to the npm packages import quill-components;
  • Then you can use the element anywhere in your template, JSX, html etc

About

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

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • TypeScript 89.1%
  • HTML 10.8%
  • CSS 0.1%