diff --git a/scripts/addpatterndocs.js b/scripts/addpatterndocs.js new file mode 100644 index 00000000000..e92f1d064f3 --- /dev/null +++ b/scripts/addpatterndocs.js @@ -0,0 +1,129 @@ +/* + * This will create (SVG) images for all options of all patterns + * To do that, it will load the configuration from: + * + * config/pattern-options.js + * + * Based on that, it will generate SVG images for each option and store them + * in the relevant folder: + * + * markdown/org/docs/patterns/[pattern]/[option]/[pattern]_[option]_sample.svg + * + */ +const fs = require('fs') +const path = require('path') +const core = require('../packages/core/dist') +const theme = require('../packages/plugin-theme/dist') +const pi = require('../packages/pattern-info/dist') +const models = require('../packages/models/dist') +const wb32 = models.withBreasts.size32 +const i18n = require('../packages/i18n/dist') +const capitalize = require('../packages/utils/capitalize') + +const missing = [] +const file = 'en.md' +const subpages = [ + 'cutting', + 'fabric', + 'instructions', + 'options', + 'measurements', + 'needs' +] + +const patternDocsPage = pattern => ` +--- + + + +` +const fixme = ` + + +This documentation page is yet to be written. + +Sorry for the inconvenience. + + +` + +const component = (comp, pattern) => `--- +--- + + + +` + +const patternDocsSubPage = (pattern, sub) => { + switch (sub) { + case 'measurements': + case 'options': + return component(sub, pattern) + break; + default: + return fixme + } +} + +const optionDocsPage = (pattern, option) => "---\n\n" + + i18n.strings.en[`options.${pattern}.${option}.description`] + "\n\n" + + `patterns.${pattern}.options.${option}.description` + +const present = folder => { + try { + const md = fs.readFileSync(path.join(folder, file)) + return true + } + catch (err) { + return false + } +} + +const checkOptionDocs = () => { + const steps = ['markdown', 'org', 'docs', 'patterns'] + for (const pattern of pi.list) { + const Pattern = require(`../packages/${pattern}/dist`) + // Index page, + const folder = path.join(...steps, pattern) + if (!present(folder)) { + fs.mkdirSync(folder, { recursive: true }) + fs.writeFileSync( + path.join(folder, file), + patternDocsPage(pattern), + ) + } + // Sub pages + for (const sub of subpages) { + const folder = path.join(...steps, pattern, sub) + if (!present(folder)) { + fs.mkdirSync(folder, { recursive: true }) + fs.writeFileSync( + path.join(folder, file), + patternDocsSubPage(pattern, sub), + ) + } + } + + // Options + for (const option of pi.options[pattern]) { + const folder = path.join('markdown', 'org', 'docs', 'patterns', pattern, 'options', option.toLowerCase()) + if (!present(folder)) { + missing.push(path.join(folder, file)) + fs.mkdirSync(folder, { recursive: true }) + fs.writeFileSync( + path.join(folder, file), + optionDocsPage(pattern, option), + ) + } + } + } + + if (missing.length < 1) console.log("\n 🎉 Everything looks fine 😀\n") + else { + console.log("\n", 'Added documenation pages for the following options:', "\n\n") + for (const line of missing) console.log(line) + } +} + +checkOptionDocs() + diff --git a/scripts/optiondocs.js b/scripts/optiondocsimages.js similarity index 100% rename from scripts/optiondocs.js rename to scripts/optiondocsimages.js