Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/twbs/rfs.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'postcss.js')
-rw-r--r--postcss.js123
1 files changed, 65 insertions, 58 deletions
diff --git a/postcss.js b/postcss.js
index 9f44ea8..9e45a5e 100644
--- a/postcss.js
+++ b/postcss.js
@@ -25,7 +25,7 @@ module.exports = postcss.plugin('postcss-rfs', opts => {
css.walkRules(rule => {
const mediaQueryRules = [];
const extraBlocks = [];
- const {parent} = rule;
+ const { parent } = rule;
let removeRule = false;
let dcRule;
let ecRule;
@@ -54,7 +54,7 @@ module.exports = postcss.plugin('postcss-rfs', opts => {
let ruleSelector = '';
for (const selector of selectors) {
- ruleSelector += (opts.mode === 'max-media-query') ? `${selector},\n` : '';
+ ruleSelector += opts.mode === 'max-media-query' ? `${selector},\n` : '';
ruleSelector += `${DISABLE_RFS_SELECTOR} ${selector},\n`;
ruleSelector += `${selector + DISABLE_RFS_SELECTOR},\n`;
}
@@ -69,76 +69,83 @@ module.exports = postcss.plugin('postcss-rfs', opts => {
rule.walkDecls(decl => {
// Check if the selector doesn't contain the disabled selector
- // Check if value contains rfs() function
- if (!rule.selector.includes(DISABLE_RFS_SELECTOR) && new RegExp(opts.functionName + '(.*)', 'g').test(decl.value)) {
- const value = rfs.value(decl.value);
- const fluidValue = rfs.fluidValue(decl.value);
- decl.value = value;
-
- if (value !== fluidValue) {
- const defaultValue = (opts.mode === 'min-media-query') ? ((opts.class === 'enable') ? value : fluidValue) : value;
- const mediaQueryValue = (opts.mode === 'min-media-query') ? value : fluidValue;
- decl.value = defaultValue;
-
- fluidRule.append(decl.clone({value: mediaQueryValue}));
- mediaQueryRules.push(fluidRule);
-
- // Disable classes
- if (opts.class === 'disable') {
- const declOpts = (opts.mode === 'max-media-query') ? {} : {value};
- dcRule.append(decl.clone(declOpts));
- extraBlocks.push(dcRule);
- } else if (opts.class === 'enable' && opts.mode === 'min-media-query') {
- if (ecRule === undefined) {
- ecRule = postcss.rule({
- selector: ruleSelector,
- source: parent.source
- });
- }
-
- ecRule.append(decl.clone({value: fluidValue}));
- extraBlocks.push(ecRule);
+ // and if the value contains the rfs() function
+ const check = !rule.selector.includes(DISABLE_RFS_SELECTOR) &&
+ new RegExp(`${opts.functionName}(.*)`, 'g').test(decl.value);
+
+ if (!check) {
+ return;
+ }
+
+ const value = rfs.value(decl.value);
+ const fluidValue = rfs.fluidValue(decl.value);
+ decl.value = value;
+
+ if (value !== fluidValue) {
+ const defaultValue = opts.mode === 'min-media-query' ? ((opts.class === 'enable') ? value : fluidValue) : value;
+ const mediaQueryValue = opts.mode === 'min-media-query' ? value : fluidValue;
+ decl.value = defaultValue;
+
+ fluidRule.append(decl.clone({ value: mediaQueryValue }));
+ mediaQueryRules.push(fluidRule);
+
+ // Disable classes
+ if (opts.class === 'disable') {
+ const declOpts = opts.mode === 'max-media-query' ? {} : { value };
+ dcRule.append(decl.clone(declOpts));
+ extraBlocks.push(dcRule);
+ } else if (opts.class === 'enable' && opts.mode === 'min-media-query') {
+ if (ecRule === undefined) {
+ ecRule = postcss.rule({
+ selector: ruleSelector,
+ source: parent.source
+ });
}
- // Remove declaration if needed
- if (opts.class === 'disable' && opts.mode === 'max-media-query') {
- if (decl.prev() || decl.next()) {
- decl.remove();
- } else {
- removeRule = true;
- }
+ ecRule.append(decl.clone({ value: fluidValue }));
+ extraBlocks.push(ecRule);
+ }
+
+ // Remove declaration if needed
+ if (opts.class === 'disable' && opts.mode === 'max-media-query') {
+ if (decl.prev() || decl.next()) {
+ decl.remove();
+ } else {
+ removeRule = true;
}
}
}
});
- if (mediaQueryRules.length > 0) {
- // Safari iframe resize bug: https://github.com/twbs/rfs/issues/14
- if (opts.safariIframeResizeBugFix) {
- rule.append({
- prop: 'min-width',
- value: '0vw'
- });
- }
+ if (mediaQueryRules.length === 0) {
+ return;
+ }
- const fluidMediaQuery = mediaQuery.clone();
+ // Safari iframe resize bug: https://github.com/twbs/rfs/issues/14
+ if (opts.safariIframeResizeBugFix) {
+ rule.append({
+ prop: 'min-width',
+ value: '0vw'
+ });
+ }
- for (const mediaQueryRule of mediaQueryRules) {
- fluidMediaQuery.append(mediaQueryRule);
- }
+ const fluidMediaQuery = mediaQuery.clone();
- parent.insertAfter(rule, fluidMediaQuery);
+ for (const mediaQueryRule of mediaQueryRules) {
+ fluidMediaQuery.append(mediaQueryRule);
+ }
- if (extraBlocks.length > 0) {
- for (const disableBlock of extraBlocks) {
- parent.insertAfter(rule, disableBlock);
- }
- }
+ parent.insertAfter(rule, fluidMediaQuery);
- if (removeRule) {
- rule.remove();
+ if (extraBlocks.length > 0) {
+ for (const disableBlock of extraBlocks) {
+ parent.insertAfter(rule, disableBlock);
}
}
+
+ if (removeRule) {
+ rule.remove();
+ }
});
};
});