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; const maxValue = Number.MAX_VALUE;
@ -70,12 +70,10 @@ module.exports = require('backbone').Model.extend({
code += this.buildFromRule(rule, dump, opts); code += this.buildFromRule(rule, dump, opts);
}); });
console.log('at rules', atRules); this.sortMediaObject(atRules).forEach(item => {
// Get at-rules
for (let atRule in atRules) {
let rulesStr = ''; let rulesStr = '';
const mRules = atRules[atRule]; const atRule = item.key;
const mRules = item.value;
mRules.forEach(rule => { mRules.forEach(rule => {
const ruleStr = this.buildFromRule(rule, dump, opts); const ruleStr = this.buildFromRule(rule, dump, opts);
@ -90,7 +88,7 @@ module.exports = require('backbone').Model.extend({
if (rulesStr) { if (rulesStr) {
code += `${atRule}{${rulesStr}}`; code += `${atRule}{${rulesStr}}`;
} }
} });
em && clearStyles && rules.remove(dump); em && clearStyles && rules.remove(dump);
} }
@ -142,5 +140,19 @@ module.exports = require('backbone').Model.extend({
if (!length) return maxValue; if (!length) return maxValue;
return parseFloat(length[1]); 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;}`; const result = `#${id}{color:blue;}#${id}:${state}{color:red;}`;
expect(obj.build(comp, { cssc: cc, em })).toEqual(result); 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