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'
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'

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
@ -6,21 +6,20 @@ import { designs, plugins, packages } from './software/index.mjs'
* order. This file takes care of that
*/
const first = [ 'core', 'config-helpers', 'remark-jargon', 'snapseries' ]
const blocks = [ 'brian', 'titan', 'bella', 'breanna' ]
const extended = [ 'bent', 'simon', 'carlton', 'ursula' ]
const first = ['core', 'config-helpers', 'remark-jargon', 'snapseries']
const blocks = ['brian', 'titan', 'bella', 'breanna']
const extended = ['bent', 'simon', 'carlton', 'ursula']
const last = ['i18n']
export const buildOrder = [
// First build FreeSewing core library and config-helpers
first,
// 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
[ 'plugin-bundle' ],
['plugin-bundle'],
// Then build all FreeSewing designs that are blocks
blocks,
@ -29,11 +28,10 @@ export const buildOrder = [
extended,
// 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
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:
Breaking:
all:
- This package is now ESM only.
@ -84,7 +83,6 @@ Unreleased:
plugin-versionfree-svg:
- This plugin no longer sets its version as an SVG attribute when rendering patterns
Fixed:
albert:
- Workaround for not finding a suitable legband radius
@ -104,7 +102,6 @@ Unreleased:
- Added seperate waistband options
- Added bow tie placement option
2.22.0:
date: 2022-08-23
@ -643,7 +640,6 @@ Unreleased:
plugin-title:
- Removed rendering of config.cut as it's not used
2.19.9:
date: 2022-01-09
@ -799,7 +795,6 @@ Unreleased:
- Fixed a regression that caused the `waistHeight` option to be ignored.
Closes [#1467](https://github.com/freesewing/freesewing/issues/1467)
2.19.3:
date: 2021-11-05
@ -811,7 +806,6 @@ Unreleased:
charlie:
- Converted the `waistbandWidth` options to snapped pct (was normal pct)
2.19.2:
date: 2021-11-02
@ -1221,7 +1215,6 @@ Unreleased:
create-freesewing-pattern:
- Don't list pattern as dependency in the example package.json
2.16.0:
date: 2021-05-24

View file

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

View file

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

View file

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

View file

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

View file

@ -1,351 +1,351 @@
{
"accessories": {
"albert": {
"description": "A FreeSewing pattern for an apron",
"description": "A FreeSewing pattern for an apron",
"code": "Wouter Van Wageningen",
"design": "Wouter Van Wageningen",
"difficulty": 2,
"tags": [ "accessories" ]
"tags": ["accessories"]
},
"benjamin": {
"description": "A FreeSewing pattern for a bow tie",
"code": "Wouter Van Wageningen",
"design": "Wouter Van Wageningen",
"difficulty": 3,
"tags": [ "accessories" ]
"tags": ["accessories"]
},
"bob": {
"description": "A FreeSewing pattern for a bib",
"code": "Joost De Cock",
"design": "Joost De Cock",
"difficulty": 3,
"tags": [ "accessories", "infants" ]
"tags": ["accessories", "infants"]
},
"florence": {
"description": "A FreeSewing pattern for a face mask",
"code": "Joost De Cock",
"design": "Joost De Cock",
"difficulty": 1,
"tags": [ "accessories" ]
"tags": ["accessories"]
},
"florent": {
"description": "A FreeSewing pattern for a flat cap",
"code": [ "Quentin Felix", "Joost De Cock" ],
"description": "A FreeSewing pattern for a flat cap",
"code": ["Quentin Felix", "Joost De Cock"],
"design": "Quentin Felix",
"difficulty": 3,
"tags": [ "accessories", "hats" ]
"tags": ["accessories", "hats"]
},
"hi": {
"description": "A FreeSewing pattern for a shark plush toy",
"description": "A FreeSewing pattern for a shark plush toy",
"code": "Wouter Van Wageningen",
"design": "Wouter Van Wageningen",
"difficulty": 4,
"tags": [ "accessories", "toys" ]
"tags": ["accessories", "toys"]
},
"holmes": {
"description": "A FreeSewing pattern for a Sherlock Holmes hat",
"code": [ "Erica Alcusa Sáez", "bobgeorgethe3rd" ],
"description": "A FreeSewing pattern for a Sherlock Holmes hat",
"code": ["Erica Alcusa Sáez", "bobgeorgethe3rd"],
"design": "Erica Alcusa Sáez",
"difficulty": 3,
"tags": [ "accessories", "hats" ]
"tags": ["accessories", "hats"]
},
"hortensia": {
"description": "A FreeSewing pattern for a handbag",
"description": "A FreeSewing pattern for a handbag",
"code": "Wouter Van Wageningen",
"design": [ "Stoffsuchti", "Wouter Van Wageningen" ],
"design": ["Stoffsuchti", "Wouter Van Wageningen"],
"difficulty": 3,
"tags": [ "accessories", "bags" ]
"tags": ["accessories", "bags"]
},
"lucy": {
"description": "A FreeSewing pattern for a historical tie-on pocket",
"description": "A FreeSewing pattern for a historical tie-on pocket",
"code": "SeaZeeZee",
"design": "SeaZeeZee",
"difficulty": 2,
"tags": [ "accessories", "historical", "bags" ]
"tags": ["accessories", "historical", "bags"]
},
"octoplushy": {
"description": "A FreeSewing pattern for an octopus plushy toy",
"description": "A FreeSewing pattern for an octopus plushy toy",
"code": "Wouter Van Wageningen",
"design": "Wouter Van Wageningen",
"difficulty": 4,
"tags": [ "accessories", "toys" ]
"tags": ["accessories", "toys"]
},
"trayvon": {
"description": "A FreeSewing pattern for a tie",
"description": "A FreeSewing pattern for a tie",
"code": "Joost De Cock",
"design": "Joost De Cock",
"difficulty": 2,
"tags": [ "accessories" ]
"tags": ["accessories"]
}
},
"blocks": {
"bella": {
"description": "A FreeSewing pattern for a womenswear bodice block",
"description": "A FreeSewing pattern for a womenswear bodice block",
"code": "Joost De Cock",
"design": [ "Bella Incognito", "Joost De Cock" ],
"design": ["Bella Incognito", "Joost De Cock"],
"difficulty": 3,
"tags": [ "tops" ]
"tags": ["tops"]
},
"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",
"design": "Joost De Cock",
"difficulty": 3,
"tags": [ "tops" ]
"tags": ["tops"]
},
"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",
"design": "Joost De Cock",
"difficulty": 3,
"tags": [ "tops" ]
"tags": ["tops"]
},
"brian": {
"description": "A FreeSewing pattern for a basic body block for menswear",
"code": "Joost De Cock",
"design": "Joost De Cock",
"difficulty": 3,
"tags": [ "tops" ]
"tags": ["tops"]
},
"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",
"design": "Wouter Van Wageningen",
"difficulty": 3,
"tags": [ "tops" ]
"tags": ["tops"]
},
"titan": {
"description": "A FreeSewing pattern for a unisex trouser block",
"description": "A FreeSewing pattern for a unisex trouser block",
"code": "Joost De Cock",
"design": [ "Debra Bean", "Joost De Cock" ],
"design": ["Debra Bean", "Joost De Cock"],
"difficulty": 3,
"tags": [ "bottoms" ]
"tags": ["bottoms"]
}
},
"garments": {
"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",
"design": "Joost De Cock",
"difficulty": 2,
"tags": [ "tops", "underwear" ]
"tags": ["tops", "underwear"]
},
"bee": {
"description": "A FreeSewing pattern for a bikini top",
"description": "A FreeSewing pattern for a bikini top",
"code": "bobgeorgethe3rd",
"design": "PrudenceRabbit",
"difficulty": 3,
"tags": [ "tops", "swimwear" ]
"tags": ["tops", "swimwear"]
},
"bruce": {
"description": "A FreeSewing pattern for boxer briefs",
"description": "A FreeSewing pattern for boxer briefs",
"code": "Joost De Cock",
"design": "Joost De Cock",
"difficulty": 3,
"tags": [ "tops", "underwear" ]
"tags": ["tops", "underwear"]
},
"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",
"design": [ "Anneke Caramin", "Joost De Cock" ],
"design": ["Anneke Caramin", "Joost De Cock"],
"difficulty": 5,
"tags": [ "tops", "coats" ]
"tags": ["tops", "coats"]
},
"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",
"design": [ "Anneke Caramin", "Joost De Cock" ],
"design": ["Anneke Caramin", "Joost De Cock"],
"difficulty": 5,
"tags": [ "tops", "coats" ]
"tags": ["tops", "coats"]
},
"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",
"design": [ "Cathrin Åhlén", "Joost De Cock" ],
"design": ["Cathrin Åhlén", "Joost De Cock"],
"difficulty": 4,
"tags": [ "tops", "underwear" ]
"tags": ["tops", "underwear"]
},
"charlie": {
"description": "A FreeSewing pattern for chino trousers",
"description": "A FreeSewing pattern for chino trousers",
"code": "Joost De Cock",
"design": "Joost De Cock",
"difficulty": 3,
"tags": [ "bottoms", "trousers" ]
"tags": ["bottoms", "trousers"]
},
"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",
"design": "Wouter Van Wageningen",
"difficulty": 3,
"tags": [ "bottoms", "trousers" ]
"tags": ["bottoms", "trousers"]
},
"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",
"design": "Erica Alcusa Sáez",
"difficulty": 2,
"tags": [ "tops" ]
"tags": ["tops"]
},
"huey": {
"description": "A FreeSewing pattern for a zip-up hoodie",
"description": "A FreeSewing pattern for a zip-up hoodie",
"code": "Joost De Cock",
"design": "Joost De Cock",
"difficulty": 3,
"tags": [ "tops" ]
"tags": ["tops"]
},
"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",
"design": "Joost De Cock",
"difficulty": 3,
"tags": [ "tops" ]
"tags": ["tops"]
},
"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",
"design": "Joost De Cock",
"difficulty": 5,
"tags": [ "tops", "coats" ]
"tags": ["tops", "coats"]
},
"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",
"design": "Rika Tamaike",
"difficulty": 1,
"tags": [ "tops", "coats", "historical" ]
"tags": ["tops", "coats", "historical"]
},
"paco": {
"description": "A FreeSewing pattern for summer pants",
"description": "A FreeSewing pattern for summer pants",
"code": "Joost De Cock",
"design": "Joost De Cock",
"difficulty": 3,
"tags": [ "bottoms", "trousers" ]
"tags": ["bottoms", "trousers"]
},
"penelope": {
"description": "A FreeSewing pattern for a pencil skirt",
"description": "A FreeSewing pattern for a pencil skirt",
"code": "Wouter Van Wageningen",
"design": "Wouter Van Wageningen",
"difficulty": 3,
"tags": [ "bottoms", "skirts" ]
"tags": ["bottoms", "skirts"]
},
"sandy": {
"description": "A FreeSewing pattern for a circle skirt",
"code": [ "Erica Alcusa Sáez", "Joost De Cock" ],
"description": "A FreeSewing pattern for a circle skirt",
"code": ["Erica Alcusa Sáez", "Joost De Cock"],
"design": "Erica Alcusa Sáez",
"difficulty": 3,
"tags": [ "bottoms", "skirts" ]
"tags": ["bottoms", "skirts"]
},
"shin": {
"description": "A FreeSewing pattern for swim trunks",
"description": "A FreeSewing pattern for swim trunks",
"code": "Joost De Cock",
"design": "Joost De Cock",
"difficulty": 2,
"tags": [ "bottoms", "swimwear" ]
"tags": ["bottoms", "swimwear"]
},
"simon": {
"description": "A FreeSewing pattern for a button down shirt",
"description": "A FreeSewing pattern for a button down shirt",
"code": "Joost De Cock",
"design": "Joost De Cock",
"difficulty": 4,
"tags": [ "tops" ]
"tags": ["tops"]
},
"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",
"design": "Joost De Cock",
"difficulty": 4,
"tags": [ "tops" ]
"tags": ["tops"]
},
"sven": {
"description": "A FreeSewing pattern for a straightforward sweater",
"description": "A FreeSewing pattern for a straightforward sweater",
"code": "Joost De Cock",
"design": "Joost De Cock",
"difficulty": 3,
"tags": [ "tops" ]
"tags": ["tops"]
},
"tamiko": {
"description": "A FreeSewing pattern for a zero-waste top",
"description": "A FreeSewing pattern for a zero-waste top",
"code": "Joost De Cock",
"design": "Joost De Cock",
"difficulty": 1,
"tags": [ "tops" ]
"tags": ["tops"]
},
"teagan": {
"description": "A FreeSewing pattern for a T-shirt",
"description": "A FreeSewing pattern for a T-shirt",
"code": "Joost De Cock",
"design": "Joost De Cock",
"difficulty": 2,
"tags": [ "tops" ]
"tags": ["tops"]
},
"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",
"design": "Rika Tamaike",
"difficulty": 1,
"tags": [ "tops", "historic" ]
"tags": ["tops", "historic"]
},
"unice": {
"description": "A FreeSewing pattern for a basic, highly-customizable underwear pattern",
"code": [ "Anna Puk", "Natalia Sayang" ],
"design": [ "Anna Puk", "Natalia Sayang" ],
"description": "A FreeSewing pattern for a basic, highly-customizable underwear pattern",
"code": ["Anna Puk", "Natalia Sayang"],
"design": ["Anna Puk", "Natalia Sayang"],
"difficulty": 1,
"tags": [ "bottoms", "underwear" ]
"tags": ["bottoms", "underwear"]
},
"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",
"design": "Natalia Sayang",
"difficulty": 1,
"tags": [ "bottoms", "underwear" ]
"tags": ["bottoms", "underwear"]
},
"wahid": {
"description": "A FreeSewing pattern for a classic fitted waistcoat",
"description": "A FreeSewing pattern for a classic fitted waistcoat",
"code": "Joost De Cock",
"design": "Joost De Cock",
"difficulty": 4,
"tags": [ "tops" ]
"tags": ["tops"]
},
"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",
"design": "Rika Tamaike",
"difficulty": 1,
"tags": [ "bottoms", "historic" ]
"tags": ["bottoms", "historic"]
},
"waralee": {
"description": "A FreeSewing pattern for wrap pants",
"description": "A FreeSewing pattern for wrap pants",
"code": "Wouter Van Wageningen",
"design": "Wouter Van Wageningen",
"difficulty": 2,
"tags": [ "bottoms", "trousers" ]
"tags": ["bottoms", "trousers"]
},
"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",
"design": "Biou",
"difficulty": 3,
"tags": [ "tops" ]
"tags": ["tops"]
}
},
"utilities": {
"examples": {
"description": "A FreeSewing pattern holding examples for our documentation",
"description": "A FreeSewing pattern holding examples for our documentation",
"code": "Joost De Cock"
},
"legend": {
"description": "A FreeSewing pattern to document pattern notation",
"description": "A FreeSewing pattern to document pattern notation",
"code": "Joost De Cock"
},
"plugintest": {
"description": "A FreeSewing pattern to test (y)our plugins",
"description": "A FreeSewing pattern to test (y)our plugins",
"code": "Joost De Cock"
},
"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"
},
"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"
}
}

