12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- const merge = require('merge-options');
- const renderer = require('posthtml-render');
- const api = require('posthtml/lib/api');
- const defaultOptions = {
- closingSingleTag: 'slash',
- singleTags: [
- 'circle',
- 'path',
- 'ellipse',
- 'line',
- 'path',
- 'polygon',
- 'polyline',
- 'rect',
- 'use',
- 'animateTransform',
- 'stop'
- ]
- };
- /**
- * @param {PostHTMLTree} tree
- * @param {Object|null} [options] {@see https://github.com/posthtml/posthtml-render#options}
- */
- module.exports = function xmlRenderer(tree, options) {
- const opts = merge(defaultOptions, options || {});
- /**
- * Workaround for https://github.com/fb55/htmlparser2/issues/187
- * Also see https://github.com/fb55/htmlparser2/pull/129
- */
- opts.singleTags = opts.singleTags.filter((tag) => {
- let hasContent = false;
- api.match.call(tree, { tag }, (node) => {
- if (typeof node.content !== 'undefined' && !hasContent) {
- hasContent = true;
- }
- return node;
- });
- return !hasContent;
- });
- return renderer(tree, opts);
- };
- module.exports.defaultOptions = defaultOptions;
|