@ploaness/config 1.12.0 → 1.14.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/a11y.d.ts +13 -5
- package/dist/a11y.d.ts.map +1 -1
- package/dist/a11y.js +20 -11
- package/dist/a11y.js.map +1 -1
- package/dist/clock-preload.d.ts +2 -0
- package/dist/clock-preload.d.ts.map +1 -0
- package/dist/clock-preload.js +37 -0
- package/dist/clock-preload.js.map +1 -0
- package/dist/eslint-library.d.ts.map +1 -1
- package/dist/eslint-library.js +6 -1
- package/dist/eslint-library.js.map +1 -1
- package/dist/eslint-runtime.d.ts +11 -0
- package/dist/eslint-runtime.d.ts.map +1 -0
- package/dist/eslint-runtime.js +68 -0
- package/dist/eslint-runtime.js.map +1 -0
- package/dist/eslint.d.ts.map +1 -1
- package/dist/eslint.js +6 -1
- package/dist/eslint.js.map +1 -1
- package/dist/layout.d.ts +34 -16
- package/dist/layout.d.ts.map +1 -1
- package/dist/layout.js +228 -56
- package/dist/layout.js.map +1 -1
- package/dist/payload-view.d.ts +16 -0
- package/dist/payload-view.d.ts.map +1 -0
- package/dist/payload-view.js +35 -0
- package/dist/payload-view.js.map +1 -0
- package/dist/playwright.d.ts.map +1 -1
- package/dist/playwright.js +115 -12
- package/dist/playwright.js.map +1 -1
- package/dist/scanner.d.ts +99 -0
- package/dist/scanner.d.ts.map +1 -0
- package/dist/scanner.js +278 -0
- package/dist/scanner.js.map +1 -0
- package/dist/settle.d.ts +8 -6
- package/dist/settle.d.ts.map +1 -1
- package/dist/settle.js +55 -42
- package/dist/settle.js.map +1 -1
- package/dist/sweep-disclosures.d.ts +10 -0
- package/dist/sweep-disclosures.d.ts.map +1 -0
- package/dist/sweep-disclosures.js +179 -0
- package/dist/sweep-disclosures.js.map +1 -0
- package/dist/sweep-discovery.d.ts +15 -0
- package/dist/sweep-discovery.d.ts.map +1 -0
- package/dist/sweep-discovery.js +336 -0
- package/dist/sweep-discovery.js.map +1 -0
- package/dist/sweep-interaction.d.ts +19 -0
- package/dist/sweep-interaction.d.ts.map +1 -0
- package/dist/sweep-interaction.js +351 -0
- package/dist/sweep-interaction.js.map +1 -0
- package/dist/sweep-queue.d.ts +24 -0
- package/dist/sweep-queue.d.ts.map +1 -0
- package/dist/sweep-queue.js +56 -0
- package/dist/sweep-queue.js.map +1 -0
- package/dist/sweep-reflow.d.ts +17 -0
- package/dist/sweep-reflow.d.ts.map +1 -0
- package/dist/sweep-reflow.js +210 -0
- package/dist/sweep-reflow.js.map +1 -0
- package/dist/sweep-resting.d.ts +25 -0
- package/dist/sweep-resting.d.ts.map +1 -0
- package/dist/sweep-resting.js +98 -0
- package/dist/sweep-resting.js.map +1 -0
- package/dist/sweep-shared.d.ts +353 -0
- package/dist/sweep-shared.d.ts.map +1 -0
- package/dist/sweep-shared.js +434 -0
- package/dist/sweep-shared.js.map +1 -0
- package/dist/sweep.d.ts +14 -0
- package/dist/sweep.d.ts.map +1 -0
- package/dist/sweep.js +157 -0
- package/dist/sweep.js.map +1 -0
- package/dist/vitest-core.d.ts +1 -1
- package/dist/vitest-core.js +1 -1
- package/dist/vitest-library.d.ts.map +1 -1
- package/dist/vitest-library.js +2 -1
- package/dist/vitest-library.js.map +1 -1
- package/package.json +10 -2
package/dist/layout.js
CHANGED
|
@@ -1,19 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
//
|
|
3
|
-
// Every rule lives in `@ploaness/governance`, which judges a plain snapshot. This module is the one piece
|
|
4
|
-
// that has to run inside the browser, and the one place the harness's viewports and the project's
|
|
5
|
-
// stricter settings meet a page.
|
|
6
|
-
//
|
|
7
|
-
// WHY THE PAGE CODE IS ASSEMBLED FROM SOURCE TEXT. Playwright ships a page function to the browser as
|
|
8
|
-
// its own source, so it can reach nothing at module scope. One function holding the whole measurement
|
|
9
|
-
// would pass the callable cap several times over. Each step is therefore a top-level function of its
|
|
10
|
-
// own, and `IN_PAGE_SOURCE` joins their texts into one expression that hands each step the others as
|
|
11
|
-
// `tools`. A step names another only through that parameter, never directly, because in the page no
|
|
12
|
-
// other binding exists.
|
|
13
|
-
import { expect } from '@playwright/test';
|
|
14
|
-
import { findLayoutDefects, layoutViewportsWith, } from '@ploaness/governance';
|
|
1
|
+
import { layoutViewportsWith, } from '@ploaness/governance';
|
|
15
2
|
import { projectSettings } from './project-settings.js';
|
|
16
|
-
import { settleForScan } from './settle.js';
|
|
17
3
|
/** The viewports every layout scan runs at, the harness's own first. */
|
|
18
4
|
export const LAYOUT_SCAN_VIEWPORTS = layoutViewportsWith(projectSettings.layoutViewports);
|
|
19
5
|
const isClosedDetails = (element) => element.tagName.toLowerCase() === 'details' && element.getAttribute('open') === null;
|
|
@@ -27,6 +13,12 @@ const isHiddenByDisclosure = (element, tools) => {
|
|
|
27
13
|
const isClosedBody = tools.isClosedDetails(parent) && parent.querySelector(':scope > summary') !== element;
|
|
28
14
|
return isClosedBody || tools.isHiddenByDisclosure(parent, tools);
|
|
29
15
|
};
|
|
16
|
+
// Outside a marked view only the ancestors that hold it are measured; on a page with no mark, every
|
|
17
|
+
// element is. The attribute is spelt out because this runs in the page: `payload-view.ts` sets it.
|
|
18
|
+
const isOutsideView = (element) => {
|
|
19
|
+
const roots = Array.from(document.querySelectorAll('[data-ploaness-view]'));
|
|
20
|
+
return (roots.length > 0 && !roots.some((root) => root.contains(element) || element.contains(root)));
|
|
21
|
+
};
|
|
30
22
|
const roundRects = (rects) => Array.from(rects, (rect) => ({
|
|
31
23
|
left: Math.round(rect.left + scrollX),
|
|
32
24
|
top: Math.round(rect.top + scrollY),
|
|
@@ -78,13 +70,20 @@ const labelOf = (element, tools) => {
|
|
|
78
70
|
.trim();
|
|
79
71
|
return text.length === 0 ? `${tag}${name}` : `${tag}${name} "${text.slice(0, maxText)}"`;
|
|
80
72
|
};
|
|
81
|
-
|
|
73
|
+
// What decides how an element is painted against the others: its stacking order and any turn.
|
|
74
|
+
const paintOrderOf = (style) => ({
|
|
75
|
+
zIndex: style.getPropertyValue('z-index'),
|
|
76
|
+
transform: style.getPropertyValue('transform'),
|
|
77
|
+
rotate: style.getPropertyValue('rotate'),
|
|
78
|
+
});
|
|
79
|
+
const describe = (element, context, tools) => {
|
|
82
80
|
const style = getComputedStyle(element);
|
|
83
81
|
const read = (property) => style.getPropertyValue(property);
|
|
82
|
+
const attribute = (name) => element.getAttribute(name) ?? '';
|
|
84
83
|
const isClipping = ['hidden', 'clip'].some((value) => [read('overflow-x'), read('overflow-y')].includes(value));
|
|
85
84
|
return {
|
|
86
|
-
index,
|
|
87
|
-
parent,
|
|
85
|
+
index: context.index,
|
|
86
|
+
parent: context.parent,
|
|
88
87
|
label: tools.labelOf(element, tools),
|
|
89
88
|
tag: element.tagName.toLowerCase(),
|
|
90
89
|
rects: tools.roundRects(element.getClientRects()),
|
|
@@ -94,6 +93,7 @@ const describe = (element, index, parent, tools) => {
|
|
|
94
93
|
display: read('display'),
|
|
95
94
|
visibility: read('visibility'),
|
|
96
95
|
position: read('position'),
|
|
96
|
+
...tools.paintOrderOf(style),
|
|
97
97
|
backgroundColor: read('background-color'),
|
|
98
98
|
backgroundImage: read('background-image'),
|
|
99
99
|
boxShadow: read('box-shadow'),
|
|
@@ -108,18 +108,128 @@ const describe = (element, index, parent, tools) => {
|
|
|
108
108
|
clientWidth: element.clientWidth,
|
|
109
109
|
scrollHeight: element.scrollHeight,
|
|
110
110
|
clientHeight: element.clientHeight,
|
|
111
|
-
title:
|
|
112
|
-
ariaLabel:
|
|
111
|
+
title: attribute('title'),
|
|
112
|
+
ariaLabel: attribute('aria-label'),
|
|
113
113
|
exemption: element.getAttribute('data-ploaness-layout') ?? undefined,
|
|
114
|
-
exemptionReason: (
|
|
114
|
+
exemptionReason: attribute('data-ploaness-layout-reason').trim(),
|
|
115
|
+
fontSize: Number(read('font-size').replace('px', '')) || 0,
|
|
116
|
+
fontFamily: read('font-family'),
|
|
117
|
+
media: tools.mediaOf(element, style, context.sources, tools),
|
|
118
|
+
};
|
|
119
|
+
};
|
|
120
|
+
// The space a replaced element reserves before its source arrives is the box the same element takes
|
|
121
|
+
// with no source at all. A shallow copy with every source removed takes the element's own slot while the
|
|
122
|
+
// element is out of layout, and is read and removed again in the same task, so nothing is painted. Laid
|
|
123
|
+
// out beside the element instead, a flex or grid row would share its space between the two.
|
|
124
|
+
const reservedBoxOf = (element) => {
|
|
125
|
+
const placeholder = element.cloneNode(false);
|
|
126
|
+
for (const source of ['src', 'srcset', 'poster', 'srcdoc', 'data']) {
|
|
127
|
+
placeholder.removeAttribute(source);
|
|
128
|
+
}
|
|
129
|
+
placeholder.removeAttribute('id');
|
|
130
|
+
placeholder.setAttribute('alt', '');
|
|
131
|
+
placeholder.setAttribute('aria-hidden', 'true');
|
|
132
|
+
const ownStyle = element.getAttribute('style');
|
|
133
|
+
placeholder.setAttribute('style', `${ownStyle ?? ''};visibility:hidden`);
|
|
134
|
+
element.setAttribute('style', `${ownStyle ?? ''};display:none`);
|
|
135
|
+
element.before(placeholder);
|
|
136
|
+
const measured = placeholder.getBoundingClientRect();
|
|
137
|
+
placeholder.remove();
|
|
138
|
+
if (ownStyle === null) {
|
|
139
|
+
element.removeAttribute('style');
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
element.setAttribute('style', ownStyle);
|
|
143
|
+
}
|
|
144
|
+
return measured;
|
|
145
|
+
};
|
|
146
|
+
const contentSizeOf = (box, style) => {
|
|
147
|
+
const pixels = (property) => Number(style.getPropertyValue(property).replace('px', '')) || 0;
|
|
148
|
+
const inset = (first, second) => pixels(`padding-${first}`) +
|
|
149
|
+
pixels(`padding-${second}`) +
|
|
150
|
+
pixels(`border-${first}-width`) +
|
|
151
|
+
pixels(`border-${second}-width`);
|
|
152
|
+
return {
|
|
153
|
+
contentWidth: Math.round(box.width - inset('left', 'right')),
|
|
154
|
+
contentHeight: Math.round(box.height - inset('top', 'bottom')),
|
|
155
|
+
};
|
|
156
|
+
};
|
|
157
|
+
// The source an element shows, and its pixel size: the file's own where it was decoded alone.
|
|
158
|
+
const loadedSourceOf = (element, sources) => {
|
|
159
|
+
const source = element.currentSrc ?? element.getAttribute('src') ?? '';
|
|
160
|
+
const file = sources.get(source) ?? {
|
|
161
|
+
width: element.naturalWidth ?? 0,
|
|
162
|
+
height: element.naturalHeight ?? 0,
|
|
163
|
+
};
|
|
164
|
+
return {
|
|
165
|
+
isVector: /\.svg(?:[?#]|$)|^data:image\/svg/iu.test(source),
|
|
166
|
+
naturalWidth: file.width,
|
|
167
|
+
naturalHeight: file.height,
|
|
168
|
+
};
|
|
169
|
+
};
|
|
170
|
+
const mediaOf = (element, style, sources, tools) => {
|
|
171
|
+
const tag = element.tagName.toLowerCase();
|
|
172
|
+
if (!['img', 'video', 'iframe', 'embed', 'object'].includes(tag)) {
|
|
173
|
+
return undefined;
|
|
174
|
+
}
|
|
175
|
+
const box = element.getBoundingClientRect();
|
|
176
|
+
const reserved = tools.reservedBoxOf(element);
|
|
177
|
+
return {
|
|
178
|
+
isComplete: tag !== 'img' || element.complete === true,
|
|
179
|
+
...tools.loadedSourceOf(element, sources),
|
|
180
|
+
...tools.contentSizeOf(box, style),
|
|
181
|
+
objectFit: style.getPropertyValue('object-fit'),
|
|
182
|
+
reservedWidth: Math.round(reserved.width),
|
|
183
|
+
reservedHeight: Math.round(reserved.height),
|
|
115
184
|
};
|
|
116
185
|
};
|
|
186
|
+
// An image chosen from a `srcset` reports its natural size divided by the density the browser assigned
|
|
187
|
+
// the candidate, which is the candidate's declared width over the slot `sizes` gives it. A server that
|
|
188
|
+
// will not enlarge a small original sends fewer pixels than the declared width, so that size understates
|
|
189
|
+
// the file. The same URL decoded by an image of its own, with no `srcset`, reports the file's pixels.
|
|
190
|
+
const sourceSizesOf = async () => {
|
|
191
|
+
const sources = [
|
|
192
|
+
...new Set(Array.from(document.body.querySelectorAll('img'))
|
|
193
|
+
.filter((image) => image.getAttribute('srcset') !== null || image.parentElement?.tagName.toLowerCase() === 'picture')
|
|
194
|
+
.map((image) => image.currentSrc ?? '')
|
|
195
|
+
.filter((source) => source.length > 0)),
|
|
196
|
+
];
|
|
197
|
+
const sized = await Promise.all(sources.map(async (source) => {
|
|
198
|
+
const probe = new Image();
|
|
199
|
+
probe.setAttribute('src', source);
|
|
200
|
+
try {
|
|
201
|
+
await probe.decode();
|
|
202
|
+
return [source, { width: probe.naturalWidth, height: probe.naturalHeight }];
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
return undefined;
|
|
206
|
+
}
|
|
207
|
+
}));
|
|
208
|
+
return new Map(sized.filter((entry) => entry !== undefined));
|
|
209
|
+
};
|
|
210
|
+
// The width sweep measures only geometry, so it skips the media placeholders and the font set.
|
|
211
|
+
const noMedia = () => undefined;
|
|
212
|
+
const noSourceSizes = () => Promise.resolve(new Map());
|
|
213
|
+
const noFontFaces = () => [];
|
|
214
|
+
const fontFacesOf = () => Array.from(document.fonts ?? [], (face) => ({
|
|
215
|
+
family: face.family,
|
|
216
|
+
status: face.status,
|
|
217
|
+
weight: face.weight,
|
|
218
|
+
style: face.style,
|
|
219
|
+
}));
|
|
117
220
|
// The element list in document order, from `<body>` down. An SVG's own drawing is not layout: the
|
|
118
|
-
// `<svg>` element is measured and what it draws inside is not.
|
|
119
|
-
|
|
221
|
+
// `<svg>` element is measured and what it draws inside is not. Shared by the measurement and by the
|
|
222
|
+
// outline a failure screenshot draws, so a node index names the same element in both.
|
|
223
|
+
const measuredElements = (tools) => {
|
|
120
224
|
const svgNamespace = 'http://www.w3.org/2000/svg';
|
|
121
|
-
|
|
122
|
-
!tools.isHiddenByDisclosure(element, tools)
|
|
225
|
+
return [document.body, ...Array.from(document.body.querySelectorAll('*'))].filter((element) => (element.namespaceURI !== svgNamespace || element.parentElement?.namespaceURI !== svgNamespace) &&
|
|
226
|
+
!tools.isHiddenByDisclosure(element, tools) &&
|
|
227
|
+
!tools.isOutsideView(element));
|
|
228
|
+
};
|
|
229
|
+
const measureDocument = async (tools) => {
|
|
230
|
+
// Decoded first, so the measurement below runs in one task with nothing awaited inside it.
|
|
231
|
+
const sources = await tools.sourceSizesOf();
|
|
232
|
+
const elements = tools.measuredElements(tools);
|
|
123
233
|
const positions = new Map(elements.map((element, index) => [element, index]));
|
|
124
234
|
const root = document.documentElement;
|
|
125
235
|
return {
|
|
@@ -130,56 +240,118 @@ const measureDocument = (tools) => {
|
|
|
130
240
|
nodes: elements.map((element, index) => {
|
|
131
241
|
const parent = element.parentElement;
|
|
132
242
|
const parentIndex = parent === null ? -1 : (positions.get(parent) ?? -1);
|
|
133
|
-
return tools.describe(element, index, index === 0 ? -1 : parentIndex, tools);
|
|
243
|
+
return tools.describe(element, { index, parent: index === 0 ? -1 : parentIndex, sources }, tools);
|
|
134
244
|
}),
|
|
245
|
+
fontFaces: tools.fontFacesOf(),
|
|
246
|
+
};
|
|
247
|
+
};
|
|
248
|
+
// Where an element sits among the measured elements, spelt as `keyOf` spells it in governance: each
|
|
249
|
+
// ancestor's tag and position among its measured siblings.
|
|
250
|
+
const keyOfElement = (element, tools) => {
|
|
251
|
+
const parent = element.parentElement;
|
|
252
|
+
const tag = element.tagName.toLowerCase();
|
|
253
|
+
if (parent === null || element === document.body) {
|
|
254
|
+
return tag;
|
|
255
|
+
}
|
|
256
|
+
const measured = tools.measuredElements(tools);
|
|
257
|
+
const siblings = Array.from(parent.children).filter((child) => measured.includes(child));
|
|
258
|
+
return `${tools.keyOfElement(parent, tools)}/${tag}:${String(siblings.indexOf(element))}`;
|
|
259
|
+
};
|
|
260
|
+
// One element named for a finding: its label, its key, and every exemption on it or an ancestor,
|
|
261
|
+
// nearest first. The focused element when no selector is given.
|
|
262
|
+
const describeTarget = (tools, selector) => {
|
|
263
|
+
const target = selector === null ? document.activeElement : document.querySelector(selector);
|
|
264
|
+
if (target === null || target === document.body) {
|
|
265
|
+
return undefined;
|
|
266
|
+
}
|
|
267
|
+
const chain = (element) => {
|
|
268
|
+
if (element === null) {
|
|
269
|
+
return [];
|
|
270
|
+
}
|
|
271
|
+
const rules = element.getAttribute('data-ploaness-layout');
|
|
272
|
+
const own = rules === null
|
|
273
|
+
? []
|
|
274
|
+
: [
|
|
275
|
+
{
|
|
276
|
+
key: tools.keyOfElement(element, tools),
|
|
277
|
+
label: tools.labelOf(element, tools),
|
|
278
|
+
rules,
|
|
279
|
+
reason: (element.getAttribute('data-ploaness-layout-reason') ?? '').trim(),
|
|
280
|
+
},
|
|
281
|
+
];
|
|
282
|
+
return [...own, ...chain(element.parentElement)];
|
|
283
|
+
};
|
|
284
|
+
return {
|
|
285
|
+
label: tools.labelOf(target, tools),
|
|
286
|
+
key: tools.keyOfElement(target, tools),
|
|
287
|
+
exemptions: chain(target),
|
|
135
288
|
};
|
|
136
289
|
};
|
|
290
|
+
// Marks the measured elements a failure names, for the screenshot that shows them.
|
|
291
|
+
const outlineDocument = (tools, indices) => {
|
|
292
|
+
const marker = 'data-ploaness-outline';
|
|
293
|
+
const elements = tools.measuredElements(tools);
|
|
294
|
+
for (const index of indices) {
|
|
295
|
+
elements[index]?.setAttribute(marker, '');
|
|
296
|
+
}
|
|
297
|
+
};
|
|
137
298
|
const STEPS = {
|
|
138
299
|
isClosedDetails,
|
|
139
300
|
isHiddenByDisclosure,
|
|
301
|
+
isOutsideView,
|
|
140
302
|
roundRects,
|
|
141
303
|
ownText,
|
|
142
304
|
ownTextRects,
|
|
143
305
|
bordersOf,
|
|
144
306
|
lineHeightOf,
|
|
145
307
|
labelOf,
|
|
308
|
+
paintOrderOf,
|
|
146
309
|
describe,
|
|
310
|
+
reservedBoxOf,
|
|
311
|
+
contentSizeOf,
|
|
312
|
+
loadedSourceOf,
|
|
313
|
+
mediaOf,
|
|
314
|
+
sourceSizesOf,
|
|
315
|
+
measuredElements,
|
|
316
|
+
fontFacesOf,
|
|
317
|
+
keyOfElement,
|
|
147
318
|
};
|
|
148
|
-
const
|
|
319
|
+
const toolsSource = (steps) => `{${Object.entries(steps)
|
|
149
320
|
.map(([name, step]) => `${name}: ${String(step)}`)
|
|
150
|
-
.join(', ')}}
|
|
151
|
-
const
|
|
152
|
-
const
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
}
|
|
321
|
+
.join(', ')}}`;
|
|
322
|
+
const IN_PAGE_SOURCE = `(${String(measureDocument)})(${toolsSource(STEPS)})`;
|
|
323
|
+
const MINIMAL_SOURCE = `(${String(measureDocument)})(${toolsSource({
|
|
324
|
+
...STEPS,
|
|
325
|
+
mediaOf: noMedia,
|
|
326
|
+
sourceSizesOf: noSourceSizes,
|
|
327
|
+
fontFacesOf: noFontFaces,
|
|
328
|
+
})})`;
|
|
329
|
+
const OUTLINE_STYLE = '[data-ploaness-outline] { outline: 3px solid #e00 !important; outline-offset: 1px !important; }';
|
|
158
330
|
/**
|
|
159
|
-
* Measure the page as it stands at
|
|
160
|
-
*
|
|
161
|
-
*
|
|
162
|
-
*
|
|
163
|
-
* @
|
|
164
|
-
* @returns one line per layout defect, empty when there is none.
|
|
331
|
+
* Measure the page as it stands, at its current viewport.
|
|
332
|
+
* @param page the page, settled on the route and in the state to measure.
|
|
333
|
+
* @param route the location to record the snapshot under.
|
|
334
|
+
* @param isMinimal whether to measure geometry alone, without media and fonts.
|
|
335
|
+
* @returns the snapshot.
|
|
165
336
|
*/
|
|
166
|
-
export const
|
|
167
|
-
const
|
|
168
|
-
|
|
169
|
-
if (original !== null) {
|
|
170
|
-
await page.setViewportSize(original);
|
|
171
|
-
}
|
|
172
|
-
return findLayoutDefects(snapshots, projectSettings.layoutMinimumGap);
|
|
337
|
+
export const measurePage = async (page, route, isMinimal = false) => {
|
|
338
|
+
const measured = await page.evaluate(isMinimal ? MINIMAL_SOURCE : IN_PAGE_SOURCE);
|
|
339
|
+
return { ...measured, route };
|
|
173
340
|
};
|
|
174
341
|
/**
|
|
175
|
-
*
|
|
176
|
-
*
|
|
177
|
-
*
|
|
178
|
-
* or one whose address exists only once a record does - after driving the page into the state to judge.
|
|
179
|
-
* @param page the page to measure.
|
|
180
|
-
* @returns nothing; it fails the test with one line per defect.
|
|
342
|
+
* Outline the measured elements a failure names, for the screenshot that shows them.
|
|
343
|
+
* @param page the page, unchanged since it was measured.
|
|
344
|
+
* @param indices the measured-node indices.
|
|
181
345
|
*/
|
|
182
|
-
export const
|
|
183
|
-
|
|
346
|
+
export const outlineElements = async (page, indices) => {
|
|
347
|
+
await page.addStyleTag({ content: OUTLINE_STYLE });
|
|
348
|
+
await page.evaluate(`(${String(outlineDocument)})(${toolsSource(STEPS)}, ${JSON.stringify(indices)})`);
|
|
184
349
|
};
|
|
350
|
+
/**
|
|
351
|
+
* Describe one element for a finding: the focused element, or the first matching a selector.
|
|
352
|
+
* @param page the page.
|
|
353
|
+
* @param selector the element to describe, or null for the focused element.
|
|
354
|
+
* @returns its label, key and exemptions, or undefined when there is no such element.
|
|
355
|
+
*/
|
|
356
|
+
export const targetFacts = async (page, selector) => await page.evaluate(`(${String(describeTarget)})(${toolsSource(STEPS)}, ${JSON.stringify(selector)})`);
|
|
185
357
|
//# sourceMappingURL=layout.js.map
|
package/dist/layout.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../src/layout.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../src/layout.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Page } from '@playwright/test';
|
|
2
|
+
/** The marked roots of a Payload view, for an axe scan limited to them. */
|
|
3
|
+
export declare const VIEW_ROOT_SELECTOR: string;
|
|
4
|
+
/**
|
|
5
|
+
* Mark the roots of a Payload admin view, so the scans that follow judge the view's own content. A page
|
|
6
|
+
* that is not a Payload admin view is left as it is.
|
|
7
|
+
* @param page the page.
|
|
8
|
+
* @returns whether it is a Payload admin view, now marked.
|
|
9
|
+
*/
|
|
10
|
+
export declare const hasMarkedPayloadView: (page: Page) => Promise<boolean>;
|
|
11
|
+
/**
|
|
12
|
+
* Remove the marks `hasMarkedPayloadView` set, leaving the page as the spec drove it.
|
|
13
|
+
* @param page the page.
|
|
14
|
+
*/
|
|
15
|
+
export declare const unmarkPayloadView: (page: Page) => Promise<void>;
|
|
16
|
+
//# sourceMappingURL=payload-view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payload-view.d.ts","sourceRoot":"","sources":["../src/payload-view.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAS5C,2EAA2E;AAC3E,eAAO,MAAM,kBAAkB,EAAE,MAA8B,CAAA;AA0B/D;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAAU,MAAM,IAAI,KAAG,OAAO,CAAC,OAAO,CACc,CAAA;AAErF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAU,MAAM,IAAI,KAAG,OAAO,CAAC,IAAI,CAEhE,CAAA"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// Where a Payload admin template renders the view's own content: the default template's column after
|
|
2
|
+
// Payload's header, and the minimal template's column.
|
|
3
|
+
const PAYLOAD_VIEW_ROOTS = '.template-default__wrap > :not(.app-header), .template-minimal__wrap > *';
|
|
4
|
+
// The layout measurement spells this attribute out in the page code that skips what lies outside it.
|
|
5
|
+
const VIEW_ATTRIBUTE = 'data-ploaness-view';
|
|
6
|
+
/** The marked roots of a Payload view, for an axe scan limited to them. */
|
|
7
|
+
export const VIEW_ROOT_SELECTOR = `[${VIEW_ATTRIBUTE}]`;
|
|
8
|
+
const hasMarkedInPage = ([selector, attribute]) => {
|
|
9
|
+
const roots = Array.from(document.querySelectorAll(selector));
|
|
10
|
+
for (const root of roots) {
|
|
11
|
+
root.setAttribute(attribute, '');
|
|
12
|
+
}
|
|
13
|
+
return roots.length > 0;
|
|
14
|
+
};
|
|
15
|
+
const unmarkInPage = ([selector, attribute]) => {
|
|
16
|
+
const roots = Array.from(document.querySelectorAll(selector));
|
|
17
|
+
for (const root of roots) {
|
|
18
|
+
root.removeAttribute(attribute);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Mark the roots of a Payload admin view, so the scans that follow judge the view's own content. A page
|
|
23
|
+
* that is not a Payload admin view is left as it is.
|
|
24
|
+
* @param page the page.
|
|
25
|
+
* @returns whether it is a Payload admin view, now marked.
|
|
26
|
+
*/
|
|
27
|
+
export const hasMarkedPayloadView = async (page) => await page.evaluate(hasMarkedInPage, [PAYLOAD_VIEW_ROOTS, VIEW_ATTRIBUTE]);
|
|
28
|
+
/**
|
|
29
|
+
* Remove the marks `hasMarkedPayloadView` set, leaving the page as the spec drove it.
|
|
30
|
+
* @param page the page.
|
|
31
|
+
*/
|
|
32
|
+
export const unmarkPayloadView = async (page) => {
|
|
33
|
+
await page.evaluate(unmarkInPage, [VIEW_ROOT_SELECTOR, VIEW_ATTRIBUTE]);
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=payload-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payload-view.js","sourceRoot":"","sources":["../src/payload-view.ts"],"names":[],"mappings":"AAKA,qGAAqG;AACrG,uDAAuD;AACvD,MAAM,kBAAkB,GAAW,0EAA0E,CAAA;AAE7G,qGAAqG;AACrG,MAAM,cAAc,GAAW,oBAAoB,CAAA;AAEnD,2EAA2E;AAC3E,MAAM,CAAC,MAAM,kBAAkB,GAAW,IAAI,cAAc,GAAG,CAAA;AAW/D,MAAM,eAAe,GAAG,CAAC,CAAC,QAAQ,EAAE,SAAS,CAA4B,EAAW,EAAE;IACpF,MAAM,KAAK,GAA6B,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAA;IACvF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;IAClC,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;AACzB,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,CAAC,QAAQ,EAAE,SAAS,CAA4B,EAAQ,EAAE;IAC9E,MAAM,KAAK,GAA6B,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAA;IACvF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAA;IACjC,CAAC;AACH,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,IAAU,EAAoB,EAAE,CACzE,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,kBAAkB,EAAE,cAAc,CAAU,CAAC,CAAA;AAErF;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,IAAU,EAAiB,EAAE;IACnE,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,kBAAkB,EAAE,cAAc,CAAU,CAAC,CAAA;AAClF,CAAC,CAAA"}
|
package/dist/playwright.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playwright.d.ts","sourceRoot":"","sources":["../src/playwright.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"playwright.d.ts","sourceRoot":"","sources":["../src/playwright.ts"],"names":[],"mappings":"AAiRA,QAAA,MAAM,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAmB,CAAA;AAEjE,eAAe,MAAM,CAAA"}
|