61 lines
1.3 KiB
JavaScript
61 lines
1.3 KiB
JavaScript
|
/**
|
||
|
* source by `json2mq`
|
||
|
* https://github.com/akiran/json2mq.git
|
||
|
*/
|
||
|
|
||
|
const camel2hyphen = function(str) {
|
||
|
return str
|
||
|
.replace(/[A-Z]/g, function(match) {
|
||
|
return '-' + match.toLowerCase();
|
||
|
})
|
||
|
.toLowerCase();
|
||
|
};
|
||
|
|
||
|
const isDimension = function(feature) {
|
||
|
const re = /[height|width]$/;
|
||
|
return re.test(feature);
|
||
|
};
|
||
|
|
||
|
const obj2mq = function(obj) {
|
||
|
let mq = '';
|
||
|
const features = Object.keys(obj);
|
||
|
features.forEach(function(feature, index) {
|
||
|
let value = obj[feature];
|
||
|
feature = camel2hyphen(feature);
|
||
|
// Add px to dimension features
|
||
|
if (isDimension(feature) && typeof value === 'number') {
|
||
|
value = value + 'px';
|
||
|
}
|
||
|
if (value === true) {
|
||
|
mq += feature;
|
||
|
} else if (value === false) {
|
||
|
mq += 'not ' + feature;
|
||
|
} else {
|
||
|
mq += '(' + feature + ': ' + value + ')';
|
||
|
}
|
||
|
if (index < features.length - 1) {
|
||
|
mq += ' and ';
|
||
|
}
|
||
|
});
|
||
|
return mq;
|
||
|
};
|
||
|
|
||
|
export default function(query) {
|
||
|
let mq = '';
|
||
|
if (typeof query === 'string') {
|
||
|
return query;
|
||
|
}
|
||
|
// Handling array of media queries
|
||
|
if (query instanceof Array) {
|
||
|
query.forEach(function(q, index) {
|
||
|
mq += obj2mq(q);
|
||
|
if (index < query.length - 1) {
|
||
|
mq += ', ';
|
||
|
}
|
||
|
});
|
||
|
return mq;
|
||
|
}
|
||
|
// Handling single media query
|
||
|
return obj2mq(query);
|
||
|
}
|