77 lines
1.9 KiB
JavaScript
77 lines
1.9 KiB
JavaScript
|
var empty = require('is-empty-object');
|
||
|
var format = require('util').format;
|
||
|
var stripIndent = require('strip-indent');
|
||
|
|
||
|
var SASS_TEMPLATE = stripIndent(`
|
||
|
@charset 'utf-8';
|
||
|
|
||
|
// Variables go here
|
||
|
%s
|
||
|
|
||
|
// Core imports go here
|
||
|
@import 'foundation';
|
||
|
@import 'motion-ui';
|
||
|
|
||
|
// Modules go here
|
||
|
%s
|
||
|
|
||
|
// Motion UI goes here
|
||
|
@include motion-ui-transitions;
|
||
|
@include motion-ui-animations;
|
||
|
`);
|
||
|
|
||
|
/**
|
||
|
* Generates an entry point Sass file with a custom list of CSS exports and Sass variables.
|
||
|
* @param {Object} config - Customizer configuration object.
|
||
|
* @param {String[]} modules - Modules to include CSS for.
|
||
|
* @param {Object} variables - Sass variable overrides to include. The key is the name of the variable, and the value is the value.
|
||
|
* @returns {String} Formatted Sass file.
|
||
|
*/
|
||
|
module.exports = function(config, modules, variables) {
|
||
|
var variableList = [];
|
||
|
var colorList = {};
|
||
|
var exportList = ['@include foundation-global-styles;'];
|
||
|
|
||
|
if (empty(modules)) {
|
||
|
modules = Object.keys(config);
|
||
|
}
|
||
|
|
||
|
// Create variable overrides code
|
||
|
for (var i in variables) {
|
||
|
var name = i.replace('_', '-');
|
||
|
if (name.match(/-color$/)) {
|
||
|
var key = name.replace('-color', '');
|
||
|
colorList[key] = variables[i];
|
||
|
}
|
||
|
else {
|
||
|
variableList.push(format('$%s: %s;', name, variables[i]));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (!empty(colorList)) {
|
||
|
variableList.push(createPaletteMap(colorList));
|
||
|
}
|
||
|
|
||
|
// Create module exports with @include
|
||
|
for (var i in modules) {
|
||
|
var name = modules[i];
|
||
|
|
||
|
if (config[name] && config[name].sass) {
|
||
|
exportList.push(format('@include foundation-%s;', config[name].sass));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return format(SASS_TEMPLATE, variableList.join('\n'), exportList.join('\n'))
|
||
|
}
|
||
|
|
||
|
function createPaletteMap(colors) {
|
||
|
var output = '$foundation-palette: (%s\n);';
|
||
|
var keys = '';
|
||
|
|
||
|
for (var i in colors) {
|
||
|
keys += format('\n %s: %s,', i, colors[i]);
|
||
|
}
|
||
|
|
||
|
return format(output, keys);
|
||
|
}
|