View file

@ -4,14 +4,22 @@ import plugins from './plugins.json' assert { type: 'json' }
import sites from './sites.json' assert { type: 'json' }
// Helper method to construct summary objects
const unpack = (obj, folder) => Object.fromEntries(
Object.keys(obj).map(name => [name, { name, folder, type: folder.slice(0, -1), description: obj[name] } ])
)
const unpack = (obj, folder) =>
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
const unpackDesigns = (obj, folder) => Object.fromEntries(
Object.keys(obj).map(name => [name, { name, folder, type: folder.slice(0, -1), ...obj[name] } ])
)
const unpackDesigns = (obj, folder) =>
Object.fromEntries(
Object.keys(obj).map((name) => [
name,
{ name, folder, type: folder.slice(0, -1), ...obj[name] },
])
)
const designs = {
...designsByType.accessories,
@ -38,6 +46,5 @@ export const publishedSoftware = {
...unpack(packages, 'packages'),
}
export const publishedTypes = [ 'designs', 'packages', 'plugins' ]
export const types = [ ...publishedTypes, 'sites' ]
export const publishedTypes = ['designs', 'packages', 'plugins']
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-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'],
format: 'esm',
outfile: 'dist/index.mjs',
external: ["@freesewing"],
external: ['@freesewing'],
metafile: process.env.VERBOSE ? true : false,
minify: process.env.NO_MINIFY ? false : true,
sourcemap: true,
@ -25,12 +25,11 @@ const options = {
// Let esbuild generate the build
let result
(async () => {
;(async () => {
result = await esbuild.build(options).catch(() => process.exit(1))
if (process.env.VERBOSE) {
const info = await esbuild.analyzeMetafile(result.metafile)
console.log(info)
}
})()

View file

@ -1,24 +1,35 @@
<!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">
<head>
<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"
>
<head>
<!-- Template from https://tedgoas.github.io/Cerberus/ -->
<meta charset="utf-8"> <!-- utf-8 works for most cases -->
<meta name="viewport" content="width=device-width"> <!-- Forcing initial-scale shouldn't be necessary -->
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <!-- Use the latest (edge) version of IE rendering engine -->
<meta name="x-apple-disable-message-reformatting"> <!-- 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. -->
<meta charset="utf-8" />
<!-- utf-8 works for most cases -->
<meta name="viewport" content="width=device-width" />
<!-- Forcing initial-scale shouldn't be necessary -->
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<!-- Use the latest (edge) version of IE rendering engine -->
<meta name="x-apple-disable-message-reformatting" />
<!-- 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. -->
<!--[if gte mso 9]>
<xml>
<xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
<o:PixelsPerInch>96</o:PixelsPerInch>
<o:AllowPNG />
<o:PixelsPerInch>96</o:PixelsPerInch>
</o:OfficeDocumentSettings>
</xml>
</xml>
<![endif]-->
<!-- 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. -->
<!--[if mso]>
<style>
* {
font-family: sans-serif !important;
}
</style>
<style>
* {
font-family: sans-serif !important;
}
</style>
<![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/ -->
@ -42,255 +53,329 @@
<!-- CSS Reset : BEGIN -->
<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. */
:root {
color-scheme: light;
supported-color-schemes: light;
}
/* What it does: Remove spaces around the email design added by some email clients. */
/* Beware: It can remove the padding / margin and add a background color to the compose a reply window. */
html,
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. */
/* Beware: It can remove the padding / margin and add a background color to the compose a reply window. */
html,
body {
margin: 0 auto !important;
padding: 0 !important;
height: 100% !important;
width: 100% !important;
}
/* What it does: Stops email clients resizing small text. */
* {
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
}
/* What it does: Stops email clients resizing small text. */
* {
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
}
/* What it does: Centers email on Android 4.4 */
div[style*='margin: 16px 0'] {
margin: 0 !important;
}
/* What it does: Centers email on Android 4.4 */
div[style*="margin: 16px 0"] {
margin: 0 !important;
}
/* What it does: forces Samsung Android mail clients to use the entire viewport */
#MessageViewBody,
#MessageWebViewDiv {
width: 100% !important;
}
/* What it does: forces Samsung Android mail clients to use the entire viewport */
#MessageViewBody, #MessageWebViewDiv{
width: 100% !important;
}
/* What it does: Stops Outlook from adding extra spacing to tables. */
table,
td {
mso-table-lspace: 0pt !important;
mso-table-rspace: 0pt !important;
}
/* What it does: Stops Outlook from adding extra spacing to tables. */
table,
td {
mso-table-lspace: 0pt !important;
mso-table-rspace: 0pt !important;
}
/* What it does: Fixes webkit padding issue. */
table {
border-spacing: 0 !important;
border-collapse: collapse !important;
table-layout: fixed !important;
margin: 0 auto !important;
}
/* What it does: Fixes webkit padding issue. */
table {
border-spacing: 0 !important;
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. */
img {
-ms-interpolation-mode: bicubic;
}
/* What it does: Uses a better rendering method when resizing images in IE. */
img {
-ms-interpolation-mode:bicubic;
}
/* What it does: Prevents Windows 10 Mail from underlining links despite inline CSS. Styles for underlined links should be inline. */
a {
text-decoration: none;
}
/* What it does: Prevents Windows 10 Mail from underlining links despite inline CSS. Styles for underlined links should be inline. */
a {
text-decoration: none;
}
/* What it does: A work-around for email clients meddling in triggered links. */
a[x-apple-data-detectors], /* iOS */
/* What it does: A work-around for email clients meddling in triggered links. */
a[x-apple-data-detectors], /* iOS */
.unstyle-auto-detected-links a,
.aBn {
border-bottom: 0 !important;
cursor: default !important;
color: inherit !important;
text-decoration: none !important;
font-size: inherit !important;
font-family: inherit !important;
font-weight: inherit !important;
line-height: inherit !important;
}
border-bottom: 0 !important;
cursor: default !important;
color: inherit !important;
text-decoration: none !important;
font-size: inherit !important;
font-family: inherit !important;
font-weight: inherit !important;
line-height: inherit !important;
}
/* What it does: Prevents Gmail from displaying a download button on large, non-linked images. */
.a6S {
display: none !important;
opacity: 0.01 !important;
}
/* What it does: Prevents Gmail from displaying a download button on large, non-linked images. */
.a6S {
display: none !important;
opacity: 0.01 !important;
}
/* What it does: Prevents Gmail from changing the text color in conversation threads. */
.im {
color: inherit !important;
}
/* What it does: Prevents Gmail from changing the text color in conversation threads. */
.im {
color: inherit !important;
}
/* If the above doesn't work, add a .g-img class to any image in question. */
img.g-img + div {
display: none !important;
}
/* If the above doesn't work, add a .g-img class to any image in question. */
img.g-img + div {
display: none !important;
}
h1 { line-height: 36px; }
h2 { line-height: 28px; }
h1 {
line-height: 36px;
}
h2 {
line-height: 28px;
}
/* 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 */
/* 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 */
/* iPhone 4, 4S, 5, 5S, 5C, and 5SE */
@media only screen and (min-device-width: 320px) and (max-device-width: 374px) {
u ~ div .email-container {
min-width: 320px !important;
}
/* iPhone 4, 4S, 5, 5S, 5C, and 5SE */
@media only screen and (min-device-width: 320px) and (max-device-width: 374px) {
u ~ div .email-container {
min-width: 320px !important;
}
/* iPhone 6, 6S, 7, 8, and X */
@media only screen and (min-device-width: 375px) and (max-device-width: 413px) {
u ~ div .email-container {
min-width: 375px !important;
}
}
/* iPhone 6, 6S, 7, 8, and X */
@media only screen and (min-device-width: 375px) and (max-device-width: 413px) {
u ~ div .email-container {
min-width: 375px !important;
}
/* iPhone 6+, 7+, and 8+ */
@media only screen and (min-device-width: 414px) {
u ~ div .email-container {
min-width: 414px !important;
}
}
/* iPhone 6+, 7+, and 8+ */
@media only screen and (min-device-width: 414px) {
u ~ div .email-container {
min-width: 414px !important;
}
}
</style>
<!-- CSS Reset : END -->
<!-- Progressive Enhancements : BEGIN -->
<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 */
.button-td,
.button-a {
transition: all 100ms ease-in;
}
.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;
}
}
/* 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>
<!-- Progressive Enhancements : END -->
</head>
<!--
</head>
<!--
The email background color (#ffffff) is defined in three places:
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
3. mso conditional: For Windows 10 Mail
-->
<body width="100%" 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]>
<body
width="100%"
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;">
<tr>
<td>
<![endif]-->
<!-- Visually Hidden Preheader Text : BEGIN -->
<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
</div>
<!-- Visually Hidden Preheader Text : END -->
<!-- Visually Hidden Preheader Text : BEGIN -->
<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
</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. -->
<!-- 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;">
&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 -->
<!-- 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 -->
<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;
"
>
&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:
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.
-->
<div style="max-width: 600px; margin: 0 auto;" class="email-container">
<!--[if mso]>
<div style="max-width: 600px; margin: 0 auto" class="email-container">
<!--[if mso]>
<table align="center" role="presentation" cellspacing="0" cellpadding="0" border="0" width="600">
<tr>
<td>
<![endif]-->
<!-- Email Body : BEGIN -->
<table align="center" role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="margin: auto;">
<!-- 1 Column Text + Button : BEGIN -->
<!-- Email Body : BEGIN -->
<table
align="center"
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>
<td style="background-color: #ffffff;">
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td style="padding: 20px; font-family: sans-serif; font-size: 16px; line-height: 22px; color: #212529;">
{{{ content }}}
</td>
</tr>
</table>
</td>
<td
style="
padding: 20px;
font-family: sans-serif;
font-size: 16px;
line-height: 22px;
color: #212529;
"
>
{{{ content }}}
</td>
</tr>
<!-- 1 Column Text + Button : END -->
</table>
</td>
</tr>
<!-- 1 Column Text + Button : END -->
<!-- Clear Spacer : BEGIN -->
<tr>
<td aria-hidden="true" height="40" style="font-size: 0px; line-height: 0px;">
&nbsp;
</td>
</tr>
<!-- Clear Spacer : END -->
<!-- Clear Spacer : BEGIN -->
<tr>
<td aria-hidden="true" height="40" style="font-size: 0px; line-height: 0px">&nbsp;</td>
</tr>
<!-- Clear Spacer : END -->
</table>
<!-- 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 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: 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 -->
<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]>
<!--[if mso]>
</td>
</tr>
</table>
<![endif]-->
</div>
</div>
<!--[if mso | IE]>
<!--[if mso | IE]>
</td>
</tr>
</table>
<![endif]-->
</center>
</body>
</body>
</html>

View file

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

View file

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

View file

@ -20,7 +20,7 @@
"kickstart:windows": "npx lerna bootstrap && yarn wbuildall && yarn prepare && yarn tips",
"cleanall": "lerna run clean",
"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",
"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",

View file

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

View file

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

View file

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

View file

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

View file

@ -59,7 +59,7 @@ describe('Store', () => {
}
const part = {
name: 'example.part',
plugins: [ plugin ],
plugins: [plugin],
draft: ({ store, part }) => {
store.test.example.warning('hello warning')
store.test.example.info('hello info')
@ -95,7 +95,7 @@ describe('Store', () => {
}
const part = {
name: 'example_part',
plugins: [ plugin ],
plugins: [plugin],
draft: ({ methodA, methodB, part }) => {
methodA('hello A')
methodB('hello B')
@ -129,9 +129,11 @@ describe('Store', () => {
it('Should log a warning when pushing to a non-array key', () => {
const store = new Store()
store.push('test',1)
store.push('test', 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()', () => {
@ -145,7 +147,9 @@ describe('Store', () => {
const store = new Store()
store.setIfUnset('test')
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', () => {

View file

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

View file

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

View file

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

View file

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

View file

@ -188,10 +188,13 @@ function createDesign(name, type) {
mkdir([...design, 'tests'])
// 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
templateOut([...template, 'src', 'index.mjs'], [...design, 'src', 'index.mjs'], {
templateOut([...template, 'src', 'index.mjs.mustache'], [...design, 'src', 'index.mjs'], {
capitalized_name,
})