76 lines
2.8 KiB
JavaScript
76 lines
2.8 KiB
JavaScript
/**
|
|
* It is an example htmlnano module.
|
|
*
|
|
* A htmlnano module can be modify the attributes of every node (through a "onAttrs" named export),
|
|
* modify the content of every node (through an optional "onContent" named export), modify the node
|
|
* itself (through an optional "onNode" named export), or modify the entire tree (through an optional
|
|
* default export).
|
|
*/
|
|
|
|
/**
|
|
* Modify attributes of node. Optional.
|
|
*
|
|
* @param {object} options - Options that were passed to htmlnano
|
|
* @param moduleOptions — Module options. For most modules this is just "true" (indication that the module was enabled)
|
|
* @return {Function} - Return a function that takes attribute object and the node (for the context), and returns the modified attribute object
|
|
*/
|
|
export function onAttrs(options, moduleOptions) {
|
|
return (attrs, node) => {
|
|
// You can modify "attrs" based on "node"
|
|
const newAttrs = { ...attrs };
|
|
|
|
return newAttrs; // ... then return the modified attrs
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Modify content of node. Optional.
|
|
*
|
|
* @param {object} options - Options that were passed to htmlnano
|
|
* @param moduleOptions — Module options. For most modules this is just "true" (indication that the module was enabled)
|
|
* @return {Function} - Return a function that takes contents (an array of node and string) and the node (for the context), and returns the modified content array.
|
|
*/
|
|
export function onContent(options, moduleOptions) {
|
|
return (content, node) => {
|
|
// Same goes the "content"
|
|
|
|
return content; // ... return modified content here
|
|
};
|
|
}
|
|
|
|
/**
|
|
* It is possible to modify entire ndde as well. Optional.
|
|
* @param {object} options - Options that were passed to htmlnano
|
|
* @param moduleOptions — Module options. For most modules this is just "true" (indication that the module was enabled)
|
|
* @return {Function} - Return a function that takes the node, and returns the new, modified node.
|
|
*/
|
|
export function onNode(options, moduleOptions) {
|
|
return (node) => {
|
|
return node; // ... return new node here
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Modify the entire tree. Optional.
|
|
*
|
|
* @param {object} tree - PostHTML tree (https://github.com/posthtml/posthtml/blob/master/README.md)
|
|
* @param {object} options - Options that were passed to htmlnano
|
|
* @param moduleOptions — Module options. For most modules this is just "true" (indication that the module was enabled)
|
|
* @return {object | Proimse} - Return the modified tree.
|
|
*/
|
|
export default function example(tree, options, moduleOptions) {
|
|
// Module filename (example.es6), exported default function name (example),
|
|
// and test filename (example.js) must be the same.
|
|
|
|
// You can traverse the tree...
|
|
tree.walk(node => {
|
|
// ...and make some minification
|
|
});
|
|
|
|
// At the end you must return the tree
|
|
return tree;
|
|
|
|
// Or a promise with the tree
|
|
return somePromise.then(() => tree);
|
|
}
|