1
0
Fork 0

chore: Extended prettier for config files + run

This commit is contained in:
Joost De Cock 2022-10-13 16:19:36 +02:00
parent f673e485ad
commit 322100f54c
27 changed files with 454 additions and 375 deletions

View file

@ -36,4 +36,3 @@ _social:
link: 'https://instagram.com/freesewing_org' link: 'https://instagram.com/freesewing_org'
img: 'https://img.shields.io/badge/%F3%A0%80%A0-Follow%20us-E4405F.svg?logo=instagram&logoColor=white&logoWidth=15' img: 'https://img.shields.io/badge/%F3%A0%80%A0-Follow%20us-E4405F.svg?logo=instagram&logoColor=white&logoWidth=15'
alt: 'Follow @freesewing_org on Twitter' alt: 'Follow @freesewing_org on Twitter'

View file

@ -1,4 +1,4 @@
import { designs, plugins, packages } from './software/index.mjs' import { designs, plugins, packages } from './software/index.mjs'
/* /*
* As this monorepo has interlocking dependencies * As this monorepo has interlocking dependencies
@ -6,21 +6,20 @@ import { designs, plugins, packages } from './software/index.mjs'
* order. This file takes care of that * order. This file takes care of that
*/ */
const first = [ 'core', 'config-helpers', 'remark-jargon', 'snapseries' ] const first = ['core', 'config-helpers', 'remark-jargon', 'snapseries']
const blocks = [ 'brian', 'titan', 'bella', 'breanna' ] const blocks = ['brian', 'titan', 'bella', 'breanna']
const extended = [ 'bent', 'simon', 'carlton', 'ursula' ] const extended = ['bent', 'simon', 'carlton', 'ursula']
const last = ['i18n'] const last = ['i18n']
export const buildOrder = [ export const buildOrder = [
// First build FreeSewing core library and config-helpers // First build FreeSewing core library and config-helpers
first, first,
// Then build all FreeSewing plugins, but not the bundle // Then build all FreeSewing plugins, but not the bundle
Object.keys(plugins).filter(id => id !== 'plugin-bundle'), Object.keys(plugins).filter((id) => id !== 'plugin-bundle'),
// Then build the plugin bundle // Then build the plugin bundle
[ 'plugin-bundle' ], ['plugin-bundle'],
// Then build all FreeSewing designs that are blocks // Then build all FreeSewing designs that are blocks
blocks, blocks,
@ -29,11 +28,10 @@ export const buildOrder = [
extended, extended,
// Then build all remaining designs // Then build all remaining designs
Object.keys(designs).filter(id => [...blocks, ...extended].indexOf(id) === -1), Object.keys(designs).filter((id) => [...blocks, ...extended].indexOf(id) === -1),
// Finally build the rest of the packages // Finally build the rest of the packages
Object.keys(packages).filter(id => first.indexOf(id) === -1 && last.indexOf(id) === -1), Object.keys(packages).filter((id) => first.indexOf(id) === -1 && last.indexOf(id) === -1),
last last,
] ]

View file

@ -1,5 +1,4 @@
Unreleased: Unreleased:
Breaking: Breaking:
all: all:
- This package is now ESM only. - This package is now ESM only.
@ -84,7 +83,6 @@ Unreleased:
plugin-versionfree-svg: plugin-versionfree-svg:
- This plugin no longer sets its version as an SVG attribute when rendering patterns - This plugin no longer sets its version as an SVG attribute when rendering patterns
Fixed: Fixed:
albert: albert:
- Workaround for not finding a suitable legband radius - Workaround for not finding a suitable legband radius
@ -104,7 +102,6 @@ Unreleased:
- Added seperate waistband options - Added seperate waistband options
- Added bow tie placement option - Added bow tie placement option
2.22.0: 2.22.0:
date: 2022-08-23 date: 2022-08-23
@ -643,7 +640,6 @@ Unreleased:
plugin-title: plugin-title:
- Removed rendering of config.cut as it's not used - Removed rendering of config.cut as it's not used
2.19.9: 2.19.9:
date: 2022-01-09 date: 2022-01-09
@ -799,7 +795,6 @@ Unreleased:
- Fixed a regression that caused the `waistHeight` option to be ignored. - Fixed a regression that caused the `waistHeight` option to be ignored.
Closes [#1467](https://github.com/freesewing/freesewing/issues/1467) Closes [#1467](https://github.com/freesewing/freesewing/issues/1467)
2.19.3: 2.19.3:
date: 2021-11-05 date: 2021-11-05
@ -811,7 +806,6 @@ Unreleased:
charlie: charlie:
- Converted the `waistbandWidth` options to snapped pct (was normal pct) - Converted the `waistbandWidth` options to snapped pct (was normal pct)
2.19.2: 2.19.2:
date: 2021-11-02 date: 2021-11-02
@ -1221,7 +1215,6 @@ Unreleased:
create-freesewing-pattern: create-freesewing-pattern:
- Don't list pattern as dependency in the example package.json - Don't list pattern as dependency in the example package.json
2.16.0: 2.16.0:
date: 2021-05-24 date: 2021-05-24

View file

@ -1,4 +1,4 @@
author: "Joost De Cock <joost@decock.org> (https://github.com/joostdecock)" author: 'Joost De Cock <joost@decock.org> (https://github.com/joostdecock)'
homepage: "https://freesewing.org/" homepage: 'https://freesewing.org/'
repository: "github:freesewing/freesewing" repository: 'github:freesewing/freesewing'
bugsUrl: "https://github.com/freesewing/freesewing/issues" bugsUrl: 'https://github.com/freesewing/freesewing/issues'

View file

@ -81,5 +81,3 @@ plugin-bundle:
- made to measure - made to measure
- diy - diy
- fashion - fashion

View file

@ -45,5 +45,3 @@ export const degreeMeasurements = ['shoulderSlope']
/* Helper method to determine whether a measurement uses degrees */ /* Helper method to determine whether a measurement uses degrees */
export const isDegreeMeasurement = (measie) => degreeMeasurements.indexOf(measie) !== -1 export const isDegreeMeasurement = (measie) => degreeMeasurements.indexOf(measie) !== -1

View file

@ -1,6 +1,4 @@
module.exports = { module.exports = {
models: { models: {},
}, only: {},
only: {
}
} }

View file

@ -1,351 +1,351 @@
{ {
"accessories": { "accessories": {
"albert": { "albert": {
"description": "A FreeSewing pattern for an apron", "description": "A FreeSewing pattern for an apron",
"code": "Wouter Van Wageningen", "code": "Wouter Van Wageningen",
"design": "Wouter Van Wageningen", "design": "Wouter Van Wageningen",
"difficulty": 2, "difficulty": 2,
"tags": [ "accessories" ] "tags": ["accessories"]
}, },
"benjamin": { "benjamin": {
"description": "A FreeSewing pattern for a bow tie", "description": "A FreeSewing pattern for a bow tie",
"code": "Wouter Van Wageningen", "code": "Wouter Van Wageningen",
"design": "Wouter Van Wageningen", "design": "Wouter Van Wageningen",
"difficulty": 3, "difficulty": 3,
"tags": [ "accessories" ] "tags": ["accessories"]
}, },
"bob": { "bob": {
"description": "A FreeSewing pattern for a bib", "description": "A FreeSewing pattern for a bib",
"code": "Joost De Cock", "code": "Joost De Cock",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 3, "difficulty": 3,
"tags": [ "accessories", "infants" ] "tags": ["accessories", "infants"]
}, },
"florence": { "florence": {
"description": "A FreeSewing pattern for a face mask", "description": "A FreeSewing pattern for a face mask",
"code": "Joost De Cock", "code": "Joost De Cock",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 1, "difficulty": 1,
"tags": [ "accessories" ] "tags": ["accessories"]
}, },
"florent": { "florent": {
"description": "A FreeSewing pattern for a flat cap", "description": "A FreeSewing pattern for a flat cap",
"code": [ "Quentin Felix", "Joost De Cock" ], "code": ["Quentin Felix", "Joost De Cock"],
"design": "Quentin Felix", "design": "Quentin Felix",
"difficulty": 3, "difficulty": 3,
"tags": [ "accessories", "hats" ] "tags": ["accessories", "hats"]
}, },
"hi": { "hi": {
"description": "A FreeSewing pattern for a shark plush toy", "description": "A FreeSewing pattern for a shark plush toy",
"code": "Wouter Van Wageningen", "code": "Wouter Van Wageningen",
"design": "Wouter Van Wageningen", "design": "Wouter Van Wageningen",
"difficulty": 4, "difficulty": 4,
"tags": [ "accessories", "toys" ] "tags": ["accessories", "toys"]
}, },
"holmes": { "holmes": {
"description": "A FreeSewing pattern for a Sherlock Holmes hat", "description": "A FreeSewing pattern for a Sherlock Holmes hat",
"code": [ "Erica Alcusa Sáez", "bobgeorgethe3rd" ], "code": ["Erica Alcusa Sáez", "bobgeorgethe3rd"],
"design": "Erica Alcusa Sáez", "design": "Erica Alcusa Sáez",
"difficulty": 3, "difficulty": 3,
"tags": [ "accessories", "hats" ] "tags": ["accessories", "hats"]
}, },
"hortensia": { "hortensia": {
"description": "A FreeSewing pattern for a handbag", "description": "A FreeSewing pattern for a handbag",
"code": "Wouter Van Wageningen", "code": "Wouter Van Wageningen",
"design": [ "Stoffsuchti", "Wouter Van Wageningen" ], "design": ["Stoffsuchti", "Wouter Van Wageningen"],
"difficulty": 3, "difficulty": 3,
"tags": [ "accessories", "bags" ] "tags": ["accessories", "bags"]
}, },
"lucy": { "lucy": {
"description": "A FreeSewing pattern for a historical tie-on pocket", "description": "A FreeSewing pattern for a historical tie-on pocket",
"code": "SeaZeeZee", "code": "SeaZeeZee",
"design": "SeaZeeZee", "design": "SeaZeeZee",
"difficulty": 2, "difficulty": 2,
"tags": [ "accessories", "historical", "bags" ] "tags": ["accessories", "historical", "bags"]
}, },
"octoplushy": { "octoplushy": {
"description": "A FreeSewing pattern for an octopus plushy toy", "description": "A FreeSewing pattern for an octopus plushy toy",
"code": "Wouter Van Wageningen", "code": "Wouter Van Wageningen",
"design": "Wouter Van Wageningen", "design": "Wouter Van Wageningen",
"difficulty": 4, "difficulty": 4,
"tags": [ "accessories", "toys" ] "tags": ["accessories", "toys"]
}, },
"trayvon": { "trayvon": {
"description": "A FreeSewing pattern for a tie", "description": "A FreeSewing pattern for a tie",
"code": "Joost De Cock", "code": "Joost De Cock",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 2, "difficulty": 2,
"tags": [ "accessories" ] "tags": ["accessories"]
} }
}, },
"blocks": { "blocks": {
"bella": { "bella": {
"description": "A FreeSewing pattern for a womenswear bodice block", "description": "A FreeSewing pattern for a womenswear bodice block",
"code": "Joost De Cock", "code": "Joost De Cock",
"design": [ "Bella Incognito", "Joost De Cock" ], "design": ["Bella Incognito", "Joost De Cock"],
"difficulty": 3, "difficulty": 3,
"tags": [ "tops" ] "tags": ["tops"]
}, },
"bent": { "bent": {
"description": "A FreeSewing pattern for a menswear body block with a two-part sleeve", "description": "A FreeSewing pattern for a menswear body block with a two-part sleeve",
"code": "Joost De Cock", "code": "Joost De Cock",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 3, "difficulty": 3,
"tags": [ "tops" ] "tags": ["tops"]
}, },
"breanna": { "breanna": {
"description": "A FreeSewing pattern for a basic body block for womenswear", "description": "A FreeSewing pattern for a basic body block for womenswear",
"code": "Joost De Cock", "code": "Joost De Cock",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 3, "difficulty": 3,
"tags": [ "tops" ] "tags": ["tops"]
}, },
"brian": { "brian": {
"description": "A FreeSewing pattern for a basic body block for menswear", "description": "A FreeSewing pattern for a basic body block for menswear",
"code": "Joost De Cock", "code": "Joost De Cock",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 3, "difficulty": 3,
"tags": [ "tops" ] "tags": ["tops"]
}, },
"noble": { "noble": {
"description": "A FreeSewing pattern for a princess seam bodice block", "description": "A FreeSewing pattern for a princess seam bodice block",
"code": "Wouter Van Wageningen", "code": "Wouter Van Wageningen",
"design": "Wouter Van Wageningen", "design": "Wouter Van Wageningen",
"difficulty": 3, "difficulty": 3,
"tags": [ "tops" ] "tags": ["tops"]
}, },
"titan": { "titan": {
"description": "A FreeSewing pattern for a unisex trouser block", "description": "A FreeSewing pattern for a unisex trouser block",
"code": "Joost De Cock", "code": "Joost De Cock",
"design": [ "Debra Bean", "Joost De Cock" ], "design": ["Debra Bean", "Joost De Cock"],
"difficulty": 3, "difficulty": 3,
"tags": [ "bottoms" ] "tags": ["bottoms"]
} }
}, },
"garments": { "garments": {
"aaron": { "aaron": {
"description": "A FreeSewing pattern for a A-shirt or tank top", "description": "A FreeSewing pattern for a A-shirt or tank top",
"code": "Joost De Cock", "code": "Joost De Cock",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 2, "difficulty": 2,
"tags": [ "tops", "underwear" ] "tags": ["tops", "underwear"]
}, },
"bee": { "bee": {
"description": "A FreeSewing pattern for a bikini top", "description": "A FreeSewing pattern for a bikini top",
"code": "bobgeorgethe3rd", "code": "bobgeorgethe3rd",
"design": "PrudenceRabbit", "design": "PrudenceRabbit",
"difficulty": 3, "difficulty": 3,
"tags": [ "tops", "swimwear" ] "tags": ["tops", "swimwear"]
}, },
"bruce": { "bruce": {
"description": "A FreeSewing pattern for boxer briefs", "description": "A FreeSewing pattern for boxer briefs",
"code": "Joost De Cock", "code": "Joost De Cock",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 3, "difficulty": 3,
"tags": [ "tops", "underwear" ] "tags": ["tops", "underwear"]
}, },
"carlita": { "carlita": {
"description": "A FreeSewing pattern for Sherlock Holmes cosplay; Or just a nice long coat", "description": "A FreeSewing pattern for Sherlock Holmes cosplay; Or just a nice long coat",
"code": "Joost De Cock", "code": "Joost De Cock",
"design": [ "Anneke Caramin", "Joost De Cock" ], "design": ["Anneke Caramin", "Joost De Cock"],
"difficulty": 5, "difficulty": 5,
"tags": [ "tops", "coats" ] "tags": ["tops", "coats"]
}, },
"carlton": { "carlton": {
"description": "A FreeSewing pattern for Sherlock Holmes cosplay; Or just a nice long coat", "description": "A FreeSewing pattern for Sherlock Holmes cosplay; Or just a nice long coat",
"code": "Joost De Cock", "code": "Joost De Cock",
"design": [ "Anneke Caramin", "Joost De Cock" ], "design": ["Anneke Caramin", "Joost De Cock"],
"difficulty": 5, "difficulty": 5,
"tags": [ "tops", "coats" ] "tags": ["tops", "coats"]
}, },
"cathrin": { "cathrin": {
"description": "A FreeSewing pattern for a underbust corset / waist trainer", "description": "A FreeSewing pattern for a underbust corset / waist trainer",
"code": "Joost De Cock", "code": "Joost De Cock",
"design": [ "Cathrin Åhlén", "Joost De Cock" ], "design": ["Cathrin Åhlén", "Joost De Cock"],
"difficulty": 4, "difficulty": 4,
"tags": [ "tops", "underwear" ] "tags": ["tops", "underwear"]
}, },
"charlie": { "charlie": {
"description": "A FreeSewing pattern for chino trousers", "description": "A FreeSewing pattern for chino trousers",
"code": "Joost De Cock", "code": "Joost De Cock",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 3, "difficulty": 3,
"tags": [ "bottoms", "trousers" ] "tags": ["bottoms", "trousers"]
}, },
"cornelius": { "cornelius": {
"description": "A FreeSewing pattern for cycling breeches, based on the Keystone drafting system", "description": "A FreeSewing pattern for cycling breeches, based on the Keystone drafting system",
"code": "Wouter Van Wageningen", "code": "Wouter Van Wageningen",
"design": "Wouter Van Wageningen", "design": "Wouter Van Wageningen",
"difficulty": 3, "difficulty": 3,
"tags": [ "bottoms", "trousers" ] "tags": ["bottoms", "trousers"]
}, },
"diana": { "diana": {
"description": "A FreeSewing pattern for a top with a draped neck", "description": "A FreeSewing pattern for a top with a draped neck",
"code": "Erica Alcusa Sáez", "code": "Erica Alcusa Sáez",
"design": "Erica Alcusa Sáez", "design": "Erica Alcusa Sáez",
"difficulty": 2, "difficulty": 2,
"tags": [ "tops" ] "tags": ["tops"]
}, },
"huey": { "huey": {
"description": "A FreeSewing pattern for a zip-up hoodie", "description": "A FreeSewing pattern for a zip-up hoodie",
"code": "Joost De Cock", "code": "Joost De Cock",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 3, "difficulty": 3,
"tags": [ "tops" ] "tags": ["tops"]
}, },
"hugo": { "hugo": {
"description": "A FreeSewing pattern for a hooded jumper with raglan sleeves", "description": "A FreeSewing pattern for a hooded jumper with raglan sleeves",
"code": "Joost De Cock", "code": "Joost De Cock",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 3, "difficulty": 3,
"tags": [ "tops" ] "tags": ["tops"]
}, },
"jaeger": { "jaeger": {
"description": "A FreeSewing pattern for a sport coat style jacket", "description": "A FreeSewing pattern for a sport coat style jacket",
"code": "Joost De Cock", "code": "Joost De Cock",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 5, "difficulty": 5,
"tags": [ "tops", "coats" ] "tags": ["tops", "coats"]
}, },
"lunetius": { "lunetius": {
"description": "A FreeSewing pattern for a lacerna, a historical Roman cloak", "description": "A FreeSewing pattern for a lacerna, a historical Roman cloak",
"code": "Rika Tamaike", "code": "Rika Tamaike",
"design": "Rika Tamaike", "design": "Rika Tamaike",
"difficulty": 1, "difficulty": 1,
"tags": [ "tops", "coats", "historical" ] "tags": ["tops", "coats", "historical"]
}, },
"paco": { "paco": {
"description": "A FreeSewing pattern for summer pants", "description": "A FreeSewing pattern for summer pants",
"code": "Joost De Cock", "code": "Joost De Cock",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 3, "difficulty": 3,
"tags": [ "bottoms", "trousers" ] "tags": ["bottoms", "trousers"]
}, },
"penelope": { "penelope": {
"description": "A FreeSewing pattern for a pencil skirt", "description": "A FreeSewing pattern for a pencil skirt",
"code": "Wouter Van Wageningen", "code": "Wouter Van Wageningen",
"design": "Wouter Van Wageningen", "design": "Wouter Van Wageningen",
"difficulty": 3, "difficulty": 3,
"tags": [ "bottoms", "skirts" ] "tags": ["bottoms", "skirts"]
}, },
"sandy": { "sandy": {
"description": "A FreeSewing pattern for a circle skirt", "description": "A FreeSewing pattern for a circle skirt",
"code": [ "Erica Alcusa Sáez", "Joost De Cock" ], "code": ["Erica Alcusa Sáez", "Joost De Cock"],
"design": "Erica Alcusa Sáez", "design": "Erica Alcusa Sáez",
"difficulty": 3, "difficulty": 3,
"tags": [ "bottoms", "skirts" ] "tags": ["bottoms", "skirts"]
}, },
"shin": { "shin": {
"description": "A FreeSewing pattern for swim trunks", "description": "A FreeSewing pattern for swim trunks",
"code": "Joost De Cock", "code": "Joost De Cock",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 2, "difficulty": 2,
"tags": [ "bottoms", "swimwear" ] "tags": ["bottoms", "swimwear"]
}, },
"simon": { "simon": {
"description": "A FreeSewing pattern for a button down shirt", "description": "A FreeSewing pattern for a button down shirt",
"code": "Joost De Cock", "code": "Joost De Cock",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 4, "difficulty": 4,
"tags": [ "tops" ] "tags": ["tops"]
}, },
"simone": { "simone": {
"description": "A FreeSewing pattern for a button down shirt (Simone = Simon for people with breasts)", "description": "A FreeSewing pattern for a button down shirt (Simone = Simon for people with breasts)",
"code": "Joost De Cock", "code": "Joost De Cock",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 4, "difficulty": 4,
"tags": [ "tops" ] "tags": ["tops"]
}, },
"sven": { "sven": {
"description": "A FreeSewing pattern for a straightforward sweater", "description": "A FreeSewing pattern for a straightforward sweater",
"code": "Joost De Cock", "code": "Joost De Cock",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 3, "difficulty": 3,
"tags": [ "tops" ] "tags": ["tops"]
}, },
"tamiko": { "tamiko": {
"description": "A FreeSewing pattern for a zero-waste top", "description": "A FreeSewing pattern for a zero-waste top",
"code": "Joost De Cock", "code": "Joost De Cock",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 1, "difficulty": 1,
"tags": [ "tops" ] "tags": ["tops"]
}, },
"teagan": { "teagan": {
"description": "A FreeSewing pattern for a T-shirt", "description": "A FreeSewing pattern for a T-shirt",
"code": "Joost De Cock", "code": "Joost De Cock",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 2, "difficulty": 2,
"tags": [ "tops" ] "tags": ["tops"]
}, },
"tiberius": { "tiberius": {
"description": "A FreeSewing pattern for a tunica, a historical Roman tunic", "description": "A FreeSewing pattern for a tunica, a historical Roman tunic",
"code": "Rika Tamaike", "code": "Rika Tamaike",
"design": "Rika Tamaike", "design": "Rika Tamaike",
"difficulty": 1, "difficulty": 1,
"tags": [ "tops", "historic" ] "tags": ["tops", "historic"]
}, },
"unice": { "unice": {
"description": "A FreeSewing pattern for a basic, highly-customizable underwear pattern", "description": "A FreeSewing pattern for a basic, highly-customizable underwear pattern",
"code": [ "Anna Puk", "Natalia Sayang" ], "code": ["Anna Puk", "Natalia Sayang"],
"design": [ "Anna Puk", "Natalia Sayang" ], "design": ["Anna Puk", "Natalia Sayang"],
"difficulty": 1, "difficulty": 1,
"tags": [ "bottoms", "underwear" ] "tags": ["bottoms", "underwear"]
}, },
"ursula": { "ursula": {
"description": "A FreeSewing pattern for a basic, highly-customizable underwear pattern", "description": "A FreeSewing pattern for a basic, highly-customizable underwear pattern",
"code": "Natalia Sayang", "code": "Natalia Sayang",
"design": "Natalia Sayang", "design": "Natalia Sayang",
"difficulty": 1, "difficulty": 1,
"tags": [ "bottoms", "underwear" ] "tags": ["bottoms", "underwear"]
}, },
"wahid": { "wahid": {
"description": "A FreeSewing pattern for a classic fitted waistcoat", "description": "A FreeSewing pattern for a classic fitted waistcoat",
"code": "Joost De Cock", "code": "Joost De Cock",
"design": "Joost De Cock", "design": "Joost De Cock",
"difficulty": 4, "difficulty": 4,
"tags": [ "tops" ] "tags": ["tops"]
}, },
"walburga": { "walburga": {
"description": "A FreeSewing pattern for a wappenrock (tabard/surcoat), a historical European/medieval (ish) garment", "description": "A FreeSewing pattern for a wappenrock (tabard/surcoat), a historical European/medieval (ish) garment",
"code": "Rika Tamaike", "code": "Rika Tamaike",
"design": "Rika Tamaike", "design": "Rika Tamaike",
"difficulty": 1, "difficulty": 1,
"tags": [ "bottoms", "historic" ] "tags": ["bottoms", "historic"]
}, },
"waralee": { "waralee": {
"description": "A FreeSewing pattern for wrap pants", "description": "A FreeSewing pattern for wrap pants",
"code": "Wouter Van Wageningen", "code": "Wouter Van Wageningen",
"design": "Wouter Van Wageningen", "design": "Wouter Van Wageningen",
"difficulty": 2, "difficulty": 2,
"tags": [ "bottoms", "trousers" ] "tags": ["bottoms", "trousers"]
}, },
"yuri": { "yuri": {
"description": "A FreeSewing pattern for a fancy zipless sweater based on the Huey hoodie", "description": "A FreeSewing pattern for a fancy zipless sweater based on the Huey hoodie",
"code": "Hellgy", "code": "Hellgy",
"design": "Biou", "design": "Biou",
"difficulty": 3, "difficulty": 3,
"tags": [ "tops" ] "tags": ["tops"]
} }
}, },
"utilities": { "utilities": {
"examples": { "examples": {
"description": "A FreeSewing pattern holding examples for our documentation", "description": "A FreeSewing pattern holding examples for our documentation",
"code": "Joost De Cock" "code": "Joost De Cock"
}, },
"legend": { "legend": {
"description": "A FreeSewing pattern to document pattern notation", "description": "A FreeSewing pattern to document pattern notation",
"code": "Joost De Cock" "code": "Joost De Cock"
}, },
"plugintest": { "plugintest": {
"description": "A FreeSewing pattern to test (y)our plugins", "description": "A FreeSewing pattern to test (y)our plugins",
"code": "Joost De Cock" "code": "Joost De Cock"
}, },
"rendertest": { "rendertest": {
"description": "A FreeSewing pattern to test (y)our render engine our CSS", "description": "A FreeSewing pattern to test (y)our render engine our CSS",
"code": "Joost De Cock" "code": "Joost De Cock"
}, },
"tutorial": { "tutorial": {
"description": "A FreeSewing pattern for a baby bib that's used in our tutorial", "description": "A FreeSewing pattern for a baby bib that's used in our tutorial",
"code": "Joost De Cock" "code": "Joost De Cock"
} }
} }

View file

@ -4,14 +4,22 @@ import plugins from './plugins.json' assert { type: 'json' }
import sites from './sites.json' assert { type: 'json' } import sites from './sites.json' assert { type: 'json' }
// Helper method to construct summary objects // Helper method to construct summary objects
const unpack = (obj, folder) => Object.fromEntries( const unpack = (obj, folder) =>
Object.keys(obj).map(name => [name, { name, folder, type: folder.slice(0, -1), description: obj[name] } ]) Object.fromEntries(
) Object.keys(obj).map((name) => [
name,
{ name, folder, type: folder.slice(0, -1), description: obj[name] },
])
)
// Helper method to construct summary objects for designs // Helper method to construct summary objects for designs
const unpackDesigns = (obj, folder) => Object.fromEntries( const unpackDesigns = (obj, folder) =>
Object.keys(obj).map(name => [name, { name, folder, type: folder.slice(0, -1), ...obj[name] } ]) Object.fromEntries(
) Object.keys(obj).map((name) => [
name,
{ name, folder, type: folder.slice(0, -1), ...obj[name] },
])
)
const designs = { const designs = {
...designsByType.accessories, ...designsByType.accessories,
@ -38,6 +46,5 @@ export const publishedSoftware = {
...unpack(packages, 'packages'), ...unpack(packages, 'packages'),
} }
export const publishedTypes = [ 'designs', 'packages', 'plugins' ] export const publishedTypes = ['designs', 'packages', 'plugins']
export const types = [ ...publishedTypes, 'sites' ] export const types = [...publishedTypes, 'sites']

View file

@ -24,4 +24,3 @@
"plugin-title": "A FreeSewing plugin to add a title to your pattern parts", "plugin-title": "A FreeSewing plugin to add a title to your pattern parts",
"plugin-versionfree-svg": "A FreeSewing plugin to keep version info out of your SVG to allow easy diffs across versions" "plugin-versionfree-svg": "A FreeSewing plugin to keep version info out of your SVG to allow easy diffs across versions"
} }

View file

@ -17,7 +17,7 @@ const options = {
entryPoints: ['src/index.mjs'], entryPoints: ['src/index.mjs'],
format: 'esm', format: 'esm',
outfile: 'dist/index.mjs', outfile: 'dist/index.mjs',
external: ["@freesewing"], external: ['@freesewing'],
metafile: process.env.VERBOSE ? true : false, metafile: process.env.VERBOSE ? true : false,
minify: process.env.NO_MINIFY ? false : true, minify: process.env.NO_MINIFY ? false : true,
sourcemap: true, sourcemap: true,
@ -25,12 +25,11 @@ const options = {
// Let esbuild generate the build // Let esbuild generate the build
let result let result
(async () => { ;(async () => {
result = await esbuild.build(options).catch(() => process.exit(1)) result = await esbuild.build(options).catch(() => process.exit(1))
if (process.env.VERBOSE) { if (process.env.VERBOSE) {
const info = await esbuild.analyzeMetafile(result.metafile) const info = await esbuild.analyzeMetafile(result.metafile)
console.log(info) console.log(info)
} }
})() })()

View file

@ -1,24 +1,35 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office"> <html
<head> lang="en"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:o="urn:schemas-microsoft-com:office:office"
>
<head>
<!-- Template from https://tedgoas.github.io/Cerberus/ --> <!-- Template from https://tedgoas.github.io/Cerberus/ -->
<meta charset="utf-8"> <!-- utf-8 works for most cases --> <meta charset="utf-8" />
<meta name="viewport" content="width=device-width"> <!-- Forcing initial-scale shouldn't be necessary --> <!-- utf-8 works for most cases -->
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <!-- Use the latest (edge) version of IE rendering engine --> <meta name="viewport" content="width=device-width" />
<meta name="x-apple-disable-message-reformatting"> <!-- Disable auto-scale in iOS 10 Mail entirely --> <!-- Forcing initial-scale shouldn't be necessary -->
<meta name="format-detection" content="telephone=no,address=no,email=no,date=no,url=no"> <!-- Tell iOS not to automatically link certain text strings. --> <meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="color-scheme" content="light"> <!-- Use the latest (edge) version of IE rendering engine -->
<meta name="supported-color-schemes" content="light"> <meta name="x-apple-disable-message-reformatting" />
<title>FreeSewing Newsletter</title> <!-- The title tag shows in email notifications, like Android 4.4. --> <!-- Disable auto-scale in iOS 10 Mail entirely -->
<meta name="format-detection" content="telephone=no,address=no,email=no,date=no,url=no" />
<!-- Tell iOS not to automatically link certain text strings. -->
<meta name="color-scheme" content="light" />
<meta name="supported-color-schemes" content="light" />
<title>FreeSewing Newsletter</title>
<!-- The title tag shows in email notifications, like Android 4.4. -->
<!-- What it does: Makes background images in 72ppi Outlook render at correct size. --> <!-- What it does: Makes background images in 72ppi Outlook render at correct size. -->
<!--[if gte mso 9]> <!--[if gte mso 9]>
<xml> <xml>
<o:OfficeDocumentSettings> <o:OfficeDocumentSettings>
<o:AllowPNG/> <o:AllowPNG />
<o:PixelsPerInch>96</o:PixelsPerInch> <o:PixelsPerInch>96</o:PixelsPerInch>
</o:OfficeDocumentSettings> </o:OfficeDocumentSettings>
</xml> </xml>
<![endif]--> <![endif]-->
<!-- Web Font / @font-face : BEGIN --> <!-- Web Font / @font-face : BEGIN -->
@ -26,11 +37,11 @@
<!-- Desktop Outlook chokes on web font references and defaults to Times New Roman, so we force a safe fallback font. --> <!-- Desktop Outlook chokes on web font references and defaults to Times New Roman, so we force a safe fallback font. -->
<!--[if mso]> <!--[if mso]>
<style> <style>
* { * {
font-family: sans-serif !important; font-family: sans-serif !important;
} }
</style> </style>
<![endif]--> <![endif]-->
<!-- All other clients get the webfont reference; some will render the font and others will silently fail to the fallbacks. More on that here: http://stylecampaign.com/blog/2015/02/webfont-support-in-email/ --> <!-- All other clients get the webfont reference; some will render the font and others will silently fail to the fallbacks. More on that here: http://stylecampaign.com/blog/2015/02/webfont-support-in-email/ -->
@ -42,255 +53,329 @@
<!-- CSS Reset : BEGIN --> <!-- CSS Reset : BEGIN -->
<style> <style>
/* What it does: Tells the email client that only light styles are provided but the client can transform them to dark. A duplicate of meta color-scheme meta tag above. */
:root {
color-scheme: light;
supported-color-schemes: light;
}
/* What it does: Tells the email client that only light styles are provided but the client can transform them to dark. A duplicate of meta color-scheme meta tag above. */ /* What it does: Remove spaces around the email design added by some email clients. */
:root { /* Beware: It can remove the padding / margin and add a background color to the compose a reply window. */
color-scheme: light; html,
supported-color-schemes: light; body {
} margin: 0 auto !important;
padding: 0 !important;
height: 100% !important;
width: 100% !important;
}
/* What it does: Remove spaces around the email design added by some email clients. */ /* What it does: Stops email clients resizing small text. */
/* Beware: It can remove the padding / margin and add a background color to the compose a reply window. */ * {
html, -ms-text-size-adjust: 100%;
body { -webkit-text-size-adjust: 100%;
margin: 0 auto !important; }
padding: 0 !important;
height: 100% !important;
width: 100% !important;
}
/* What it does: Stops email clients resizing small text. */ /* What it does: Centers email on Android 4.4 */
* { div[style*='margin: 16px 0'] {
-ms-text-size-adjust: 100%; margin: 0 !important;
-webkit-text-size-adjust: 100%; }
}
/* What it does: Centers email on Android 4.4 */ /* What it does: forces Samsung Android mail clients to use the entire viewport */
div[style*="margin: 16px 0"] { #MessageViewBody,
margin: 0 !important; #MessageWebViewDiv {
} width: 100% !important;
}
/* What it does: forces Samsung Android mail clients to use the entire viewport */ /* What it does: Stops Outlook from adding extra spacing to tables. */
#MessageViewBody, #MessageWebViewDiv{ table,
width: 100% !important; td {
} mso-table-lspace: 0pt !important;
mso-table-rspace: 0pt !important;
}
/* What it does: Stops Outlook from adding extra spacing to tables. */ /* What it does: Fixes webkit padding issue. */
table, table {
td { border-spacing: 0 !important;
mso-table-lspace: 0pt !important; border-collapse: collapse !important;
mso-table-rspace: 0pt !important; table-layout: fixed !important;
} margin: 0 auto !important;
}
/* What it does: Fixes webkit padding issue. */ /* What it does: Uses a better rendering method when resizing images in IE. */
table { img {
border-spacing: 0 !important; -ms-interpolation-mode: bicubic;
border-collapse: collapse !important; }
table-layout: fixed !important;
margin: 0 auto !important;
}
/* What it does: Uses a better rendering method when resizing images in IE. */ /* What it does: Prevents Windows 10 Mail from underlining links despite inline CSS. Styles for underlined links should be inline. */
img { a {
-ms-interpolation-mode:bicubic; text-decoration: none;
} }
/* What it does: Prevents Windows 10 Mail from underlining links despite inline CSS. Styles for underlined links should be inline. */ /* What it does: A work-around for email clients meddling in triggered links. */
a { a[x-apple-data-detectors], /* iOS */
text-decoration: none;
}
/* What it does: A work-around for email clients meddling in triggered links. */
a[x-apple-data-detectors], /* iOS */
.unstyle-auto-detected-links a, .unstyle-auto-detected-links a,
.aBn { .aBn {
border-bottom: 0 !important; border-bottom: 0 !important;
cursor: default !important; cursor: default !important;
color: inherit !important; color: inherit !important;
text-decoration: none !important; text-decoration: none !important;
font-size: inherit !important; font-size: inherit !important;
font-family: inherit !important; font-family: inherit !important;
font-weight: inherit !important; font-weight: inherit !important;
line-height: inherit !important; line-height: inherit !important;
} }
/* What it does: Prevents Gmail from displaying a download button on large, non-linked images. */ /* What it does: Prevents Gmail from displaying a download button on large, non-linked images. */
.a6S { .a6S {
display: none !important; display: none !important;
opacity: 0.01 !important; opacity: 0.01 !important;
} }
/* What it does: Prevents Gmail from changing the text color in conversation threads. */ /* What it does: Prevents Gmail from changing the text color in conversation threads. */
.im { .im {
color: inherit !important; color: inherit !important;
} }
/* If the above doesn't work, add a .g-img class to any image in question. */ /* If the above doesn't work, add a .g-img class to any image in question. */
img.g-img + div { img.g-img + div {
display: none !important; display: none !important;
} }
h1 { line-height: 36px; } h1 {
h2 { line-height: 28px; } line-height: 36px;
}
h2 {
line-height: 28px;
}
/* What it does: Removes right gutter in Gmail iOS app: https://github.com/TedGoas/Cerberus/issues/89 */ /* What it does: Removes right gutter in Gmail iOS app: https://github.com/TedGoas/Cerberus/issues/89 */
/* Create one of these media queries for each additional viewport size you'd like to fix */ /* Create one of these media queries for each additional viewport size you'd like to fix */
/* iPhone 4, 4S, 5, 5S, 5C, and 5SE */ /* iPhone 4, 4S, 5, 5S, 5C, and 5SE */
@media only screen and (min-device-width: 320px) and (max-device-width: 374px) { @media only screen and (min-device-width: 320px) and (max-device-width: 374px) {
u ~ div .email-container { u ~ div .email-container {
min-width: 320px !important; min-width: 320px !important;
}
} }
/* iPhone 6, 6S, 7, 8, and X */ }
@media only screen and (min-device-width: 375px) and (max-device-width: 413px) { /* iPhone 6, 6S, 7, 8, and X */
u ~ div .email-container { @media only screen and (min-device-width: 375px) and (max-device-width: 413px) {
min-width: 375px !important; u ~ div .email-container {
} min-width: 375px !important;
} }
/* iPhone 6+, 7+, and 8+ */ }
@media only screen and (min-device-width: 414px) { /* iPhone 6+, 7+, and 8+ */
u ~ div .email-container { @media only screen and (min-device-width: 414px) {
min-width: 414px !important; u ~ div .email-container {
} min-width: 414px !important;
} }
}
</style> </style>
<!-- CSS Reset : END --> <!-- CSS Reset : END -->
<!-- Progressive Enhancements : BEGIN --> <!-- Progressive Enhancements : BEGIN -->
<style> <style>
/* What it does: Hover styles for buttons */
.button-td,
.button-a {
transition: all 100ms ease-in;
}
.button-td-primary:hover,
.button-a-primary:hover {
background: #212529 !important;
border-color: #212529 !important;
}
/* What it does: Hover styles for buttons */ /* Media Queries */
.button-td, @media screen and (max-width: 600px) {
.button-a { /* What it does: Adjust typography on small screens to improve readability */
transition: all 100ms ease-in; .email-container p {
} font-size: 17px !important;
.button-td-primary:hover, }
.button-a-primary:hover { }
background: #212529 !important;
border-color: #212529 !important;
}
/* Media Queries */
@media screen and (max-width: 600px) {
/* What it does: Adjust typography on small screens to improve readability */
.email-container p {
font-size: 17px !important;
}
}
</style> </style>
<!-- Progressive Enhancements : END --> <!-- Progressive Enhancements : END -->
</head>
</head> <!--
<!--
The email background color (#ffffff) is defined in three places: The email background color (#ffffff) is defined in three places:
1. body tag: for most email clients 1. body tag: for most email clients
2. center tag: for Gmail and Inbox mobile apps and web versions of Gmail, GSuite, Inbox, Yahoo, AOL, Libero, Comcast, freenet, Mail.ru, Orange.fr 2. center tag: for Gmail and Inbox mobile apps and web versions of Gmail, GSuite, Inbox, Yahoo, AOL, Libero, Comcast, freenet, Mail.ru, Orange.fr
3. mso conditional: For Windows 10 Mail 3. mso conditional: For Windows 10 Mail
--> -->
<body width="100%" style="margin: 0; padding: 0 !important; mso-line-height-rule: exactly; background-color: #ffffff;"> <body
<center role="article" aria-roledescription="email" lang="en" style="width: 100%; background-color: #ffffff;"> width="100%"
<!--[if mso | IE]> style="
margin: 0;
padding: 0 !important;
mso-line-height-rule: exactly;
background-color: #ffffff;
"
>
<center
role="article"
aria-roledescription="email"
lang="en"
style="width: 100%; background-color: #ffffff"
>
<!--[if mso | IE]>
<table role="presentation" border="0" cellpadding="0" cellspacing="0" width="100%" style="background-color: #ffffff;"> <table role="presentation" border="0" cellpadding="0" cellspacing="0" width="100%" style="background-color: #ffffff;">
<tr> <tr>
<td> <td>
<![endif]--> <![endif]-->
<!-- Visually Hidden Preheader Text : BEGIN --> <!-- Visually Hidden Preheader Text : BEGIN -->
<div style="max-height:0; overflow:hidden; mso-hide:all;" aria-hidden="true"> <div style="max-height: 0; overflow: hidden; mso-hide: all" aria-hidden="true">
This season's edition of the FreeSewing Newsletter, a long-read with news and updates from the FreeSewing community This season's edition of the FreeSewing Newsletter, a long-read with news and updates from
</div> the FreeSewing community
<!-- Visually Hidden Preheader Text : END --> </div>
<!-- Visually Hidden Preheader Text : END -->
<!-- Create white space after the desired preview text so email clients dont pull other distracting text into the inbox preview. Extend as necessary. --> <!-- Create white space after the desired preview text so email clients dont pull other distracting text into the inbox preview. Extend as necessary. -->
<!-- Preview Text Spacing Hack : BEGIN --> <!-- Preview Text Spacing Hack : BEGIN -->
<div style="display: none; font-size: 1px; line-height: 1px; max-height: 0px; max-width: 0px; opacity: 0; overflow: hidden; mso-hide: all; font-family: sans-serif;"> <div
&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp; style="
</div> display: none;
<!-- Preview Text Spacing Hack : END --> font-size: 1px;
line-height: 1px;
max-height: 0px;
max-width: 0px;
opacity: 0;
overflow: hidden;
mso-hide: all;
font-family: sans-serif;
"
>
&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;
</div>
<!-- Preview Text Spacing Hack : END -->
<!-- <!--
Set the email width. Defined in two places: Set the email width. Defined in two places:
1. max-width for all clients except Desktop Windows Outlook, allowing the email to squish on narrow but never go wider than 600px. 1. max-width for all clients except Desktop Windows Outlook, allowing the email to squish on narrow but never go wider than 600px.
2. MSO tags for Desktop Windows Outlook enforce a 600px width. 2. MSO tags for Desktop Windows Outlook enforce a 600px width.
--> -->
<div style="max-width: 600px; margin: 0 auto;" class="email-container"> <div style="max-width: 600px; margin: 0 auto" class="email-container">
<!--[if mso]> <!--[if mso]>
<table align="center" role="presentation" cellspacing="0" cellpadding="0" border="0" width="600"> <table align="center" role="presentation" cellspacing="0" cellpadding="0" border="0" width="600">
<tr> <tr>
<td> <td>
<![endif]--> <![endif]-->
<!-- Email Body : BEGIN --> <!-- Email Body : BEGIN -->
<table align="center" role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="margin: auto;"> <table
align="center"
<!-- 1 Column Text + Button : BEGIN --> role="presentation"
cellspacing="0"
cellpadding="0"
border="0"
width="100%"
style="margin: auto"
>
<!-- 1 Column Text + Button : BEGIN -->
<tr>
<td style="background-color: #ffffff">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr> <tr>
<td style="background-color: #ffffff;"> <td
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%"> style="
<tr> padding: 20px;
<td style="padding: 20px; font-family: sans-serif; font-size: 16px; line-height: 22px; color: #212529;"> font-family: sans-serif;
{{{ content }}} font-size: 16px;
</td> line-height: 22px;
</tr> color: #212529;
</table> "
</td> >
{{{ content }}}
</td>
</tr> </tr>
<!-- 1 Column Text + Button : END --> </table>
</td>
</tr>
<!-- 1 Column Text + Button : END -->
<!-- Clear Spacer : BEGIN --> <!-- Clear Spacer : BEGIN -->
<tr> <tr>
<td aria-hidden="true" height="40" style="font-size: 0px; line-height: 0px;"> <td aria-hidden="true" height="40" style="font-size: 0px; line-height: 0px">&nbsp;</td>
&nbsp; </tr>
</td> <!-- Clear Spacer : END -->
</tr> </table>
<!-- Clear Spacer : END --> <!-- Email Body : END -->
<!-- Email Footer : BEGIN -->
<table
align="center"
role="presentation"
cellspacing="0"
cellpadding="0"
border="0"
width="100%"
style="margin: auto"
>
<tr>
<td
style="
padding: 20px;
font-family: sans-serif;
font-size: 12px;
line-height: 15px;
text-align: center;
color: #495057;
border-top: 1px solid #cccccc;
"
>
<a href="https://freesewing.org/patrons/join"
><b>Support FreeSewing: Become a Patron</b></a
>
</td>
</tr>
</table>
<!-- Email Footer : END -->
</table> <!-- Email Footer : BEGIN -->
<!-- Email Body : END --> <table
align="center"
role="presentation"
cellspacing="0"
cellpadding="0"
border="0"
width="100%"
style="margin: auto"
>
<tr>
<td
style="
padding: 10px;
font-family: sans-serif;
font-size: 12px;
line-height: 15px;
text-align: center;
color: #495057;
"
>
FreeSewing<br /><span class="unstyle-auto-detected-links"
>67 Plantin en Moretuslei<br />Antwerp / Belgium<br />info@freesewing.org</span
>
<br /><br />
<unsubscribe style="color: #ffffff; text-decoration: underline">
You can <a href="{{{ unsubscribe }}}">unsubscribe</a> at any time. Or just reply and
tell us you want out.
</unsubscribe>
</td>
</tr>
</table>
<!-- Email Footer : END -->
<!-- Email Footer : BEGIN --> <!--[if mso]>
<table align="center" role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="margin: auto;">
<tr>
<td style="padding: 20px; font-family: sans-serif; font-size: 12px; line-height: 15px; text-align: center; color: #495057; border-top: 1px solid #cccccc;">
<a href="https://freesewing.org/patrons/join"><b>Support FreeSewing: Become a Patron</b></a>
</td>
</tr>
</table>
<!-- Email Footer : END -->
<!-- Email Footer : BEGIN -->
<table align="center" role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="margin: auto;">
<tr>
<td style="padding: 10px; font-family: sans-serif; font-size: 12px; line-height: 15px; text-align: center; color: #495057;">
FreeSewing<br><span class="unstyle-auto-detected-links">67 Plantin en Moretuslei<br>Antwerp / Belgium<br>info@freesewing.org</span>
<br><br>
<unsubscribe style="color: #ffffff; text-decoration: underline;">
You can <a href="{{{ unsubscribe }}}">unsubscribe</a> at any time. Or just reply and tell us you want out.
</unsubscribe>
</td>
</tr>
</table>
<!-- Email Footer : END -->
<!--[if mso]>
</td> </td>
</tr> </tr>
</table> </table>
<![endif]--> <![endif]-->
</div> </div>
<!--[if mso | IE]> <!--[if mso | IE]>
</td> </td>
</tr> </tr>
</table> </table>
<![endif]--> <![endif]-->
</center> </center>
</body> </body>
</html> </html>

View file

@ -7,8 +7,8 @@
"url": "https://github.com/freesewing/freesewing/issues" "url": "https://github.com/freesewing/freesewing/issues"
}, },
"funding": { "funding": {
"type" : "individual", "type": "individual",
"url" : "https://freesewing.org/patrons/join" "url": "https://freesewing.org/patrons/join"
}, },
"keywords": ["freesewing"], "keywords": ["freesewing"],
"type": "module", "type": "module",

View file

@ -4,4 +4,3 @@ import { sharedPluginTests } from '../../../tests/plugins/shared.mjs'
// Run shared tests // Run shared tests
sharedPluginTests(plugin) sharedPluginTests(plugin)

View file

@ -20,7 +20,7 @@
"kickstart:windows": "npx lerna bootstrap && yarn wbuildall && yarn prepare && yarn tips", "kickstart:windows": "npx lerna bootstrap && yarn wbuildall && yarn prepare && yarn tips",
"cleanall": "lerna run clean", "cleanall": "lerna run clean",
"test": "lerna run test", "test": "lerna run test",
"prettier": "npx prettier --write 'packages/**/src/*.mjs' 'packages/**/src/*.js' 'packages/i18n/src/locales/**/*.*' 'packages/**/tests/*.mjs'", "prettier": "npx prettier --write 'config/*' 'config/**/*' 'packages/**/src/*.mjs' 'packages/i18n/src/locales/**/*.*' 'packages/**/tests/*.mjs'",
"reconfigure": "all-contributors generate && node --experimental-json-modules --no-warnings scripts/reconfigure.mjs", "reconfigure": "all-contributors generate && node --experimental-json-modules --no-warnings scripts/reconfigure.mjs",
"prerelease": "lerna version --no-git-tag-version --no-push && yarn reconfigure && yarn buildall", "prerelease": "lerna version --no-git-tag-version --no-push && yarn reconfigure && yarn buildall",
"buildall": "lerna run cibuild_step0 && lerna run cibuild_step1 && lerna run cibuild_step2 && lerna run cibuild_step3 && lerna run cibuild_step4 && lerna run cibuild_step5 && lerna run cibuild_step6 && lerna run cibuild_step7", "buildall": "lerna run cibuild_step0 && lerna run cibuild_step1 && lerna run cibuild_step2 && lerna run cibuild_step3 && lerna run cibuild_step4 && lerna run cibuild_step5 && lerna run cibuild_step6 && lerna run cibuild_step7",

View file

@ -29,5 +29,5 @@ export const __loadPatternDefaults = () => ({
debug: false, debug: false,
options: {}, options: {},
absoluteOptions: {}, absoluteOptions: {},
measurements: {} measurements: {},
}) })

