1
0
Fork 0

Merge branch 'develop' into more-lint

This commit is contained in:
Joost De Cock 2022-09-28 19:09:50 +02:00 committed by GitHub
commit c0ede14d74
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
118 changed files with 2870 additions and 4892 deletions

View file

@ -1,7 +1,7 @@
export function miniscale(so) {
export function miniscale(so, { points, paths, Point, Path, scale }) {
// Passing `false` will remove the miniscale
if (so === false) {
for (let id of [
for (const id of [
'__miniscaleMetricTopLeft',
'__miniscaleMetricTopRight',
'__miniscaleMetricBottomRight',
@ -13,15 +13,13 @@ export function miniscale(so) {
'__miniscaleMetric',
'__miniscaleImperial',
])
delete this.points[id]
for (let id of ['__miniscaleMetric', '__miniscaleImperial']) delete this.paths[id]
delete points[id]
for (const id of ['__miniscaleMetric', '__miniscaleImperial']) delete paths[id]
return true
}
const scale = this.context.settings.scale
// Convert scale to a value between 0 and 5, inclusive.
const scaleIndex = Math.ceil(6 * Math.max(0.1, Math.min(1, this.context.settings.scale))) - 1
const scaleIndex = Math.ceil(6 * Math.max(0.1, Math.min(1, scale))) - 1
// Metric size in mm / display value and imperial size in mm / display value for each scale index.
const sizes = [
@ -37,20 +35,21 @@ export function miniscale(so) {
const metricDisplaySize = sizes[scaleIndex][1]
const imperialDisplaySize = sizes[scaleIndex][3]
// Box points
this.points.__miniscaleMetricTopLeft = new this.Point(so.at.x - m, so.at.y - m)
this.points.__miniscaleMetricTopRight = new this.Point(so.at.x + m, so.at.y - m)
this.points.__miniscaleMetricBottomLeft = new this.Point(so.at.x - m, so.at.y + m)
this.points.__miniscaleMetricBottomRight = new this.Point(so.at.x + m, so.at.y + m)
this.points.__miniscaleImperialTopLeft = new this.Point(so.at.x - i, so.at.y - i)
this.points.__miniscaleImperialTopRight = new this.Point(so.at.x + i, so.at.y - i)
this.points.__miniscaleImperialBottomLeft = new this.Point(so.at.x - i, so.at.y + i)
this.points.__miniscaleImperialBottomRight = new this.Point(so.at.x + i, so.at.y + i)
points.__miniscaleMetricTopLeft = new Point(so.at.x - m, so.at.y - m)
points.__miniscaleMetricTopRight = new Point(so.at.x + m, so.at.y - m)
points.__miniscaleMetricBottomLeft = new Point(so.at.x - m, so.at.y + m)
points.__miniscaleMetricBottomRight = new Point(so.at.x + m, so.at.y + m)
points.__miniscaleImperialTopLeft = new Point(so.at.x - i, so.at.y - i)
points.__miniscaleImperialTopRight = new Point(so.at.x + i, so.at.y - i)
points.__miniscaleImperialBottomLeft = new Point(so.at.x - i, so.at.y + i)
points.__miniscaleImperialBottomRight = new Point(so.at.x + i, so.at.y + i)
// Text anchor points
this.points.__miniscaleMetric = new this.Point(so.at.x, so.at.y - 2 * scale)
this.points.__miniscaleImperial = new this.Point(so.at.x, so.at.y + 8 * scale)
points.__miniscaleMetric = new Point(so.at.x, so.at.y - 2 * scale)
points.__miniscaleImperial = new Point(so.at.x, so.at.y + 8 * scale)
// Rotation
if (so.rotate) {
let points = [
so.rotate = Number(so.rotate)
let toRotate = [
'__miniscaleMetricTopLeft',
'__miniscaleMetricTopRight',
'__miniscaleMetricBottomLeft',
@ -62,34 +61,34 @@ export function miniscale(so) {
'__miniscaleMetric',
'__miniscaleImperial',
]
for (let pid of points) this.points[pid] = this.points[pid].rotate(so.rotate, so.at)
for (let pid of points.slice(8)) {
this.points[pid].attributes.set(
for (const pid of toRotate) points[pid] = points[pid].rotate(so.rotate, so.at)
for (const pid of toRotate.slice(8)) {
points[pid].attributes.set(
'data-text-transform',
`rotate(${so.rotate * -1}, ${this.points[pid].x}, ${this.points[pid].y})`
`rotate(${so.rotate * -1}, ${points[pid].x}, ${points[pid].y})`
)
}
}
// Paths
this.paths.__miniscaleImperial = new this.Path()
paths.__miniscaleImperial = new Path()
.attr('class', 'scalebox imperial fill-current')
.move(this.points.__miniscaleImperialTopLeft)
.line(this.points.__miniscaleImperialBottomLeft)
.line(this.points.__miniscaleImperialBottomRight)
.line(this.points.__miniscaleImperialTopRight)
.move(points.__miniscaleImperialTopLeft)
.line(points.__miniscaleImperialBottomLeft)
.line(points.__miniscaleImperialBottomRight)
.line(points.__miniscaleImperialTopRight)
.close()
this.paths.__miniscaleMetric = new this.Path()
paths.__miniscaleMetric = new Path()
.attr('class', 'scalebox metric fill-bg')
.move(this.points.__miniscaleMetricTopLeft)
.line(this.points.__miniscaleMetricBottomLeft)
.line(this.points.__miniscaleMetricBottomRight)
.line(this.points.__miniscaleMetricTopRight)
.move(points.__miniscaleMetricTopLeft)
.line(points.__miniscaleMetricBottomLeft)
.line(points.__miniscaleMetricBottomRight)
.line(points.__miniscaleMetricTopRight)
.close()
// Text
this.points.__miniscaleMetric = this.points.__miniscaleMetric
points.__miniscaleMetric = points.__miniscaleMetric
.attr('data-text', `${metricDisplaySize} x ${metricDisplaySize}`)
.attr('data-text-class', 'text-xs center')
this.points.__miniscaleImperial = this.points.__miniscaleImperial
points.__miniscaleImperial = points.__miniscaleImperial
.attr('data-text', `${imperialDisplaySize} x ${imperialDisplaySize}`)
.attr('data-text-class', 'text-xs center ')
}

View file

@ -1,4 +1,4 @@
export function scalebox(so) {
export function scalebox(so, { store, points, paths, scale, Point, Path }) {
// Passing `false` will remove the scalebox
if (so === false) {
for (let id of [
@ -17,15 +17,13 @@ export function scalebox(so) {
'__scaleboxMetric',
'__scaleboxImperial',
])
delete this.points[id]
for (let id of ['__scaleboxMetric', '__scaleboxImperial']) delete this.paths[id]
delete points[id]
for (let id of ['__scaleboxMetric', '__scaleboxImperial']) delete paths[id]
return true
}
const scale = this.context.settings.scale
// Convert scale to a value between 0 and 9, inclusive.
const scaleIndex = Math.round(10 * Math.max(0.1, Math.min(1, this.context.settings.scale))) - 1
const scaleIndex = Math.round(10 * Math.max(0.1, Math.min(1, scale))) - 1
// Metric width and height in mm and display width and height for each scale index.
const metricSizes = [
@ -66,48 +64,43 @@ export function scalebox(so) {
const imperialDisplayHeight = imperialSizes[scaleIndex][3]
// Box points
this.points.__scaleboxMetricTopLeft = new this.Point(
so.at.x - metricWidth / 2,
so.at.y - metricHeight / 2
)
this.points.__scaleboxMetricTopRight = new this.Point(
so.at.x + metricWidth / 2,
so.at.y - metricHeight / 2
)
this.points.__scaleboxMetricBottomLeft = new this.Point(
points.__scaleboxMetricTopLeft = new Point(so.at.x - metricWidth / 2, so.at.y - metricHeight / 2)
points.__scaleboxMetricTopRight = new Point(so.at.x + metricWidth / 2, so.at.y - metricHeight / 2)
points.__scaleboxMetricBottomLeft = new Point(
so.at.x - metricWidth / 2,
so.at.y + metricHeight / 2
)
this.points.__scaleboxMetricBottomRight = new this.Point(
points.__scaleboxMetricBottomRight = new Point(
so.at.x + metricWidth / 2,
so.at.y + metricHeight / 2
)
this.points.__scaleboxImperialTopLeft = new this.Point(
points.__scaleboxImperialTopLeft = new Point(
so.at.x - imperialWidth / 2,
so.at.y - imperialHeight / 2
)
this.points.__scaleboxImperialTopRight = new this.Point(
points.__scaleboxImperialTopRight = new Point(
so.at.x + imperialWidth / 2,
so.at.y - imperialHeight / 2
)
this.points.__scaleboxImperialBottomLeft = new this.Point(
points.__scaleboxImperialBottomLeft = new Point(
so.at.x - imperialWidth / 2,
so.at.y + imperialHeight / 2
)
this.points.__scaleboxImperialBottomRight = new this.Point(
points.__scaleboxImperialBottomRight = new Point(
so.at.x + imperialWidth / 2,
so.at.y + imperialHeight / 2
)
// Text anchor points
this.points.__scaleboxLead = new this.Point(so.at.x - 45 * scale, so.at.y - 15 * scale)
this.points.__scaleboxTitle = this.points.__scaleboxLead.shift(-90, 10 * scale)
this.points.__scaleboxText = this.points.__scaleboxTitle.shift(-90, 12 * scale)
this.points.__scaleboxLink = this.points.__scaleboxText.shift(-90, 5 * scale)
this.points.__scaleboxMetric = new this.Point(so.at.x, so.at.y + 20 * scale)
this.points.__scaleboxImperial = new this.Point(so.at.x, so.at.y + 24 * scale)
points.__scaleboxLead = new Point(so.at.x - 45 * scale, so.at.y - 15 * scale)
points.__scaleboxTitle = points.__scaleboxLead.shift(-90, 10 * scale)
points.__scaleboxText = points.__scaleboxTitle.shift(-90, 12 * scale)
points.__scaleboxLink = points.__scaleboxText.shift(-90, 5 * scale)
points.__scaleboxMetric = new Point(so.at.x, so.at.y + 20 * scale)
points.__scaleboxImperial = new Point(so.at.x, so.at.y + 24 * scale)
// Rotation
if (so.rotate) {
let points = [
so.rotate = Number(so.rotate)
let toRotate = [
'__scaleboxMetricTopLeft',
'__scaleboxMetricTopRight',
'__scaleboxMetricBottomLeft',
@ -123,61 +116,61 @@ export function scalebox(so) {
'__scaleboxMetric',
'__scaleboxImperial',
]
for (let pid of points) this.points[pid] = this.points[pid].rotate(so.rotate, so.at)
for (let pid of points.slice(8)) {
this.points[pid].attributes.set(
for (let pid of toRotate) points[pid] = points[pid].rotate(so.rotate, so.at)
for (let pid of toRotate.slice(8)) {
points[pid].attributes.set(
'data-text-transform',
`rotate(${so.rotate * -1}, ${this.points[pid].x}, ${this.points[pid].y})`
`rotate(${so.rotate * -1}, ${points[pid].x}, ${points[pid].y})`
)
}
}
// Paths
this.paths.__scaleboxImperial = new this.Path()
paths.__scaleboxImperial = new Path()
.attr('class', 'scalebox imperial fill-current')
.move(this.points.__scaleboxImperialTopLeft)
.line(this.points.__scaleboxImperialBottomLeft)
.line(this.points.__scaleboxImperialBottomRight)
.line(this.points.__scaleboxImperialTopRight)
.move(points.__scaleboxImperialTopLeft)
.line(points.__scaleboxImperialBottomLeft)
.line(points.__scaleboxImperialBottomRight)
.line(points.__scaleboxImperialTopRight)
.close()
this.paths.__scaleboxMetric = new this.Path()
paths.__scaleboxMetric = new Path()
.attr('class', 'scalebox metric fill-bg')
.move(this.points.__scaleboxMetricTopLeft)
.line(this.points.__scaleboxMetricBottomLeft)
.line(this.points.__scaleboxMetricBottomRight)
.line(this.points.__scaleboxMetricTopRight)
.move(points.__scaleboxMetricTopLeft)
.line(points.__scaleboxMetricBottomLeft)
.line(points.__scaleboxMetricBottomRight)
.line(points.__scaleboxMetricTopRight)
.close()
// Lead
this.points.__scaleboxLead = this.points.__scaleboxLead
points.__scaleboxLead = points.__scaleboxLead
.attr('data-text', so.lead || 'FreeSewing')
.attr('data-text-class', 'text-sm')
// Title
if (so.title) this.points.__scaleboxTitle.attributes.set('data-text', so.title)
if (so.title) points.__scaleboxTitle.attributes.set('data-text', so.title)
else {
let name = this.context.config?.data?.name || 'No Name'
let name = store.data?.name || 'No Name'
if (name.indexOf('@freesewing/') !== -1) name = name.replace('@freesewing/', '')
this.points.__scaleboxTitle = this.points.__scaleboxTitle
points.__scaleboxTitle = points.__scaleboxTitle
.attr('data-text', name)
.attr('data-text', 'v' + (this.context.config?.data?.version || 'No Version'))
.attr('data-text', 'v' + (store.data?.version || 'No Version'))
}
this.points.__scaleboxTitle.attributes.add('data-text-class', 'text-lg')
points.__scaleboxTitle.attributes.add('data-text-class', 'text-lg')
// Text
if (typeof so.text === 'string') {
this.points.__scaleboxText.attr('data-text', so.text)
points.__scaleboxText.attr('data-text', so.text)
} else {
this.points.__scaleboxText.attr('data-text', 'supportFreesewingBecomeAPatron')
this.points.__scaleboxLink = this.points.__scaleboxLink
points.__scaleboxText.attr('data-text', 'supportFreesewingBecomeAPatron')
points.__scaleboxLink = points.__scaleboxLink
.attr('data-text', 'freesewing.org/patrons/join')
.attr('data-text-class', 'text-sm fill-note')
}
this.points.__scaleboxText.attr('data-text-class', 'text-xs').attr('data-text-lineheight', 4)
points.__scaleboxText.attr('data-text-class', 'text-xs').attr('data-text-lineheight', 4)
// Instructions
this.points.__scaleboxMetric = this.points.__scaleboxMetric
points.__scaleboxMetric = points.__scaleboxMetric
.attr('data-text', 'theWhiteInsideOfThisBoxShouldMeasure')
.attr('data-text', `${metricDisplayWidth}`)
.attr('data-text', 'x')
.attr('data-text', `${metricDisplayHeight}`)
.attr('data-text-class', 'text-xs center')
this.points.__scaleboxImperial = this.points.__scaleboxImperial
points.__scaleboxImperial = points.__scaleboxImperial
.attr('data-text', 'theBlackOutsideOfThisBoxShouldMeasure')
.attr('data-text', `${imperialDisplayWidth}`)
.attr('data-text', 'x')

View file

@ -8,17 +8,20 @@ describe('Scalebox Plugin Tests', () => {
it('Should run the default scalebox macro', () => {
const part = {
name: 'test',
draft: ({ points, Point, macro }) => {
draft: ({ points, Point, macro, part }) => {
points.anchor = new Point(100, 200)
macro('scalebox', {
at: points.anchor,
})
return part
},
plugins: [plugin],
}
const Pattern = new Design({ parts: [part], plugins: [plugin] })
const Pattern = new Design({ parts: [part] })
const pattern = new Pattern()
pattern.draft()
let p = pattern.parts.test.points
let p = pattern.parts[0].test.points
expect(p.__scaleboxMetricTopLeft.x).to.equal(50)
expect(p.__scaleboxMetricTopLeft.y).to.equal(175)
expect(p.__scaleboxMetricTopRight.x).to.equal(150)
@ -47,7 +50,7 @@ describe('Scalebox Plugin Tests', () => {
expect(p.__scaleboxMetric.y).to.equal(220)
expect(p.__scaleboxImperial.x).to.equal(100)
expect(p.__scaleboxImperial.y).to.equal(224)
p = pattern.parts.test.paths.__scaleboxMetric
p = pattern.parts[0].test.paths.__scaleboxMetric
expect(p.ops[0].type).to.equal('move')
expect(p.ops[1].type).to.equal('line')
expect(p.ops[2].type).to.equal('line')
@ -61,7 +64,7 @@ describe('Scalebox Plugin Tests', () => {
expect(p.ops[2].to.y).to.equal(225)
expect(p.ops[3].to.x).to.equal(150)
expect(p.ops[3].to.y).to.equal(175)
p = pattern.parts.test.paths.__scaleboxImperial
p = pattern.parts[0].test.paths.__scaleboxImperial
expect(p.ops[0].type).to.equal('move')
expect(p.ops[1].type).to.equal('line')
expect(p.ops[2].type).to.equal('line')
@ -87,11 +90,12 @@ describe('Scalebox Plugin Tests', () => {
rotate: 90,
})
},
plugins: [plugin],
}
const Pattern = new Design({ parts: [part], plugins: [plugin] })
const Pattern = new Design({ parts: [part] })
const pattern = new Pattern()
pattern.draft()
const p = pattern.parts.test.points
const p = pattern.parts[0].test.points
expect(round(p.__scaleboxMetricTopLeft.x)).to.equal(75)
expect(round(p.__scaleboxMetricTopLeft.y)).to.equal(250)
expect(round(p.__scaleboxMetricTopRight.x)).to.equal(75)
@ -125,27 +129,29 @@ describe('Scalebox Plugin Tests', () => {
it('Should run the scalebox macro with default text', () => {
const part = {
name: 'test',
draft: ({ points, Point, macro }) => {
draft: ({ points, Point, macro, part }) => {
points.anchor = new Point(100, 200)
macro('scalebox', {
at: points.anchor,
})
return part
},
plugins: [plugin],
}
const Pattern = new Design({
parts: [part],
plugins: [plugin],
data: { name: 'test', version: '1.2.3' },
})
const pattern = new Pattern()
pattern.draft()
let p = pattern.parts.test.points.__scaleboxLead.attributes
let p = pattern.parts[0].test.points.__scaleboxLead.attributes
expect(p.get('data-text')).to.equal('FreeSewing')
expect(p.get('data-text-class')).to.equal('text-sm')
p = pattern.parts.test.points.__scaleboxTitle.attributes
p = pattern.parts[0].test.points.__scaleboxTitle.attributes
expect(p.get('data-text')).to.equal('test v1.2.3')
expect(p.get('data-text-class')).to.equal('text-lg')
p = pattern.parts.test.points.__scaleboxText.attributes
p = pattern.parts[0].test.points.__scaleboxText.attributes
expect(p.get('data-text-class')).to.equal('text-xs')
expect(p.get('data-text-lineheight')).to.equal('4')
expect(p.list['data-text'][0]).to.equal('supportFreesewingBecomeAPatron')
@ -154,7 +160,7 @@ describe('Scalebox Plugin Tests', () => {
it('Should run the scalebox macro with custom text', () => {
const part = {
name: 'test',
draft: ({ points, Point, macro }) => {
draft: ({ points, Point, macro, part }) => {
points.anchor = new Point(100, 200)
macro('scalebox', {
at: points.anchor,
@ -162,22 +168,24 @@ describe('Scalebox Plugin Tests', () => {
title: 'theTitle',
text: 'theText',
})
return part
},
plugins: [plugin],
}
const Pattern = new Design({
parts: [part],
plugins: [plugin],
data: { name: 'test', version: '1.2.3' },
})
const pattern = new Pattern()
pattern.draft()
let p = pattern.parts.test.points.__scaleboxLead.attributes
let p = pattern.parts[0].test.points.__scaleboxLead.attributes
expect(p.get('data-text')).to.equal('theLead')
expect(p.get('data-text-class')).to.equal('text-sm')
p = pattern.parts.test.points.__scaleboxTitle.attributes
p = pattern.parts[0].test.points.__scaleboxTitle.attributes
expect(p.get('data-text')).to.equal('theTitle')
expect(p.get('data-text-class')).to.equal('text-lg')
p = pattern.parts.test.points.__scaleboxText.attributes
p = pattern.parts[0].test.points.__scaleboxText.attributes
expect(p.get('data-text')).to.equal('theText')
expect(p.get('data-text-class')).to.equal('text-xs')
expect(p.get('data-text-lineheight')).to.equal('4')
@ -186,7 +194,7 @@ describe('Scalebox Plugin Tests', () => {
it('Should apply scale to the scalebox macro', () => {
const part = {
name: 'test',
draft: ({ points, Point, macro }) => {
draft: ({ points, Point, macro, part }) => {
points.anchor = new Point(100, 200)
macro('scalebox', {
at: points.anchor,
@ -194,7 +202,10 @@ describe('Scalebox Plugin Tests', () => {
title: 'theTitle',
text: 'theText',
})
return part
},
plugins: [plugin],
}
const Pattern = new Design({
parts: [part],
@ -203,7 +214,7 @@ describe('Scalebox Plugin Tests', () => {
})
const pattern = new Pattern({ scale: 0.5 })
pattern.draft()
let p = pattern.parts.test.points
let p = pattern.parts[0].test.points
expect(p.__scaleboxMetricTopLeft.x).to.equal(75)
expect(p.__scaleboxMetricTopLeft.y).to.equal(187.5)
expect(p.__scaleboxMetricTopRight.x).to.equal(125)
@ -231,12 +242,15 @@ describe('Scalebox Plugin Tests', () => {
it('Should apply scale to the miniscale macro', () => {
const part = {
name: 'test',
draft: ({ points, Point, macro }) => {
draft: ({ points, Point, macro, part }) => {
points.anchor = new Point(100, 200)
macro('miniscale', {
at: points.anchor,
})
return part
},
plugins: [plugin],
}
const Pattern = new Design({
parts: [part],
@ -245,7 +259,7 @@ describe('Scalebox Plugin Tests', () => {
})
const pattern = new Pattern({ scale: 0.5 })
pattern.draft()
let p = pattern.parts.test.points
let p = pattern.parts[0].test.points
expect(p.__miniscaleMetricTopLeft.x).to.equal(92)
expect(p.__miniscaleMetricTopLeft.y).to.equal(192)
expect(p.__miniscaleMetricTopRight.x).to.equal(108)