Skip to content

Commit

Permalink
Merge pull request #28 from mohsenshafiei/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
mohsenshafiei committed Jun 3, 2019
2 parents ee061d9 + 6914625 commit 4e7b4b3
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 14 deletions.
4 changes: 3 additions & 1 deletion examples/sass-example/style.scss
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
@import 'margin';

.maintainer {
html, div, .classic, h1, h2, h3, h4 {
top: 100px;
}
.maintainer {
left: 100px;
right: 100px;
transform: translate(-50%);
Expand Down
19 changes: 12 additions & 7 deletions src/plugins/postcss-module-composer.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ const {
createModuleDeclaration,
isGlobal,
removeSpace,
removeNotGlobals,
} = require('./utils');

const mainDist = path.resolve(__dirname, '../../dist/quark-loader-output.css');
Expand All @@ -17,27 +18,31 @@ module.exports = postcss.plugin('postcss-module-composer', () => (root) => {
let composerString = '';
let consumerString = '';
root.walkRules((rule) => {
const str = rule.selector;
str.split(',').forEach((selector) => {
composerString += `${removeSpace(selector)} {\n`;
const identifier = rule.selector;
let once = false;
identifier.split(',').forEach((selector) => {
if (!isGlobal(removeSpace(selector))) {
composerString += `${removeSpace(selector)} {\n`;
rule.walkDecls((decl) => {
composerString += createModuleComposer(decl.prop, decl.value);
hashmap.set(
createModuleSelector(decl.prop, decl.value),
createModuleDeclaration(decl.prop, decl.value),
);
});
} else {
composerString += '}\n';
} else if (once === false) {
rule.walkDecls((decl) => {
composerString += createModuleDeclaration(decl.prop, decl.value);
const globals = removeNotGlobals(rule.selector);
composerString += `${globals} {\n${createModuleDeclaration(decl.prop, decl.value)}`;
hashmap.set(
createModuleSelector(decl.prop, decl.value),
createModuleDeclaration(decl.prop, decl.value),
);
});
composerString += '}\n';
once = true;
}
composerString += '}\n';
});
});
hashmap.forEach((value, key) => {
Expand All @@ -47,5 +52,5 @@ module.exports = postcss.plugin('postcss-module-composer', () => (root) => {
});
const css = consumerString + composerString;
main.write(css);
return (false);
return (true);
});
22 changes: 18 additions & 4 deletions src/plugins/utils/index.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,31 @@
// eslint-disable-next-line
const regex = /\(|\)|\%|\.|\#|\,|\+|\:|\"|\/|\/|\`|\'/g;
const globalSelector = require('./global');

const regex = /\(|\)|%|\.|#|,|\+|:|"|\/|\/|`|'/g;

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, '');

const removeSpace = str => str.trim();

const removeNotGlobals = (str) => {
let result = '';
str.split(',').forEach((item) => {
result += (isGlobal(removeSpace(item))) ? `, ${removeSpace(item)}` : '';
return false;
});
return result.substr(1).trim();
};

module.exports = {
createModuleComposer,
createModuleDeclaration,
createModuleSelector,
isGlobal,
removeSpace,
removeNotGlobals,
isGlobal,
};
4 changes: 2 additions & 2 deletions webpack.dev.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const path = require('path');

const context = path.resolve(__dirname, 'examples/css-example');
const context = path.resolve(__dirname, 'examples/sass-example');
const loader = path.resolve(__dirname, 'src');

module.exports = {
Expand All @@ -24,7 +24,7 @@ module.exports = {
module: {
rules: [
{
test: /\.css$/,
test: /\.scss$/,
use: [
{
loader: 'css-loader',
Expand Down

0 comments on commit 4e7b4b3

Please sign in to comment.