1
0
Fork 0

chore(markdown): Linting of dev docs

This commit is contained in:
Joost De Cock 2022-02-19 08:04:25 +01:00
parent 1d8beedd44
commit 265ad404da
317 changed files with 1281 additions and 1503 deletions

View file

@ -14,6 +14,7 @@ This Code of Conduct is an almost verbatim copy of the [Contributor Covenant][ho
available at [http://contributor-covenant.org/version/2/0][version]
[homepage]: http://contributor-covenant.org
[version]: http://contributor-covenant.org/version/2/0/
</Note>

View file

@ -4,12 +4,14 @@ order: 10
---
##### Community Impact
Use of inappropriate language or other behavior
Use of inappropriate language or other behavior
deemed unprofessional or unwelcome in the community.
##### Consequence
A private, written warning from community leaders,
providing clarity around the nature of the violation and an
explanation of why the behavior was inappropriate.
A private, written warning from community leaders,
providing clarity around the nature of the violation and an
explanation of why the behavior was inappropriate.
A public apology may be requested.

View file

@ -3,8 +3,8 @@ title: Enforcement Guidelines
order: 60
---
Community leaders will follow these Community Impact Guidelines
in determining the consequences for any action they deem
Community leaders will follow these Community Impact Guidelines
in determining the consequences for any action they deem
in violation of FreeSewing's Code of Conduct:
<ReadMore list />

View file

@ -4,10 +4,12 @@ order: 40
---
##### Community Impact
Demonstrating a pattern of violation of
community standards, including sustained inappropriate behavior,
harassment of an individual, or aggression toward or
Demonstrating a pattern of violation of
community standards, including sustained inappropriate behavior,
harassment of an individual, or aggression toward or
disparagement of classes of individuals.
##### Consequence
A permanent ban from any sort of public interaction within the community.

View file

@ -3,18 +3,19 @@ title: Temporary ban
order: 30
---
##### Community Impact
A serious violation of community standards,
##### Community Impact
A serious violation of community standards,
including sustained inappropriate behavior.
##### Consequence
A temporary ban from any sort of interaction or
public communication with the community for a specified period
of time.
No public or private interaction with the people
involved, including unsolicited interaction with those enforcing
the Code of Conduct, is allowed during this period.
A temporary ban from any sort of interaction or
public communication with the community for a specified period
of time.
No public or private interaction with the people
involved, including unsolicited interaction with those enforcing
the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.

View file

@ -4,14 +4,16 @@ order: 20
---
##### Community Impact
A violation through a single incident or series of actions.
##### Consequence
A warning with consequences for continued behavior.
No interaction with the people involved, including unsolicited
interaction with those enforcing the Code of Conduct, for a
specified period of time. This includes avoiding interactions
A warning with consequences for continued behavior.\
No interaction with the people involved, including unsolicited
interaction with those enforcing the Code of Conduct, for a
specified period of time. This includes avoiding interactions
in community spaces as well as external channels like social
media.
media.
Violating these terms may lead to a temporary or permanent ban.

View file

@ -3,12 +3,12 @@ title: Enforcement responsibilities
order: 30
---
Community leaders are responsible for clarifying and enforcing our standards
of acceptable behavior and will take appropriate and fair corrective action
in response to any behavior that they deem inappropriate, threatening,
Community leaders are responsible for clarifying and enforcing our standards
of acceptable behavior and will take appropriate and fair corrective action
in response to any behavior that they deem inappropriate, threatening,
offensive, or harmful.
Community leaders have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, and will communicate reasons
Community leaders have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, and will communicate reasons
for moderation decisions when appropriate.

View file

@ -6,11 +6,10 @@ order: 50
Instances of abusive, harassing, or otherwise unacceptable behavior
may be reported to the community leaders responsible for enforcement:
- Joost De Cock (joost@joost.at)
- Sorcha Ní Dhubhghaill (nidhubhs@gmail.com)
- Joost De Cock (joost@joost.at)
- Sorcha Ní Dhubhghaill (nidhubhs@gmail.com)
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and
All community leaders are obligated to respect the privacy and
security of the reporter of any incident.

View file

@ -3,14 +3,13 @@ title: Our pledge
order: 10
---
We as members, contributors, and leaders of the FreeSewing community pledge
We as members, contributors, and leaders of the FreeSewing community pledge
to make participation in our community a harassment-free experience for everyone.
Everyone, regardless of age, body size, visible or invisible disability,
ethnicity, sex characteristics, gender identity and expression, level of experience,
education, socio-economic status, nationality, personal appearance, race,
Everyone, regardless of age, body size, visible or invisible disability,
ethnicity, sex characteristics, gender identity and expression, level of experience,
education, socio-economic status, nationality, personal appearance, race,
religion, or sexual identity and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.

View file

@ -5,16 +5,16 @@ order: 20
Examples of behavior that contributes to a positive environment for our community include:
- Demonstrating empathy and kindness toward other people
- Being respectful of differing opinions, viewpoints, and experiences
- Giving and gracefully accepting constructive feedback
- Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
- Focusing on what is best not just for us as individuals, but for the overall community
- Demonstrating empathy and kindness toward other people
- Being respectful of differing opinions, viewpoints, and experiences
- Giving and gracefully accepting constructive feedback
- Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
- Focusing on what is best not just for us as individuals, but for the overall community
Examples of unacceptable behavior include:
- The use of sexualized language or imagery, and sexual attention or advances of any kind
- Trolling, insulting or derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others private information, such as a physical or email address, without their explicit permission
- Other conduct which could reasonably be considered inappropriate in a professional setting
- The use of sexualized language or imagery, and sexual attention or advances of any kind
- Trolling, insulting or derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others private information, such as a physical or email address, without their explicit permission
- Other conduct which could reasonably be considered inappropriate in a professional setting

View file

@ -3,10 +3,9 @@ title: Scope
order: 40
---
This Code of Conduct applies within all FreeSewing community spaces, and also applies
when an individual is officially representing the FreeSewing community in public spaces.
This Code of Conduct applies within all FreeSewing community spaces, and also applies
when an individual is officially representing the FreeSewing community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed representative
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed representative
at an online or offline event.

View file

@ -10,10 +10,10 @@ documentation can help you find your feet, and figure out what goes where.
Our documentation is divided into four different types:
- [**Tutorials**](/tutorials) are lessons that lead you through a series of steps to complete a project.
- [**Guides**](/guides) tell a story to further your understanding of a specific topic.
- [**Howtos**](/howtos) give you concrete steps to solve a common problem or challenge.
- [**Reference**](/reference) holds technical descriptions of the underlying technology and how to make use of it.
- [**Tutorials**](/tutorials) are lessons that lead you through a series of steps to complete a project.
- [**Guides**](/guides) tell a story to further your understanding of a specific topic.
- [**Howtos**](/howtos) give you concrete steps to solve a common problem or challenge.
- [**Reference**](/reference) holds technical descriptions of the underlying technology and how to make use of it.
Each time you write documentation, you have to ask yourself: Is it a tutorial? Is it a Guide?
Is it a Howto? Or is it Reference documentation.
@ -21,24 +21,21 @@ Is it a Howto? Or is it Reference documentation.
If you find it hard to answer that question, the illustration below might help you figure out
where your documentation should go based on what it's trying to accomplish:
![A graphic showing a visual representation of our documentation
![A graphic showing a visual representation of our documentation
structure](docs.png "A visual representation of how our documentation is structured")
- Write a **Tutorial** is your aim is to help people learn the platform
- Write a **Guide** if your aim is to further people's understanding of a topic by going a bit deeper
- Write a **Howto** if your ain is to help people accomplish a task
- Write **Reference** documentation to detail how things work under the hood
- Refer people to **Discord or Github** for things that are not (yet) covered in our documentation
- Write a **Tutorial** is your aim is to help people learn the platform
- Write a **Guide** if your aim is to further people's understanding of a topic by going a bit deeper
- Write a **Howto** if your ain is to help people accomplish a task
- Write **Reference** documentation to detail how things work under the hood
- Refer people to **Discord or Github** for things that are not (yet) covered in our documentation
<Note>
##### Based on a talk by Daniele Procida
This structure is loosely based
This structure is loosely based
on [this talk by Daniele Procida](https://www.youtube.com/watch?v=t4vKPhjcMZg) at
PyCon AU 2017.
</Note>

View file

@ -3,8 +3,7 @@ title: Guides
order: zbb
---
You can find a list of all FreeSewing guides below:
You can find a list of all FreeSewing guides below:
<ReadMore recurse />
@ -20,4 +19,3 @@ guides take more time to explain in-depth what is being done and why.
For more details, refer to [How we structure our documentation](/guides/docs).
</Related>

View file

@ -3,7 +3,7 @@ title: Code and code blocks
order: 80
---
Especially for our developer documentation, there's a lot of times we include source code
Especially for our developer documentation, there's a lot of times we include source code
in the documentation.
You can make these look pretty by using a code block.
@ -15,7 +15,7 @@ let me = 'you'
```
````
Gives you:
Gives you:
```text
let me = 'you'
@ -38,14 +38,11 @@ let me = 'you'
The following language codes are supported:
- `js` for Javascript code
- `markdown` for Markdown
- `html` for HTML
- `svg` for SVG
- `bash` for Bash or shell scripts
- `mdx` for MDX
- `jsx` for JSX
- `json` for JSON
- `js` for Javascript code
- `markdown` for Markdown
- `html` for HTML
- `svg` for SVG
- `bash` for Bash or shell scripts
- `mdx` for MDX
- `jsx` for JSX
- `json` for JSON

View file

@ -3,7 +3,7 @@ title: Custom components
order: 90
---
The way we render markdown on our websites is through the use of [MDX](https://mdxjs.com/).
The way we render markdown on our websites is through the use of [MDX](https://mdxjs.com/).\
This allows us to extend Markdown with our own so-called *custom components*.
Such custom components allow us to put things in Markdown content that would
@ -42,7 +42,6 @@ The **Comment** component requires a `by` attribute that lists the author of the
<Comment by="joost">**Do** try this at home</Comment>
```
## Fixme
<Fixme>
@ -62,7 +61,6 @@ or can't fix it now.
</Fixme>
```
## Note
<Note>
@ -91,6 +89,7 @@ It's typically used on overview pages, such as out [markdown guide](/guides/mark
It won't show anything on this page, since this page has not child-pages.
## Related
<Related>
This snippet is provided by [the buttons plugin](/reference/plugins/buttons)
</Related>
@ -104,6 +103,7 @@ Use **Related** to add something that is relevant to the current topic.
```
## Tip
<Tip>
Comparing yourself to others is the fastest way to become unhappy
</Tip>
@ -117,6 +117,7 @@ Use **Tip** for, you know, tips.
```
## Warning
<Warning>
##### Please make a backup
Following these instructions will remove all your data
@ -142,7 +143,7 @@ Embed a video:
```markdown
<YouTube id='Rz6ShSftDlI' />
```
Embed a playlist:
<YouTube id='PL1gv5yv3DoZOFSXz7yydeV1H8m6pfwstn' playlist />
@ -150,6 +151,3 @@ Embed a playlist:
```md
<YouTube id='PL1gv5yv3DoZOFSXz7yydeV1H8m6pfwstn' playlist />
```

View file

@ -14,7 +14,7 @@ goals:
- Learn about the different custom components
---
Markdown is a lightweight markup language with plain text formatting syntax.
Markdown is a lightweight markup language with plain text formatting syntax.
It is designed to be easily readable by humans, and computers alike.
Markdown is often used to format documentation, online comments,
@ -24,6 +24,5 @@ In this guide, we'll look at the following topics:
<ReadMore list />
This will be enough to get you started. If you'd like to learn more,
This will be enough to get you started. If you'd like to learn more,
visit [markdownguide.org](https://www.markdownguide.org/).

View file

@ -7,33 +7,33 @@ Some things to keep in mind when working in Markdown are:
## Use remark-jargon for glossary terms
There is no need to add a *glossary* section to documentation.
We use a plugin called [remark-jargon][rj] to explain terms.
There is no need to add a *glossary* section to documentation.
We use a plugin called [remark-jargon][rj] to explain terms.
Information can be found at the link.
[rj]: https://github.com/freesewing/freesewing/blob/develop/packages/remark-jargon/README.md
## Let lists be lists
Please make sure to use Markdown proper, doing things such as hardcoding
numbers for lists and using `&middot;` for bulleted lists won't be rendered
properly and will be styled differently.
Using Markdown in the same way for everything ensures the site and
documentation look clean and professional. You can use a Markdown editor
Please make sure to use Markdown proper, doing things such as hardcoding
numbers for lists and using `&middot;` for bulleted lists won't be rendered
properly and will be styled differently.
Using Markdown in the same way for everything ensures the site and
documentation look clean and professional. You can use a Markdown editor
like [StackEdit](https://stackedit.io/) to preview your text.
<Note>
Github itself also allows working in Markdown and will give you a handy preview!
</Note>
If you get lost or have a question about how to do something, feel free to come
ask on the Discord. We've all had to learn Markdown at some point and would be
delighted to pass knowledge on.
If you get lost or have a question about how to do something, feel free to come
ask on the Discord. We've all had to learn Markdown at some point and would be
delighted to pass knowledge on.
## Create meaningful links
When adding links please do not link them using a structure like:
Link [here][yt]. Instead put the link under the relevant term.
When adding links please do not link them using a structure like:
Link [here][yt]. Instead put the link under the relevant term.
See first list item for an example.
[yt]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
@ -42,22 +42,23 @@ See first list item for an example.
### Lining within the same website
When you are linking within freesewing.dev or freesewing.org you can use a relative link from
the site root.
When you are linking within freesewing.dev or freesewing.org you can use a relative link from
the site root.\
Use:
```text
/guides/markdown/frequent-mistakes
```
instead of
instead of
```text
https://freesewing.dev/guides/markdown/frequent-mistakes
```
```
### Linking images
Images can be put in the same folder you are working on with a link
Images can be put in the same folder you are working on with a link
to the filename. For example:
```markdown
@ -66,16 +67,16 @@ This is [a picture of a banana](banana.jpg)
## Avoid ambiguity when lising a number of steps
If you're writing documentation that involves steps, please do not mix levels
of steps. Steps written out in documentation are there to facilitate brainless
If you're writing documentation that involves steps, please do not mix levels
of steps. Steps written out in documentation are there to facilitate brainless
execution. Don't be afraid to repeat yourself.
If you use substeps we want those substeps to take away ambiguity rather
than introduce it into your instructions. In the next example the substep
introduces something that ought to be done before the previous steps.
This creates confusion about when that step ought to be executed.
If you use substeps we want those substeps to take away ambiguity rather
than introduce it into your instructions. In the next example the substep
introduces something that ought to be done before the previous steps.
This creates confusion about when that step ought to be executed.
An example of what not to do:
An example of what not to do:
```md
1. cut collar
@ -87,18 +88,18 @@ An example of what not to do:
## Be mindful of whitespace
Markdown sytax around white space is a little unintuitive. If you want a
paragraph break but no white space you need to add two spaces at the end of
your line. I've found it helpful to experiment and keep checking the preview
to see how things look. Not all the empty lines and whitespace in your
document will render in the preview.
Markdown sytax around white space is a little unintuitive. If you want a
paragraph break but no white space you need to add two spaces at the end of
your line. I've found it helpful to experiment and keep checking the preview
to see how things look. Not all the empty lines and whitespace in your
document will render in the preview.
## Using custom components
When you're using custom components you want to leave an empty line before
and after your component.
When you're using custom components you want to leave an empty line before
and after your component.
```markdown
```markdown
Lorem ipsum dolor sit amet,
<Note>
@ -108,9 +109,8 @@ consectetur adipisci elit,
sed eiusmod tempor incidunt ut labore et dolore magna aliqua.
```
If you're using any markdown syntax within a custom component you want to also
leave an empty line at the start and end of your component.
If you're using any markdown syntax within a custom component you want to also
leave an empty line at the start and end of your component.
```markdown
Lorem ipsum dolor sit amet,
@ -125,11 +125,7 @@ sed eiusmod tempor incidunt ut labore et dolore magna aliqua.
```
## Don't be shy to ask a friend
Learning a new language can be intimidating, whether its Javascript, Norse or
Markdown but everyone in the Freesewing community is glad you're here and
helping us make the site even more awesome.
Learning a new language can be intimidating, whether its Javascript, Norse or
Markdown but everyone in the Freesewing community is glad you're here and
helping us make the site even more awesome.

View file

@ -20,9 +20,8 @@ followed by a space and the image title between quotes.
##### Images go in the same folder as your markdown file
The convention is to always place your images in the same folder as the
The convention is to always place your images in the same folder as the
text where you are including the image. That way, you just need to specify
the image name, and not the path to its location.
</Tip>

View file

@ -7,10 +7,11 @@ order: 30
You can make text *italic* or **bold**
by wrapping it in 1 or 2 asterisk respectively.
```
You can make text *italic* or **bold** by wrapping it in 1 or 2 asterisk respectively:
```md
Alternatively, you can also use underscores to mark _italic_ or __bold__.
```
Alternatively, you can also use underscores to mark _italic_ or __bold__.
Alternatively, you can also use underscores to mark *italic* or **bold**.

View file

@ -11,6 +11,5 @@ Like
this.
```
Like
Like\
this.

View file

@ -8,6 +8,7 @@ Links combine square brackets for the link text with round brackets for the dest
```md
[Like this](https://freesewing.org)
```
[Like this](https://freesewing.org)
An alternative notation allows you to include the links as such:
@ -22,6 +23,7 @@ See [the reference documentation][1] on [freesewing.dev][2]
See [the reference documentation][1] on [freesewing.dev][2]
[1]: https://freesewing.dev/reference
[2]: https://freesewing.dev/reference
You don't have to use numbers, but can also use named references.
@ -35,4 +37,3 @@ We moved the markdown content to [our monorepo][monorepo]
We moved the markdown content to [our monorepo][monorepo]
[monorepo]: https://github.com/freesewing/freesewing

View file

@ -12,12 +12,12 @@ To make a list, just do as you would in plain text:
- item
```
- a bullet
- list
- a sublist
- item
- a bullet
- list
- a sublist
- item
If you want an numbered list, just write numbers.
If you want an numbered list, just write numbers.
They don't even have to be the correct numbers:
```md
@ -27,7 +27,6 @@ They don't even have to be the correct numbers:
2. Item 3
```
1. Item 1
2. Item 2
2. Item 3
1. Item 1
2. Item 2
3. Item 3

View file

@ -5,7 +5,6 @@ order: 70
If you need them, you can create tables too, using a structure as shown below:
```md
| Name | Description |
| ---- | ----------- |
@ -35,4 +34,3 @@ You can change the alignment of the columns by using a colon (`:`) on the line b
| Compound | A substance composed of two or more elements. Chemically combined in definite proportions by weight |
| Mixture | Two or more substances that are not chemically united, such as air |
| Solution | A uniform mixture of varying proportions of a solvent and a solute |

View file

@ -10,7 +10,7 @@ You can just start writing.
An empty line starts a new paragraph.
```
You can just start writing.
An empty line starts a new paragraph.

View file

@ -12,11 +12,11 @@ The pattern configuration holds important information about the pattern
A pattern's [configuration](/reference/config/) is created by the pattern designer
and details a number of important things about the pattern, like:
- The **measurements** that are required to draft the pattern
- The different **parts** in the pattern and how they depend on each other
- The different **options** that are available to tweak the pattern
- The **measurements** that are required to draft the pattern
- The different **parts** in the pattern and how they depend on each other
- The different **options** that are available to tweak the pattern
The configuration is part of the pattern's code. It is created by the designer and
The configuration is part of the pattern's code. It is created by the designer and
it is the same for everybody using the pattern.
In other words, you cannot change the configuration. Instead, the configuration
specifies what kind of settings the pattern accepts.

View file

@ -3,12 +3,12 @@ title: How patterns work
---
This short guide will illustrate and explain how patterns work in FreeSewing.
Not to be confused with how sewing pattern work — although there's [great books
about that](https://www.assembil.com/how-patterns-work-book/) if you're
Not to be confused with how sewing pattern work — although there's [great books
about that](https://www.assembil.com/how-patterns-work-book/) if you're
interested — it's about what goes on under the hood each time a sewing
pattern is generated by FreeSewing.
This illustration is a good starting point to gain a better
This illustration is a good starting point to gain a better
understanding of the structure of a FreeSewing pattern:
<Example part="docs_overview">
@ -17,9 +17,9 @@ A schematic overview of FreeSewing
If we look at our image, it can be divided into three areas:
- The left area with the **settings** box
- The middle area with the **Pattern** box and everything in it
- The right area with the **draft** box and the *SVG* and *React* logos
- The left area with the **settings** box
- The middle area with the **Pattern** box and everything in it
- The right area with the **draft** box and the *SVG* and *React* logos
Let's take a closer look at everything that is contained within our central **Pattern** box:
@ -34,5 +34,3 @@ application.
That part is outside the scope of this guide.
</Note>

View file

@ -8,12 +8,11 @@ Parts divide your pattern into re-usable components
</Example>
Parts are a container for the points, paths, and snippets of (a part of) your pattern.
They are also re-usable by other patterns, which makes them a powerful tool to build
They are also re-usable by other patterns, which makes them a powerful tool to build
a pattern library.
If you design a T-shirt pattern with a `front`, `back`, and `sleeve`, each of those would be a part.
If you then wanted to make a long-sleeved version of your T-shirt pattern, you only need to design
If you then wanted to make a long-sleeved version of your T-shirt pattern, you only need to design
a new sleeve part. You can re-use the `front` and `back` parts of your short-sleeved T-shirt pattern, as they did not change.
When developing a FreeSewing pattern, you will spend most of your time designing the individual parts.

View file

@ -12,15 +12,15 @@ Paths are the lines and curves that make up your pattern.
They are made up of a set of drawing operations that together make up the path.
FreeSewing supports the following types of drawing operations:
- The **move** operation moves our virtual pen but does not draw anything.
- The **line** operation draws a straight line
- The **curve** operation draws a [Bézier curve](/guides/overview/about/beziercurves/)
- The **close** operation closes the path
- The **move** operation moves our virtual pen but does not draw anything.
- The **line** operation draws a straight line
- The **curve** operation draws a [Bézier curve](/guides/overview/about/beziercurves/)
- The **close** operation closes the path
To crucial thing to keep in mind is that, with the exception of the **move** operation,
all drawing operations start from wherever you are currently on your virtual sheet of paper.
For example, you might expect the **line** operation to take a start- and endpoint.
For example, you might expect the **line** operation to take a start- and endpoint.
But in fact, it only takes an endpoint, and will draw a straight line from where our virtual pen
currently is to said endpoint.
@ -35,8 +35,7 @@ Understanding that each drawing operation builds upon the next one is an importa
<Tip>
Our example image (which, if you hadn't realized was created with FreeSewing) has a lot of
Our example image (which, if you hadn't realized was created with FreeSewing) has a lot of
paths in it. Each box, the arrows, the lines in the React logo, and so on.
</Tip>

View file

@ -14,7 +14,6 @@ and the store.
In reality, your pattern will be a *constructor* that takes the user's settings as
input and will return a new instance of your pattern.
That pattern instance will have a `draft()` method which will do the actual work of
drafting the pattern. Once drafted, you can either call the `render()` method on
That pattern instance will have a `draft()` method which will do the actual work of
drafting the pattern. Once drafted, you can either call the `render()` method on
the pattern instance, or pass it to [our React component](/packages/components) to render it in the browser.

View file

@ -14,25 +14,24 @@ Before we can draw any line, we need to know where it starts from, and where it
That's why we have **points**. They are the most basic building block of a
FreeSewing pattern, and their role is to store coordinates.
Each point must have:
Each point must have:
- A **X-coordinate**
- A **Y-coordinate**
- A **X-coordinate**
- A **Y-coordinate**
Together, these coordinates determine the location of the point in the 2-dimensional plane we're drawing on.
<Note>
Points are unlikely to confuse you. The only gotcha is [the
coordinate system](/guides/prerequisites/coordinate-system/) which has a Y-axis that is inverted to what you
coordinate system](/guides/prerequisites/coordinate-system/) which has a Y-axis that is inverted to what you
may intuitively expect.
</Note>
<Tip>
Our example image (which, if you hadn't realized was created with FreeSewing) has a lot of
Our example image (which, if you hadn't realized was created with FreeSewing) has a lot of
points in it. The corners of the boxes, the location where the text goes, and so on.
</Tip>

View file

@ -8,12 +8,12 @@ Snippets are little embelishments that go on your pattern
</Example>
Snippets are little embellishments you can use and re-use on your pattern.
They are typically used for things like logos or buttons.
They are typically used for things like logos or buttons.
Each snippet must have:
- An anchor point that determine where the snippet will be located
- The name of the snippet to insert
- An anchor point that determine where the snippet will be located
- The name of the snippet to insert
Since our example image does not have any snippets in it, here's another example
of a `button`, `buttonhole`, and `logo` snippet added to a FreeSewing pattern:
@ -21,4 +21,3 @@ of a `button`, `buttonhole`, and `logo` snippet added to a FreeSewing pattern:
<Example part="snippet">
An example of the use of snippets
</Example>

View file

@ -11,4 +11,3 @@ The store provides key-value storage that is shared across your pattern.
If you have some information in one part that you want to make available
outside that part (in another part) you can save it to the store.

View file

@ -20,6 +20,7 @@ const condition = settings => {
else return false // Do not load the plugin
}
```
You pass your plugin and condition method as a third parameter to the Design constructor
with the `plugin` and `condition` keys respectively.
@ -50,16 +51,15 @@ const Pattern = new freesewing.Design(
Our condition method will return `true` only if the following conditions are met:
- A `settings` object is passed into the method
- `settings.options` is _truthy_
- `settings.options.draftForHighBust` is _truthy_
- `settings.options.measurements.highBust` is _truthy_
- A `settings` object is passed into the method
- `settings.options` is *truthy*
- `settings.options.draftForHighBust` is *truthy*
- `settings.options.measurements.highBust` is *truthy*
This is a real-world example from our Teagan pattern. A t-shirt pattern that can be
drafted to the high bust (rather than the full chest circumference) if the user
drafted to the high bust (rather than the full chest circumference) if the user
choses so.
But that feat is handled auto-magically by `plugin-bust` which is a build-time plugin.
So whether to load this plugin or not hinges on the user settings, which is why we
load this plugin conditionally.

View file

@ -5,17 +5,16 @@ order: 60
A **hook** is a lifecycle event. The available hooks are:
- [preRender](/reference/hooks/prerender/): Called at the start of [`Pattern.render()`](/reference/api/pattern#render)
- [postRender](/reference/hooks/postrender/): Called at the end of [`Pattern.render()`](/reference/api/pattern#render)
- [insertText](/reference/hooks/inserttext/): Called when inserting text
- [preDraft](/reference/hooks/predraft/): Called at the start of [`Pattern.draft()`](/reference/api/pattern#draft)
- [postDraft](/reference/hooks/postdraft/): Called at the end of [`Pattern.draft()`](/reference/api/pattern#draft)
- [preSample](/reference/hooks/presample/): Called at the start of [`Pattern.sample()`](/reference/api/pattern#sample)
- [postSample](/reference/hooks/postsample/): Called at the end of [`Pattern.sample()`](/reference/api/pattern#sample)
- [preRender](/reference/hooks/prerender/): Called at the start of [`Pattern.render()`](/reference/api/pattern#render)
- [postRender](/reference/hooks/postrender/): Called at the end of [`Pattern.render()`](/reference/api/pattern#render)
- [insertText](/reference/hooks/inserttext/): Called when inserting text
- [preDraft](/reference/hooks/predraft/): Called at the start of [`Pattern.draft()`](/reference/api/pattern#draft)
- [postDraft](/reference/hooks/postdraft/): Called at the end of [`Pattern.draft()`](/reference/api/pattern#draft)
- [preSample](/reference/hooks/presample/): Called at the start of [`Pattern.sample()`](/reference/api/pattern#sample)
- [postSample](/reference/hooks/postsample/): Called at the end of [`Pattern.sample()`](/reference/api/pattern#sample)
You can register a method for a hook. When the hook is triggered, your method will be
called. It will receive two parameters:
- An object relevant to the hook. See the [hooks API reference](/reference/hooks/) for details.
- Data passed when the hook was registered (optional)
- An object relevant to the hook. See the [hooks API reference](/reference/hooks/) for details.
- Data passed when the hook was registered (optional)

View file

@ -3,7 +3,7 @@ title: Loading build-time plugins
order: 20
---
Build-time plugins are loaded at build time, by passing them to
Build-time plugins are loaded at build time, by passing them to
the [`freesewing.Design`](/reference/api/#design) constructor:
```js
@ -24,4 +24,3 @@ import config from "../config"
const Pattern = new freesewing.Design(config, [plugins, gorePlugin] )
```

View file

@ -22,5 +22,3 @@ const myAaron = new Aaron()
Plugins that use only hooks are typically run-time plugins
</Tip>

View file

@ -5,8 +5,8 @@ order: 90
Plugin structure for macros is similar, with a few changes:
- Rather than the hook name, you provide the macro name (that you choose yourself)
- The context (`this`) of a macro method is **always** a [Part](/reference/api/part) object.
- Rather than the hook name, you provide the macro name (that you choose yourself)
- The context (`this`) of a macro method is **always** a [Part](/reference/api/part) object.
Apart from these, the structure is very similar:
@ -35,7 +35,7 @@ export default {
}
```
Did you figure out what this plugin does?
Did you figure out what this plugin does?
It provides a `box` macro that draws a box on our pattern in a given location with a give size.
We can use it like this:
@ -48,7 +48,7 @@ macro('box', {
});
```
Obviously, you can expect to learn how to call a macro in its documentation,
Obviously, you can expect to learn how to call a macro in its documentation,
rather than have to comb through its code.
<Note>
@ -61,4 +61,3 @@ to a macro needs to be contained in a single argument.
Typically, you use a single plain object to configure the macro.
</Note>

View file

@ -3,10 +3,10 @@ title: Plugin structure
order: 50
---
Plugins can do two things:
Plugins can do two things:
- They can use hooks
- They can provide macros
- They can use hooks
- They can provide macros
Your plugin should export an object with the following structure:
@ -19,7 +19,6 @@ Your plugin should export an object with the following structure:
};
```
The `name` and `version` attributes are self-explanatory.
The `name` and `version` attributes are self-explanatory.
The [hooks](/guides/plugins/hooks/) and [macros](/guides/plugins/macros/) sections
explain the `hooks` and `macros` properties.

View file

@ -5,8 +5,8 @@ order: 10
Plugins come in two flavours:
- [Build-time plugins](#build-time-plugins)
- [Run-time plugins](#run-time-plugins)
- [Build-time plugins](#build-time-plugins)
- [Run-time plugins](#run-time-plugins)
When writing a plugin, ask yourself whether it's a run-time or a build-time plugin.
And if the answer is both, please split them into two plugins.
@ -25,14 +25,12 @@ Our [plugin bundle](/reference/plugins/bundle/) bundles build-time plugins that
<Note>Plugins that provide a macro are typically build-time plugins</Note>
## Run-time plugins
A plugin is a run-time plugin if it can be added after instantiating your pattern.
Think of it as a plugin to be used in the front-end.
Run-time plugins are not a dependecy of the pattern. They just _add something_ to it.
Run-time plugins are not a dependecy of the pattern. They just *add something* to it.
Our [theme plugin](/reference/plugins/theme/) is a good example of a run-time plugin.
If it's missing, your pattern will still work, it just won't look pretty.

View file

@ -3,7 +3,7 @@ title: Using hooks without a plugin
order: 85
---
You can attach a method to a hook at run-time without the need for a plugin
You can attach a method to a hook at run-time without the need for a plugin
using the [Pattern.on()](/reference/api/pattern/on) method.
The method takes the hook name as its first argument, and the hook method as its second.
@ -17,4 +17,3 @@ pattern.on('preRender', function(svg) {
```
Congratulations, you've just made your pattern yellow.

View file

@ -9,8 +9,8 @@ that as the second object.
Remember that:
- The `insertText` hook will receive a locale and string and you should return a string.
- All other hooks receive an object. You don't need to return anything, but rather modify the object you receive.
- The `insertText` hook will receive a locale and string and you should return a string.
- All other hooks receive an object. You don't need to return anything, but rather modify the object you receive.
Let's look at an example:
@ -39,8 +39,8 @@ export default {
This is a complete plugin, ready to be published on NPM. It uses two hooks:
- `preRender` : We add some style and defs to our SVG
- `insertText` : We transfer all text to UPPERCASE
- `preRender` : We add some style and defs to our SVG
- `insertText` : We transfer all text to UPPERCASE
<Note>
@ -52,8 +52,7 @@ the SVG tag with the name and version of our plugin.
We check for this attribute when the `preRender` hook runs, thereby avoiding that
our styles and defs will be added twice.
It is good practice to wrap you hook methods in a call like this, because you have
It is good practice to wrap you hook methods in a call like this, because you have
no guarantee the user won't render your pattern more than once.
</Note>

View file

@ -3,40 +3,38 @@ title: Understanding Bézier curves
order: 50
---
While lines on computers are easy to store with a start and end point,
While lines on computers are easy to store with a start and end point,
curves require more information.
In FreeSewing — as in SVG and countless of other computer applications —
curves are stored as [Bézier curves](https://en.wikipedia.org/wiki/B%C3%A9zier_curve),
named after French engineer [Pierre Bézier](https://en.wikipedia.org/wiki/Pierre_B%C3%A9zier) who
curves are stored as [Bézier curves](https://en.wikipedia.org/wiki/B%C3%A9zier_curve),
named after French engineer [Pierre Bézier](https://en.wikipedia.org/wiki/Pierre_B%C3%A9zier) who
popularized their use back in the 1960s.
In FreeSewing, we use so-called cubic Bézier curves which have:
- A start point
- A first control point thats linked to the start point
- A second control point thats linked to the end point
- An end point
- A start point
- A first control point thats linked to the start point
- A second control point thats linked to the end point
- An end point
<Example settings_complete="0" part="path_curve">
An example of a Bézier curve drawn by the Path.curve() method
</Example>
Bézier curves and their *handles* or *control points* are surprisingly intuitive.
Bézier curves and their *handles* or *control points* are surprisingly intuitive.
The following illustration does a great job at explaining how they are constructed:
![How Bézier curves are constructed](bezier.gif)
You don't need understand the mathematics behind Bézier Curves.
You don't need understand the mathematics behind Bézier Curves.
As long as you intuitively *get* how the control points influence the curve, you're good to go.
<Note>
###### More on Bézier curves
Wikipedia has a good [introduction to Bézier curves](https://en.wikipedia.org/wiki/B%C3%A9zier_curve).
For a deep-dive into the subject, check out [A Primer on Bézier Curves](https://pomax.github.io/bezierinfo/) by
Wikipedia has a good [introduction to Bézier curves](https://en.wikipedia.org/wiki/B%C3%A9zier_curve).\
For a deep-dive into the subject, check out [A Primer on Bézier Curves](https://pomax.github.io/bezierinfo/) by
[Pomax](https://github.com/Pomax).
</Note>

View file

@ -24,4 +24,3 @@ This is a common point of confusion so keep in mind that the Y-axis may
not behave as you would have intuitively expected.
</Note>

View file

@ -16,7 +16,7 @@ goals:
---
Drawing lines and curves on paper is a skill most people have been practicing since kindergarten.
In FreeSewing, we draw lines and curves with code, which is a bit more abstract
In FreeSewing, we draw lines and curves with code, which is a bit more abstract
but doesn't have to be complicated once you understand a few basic building blocks.
Understanding the concepts that are involved in designing sewing patterns in code will pay dividents later.
@ -30,12 +30,11 @@ That is why we recommend you familiarize yourself with the following topics:
FreeSewing sits at the intersection of the world of makers and developers.
If your background is in development, you will need no explaining what SVG is, but might not
know much about designing sewing patterns.
know much about designing sewing patterns.
If on the other hand your background is in sewing or pattern design, you might wonder what
the heck Node JS is and why you should care.
Few people straddle both worlds, so as you start using FreeSewing, chances are
you'll learn a few new things along the way.
Few people straddle both worlds, so as you start using FreeSewing, chances are
you'll learn a few new things along the way.
</Note>

View file

@ -6,10 +6,9 @@ order: 20
Patterns are rendered as **SVG** — short
for [Scalable Vector Graphics](https://en.wikipedia.org/wiki/Scalable_Vector_Graphics) —
an XML-based vector image format and an open standard.
While you dont need to be an SVG expert, a basic understanding of the format
While you dont need to be an SVG expert, a basic understanding of the format
will greatly help you to understand FreeSewing.
For example, the coordinate system and the way paths
are structured are all related to the SVG drawing system, which is closely related
to other 2D drawing technologies such as PostScript or PDF.

View file

@ -3,14 +3,12 @@ title: Units in FreeSewing
order: 40
---
FreeSewing uses millimeter for all its internal units.
FreeSewing uses millimeter for all its internal units.
We do support both imperial and metrics units, which are displayed
as cm or inch, but under the hood everything is handled in millimeter.
So as a pattern designer, you will work with mm.
When you write `1`, thats one mm. When you write `7.8`, thats 7.8mm.
While you can use cm or inch on the FreeSewing website, that is merely a layer of
While you can use cm or inch on the FreeSewing website, that is merely a layer of
abstration on top of the internal units, which are always mm.

View file

@ -5,7 +5,7 @@ title: Translation guide
Freesewing.org is proudly multilingual, and we currently support five languges.
For this, we rely on the work of our translators who volunteer their
time to translate FreeSewing into various languages from English, which
is our source language.
is our source language.
This translation guide will tell you everything you need to
know to join the effort as a translator for FreeSewing.
@ -14,7 +14,7 @@ know to join the effort as a translator for FreeSewing.
##### TL;DR: Becoming a FreeSewing translator
Our translation project on Crowdin is accessible
Our translation project on Crowdin is accessible
via [translate.freesewing.org](https://translate.freesewing.org).
To get started, you will need to be invited as a translator. No need to worry,
@ -27,16 +27,15 @@ Bonus: You'll get an `@freesewing.org` email alias
</Tip>
## Languages
We currently support the following five languages:
- **en** : English
- **de** : German
- **es** : Spanish
- **fr** : French
- **nl** : Dutch
- **en** : English
- **de** : German
- **es** : Spanish
- **fr** : French
- **nl** : Dutch
<Note>
@ -50,8 +49,8 @@ please [come and talk to us on Discord](https://discord.freesewing.org).
We use two different tools to manage our translations, depending on the context:
- Markdown content and code strings in our monorepo are translated within **Crowdin**
- Blog and showcase posts are translated within **Strapi**
- Markdown content and code strings in our monorepo are translated within **Crowdin**
- Blog and showcase posts are translated within **Strapi**
<Tip>
@ -59,7 +58,7 @@ We use two different tools to manage our translations, depending on the context:
If you'd like to help out, please join our translation team on Crowdin.
While it can be nice to have blog and showcase posts translated, these are less important than the
While it can be nice to have blog and showcase posts translated, these are less important than the
translation work in Crowdin which is about the documentation and strings that allow people to
use FreeSewing.org in a different language.
@ -84,7 +83,7 @@ Strapi ([strapi.io](https://strapi.io/)) is a so-called *headless content manage
Headless just means that we load the content from it via an API, rather than have it be part of our
website like a classic CMS (eg. Wordpress).
In Strapi, we keep our blog posts and showcases for FreeSewing.org.
In Strapi, we keep our blog posts and showcases for FreeSewing.org.
We also keep our newsletter editions there and developer blog posts for FreeSewing.dev there, but since
those are not translated, we will ignore them in this guide.
@ -129,8 +128,6 @@ These will be filled in later with the correct value. For example:
looks like this in Spanish
```yaml
{field} guardado
```