Browse Source

Sort media queries in export code. Fixes #1506

pull/1600/head
Artur Arseniev 7 years ago
parent
commit
f61b41167f
  1. 26
      src/code_manager/model/CssGenerator.js
  2. 28
      test/specs/code_manager/model/CodeModels.js

26
src/code_manager/model/CssGenerator.js

@ -1,4 +1,4 @@
import { isUndefined } from 'underscore';
import { isUndefined, each } from 'underscore';
const maxValue = Number.MAX_VALUE;
@ -70,12 +70,10 @@ module.exports = require('backbone').Model.extend({
code += this.buildFromRule(rule, dump, opts);
});
console.log('at rules', atRules);
// Get at-rules
for (let atRule in atRules) {
this.sortMediaObject(atRules).forEach(item => {
let rulesStr = '';
const mRules = atRules[atRule];
const atRule = item.key;
const mRules = item.value;
mRules.forEach(rule => {
const ruleStr = this.buildFromRule(rule, dump, opts);
@ -90,7 +88,7 @@ module.exports = require('backbone').Model.extend({
if (rulesStr) {
code += `${atRule}{${rulesStr}}`;
}
}
});
em && clearStyles && rules.remove(dump);
}
@ -142,5 +140,19 @@ module.exports = require('backbone').Model.extend({
if (!length) return maxValue;
return parseFloat(length[1]);
},
/**
* Return a sorted array from media query object
* @param {Object} items
* @return {Array}
*/
sortMediaObject(items = {}) {
const result = {};
const itemsArr = [];
each(items, (value, key) => itemsArr.push({ key, value }));
return itemsArr.sort(
(a, b) => this.getQueryLength(b.key) - this.getQueryLength(a.key)
);
}
});

28
test/specs/code_manager/model/CodeModels.js

@ -296,6 +296,34 @@ module.exports = {
const result = `#${id}{color:blue;}#${id}:${state}{color:red;}`;
expect(obj.build(comp, { cssc: cc, em })).toEqual(result);
});
test('Media queries are correctly cleaned for the length', () => {
[
['@media (max-width: 999px)', 999],
['@media (min-width: 123%)', 123],
['@media (min-width: 1040rem)', 1040]
].forEach(item => {
expect(obj.getQueryLength(item[0])).toBe(item[1]);
});
});
test('The media objects are correctly sorted', () => {
expect(
obj.sortMediaObject({
'@media (max-width: 480px)': 1,
'@font-face': 2,
'@media (max-width: 768px)': 3,
'@media (max-width: 1020ch)': 4,
'@media (max-width: 10%)': 5
})
).toEqual([
{ key: '@font-face', value: 2 },
{ key: '@media (max-width: 1020ch)', value: 4 },
{ key: '@media (max-width: 768px)', value: 3 },
{ key: '@media (max-width: 480px)', value: 1 },
{ key: '@media (max-width: 10%)', value: 5 }
]);
});
});
}
};

Loading…
Cancel
Save