12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- 'use strict';
- exports.name = 'cleanupAttrs';
- exports.type = 'visitor';
- exports.active = true;
- exports.description =
- 'cleanups attributes from newlines, trailing and repeating spaces';
- const regNewlinesNeedSpace = /(\S)\r?\n(\S)/g;
- const regNewlines = /\r?\n/g;
- const regSpaces = /\s{2,}/g;
- /**
- * Cleanup attributes values from newlines, trailing and repeating spaces.
- *
- * @author Kir Belevich
- *
- * @type {import('../lib/types').Plugin<{
- * newlines?: boolean,
- * trim?: boolean,
- * spaces?: boolean
- * }>}
- */
- exports.fn = (root, params) => {
- const { newlines = true, trim = true, spaces = true } = params;
- return {
- element: {
- enter: (node) => {
- for (const name of Object.keys(node.attributes)) {
- if (newlines) {
- // new line which requires a space instead of themselve
- node.attributes[name] = node.attributes[name].replace(
- regNewlinesNeedSpace,
- (match, p1, p2) => p1 + ' ' + p2
- );
- // simple new line
- node.attributes[name] = node.attributes[name].replace(
- regNewlines,
- ''
- );
- }
- if (trim) {
- node.attributes[name] = node.attributes[name].trim();
- }
- if (spaces) {
- node.attributes[name] = node.attributes[name].replace(
- regSpaces,
- ' '
- );
- }
- }
- },
- },
- };
- };
|