Mathspace: Count ClassNames

node v6.17.1
version: 0.1.0
endpointsharetweet
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 }), {} );
Loading…

no comments

    sign in to comment