postext 1.37.0 → 1.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/comics/frames.test.d.ts +2 -0
- package/dist/__tests__/comics/frames.test.d.ts.map +1 -0
- package/dist/__tests__/comics/frames.test.js +251 -0
- package/dist/__tests__/comics/frames.test.js.map +1 -0
- package/dist/__tests__/composed/continuationRules.test.d.ts +2 -0
- package/dist/__tests__/composed/continuationRules.test.d.ts.map +1 -0
- package/dist/__tests__/composed/continuationRules.test.js +389 -0
- package/dist/__tests__/composed/continuationRules.test.js.map +1 -0
- package/dist/__tests__/composed/coverImages.test.d.ts +2 -0
- package/dist/__tests__/composed/coverImages.test.d.ts.map +1 -0
- package/dist/__tests__/composed/coverImages.test.js +75 -0
- package/dist/__tests__/composed/coverImages.test.js.map +1 -0
- package/dist/__tests__/composed/decorationSize.test.d.ts +2 -0
- package/dist/__tests__/composed/decorationSize.test.d.ts.map +1 -0
- package/dist/__tests__/composed/decorationSize.test.js +79 -0
- package/dist/__tests__/composed/decorationSize.test.js.map +1 -0
- package/dist/__tests__/composed/emptyFrames.test.d.ts +2 -0
- package/dist/__tests__/composed/emptyFrames.test.d.ts.map +1 -0
- package/dist/__tests__/composed/emptyFrames.test.js +129 -0
- package/dist/__tests__/composed/emptyFrames.test.js.map +1 -0
- package/dist/__tests__/composed/fit.test.js +10 -4
- package/dist/__tests__/composed/fit.test.js.map +1 -1
- package/dist/__tests__/composed/groups.test.js +20 -0
- package/dist/__tests__/composed/groups.test.js.map +1 -1
- package/dist/__tests__/composed/ruledFrames.test.d.ts +2 -0
- package/dist/__tests__/composed/ruledFrames.test.d.ts.map +1 -0
- package/dist/__tests__/composed/ruledFrames.test.js +93 -0
- package/dist/__tests__/composed/ruledFrames.test.js.map +1 -0
- package/dist/__tests__/composed/spread.test.js +82 -0
- package/dist/__tests__/composed/spread.test.js.map +1 -1
- package/dist/__tests__/exports.test.js +12 -0
- package/dist/__tests__/exports.test.js.map +1 -1
- package/dist/__tests__/migrate/labelsOnPictures.test.d.ts +2 -0
- package/dist/__tests__/migrate/labelsOnPictures.test.d.ts.map +1 -0
- package/dist/__tests__/migrate/labelsOnPictures.test.js +114 -0
- package/dist/__tests__/migrate/labelsOnPictures.test.js.map +1 -0
- package/dist/__tests__/paragraphDropCap.test.js +38 -0
- package/dist/__tests__/paragraphDropCap.test.js.map +1 -1
- package/dist/__tests__/resourceTypePartial.test.d.ts +2 -0
- package/dist/__tests__/resourceTypePartial.test.d.ts.map +1 -0
- package/dist/__tests__/resourceTypePartial.test.js +60 -0
- package/dist/__tests__/resourceTypePartial.test.js.map +1 -0
- package/dist/canvas-backend/composed.d.ts +3 -0
- package/dist/canvas-backend/composed.d.ts.map +1 -1
- package/dist/canvas-backend/composed.js +47 -26
- package/dist/canvas-backend/composed.js.map +1 -1
- package/dist/canvas-backend/headerFooter.d.ts.map +1 -1
- package/dist/canvas-backend/headerFooter.js +13 -0
- package/dist/canvas-backend/headerFooter.js.map +1 -1
- package/dist/canvas-backend/index.d.ts.map +1 -1
- package/dist/canvas-backend/index.js +16 -5
- package/dist/canvas-backend/index.js.map +1 -1
- package/dist/comics/frames.d.ts +82 -0
- package/dist/comics/frames.d.ts.map +1 -0
- package/dist/comics/frames.js +182 -0
- package/dist/comics/frames.js.map +1 -0
- package/dist/comics/index.d.ts +4 -1
- package/dist/comics/index.d.ts.map +1 -1
- package/dist/comics/index.js +3 -1
- package/dist/comics/index.js.map +1 -1
- package/dist/comics/layoutPage.d.ts +9 -0
- package/dist/comics/layoutPage.d.ts.map +1 -1
- package/dist/comics/layoutPage.js +53 -68
- package/dist/comics/layoutPage.js.map +1 -1
- package/dist/comics/page.d.ts.map +1 -1
- package/dist/comics/page.js +10 -1
- package/dist/comics/page.js.map +1 -1
- package/dist/comics/sourceMap.d.ts +60 -0
- package/dist/comics/sourceMap.d.ts.map +1 -0
- package/dist/comics/sourceMap.js +166 -0
- package/dist/comics/sourceMap.js.map +1 -0
- package/dist/comics/spread.d.ts.map +1 -1
- package/dist/comics/spread.js +6 -0
- package/dist/comics/spread.js.map +1 -1
- package/dist/comics/textPanels.d.ts +113 -0
- package/dist/comics/textPanels.d.ts.map +1 -0
- package/dist/comics/textPanels.js +327 -0
- package/dist/comics/textPanels.js.map +1 -0
- package/dist/comics/transform.d.ts +6 -2
- package/dist/comics/transform.d.ts.map +1 -1
- package/dist/comics/transform.js +14 -1
- package/dist/comics/transform.js.map +1 -1
- package/dist/comics/types.d.ts +10 -0
- package/dist/comics/types.d.ts.map +1 -1
- package/dist/composed/continuation.d.ts +55 -5
- package/dist/composed/continuation.d.ts.map +1 -1
- package/dist/composed/continuation.js +118 -16
- package/dist/composed/continuation.js.map +1 -1
- package/dist/composed/groups.d.ts +3 -0
- package/dist/composed/groups.d.ts.map +1 -1
- package/dist/composed/groups.js +34 -4
- package/dist/composed/groups.js.map +1 -1
- package/dist/composed/paint.d.ts +20 -1
- package/dist/composed/paint.d.ts.map +1 -1
- package/dist/composed/paint.js +40 -0
- package/dist/composed/paint.js.map +1 -1
- package/dist/composed/rules.d.ts +31 -0
- package/dist/composed/rules.d.ts.map +1 -0
- package/dist/composed/rules.js +45 -0
- package/dist/composed/rules.js.map +1 -0
- package/dist/composed/slotChecks.d.ts +2 -1
- package/dist/composed/slotChecks.d.ts.map +1 -1
- package/dist/composed/slotChecks.js +56 -2
- package/dist/composed/slotChecks.js.map +1 -1
- package/dist/composed/sourceMap.d.ts.map +1 -1
- package/dist/composed/sourceMap.js +15 -1
- package/dist/composed/sourceMap.js.map +1 -1
- package/dist/composed/spread.d.ts +20 -5
- package/dist/composed/spread.d.ts.map +1 -1
- package/dist/composed/spread.js +51 -26
- package/dist/composed/spread.js.map +1 -1
- package/dist/composed/templates.d.ts +11 -0
- package/dist/composed/templates.d.ts.map +1 -1
- package/dist/composed/templates.js +51 -2
- package/dist/composed/templates.js.map +1 -1
- package/dist/composed/types.d.ts +43 -3
- package/dist/composed/types.d.ts.map +1 -1
- package/dist/composed/validate.d.ts.map +1 -1
- package/dist/composed/validate.js +5 -3
- package/dist/composed/validate.js.map +1 -1
- package/dist/configWarnings.d.ts.map +1 -1
- package/dist/configWarnings.js +11 -1
- package/dist/configWarnings.js.map +1 -1
- package/dist/defaults/headerFooter.d.ts.map +1 -1
- package/dist/defaults/headerFooter.js +4 -0
- package/dist/defaults/headerFooter.js.map +1 -1
- package/dist/defaults/resourceTypes.d.ts +15 -0
- package/dist/defaults/resourceTypes.d.ts.map +1 -1
- package/dist/defaults/resourceTypes.js +39 -1
- package/dist/defaults/resourceTypes.js.map +1 -1
- package/dist/design/layout.d.ts +7 -0
- package/dist/design/layout.d.ts.map +1 -1
- package/dist/design/layout.js +109 -16
- package/dist/design/layout.js.map +1 -1
- package/dist/html-backend.d.ts.map +1 -1
- package/dist/html-backend.js +43 -5
- package/dist/html-backend.js.map +1 -1
- package/dist/htmlComic.d.ts +3 -0
- package/dist/htmlComic.d.ts.map +1 -1
- package/dist/htmlComic.js +2 -0
- package/dist/htmlComic.js.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/migrate/pageDesign.d.ts +35 -2
- package/dist/migrate/pageDesign.d.ts.map +1 -1
- package/dist/migrate/pageDesign.js +134 -7
- package/dist/migrate/pageDesign.js.map +1 -1
- package/dist/migrate/textToMarkdown.d.ts +33 -1
- package/dist/migrate/textToMarkdown.d.ts.map +1 -1
- package/dist/migrate/textToMarkdown.js +206 -9
- package/dist/migrate/textToMarkdown.js.map +1 -1
- package/dist/parse/blockParser.js +26 -0
- package/dist/parse/blockParser.js.map +1 -1
- package/dist/pipeline/build.d.ts.map +1 -1
- package/dist/pipeline/build.js +219 -40
- package/dist/pipeline/build.js.map +1 -1
- package/dist/pipeline/calloutLayout.d.ts +5 -0
- package/dist/pipeline/calloutLayout.d.ts.map +1 -1
- package/dist/pipeline/calloutLayout.js +70 -0
- package/dist/pipeline/calloutLayout.js.map +1 -1
- package/dist/pipeline/composedLayout.d.ts.map +1 -1
- package/dist/pipeline/composedLayout.js +246 -49
- package/dist/pipeline/composedLayout.js.map +1 -1
- package/dist/pipeline/contentWarnings.d.ts.map +1 -1
- package/dist/pipeline/contentWarnings.js +21 -1
- package/dist/pipeline/contentWarnings.js.map +1 -1
- package/dist/pipeline/dropCap.d.ts +5 -0
- package/dist/pipeline/dropCap.d.ts.map +1 -1
- package/dist/pipeline/dropCap.js +23 -2
- package/dist/pipeline/dropCap.js.map +1 -1
- package/dist/pipeline/frameLayout.d.ts +17 -2
- package/dist/pipeline/frameLayout.d.ts.map +1 -1
- package/dist/pipeline/frameLayout.js +47 -2
- package/dist/pipeline/frameLayout.js.map +1 -1
- package/dist/pipeline/headerFooter.d.ts.map +1 -1
- package/dist/pipeline/headerFooter.js +41 -2
- package/dist/pipeline/headerFooter.js.map +1 -1
- package/dist/pipeline/measureContentBlock.d.ts +1 -1
- package/dist/pipeline/measureContentBlock.d.ts.map +1 -1
- package/dist/pipeline/measureContentBlock.js +4 -1
- package/dist/pipeline/measureContentBlock.js.map +1 -1
- package/dist/pipeline/resourceNumbering.d.ts.map +1 -1
- package/dist/pipeline/resourceNumbering.js +13 -4
- package/dist/pipeline/resourceNumbering.js.map +1 -1
- package/dist/preflight.js +5 -1
- package/dist/preflight.js.map +1 -1
- package/dist/types.d.ts +32 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/vdt.d.ts +90 -2
- package/dist/vdt.d.ts.map +1 -1
- package/dist/vdt.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { buildDocument } from '../../pipeline/build';
|
|
3
|
+
import { createMeasurementCache } from '../../measure';
|
|
4
|
+
import { page8Fixture } from './fixtures/page8';
|
|
5
|
+
import { sourceAt } from '../../composed/sourceMap';
|
|
6
|
+
// Findings of the composed-pages recipes (#882) on content that goes on to
|
|
7
|
+
// other pages: the ladder's order (#920), the frame that takes the content
|
|
8
|
+
// (#919), where a frame is cut (#913), what an added page keeps (#912) and
|
|
9
|
+
// a story that jumps to a later page (#917).
|
|
10
|
+
class StubCtx {
|
|
11
|
+
font = '';
|
|
12
|
+
measureText(s) {
|
|
13
|
+
return { width: s.length * 7 };
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
globalThis.OffscreenCanvas = class {
|
|
17
|
+
getContext() {
|
|
18
|
+
return new StubCtx();
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
const mm = (value) => ({ value, unit: 'mm' });
|
|
22
|
+
const MM = 300 / 25.4;
|
|
23
|
+
const BASE = page8Fixture('es').config;
|
|
24
|
+
const build = (markdown, templates, config = {}) => buildDocument({ markdown, resources: page8Fixture('es').resources }, { ...BASE, ...config, pageTemplates: templates }, createMeasurementCache());
|
|
25
|
+
const composedPages = (doc) => doc.pages.filter((p) => p.composed);
|
|
26
|
+
const frameOn = (page, name) => page.composed.frames.find((f) => f.name === name);
|
|
27
|
+
const blocksOf = (page, f) => f.blockIds.map((id) => page.floats.find((b) => b.id === id));
|
|
28
|
+
const textOf = (blocks) => blocks.filter((b) => b.type !== 'callout').flatMap((b) => b.lines.map((l) => l.text)).join(' ');
|
|
29
|
+
const overlayOf = (box) => (box?.designOverlay?.blocks ?? []).flatMap((d) => (d.kind === 'text' ? [d.lines.map((l) => l.text).join(' ')] : []));
|
|
30
|
+
const warningsOf = (doc, ...kinds) => (doc.contentWarnings ?? []).filter((w) => kinds.includes(w.kind));
|
|
31
|
+
const para = (word, n) => Array.from({ length: n }, (_, i) => `${word}${i}`).join(' ');
|
|
32
|
+
const count = (s, word) => s.split(word).length - 1;
|
|
33
|
+
/** A page with one box held to `heightMm`, its text `words` long. */
|
|
34
|
+
const oneBox = (frame, extra = []) => [
|
|
35
|
+
{ id: 'hoja', header: false, frames: [{ name: 'caja', style: 'caja-azul', width: mm(186), placement: { anchor: { to: 'container', edge: 'top-left' } }, ...frame }] },
|
|
36
|
+
...extra,
|
|
37
|
+
];
|
|
38
|
+
const boxPage = (words) => ['::::page{template="hoja"}', ':::frame{slot="caja" label="Caja"}', para('palabra', words), ':::', '::::', ''].join('\n');
|
|
39
|
+
describe('the ladder goes on before it shrinks a frame that can continue (#920)', () => {
|
|
40
|
+
// A box a few lines short: shrinking to 90 % would make it fit.
|
|
41
|
+
const words = (() => {
|
|
42
|
+
for (let n = 100; n < 2000; n += 20) {
|
|
43
|
+
const doc = build(boxPage(n), oneBox({ height: mm(60), overflow: { continueIn: 'next-page' }, fit: { preferContinue: false } }));
|
|
44
|
+
const first = composedPages(doc)[0];
|
|
45
|
+
if (frameOn(first, 'caja').scale < 0.95)
|
|
46
|
+
return n;
|
|
47
|
+
}
|
|
48
|
+
throw new Error('no length found');
|
|
49
|
+
})();
|
|
50
|
+
it('by default the box goes on at full size', () => {
|
|
51
|
+
const doc = build(boxPage(words), oneBox({ height: mm(60), overflow: { continueIn: 'next-page' } }));
|
|
52
|
+
const pages = composedPages(doc);
|
|
53
|
+
expect(pages).toHaveLength(2);
|
|
54
|
+
for (const p of pages)
|
|
55
|
+
expect(frameOn(p, 'caja').scale).toBe(1);
|
|
56
|
+
expect(pages[0].composed.log.some((e) => e.kind === 'textScaled')).toBe(false);
|
|
57
|
+
expect(pages[0].composed.log.some((e) => e.kind === 'continued')).toBe(true);
|
|
58
|
+
expect(warningsOf(doc, 'frameOverflow')).toEqual([]);
|
|
59
|
+
});
|
|
60
|
+
it('fit.preferContinue: false shrinks first and keeps the story on its page', () => {
|
|
61
|
+
const doc = build(boxPage(words), oneBox({ height: mm(60), overflow: { continueIn: 'next-page' }, fit: { preferContinue: false } }));
|
|
62
|
+
const pages = composedPages(doc);
|
|
63
|
+
expect(pages).toHaveLength(1);
|
|
64
|
+
expect(frameOn(pages[0], 'caja').scale).toBeLessThan(1);
|
|
65
|
+
expect(pages[0].composed.log.some((e) => e.kind === 'textScaled')).toBe(true);
|
|
66
|
+
});
|
|
67
|
+
it('a frame that cannot go on still shrinks', () => {
|
|
68
|
+
const doc = build(boxPage(words), oneBox({ height: mm(60) }));
|
|
69
|
+
expect(frameOn(composedPages(doc)[0], 'caja').scale).toBeLessThan(1);
|
|
70
|
+
});
|
|
71
|
+
it('on the last page continuation may add, the text shrinks again', () => {
|
|
72
|
+
// The tiny receiver takes none of it: the step is reverted, and the
|
|
73
|
+
// ladder shrinks the text before it warns.
|
|
74
|
+
const tiny = { id: 'diminuta', header: false, frames: [{ name: 'caja', style: 'caja-azul', width: mm(186), height: mm(4) }] };
|
|
75
|
+
const doc = build(boxPage(words * 4), oneBox({ height: mm(60), overflow: { continueIn: 'template:diminuta' } }, [tiny]));
|
|
76
|
+
const ws = warningsOf(doc, 'frameOverflow');
|
|
77
|
+
expect(ws).toHaveLength(1);
|
|
78
|
+
expect(ws[0].stepsTried).toEqual(['free', 'continue', 'shrinkText']);
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
describe('a threaded story goes on where its chain starts (#919)', () => {
|
|
82
|
+
/** Three columns threaded a → b → c; c goes on as `rule`. */
|
|
83
|
+
const columns = (id, prefix, rule) => ({
|
|
84
|
+
id,
|
|
85
|
+
header: false,
|
|
86
|
+
frames: ['1', '2', '3'].map((k, i) => ({
|
|
87
|
+
name: `${prefix}-${k}`,
|
|
88
|
+
width: mm(56),
|
|
89
|
+
height: 'fill',
|
|
90
|
+
placement: { anchor: { to: 'container', edge: 'top-left' }, offset: { x: mm(i * 62) } },
|
|
91
|
+
...(k === '1' ? { flow: true } : {}),
|
|
92
|
+
...(k !== '3' ? { next: `${prefix}-${Number(k) + 1}` } : { overflow: { continueIn: rule } }),
|
|
93
|
+
fit: { shrinkText: false, scaleImages: false },
|
|
94
|
+
})),
|
|
95
|
+
});
|
|
96
|
+
const story = ['::::page{template="cuerpo"}', ...Array.from({ length: 70 }, (_, i) => [para(`p${i}w`, 110), '']).flat(), '::::', ''].join('\n');
|
|
97
|
+
for (const rule of ['template:cuerpo', 'next-page']) {
|
|
98
|
+
it(`a template that goes on into itself fills every column of every added page (${rule})`, () => {
|
|
99
|
+
const doc = build(story, [columns('cuerpo', 'col', rule)]);
|
|
100
|
+
const pages = composedPages(doc);
|
|
101
|
+
expect(pages.length).toBeGreaterThanOrEqual(4);
|
|
102
|
+
// Every page but the last fills its three columns.
|
|
103
|
+
for (const p of pages.slice(0, -1)) {
|
|
104
|
+
for (const k of ['1', '2', '3'])
|
|
105
|
+
expect(frameOn(p, `col-${k}`).blockIds.length, `p. ${p.index} col-${k}`).toBeGreaterThan(0);
|
|
106
|
+
}
|
|
107
|
+
expect(pages[pages.length - 1].composed.frames.find((f) => f.name === 'col-1').blockIds.length).toBeGreaterThan(0);
|
|
108
|
+
// The chain goes on from c to the next page's a.
|
|
109
|
+
for (let k = 1; k < pages.length; k++) {
|
|
110
|
+
expect(frameOn(pages[k], 'col-1').continuedFrom).toBe(frameOn(pages[k - 1], 'col-3').id);
|
|
111
|
+
}
|
|
112
|
+
expect(warningsOf(doc, 'frameOverflow', 'frameContinuationLimit')).toEqual([]);
|
|
113
|
+
// Every word once.
|
|
114
|
+
const all = pages.flatMap((p) => ['1', '2', '3'].map((k) => textOf(blocksOf(p, frameOn(p, `col-${k}`))))).join(' ');
|
|
115
|
+
for (const i of [0, 17, 39, 69])
|
|
116
|
+
expect(count(all, `p${i}w5 `)).toBe(1);
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
it('goes on in the flow frame of another template whose frames have other names', () => {
|
|
120
|
+
const doc = build(story.replace('template="cuerpo"', 'template="primera"'), [columns('primera', 'col', 'template:seguido'), columns('seguido', 'sig', 'template:seguido')]);
|
|
121
|
+
const pages = composedPages(doc);
|
|
122
|
+
expect(pages.length).toBeGreaterThanOrEqual(3);
|
|
123
|
+
for (const p of pages.slice(1, -1)) {
|
|
124
|
+
for (const k of ['1', '2', '3'])
|
|
125
|
+
expect(frameOn(p, `sig-${k}`).blockIds.length).toBeGreaterThan(0);
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
describe('a frame is cut as the running text is (#913)', () => {
|
|
130
|
+
const steps = (lead, items = 5) => [
|
|
131
|
+
'::::page{template="hoja"}',
|
|
132
|
+
':::frame{slot="caja" label="Pasos"}',
|
|
133
|
+
para('intro', lead),
|
|
134
|
+
'',
|
|
135
|
+
'### Mi registro de la semana',
|
|
136
|
+
'',
|
|
137
|
+
...Array.from({ length: items }, (_, i) => `- ${para(`item${i}w`, 12)}`),
|
|
138
|
+
':::',
|
|
139
|
+
'::::',
|
|
140
|
+
'',
|
|
141
|
+
].join('\n');
|
|
142
|
+
/** The first piece of each length of introduction, and the second. */
|
|
143
|
+
const cuts = (items) => Array.from({ length: 60 }, (_, k) => 40 + k * 6).map((lead) => {
|
|
144
|
+
const doc = build(steps(lead, items), oneBox({ height: mm(70), overflow: { continueIn: 'next-page' } }));
|
|
145
|
+
const pages = composedPages(doc);
|
|
146
|
+
const piece = (p) => (p ? blocksOf(p, frameOn(p, 'caja')).filter((b) => b.type !== 'callout') : []);
|
|
147
|
+
return { lead, first: piece(pages[0]), rest: piece(pages[1]), doc };
|
|
148
|
+
});
|
|
149
|
+
it('never leaves a heading at the foot of a piece', () => {
|
|
150
|
+
let seen = 0;
|
|
151
|
+
for (const { first, rest } of cuts(5)) {
|
|
152
|
+
if (rest.length === 0)
|
|
153
|
+
continue;
|
|
154
|
+
seen++;
|
|
155
|
+
expect(first[first.length - 1].type).not.toBe('heading');
|
|
156
|
+
}
|
|
157
|
+
expect(seen).toBeGreaterThan(10);
|
|
158
|
+
});
|
|
159
|
+
it('leaves at least two items of a list on each side of a cut between items', () => {
|
|
160
|
+
let between = 0;
|
|
161
|
+
for (const { first, rest } of cuts(5)) {
|
|
162
|
+
const before = first.filter((b) => b.type === 'listItem').length;
|
|
163
|
+
const after = rest.filter((b) => b.type === 'listItem').length;
|
|
164
|
+
// A cut inside an item counts it on both sides.
|
|
165
|
+
const split = before > 0 && after > 0 && before + after > 5;
|
|
166
|
+
if (before === 0 || after === 0 || split)
|
|
167
|
+
continue;
|
|
168
|
+
between++;
|
|
169
|
+
expect(before).toBeGreaterThanOrEqual(2);
|
|
170
|
+
expect(after).toBeGreaterThanOrEqual(2);
|
|
171
|
+
}
|
|
172
|
+
expect(between).toBeGreaterThan(0);
|
|
173
|
+
});
|
|
174
|
+
it("a short list under shortListSplit: 'avoid' moves whole", () => {
|
|
175
|
+
for (const lead of Array.from({ length: 40 }, (_, k) => 40 + k * 8)) {
|
|
176
|
+
const doc = build(steps(lead, 3), oneBox({ height: mm(70), overflow: { continueIn: 'next-page' } }), { bodyText: { ...BASE.bodyText, shortListSplit: 'avoid' } });
|
|
177
|
+
const pages = composedPages(doc);
|
|
178
|
+
if (pages.length < 2)
|
|
179
|
+
continue;
|
|
180
|
+
const items = (p) => blocksOf(p, frameOn(p, 'caja')).filter((b) => b.type === 'listItem').length;
|
|
181
|
+
const a = items(pages[0]);
|
|
182
|
+
const b = items(pages[1]);
|
|
183
|
+
// Whole on one side, or cut inside one item.
|
|
184
|
+
expect(a === 0 || b === 0 || a + b === 4).toBe(true);
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
describe('an activity sheet whose last box goes on (#912)', () => {
|
|
189
|
+
const at = (to, edge, y = 0) => ({ anchor: { to, edge }, offset: { y: mm(y) } });
|
|
190
|
+
const ruled = (frame, lines) => Array.from({ length: lines }, (_, i) => ({ kind: 'rule', id: `${frame}-${i + 1}`, direction: 'horizontal', thickness: { value: 0.75, unit: 'pt' }, placement: { ...at(`#${frame}`, 'top-left', 8 * (i + 1) - 1), size: { width: mm(180) } } }));
|
|
191
|
+
/** The sheet: a kicker, the running text, three boxes in a stack with
|
|
192
|
+
* answer lines under the first and the last. */
|
|
193
|
+
const FICHA = {
|
|
194
|
+
id: 'ficha',
|
|
195
|
+
header: false,
|
|
196
|
+
decoration: { elements: [{ kind: 'text', id: 'tema', content: '{attr.tema}', fontSize: { value: 9, unit: 'pt' }, placement: at('container', 'top-left') }, ...ruled('lineas-1', 3), ...ruled('lineas-3', 2)] },
|
|
197
|
+
frames: [
|
|
198
|
+
{ name: 'texto', flow: true, width: mm(180), placement: at('container', 'top-left', 6) },
|
|
199
|
+
{ name: 'act-1', style: 'caja-azul', width: mm(180), minHeight: mm(22), placement: at('#texto', 'below', 6) },
|
|
200
|
+
{ name: 'lineas-1', optional: true, width: mm(180), height: mm(24), minHeight: mm(24) },
|
|
201
|
+
{ name: 'act-2', style: 'caja-azul', width: mm(180), minHeight: mm(22) },
|
|
202
|
+
{ name: 'act-3', style: 'caja-azul', width: mm(180), minHeight: mm(22), overflow: { continueIn: 'next-page' } },
|
|
203
|
+
{ name: 'lineas-3', optional: true, width: mm(180), height: mm(16), minHeight: mm(16) },
|
|
204
|
+
],
|
|
205
|
+
groups: [{ name: 'actividades', kind: 'stack', gap: mm(4.5), frames: ['act-1', 'lineas-1', 'act-2', 'act-3', 'lineas-3'] }],
|
|
206
|
+
};
|
|
207
|
+
const sheet = (first, last) => [
|
|
208
|
+
'::::page{template="ficha" tema="Unidad 3 · Ficha 1"}',
|
|
209
|
+
para('texto', 120), '',
|
|
210
|
+
':::frame{slot="act-1" label="1 · Lee"}', para('uno', first), ':::', '',
|
|
211
|
+
':::frame{slot="act-2" label="2 · Completa"}', para('dos', 60), ':::', '',
|
|
212
|
+
':::frame{slot="act-3" label="3 · Dibuja"}', para('tres', last), ':::', '',
|
|
213
|
+
'::::', ''
|
|
214
|
+
].join('\n');
|
|
215
|
+
const decoBoxes = (p) => p.composed.decoration?.blocks ?? [];
|
|
216
|
+
it('the answer lines go with the end of the box to the added page, and keep their size there', () => {
|
|
217
|
+
const doc = build(sheet(900, 700), [FICHA]);
|
|
218
|
+
const [first, added] = composedPages(doc);
|
|
219
|
+
expect(added).toBeDefined();
|
|
220
|
+
expect(frameOn(first, 'act-3').continuesTo).toBe('cp0:act-3~1');
|
|
221
|
+
// On the first page the box runs to the foot of the area, the lines left with the rest.
|
|
222
|
+
expect(frameOn(first, 'lineas-3').collapsed).toBe(true);
|
|
223
|
+
expect(frameOn(first, 'lineas-1').collapsed).toBeUndefined();
|
|
224
|
+
// On the added page, under the rest of the box, at their size.
|
|
225
|
+
const lines = frameOn(added, 'lineas-3');
|
|
226
|
+
const rest = frameOn(added, 'act-3');
|
|
227
|
+
expect(lines.collapsed).toBeUndefined();
|
|
228
|
+
expect(lines.rect.height).toBeCloseTo(16 * MM, 3);
|
|
229
|
+
expect(lines.rect.y).toBeGreaterThan(rest.rect.y + rest.rect.height);
|
|
230
|
+
// Their rules are drawn on the added page only; the first sheet's
|
|
231
|
+
// answer lines stay where they were, and not on the added page.
|
|
232
|
+
const rulesOn = (p) => decoBoxes(p).filter((b) => b.kind === 'rule').length;
|
|
233
|
+
expect(rulesOn(first)).toBe(3);
|
|
234
|
+
expect(rulesOn(added)).toBe(2);
|
|
235
|
+
for (const b of decoBoxes(added).filter((d) => d.kind === 'rule'))
|
|
236
|
+
expect(b.bbox.y).toBeGreaterThan(lines.rect.y);
|
|
237
|
+
expect(warningsOf(doc, 'frameOverflow')).toEqual([]);
|
|
238
|
+
});
|
|
239
|
+
it('the rest of the box starts where its group starts, clear of the kicker', () => {
|
|
240
|
+
const doc = build(sheet(900, 700), [FICHA]);
|
|
241
|
+
const added = composedPages(doc)[1];
|
|
242
|
+
const kicker = decoBoxes(added).find((b) => b.kind === 'text');
|
|
243
|
+
expect(kicker).toBeDefined();
|
|
244
|
+
const rest = frameOn(added, 'act-3');
|
|
245
|
+
expect(rest.rect.y).toBeGreaterThanOrEqual(kicker.bbox.y + kicker.bbox.height);
|
|
246
|
+
// Where the template puts its group: under the running text's place.
|
|
247
|
+
expect(rest.rect.y).toBeCloseTo(frameOn(added, 'texto').rect.y + 6 * MM, 3);
|
|
248
|
+
// A click on the kicker comes back to it.
|
|
249
|
+
const line = kicker.lines[0];
|
|
250
|
+
const hit = sourceAt(doc, added.index, kicker.bbox.x + line.xOffset + line.width / 2, kicker.bbox.y + kicker.bbox.height / 2)[0];
|
|
251
|
+
expect(hit?.id).toMatch(/^cp0:decoration:tema(@|$)/);
|
|
252
|
+
});
|
|
253
|
+
it('the answer lines keep their size on whichever page they land: the box goes on rather than squeeze them', () => {
|
|
254
|
+
let wholeMoves = 0;
|
|
255
|
+
for (let first = 560; first <= 900; first += 10) {
|
|
256
|
+
const doc = build(sheet(first, 150), [FICHA]);
|
|
257
|
+
const pages = composedPages(doc);
|
|
258
|
+
const lines = pages.map((p) => frameOn(p, 'lineas-3')).filter((f) => !f.collapsed);
|
|
259
|
+
expect(lines, `first ${first}`).toHaveLength(1);
|
|
260
|
+
expect(lines[0].rect.height, `first ${first}`).toBeCloseTo(16 * MM, 3);
|
|
261
|
+
// A box with no room for its lines under it goes on whole with them.
|
|
262
|
+
if (pages.length > 1 && frameOn(pages[0], 'act-3').blockIds.length === 0) {
|
|
263
|
+
wholeMoves++;
|
|
264
|
+
// With its lines, it takes no room here.
|
|
265
|
+
if (frameOn(pages[0], 'lineas-3').collapsed)
|
|
266
|
+
expect(frameOn(pages[0], 'act-3').rect.height).toBe(0);
|
|
267
|
+
expect(overlayOf(blocksOf(pages[1], frameOn(pages[1], 'act-3'))[0])).toContain('3 · Dibuja');
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
expect(wholeMoves).toBeGreaterThan(0);
|
|
271
|
+
});
|
|
272
|
+
it('a box none of whose text fits on the page goes on whole: no tab and mark over an empty piece', () => {
|
|
273
|
+
// A first box long enough to push the last one to the foot.
|
|
274
|
+
let checked = 0;
|
|
275
|
+
for (const n of [1250, 1300, 1350, 1400, 1450]) {
|
|
276
|
+
const doc = build(sheet(n, 300), [FICHA]);
|
|
277
|
+
const [first, added] = composedPages(doc);
|
|
278
|
+
if (!added)
|
|
279
|
+
continue;
|
|
280
|
+
const piece = frameOn(first, 'act-3');
|
|
281
|
+
const blocks = blocksOf(first, piece);
|
|
282
|
+
if (blocks.length > 0) {
|
|
283
|
+
// A piece holds text.
|
|
284
|
+
expect(textOf(blocks).length).toBeGreaterThan(0);
|
|
285
|
+
continue;
|
|
286
|
+
}
|
|
287
|
+
checked++;
|
|
288
|
+
expect(piece.continuesTo).toBe('cp0:act-3~1');
|
|
289
|
+
// The whole box, with its tab, on the added page.
|
|
290
|
+
const whole = blocksOf(added, frameOn(added, 'act-3'));
|
|
291
|
+
expect(overlayOf(whole[0])).toContain('3 · Dibuja');
|
|
292
|
+
expect(textOf(whole)).toMatch(/^tres0 /);
|
|
293
|
+
}
|
|
294
|
+
expect(checked).toBeGreaterThan(0);
|
|
295
|
+
});
|
|
296
|
+
});
|
|
297
|
+
describe('a story that jumps to a later page (#917)', () => {
|
|
298
|
+
const top = { anchor: { to: 'container', edge: 'top-left' } };
|
|
299
|
+
const ARTICULO = {
|
|
300
|
+
id: 'articulo',
|
|
301
|
+
header: false,
|
|
302
|
+
frames: [{ name: 'cuerpo', style: 'caja-azul', flow: true, width: mm(186), height: mm(90), placement: top, overflow: { continueIn: 'page:{attr.sigue}', mark: 'Sigue en la página {page}', fromMark: 'Viene de la página {page}' }, fit: { shrinkText: false } }],
|
|
303
|
+
};
|
|
304
|
+
const OTRA = { id: 'otra', header: false, frames: [{ name: 'texto', flow: true, width: mm(186), placement: top }] };
|
|
305
|
+
const SALTO = {
|
|
306
|
+
id: 'salto',
|
|
307
|
+
header: false,
|
|
308
|
+
frames: [
|
|
309
|
+
{ name: 'breve', flow: true, width: mm(186), height: mm(40), placement: top },
|
|
310
|
+
{ name: 'resto', style: 'caja-azul', width: mm(186), placement: { anchor: { to: '#breve', edge: 'below' }, offset: { y: mm(10) } } },
|
|
311
|
+
{ name: 'vacio', optional: true, width: mm(40), height: mm(20), placement: { anchor: { to: 'container', edge: 'bottom-left' } } },
|
|
312
|
+
],
|
|
313
|
+
};
|
|
314
|
+
const TEMPLATES = [ARTICULO, OTRA, SALTO];
|
|
315
|
+
const book = (sigue, order = 'after') => {
|
|
316
|
+
const art = ['::::page{template="articulo" sigue="' + sigue + '"}', para('art', 900), '::::', ''];
|
|
317
|
+
const other = ['::::page{template="otra"}', para('otra', 200), '::::', ''];
|
|
318
|
+
const jump = ['::::page{template="salto" id="p-salto"}', para('breve', 60), '::::', ''];
|
|
319
|
+
return (order === 'after' ? [...art, ...other, ...jump] : [...jump, ...art, ...other]).join('\n');
|
|
320
|
+
};
|
|
321
|
+
it('goes on in the frame the later page leaves empty, past the pages between', () => {
|
|
322
|
+
const doc = build(book('p-salto'), TEMPLATES);
|
|
323
|
+
const pages = composedPages(doc);
|
|
324
|
+
expect(pages.map((p) => p.composed.template)).toEqual(['articulo', 'otra', 'salto']);
|
|
325
|
+
const [first, , jumpPage] = pages;
|
|
326
|
+
const from = frameOn(first, 'cuerpo');
|
|
327
|
+
const to = frameOn(jumpPage, 'resto');
|
|
328
|
+
expect(to.id).toBe('cp2:resto');
|
|
329
|
+
expect(from.continuesTo).toBe('cp2:resto');
|
|
330
|
+
expect(to.continuedFrom).toBe('cp0:cuerpo');
|
|
331
|
+
expect(first.composed.log).toContainEqual({ frame: 'cuerpo', kind: 'continued', toPage: jumpPage.index, toFrame: 'cp2:resto' });
|
|
332
|
+
// The page's own content stays where it was.
|
|
333
|
+
expect(textOf(blocksOf(jumpPage, frameOn(jumpPage, 'breve')))).toMatch(/^breve0 /);
|
|
334
|
+
expect(frameOn(jumpPage, 'vacio').blockIds).toEqual([]);
|
|
335
|
+
// Every word of the article once, across the two pages.
|
|
336
|
+
const all = `${textOf(blocksOf(first, from))} ${textOf(blocksOf(jumpPage, to))}`;
|
|
337
|
+
for (const w of ['art0 ', 'art450 ', 'art899'])
|
|
338
|
+
expect(count(all, w)).toBe(1);
|
|
339
|
+
expect(warningsOf(doc, 'frameOverflow', 'continueTargetMissing')).toEqual([]);
|
|
340
|
+
// The pieces are one box.
|
|
341
|
+
expect(blocksOf(jumpPage, to)[0].containerId).toBe(blocksOf(first, from)[0].containerId);
|
|
342
|
+
});
|
|
343
|
+
it('the frame a story jumps to is not reported empty; another empty frame is', () => {
|
|
344
|
+
const strict = { ...SALTO, frames: SALTO.frames.map((f) => (f.name === 'vacio' ? { ...f, optional: false } : f)) };
|
|
345
|
+
const doc = build(book('p-salto'), [ARTICULO, OTRA, strict]);
|
|
346
|
+
expect(warningsOf(doc, 'slotEmpty').map((w) => w.frame)).toEqual(['vacio']);
|
|
347
|
+
});
|
|
348
|
+
it('marks say where the story goes on and where it comes from, with the printed page numbers', () => {
|
|
349
|
+
const doc = build(book('p-salto'), TEMPLATES);
|
|
350
|
+
const [first, , jumpPage] = composedPages(doc);
|
|
351
|
+
const sent = overlayOf(blocksOf(first, frameOn(first, 'cuerpo'))[0]);
|
|
352
|
+
expect(sent).toContain(`Sigue en la página ${jumpPage.pageLabel}`);
|
|
353
|
+
const got = overlayOf(blocksOf(jumpPage, frameOn(jumpPage, 'resto'))[0]);
|
|
354
|
+
expect(got).toContain(`Viene de la página ${first.pageLabel}`);
|
|
355
|
+
});
|
|
356
|
+
it("'page:<id>#<frame>' names the frame that takes it", () => {
|
|
357
|
+
const named = { ...ARTICULO, frames: [{ ...ARTICULO.frames[0], overflow: { continueIn: 'page:{attr.sigue}#vacio' } }] };
|
|
358
|
+
const doc = build(book('p-salto'), [named, OTRA, SALTO]);
|
|
359
|
+
const jumpPage = composedPages(doc)[2];
|
|
360
|
+
expect(frameOn(jumpPage, 'vacio').continuedFrom).toBe('cp0:cuerpo');
|
|
361
|
+
expect(frameOn(jumpPage, 'resto').blockIds).toEqual([]);
|
|
362
|
+
});
|
|
363
|
+
it('what the frame there cannot hold goes on on a page added after it', () => {
|
|
364
|
+
const small = { ...SALTO, frames: SALTO.frames.map((f) => (f.name === 'resto' ? { ...f, height: mm(60) } : f)) };
|
|
365
|
+
const doc = buildDocument({ markdown: book('p-salto').replace(para('art', 900), para('art', 2400)), resources: [] }, { ...BASE, pageTemplates: [ARTICULO, OTRA, small] }, createMeasurementCache());
|
|
366
|
+
const pages = composedPages(doc);
|
|
367
|
+
expect(pages.map((p) => p.composed.template).slice(0, 3)).toEqual(['articulo', 'otra', 'salto']);
|
|
368
|
+
expect(pages.length).toBeGreaterThanOrEqual(4);
|
|
369
|
+
const added = pages[3];
|
|
370
|
+
expect(added.composed.continuationOf).toBe(pages[2].index);
|
|
371
|
+
expect(frameOn(pages[2], 'resto').continuesTo).toBe(frameOn(added, 'resto').id);
|
|
372
|
+
expect(frameOn(added, 'resto').id).toBe('cp2:resto~1');
|
|
373
|
+
const all = pages.flatMap((p) => p.composed.frames.filter((f) => f.name === 'cuerpo' || f.name === 'resto').map((f) => textOf(blocksOf(p, f)))).join(' ');
|
|
374
|
+
for (const w of ['art0 ', 'art1200 ', 'art2399'])
|
|
375
|
+
expect(count(all, w)).toBe(1);
|
|
376
|
+
});
|
|
377
|
+
it('a page id no later fence has: the rest goes on on the next page, and a warning says so', () => {
|
|
378
|
+
for (const [sigue, order, before] of [['nada', 'after', false], ['p-salto', 'before', true]]) {
|
|
379
|
+
const doc = build(book(sigue, order), TEMPLATES);
|
|
380
|
+
const ws = warningsOf(doc, 'continueTargetMissing');
|
|
381
|
+
expect(ws, `${sigue} ${order}`).toHaveLength(1);
|
|
382
|
+
expect(ws[0]).toMatchObject({ kind: 'continueTargetMissing', template: 'articulo', frame: 'cuerpo', target: sigue, ...(before ? { before: true } : {}) });
|
|
383
|
+
const pages = composedPages(doc);
|
|
384
|
+
const at = pages.findIndex((p) => p.composed.template === 'articulo');
|
|
385
|
+
expect(pages[at + 1].composed.continuationOf).toBe(pages[at].index);
|
|
386
|
+
}
|
|
387
|
+
});
|
|
388
|
+
});
|
|
389
|
+
//# sourceMappingURL=continuationRules.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"continuationRules.test.js","sourceRoot":"","sources":["../../../src/__tests__/composed/continuationRules.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coverImages.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/composed/coverImages.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { buildDocument } from '../../pipeline/build';
|
|
3
|
+
import { createMeasurementCache } from '../../measure';
|
|
4
|
+
import { renderToHtml } from '../../html-backend';
|
|
5
|
+
import { placedImageResolutions } from '../../preflight';
|
|
6
|
+
// Deterministic text measurement stub (no DOM in the node test env).
|
|
7
|
+
class StubCtx {
|
|
8
|
+
font = '';
|
|
9
|
+
measureText(s) {
|
|
10
|
+
return { width: s.length * 7 };
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
globalThis.OffscreenCanvas = class {
|
|
14
|
+
getContext() {
|
|
15
|
+
return new StubCtx();
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
const mm = (value) => ({ value, unit: 'mm' });
|
|
19
|
+
const DPI = 300;
|
|
20
|
+
const MM = DPI / 25.4;
|
|
21
|
+
const PAGE = {
|
|
22
|
+
page: { width: mm(200), height: mm(260), dpi: DPI, margins: { top: mm(20), bottom: mm(20), left: mm(20), right: mm(20) } },
|
|
23
|
+
headings: { balancing: { enabled: false }, levels: [{ level: 1, breakBefore: { enabled: false } }] },
|
|
24
|
+
};
|
|
25
|
+
/** A landscape photograph, twice as wide as tall. */
|
|
26
|
+
const photo = (extra = {}) => ({ id: 'foto', typeId: 'figure', kind: 'bitmap', caption: '', altText: 'A harbour at dawn', createdAt: 0, updatedAt: 0, bitmap: { fileId: 'f', format: 'jpeg', width: 4000, height: 2000 }, ...extra });
|
|
27
|
+
/** The photo in a square box of 100 mm. */
|
|
28
|
+
const hero = (extra = {}) => ({
|
|
29
|
+
id: 'hero',
|
|
30
|
+
frames: [{ name: 'texto', flow: true, placement: { anchor: { to: 'container', edge: 'bottom-left' } }, height: mm(20) }],
|
|
31
|
+
decoration: { elements: [{ kind: 'image', id: 'foto', resourceId: 'foto', placement: { anchor: { to: 'page', edge: 'top-left' }, size: { width: mm(100), height: mm(100) } }, ...extra }] },
|
|
32
|
+
});
|
|
33
|
+
const build = (tpl, resources = [photo()]) => buildDocument({ markdown: '::::page{template="hero"}\n\nA line.\n\n::::', resources }, { ...PAGE, pageTemplates: [tpl] }, createMeasurementCache());
|
|
34
|
+
const composedPage = (doc) => doc.pages.find((p) => p.composed);
|
|
35
|
+
const image = (doc) => composedPage(doc).composed.decoration.blocks.find((b) => b.kind === 'image');
|
|
36
|
+
describe('design images that cover their box (#923)', () => {
|
|
37
|
+
it('contain, the default, fits the whole picture inside the box', () => {
|
|
38
|
+
const b = image(build(hero()));
|
|
39
|
+
expect(b.crop).toBeUndefined();
|
|
40
|
+
expect(b.bbox.width).toBeCloseTo(100 * MM, 3);
|
|
41
|
+
expect(b.bbox.height).toBeCloseTo(50 * MM, 3);
|
|
42
|
+
});
|
|
43
|
+
it('cover fills the box and crops the sides, centred', () => {
|
|
44
|
+
const b = image(build(hero({ fit: 'cover' })));
|
|
45
|
+
expect(b.bbox).toMatchObject({ x: 0, y: 0 });
|
|
46
|
+
expect(b.bbox.width).toBeCloseTo(100 * MM, 3);
|
|
47
|
+
expect(b.bbox.height).toBeCloseTo(100 * MM, 3);
|
|
48
|
+
expect(b.crop.width).toBeCloseTo(0.5, 6);
|
|
49
|
+
expect(b.crop.height).toBeCloseTo(1, 6);
|
|
50
|
+
expect(b.crop.x).toBeCloseTo(0.25, 6);
|
|
51
|
+
});
|
|
52
|
+
it('a focus point moves the window; the safe area stays in view', () => {
|
|
53
|
+
expect(image(build(hero({ fit: 'cover', focus: { x: 0.9, y: 0.5 } }))).crop.x).toBeCloseTo(0.5, 6);
|
|
54
|
+
expect(image(build(hero({ fit: 'cover', focus: { x: 0.1, y: 0.5 } }))).crop.x).toBeCloseTo(0, 6);
|
|
55
|
+
// The subject on the left third: the crop keeps it.
|
|
56
|
+
const kept = image(build(hero({ fit: 'cover', focus: { x: 0.9, y: 0.5 } }), [photo({ safeArea: { x: 0.05, y: 0, width: 0.3, height: 1 } })])).crop;
|
|
57
|
+
expect(kept.x).toBeLessThanOrEqual(0.05 + 1e-6);
|
|
58
|
+
expect(kept.x + kept.width).toBeGreaterThanOrEqual(0.35 - 1e-6);
|
|
59
|
+
// A safe area wider than the box allows: the smallest window holding
|
|
60
|
+
// it, the box not filled across.
|
|
61
|
+
const wide = image(build(hero({ fit: 'cover' }), [photo({ safeArea: { x: 0.1, y: 0, width: 0.8, height: 1 } })]));
|
|
62
|
+
expect(wide.crop.width).toBeCloseTo(0.8, 6);
|
|
63
|
+
expect(wide.bbox.height).toBeLessThan(100 * MM - 1);
|
|
64
|
+
});
|
|
65
|
+
it('the HTML clips the whole picture to the box; preflight reads the share shown', () => {
|
|
66
|
+
const doc = build(hero({ fit: 'cover' }));
|
|
67
|
+
const html = renderToHtml(doc, { resourceImageUrl: () => 'photo.jpg' });
|
|
68
|
+
expect(html).toMatch(/overflow:hidden;"><img src="photo\.jpg"[^>]*width:2362\.\d+px;height:1181\.\d+px/);
|
|
69
|
+
// The share shown, 2000 × 2000 px of the picture, across 100 mm: 508 ppi
|
|
70
|
+
// both ways (the whole picture's 4000 px over the box would read 1016).
|
|
71
|
+
const [placed] = placedImageResolutions(doc, { resources: [photo()] });
|
|
72
|
+
expect(placed.ppi).toBeCloseTo(2000 / (100 / 25.4), 0);
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
//# sourceMappingURL=coverImages.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coverImages.test.js","sourceRoot":"","sources":["../../../src/__tests__/composed/coverImages.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decorationSize.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/composed/decorationSize.test.ts"],"names":[],"mappings":""}
|