From a985eece5eb3e43d6412ba87abd9e68bdbf5d408 Mon Sep 17 00:00:00 2001 From: Joost De Cock Date: Sat, 25 Jan 2020 16:07:37 +0100 Subject: [PATCH] fix(create-freesewing-pattern): Fix for #257 --- config/changelog.yaml | 31 +++- .../lib/prompt-library-params.js | 145 ++++++++++-------- packages/i18n/src/locales/en/cfp.yaml | 1 + .../i18n/src/locales/en/measurements.yaml | 8 +- 4 files changed, 120 insertions(+), 65 deletions(-) diff --git a/config/changelog.yaml b/config/changelog.yaml index 0d19c031eb1..86dd916a311 100644 --- a/config/changelog.yaml +++ b/config/changelog.yaml @@ -1,9 +1,38 @@ Unreleased: - date: + date: 2020-02-02 Added: + breanna: + - Breanna is a body block for womenswear + core: + - Added the `Path.noop()` method + - Added the `Path.insop()` methods + i18n: + - Added translations for Breanna Changed: + carlita: + - Renamed `highPointShoulderToBust` measurement to `hpsToBust` + components: + - DraftConfigurator has been updated to reflect frontend naming changes + - `pattern` is now `design` + - `recipe` is now `pattern` + - `gist` is now `data` + css-theme: + - Added new styles for the frontend changes in 2.2 + i18n: + - Added/Updated strings for the 2.2 frontend changes + - Changed `Joost De Cock` to `Joost` because spam filters don't like cock + models: + - Extended the menswear size range to have 10 different sizes, just like womenswear + mui-theme: + - Changed the light background to `#f8f9fa` rather than `#fff` + - Changed the navbar to be light/dark based on the theme, rather than always dark + simone: + - Renamed `highPointShoulderToBust` measurement to `hpsToBust` Deprecated: Removed: + i18n: + - Removed the files for homepage translation, and moved that content to markdown + - Removed the files for editor translation, as it is no longer used Fixed: Security: diff --git a/packages/create-freesewing-pattern/lib/prompt-library-params.js b/packages/create-freesewing-pattern/lib/prompt-library-params.js index 727edb3b419..e8152ae1f36 100644 --- a/packages/create-freesewing-pattern/lib/prompt-library-params.js +++ b/packages/create-freesewing-pattern/lib/prompt-library-params.js @@ -1,128 +1,147 @@ -"use strict"; +'use strict' -const inquirer = require("inquirer"); -const validateNpmName = require("validate-npm-package-name"); -const languages = require("@freesewing/i18n").languages; -const strings = require("@freesewing/i18n").strings; -const config = require("./config"); +const inquirer = require('inquirer') +const validateNpmName = require('validate-npm-package-name') +const languages = require('@freesewing/i18n').languages +const strings = require('@freesewing/i18n').strings +const config = require('./config') +const chalk = require('chalk') -let languageChoices = []; +const stringToPackageName = string => + string + .replace(/'|"|`|!|\*|~|\(|\)/g, '') + .replace(/ /g, '-') + .toLowerCase() + +let languageChoices = [] for (let l of Object.keys(languages)) { languageChoices.push({ name: languages[l], value: l, short: languages[l] - }); + }) } module.exports = async opts => { if (opts.name && !validateNpmName(opts.name).validForNewPackages) { - throw new Error(`invalid package name "${opts.name}"`); + throw new Error(`invalid package name "${opts.name}"`) } if (opts.skipPrompts) { if (!opts.name) { - throw new Error( - "invalid input; you must pass a package name with --skip-prompts" - ); + throw new Error('invalid input; you must pass a package name with --skip-prompts') } Object.keys(opts).forEach(key => { - const value = opts[key]; - if (typeof value === "function") { - opts[key] = value(opts); + const value = opts[key] + if (typeof value === 'function') { + opts[key] = value(opts) } - }); + }) - return opts; + return opts } else { + let lang = 'en' const info = await inquirer.prompt([ { - type: "list", - name: "language", - message: "Language", + type: 'list', + name: 'language', + message: 'Language', choices: languageChoices, - default: "en" + default: 'en', + validate: language => { + lang = language + return true + } }, { - type: "input", - name: "name", - message: info => strings[info.language]["cfp.patternName"], + type: 'input', + name: 'name', + message: info => strings[lang]['cfp.patternName'], validate: name => { - return name && validateNpmName(name).validForNewPackages; + try { + if (name && validateNpmName(name).validForNewPackages) return true + else { + return ( + strings[lang]['cfp.validNameWarning'] + ' ' + chalk.bold(stringToPackageName(name)) + ) + } + } catch (err) { + console.log({ err }) + } }, default: opts.name }, { - type: "input", - name: "description", - message: info => strings[info.language]["cfp.patternDescription"], + type: 'input', + name: 'description', + message: info => strings[info.language]['cfp.patternDescription'], default: opts.description }, { - type: "list", - name: "type", - message: info => strings[info.language]["cfp.patternType"], + type: 'list', + name: 'type', + message: info => strings[info.language]['cfp.patternType'], choices: info => [ { - name: strings[info.language]["filter.type.pattern"], - value: "pattern" + name: strings[info.language]['filter.type.pattern'], + value: 'pattern' }, - { name: strings[info.language]["filter.type.block"], value: "block" } + { name: strings[info.language]['filter.type.block'], value: 'block' } ], - default: "pattern" + default: 'pattern' }, { - type: "list", - name: "department", - message: info => strings[info.language]["filter.department.title"], + type: 'list', + name: 'department', + message: info => strings[info.language]['filter.department.title'], choices: info => [ { - name: strings[info.language]["filter.department.menswear"], - value: "menswear" + name: strings[info.language]['filter.department.menswear'], + value: 'menswear' }, { - name: strings[info.language]["filter.department.womenswear"], - value: "womenswear" + name: strings[info.language]['filter.department.womenswear'], + value: 'womenswear' }, { - name: strings[info.language]["filter.department.accessories"], - value: "accessories" + name: strings[info.language]['filter.department.accessories'], + value: 'accessories' } ], - default: "womenswear" + default: 'womenswear' }, { - type: "input", - name: "author", - message: info => strings[info.language]["cfp.author"], + type: 'input', + name: 'author', + message: info => strings[info.language]['cfp.author'], default: opts.author }, { - type: "input", - name: "repo", - message: info => strings[info.language]["cfp.githubRepo"], + type: 'input', + name: 'repo', + message: info => strings[info.language]['cfp.githubRepo'], default: opts.repo }, { - type: "list", - name: "manager", - message: info => strings[info.language]["cfp.packageManager"], - choices: ["npm", "yarn"], + type: 'list', + name: 'manager', + message: info => strings[info.language]['cfp.packageManager'], + choices: ['npm', 'yarn'], default: opts.manager } - ]); + ]) - config.set("author", info.author); - config.set("manager", info.manager); - config.set("template", "default"); - config.set("license", "MIT"); - info.template = "default"; + config.set('author', info.author) + config.set('manager', info.manager) + config.set('template', 'default') + config.set('license', 'MIT') + info.template = 'default' return { ...info, git: opts.git, version: opts.version - }; + } } -}; +} diff --git a/packages/i18n/src/locales/en/cfp.yaml b/packages/i18n/src/locales/en/cfp.yaml index b0257f5f4b3..05700427fb3 100644 --- a/packages/i18n/src/locales/en/cfp.yaml +++ b/packages/i18n/src/locales/en/cfp.yaml @@ -24,3 +24,4 @@ designModeIsOn: Design mode is on designModeIsOff: Design mode is off turnOn: Turn on turnOff: Turn off +validNameWarning: "Please pick a different name as this name would cause problems.\nWe (re-)use the pattern name as the NPM package name.\nPackage names must be lowercase and cannot contain special characters.\nSo please name your pattern accordingly, like:" diff --git a/packages/i18n/src/locales/en/measurements.yaml b/packages/i18n/src/locales/en/measurements.yaml index 94da10a6e34..27d7e55968c 100644 --- a/packages/i18n/src/locales/en/measurements.yaml +++ b/packages/i18n/src/locales/en/measurements.yaml @@ -1,12 +1,18 @@ acrossBack: Across back (deprecated) ankleCircumference: Ankle circumference bicepsCircumference: Biceps circumference +bustFront: Bust front bustSpan: Bust span +centerBackNeckToHips: Centerback neck to hips centerBackNeckToWaist: Centerback neck to waist chestCircumference: Chest circumference headCircumference: Head circumference highBust: High bust -highPointShoulderToBust: High point shoulder to bust +highBustFront: High bust front +hpsToBust: HPS to bust +hpsToHipsBack: HPS to hips back +hpsToHipsFront: HPS to hips front +hpsToWaistBack: HPS to waist back hipsCircumference: Hips circumference hipsToUpperLeg: Hips to upper leg inseam: Inseam