Coder Social home page Coder Social logo

trendingtechnology / preact-markup Goto Github PK

View Code? Open in Web Editor NEW

This project forked from developit/preact-markup

0.0 1.0 0.0 179 KB

:zap: Render HTML5 as VDOM, with Components as Custom Elements!

Home Page: http://npm.im/preact-markup

License: MIT License

JavaScript 100.00%

preact-markup's Introduction

preact-markup NPM travis-ci

A <Markup> component that renders HTML (or XML) using Virtual DOM, mapping a set of element names to Components. Works beautifully with Preact.

Think of this like an HTML5 renderer where Web Components are implemented as Preact Components.

JSFiddle Demo

demo preview

Use Cases

  • Rendering Markdown in VDOM - see preact-markdown
  • Component-base app design and/or layout via HTML
  • Define app structure using a standard HTML CMS
  • Support arbitrary component extensions by allowing safe HTML
  • Build using Custom Elements, implemented using React's API

Overview

The <Markup /> component takes some markup, an optional mapping of custom element names to components, and an optional type of either xml or html.

In it's simplest form, <Markup /> is just a diffing XML/HTML renderer. It only re-renders when you change the markup prop.

import Markup from 'preact-markup';

let html = `<h1>hello</h1> <p>Testing 1 2 3...</p>`;
render(<Markup markup={html} />, document.body);

Note: by default, content is parsed as XML, which may be too strict for your content but is the fastest option. Pass type="html" to parse as HTML.

Custom Elements via Components

The real value of <Markup /> is seen when passing a components prop. This prop is an Object that lets us map any HTML/XML element name to a preact Component. The mapped component is injected and rendered as if it had been referenced from within JSX. HTML attributes defined on the custom element in markup get passed to the mapped Component as props.

import Markup from 'preact-markup';

const Sidebar = ({ title, children }) => (
	<aside class="sidebar">
		<h2>{ title }</h2>
		{ children }
	</aside>
);

let html = `
<h1>Hello, World</h1>
<sidebar title="My Sidebar!">
	<p>Sidebar contents.</p>
</sidebar>
`;
render(<Markup markup={html} components={{ Sidebar }} />, document.body);

When render() is invoked, Our <Sidebar /> component is substituted for the <sidebar> element, which means it gets mounted and rendered like a normal Preact Component. The result is this HTML DOM:

<div class="markup">
	<h1>Hello, World</h1>
	<aside class="sidebar">
		<h2>My Sidebar!</h2>
		<p>Sidebar contents.</p>
	</aside>
</div>

Subsequent render()s diff against that DOM just like a normal JSX rendering flow would.

Optional properties

type - By default, content is parsed as XML. Pass type="html" to use an HTML parser.

trim - Trimming tries to emulate HTML semantics by default, but these differ from JSX semantics. Pass false to retain all whitespace, or all to omit all whitespace.

onError - Suppress XML/HTML parse errors and instead pass them to this function.

allow-scripts - By default, preact-markup sanitizes the rendered HTML by removing script tags. The allow-scripts property re-enables script tags, executing any JavaScript code within them.

Example
let markup = `<em>hello!</em><h1>asdflkj</h1><script>alert("Hello world");</script>`;
render(<Markup markup={markup} allow-scripts />, document.body);

License

MIT

preact-markup's People

Contributors

akeemmclennon avatar arusanov avatar developit avatar marvinhagemeister avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.