diff --git a/config/social.mjs b/config/social.mjs index 9b7219178f7..0b2ad9dcb4e 100644 --- a/config/social.mjs +++ b/config/social.mjs @@ -6,4 +6,5 @@ export const social = { GitHub: 'https://github.com/freesewing', Reddit: 'https://www.reddit.com/r/freesewing/', Mastodon: 'https://freesewing.social/@freesewing', + Bluesky: 'https://bsky.app/profile/freesewing.org', } diff --git a/config/templates/readme.dflt.md b/config/templates/readme.dflt.md index 27b85126066..ab9543f8178 100644 --- a/config/templates/readme.dflt.md +++ b/config/templates/readme.dflt.md @@ -59,7 +59,7 @@ show you how to create your first parametric design. FreeSewing is an open source project maintained by Joost De Cock and financially supported by the FreeSewing patrons. -If you feel FreeSewing is worthwhile, and you can spend a few coind without +If you feel FreeSewing is worthwhile, and you can spend a few coins without hardship, then you should [join us and become a patron](https://freesewing.org/community/join). ## Links 👩‍💻 diff --git a/config/templates/readme.main.md b/config/templates/readme.main.md index b35f5778a16..141d107f850 100644 --- a/config/templates/readme.main.md +++ b/config/templates/readme.main.md @@ -92,7 +92,7 @@ show you how to create your first parametric design. FreeSewing is an open source project maintained by Joost De Cock and financially supported by the FreeSewing patrons. -If you feel FreeSewing is worthwhile, and you can spend a few coind without +If you feel FreeSewing is worthwhile, and you can spend a few coins without hardship, then you should [join us and become a patron](https://freesewing.org/community/join). ## Links 👩‍💻 diff --git a/markdown/org/blog/v3-umbrella-post/en.md b/markdown/org/blog/v3-umbrella-post/en.md index 7ddbf2f28dd..5f4734e357f 100644 --- a/markdown/org/blog/v3-umbrella-post/en.md +++ b/markdown/org/blog/v3-umbrella-post/en.md @@ -8,5 +8,27 @@ author: joost There's a flurry of news and announcements about FreeSewing v3, so this _umbrella post_ gathers all of them into one place. -If you're looking for the best link to share regarding the v3 release and migration, this is probably the one. +If you're looking for the best link to share regarding the v3 release and migration, this post is your best bet. + +##### FreeSewing is now pay-what-you-want + +[This post outlines the reasoning behind FreeSewing's new pricing](/blog/freesewing-is-now-pay-what-you-want) + +##### Welcome to the new FreeSewing.org site, powered by v3 + +[This is the _official_ announcement post for the new website](/blog/welcome-to-freesewining-3) + +##### Announcing FreeSewing.social + +[Announcement of FreeSewing's own Mastodon instance, and our departure from Twitter](/blog/announcing-freesewing-social) + +##### Opening up the FreeSewing backend API + +[Announcement of the new API keys feature that lets anyone connect to our backend to retrieve data](/blog/open-backend-api) + +##### Announcing FreeSewing v3.0 + +[Announcement of the release of v3.0.0 of FreeSewing's core library](/blog/announcing-freesewing-v30) + + diff --git a/markdown/org/docs/about/site/draft/en.md b/markdown/org/docs/about/site/draft/en.md index 0f47173fd11..185cc319328 100644 --- a/markdown/org/docs/about/site/draft/en.md +++ b/markdown/org/docs/about/site/draft/en.md @@ -56,3 +56,4 @@ This allows you to quickly verify the specific role of a setting or option witho ## Editor modes +Complete these docs diff --git a/sites/org/pages/blog/index.mjs b/sites/org/pages/blog/index.mjs index 7723224ce15..78fb3b1c1c0 100644 --- a/sites/org/pages/blog/index.mjs +++ b/sites/org/pages/blog/index.mjs @@ -15,7 +15,11 @@ const namespaces = nsMerge('designs', 'sections', pageNs) // Helper object to order posts const order = {} -for (const [slug, props] of Object.entries(meta)) order[props.d] = slug +let i = 0 // Avoid posts with same date not showing up +for (const [slug, props] of Object.entries(meta)) { + i++ + order[props.d + i] = slug +} export const recentBlogPosts = Object.keys(order) .sort() diff --git a/sites/org/pages/support.mjs b/sites/org/pages/support.mjs index b2be2007b97..80097467043 100644 --- a/sites/org/pages/support.mjs +++ b/sites/org/pages/support.mjs @@ -16,7 +16,7 @@ import { GitHubIcon, InstagramIcon, RedditIcon, - TwitterIcon, + MastodonIcon, YouTubeIcon, CommunityIcon, ChatIcon, @@ -47,12 +47,12 @@ const SupportCard = ({ bg, textColor, title, icon, nr }) => ( ) const socialIcon = { + mastodon: , + github: , discord: , facebook: , - github: , instagram: , reddit: , - twitter: , youtube: , } @@ -85,7 +85,7 @@ const SupportPage = ({ page }) => {

{pageTitle}

-

{t('howCanWeSupportYou')}

+

{t('support:howCanWeSupportYou')}

{/* Community */}
@@ -96,7 +96,10 @@ const SupportPage = ({ page }) => { title={t('support:communitySupport')} icon={} /> -

{t('support:communitySupport1')}

+

{t('support:communitySupport2')}

{Object.keys(config.social) diff --git a/sites/shared/components/navigation/primary.mjs b/sites/shared/components/navigation/primary.mjs index dbecbc66496..535ae4376ac 100644 --- a/sites/shared/components/navigation/primary.mjs +++ b/sites/shared/components/navigation/primary.mjs @@ -4,6 +4,7 @@ import { useContext } from 'react' import Link from 'next/link' import orderBy from 'lodash.orderby' import { + CsetIcon, DesignIcon, DocsIcon, RssIcon, @@ -39,6 +40,7 @@ export const icons = { showcase: (className = '') => , new: (className = '') => , support: (className = '') => , + csets: (className = '') => , // Lab code: (className = '') => , diff --git a/sites/shared/components/social/icons.mjs b/sites/shared/components/social/icons.mjs index 1db6d78d086..42ab8cb58cb 100644 --- a/sites/shared/components/social/icons.mjs +++ b/sites/shared/components/social/icons.mjs @@ -47,7 +47,7 @@ export const socialList = (spectrum) => ({ }, Bluesky: { icon: , - href: social.YouTube, + href: social.Bluesky, community: true, }, Discord: { diff --git a/sites/shared/components/support.mjs b/sites/shared/components/support.mjs index d3c604e86f2..3fec88ddeb3 100644 --- a/sites/shared/components/support.mjs +++ b/sites/shared/components/support.mjs @@ -108,11 +108,11 @@ const SupportType = ({ type, active, t, update }) => ( update(type)}>
- {t(type)} + {t(`support:${type}`)} {icons[type]}
- {t(`${type}Desc`)} + {t(`support:${type}Desc`)}
@@ -179,7 +179,7 @@ export const SupportForm = () => { if (issue || discussion) return (
-
{t('requestCreated')}
+
{t('support:requestCreated')}

We have created your request, you can find it here:
@@ -190,7 +190,7 @@ export const SupportForm = () => {

) @@ -205,7 +205,7 @@ export const SupportForm = () => {

@@ -217,15 +217,15 @@ export const SupportForm = () => { setType(false)} t={t} /> val.length > 10} docs={
-

{t('title')}

-

{t('titleDocs1')}

-

{t('titleDocs2')}

+

{t('support:title')}

+

{t('support:titleDocs1')}

+

{t('support:titleDocs2')}

} /> @@ -239,21 +239,21 @@ export const SupportForm = () => { docs={

{t('design')}

-

{t('designDocs1')}

+

{t('support:designDocs1')}

} /> )} val.length > 10} docs={
-

{t('description')}

-

{t('descriptionDocs1')}

+

{t('support:description')}

+

{t('support:descriptionDocs1')}

} /> @@ -265,14 +265,14 @@ export const SupportForm = () => { setSingleImage(key, val)} current={images[key]} valid={(val) => val.length > 1} docs={
-

{t('image')}

-

{t('imageDocs1')}

+

{t('support:image')}

+

{t('support:imageDocs1')}

} imgType="support" @@ -281,14 +281,14 @@ export const SupportForm = () => { /> {images[key] && ( - {t('addImageToMd')}: + {t('support:addImageToMd')}:

@@ -298,7 +298,7 @@ export const SupportForm = () => { })} {Object.keys(images).length < 9 && ( )}
) diff --git a/sites/shared/components/workbench/en.yaml b/sites/shared/components/workbench/en.yaml index a1983ab58ef..ceeb92e6c87 100644 --- a/sites/shared/components/workbench/en.yaml +++ b/sites/shared/components/workbench/en.yaml @@ -40,9 +40,11 @@ editCurrentMeasiesDesc: Changes you make here will not be saved to your measurem editCurrentMeasiesHeader: Edit Pattern Measurements editMeasiesByHand: Edit measurements by hand editMeasiesByHandDesc: Manually set or override any measurements. These changes will only apply to the current pattern. -editSettings: Edit configuration +editSettings: Edit settings +editSettingsByHand: Edit settings by hand elastic: Elastic export: Export +exporting: Exporting exportAsData: Export as data exportForEditing: Export for editing exportForPrinting: Export for printing @@ -80,6 +82,7 @@ partTransfoYes: Show buttons partTransfoYesDesc: Include these buttons on the pattern output (they will not be printed) pathInfo: Path info patternBookmarkCreated: Pattern bookmark created +patternEditor: Pattern Editor patternInspector: Pattern Inspector patternLogs: Pattern logs patternSaved: Pattern saved @@ -106,6 +109,7 @@ showOnlyThisPart: Show only this pattern part sleevecap: Sleevecap style: Style test: Test +testDesign: Test Design testDesignMeasurement: "Test {design} measurements: {measurement}" testDesignOption: "Test {design} design options: {option}" testDesignSets: "Test {design} across measurements sets" diff --git a/sites/shared/components/workbench/exporting/export-handler.mjs b/sites/shared/components/workbench/exporting/export-handler.mjs index 6df27e28d06..24b14820ac7 100644 --- a/sites/shared/components/workbench/exporting/export-handler.mjs +++ b/sites/shared/components/workbench/exporting/export-handler.mjs @@ -18,7 +18,7 @@ export const ns = ['cut', 'plugin', 'common'] export const exportTypes = { exportForPrinting: ['a4', 'a3', 'a2', 'a1', 'a0', 'letter', 'legal', 'tabloid'], exportForEditing: ['svg', 'pdf'], - exportAsData: ['json', 'yaml', 'github gist'], + exportAsData: ['json', 'yaml'], } /** @@ -171,7 +171,7 @@ export const handleExport = async ({ // add the strings that are used on the cover page workerArgs.strings = { design: capitalize(design), - tagline: t('common:sloganCome') + '. ' + t('common:sloganStay'), + tagline: t('common:slogan1') + '. ' + t('common:slogan2'), url: window.location.href, cuttingLayout: t('cut:cuttingLayout'), } @@ -186,8 +186,8 @@ export const handleExport = async ({ // add the svg and pages data to the worker args workerArgs.pages = pattern.setStores[pattern.activeSet].get('pages') - // add cutting layouts if requested - if (!exportTypes.exportForEditing.includes(format) && pageSettings.cutlist) { + // add cutting layouts if requested (commented out for now) + if (false && !exportTypes.exportForEditing.includes(format) && pageSettings.cutlist) { workerArgs.cutLayouts = generateCutLayouts(pattern, Design, settings, format, t, ui) } } catch (err) { diff --git a/sites/shared/components/workbench/header.mjs b/sites/shared/components/workbench/header.mjs index 5db9ef5a7cb..dfbcbbb9d23 100644 --- a/sites/shared/components/workbench/header.mjs +++ b/sites/shared/components/workbench/header.mjs @@ -108,7 +108,7 @@ const NavIcons = ({ setView, setDense, dense, view, saveAs = false, control }) = {control >= controlLevels.views.test && ( setView('test')} - label={t('workbench:patternTests')} + label={t('workbench:testDesign')} active={view === 'test'} > @@ -153,7 +153,7 @@ const NavIcons = ({ setView, setDense, dense, view, saveAs = false, control }) = {control >= controlLevels.views.edit && ( setView('edit')} - label={t('workbench:editByHand')} + label={t('workbench:editSettingsByHand')} active={view === 'edit'} > diff --git a/sites/shared/components/workbench/views/edit/index.mjs b/sites/shared/components/workbench/views/edit/index.mjs index 3ae5fac6af0..3d755e83a59 100644 --- a/sites/shared/components/workbench/views/edit/index.mjs +++ b/sites/shared/components/workbench/views/edit/index.mjs @@ -10,7 +10,6 @@ import { useEffect, useState, useRef, useMemo, useContext } from 'react' import { useTranslation } from 'next-i18next' // Components import { CloseIcon } from 'shared/components/icons.mjs' -import { V3Wip } from 'shared/components/v3-wip.mjs' export const ns = [] @@ -58,8 +57,7 @@ export const EditView = ({ settings, setSettings, design, Design }) => { return (
-

{t('yamlEditViewTitleThing', { thing: capitalize(design) })}

- +

{t('workbench:editSettingsByHand')}

{error && (
@@ -86,8 +84,8 @@ export const EditView = ({ settings, setSettings, design, Design }) => { ref={inputRef} />
-
) diff --git a/sites/shared/components/workbench/views/exporting/index.mjs b/sites/shared/components/workbench/views/exporting/index.mjs index 0541cd6f745..2dcae3c66c7 100644 --- a/sites/shared/components/workbench/views/exporting/index.mjs +++ b/sites/shared/components/workbench/views/exporting/index.mjs @@ -13,9 +13,8 @@ import { useTranslation } from 'next-i18next' // Components import { Popout } from 'shared/components/popout/index.mjs' import { WebLink } from 'shared/components/link.mjs' -import { V3Wip } from 'shared/components/v3-wip.mjs' -export const ns = ['exporting', exportNs] +export const ns = ['exporting', exportNs, 'workbench'] export const ExportView = ({ settings, ui, design, Design }) => { const [link, setLink] = useState(false) @@ -51,8 +50,7 @@ export const ExportView = ({ settings, ui, design, Design }) => { return (
-

{t('export')}

- +

{t('workbench:export')}

{t('exportPattern-txt')}

{link && ( @@ -65,7 +63,11 @@ export const ExportView = ({ settings, ui, design, Design }) => {

{t(type)}

{exportTypes[type].map((format) => ( - ))} diff --git a/sites/shared/components/workbench/views/inspect/index.mjs b/sites/shared/components/workbench/views/inspect/index.mjs index 6e9d9eb8efd..22ae04f260e 100644 --- a/sites/shared/components/workbench/views/inspect/index.mjs +++ b/sites/shared/components/workbench/views/inspect/index.mjs @@ -4,7 +4,6 @@ import { InspectorPattern } from './inspector/pattern.mjs' import { DraftMenu, ns as menuNs } from './menu.mjs' import { objUpdate, nsMerge } from 'shared/utils.mjs' import { PatternWithMenu, ns as wrapperNs } from '../pattern-with-menu.mjs' -import { V3Wip } from 'shared/components/v3-wip.mjs' import { DraftHeader, ns as headerNs } from '../draft/header.mjs' export const ns = nsMerge(menuNs, wrapperNs, headerNs) @@ -82,7 +81,6 @@ export const InspectView = ({ Header: DraftHeader, menu: ( <> - {

{t('logs')}

-
- {Object.entries(logs).map(([type, lines], key) => ( ))} diff --git a/sites/shared/config/social.mjs b/sites/shared/config/social.mjs index 585eb9918b5..cf82252b633 100644 --- a/sites/shared/config/social.mjs +++ b/sites/shared/config/social.mjs @@ -7,4 +7,5 @@ export const social = { GitHub: 'https://github.com/freesewing', Reddit: 'https://www.reddit.com/r/freesewing/', Mastodon: 'https://freesewing.social/@freesewing', + Bluesky: 'https://bsky.app/profile/freesewing.org', } diff --git a/sites/shared/i18n/support/en.yaml b/sites/shared/i18n/support/en.yaml index 56fcd6145b2..de9c838295b 100644 --- a/sites/shared/i18n/support/en.yaml +++ b/sites/shared/i18n/support/en.yaml @@ -1,13 +1,44 @@ -support: Support +accountIssue: Account problem +accountIssueDesc: Do you have trouble with your FreeSewing account? +addImage: Add an image +bugReport: Report a bug +bugReportDesc: Is something broken, or not working as expected? +createSupportRequest: Create a support request communitySupport: Community Support communitySupport1: For the fastest response, head over to discord.freesewing.org and post your question in the Support channel. communitySupport2: The FreeSewing community is a helpful bunch, so there is a good chance they are able to help you. contributorSupport: Contributor Support contributorSupport1: If something is broken or you have found a bug, you can create an issue on GitHub. contributorSupport2: Issues are more likely to attract the attention of core contributors, but tend to take longer to get a response. +description: Description +descriptionDocs1: This is where you can describe the issue +design: Design +designDocs1: Pick the FreeSewing design this issue applies to +designIssue: Report an issue with a FreeSewing Design +designIssueDesc: Are you having trouble with a FreeSewing design or the pattern you are generating from it? +docsUpdate: Documentation update +docsUpdateDesc: Is there something to be improved about our documentation? +featureRequest: Feature request +featureRequestDesc: Is there something you would like to see happen or implemented? +howCanWeSupportYou: How can we support you? +howCanYouSupportFreeSewing: How can you support FreeSewing? maintainerSupport: Maintainer Support maintainerSupport1: If you are a FreeSewing patron, you can go straight to the top and contact Joost directly. maintainerSupport2: While Joost will treat requests from patrons with priority, he does also needs sleep. So keep that in mind, especially when you are in a different time zone. +other: Something else +otherDesc: Do you have something else you required assistance with? +patronSponsor: Patrons / Sponsorship +patronSponsorDesc: Do you have questions about FreeSewing patronship or (corporate) sponsorship? +question: Question +questionDesc: Do you have a general question to ask? +security: Security +securityDesc: Do you want to report a security issue or incident? +submitSupportRequest: Submit support request +support: Support +title: Title +titleDocs1: This is the title of the issue +titleDocs2: Best to keep it short and to the point +useGitHubInstead: Use GitHub instead whatIsDiscord: What is Discord? whatIsDiscord1: Discord is a free chat platform where communities can come together to chat discuss their interests. It also supports (group) voice and video calls. whatIsDiscord2: FreeSewing has its own Discord community (a server in Discord terminology) at diff --git a/sites/shared/prebuild/sitenav-org.mjs b/sites/shared/prebuild/sitenav-org.mjs index b28d386057e..8d0fe7e0282 100644 --- a/sites/shared/prebuild/sitenav-org.mjs +++ b/sites/shared/prebuild/sitenav-org.mjs @@ -116,6 +116,7 @@ export const extendSiteNav = async (siteNav, lang) => { t: 'Curated Measurement Sets', s: 'admin/cset', _: 1, + h: 1, }, }