diff --git a/packages/components/src/Workbench/SamplePattern/index.js b/packages/components/src/Workbench/SamplePattern/index.js
new file mode 100644
index 00000000000..c6c3420d3d7
--- /dev/null
+++ b/packages/components/src/Workbench/SamplePattern/index.js
@@ -0,0 +1,60 @@
+import React from "react";
+import PropTypes from "prop-types";
+import { defaultGist } from "@freesewing/utils";
+import Draft from "../../Draft";
+import SampleConfigurator from "../../SampleConfigurator";
+import svgattrPlugin from "@freesewing/plugin-svgattr";
+import { strings } from "@freesewing/i18n";
+import { FormattedMessage } from "react-intl";
+
+const SamplePattern = props => {
+ let pattern = new props.Pattern(props.gist.settings).use(svgattrPlugin, {
+ class: "freesewing draft"
+ });
+ try {
+ pattern.sample();
+ } catch (err) {
+ console.log(err);
+ }
+ return (
+
+
+
+
+
+
+ gist
+ {JSON.stringify(props.gist, null, 2)}
+
+
+
+
+ );
+};
+
+SamplePattern.propTypes = {
+ gist: PropTypes.object.isRequired,
+ updateGist: PropTypes.func.isRequired,
+ config: PropTypes.object.isRequired,
+ raiseEvent: PropTypes.func.isRequired,
+ Pattern: PropTypes.func.isRequired,
+ units: PropTypes.oneOf(["metric", "imperial"])
+};
+
+SamplePattern.defaultProps = {
+ units: "metric",
+ pointInfo: null
+};
+
+export default SamplePattern;
diff --git a/packages/components/src/Workbench/index.js b/packages/components/src/Workbench/index.js
index 8e6bfa35c49..5005bcaf82e 100644
--- a/packages/components/src/Workbench/index.js
+++ b/packages/components/src/Workbench/index.js
@@ -14,12 +14,13 @@ import LanguageIcon from "@material-ui/icons/Translate";
import DarkModeIcon from "@material-ui/icons/Brightness3";
import LanguageChooser from "./LanguageChooser";
import DraftPattern from "./DraftPattern";
+import SamplePattern from "./SamplePattern";
import Welcome from "./Welcome";
import Footer from "../Footer";
import Measurements from "./Measurements";
const Workbench = props => {
- const [display, setDisplay] = useState("welcome");
+ const [display, setDisplay] = useState(null);
const [pattern, setPattern] = useState(false);
const [theme, setTheme] = useState("light");
const [measurements, setMeasurements] = useState(null);
@@ -27,6 +28,7 @@ const Workbench = props => {
let m = getMeasurements();
setMeasurements(m);
props.updateGist(m, "settings", "measurements");
+ setDisplay(getDisplay());
}, []);
useEffect(() => {
if (props.from) props.importGist(props.from);
@@ -36,6 +38,11 @@ const Workbench = props => {
props.updateGist(props.language, "settings", "locale");
}, [props.language]);
+ const getDisplay = () => storage.get(props.config.name + "-display");
+ const saveDisplay = d => {
+ setDisplay(d);
+ storage.set(props.config.name + "-display", d);
+ };
const getMeasurements = () =>
storage.get(props.config.name + "-measurements");
const saveMeasurements = data => {
@@ -66,7 +73,7 @@ const Workbench = props => {
return false;
};
- const showLanguageChooser = () => setDisplay("language");
+ const showLanguageChooser = () => saveDisplay("language");
const updatePattern = p => {
setPattern(p);
store.set("pattern", p);
@@ -83,19 +90,19 @@ const Workbench = props => {
left: {
draft: {
type: "button",
- onClick: () => setDisplay("draft"),
+ onClick: () => saveDisplay("draft"),
text: "cfp.draftYourPattern",
active: display === "draft" ? true : false
},
sample: {
type: "button",
- onClick: () => setDisplay("sample"),
+ onClick: () => saveDisplay("sample"),
text: "cfp.testYourPattern",
active: display === "sample" ? true : false
},
measurements: {
type: "button",
- onClick: () => setDisplay("measurements"),
+ onClick: () => saveDisplay("measurements"),
text: "app.measurements",
active: display === "measurements" ? true : false
}
@@ -108,7 +115,7 @@ const Workbench = props => {
},
language: {
type: "button",
- onClick: () => setDisplay("languages"),
+ onClick: () => saveDisplay("languages"),
text:
,
title: "Languages",
active: display === "languages" ? true : false
@@ -128,12 +135,12 @@ const Workbench = props => {
main = (
);
break;
case "draft":
- if (measurementsMissing()) setDisplay("measurements");
+ if (measurementsMissing()) saveDisplay("measurements");
main = (
{
);
break;
case "sample":
- if (measurementsMissing()) setDisplay("measurements");
- main = Sample: TODO
;
+ if (measurementsMissing()) saveDisplay("measurements");
+ main = (
+
+ );
break;
case "measurements":
main = (
@@ -158,11 +175,12 @@ const Workbench = props => {
units={props.units}
updateMeasurement={updateMeasurement}
preloadMeasurements={preloadMeasurements}
+ language={props.language}
/>
);
break;
default:
- main = ;
+ main = ;
}
const themes = { dark, light };
@@ -175,7 +193,7 @@ const Workbench = props => {
}
>
{display !== "welcome" ? (
- setDisplay("welcome")} />
+ saveDisplay("welcome")} />
) : null}
{main}
{display !== "welcome" ? : null}
diff --git a/packages/css-theme/src/_elements.scss b/packages/css-theme/src/_elements.scss
index d37d5393f42..34f47fd70d1 100644
--- a/packages/css-theme/src/_elements.scss
+++ b/packages/css-theme/src/_elements.scss
@@ -1,2 +1,3 @@
@import "elements/a";
@import "elements/footer";
+@import "elements/ul";
diff --git a/packages/css-theme/src/components/_draft-configurator.scss b/packages/css-theme/src/components/_draft-configurator.scss
index 5d74abbe06f..c4e8d27f6f9 100644
--- a/packages/css-theme/src/components/_draft-configurator.scss
+++ b/packages/css-theme/src/components/_draft-configurator.scss
@@ -1,11 +1,10 @@
+ul.nav { padding-left: 0;}
ul.nav.l1 { overflow-x: hidden;}
-ul.nav.l1,
ul.nav.l2,
ul.nav.l3,
ul.nav.l4 {
margin: 0;
padding: 0;
- @include title-font;
}
ul.nav li {list-style-type: none;}
@@ -15,21 +14,17 @@ ul.nav h2,
ul.nav h3,
ul.nav h4,
ul.nav h5 {
- font-weight: normal;
display: block;
margin: 0;
- padding: 0.5rem 0.25rem;
+ padding: 0.5rem 0.25rem 0.5rem 1rem;
}
ul.nav h3:hover,
ul.nav h4:hover {
cursor: pointer;
background: $oc-gray-3;
}
-ul.nav h2 { font-size: 1.2rem; margin-left: 5px;}
-ul.nav h4 { font-size: 1rem; }
-ul.nav h5 { font-size: 1rem; padding-left: 1.5rem; font-weight: bold;}
+ul.nav h5 { padding-left: 1.5rem; }
ul.nav h3 {
- font-size: 1.1rem;
position: sticky;
top: 0;
background: $oc-gray-1;
diff --git a/packages/css-theme/src/elements/_ul.scss b/packages/css-theme/src/elements/_ul.scss
new file mode 100644
index 00000000000..88d338e89a1
--- /dev/null
+++ b/packages/css-theme/src/elements/_ul.scss
@@ -0,0 +1,24 @@
+ul.links {
+ padding-left: 1rem;
+ li {
+ list-style-type: none;
+ }
+ li:before {
+ content: "\00a0";
+ background: $oc-gray-5;
+ border-radius: 3.5px;
+ display: inline-block;
+ height: 7px;
+ width: 7px;
+ padding: 0;
+ margin: 0 0.5rem 0 0;
+ font-size: 9px;
+ transition: background 0.15s ease-in;
+ }
+ li.nodot:before {
+ content: none;
+ }
+ li:hover:before {
+ background: $fc-link-light;
+ }
+}
diff --git a/packages/i18n/src/locales/de/cfp.yaml b/packages/i18n/src/locales/de/cfp.yaml
index 9c2cc46d8dd..ca82db66a6b 100644
--- a/packages/i18n/src/locales/de/cfp.yaml
+++ b/packages/i18n/src/locales/de/cfp.yaml
@@ -18,3 +18,7 @@ youCan: Sie können
enterMeasurements: Geben Sie die Maße von Hand ein
preloadMeasurements: Laden Sie eine Reihe von Messungen vor
size: Größe
+noRequiredMeasurements: Dieses Muster hat keine erforderlichen Messungen.
+howtoAddMeasurements: Um Messungen anzufordern, fügen Sie sie dem measurements der Konfigurationsdatei des Musters hinzu.
+seeDocsAt: Dokumentation zu diesem Thema finden Sie unter
+
diff --git a/packages/i18n/src/locales/en/cfp.yaml b/packages/i18n/src/locales/en/cfp.yaml
index 6861a8bcd0c..38240770c53 100644
--- a/packages/i18n/src/locales/en/cfp.yaml
+++ b/packages/i18n/src/locales/en/cfp.yaml
@@ -17,3 +17,6 @@ youCan: You can
enterMeasurements: Enter measurements by hand
preloadMeasurements: Preload a set of measurements
size: Size
+noRequiredMeasurements: This pattern has no required measurements
+howtoAddMeasurements: To require measurements, add them to the measurements section of the pattern's configuration file.
+seeDocsAt: Documentation on this topic is available at
diff --git a/packages/i18n/src/locales/es/cfp.yaml b/packages/i18n/src/locales/es/cfp.yaml
index 437ea64555e..15bb363fb65 100644
--- a/packages/i18n/src/locales/es/cfp.yaml
+++ b/packages/i18n/src/locales/es/cfp.yaml
@@ -18,3 +18,6 @@ youCan: Usted puede
enterMeasurements: Introducir medidas a mano
preloadMeasurements: Precargar un conjunto de medidas
size: Tamaño
+noRequiredMeasurements: Este patrón no tiene medidas requeridas.
+howtoAddMeasurements: Para requerir mediciones, agréguelas a la sección de measurements del archivo de configuración del patrón.
+seeDocsAt: La documentación sobre este tema está disponible en
diff --git a/packages/i18n/src/locales/fr/cfp.yaml b/packages/i18n/src/locales/fr/cfp.yaml
index 946f006e7ef..b92f63479b3 100644
--- a/packages/i18n/src/locales/fr/cfp.yaml
+++ b/packages/i18n/src/locales/fr/cfp.yaml
@@ -18,3 +18,6 @@ youCan: Vous pouvez
enterMeasurements: Entrer les mesures à la main
preloadMeasurements: Précharger un ensemble de mesures
size: Taille
+noRequiredMeasurements: Ce patron n'a pas de mesures requises.
+howtoAddMeasurements: Pour exiger des mesures, ajoutez-les à la section measurements du fichier de configuration du patron.
+seeDocsAt: Documentation sur ce sujet est disponible à l'adresse
diff --git a/packages/i18n/src/locales/nl/cfp.yaml b/packages/i18n/src/locales/nl/cfp.yaml
index f7f4f0f72e9..cb86ed4a22b 100644
--- a/packages/i18n/src/locales/nl/cfp.yaml
+++ b/packages/i18n/src/locales/nl/cfp.yaml
@@ -15,6 +15,9 @@ testYourPattern: Test je patroon
renderInBrowser: Klik hieronder om uw patroon te renderen in de browser.
weWillReRender: Telkens u wijzigingen aanbrengt renderen we opnieuw.
youCan: Je kan
-enterMeasurements: Handmatig afmetingen invoeren
-preloadMeasurements: Een reeks afmetingen laden
+enterMeasurements: Handmatig lichaamsmaten invoeren
+preloadMeasurements: Een reeks lichaamsmaten laden
size: Maat
+noRequiredMeasurements: Dit patroon vereist geen lichaamsmaten.
+howtoAddMeasurements: Om lichaamsmaten te vereisen, voegt u ze toe aan de measurements sectie van het configuratiebestand van het patroon.
+seeDocsAt: Documentatie over dit onderwerp is beschikbaar op