View file

@ -48,7 +48,7 @@ describe('Pattern', () => {
name: 'test.partB', name: 'test.partB',
measurements: ['head', 'knee'], measurements: ['head', 'knee'],
optionalMeasurements: ['knee'], optionalMeasurements: ['knee'],
after: [ partA ], after: [partA],
plugins: [ plugins: [
{ {
name: 'testPlugin', name: 'testPlugin',

View file

@ -18,9 +18,9 @@ describe('Snapped options', () => {
draft: ({ part, absoluteOptions }) => { draft: ({ part, absoluteOptions }) => {
abs = absoluteOptions abs = absoluteOptions
return part return part
} },
} }
const design = new Design({ parts: [ part] }) const design = new Design({ parts: [part] })
new design({ options: { test: 0.13 }, measurements, idPrefix: 'A' }).draft() new design({ options: { test: 0.13 }, measurements, idPrefix: 'A' }).draft()
expect(abs.test).to.equal(60) expect(abs.test).to.equal(60)
new design({ options: { test: 0.27 }, measurements, idPrefix: 'B' }).draft() new design({ options: { test: 0.27 }, measurements, idPrefix: 'B' }).draft()

View file

@ -43,5 +43,4 @@ describe('Snippet', () => {
pattern.draft() pattern.draft()
expect(result).to.equal(':)') expect(result).to.equal(':)')
}) })
}) })

