chore: Fixed linter warnings
This commit is contained in:
parent
56df5d5287
commit
2234155052
70 changed files with 103 additions and 309 deletions
|
@ -1,10 +1,8 @@
|
|||
// This file is auto-generated.
|
||||
// Changes you make will be overwritten.
|
||||
import freesewing from '@freesewing/core'
|
||||
import chai from 'chai'
|
||||
import plugin from '../dist/index.mjs'
|
||||
import { sharedPluginTests } from '../../../tests/plugins/shared.mjs'
|
||||
|
||||
|
||||
// Run shared tests
|
||||
sharedPluginTests(plugin, freesewing, chai.expect)
|
||||
sharedPluginTests(plugin)
|
||||
|
|
|
@ -15,7 +15,6 @@ export default function (part) {
|
|||
utils,
|
||||
units,
|
||||
measurements,
|
||||
scale,
|
||||
} = part.shorthand()
|
||||
|
||||
// Lower back neck a bit
|
||||
|
|
|
@ -55,8 +55,6 @@
|
|||
"@freesewing/i18n": "latest",
|
||||
"axios": "0.18.0",
|
||||
"body-parser": "1.18.3",
|
||||
"buffer-to-stream": "^1.0.0",
|
||||
"buffer-to-uint8array": "^1.1.0",
|
||||
"chai": "^4.3.4",
|
||||
"chai-http": "^4.3.0",
|
||||
"chalk": "2.4.1",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import config from "../config";
|
||||
import { capitalize, log } from "../utils";
|
||||
import { capitalize } from "../utils";
|
||||
import sharp from 'sharp';
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
|
@ -72,7 +72,7 @@ const loadMarkdownFile = async (page, site, lang) => fs.promises.readFile(
|
|||
'utf-8'
|
||||
).then(async (md) => md
|
||||
? {
|
||||
...((await titleAndIntroFromLocalMarkdown(md, page))),
|
||||
...(await titleAndIntroFromLocalMarkdown(md, page)),
|
||||
sub: [
|
||||
'freesewing.dev/',
|
||||
page
|
||||
|
@ -122,7 +122,6 @@ const introAsLines = intro => {
|
|||
// Get title and intro
|
||||
const getMetaData = {
|
||||
dev: async (page) => {
|
||||
const data = {}
|
||||
const chunks = page.split('/')
|
||||
// Home page
|
||||
if (chunks.length === 1 && chunks[0] === '') return {
|
||||
|
|
|
@ -3,14 +3,6 @@ import config from '../config'
|
|||
import asBuffer from 'data-uri-to-buffer'
|
||||
import FormData from 'form-data'
|
||||
import fs from 'fs'
|
||||
import toFile from 'data-uri-to-file'
|
||||
import toStream from 'buffer-to-stream'
|
||||
import tou8 from 'buffer-to-uint8array'
|
||||
|
||||
const auth = {
|
||||
identifier: config.strapi.username,
|
||||
password: config.strapi.password,
|
||||
}
|
||||
|
||||
const getToken = async () => {
|
||||
let result
|
||||
|
@ -66,7 +58,6 @@ const uploadPicture = async (img, name, token) => {
|
|||
|
||||
// I hate you strapi, because this hack is the only way I can get your shitty upload to work
|
||||
const filename = `${config.strapi.tmp}/viaBackend.${extention}`
|
||||
const onDisk = await fs.promises.writeFile(filename, asBuffer(img))
|
||||
const file = fs.createReadStream(filename)
|
||||
form.append('files', file)
|
||||
form.append('fileInfo', JSON.stringify({
|
||||
|
|
|
@ -22,7 +22,7 @@ const loadTemplate = (type, format, language='en') => {
|
|||
}
|
||||
|
||||
const replace = (text, from, to) => {
|
||||
for (let id in from) text = text.split(from[id]).join(to[id] || from[id])
|
||||
for (const id in from) text = text.split(from[id]).join(to[id] || from[id])
|
||||
|
||||
return text
|
||||
}
|
||||
|
|
|
@ -61,7 +61,6 @@ export default function Pattern(config = { options: {} }) {
|
|||
scale: 1,
|
||||
layout: true,
|
||||
debug: true,
|
||||
scale: 1,
|
||||
options: {},
|
||||
absoluteOptions: {},
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
const draftPluginBanner = (part) => {
|
||||
const { points, Point, paths, Path, macro, options } = part.shorthand()
|
||||
const { points, Point, paths, Path, macro } = part.shorthand()
|
||||
|
||||
points.from = new Point(0, 0)
|
||||
points.to = new Point(320, 0)
|
||||
|
|
|
@ -22,6 +22,8 @@ const Header = ({ app, setSearch }) => {
|
|||
const [prevScrollPos, setPrevScrollPos] = useState(0)
|
||||
const [show, setShow] = useState(true)
|
||||
|
||||
useEffect(() => {
|
||||
if (typeof window !== 'undefined') {
|
||||
const handleScroll = () => {
|
||||
const curScrollPos = (typeof window !== 'undefined') ? window.pageYOffset : 0
|
||||
if (curScrollPos >= prevScrollPos) {
|
||||
|
@ -30,13 +32,10 @@ const Header = ({ app, setSearch }) => {
|
|||
else setShow(true)
|
||||
setPrevScrollPos(curScrollPos)
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
if (typeof window !== 'undefined') {
|
||||
window.addEventListener('scroll', handleScroll)
|
||||
return () => window.removeEventListener('scroll', handleScroll)
|
||||
}
|
||||
}, [prevScrollPos, show, handleScroll])
|
||||
}, [prevScrollPos, show])
|
||||
|
||||
|
||||
return (
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { useState, useRef, useEffect } from 'react'
|
||||
import { useState, useRef } from 'react'
|
||||
import Link from 'next/link'
|
||||
import { useRouter } from 'next/router'
|
||||
|
||||
|
@ -63,7 +63,7 @@ const Hit = props => (
|
|||
<Link href={props.hit.page}>
|
||||
<a href={props.hit.page} className="flex flex-row justify-between gap-2">
|
||||
<span className="text-base sm:text-xl font-bold leading-5">
|
||||
{props.hit?._highlightResult?.title
|
||||
{props.hit._highlightResult?.title
|
||||
? <CustomHighlight hit={props.hit} attribute='title' />
|
||||
: props.hit.title
|
||||
}
|
||||
|
@ -71,7 +71,7 @@ const Hit = props => (
|
|||
<span className="text-xs pt-0.5 sm:text-base sm:pt-1 font-bold uppercase">{props.hit.page.split('/')[1]}</span>
|
||||
</a>
|
||||
</Link>
|
||||
{props.hit?._snippetResult?.body && (
|
||||
{props.hit._snippetResult?.body && (
|
||||
<Link href={props.hit.page}>
|
||||
<a href={props.hit.page} className="text-sm sm:text-base block py-1">
|
||||
<CustomHighlight hit={props.hit} attribute='body' snippet />
|
||||
|
@ -89,14 +89,13 @@ const Hit = props => (
|
|||
)
|
||||
|
||||
// We use this for trapping ctrl-c
|
||||
let prev
|
||||
const handleInputKeydown = (evt, setSearch, setActive, active, router) => {
|
||||
if (evt.key === 'Escape') setSearch(false)
|
||||
if (evt.key === 'ArrowDown') setActive(act => act + 1)
|
||||
if (evt.key === 'ArrowUp') setActive(act => act - 1)
|
||||
if (evt.key === 'Enter') {
|
||||
// Trigger navigation
|
||||
if (evt?.target?.dataset?.links) {
|
||||
if (evt.target?.dataset?.links) {
|
||||
router.push(JSON.parse(evt.target.dataset.links)[active])
|
||||
setSearch(false)
|
||||
}
|
||||
|
@ -112,7 +111,7 @@ const SearchBox = props => {
|
|||
})
|
||||
if (input.current && props.active < 0) input.current.focus()
|
||||
|
||||
const { currentRefinement, isSearchStalled, refine, setSearch, setActive } = props
|
||||
const { currentRefinement, refine, setSearch, setActive } = props
|
||||
|
||||
return (
|
||||
<div className="py-8">
|
||||
|
|
|
@ -27,14 +27,11 @@ function useApp(full = true) {
|
|||
|
||||
// State methods
|
||||
const togglePrimaryMenu = () => setPrimaryMenu(!primaryMenu)
|
||||
const openPrimaryMenu = () => setPrimaryMenu(true)
|
||||
const closePrimaryMenu = () => setPrimaryMenu(false)
|
||||
|
||||
/*
|
||||
* Hot-update navigation method
|
||||
*/
|
||||
const updateNavigation = (path, content) => {
|
||||
const newNavigation = {...navigation}
|
||||
if (typeof path === 'string') {
|
||||
path = (path.slice(0,1) === '/')
|
||||
? path.slice(1).split('/')
|
||||
|
@ -43,28 +40,6 @@ function useApp(full = true) {
|
|||
setNavigation(set(navigation, path, content))
|
||||
}
|
||||
|
||||
/*
|
||||
* Translation method
|
||||
*
|
||||
* Note that freesewing.dev is only available in English
|
||||
* however we use certain shared code/components between
|
||||
* freesewing.dev and freesewing.org, so we still need
|
||||
* a translation method
|
||||
*/
|
||||
const t = (key=false, vals=false) => {
|
||||
if (!key) return ''
|
||||
if (!en.strings[key]) return key
|
||||
let val = en.strings[key]
|
||||
if (vals) {
|
||||
for (const [search, replace] of Object.entries(vals)) {
|
||||
val = val.replace(/search/g, replace)
|
||||
}
|
||||
}
|
||||
|
||||
return val
|
||||
}
|
||||
|
||||
|
||||
return {
|
||||
// Static vars
|
||||
site: 'dev',
|
||||
|
@ -90,9 +65,7 @@ function useApp(full = true) {
|
|||
|
||||
// State handlers
|
||||
togglePrimaryMenu,
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default useApp
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
import path from 'path'
|
||||
|
||||
const useMdx = (slug=false) => {
|
||||
if (!slug) null
|
||||
const file = ['markdown', 'dev', ...slug.split('/'), 'en.md'].join('/')
|
||||
const mdx = require(file)
|
||||
return <p>{file}</p>
|
||||
}
|
||||
|
||||
export default useMdx
|
|
@ -74,7 +74,7 @@ const PostPage = ({ post, author }) => {
|
|||
href="#author"
|
||||
className="text-secondary hover:text-secondary-focus"
|
||||
>
|
||||
{author?.displayname || 'FIXME: No displayname'}
|
||||
{author.displayname || 'FIXME: No displayname'}
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
|
@ -99,17 +99,6 @@ const PostPage = ({ post, author }) => {
|
|||
</article>
|
||||
</Page>
|
||||
)
|
||||
|
||||
return (
|
||||
<Page app={app} title='Blog' slug='blog'>
|
||||
<article className="mb-12">
|
||||
<div className="strapi prose lg:prose-lg mb-12 m-auto">
|
||||
<MdxWrapper mdx={props.post.mdx} />
|
||||
</div>
|
||||
</article>
|
||||
<Author author={author} type={props.type} t={props.t}/>
|
||||
</Page>
|
||||
)
|
||||
}
|
||||
|
||||
export const getStaticProps = async (props) => {
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
import Page from 'shared/components/wrappers/page.js'
|
||||
import useApp from 'site/hooks/useApp.js'
|
||||
import Logo from 'shared/components/logos/freesewing.js'
|
||||
import Head from 'next/head'
|
||||
import HelpUs from 'site/components/help-us.js'
|
||||
import Link from 'next/link'
|
||||
|
|
|
@ -22,6 +22,8 @@ const Header = ({ app, setSearch }) => {
|
|||
const [prevScrollPos, setPrevScrollPos] = useState(0)
|
||||
const [show, setShow] = useState(true)
|
||||
|
||||
useEffect(() => {
|
||||
if (typeof window !== 'undefined') {
|
||||
const handleScroll = () => {
|
||||
const curScrollPos = (typeof window !== 'undefined') ? window.pageYOffset : 0
|
||||
if (curScrollPos >= prevScrollPos) {
|
||||
|
@ -30,13 +32,10 @@ const Header = ({ app, setSearch }) => {
|
|||
else setShow(true)
|
||||
setPrevScrollPos(curScrollPos)
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
if (typeof window !== 'undefined') {
|
||||
window.addEventListener('scroll', handleScroll)
|
||||
return () => window.removeEventListener('scroll', handleScroll)
|
||||
}
|
||||
}, [prevScrollPos, show, handleScroll])
|
||||
}, [prevScrollPos, show])
|
||||
|
||||
|
||||
return (
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { useState, useRef, useEffect } from 'react'
|
||||
import { useState, useRef } from 'react'
|
||||
import Link from 'next/link'
|
||||
import { useRouter } from 'next/router'
|
||||
|
||||
|
@ -63,7 +63,7 @@ const Hit = props => (
|
|||
<Link href={props.hit.page}>
|
||||
<a href={props.hit.page} className="flex flex-row justify-between gap-2">
|
||||
<span className="text-base sm:text-xl font-bold leading-5">
|
||||
{props.hit?._highlightResult?.title
|
||||
{props.hit._highlightResult?.title
|
||||
? <CustomHighlight hit={props.hit} attribute='title' />
|
||||
: props.hit.title
|
||||
}
|
||||
|
@ -71,7 +71,7 @@ const Hit = props => (
|
|||
<span className="text-xs pt-0.5 sm:text-base sm:pt-1 font-bold uppercase">{props.hit.page.split('/')[1]}</span>
|
||||
</a>
|
||||
</Link>
|
||||
{props.hit?._snippetResult?.body && (
|
||||
{props.hit._snippetResult?.body && (
|
||||
<Link href={props.hit.page}>
|
||||
<a href={props.hit.page} className="text-sm sm:text-base block py-1">
|
||||
<CustomHighlight hit={props.hit} attribute='body' snippet />
|
||||
|
@ -89,14 +89,13 @@ const Hit = props => (
|
|||
)
|
||||
|
||||
// We use this for trapping ctrl-c
|
||||
let prev
|
||||
const handleInputKeydown = (evt, setSearch, setActive, active, router) => {
|
||||
if (evt.key === 'Escape') setSearch(false)
|
||||
if (evt.key === 'ArrowDown') setActive(act => act + 1)
|
||||
if (evt.key === 'ArrowUp') setActive(act => act - 1)
|
||||
if (evt.key === 'Enter') {
|
||||
// Trigger navigation
|
||||
if (evt?.target?.dataset?.links) {
|
||||
if (evt.target?.dataset?.links) {
|
||||
router.push(JSON.parse(evt.target.dataset.links)[active])
|
||||
setSearch(false)
|
||||
}
|
||||
|
@ -112,7 +111,7 @@ const SearchBox = props => {
|
|||
})
|
||||
if (input.current && props.active < 0) input.current.focus()
|
||||
|
||||
const { currentRefinement, isSearchStalled, refine, setSearch, setActive } = props
|
||||
const { currentRefinement, refine, setSearch, setActive } = props
|
||||
|
||||
return (
|
||||
<div className="py-8">
|
||||
|
|
|
@ -27,14 +27,11 @@ function useApp(full = true) {
|
|||
|
||||
// State methods
|
||||
const togglePrimaryMenu = () => setPrimaryMenu(!primaryMenu)
|
||||
const openPrimaryMenu = () => setPrimaryMenu(true)
|
||||
const closePrimaryMenu = () => setPrimaryMenu(false)
|
||||
|
||||
/*
|
||||
* Hot-update navigation method
|
||||
*/
|
||||
const updateNavigation = (path, content) => {
|
||||
const newNavigation = {...navigation}
|
||||
if (typeof path === 'string') {
|
||||
path = (path.slice(0,1) === '/')
|
||||
? path.slice(1).split('/')
|
||||
|
@ -43,28 +40,6 @@ function useApp(full = true) {
|
|||
setNavigation(set(navigation, path, content))
|
||||
}
|
||||
|
||||
/*
|
||||
* Translation method
|
||||
*
|
||||
* Note that freesewing.dev is only available in English
|
||||
* however we use certain shared code/components between
|
||||
* freesewing.dev and freesewing.org, so we still need
|
||||
* a translation method
|
||||
*/
|
||||
const t = (key=false, vals=false) => {
|
||||
if (!key) return ''
|
||||
if (!en.strings[key]) return key
|
||||
let val = en.strings[key]
|
||||
if (vals) {
|
||||
for (const [search, replace] of Object.entries(vals)) {
|
||||
val = val.replace(/search/g, replace)
|
||||
}
|
||||
}
|
||||
|
||||
return val
|
||||
}
|
||||
|
||||
|
||||
return {
|
||||
// Static vars
|
||||
site: 'dev',
|
||||
|
@ -90,9 +65,7 @@ function useApp(full = true) {
|
|||
|
||||
// State handlers
|
||||
togglePrimaryMenu,
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default useApp
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
import path from 'path'
|
||||
|
||||
const useMdx = (slug=false) => {
|
||||
if (!slug) null
|
||||
const file = ['markdown', 'dev', ...slug.split('/'), 'en.md'].join('/')
|
||||
const mdx = require(file)
|
||||
return <p>{file}</p>
|
||||
}
|
||||
|
||||
export default useMdx
|
|
@ -33,7 +33,7 @@ const MdxPage = props => {
|
|||
<meta property="og:image:height" content="630" />
|
||||
<meta property="og:url" content={`https://freesewing.org/${props.page.slug}`} key='url' />
|
||||
<meta property="og:locale" content="en_US" key='locale' />
|
||||
<meta property="og:site_name" content="freesewing.org key='site' />
|
||||
<meta property="og:site_name" content="freesewing.org" key='site' />
|
||||
</Head>
|
||||
<MdxWrapper mdx={props.mdx} app={app}/>
|
||||
<HelpUs mdx slug={`/${props.page.slug}`} />
|
||||
|
|
|
@ -74,7 +74,7 @@ const PostPage = ({ post, author }) => {
|
|||
href="#author"
|
||||
className="text-secondary hover:text-secondary-focus"
|
||||
>
|
||||
{author?.displayname || 'FIXME: No displayname'}
|
||||
{author.displayname || 'FIXME: No displayname'}
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
|
@ -99,17 +99,6 @@ const PostPage = ({ post, author }) => {
|
|||
</article>
|
||||
</Page>
|
||||
)
|
||||
|
||||
return (
|
||||
<Page app={app} title='Blog' slug='blog'>
|
||||
<article className="mb-12">
|
||||
<div className="strapi prose lg:prose-lg mb-12 m-auto">
|
||||
<MdxWrapper mdx={props.post.mdx} />
|
||||
</div>
|
||||
</article>
|
||||
<Author author={author} type={props.type} t={props.t}/>
|
||||
</Page>
|
||||
)
|
||||
}
|
||||
|
||||
export const getStaticProps = async (props) => {
|
||||
|
|
|
@ -1,9 +1,7 @@
|
|||
import Page from 'shared/components/wrappers/page.js'
|
||||
import useApp from 'site/hooks/useApp.js'
|
||||
import Logo from 'shared/components/logos/freesewing.js'
|
||||
import Head from 'next/head'
|
||||
import HelpUs from 'site/components/help-us.js'
|
||||
import Link from 'next/link'
|
||||
|
||||
const HomePage = (props) => {
|
||||
const app = useApp()
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import ReactDOMServer from 'react-dom/server'
|
||||
import { useState, useEffect } from 'react'
|
||||
import { useState } from 'react'
|
||||
import CopyIcon from 'shared/components/icons/copy.js'
|
||||
import {CopyToClipboard} from 'react-copy-to-clipboard'
|
||||
|
||||
|
|
|
@ -5,4 +5,4 @@ const Heart = () => (
|
|||
</svg>
|
||||
)
|
||||
|
||||
export const Heart
|
||||
export default Heart
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import React from 'react'
|
||||
import { useState } from 'react'
|
||||
import { useRouter } from 'next/router'
|
||||
import Link from 'next/link'
|
||||
|
@ -10,8 +11,6 @@ import Header from 'site/components/header'
|
|||
import Footer from 'site/components/footer'
|
||||
import Search from 'site/components/search'
|
||||
|
||||
const iconSize= 48
|
||||
|
||||
const PageTitle = ({ app, slug, title }) => {
|
||||
if (title) return <h1>{title}</h1>
|
||||
if (slug) return <h1>{get(app.navigation, slug.split('/')).__title}</h1>
|
||||
|
@ -39,7 +38,7 @@ const Breadcrumbs = ({ app, slug=false, title }) => {
|
|||
</Link>
|
||||
</li>
|
||||
{crumbs.map(crumb => (
|
||||
<>
|
||||
<React.Fragment key={crumb[1]}>
|
||||
<li className="text-base-content">»</li>
|
||||
<li>
|
||||
{crumb[2]
|
||||
|
@ -53,7 +52,7 @@ const Breadcrumbs = ({ app, slug=false, title }) => {
|
|||
: <span className="text-base-content">{crumb[0]}</span>
|
||||
}
|
||||
</li>
|
||||
</>
|
||||
</React.Fragment>
|
||||
))}
|
||||
</ul>
|
||||
)
|
||||
|
@ -71,13 +70,11 @@ const DefaultLayout = ({ app, title=false, children=[], search, setSearch}) => {
|
|||
}
|
||||
|
||||
const router = useRouter()
|
||||
router?.events?.on('routeChangeStart', startNavigation)
|
||||
router?.events?.on('routeChangeComplete', () => app.stopLoading())
|
||||
router.events?.on('routeChangeStart', startNavigation)
|
||||
router.events?.on('routeChangeComplete', () => app.stopLoading())
|
||||
const slug = router.asPath.slice(1)
|
||||
const [leftNav, setLeftNav] = useState(false)
|
||||
|
||||
const toggleLeftNav = () => setLeftNav(!leftNav)
|
||||
|
||||
return (
|
||||
<div className={`
|
||||
flex flex-col justify-between
|
||||
|
|
|
@ -31,11 +31,11 @@ const fill = {
|
|||
hax0r: (
|
||||
<linearGradient id="hax0r" x1="0%" y1="0%" x2="50%" y2="100%">
|
||||
{[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20].map( i => (
|
||||
<>
|
||||
<React.Fragment key={i}>
|
||||
<stop key={i} offset={`${i*5}%`} stopColor={colors.lime[900]} stopOpacity="1.0" />
|
||||
<stop key={i} offset={`${i*5+1}%`} stopColor={colors.lime[800]} stopOpacity="1.0" />
|
||||
<stop key={i} offset={`${i*5+2}%`} stopColor={colors.lime[900]} stopOpacity="1.0" />
|
||||
</>
|
||||
</React.Fragment>
|
||||
))}
|
||||
</linearGradient>
|
||||
),
|
||||
|
@ -43,10 +43,10 @@ const fill = {
|
|||
<linearGradient id="lgbtq" x1="0%" y1="0%" x2="0%" y2="100%">
|
||||
{['red', 'orange', 'yellow', 'green', 'blue', 'violet'].map(c => {
|
||||
let next = step + 100/6
|
||||
const stop = <>
|
||||
const stop = <React.Fragment key={c}>
|
||||
<stop offset={`${step}%`} stopColor={colors[c][500]} stopOpacity="1.0" />
|
||||
<stop offset={`${next}%`} stopColor={colors[c][500]} stopOpacity="1.0" />
|
||||
</>
|
||||
</React.Fragment>
|
||||
step = next
|
||||
return stop
|
||||
})}
|
||||
|
@ -81,7 +81,7 @@ const Logo = ({ size=false, className='stroke-0', theme='light', fill=false, str
|
|||
return (
|
||||
<svg {...svgProps}>
|
||||
<defs>
|
||||
{fill[theme]}
|
||||
{fill && fill[theme]}
|
||||
<path id="react-logo" d={path} />
|
||||
</defs>
|
||||
<use xlinkHref="#react-logo" fill="none" stroke={stroke || strokes[theme]} strokeWidth="0.5"/>
|
||||
|
|
|
@ -44,7 +44,6 @@ const Pattern = props => {
|
|||
children=null,
|
||||
options = {},
|
||||
measurements = { head: 390},
|
||||
settings,
|
||||
part = '',
|
||||
sample,
|
||||
svgOnly=false,
|
||||
|
@ -85,10 +84,10 @@ const Pattern = props => {
|
|||
}
|
||||
|
||||
/* Set up settings object */
|
||||
settings = {
|
||||
const settings = {
|
||||
options: { ...options },
|
||||
measurements: { ...measurements },
|
||||
...settings
|
||||
...props.settings
|
||||
}
|
||||
// Support for options_ prefix
|
||||
for (const [key, val] of Object.entries(props)) {
|
||||
|
|
|
@ -8,8 +8,9 @@ const names = {
|
|||
|
||||
const Highlight = (props) => {
|
||||
|
||||
const { children=[], className='language-js' } = props
|
||||
const language = props.children.props.className.split('-').pop()
|
||||
const language = props.children
|
||||
? props.children.props.className.split('-').pop()
|
||||
: 'txt'
|
||||
|
||||
return (
|
||||
<div className="hljs my-4">
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
import get from 'lodash.get'
|
||||
import orderBy from 'lodash.orderby'
|
||||
import Link from 'next/link'
|
||||
import Right from 'shared/components/icons/right.js'
|
||||
import Left from 'shared/components/icons/left.js'
|
||||
|
||||
// helper method to order nav entries
|
||||
const order = obj => orderBy(obj, ['__order', '__title'], ['asc', 'asc'])
|
||||
|
|
|
@ -1,10 +1,7 @@
|
|||
import get from 'lodash.get'
|
||||
import Link from 'next/link'
|
||||
import orderBy from 'lodash.orderby'
|
||||
import Logo from 'shared/components/logos/freesewing.js'
|
||||
import ThemePicker from 'shared/components/theme-picker.js'
|
||||
import RssIcon from 'shared/components/icons/rss.js'
|
||||
import ThemeIcon from 'shared/components/icons/theme.js'
|
||||
import TutorialIcon from 'shared/components/icons/tutorial.js'
|
||||
import GuideIcon from 'shared/components/icons/guide.js'
|
||||
import HelpIcon from 'shared/components/icons/help.js'
|
||||
|
@ -102,7 +99,7 @@ const SubLevel = ({ nodes={}, active }) => (
|
|||
{child.__slug === active ? <>•</> : <>°</>}
|
||||
</span>
|
||||
<span className={child.__slug === active ? 'font-bold' : ''}>
|
||||
{ child?.__linktitle || child.__title }
|
||||
{ child.__linktitle || child.__title }
|
||||
</span>
|
||||
</a>
|
||||
</Link>
|
||||
|
|
|
@ -10,19 +10,19 @@ const colors = {
|
|||
}
|
||||
|
||||
let forceTailwind = <p className="border-accent bg-accent" />
|
||||
forceTailwind = <p className="text-accent" />
|
||||
forceTailwind = <p className="border-secondary bg-secondary" />
|
||||
forceTailwind = <p className="text-secondary" />
|
||||
forceTailwind = <p className="border-error bg-error" />
|
||||
forceTailwind = <p className="text-error" />
|
||||
forceTailwind = <p className="border-warning bg-warning" />
|
||||
forceTailwind = <p className="text-warning" />
|
||||
forceTailwind = <p className="border-info bg-info" />
|
||||
forceTailwind = <p className="text-info" />
|
||||
forceTailwind = <p className="border-success bg-success" />
|
||||
forceTailwind = <p className="text-success" />
|
||||
forceTailwind = <p className="border-primary bg-primary" />
|
||||
forceTailwind = <p className="text-primary" />
|
||||
forceTailwind += <p className="text-accent" />
|
||||
forceTailwind += <p className="border-secondary bg-secondary" />
|
||||
forceTailwind += <p className="text-secondary" />
|
||||
forceTailwind += <p className="border-error bg-error" />
|
||||
forceTailwind += <p className="text-error" />
|
||||
forceTailwind += <p className="border-warning bg-warning" />
|
||||
forceTailwind += <p className="text-warning" />
|
||||
forceTailwind += <p className="border-info bg-info" />
|
||||
forceTailwind += <p className="text-info" />
|
||||
forceTailwind += <p className="border-success bg-success" />
|
||||
forceTailwind += <p className="text-success" />
|
||||
forceTailwind += <p className="border-primary bg-primary" />
|
||||
forceTailwind += <p className="text-primary" />
|
||||
|
||||
const Popout = (props) => {
|
||||
let type = 'none'
|
||||
|
|
|
@ -22,8 +22,7 @@
|
|||
"remark-extract-frontmatter": "^3.2.0",
|
||||
"remark-frontmatter": "^4.0.1",
|
||||
"to-vfile": "^7.2.2",
|
||||
"unist-util-visit": "^4.1.0",
|
||||
"vfile-reporter": "^7.0.3"
|
||||
"unist-util-visit": "^4.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"autoprefixer": "^10.4.0",
|
||||
|
|
|
@ -1,14 +1,12 @@
|
|||
import path from 'path'
|
||||
import fs from 'fs'
|
||||
import { languages, strapiHost } from '../config/freesewing.mjs'
|
||||
import { languages } from '../config/freesewing.mjs'
|
||||
import rdir from 'recursive-readdir'
|
||||
import { unified } from 'unified'
|
||||
import remarkParser from 'remark-parse'
|
||||
import remarkCompiler from 'remark-stringify'
|
||||
import remarkFrontmatter from 'remark-frontmatter'
|
||||
import remarkFrontmatterExtractor from 'remark-extract-frontmatter'
|
||||
import remarkMdx from 'remark-mdx'
|
||||
import vfileReporter from 'vfile-reporter'
|
||||
import { readSync } from 'to-vfile'
|
||||
import yaml from 'js-yaml'
|
||||
|
||||
|
@ -106,14 +104,11 @@ export const prebuildMdx = async(site) => {
|
|||
const slug = fileToSlug(file, site, lang)
|
||||
if (slug) {
|
||||
const meta = await mdxMetaInfo(file)
|
||||
if (meta?.data?.title && meta?.data?.title) {
|
||||
if (meta.data?.title && meta.data?.title) {
|
||||
pages[lang][slug] = {
|
||||
title: meta.data.title,
|
||||
order: meta.data.order
|
||||
? meta.data.order+meta.data.title
|
||||
: meta.data.title,
|
||||
slug,
|
||||
order: meta?.data?.order
|
||||
order: meta.data?.order
|
||||
? `${meta.data.order}${meta.data.title}`
|
||||
: meta.data.title
|
||||
}
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import path from 'path'
|
||||
import fs from 'fs'
|
||||
import set from 'lodash.set'
|
||||
import get from 'lodash.get'
|
||||
|
||||
// Some arbitrary future time
|
||||
const future = new Date('10-12-2026').getTime()
|
||||
|
@ -51,4 +50,5 @@ export const prebuildNavigation = (mdxPages, strapiPosts, site) => {
|
|||
`export default ${JSON.stringify(nav, null ,2)}`
|
||||
)
|
||||
|
||||
return true
|
||||
}
|
||||
|
|
|
@ -91,7 +91,7 @@ export const prebuildStrapi = async(site) => {
|
|||
date: post.date,
|
||||
slug: post.slug,
|
||||
author: post.author,
|
||||
img: post?.image?.formats?.large?.url || 'https://posts.freesewing.org/uploads/logo_8401e711e4.png'
|
||||
img: post.image?.formats?.large?.url || 'https://posts.freesewing.org/uploads/logo_8401e711e4.png'
|
||||
})), null, 2)}`
|
||||
)
|
||||
for (const [slug, post] of Object.entries(posts[lang][type])) {
|
||||
|
|
|
@ -8,7 +8,6 @@ import { compile } from '@mdx-js/mdx'
|
|||
// Remark plugins we want to use
|
||||
import remarkFrontmatter from 'remark-frontmatter'
|
||||
import remarkGfm from 'remark-gfm'
|
||||
import remarkCopyLinkedFiles from 'remark-copy-linked-files'
|
||||
// Rehype plugins we want to use
|
||||
import rehypeHighlight from 'rehype-highlight'
|
||||
|
||||
|
|
|
@ -1,9 +1,7 @@
|
|||
/*
|
||||
* This tries to fix as many Strapi things as possible
|
||||
*/
|
||||
import axios from 'axios'
|
||||
import { languages as allLanguages, strapiHost } from '../config/freesewing.mjs'
|
||||
import {getPosts } from '../prebuild/strapi.mjs'
|
||||
import { languages as allLanguages } from '../config/freesewing.mjs'
|
||||
|
||||
// What types of content to load
|
||||
const content = {
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
const colors = require('tailwindcss/colors')
|
||||
const gray = colors.neutral
|
||||
|
||||
module.exports = {
|
||||
'fontFamily': '-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif',
|
||||
|
|
|
@ -74,14 +74,6 @@ module.exports = {
|
|||
'--pattern-mark': colors.blue['500'],
|
||||
'--pattern-contrast': colors.pink['500'],
|
||||
'--pattern-note': colors.violet['500'],
|
||||
'--pattern-fabric': colors.neutral['700'],
|
||||
'--pattern-lining': colors.emerald['500'],
|
||||
'--pattern-interfacing': colors.neutral['400'],
|
||||
'--pattern-canvas': colors.amber['600'],
|
||||
'--pattern-various': colors.red['500'],
|
||||
'--pattern-mark': colors.blue['500'],
|
||||
'--pattern-contrast': colors.pink['500'],
|
||||
'--pattern-note': colors.violet['500'],
|
||||
|
||||
'--pattern-dev-0': colors.red['500'],
|
||||
'--pattern-dev-1': colors.green['500'],
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
// This file is auto-generated.
|
||||
// Changes you make will be overwritten.
|
||||
import freesewing from '@freesewing/core'
|
||||
import chai from 'chai'
|
||||
import plugin from '../dist/index.mjs'
|
||||
import { sharedPluginTests } from '../../../tests/plugins/shared.mjs'
|
||||
|
||||
|
||||
// Run shared tests
|
||||
sharedPluginTests(plugin, freesewing, chai.expect)
|
||||
sharedPluginTests(plugin)
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
// This file is auto-generated.
|
||||
// Changes you make will be overwritten.
|
||||
import freesewing from '@freesewing/core'
|
||||
import chai from 'chai'
|
||||
import plugin from '../dist/index.mjs'
|
||||
import { sharedPluginTests } from '../../../tests/plugins/shared.mjs'
|
||||
|
||||
|
||||
// Run shared tests
|
||||
sharedPluginTests(plugin, freesewing, chai.expect)
|
||||
sharedPluginTests(plugin)
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
// This file is auto-generated.
|
||||
// Changes you make will be overwritten.
|
||||
import freesewing from '@freesewing/core'
|
||||
import chai from 'chai'
|
||||
import plugin from '../dist/index.mjs'
|
||||
import { sharedPluginTests } from '../../../tests/plugins/shared.mjs'
|
||||
|
||||
|
||||
// Run shared tests
|
||||
sharedPluginTests(plugin, freesewing, chai.expect)
|
||||
sharedPluginTests(plugin)
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
// This file is auto-generated.
|
||||
// Changes you make will be overwritten.
|
||||
import freesewing from '@freesewing/core'
|
||||
import chai from 'chai'
|
||||
import plugin from '../dist/index.mjs'
|
||||
import { sharedPluginTests } from '../../../tests/plugins/shared.mjs'
|
||||
|
||||
|
||||
// Run shared tests
|
||||
sharedPluginTests(plugin, freesewing, chai.expect)
|
||||
sharedPluginTests(plugin)
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
// This file is auto-generated.
|
||||
// Changes you make will be overwritten.
|
||||
import freesewing from '@freesewing/core'
|
||||
import chai from 'chai'
|
||||
import plugin from '../dist/index.mjs'
|
||||
import { sharedPluginTests } from '../../../tests/plugins/shared.mjs'
|
||||
|
||||
|
||||
// Run shared tests
|
||||
sharedPluginTests(plugin, freesewing, chai.expect)
|
||||
sharedPluginTests(plugin)
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
// This file is auto-generated.
|
||||
// Changes you make will be overwritten.
|
||||
import freesewing from '@freesewing/core'
|
||||
import chai from 'chai'
|
||||
import plugin from '../dist/index.mjs'
|
||||
import { sharedPluginTests } from '../../../tests/plugins/shared.mjs'
|
||||
|
||||
|
||||
// Run shared tests
|
||||
sharedPluginTests(plugin, freesewing, chai.expect)
|
||||
sharedPluginTests(plugin)
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
// This file is auto-generated.
|
||||
// Changes you make will be overwritten.
|
||||
import freesewing from '@freesewing/core'
|
||||
import chai from 'chai'
|
||||
import plugin from '../dist/index.mjs'
|
||||
import { sharedPluginTests } from '../../../tests/plugins/shared.mjs'
|
||||
|
||||
|
||||
// Run shared tests
|
||||
sharedPluginTests(plugin, freesewing, chai.expect)
|
||||
sharedPluginTests(plugin)
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
// This file is auto-generated.
|
||||
// Changes you make will be overwritten.
|
||||
import freesewing from '@freesewing/core'
|
||||
import chai from 'chai'
|
||||
import plugin from '../dist/index.mjs'
|
||||
import { sharedPluginTests } from '../../../tests/plugins/shared.mjs'
|
||||
|
||||
|
||||
// Run shared tests
|
||||
sharedPluginTests(plugin, freesewing, chai.expect)
|
||||
sharedPluginTests(plugin)
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
// This file is auto-generated.
|
||||
// Changes you make will be overwritten.
|
||||
import freesewing from '@freesewing/core'
|
||||
import chai from 'chai'
|
||||
import plugin from '../dist/index.mjs'
|
||||
import { sharedPluginTests } from '../../../tests/plugins/shared.mjs'
|
||||
|
||||
|
||||
// Run shared tests
|
||||
sharedPluginTests(plugin, freesewing, chai.expect)
|
||||
sharedPluginTests(plugin)
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
// This file is auto-generated.
|
||||
// Changes you make will be overwritten.
|
||||
import freesewing from '@freesewing/core'
|
||||
import chai from 'chai'
|
||||
import plugin from '../dist/index.mjs'
|
||||
import { sharedPluginTests } from '../../../tests/plugins/shared.mjs'
|
||||
|
||||
|
||||
// Run shared tests
|
||||
sharedPluginTests(plugin, freesewing, chai.expect)
|
||||
sharedPluginTests(plugin)
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
// This file is auto-generated.
|
||||
// Changes you make will be overwritten.
|
||||
import freesewing from '@freesewing/core'
|
||||
import chai from 'chai'
|
||||
import plugin from '../dist/index.mjs'
|
||||
import { sharedPluginTests } from '../../../tests/plugins/shared.mjs'
|
||||
|
||||
|
||||
// Run shared tests
|
||||
sharedPluginTests(plugin, freesewing, chai.expect)
|
||||
sharedPluginTests(plugin)
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
// This file is auto-generated.
|
||||
// Changes you make will be overwritten.
|
||||
import freesewing from '@freesewing/core'
|
||||
import chai from 'chai'
|
||||
import plugin from '../dist/index.mjs'
|
||||
import { sharedPluginTests } from '../../../tests/plugins/shared.mjs'
|
||||
|
||||
|
||||
// Run shared tests
|
||||
sharedPluginTests(plugin, freesewing, chai.expect)
|
||||
sharedPluginTests(plugin)
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
// This file is auto-generated.
|
||||
// Changes you make will be overwritten.
|
||||
import freesewing from '@freesewing/core'
|
||||
import chai from 'chai'
|
||||
import plugin from '../dist/index.mjs'
|
||||
import { sharedPluginTests } from '../../../tests/plugins/shared.mjs'
|
||||
|
||||
|
||||
// Run shared tests
|
||||
sharedPluginTests(plugin, freesewing, chai.expect)
|
||||
sharedPluginTests(plugin)
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
// This file is auto-generated.
|
||||
// Changes you make will be overwritten.
|
||||
import freesewing from '@freesewing/core'
|
||||
import chai from 'chai'
|
||||
import plugin from '../dist/index.mjs'
|
||||
import { sharedPluginTests } from '../../../tests/plugins/shared.mjs'
|
||||
|
||||
|
||||
// Run shared tests
|
||||
sharedPluginTests(plugin, freesewing, chai.expect)
|
||||
sharedPluginTests(plugin)
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
// This file is auto-generated.
|
||||
// Changes you make will be overwritten.
|
||||
import freesewing from '@freesewing/core'
|
||||
import chai from 'chai'
|
||||
import plugin from '../dist/index.mjs'
|
||||
import { sharedPluginTests } from '../../../tests/plugins/shared.mjs'
|
||||
|
||||
|
||||
// Run shared tests
|
||||
sharedPluginTests(plugin, freesewing, chai.expect)
|
||||
sharedPluginTests(plugin)
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
// This file is auto-generated.
|
||||
// Changes you make will be overwritten.
|
||||
import freesewing from '@freesewing/core'
|
||||
import chai from 'chai'
|
||||
import plugin from '../dist/index.mjs'
|
||||
import { sharedPluginTests } from '../../../tests/plugins/shared.mjs'
|
||||
|
||||
|
||||
// Run shared tests
|
||||
sharedPluginTests(plugin, freesewing, chai.expect)
|
||||
sharedPluginTests(plugin)
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
// This file is auto-generated.
|
||||
// Changes you make will be overwritten.
|
||||
import freesewing from '@freesewing/core'
|
||||
import chai from 'chai'
|
||||
import plugin from '../dist/index.mjs'
|
||||
import { sharedPluginTests } from '../../../tests/plugins/shared.mjs'
|
||||
|
||||
|
||||
// Run shared tests
|
||||
sharedPluginTests(plugin, freesewing, chai.expect)
|
||||
sharedPluginTests(plugin)
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
// This file is auto-generated.
|
||||
// Changes you make will be overwritten.
|
||||
import freesewing from '@freesewing/core'
|
||||
import chai from 'chai'
|
||||
import plugin from '../dist/index.mjs'
|
||||
import { sharedPluginTests } from '../../../tests/plugins/shared.mjs'
|
||||
|
||||
|
||||
// Run shared tests
|
||||
sharedPluginTests(plugin, freesewing, chai.expect)
|
||||
sharedPluginTests(plugin)
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
// This file is auto-generated.
|
||||
// Changes you make will be overwritten.
|
||||
import freesewing from '@freesewing/core'
|
||||
import chai from 'chai'
|
||||
import plugin from '../dist/index.mjs'
|
||||
import { sharedPluginTests } from '../../../tests/plugins/shared.mjs'
|
||||
|
||||
|
||||
// Run shared tests
|
||||
sharedPluginTests(plugin, freesewing, chai.expect)
|
||||
sharedPluginTests(plugin)
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
// This file is auto-generated.
|
||||
// Changes you make will be overwritten.
|
||||
import freesewing from '@freesewing/core'
|
||||
import chai from 'chai'
|
||||
import plugin from '../dist/index.mjs'
|
||||
import { sharedPluginTests } from '../../../tests/plugins/shared.mjs'
|
||||
|
||||
|
||||
// Run shared tests
|
||||
sharedPluginTests(plugin, freesewing, chai.expect)
|
||||
sharedPluginTests(plugin)
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
// This file is auto-generated.
|
||||
// Changes you make will be overwritten.
|
||||
import freesewing from '@freesewing/core'
|
||||
import chai from 'chai'
|
||||
import plugin from '../dist/index.mjs'
|
||||
import { sharedPluginTests } from '../../../tests/plugins/shared.mjs'
|
||||
|
||||
|
||||
// Run shared tests
|
||||
sharedPluginTests(plugin, freesewing, chai.expect)
|
||||
sharedPluginTests(plugin)
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
// This file is auto-generated.
|
||||
// Changes you make will be overwritten.
|
||||
import freesewing from '@freesewing/core'
|
||||
import chai from 'chai'
|
||||
import plugin from '../dist/index.mjs'
|
||||
import { sharedPluginTests } from '../../../tests/plugins/shared.mjs'
|
||||
|
||||
|
||||
// Run shared tests
|
||||
sharedPluginTests(plugin, freesewing, chai.expect)
|
||||
sharedPluginTests(plugin)
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import { version, name } from '../package.json'
|
||||
import validate from './validate'
|
||||
|
||||
const err = 'FIXME: plugin-validate is not updated for recent core versions'
|
||||
export default {
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
// This file is auto-generated.
|
||||
// Changes you make will be overwritten.
|
||||
import freesewing from '@freesewing/core'
|
||||
import chai from 'chai'
|
||||
import plugin from '../dist/index.mjs'
|
||||
import { sharedPluginTests } from '../../../tests/plugins/shared.mjs'
|
||||
|
||||
|
||||
// Run shared tests
|
||||
sharedPluginTests(plugin, freesewing, chai.expect)
|
||||
sharedPluginTests(plugin)
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
// This file is auto-generated.
|
||||
// Changes you make will be overwritten.
|
||||
import freesewing from '@freesewing/core'
|
||||
import chai from 'chai'
|
||||
import plugin from '../dist/index.mjs'
|
||||
import { sharedPluginTests } from '../../../tests/plugins/shared.mjs'
|
||||
|
||||
|
||||
// Run shared tests
|
||||
sharedPluginTests(plugin, freesewing, chai.expect)
|
||||
sharedPluginTests(plugin)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
const draftDimension = (part) => {
|
||||
const { points, Point, paths, Path, snippets, Snippet, options, macro } = part.shorthand()
|
||||
const { points, Point, options, macro } = part.shorthand()
|
||||
|
||||
if (['gore', 'all'].indexOf(options.plugin) !== -1) {
|
||||
points.start = new Point(10, 10)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
const draftI18n = (part) => {
|
||||
const { points, Point, paths, Path, options, macro, settings } = part.shorthand()
|
||||
const { points, Point, paths, Path, options } = part.shorthand()
|
||||
|
||||
if (['i18n', 'all'].indexOf(options.plugin) !== -1) {
|
||||
points.a = new Point(0, 0).attr('data-text', 'cutTwoStripsToFinishTheArmholes')
|
||||
|
|
|
@ -1,12 +1,3 @@
|
|||
const addThese = [
|
||||
'button',
|
||||
'buttonhole',
|
||||
'buttonhole-start',
|
||||
'buttonhole-end',
|
||||
'snap-stud',
|
||||
'snap-socket',
|
||||
]
|
||||
|
||||
const draftButtons = (part) => {
|
||||
const { points, Point, paths, Path, snippets, Snippet, options } = part.shorthand()
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
const draftScalebox = (part) => {
|
||||
const { Point, points, Path, paths, macro, options } = part.shorthand()
|
||||
const { Point, points, macro, options } = part.shorthand()
|
||||
|
||||
if (['scalebox', 'all'].indexOf(options.plugin) !== -1) {
|
||||
points.a = new Point(0, 0)
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
export default function (part, demo = false) {
|
||||
const { Point, Path, points, paths, store, options } = part.shorthand()
|
||||
const { Point, points, store, options } = part.shorthand()
|
||||
|
||||
if (options.only === 'circles' || demo) {
|
||||
let y = store.get('y')
|
||||
const w = store.get('w')
|
||||
let colors = store.get('colors')
|
||||
|
||||
y += w / 8 + 5
|
||||
for (let i = 1; i < 6; i++) {
|
||||
|
|
|
@ -8,7 +8,7 @@ import snippets from './snippets.js'
|
|||
import macros from './macros.js'
|
||||
|
||||
export default function (part) {
|
||||
const { macro, store, options, Path, paths, Point } = part.shorthand()
|
||||
const { store, options, Path, paths, Point } = part.shorthand()
|
||||
|
||||
// Keep things in store
|
||||
store.set('y', 0)
|
||||
|
|
|
@ -5,8 +5,6 @@ import chai from 'chai'
|
|||
* It expects the following:
|
||||
*
|
||||
* @param object plugin: The plugin object
|
||||
* @param object freesewing: Imported @freesewing/core
|
||||
* @param object expect: Imported chai.expect
|
||||
*/
|
||||
export const sharedPluginTests = plugin => {
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue