welsonjs/node_modules/modernizr/lib/build-query.js

52 lines
1.7 KiB
JavaScript

define(['lodash', 'metadata'], function(_, metadata) {
function getDetectObjByAmdPath(amdPath) {
return _.find(metadata, function(detect) {
return detect.amdPath === amdPath || detect.amdPath === 'test/' + amdPath;
});
}
return function generateBuildQuery(config) {
// Format:
// ?-<prop1>-<prop2>-…-<propN>-<option1>-<option2>-…<optionN>[-dontmin][-cssclassprefix:<prefix>]
// where prop1…N and option1…N are sorted alphabetically (for consistency)
var dontmin = !config.minify;
// Config uses amdPaths, but build query uses property names
var props = _.chain(config['feature-detects'])
.map(function(amdPath) {
var detect = getDetectObjByAmdPath(amdPath);
var property = detect && detect.property;
if (property) {
property = _.isArray(property) ?
property.join('_').replace('-', '_') :
property.replace('-', '_');
return property;
}
})
.filter()
.value();
// Config uses amdPaths, but the option's just use their names.
// A few of the values have to be massaged in order to match
// the `value`
var opts = _.map(config.options, function(opt) {
if (opt.indexOf('html5') === 0) {
opt = opt.replace('html5', '');
}
return opt.toLowerCase();
});
var sortedProps = props.sort();
var sortedOpts = opts.sort();
// Options are AMD paths in the config, but need to be converted to
var buildQuery = '?-' + sortedProps.concat(sortedOpts).join('-') +
(dontmin ? '-dontmin' : '') +
((config.classPrefix) ?
'-cssclassprefix:' + config.classPrefix : '');
return buildQuery;
};
});