Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | 1x 1x 1x 40x 10x 10x 10x 10x 5x 10x 9x 9x 5x 9x 4x 9x 9x 10x 1x 9x 4x 4x 4x 9x | import { createAriaLiveElement } from '../../utils/createAriaLiveElement'; import type { Announce } from 'roosterjs-content-model-types'; const DOT_STRING = '.'; /** * @internal * Announce the given data * @param core The EditorCore object * @param announceData Data to announce */ export const announce: Announce = (core, announceData) => { const { text, defaultStrings, formatStrings = [], ariaLiveMode = 'assertive' } = announceData; const { announcerStringGetter } = core.lifecycle; const template = defaultStrings && announcerStringGetter?.(defaultStrings); let textToAnnounce = formatString(template || text, formatStrings); if (!core.lifecycle.announceContainer) { core.lifecycle.announceContainer = createAriaLiveElement(core.physicalRoot.ownerDocument); } if (textToAnnounce && core.lifecycle.announceContainer) { const { announceContainer } = core.lifecycle; if (announceContainer.ariaLive != ariaLiveMode) { announceContainer.ariaLive = ariaLiveMode; } if (textToAnnounce == announceContainer.textContent) { textToAnnounce += DOT_STRING; } Eif (announceContainer) { announceContainer.textContent = textToAnnounce; } } }; function formatString(text: string | undefined, formatStrings: string[]) { if (text == undefined) { return text; } text = text.replace(/\{(\d+)\}/g, (_, sub: string) => { const index = parseInt(sub); const replace = formatStrings[index]; return replace ?? ''; }); return text; } |