bootstrap-less-port
Version:
A Less port of Bootstrap v4
52 lines (37 loc) • 1.34 kB
JavaScript
let themeColors = {}
//
// Helper Functions
//
function lookupVariable(context, variableName) {
const { frames, importantScope } = context
return tree.Variable.prototype.find(frames, frame => {
const { value, important } = frame.variable(variableName) || {}
if (value === undefined)
return
if (important && importantScope[importantScope.length - 1])
importantScope[importantScope.length - 1].important = important
return value.eval(context)
})
}
// @TODO: [@calvinjuarez] unify this function between files, maybe even canonize it as a
// `Ruleset`/`DetachedRuleset` method at some point.
function rulesetToMap(context, { ruleset: { rules } } = { ruleset: { rules: [] } }) {
const map = {}
rules.forEach(rule => {
// Not exactly sure how to handle other types (or if they should be handled at all).
if (! (rule instanceof tree.Declaration))
return
const { name: key, value } = rule.eval(context)
map[key] = value
})
return map
}
//
// Less Functions
//
functions.add('theme-color', function ({ value: colorName } = { value: 'primary' }) {
// If `themeColors` hasn’t been defined yet, set it to the value of `@theme-colors`.
if (Object.keys(themeColors).length === 0)
themeColors = rulesetToMap(this.context, lookupVariable(this.context, '@theme-colors'))
return themeColors[colorName]
})