Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/phtmlorg/phtml

Transform HTML with JavaScript
https://github.com/phtmlorg/phtml

Last synced: about 18 hours ago
JSON representation

Transform HTML with JavaScript

Awesome Lists containing this project

README

        

# phtml [phtml][phtml]

[![NPM Version][npm-img]][npm-url]
[![Build Status][cli-img]][cli-url]
[![Support Chat][git-img]][git-url]

[phtml] is a tool for transforming HTML with JavaScript.

It fully embraces the HTML language, and aims to help you write and maintain
HTML that you _and future you_ feel good about.

phtml helps you compose [reusable templates and components](https://github.com/phtmlorg/phtml-template),
or automate [image size attributes](https://github.com/phtmlorg/phtml-image-size)
and [schema.org microdata](https://github.com/phtmlorg/phtml-schema) and [heading levels](https://github.com/phtmlorg/phtml-h-element),
or transform modern [CSS with PostCSS](https://github.com/phtmlorg/phtml-css)
and [JS with Babel](https://github.com/phtmlorg/phtml-js).

It works in the command line and Node, but also [Grunt], [Gulp],
[11ty][11ty], [Webpack], [Rollup], and even
[the browser itself][browser].

## Usage

Transform HTML files directly from the command line:

```bash
npx phtml source.html output.html
```

Include plugins directly from the command line:

```bash
npx phtml source.html output.html -p @phtml/markdown,@phtml/image-alt
```

Transform strings from the command line:

```bash
echo "

phtml **Markdown**

" | npx phtml -p @phtml/markdown

#

phtml Markdown


```

### Node

Add [phtml] to your build tool:

```bash
npm install phtml --save-dev
```

Use [phtml] to process your HTML:

```js
const phtml = require('phtml');

phtml.process(YOUR_HTML, /* processOptions */, /* pluginOrPlugins */);
```

#### Node Example

```js
const phtml = require('phtml');

const html = `
Super Title
Awesome Text
`;

phtml.process(html, { from: 'my-component.html' }).then(console.log);

/* Result {
from: 'component.html',
to: 'component.html',
root: Fragment {
name: '#document-fragment',
nodes: NodeList [
Element {
name: "my-component",
attrs: AttributeList [
{ name: "class", value: "main" }
],
nodes: NodeList [
Text "\n ",
Element {
name: "title",
nodes: NodeList [
Text "Super Title"
]
},
Text "\n ",
Element {
name: "text",
nodes: NodeList [
Text "Awesome Text"
]
},
Text "\n"
]
}
]
}
}
```

#### Using Plugins in Node

Add a [phtml] Plugin to your build tool:

```bash
npm install phtml-some-thing --save-dev
```

```js
const phtml = require('phtml');
const postHtmlSomeThing = require('phtml-some-thing');

phtml.use(
postHtmlSomeThing(/* pluginOptions */)
).process(YOUR_HTML);
```

## Plugins

You can find phtml plugins on npm.

https://www.npmjs.com/search?q=keywords:phtml-plugin

### Plugin Creation

Create plugins directly from the command line:

```bash
npm init phtml-plugin

# Plugin Name: Example (becomes `phtml Hello` / `phtml-hello`)
# Keywords: awesome,blossom (added to package.json keywords)
```

Once the command finishes, a new plugin is fully scaffolded with bare
functionality, documentation, and tests. Within the plugin directory,
functionality is added to `src/index.js`.

#### Advanced Plugin Creation

Create plugins using a new `Plugin` class:

```js
import phtml from 'phtml';

export default new phtml.Plugin('phtml-hello', pluginOptions => {
// initialization logic

return {
Element(element, result) {
// runtime logic, do something with an element
},
Root(root, result) {
// runtime logic, do something with the root
}
};
});
```

The runtime plugin can visit nodes as they are entered or exited.

## Browser Usage

phtml works in the browser, which may be great for experimentation:

```html

const html = `<my-component class="main">
<title>Super Title</title>
<text>Awesome Text</text>
</my-component>`;

phtml.process(html, { from: 'my-component.html' }).then(console.log);

```

Note that the browser version of phtml is 52 kB because it includes its own
HTML parser, [parse5].

[cli-img]: https://img.shields.io/travis/phtmlorg/phtml.svg
[cli-url]: https://travis-ci.org/phtmlorg/phtml
[git-img]: https://img.shields.io/badge/support-chat-blue.svg
[git-url]: https://gitter.im/postcss/postcss
[npm-img]: https://img.shields.io/npm/v/phtml.svg
[npm-url]: https://www.npmjs.com/package/phtml

[11ty]: https://github.com/phtmlorg/phtml-11ty
[browser]: https://unpkg.com/phtml/
[Grunt]: https://github.com/phtmlorg/grunt-phtml
[Gulp]: https://github.com/phtmlorg/gulp-phtml
[parse5]: https://github.com/inikulin/parse5
[phtml]: https://github.com/phtmlorg/phtml
[Rollup]: https://github.com/phtmlorg/rollup-plugin-phtml
[Webpack]: https://github.com/phtmlorg/phtml-loader