# Templates for polyfill

This is a partial polyfill for the [Declarative partial updates API](https://github.com/WICG/declarative-partial-updates/).

The polyfill includes a implementation of declarative patching using `template` elements as described in the [Patching explainer](https://github.com/WICG/declarative-partial-updates/blob/main/patching-explainer.md).

Other implementations of the Declarative partial updates API are not yet implemented

## Requirements

A browser that supports ES6/ES2015 is required for this polyfill.

## Limitations

- HTML inserted via `setHTML` is pre-processed for `<template for>` instructions, but other APIs such as `innerHTML` cannot be monkey-patched for performance reasons. The polyfill we rescan the document on subsequent DOM manipulations so templates may be processed then.
- New `<template for>` instructions after the polyfill is loaded are processed via a mutation observer so will not happen during HTML parsing like they would for a browser that supports this natively. This may cause empty content of placeholder content in `<?start>`/`<?end>` processing instruction to show initially, where this would not happen when the API is supported natively.

## Usage

### Include via npm and a bundler

```console
npm install template-for-polyfill
```

```js
<script type="module" src="./template-for-polyfill/dist/template-for-polyfill.js">
```

### Include via unpkg

```html
<script src="https://unpkg.com/template-for-polyfill"></script>
```

### Building from source

```console
git clone https://github.com/GoogleChromeLabs/template-for-polyfill
cd template-for-polyfill
npm i
npm test        # Tests should pass
npm run build   # Outputs minified polyfill to dist/
```

```html
<script src="/path_to_polyfill/template-for-polyfill.js"></script>
```

## License

[Apache 2.0](LICENSE)

## Contributing

We'd love to accept your patches and contributions to this project. See the enclosed [`CONTRIBUTING.md`](./CONTRIBUTING.md) for details.

## Disclaimer

This is not an officially supported Google product. This project is not eligible for the [Google Open Source Software Vulnerability Rewards Program](https://bughunters.google.com/open-source-security).
