phtml-utility-class
Version:
Write utility classes conveniently while optimising your CSS
1 lines • 17.8 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["src/util/generate-regex.js","src/util/get-utility.js","src/index.js"],"sourcesContent":["import _ from 'lodash';\n\n// This function generates new regexes in an object by replacing token identifiers with their regex counterparts\n\nexport default function genRegex(opts) {\n\tlet tokens = {};\n\n\tif (Object(opts).regex) {\n\t\ttokens = opts.regex;\n\t} else {\n\t\ttokens = {\n\t\t\tproperty: /[^-\\s]+/,\n\t\t\tnumber: /[0-9]*\\.?[0-9]+|\\*/,\n\t\t\tunit: /px|cm|mm|in|pt|pc|em|ex|ch|rem|vw|vh|vmin|vmax/,\n\t\t\tseperator: /,/,\n\t\t\targ: /0*({{number}})({{unit}})?|(\\w+)/,\n\t\t\targs: /(?:({{arg}}){{seperator}}?)+/,\n\t\t\tdecl: /({{property}})(?:-({{args}}))?/\n\t\t};\n\t}\n\n\t// Define what a token identifier looks like <word> or {{word}}\n\tlet token = /{{(\\w+)}}/gim;\n\n\t// Takes regex like /\\d\\w[0-9]<word>/ and replaces token identifier with matching token name\n\tfunction replaceTokenIdent(value, tokens) {\n\t\treturn value.toString().replace(token, function (match, name) {\n\t\t\tif (tokens[name]) {\n\t\t\t\tif (tokens[name].toString().match(token)) {\n\t\t\t\t\treturn replaceTokenIdent(tokens[name], tokens);\n\t\t\t\t}\n\t\t\t\treturn tokens[name].source;\n\t\t\t} else {\n\t\t\t\treturn match;\n\t\t\t}\n\t\t});\n\t}\n\n\t// Go through each token in object and replace tokens identifier with value\n\ttokens = _.reduce(\n\t\ttokens,\n\t\tfunction (result, value, key) {\n\t\t\treturn {\n\t\t\t\t...result,\n\t\t\t\t[key]: replaceTokenIdent(value, tokens)\n\t\t\t};\n\t\t},\n\t\t{}\n\t);\n\n\t// Create new regex for each token\n\treturn _.reduce(\n\t\ttokens,\n\t\tfunction (result, value, key) {\n\t\t\treturn {\n\t\t\t\t...result,\n\t\t\t\t[key]: new RegExp(value.replace(/\\//g, ''), 'gmi')\n\t\t\t};\n\t\t},\n\t\t{}\n\t);\n}\n","import _ from 'lodash';\n\nexport default function getUtilities(str, re) {\n\n\tfunction findMatches(regex, str, matches = []) {\n\t\tconst res = regex.exec(str)\n\t\tres && matches.push(res) && findMatches(regex, str, matches)\n\t\treturn matches\n\t}\n\n\t// var declRe = new RegExp(/\\b([^-\\s]+)(?:-((?:(0*([0-9]*\\.?[0-9]+|\\*)(px|cm|mm|in|pt|pc|em|ex|ch|rem|vw|vh|vmin|vmax)?|(\\w+)),?)+))?\\b/, 'gi')\n\n\t// let match = str.match(/\\b([^-\\s]+)(?:-((?:(0*([0-9]*\\.?[0-9]+|\\*)(px|cm|mm|in|pt|pc|em|ex|ch|rem|vw|vh|vmin|vmax)?|(\\w+)),?)+))?\\b/g);\n\n\tconst matches = findMatches(re.decl, str)\n\t// console.log(match)\n\n\tlet utilities = []\n\n\n\tfor (let i = 0; i < matches.length; i++) {\n\t\tlet match = matches[i]\n\n\n\t\tlet utility = {};\n\n\t\tif (match !== null) {\n\t\t\tutility.class = match[1];\n\n\t\t\t// console.log(re.decl)\n\t\t\tutility.args = [];\n\t\t\tutility.decl = match[0];\n\n\t\t\tif (match[2]) {\n\t\t\t\t/* Temporary fix for multiple arguments */\n\t\t\t\tmatch[2].replace(new RegExp(re.arg, 'gmi'), function (arg) {\n\n\t\t\t\t\tif (arg === '*') arg = null\n\t\t\t\t\tutility.args.push(arg);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (utility.args.length === 0) {\n\t\t\t\tutility.args = null;\n\t\t\t}\n\n\t\t\tutilities.push(utility);\n\t\t}\n\t}\n\n\treturn utilities\n\n}\n","import phtml from 'phtml';\nimport { Element } from 'phtml';\nimport _ from 'lodash';\nimport genRegex from './util/generate-regex.js';\nimport getUtilities from './util/get-utility.js';\nimport { stripIndent } from 'common-tags'\nimport fs from 'fs-extra'\nvar uniqid = require('uniqid');\nconst postcss = require('postcss');\nconst postcssrc = require('postcss-load-config');\n\n\n// Get rules definitions\n\nvar rules;\n\nif (fs.existsSync(process.cwd() + '/' + 'phtml-utility-class.config.js')) {\n\n\trules = require(process.cwd() + '/' + 'phtml-utility-class.config.js').classes\n\t// console.log(rules)\n\n}\n\nfunction putValuesIntoArray(value) {\n\treturn Array.isArray(value) ? value : [value]\n}\n\nfunction genStyles(utility, acc) {\n\tvar styles = ''\n\tif (utility.style({ rule: utility, args: utility.args, str: acc }) === undefined) {\n\t\tstyles = ''\n\t} else {\n\t\tstyles = utility.style({ rule: utility, args: utility.args, str: acc })\n\t}\n\n\treturn `${styles}`\n}\n\nasync function processPostCSS(src, callback) {\n\tconst ctx = { parser: true, map: 'inline' };\n\tconst { plugins, options } = postcssrc.sync(ctx);\n\tconst { css } = await postcss(plugins).process(src, { from: undefined });\n\n\n\tcallback(css)\n}\n\nfunction processInlineStyles(node, classNameID) {\n\n\tconst inlineStyles = node.attrs.get('style');\n\n\tif (inlineStyles) {\n\t\tstyles = `\n.${classNameID}.${classNameID} {${inlineStyles}}`\n\n\t\tprocessPostCSS(styles, (css) => {\n\n\n\t\t\t// Add new array back to element\n\t\t\tvar styleTag = new Element({\n\t\t\t\tname: 'style'\n\t\t\t}, null, css)\n\n\t\t\t// Add new array back to element\n\t\t\tvar spanTag = new Element({\n\t\t\t\tname: 'span'\n\t\t\t}, null, styleTag)\n\n\t\t\tspanTag.attrs.add({ style: 'display: none' })\n\t\t\tspanTag.attrs.add({ class: 'stylup-sb' })\n\n\t\t\tnode.before(spanTag)\n\t\t\tnode.attrs.remove('style')\n\n\t\t\tvar classNames = node.attrs.get('class') ? node.attrs.get('class').split(' ') : undefined || [];\n\n\t\t\tclassNames.push(classNameID)\n\t\t\tnode.attrs.add({ class: classNames.join(' ') });\n\t\t})\n\n\n\t}\n}\n\nexport default new phtml.Plugin('phtml-utility-class', opts => {\n\topts = opts || {}\n\treturn {\n\t\tElement(node) {\n\n\t\t\tif (opts.processBlockStyles) {\n\t\t\t\tif (node.name === \"style\") {\n\t\t\t\t\tconst target = node.nodes[0];\n\t\t\t\t\tconst source = target.data;\n\t\t\t\t\tprocessPostCSS(source, (css) => {\n\n\t\t\t\t\t\tnode.innerHTML = css\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\tvar classNameID = uniqid();\n\n\t\t\tif (process.env.NODE_ENV === \"test\") {\n\t\t\t\tclassNameID = 'uniqid'\n\t\t\t}\n\n\t\t\t// Get styles from style attr\n\t\t\tprocessInlineStyles(node, classNameID)\n\n\t\t\tconst hasClass = node.attrs.get('class');\n\t\t\tif (hasClass) {\n\t\t\t\tconst classNames = hasClass ? node.attrs.get('class').split(' ') : null;\n\t\t\t\tvar re = genRegex(opts)\n\n\t\t\t\tvar utilities = getUtilities(hasClass, re);\n\n\n\t\t\t\tlet newClassNames = [...classNames]\n\t\t\t\tlet styles = [];\n\n\n\t\t\t\tlet hasUtilities = false;\n\n\n\t\t\t\tfor (let utility of utilities) {\n\n\n\t\t\t\t\t// if (utilityClass) {\n\t\t\t\t\t// \tconsole.log('utility class')\n\t\t\t\t\t// }\n\t\t\t\t\t// else {\n\t\t\t\t\t// \tconsole.log('not utilit class')\n\t\t\t\t\t// }\n\t\t\t\t\tfor (let rule of rules) {\n\t\t\t\t\t\trule.class = putValuesIntoArray(rule.class);\n\n\t\t\t\t\t\tfor (let property of rule.class) {\n\n\t\t\t\t\t\t\tvar tempRule = Object.assign({}, rule)\n\n\t\t\t\t\t\t\ttempRule.class = property\n\n\n\n\t\t\t\t\t\t\tif (utility.class === tempRule.class) {\n\n\n\t\t\t\t\t\t\t\ttempRule = Object.assign(tempRule, utility)\n\n\n\t\t\t\t\t\t\t\thasUtilities = true\n\n\t\t\t\t\t\t\t\tvar output = \"\";\n\n\t\t\t\t\t\t\t\tfunction acc(strings, ...values) {\n\n\n\t\t\t\t\t\t\t\t\tif (!strings) {\n\t\t\t\t\t\t\t\t\t\tif (typeof output !== \"undefined\") {\n\n\t\t\t\t\t\t\t\t\t\t\treturn output = output.replace(/\\n$/, '');;\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\treturn str;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\n\n\t\t\t\t\t\t\t\t\t\tlet str = '';\n\n\t\t\t\t\t\t\t\t\t\tstrings.forEach((string, a) => {\n\t\t\t\t\t\t\t\t\t\t\tstr += string + (values[a] || '');\n\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\tstr = stripIndent(str);\n\n\n\t\t\t\t\t\t\t\t\t\tif (typeof output !== \"undefined\") {\n\t\t\t\t\t\t\t\t\t\t\toutput += `${str}\\n`;\n\t\t\t\t\t\t\t\t\t\t}\n\n\n\n\t\t\t\t\t\t\t\t\t\treturn str;\n\t\t\t\t\t\t\t\t\t}\n\n\n\t\t\t\t\t\t\t\t}\n\n\n\n\t\t\t\t\t\t\t\tstyles.push(genStyles(tempRule, acc))\n\n\t\t\t\t\t\t\t\tnewClassNames.push(utility.class);\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (hasUtilities) {\n\t\t\t\t\tstyles = `\n.${classNameID}.${classNameID} {\n${styles.join('')}\n}`\n\t\t\t\t\tprocessPostCSS(styles, (css) => {\n\t\t\t\t\t\t// Add new array back to element\n\t\t\t\t\t\tvar styleTag = new Element({\n\t\t\t\t\t\t\tname: 'style'\n\t\t\t\t\t\t}, null, css)\n\n\t\t\t\t\t\t// Add new array back to element\n\t\t\t\t\t\tvar spanTag = new Element({\n\t\t\t\t\t\t\tname: 'span'\n\t\t\t\t\t\t}, null, styleTag)\n\n\t\t\t\t\t\tspanTag.attrs.add({ style: 'display: none' })\n\t\t\t\t\t\tspanTag.attrs.add({ class: 'stylup-sb' })\n\n\t\t\t\t\t\tnode.before(spanTag)\n\n\t\t\t\t\t\t// Add classNameID\n\t\t\t\t\t\tnewClassNames.push(classNameID)\n\t\t\t\t\t\tnode.attrs.add({ class: newClassNames.join(' ') });\n\t\t\t\t\t})\n\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t};\n});\n"],"names":["genRegex","opts","tokens","Object","regex","property","number","unit","seperator","arg","args","decl","token","replaceTokenIdent","value","toString","replace","match","name","source","_","reduce","result","key","RegExp","getUtilities","str","re","findMatches","matches","res","exec","push","utilities","i","length","utility","class","uniqid","require","postcss","postcssrc","rules","fs","existsSync","process","cwd","classes","putValuesIntoArray","Array","isArray","genStyles","acc","styles","style","rule","undefined","processPostCSS","src","callback","ctx","parser","map","plugins","options","sync","css","from","processInlineStyles","node","classNameID","inlineStyles","attrs","get","styleTag","Element","spanTag","add","before","remove","classNames","split","join","phtml","Plugin","processBlockStyles","target","nodes","data","innerHTML","env","NODE_ENV","hasClass","newClassNames","hasUtilities","tempRule","assign","output","strings","values","forEach","string","a","stripIndent"],"mappings":"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"}