Skip to content

Instantly share code, notes, and snippets.

@chasemccoy
Last active January 9, 2019 21:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chasemccoy/f09ec154aeae086a4fdfa2908364b76a to your computer and use it in GitHub Desktop.
Save chasemccoy/f09ec154aeae086a4fdfa2908364b76a to your computer and use it in GitHub Desktop.
remark-seeds-formatting
'use strict';
const select = require(`unist-util-select`);
const is = require('unist-util-is');
const modifyChildren = require('unist-util-modify-children');
const parents = require('unist-util-parents');
const visit = require('unist-util-visit')
const findAfter = require('unist-util-find-after')
module.exports = () => markdownAST => {
var wrappedAST = parents(markdownAST);
var list = {};
select(wrappedAST, 'listItem paragraph').forEach(node => {
const modifier = (child, index, parent) => {
if (is('strong', child)) {
const newList = parent.parent.parent.node;
if (newList !== list) {
list = newList;
}
list.data = {};
select(child, `text[value="DO:"]`).forEach(childNode => {
parent.parent.node.data = {};
parent.parent.node.data.hProperties = {
className: ['do']
};
list.data.hProperties = {className: ['directives']};
});
select(child, `text[value^="DON"]`).forEach(childNode => {
parent.parent.node.data = {};
parent.parent.node.data.hProperties = {
className: ['dont']
};
list.data.hProperties = {className: ['directives']};
});
}
};
modifyChildren(modifier)(node);
});
const commentVisitor = node => {
if (node.node.value.startsWith('<!--')) {
const sibling = findAfter(node.parent, node)
var siblingClasses = []
if (sibling.node.data && sibling.node.data.hProperties) {
siblingClasses = sibling.node.data.hProperties.className
}
if (!siblingClasses) {
siblingClasses = []
}
sibling.node.data = {};
const value = node.node.value
if (value.includes('wide')) {
sibling.node.data.hProperties = {
className: [...siblingClasses, 'wide']
};
}
else if (value.includes('medium')) {
sibling.node.data.hProperties = {
className: [...siblingClasses, 'medium']
};
}
else if (value.includes('lead')) {
sibling.node.data.hProperties = {
className: [...siblingClasses, 'lead']
};
}
else if (value.includes('caption')) {
sibling.node.data.hProperties = {
className: [...siblingClasses, 'caption']
};
}
else if (value.includes('unstyled')) {
sibling.node.data.hProperties = {
className: [...siblingClasses, 'unstyled']
};
}
if (value.includes('caption') && node.node.value.includes('medium')) {
sibling.node.data.hProperties = {
className: [...siblingClasses, 'caption', 'medium']
};
}
}
}
visit(wrappedAST, 'html', commentVisitor)
return wrappedAST;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment