From 7442c980e53bdcbbd8ac11daa313d834e0788f14 Mon Sep 17 00:00:00 2001 From: Jeremy Thomas Date: Sat, 16 Jun 2018 19:01:35 +0100 Subject: [PATCH] Read derived variables --- docs/scripts/.gitignore | 1 + ...iables.js => 01-read-initial-variables.js} | 8 +- docs/scripts/02-read-derived-variables.js | 34 ++++ docs/scripts/read-derived-variables.js | 23 --- docs/scripts/utils.js | 146 ++++++++++-------- docs/scripts/variables.js | 19 ++- 6 files changed, 133 insertions(+), 98 deletions(-) rename docs/scripts/{read-initial-variables.js => 01-read-initial-variables.js} (76%) create mode 100644 docs/scripts/02-read-derived-variables.js delete mode 100644 docs/scripts/read-derived-variables.js diff --git a/docs/scripts/.gitignore b/docs/scripts/.gitignore index c465acc1..dd0cabdb 100644 --- a/docs/scripts/.gitignore +++ b/docs/scripts/.gitignore @@ -1,3 +1,4 @@ # Folders +/build /output diff --git a/docs/scripts/read-initial-variables.js b/docs/scripts/01-read-initial-variables.js similarity index 76% rename from docs/scripts/read-initial-variables.js rename to docs/scripts/01-read-initial-variables.js index e562dcdc..bd7c6a48 100644 --- a/docs/scripts/read-initial-variables.js +++ b/docs/scripts/01-read-initial-variables.js @@ -20,13 +20,11 @@ function plugin() { if (variable != false) { variables.by_name[variable.name] = variable; - variables[file_name].push(variable.name); + variables.list.push(variable.name); } }); - - metalsmith.variables = variables; - - utils.writeFile('./output/initial-variables.json', variables); }); + + utils.writeFile(utils.files.initial_variables, variables); }; } diff --git a/docs/scripts/02-read-derived-variables.js b/docs/scripts/02-read-derived-variables.js new file mode 100644 index 00000000..b8f6278d --- /dev/null +++ b/docs/scripts/02-read-derived-variables.js @@ -0,0 +1,34 @@ +module.exports = plugin; + +const utils = require('./utils'); +const fs = require('fs'); + +let initial_variables = JSON.parse(fs.readFileSync(utils.files.initial_variables)); + +function plugin() { + let variables = { + by_name: {}, + }; + + return (files, metalsmith, done) => { + setImmediate(done); + + Object.keys(files).forEach(file_path => { + const {file_name, lines} = utils.getLines(files, file_path); + + variables[file_name] = []; + + lines.forEach(line => { + const variable = utils.parseLine(line); + + if (variable != false) { + variable.computed_value = utils.getComputedValue(variable.value, variable.type, initial_variables); + variables.by_name[variable.name] = variable; + variables.list.push(variable.name); + } + }); + }); + + utils.writeFile(utils.files.derived_variables, variables); + }; +} diff --git a/docs/scripts/read-derived-variables.js b/docs/scripts/read-derived-variables.js deleted file mode 100644 index 75c77d9f..00000000 --- a/docs/scripts/read-derived-variables.js +++ /dev/null @@ -1,23 +0,0 @@ -module.exports = plugin; - -var utils = require('./utils'); - -function plugin() { - return (files, metalsmith, done) => { - setImmediate(done); - - Object.keys(files).forEach(file_path => { - const {file_name, lines} = utils.getLines(files, file_path); - - lines.forEach(line => { - const variable = utils.parseLine(line); - - if (variable != false) { - console.log('variable', variable); - } - }); - - metalsmith.variables = variables; - }); - }; -} diff --git a/docs/scripts/utils.js b/docs/scripts/utils.js index 813b1167..654eae91 100644 --- a/docs/scripts/utils.js +++ b/docs/scripts/utils.js @@ -1,69 +1,91 @@ const fs = require('fs'); -function getVariableType(value) { - if (value.startsWith('hsl')) { - return 'color'; - } else if (value.startsWith('$')) { - return 'variable'; - } else if (value.startsWith('BlinkMacSystemFont') || value == 'monospace') { - return 'font-family'; - } else if (value == 'true' || value == 'false') { - return 'boolean'; - } else if (value.includes('+')) { - return 'computed'; - } else if (value.endsWith('px') || value.endsWith('rem')) { - return 'size'; - } - - return 'string'; -} - -function parseLine(line) { - if (line.startsWith('$') && line.endsWith('!default')) { - const colon_index = line.indexOf(':'); - const variable_name = line.substring(0, colon_index).trim(); - - const default_index = line.indexOf('!default'); - const variable_value = line.substring(colon_index + 1, default_index).trim(); - - return variable = { - name: variable_name, - value: variable_value, - type: getVariableType(variable_value), - }; - } - - return false; -} - -function getLines(files, file_path) { - const file = files[file_path]; - const slash_index = file_path.lastIndexOf('/'); - const dot_index = file_path.lastIndexOf('.'); - const file_name = file_path.substring(slash_index + 1, dot_index); - - return { - file_name, - lines: file.contents.toString().split(/(?:\r\n|\r|\n)/g), - } -} - -function writeFile(file_path, data) { - const json_data = JSON.stringify(data, null, ' '); - - fs.writeFile(file_path, json_data, err => { - if (err) { - return console.log(err); +let utils = { + getVariableType: (value) => { + if (value.startsWith('hsl')) { + return 'color'; + } else if (value.startsWith('$')) { + return 'variable'; + } else if (value.startsWith('BlinkMacSystemFont') || value == 'monospace') { + return 'font-family'; + } else if (value == 'true' || value == 'false') { + return 'boolean'; + } else if (value.includes('+')) { + return 'computed'; + } else if (value.endsWith('00')) { + return 'font-weight'; + } else if (value.endsWith('px') || value.endsWith('rem')) { + return 'size'; } - console.log('The file was saved!'); - }); + return 'string'; + }, + + parseLine: (line) => { + if (line.startsWith('$') && line.endsWith('!default')) { + const colon_index = line.indexOf(':'); + const variable_name = line.substring(0, colon_index).trim(); + + const default_index = line.indexOf('!default'); + const variable_value = line.substring(colon_index + 1, default_index).trim(); + + return variable = { + name: variable_name, + value: variable_value, + type: utils.getVariableType(variable_value), + }; + } + + return false; + }, + + getLines: (files, file_path) => { + const file = files[file_path]; + const slash_index = file_path.lastIndexOf('/'); + const dot_index = file_path.lastIndexOf('.'); + const file_name = file_path.substring(slash_index + 1, dot_index); + + return { + file_name, + lines: file.contents.toString().split(/(?:\r\n|\r|\n)/g), + } + }, + + writeFile: (file_path, data) => { + const json_data = JSON.stringify(data, null, ' '); + + fs.writeFile(file_path, json_data, err => { + if (err) { + return console.log(err); + } + + console.log('The file was saved!'); + }); + }, + + getComputedValue: (value, type, initial_variables) => { + if (value.startsWith('$') && value in initial_variables.by_name) { + const second_value = initial_variables.by_name[value].value; + console.log('second_value', second_value); + + if (second_value.startsWith('$') && second_value in initial_variables) { + const third_value = initial_variables.by_name[second_value].value; + console.log('third_value', third_value); + + return third_value; + } + + return second_value; + } + + return value; + } } -let plugin = {}; -plugin.getVariableType = getVariableType; -plugin.getLines = getLines; -plugin.parseLine = parseLine; -plugin.writeFile = writeFile; +const output_base = './output/'; -module.exports = plugin; +utils.files = {}; +utils.files.initial_variables = `${output_base}initial-variables.json`; +utils.files.derived_variables = `${output_base}derived-variables.json`; + +module.exports = utils; diff --git a/docs/scripts/variables.js b/docs/scripts/variables.js index bbdd46d8..f378e210 100644 --- a/docs/scripts/variables.js +++ b/docs/scripts/variables.js @@ -6,18 +6,21 @@ var writemetadata = require('metalsmith-writemetadata'); // var regex = '**/*.sass'; var regex_initial = '**/initial-variables.sass'; var regex_derived = '**/derived-variables.sass'; -var initial_plugin = require('./read-initial-variables'); -var derived_plugin = require('./read-derived-variables'); +var initial_plugin = require('./01-read-initial-variables'); +var derived_plugin = require('./02-read-derived-variables'); Metalsmith(__dirname) - .source('../../sass/utilities') - // .destination('./output') - // .clean(true) + .source('../../sass') .use(filter(regex_initial)) .use(initial_plugin()) - // .use(filter(regex_derived)) - // .use(derived_plugin()) - // .use(writemetadata()) + .build(function(err) { + if (err) throw err; + }); + +Metalsmith(__dirname) + .source('../../sass') + .use(filter(regex_derived)) + .use(derived_plugin()) .build(function(err) { if (err) throw err; });