fix(a11y): add title attribute to iframes (#45014)
* fix:add title attribute to iframes
This commit is contained in:
@ -208,7 +208,13 @@ export function updateProjectPreview(buildData, document) {
|
|||||||
buildData.challengeType === challengeTypes.html ||
|
buildData.challengeType === challengeTypes.html ||
|
||||||
buildData.challengeType === challengeTypes.multiFileCertProject
|
buildData.challengeType === challengeTypes.multiFileCertProject
|
||||||
) {
|
) {
|
||||||
createProjectPreviewFramer(document)(buildData);
|
// Give iframe a title attribute for accessibility using the preview
|
||||||
|
// document's <title>.
|
||||||
|
const titleMatch = buildData?.sources?.index?.match(
|
||||||
|
/<title>(.*?)<\/title>/
|
||||||
|
);
|
||||||
|
const frameTitle = titleMatch ? titleMatch[1] + ' preview' : 'preview';
|
||||||
|
createProjectPreviewFramer(document, frameTitle)(buildData);
|
||||||
} else {
|
} else {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`Cannot show preview for challenge type ${buildData.challengeType}`
|
`Cannot show preview for challenge type ${buildData.challengeType}`
|
||||||
|
@ -61,9 +61,12 @@ export const runTestInTestFrame = async function (document, test, timeout) {
|
|||||||
]);
|
]);
|
||||||
};
|
};
|
||||||
|
|
||||||
const createFrame = (document, id) => ctx => {
|
const createFrame = (document, id, title) => ctx => {
|
||||||
const frame = document.createElement('iframe');
|
const frame = document.createElement('iframe');
|
||||||
frame.id = id;
|
frame.id = id;
|
||||||
|
if (typeof title === 'string') {
|
||||||
|
frame.title = title;
|
||||||
|
}
|
||||||
return {
|
return {
|
||||||
...ctx,
|
...ctx,
|
||||||
element: frame
|
element: frame
|
||||||
@ -182,17 +185,38 @@ const writeContentToFrame = ctx => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const createMainPreviewFramer = (document, proxyLogger) =>
|
export const createMainPreviewFramer = (document, proxyLogger) =>
|
||||||
createFramer(document, mainPreviewId, initMainFrame, proxyLogger);
|
createFramer(
|
||||||
|
document,
|
||||||
|
mainPreviewId,
|
||||||
|
initMainFrame,
|
||||||
|
proxyLogger,
|
||||||
|
undefined,
|
||||||
|
'preview'
|
||||||
|
);
|
||||||
|
|
||||||
export const createProjectPreviewFramer = document =>
|
export const createProjectPreviewFramer = (document, frameTitle) =>
|
||||||
createFramer(document, projectPreviewId, initPreviewFrame);
|
createFramer(
|
||||||
|
document,
|
||||||
|
projectPreviewId,
|
||||||
|
initPreviewFrame,
|
||||||
|
undefined,
|
||||||
|
undefined,
|
||||||
|
frameTitle
|
||||||
|
);
|
||||||
|
|
||||||
export const createTestFramer = (document, proxyLogger, frameReady) =>
|
export const createTestFramer = (document, proxyLogger, frameReady) =>
|
||||||
createFramer(document, testId, initTestFrame, proxyLogger, frameReady);
|
createFramer(document, testId, initTestFrame, proxyLogger, frameReady);
|
||||||
|
|
||||||
const createFramer = (document, id, init, proxyLogger, frameReady) =>
|
const createFramer = (
|
||||||
|
document,
|
||||||
|
id,
|
||||||
|
init,
|
||||||
|
proxyLogger,
|
||||||
|
frameReady,
|
||||||
|
frameTitle
|
||||||
|
) =>
|
||||||
flow(
|
flow(
|
||||||
createFrame(document, id),
|
createFrame(document, id, frameTitle),
|
||||||
mountFrame(document, id),
|
mountFrame(document, id),
|
||||||
buildProxyConsole(proxyLogger),
|
buildProxyConsole(proxyLogger),
|
||||||
writeContentToFrame,
|
writeContentToFrame,
|
||||||
|
Reference in New Issue
Block a user