Skip to content

PolymerElements/prism-element

Folders and files

NameName
Last commit message
Last commit date
Jan 24, 2018
Jul 26, 2018
Jul 26, 2018
Aug 16, 2018
Aug 16, 2018
Sep 7, 2018
Jul 26, 2018
Sep 14, 2018
Aug 8, 2018
Mar 8, 2018
Jun 23, 2018
Sep 14, 2018
Sep 14, 2018
Oct 24, 2018
Jul 26, 2018
Jul 26, 2018
Jun 5, 2018

Repository files navigation

Published on NPM Build status Published on webcomponents.org

<prism-highlighter>

Syntax highlighting via Prism.

Place a <prism-highlighter> in your document, preferably as a direct child of <body>. It will listen for syntax-highlight events on its parent element, and annotate the code being provided via that event.

The syntax-highlight event's detail is expected to have a code property containing the source to highlight. The event detail can optionally contain a lang property, containing a string like "html", "js", etc.

This flow is supported by <marked-element>.

See: Documentation, Demo.

Usage

Installation

npm install --save @polymer/prism-element

In an html file

<html>
  <body>
    <div id="parent">
      <prism-highlighter></prism-highlighter>
      <div id="output"></div>
    </div>
  </body>
  <script type="module">
      import '@polymer/prism-element/prism-highlighter.js';
      import '@polymer/prism-element/prism-theme-default.js';
      import '@polymer/polymer/lib/elements/custom-style.js';
      import {html} from '@polymer/polymer/lib/utils/html-tag.js';

      // import prism theme styles
      const template = html`
        <custom-style>
          <style include="prism-theme-default"></style>
        </custom-style>
      `;

      document.head.appendChild(template.contents);

      const parent = document.getElementById('parent');
      const output = document.getElementById('output');
      const ev = new CustomEvent('syntax-highlight');

      // enter code and language here
      ev.detail = {
        code: 'p { background-color: blue }',
        lang: 'css',
      };
      parent.dispatchEvent(ev);

      // detail is modified by prism-highlighter
      output.innerHTML = ev.detail.code;
    </script>
</html>

In a Polymer 3 element

import {PolymerElement, html} from '@polymer/polymer';
import '@polymer/prism-element/prism-element.js';
import '@polymer/prism-element/prism-highlighter.js';
import '@polymer/prism-element/prism-theme-default.js';

class SampleElement extends PolymerElement {
  static get template() {
    return html`
      <style include="prism-theme-default"></style>
      <div id="parent">
        <prism-highlighter></prism-highlighter>
        <div id="output"></div>
      </div>
    `;
  }

  connectedCallback() {
    super.connectedCallback();
    const ev = new CustomEvent('syntax-highlight');

    // enter code and language here
    ev.detail = {
      code: 'p { background-color: blue }',
      lang: 'css',
    };
    this.$.parent.dispatchEvent(ev);

    // detail is modified by prism-highlighter
    this.$.output.innerHTML = ev.detail.code;
  }
}
customElements.define('sample-element', SampleElement);

Contributing

If you want to send a PR to this element, here are the instructions for running the tests and demo locally:

Installation

git clone https://github.com/PolymerElements/prism-element
cd prism-element
npm install
npm install -g polymer-cli

Running the demo locally

polymer serve --npm
open http://127.0.0.1:<port>/demo/

Running the tests

polymer test --npm