UNPKG

@lrnwebcomponents/lrn-markdown-editor

Version:

markdown editor wrapper with preview editor

129 lines (124 loc) 3.61 kB
import { LitElement, html, css } from "lit"; import "@lrnwebcomponents/mtz-marked-editor/mtz-marked-editor.js"; import "@lrnwebcomponents/mtz-marked-editor/lib/mtz-marked-control-generic-wrap.js"; import "@lrnwebcomponents/mtz-marked-editor/lib/mtz-marked-control-generic-line.js"; import "@lrnwebcomponents/mtz-marked-editor/lib/mtz-marked-control-link.js"; import "@lrnwebcomponents/simple-icon/simple-icon.js"; import "@lrnwebcomponents/simple-icon/lib/simple-icons.js"; import "@polymer/paper-input/paper-textarea.js"; import "@polymer/paper-input/paper-input.js"; class LrnMarkdownEditorEditor extends LitElement { /** * LitElement constructable styles enhancement */ static get styles() { return [ css` :host { display: block; } .mtz-controls { display: flex; width: 100%; } .mtz-toolbar { flex-grow: 5; } `, ]; } /** * LitElement render */ render() { return html` <mtz-marked-editor id="markededitor"> <div slot="controls" class="mtz-controls"> <mtz-marked-control-generic-wrap icon="editor:format-bold" title="Bold" syntax-prefix="**" syntax-suffix="**" keys="ctrl+b" ></mtz-marked-control-generic-wrap> <mtz-marked-control-generic-wrap icon="editor:format-italic" title="Italic" syntax-prefix="_" syntax-suffix="_" keys="ctrl+i" ></mtz-marked-control-generic-wrap> <mtz-marked-control-generic-line icon="editor:format-size" title="Heading" syntax-prefix="# " ></mtz-marked-control-generic-line> <mtz-marked-control-generic-line icon="editor:format-list-numbered" title="Ordered List" syntax-prefix="1. " ></mtz-marked-control-generic-line> <mtz-marked-control-generic-line icon="editor:format-list-bulleted" title="Unordered List" syntax-prefix="- " ></mtz-marked-control-generic-line> <mtz-marked-control-link icon="editor:insert-link" title="Link" ></mtz-marked-control-link> </div> <paper-textarea slot="textarea" label="Start typing..." value="${this.content}" @value-changed="${this._contentChanged}" ></paper-textarea> </mtz-marked-editor> `; } _contentChanged(e) { this.content = e.detail.value; } static get tag() { return "lrn-markdown-editor-editor"; } static get properties() { return { content: { type: String, }, }; } /** * LitElement properties changed */ updated(changedProperties) { changedProperties.forEach((oldValue, propName) => { if (propName === "content") { // notify this.dispatchEvent( new CustomEvent("content-changed", { detail: { value: this[propName], }, }), ); } }); } _changed(e) { var content = this.shadowRoot.querySelector("#markededitor").getContent(); this.content = content; this.dispatchEvent( new CustomEvent("content-updated", { bubbles: true, cancelable: true, composed: true, detail: { content: this.content }, }), ); } } customElements.define(LrnMarkdownEditorEditor.tag, LrnMarkdownEditorEditor); export { LrnMarkdownEditorEditor };