Mathspace: Count ClassNames
const R = require('ramda');
const { JSDOM } = require('jsdom');
const { getContent } = require('@runkit/ajhyndman/mathspace-content-crawler/1.0.0');
/**
* Consume an HTML fragment and parse it as a document.
*
* @param {string} html The HTML fragment in string format
* @returns {window} JSDom's emulated window API object
*/
function parseHtml(html) {
return JSDOM.fragment(html);
}
const payload = await getContent('');
// const fragment = parseHtml('<div class="red"></div><div class="blue"></div>');
// const classList = R.compose(
// R.flatten,
// R.map(node => node.classList)
// )(fragment.querySelectorAll('[class]'));
/** Get a list of all classname instances that appear in this fragment. */
function getClassesFromFragment(fragment) {
return R.compose(
R.flatten,
R.map(node => node.classList)
)(fragment.querySelectorAll('[class]'));
}
/** Get a list of all classname instances that appear in this payload. */
function getClassesFromPayload(payload) {
return R.compose(
R.flatten,
R.map(getClassesFromFragment),
R.map(template => JSDOM.fragment(R.path(['node', 'instruction'], template)))
)(R.pathOr([], ['data', 'admin', 'allProblemTemplates', 'edges'], payload));
}
// let hasReachedEndOfResults = false;
let cursor = '';
let classList = [];
// while (!hasReachedEndOfResults) {
for (let i = 0; i < 25; i++) {
const payload = await getContent(cursor);
cursor = R.path(['data', 'admin', 'allProblemTemplates', 'pageInfo', 'endCursor'], payload);
console.log(cursor);
classList = R.concat(
classList,
getClassesFromPayload(payload)
);
if (R.pathOr([], ['data', 'admin', 'allProblemTemplates', 'edges'], payload).length < 1) {
hasReachedEndOfResults = true;
}
}
classList;
classList.reduce(
(acc, className) => ({ ...acc, [className]: acc[className] ? acc[className] + 1 : 1 }),
{}
);
no comments