Skip to content

Commit

Permalink
Merge pull request #26 from mohsenshafiei/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
mohsenshafiei authored Jun 2, 2019
2 parents 9d41d5e + 3014925 commit ee061d9
Show file tree
Hide file tree
Showing 3 changed files with 175 additions and 9 deletions.
37 changes: 28 additions & 9 deletions src/plugins/postcss-module-composer.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,13 @@ const fs = require('fs');
const path = require('path');
const postcss = require('postcss');
const HashMap = require('hashmap');
const { createModuleComposer, createModuleSelector, createModuleDeclaration } = require('./utils');
const {
createModuleComposer,
createModuleSelector,
createModuleDeclaration,
isGlobal,
removeSpace,
} = require('./utils');

const mainDist = path.resolve(__dirname, '../../dist/quark-loader-output.css');
const main = fs.createWriteStream(mainDist);
Expand All @@ -11,15 +17,28 @@ module.exports = postcss.plugin('postcss-module-composer', () => (root) => {
let composerString = '';
let consumerString = '';
root.walkRules((rule) => {
composerString += `${rule.selector} {\n`;
rule.walkDecls((decl) => {
composerString += createModuleComposer(decl.prop, decl.value);
hashmap.set(
createModuleSelector(decl.prop, decl.value),
createModuleDeclaration(decl.prop, decl.value),
);
const str = rule.selector;
str.split(',').forEach((selector) => {
composerString += `${removeSpace(selector)} {\n`;
if (!isGlobal(removeSpace(selector))) {
rule.walkDecls((decl) => {
composerString += createModuleComposer(decl.prop, decl.value);
hashmap.set(
createModuleSelector(decl.prop, decl.value),
createModuleDeclaration(decl.prop, decl.value),
);
});
} else {
rule.walkDecls((decl) => {
composerString += createModuleDeclaration(decl.prop, decl.value);
hashmap.set(
createModuleSelector(decl.prop, decl.value),
createModuleDeclaration(decl.prop, decl.value),
);
});
}
composerString += '}\n';
});
composerString += '}\n';
});
hashmap.forEach((value, key) => {
consumerString += key;
Expand Down
141 changes: 141 additions & 0 deletions src/plugins/utils/global.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
module.exports = [
'*',
'*::before',
'*::after',
'olol',
'ulul',
'olul',
'ulol',
'precode',
'a',
'abbr',
'acronym',
'address',
'applet',
'area',
'article',
'aside',
'audio',
'b',
'base',
'basefont',
'bdi',
'bdo',
'big',
'blockquote',
'body',
'br',
'button',
'canvas',
'caption',
'center',
'cite',
'code',
'col',
'colgroup',
'data',
'datalist',
'dd',
'del',
'details',
'dfn',
'dialog',
'dir',
'div',
'dl',
'dt',
'em',
'embed',
'fieldset',
'figcaption',
'figure',
'font',
'footer',
'form',
'frame',
'frameset',
'h1',
'h2',
'h3',
'h4',
'h5',
'h6',
'head',
'header',
'hgroup',
'hr',
'html',
'i',
'iframe',
'img',
'input',
'ins',
'kbd',
'kbdkbd',
'label',
'input',
'legend',
'fieldset',
'li',
'link',
'main',
'map',
'mark',
'meta',
'meter',
'nav',
'noframes',
'noscript',
'object',
'ol',
'optgroup',
'option',
'output',
'p',
'param',
'picture',
'pre',
'progress',
'q',
'rp',
'rt',
'ruby',
's',
'samp',
'script',
'section',
'select',
'small',
'source',
'span',
'strike',
'del',
's',
'strong',
'style',
'sub',
'summary',
'details',
'sup',
'svg',
'table',
'tbody',
'td',
'template',
'textarea',
'tfoot',
'th',
'thead',
'time',
'title',
'tr',
'track',
'video',
'audio',
'tt',
'u',
'ul',
'var',
'video',
'wbr',
];
6 changes: 6 additions & 0 deletions src/plugins/utils/index.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
// eslint-disable-next-line
const regex = /\(|\)|\%|\.|\#|\,|\+|\:|\"|\/|\/|\`|\'/g;
const globalSelector = require('./global');

const createModuleComposer = (property, value) => (`\tcomposes: ${property}--${value.replace(/ /g, '-').replace(regex, '')};\n`);
const createModuleDeclaration = (property, value) => (`\t${property}: ${value};\n`);
const createModuleSelector = (property, value) => (`.${property}--${value.replace(/ /g, '-').replace(regex, '')} {\n`);
const isGlobal = selector => globalSelector.includes(selector);
const removeSpace = str => str.replace(/\s/g, '');

module.exports = {
createModuleComposer,
createModuleDeclaration,
createModuleSelector,
isGlobal,
removeSpace,
};

0 comments on commit ee061d9

Please sign in to comment.