View file

@ -59,7 +59,7 @@ describe('Store', () => {
} }
const part = { const part = {
name: 'example.part', name: 'example.part',
plugins: [ plugin ], plugins: [plugin],
draft: ({ store, part }) => { draft: ({ store, part }) => {
store.test.example.warning('hello warning') store.test.example.warning('hello warning')
store.test.example.info('hello info') store.test.example.info('hello info')
@ -95,7 +95,7 @@ describe('Store', () => {
} }
const part = { const part = {
name: 'example_part', name: 'example_part',
plugins: [ plugin ], plugins: [plugin],
draft: ({ methodA, methodB, part }) => { draft: ({ methodA, methodB, part }) => {
methodA('hello A') methodA('hello A')
methodB('hello B') methodB('hello B')
@ -129,9 +129,11 @@ describe('Store', () => {
it('Should log a warning when pushing to a non-array key', () => { it('Should log a warning when pushing to a non-array key', () => {
const store = new Store() const store = new Store()
store.push('test',1) store.push('test', 1)
expect(store.logs.warning.length).to.equal(1) expect(store.logs.warning.length).to.equal(1)
expect(store.logs.warning[0]).to.equal('Store.push(value) on key `test`, but key does not hold an array') expect(store.logs.warning[0]).to.equal(
'Store.push(value) on key `test`, but key does not hold an array'
)
}) })
it('Should log a warning when setting an undefined value with set()', () => { it('Should log a warning when setting an undefined value with set()', () => {
@ -145,7 +147,9 @@ describe('Store', () => {
const store = new Store() const store = new Store()
store.setIfUnset('test') store.setIfUnset('test')
expect(store.logs.warning.length).to.equal(1) expect(store.logs.warning.length).to.equal(1)
expect(store.logs.warning[0]).to.equal('Store.setIfUnset(value) on key `test`, but value is undefined') expect(store.logs.warning[0]).to.equal(
'Store.setIfUnset(value) on key `test`, but value is undefined'
)
}) })
it('Should unset a value', () => { it('Should unset a value', () => {

View file

@ -484,9 +484,9 @@ describe('Utils', () => {
points.to = new Point(19, 76) points.to = new Point(19, 76)
paths.test = new Path().move(points.from).line(points.to) paths.test = new Path().move(points.from).line(points.to)
return part return part
} },
} }
const design = new Design({ parts: [ test ]}) const design = new Design({ parts: [test] })
const pattern = new design() const pattern = new design()
const props = pattern.draft().getRenderProps() const props = pattern.draft().getRenderProps()
const transform = generateStackTransform(30, 60, 90, true, true, props.stacks.test) const transform = generateStackTransform(30, 60, 90, true, true, props.stacks.test)

View file

@ -1,3 +1,3 @@
--- ---
thingIsDeprecated: "{thing} ist veraltet" thingIsDeprecated: '{thing} ist veraltet'
weRecommendThingInstead: "Wir empfehlen stattdessen {thing}" weRecommendThingInstead: 'Wir empfehlen stattdessen {thing}'

View file

@ -26,7 +26,7 @@ profileWarning: Відкликання згоди видалить усі Ваш
profileWhatAnswerOptional: 'За наявності: <b>зображення облікового запису</b>, <b>біо</b>і <b>соціальні мережі</b>' profileWhatAnswerOptional: 'За наявності: <b>зображення облікового запису</b>, <b>біо</b>і <b>соціальні мережі</b>'
profileWhatAnswer: "Ваша <b>електронна адреса</b>, <b>ім'я користувача</b>і <b>пароль</b>." profileWhatAnswer: "Ваша <b>електронна адреса</b>, <b>ім'я користувача</b>і <b>пароль</b>."
profileWhatQuestion: Що таке дані облікового запису? profileWhatQuestion: Що таке дані облікового запису?
profileWhyAnswer: 'Щоб <b>автентифікувати</b> Вас, <b>зв''язатися</b> з Вами коли це потрібно та задля покращення нашої <b>спільноти</b>.' profileWhyAnswer: "Щоб <b>автентифікувати</b> Вас, <b>зв'язатися</b> з Вами коли це потрібно та задля покращення нашої <b>спільноти</b>."
readMore: Для отримання додаткової інформації, будь ласка, прочитайте наші умови конфіденційності. readMore: Для отримання додаткової інформації, будь ласка, прочитайте наші умови конфіденційності.
readRights: Для отримання додаткової інформації, будь ласка, прочитайте про Ваші права. readRights: Для отримання додаткової інформації, будь ласка, прочитайте про Ваші права.
revokeConsent: Відкликати згоду revokeConsent: Відкликати згоду

View file

@ -6,7 +6,7 @@ txt-draft: 'Оберіть одну з викрійок, модель та на
txt-how: Як це працює txt-how: Як це працює
txt-join: Приєднайтеся до тисяч інших користувачів та створіть безкоштовний акаунт на freesewing.org. txt-join: Приєднайтеся до тисяч інших користувачів та створіть безкоштовний акаунт на freesewing.org.
txt-model: Всі наші викрійки адаптуються під задані виміри. Тому перше, що варто зробити піти взяти сантиметрову стрічку. txt-model: Всі наші викрійки адаптуються під задані виміри. Тому перше, що варто зробити піти взяти сантиметрову стрічку.
txt-newHere: "Якщо ви тут вперше найкраще місце для початку є наше демо:" txt-newHere: 'Якщо ви тут вперше найкраще місце для початку є наше демо:'
txt-opensource: 'Наша платформа, наші викрійки та навіть наш вебсайт. Весь наш код доступний на GitHub. Pull requests вітаються!' txt-opensource: 'Наша платформа, наші викрійки та навіть наш вебсайт. Весь наш код доступний на GitHub. Pull requests вітаються!'
txt-patrons: FreeSewing існує завдяки фінансовій підтримці наших Патронів. Прокрутіть вниз, щоб дізнатися про нашу модель підписки. txt-patrons: FreeSewing існує завдяки фінансовій підтримці наших Патронів. Прокрутіть вниз, щоб дізнатися про нашу модель підписки.
txt-showcase: Завершені проекти від спільноти FreeSewing txt-showcase: Завершені проекти від спільноти FreeSewing

View file

@ -188,10 +188,13 @@ function createDesign(name, type) {
mkdir([...design, 'tests']) mkdir([...design, 'tests'])
// Create package.json // Create package.json
templateOut([...template, 'package.json'], [...design, 'package.json'], { name, description }) templateOut([...template, 'package.json.mustache'], [...design, 'package.json'], {
name,
description,
})
// Create index.mjs // Create index.mjs
templateOut([...template, 'src', 'index.mjs'], [...design, 'src', 'index.mjs'], { templateOut([...template, 'src', 'index.mjs.mustache'], [...design, 'src', 'index.mjs'], {
capitalized_name, capitalized_name,
}) })