diff --git a/package-lock.json b/package-lock.json index b26cde13..9bd63b5e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,7 @@ "latex-utensils": "6.2.0", "mathjax-full": "3.2.2", "micromatch": "4.0.8", - "pdfjs-dist": "4.6.82", + "pdfjs-dist": "4.7.76", "workerpool": "9.1.3", "ws": "8.18.0" }, @@ -6067,9 +6067,9 @@ } }, "node_modules/pdfjs-dist": { - "version": "4.6.82", - "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-4.6.82.tgz", - "integrity": "sha512-BUOryeRFwvbLe0lOU6NhkJNuVQUp06WxlJVVCsxdmJ4y5cU3O3s3/0DunVdK1PMm7v2MUw52qKYaidhDH1Z9+w==", + "version": "4.7.76", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-4.7.76.tgz", + "integrity": "sha512-8y6wUgC/Em35IumlGjaJOCm3wV4aY/6sqnIT3fVW/67mXsOZ9HWBn8GDKmJUK0GSzpbmX3gQqwfoFayp78Mtqw==", "license": "Apache-2.0", "engines": { "node": ">=18" diff --git a/package.json b/package.json index 76952118..8ebd20c9 100644 --- a/package.json +++ b/package.json @@ -1692,7 +1692,7 @@ "latex-utensils": "6.2.0", "mathjax-full": "3.2.2", "micromatch": "4.0.8", - "pdfjs-dist": "4.6.82", + "pdfjs-dist": "4.7.76", "workerpool": "9.1.3", "ws": "8.18.0" }, diff --git a/viewer/components/editviewerhtml.ts b/viewer/components/editviewerhtml.ts index 0f46ece1..12b95ca8 100644 --- a/viewer/components/editviewerhtml.ts +++ b/viewer/components/editviewerhtml.ts @@ -16,7 +16,7 @@ function createForwardBackwardButtons() { Forward ` - insertAfterEnd('sidebarToggle', elements) + insertAfterEnd('sidebarToggleButton', elements) } function createCheckBoxes() { diff --git a/viewer/components/pagetrimmer.ts b/viewer/components/pagetrimmer.ts index 2ce57d77..77fa319c 100644 --- a/viewer/components/pagetrimmer.ts +++ b/viewer/components/pagetrimmer.ts @@ -15,26 +15,17 @@ export enum TrimMode { TRIM_15 = 3, } -const trimRule05 = { trimValue: 0.05, sheet: document.createElement('style') } as const -const trimRule10 = { trimValue: 0.10, sheet: document.createElement('style') } as const -const trimRule15 = { trimValue: 0.15, sheet: document.createElement('style') } as const +const trimRule05 = { trimValue: 0.05, sheet: new CSSStyleSheet() } as const +const trimRule10 = { trimValue: 0.10, sheet: new CSSStyleSheet() } as const +const trimRule15 = { trimValue: 0.15, sheet: new CSSStyleSheet() } as const const trimValueAndSheet = [trimRule05, trimRule10, trimRule15] as const trimValueAndSheet.forEach(({ trimValue, sheet }) => { - document.head.appendChild(sheet) const left = -100 * trimValue - sheet.textContent = ` -.page canvas { - left: ${left}%; - position: relative; -} -.page .textLayer { - left: ${left}%; -} -.page .annotationLayer { - left: ${left}%; -} -` + sheet.insertRule(`.page canvas { left: ${left}%; position: relative; }`) + sheet.insertRule(`.page .textLayer { left: ${left}%; }`) + sheet.insertRule(`.page .annotationLayer { left: ${left}%; }`) sheet.disabled = true + document.adoptedStyleSheets.push(sheet) }) function disableAllTrimRuleStylesheets() { diff --git a/viewer/components/toolbar.ts b/viewer/components/toolbar.ts index dfb41440..5844d707 100644 --- a/viewer/components/toolbar.ts +++ b/viewer/components/toolbar.ts @@ -29,7 +29,7 @@ export function showToolbar(animate: boolean) { export function hidePrintButton() { if (isEmbedded) { - const dom = document.getElementById('print') as HTMLElement + const dom = document.getElementById('printButton') as HTMLElement dom.style.display = 'none' } } @@ -37,16 +37,7 @@ export function hidePrintButton() { // Since the width of the selector of scaling depends on each locale, // we have to set its `max-width` dynamically on initialization. export function setCssRuleForToolbar() { - let styleSheet: CSSStyleSheet | undefined - for (const style of document.styleSheets) { - if (style.href && /latextoybox.css/.exec(style.href)) { - styleSheet = style - break - } - } - if (!styleSheet) { - return - } + const styleSheet = new CSSStyleSheet() const scaleSelectContainer = document.getElementById('scaleSelectContainer') as HTMLElement const scaleWidth = elementWidth(scaleSelectContainer) const numPages = document.getElementById('numPages') as HTMLElement @@ -64,4 +55,5 @@ export function setCssRuleForToolbar() { const trimMaxWidth = 500 + numPagesWidth + printerButtonWidth const trimRule = `@media all and (max-width: ${trimMaxWidth}px) { #trimSelectContainer { display: none; } }` styleSheet.insertRule(trimRule) + document.adoptedStyleSheets.push(styleSheet) } diff --git a/viewer/latextoybox.css b/viewer/latextoybox.css index 240ccf33..16b21bc5 100644 --- a/viewer/latextoybox.css +++ b/viewer/latextoybox.css @@ -1,6 +1,5 @@ @media all and (max-width: 1100px) { #toolbarViewerMiddle { - display: table; margin: auto; left: auto; position: inherit; @@ -117,22 +116,24 @@ html[dir='rtl'] .findbar { } .toolbar { - position: absolute; - top: 0; transition: all 0.2s cubic-bezier(.23,.96,.57,.99); } .toolbar.hide { - top: -32px; + opacity: 0; transition-duration: 0.4s; } -.toolbar.hide:hover { +#viewerContainer { top: 0; } -#viewerContainer { - top: 0; +.dropdownToolbarButton { + font-size: inherit; +} + +.dropdownToolbarButton > select{ + font-size: inherit; } #viewBookmark { @@ -143,7 +144,7 @@ html[dir='rtl'] .findbar { display: none !important; } -#download { +#downloadButton { display: none !important; } diff --git a/viewer/latextoybox.ts b/viewer/latextoybox.ts index b2bb19aa..b16f1083 100644 --- a/viewer/latextoybox.ts +++ b/viewer/latextoybox.ts @@ -17,8 +17,8 @@ import { ViewerLoading } from './components/viewerloading.js' import { LwEventBus } from './components/lweventbus.js' import { PanelManagerConnection } from './components/panelmanagerconnection.js' import { VolatileConfig } from './components/volatileconfig.js' -import { hidePrintButton, setCssRuleForToolbar } from './components/toolbar.js' import { trimSelectElement, viewerContainer } from './components/constants.js' +import { hidePrintButton, setCssRuleForToolbar } from './components/toolbar.js' declare const PDFViewerApplication: IPDFViewerApplication diff --git a/viewer/locale/ar/viewer.ftl b/viewer/locale/ar/viewer.ftl index 97d6da57..8d147670 100644 --- a/viewer/locale/ar/viewer.ftl +++ b/viewer/locale/ar/viewer.ftl @@ -306,8 +306,6 @@ pdfjs-editor-stamp-button-label = أضِف أو حرّر الصور pdfjs-editor-highlight-button = .title = أبرِز pdfjs-editor-highlight-button-label = أبرِز -pdfjs-highlight-floating-button = - .title = أبرِز pdfjs-highlight-floating-button1 = .title = أبرِز .aria-label = أبرِز @@ -376,6 +374,22 @@ pdfjs-editor-resizer-label-bottom-right = الزاوية اليُمنى السُ pdfjs-editor-resizer-label-bottom-middle = أسفل الوسط - غيّر الحجم pdfjs-editor-resizer-label-bottom-left = الزاوية اليُسرى السُفلية - غيّر الحجم pdfjs-editor-resizer-label-middle-left = مُنتصف اليسار - غيّر الحجم +pdfjs-editor-resizer-top-left = + .aria-label = الزاوية اليُسرى العُليا — غيّر الحجم +pdfjs-editor-resizer-top-middle = + .aria-label = أعلى الوسط - غيّر الحجم +pdfjs-editor-resizer-top-right = + .aria-label = الزاوية اليُمنى العُليا - غيّر الحجم +pdfjs-editor-resizer-middle-right = + .aria-label = اليمين الأوسط - غيّر الحجم +pdfjs-editor-resizer-bottom-right = + .aria-label = الزاوية اليُمنى السُفلى - غيّر الحجم +pdfjs-editor-resizer-bottom-middle = + .aria-label = أسفل الوسط - غيّر الحجم +pdfjs-editor-resizer-bottom-left = + .aria-label = الزاوية اليُسرى السُفلية - غيّر الحجم +pdfjs-editor-resizer-middle-left = + .aria-label = مُنتصف اليسار - غيّر الحجم ## Color picker @@ -402,3 +416,10 @@ pdfjs-editor-colorpicker-red = pdfjs-editor-highlight-show-all-button-label = أظهِر الكل pdfjs-editor-highlight-show-all-button = .title = أظهِر الكل + +## New alt-text dialog +## Group note for entire feature: Alternative text (alt text) helps when people can't see the image. This feature includes a tool to create alt text automatically using an AI model that works locally on the user's device to preserve privacy. + + +## Image alt-text settings + diff --git a/viewer/locale/be/viewer.ftl b/viewer/locale/be/viewer.ftl index 18a94186..2fcbace1 100644 --- a/viewer/locale/be/viewer.ftl +++ b/viewer/locale/be/viewer.ftl @@ -105,6 +105,14 @@ pdfjs-document-properties-button-label = Уласцівасці дакумент pdfjs-document-properties-file-name = Назва файла: pdfjs-document-properties-file-size = Памер файла: # Variables: +# $kb (Number) - the PDF file size in kilobytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-kb = { NUMBER($kb, maximumSignificantDigits: 3) } КБ ({ $b } байтаў) +# Variables: +# $mb (Number) - the PDF file size in megabytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-mb = { NUMBER($mb, maximumSignificantDigits: 3) } МБ ({ $b } байтаў) +# Variables: # $size_kb (Number) - the PDF file size in kilobytes # $size_b (Number) - the PDF file size in bytes pdfjs-document-properties-kb = { $size_kb } КБ ({ $size_b } байт) @@ -374,6 +382,22 @@ pdfjs-editor-resizer-label-bottom-right = Правы ніжні кут — зм pdfjs-editor-resizer-label-bottom-middle = Пасярэдзіне ўнізе — змяніць памер pdfjs-editor-resizer-label-bottom-left = Левы ніжні кут — змяніць памер pdfjs-editor-resizer-label-middle-left = Пасярэдзіне злева — змяніць памер +pdfjs-editor-resizer-top-left = + .aria-label = Верхні левы кут — змяніць памер +pdfjs-editor-resizer-top-middle = + .aria-label = Уверсе пасярэдзіне — змяніць памер +pdfjs-editor-resizer-top-right = + .aria-label = Верхні правы кут — змяніць памер +pdfjs-editor-resizer-middle-right = + .aria-label = Пасярэдзіне справа — змяніць памер +pdfjs-editor-resizer-bottom-right = + .aria-label = Правы ніжні кут — змяніць памер +pdfjs-editor-resizer-bottom-middle = + .aria-label = Пасярэдзіне ўнізе — змяніць памер +pdfjs-editor-resizer-bottom-left = + .aria-label = Левы ніжні кут — змяніць памер +pdfjs-editor-resizer-middle-left = + .aria-label = Пасярэдзіне злева — змяніць памер ## Color picker diff --git a/viewer/locale/bg/viewer.ftl b/viewer/locale/bg/viewer.ftl index 36c7b518..c53950b1 100644 --- a/viewer/locale/bg/viewer.ftl +++ b/viewer/locale/bg/viewer.ftl @@ -369,6 +369,22 @@ pdfjs-editor-resizer-label-bottom-right = Долен десен ъгъл — п pdfjs-editor-resizer-label-bottom-middle = Долу в средата — преоразмеряване pdfjs-editor-resizer-label-bottom-left = Долен ляв ъгъл — преоразмеряване pdfjs-editor-resizer-label-middle-left = Ляво в средата — преоразмеряване +pdfjs-editor-resizer-top-left = + .aria-label = Горен ляв ъгъл — преоразмеряване +pdfjs-editor-resizer-top-middle = + .aria-label = Горе в средата — преоразмеряване +pdfjs-editor-resizer-top-right = + .aria-label = Горен десен ъгъл — преоразмеряване +pdfjs-editor-resizer-middle-right = + .aria-label = Дясно в средата — преоразмеряване +pdfjs-editor-resizer-bottom-right = + .aria-label = Долен десен ъгъл — преоразмеряване +pdfjs-editor-resizer-bottom-middle = + .aria-label = Долу в средата — преоразмеряване +pdfjs-editor-resizer-bottom-left = + .aria-label = Долен ляв ъгъл — преоразмеряване +pdfjs-editor-resizer-middle-left = + .aria-label = Ляво в средата — преоразмеряване ## Color picker diff --git a/viewer/locale/ca/viewer.ftl b/viewer/locale/ca/viewer.ftl index 575dc5fb..7417741d 100644 --- a/viewer/locale/ca/viewer.ftl +++ b/viewer/locale/ca/viewer.ftl @@ -45,12 +45,6 @@ pdfjs-save-button-label = Desa pdfjs-bookmark-button = .title = Pàgina actual (mostra l'URL de la pàgina actual) pdfjs-bookmark-button-label = Pàgina actual -# Used in Firefox for Android. -pdfjs-open-in-app-button = - .title = Obre en una aplicació -# Used in Firefox for Android. -# Length of the translation matters since we are in a mobile context, with limited screen estate. -pdfjs-open-in-app-button-label = Obre en una aplicació ## Secondary toolbar and context menu @@ -277,6 +271,12 @@ pdfjs-editor-free-text-button-label = Text pdfjs-editor-ink-button = .title = Dibuixa pdfjs-editor-ink-button-label = Dibuixa + +## Remove button for the various kind of editor. + + +## + # Editor Parameters pdfjs-editor-free-text-color-input = Color pdfjs-editor-free-text-size-input = Mida @@ -297,3 +297,17 @@ pdfjs-ink-canvas = ## Editor resizers ## This is used in an aria label to help to understand the role of the resizer. + +## Color picker + + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + + +## New alt-text dialog +## Group note for entire feature: Alternative text (alt text) helps when people can't see the image. This feature includes a tool to create alt text automatically using an AI model that works locally on the user's device to preserve privacy. + + +## Image alt-text settings + diff --git a/viewer/locale/cs/viewer.ftl b/viewer/locale/cs/viewer.ftl index 7c7ff3d8..0f90f861 100644 --- a/viewer/locale/cs/viewer.ftl +++ b/viewer/locale/cs/viewer.ftl @@ -105,6 +105,14 @@ pdfjs-document-properties-button-label = Vlastnosti dokumentu… pdfjs-document-properties-file-name = Název souboru: pdfjs-document-properties-file-size = Velikost souboru: # Variables: +# $kb (Number) - the PDF file size in kilobytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-kb = { NUMBER($kb, maximumSignificantDigits: 3) } kB ({ $b } bajtů) +# Variables: +# $mb (Number) - the PDF file size in megabytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-mb = { NUMBER($mb, maximumSignificantDigits: 3) } MB ({ $b } bajtů) +# Variables: # $size_kb (Number) - the PDF file size in kilobytes # $size_b (Number) - the PDF file size in bytes pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bajtů) @@ -376,6 +384,22 @@ pdfjs-editor-resizer-label-bottom-right = Pravý dolní roh — změna velikosti pdfjs-editor-resizer-label-bottom-middle = Střed dole — změna velikosti pdfjs-editor-resizer-label-bottom-left = Levý dolní roh — změna velikosti pdfjs-editor-resizer-label-middle-left = Vlevo uprostřed — změna velikosti +pdfjs-editor-resizer-top-left = + .aria-label = Levý horní roh — změna velikosti +pdfjs-editor-resizer-top-middle = + .aria-label = Horní střed — změna velikosti +pdfjs-editor-resizer-top-right = + .aria-label = Pravý horní roh — změna velikosti +pdfjs-editor-resizer-middle-right = + .aria-label = Vpravo uprostřed — změna velikosti +pdfjs-editor-resizer-bottom-right = + .aria-label = Pravý dolní roh — změna velikosti +pdfjs-editor-resizer-bottom-middle = + .aria-label = Střed dole — změna velikosti +pdfjs-editor-resizer-bottom-left = + .aria-label = Levý dolní roh — změna velikosti +pdfjs-editor-resizer-middle-left = + .aria-label = Vlevo uprostřed — změna velikosti ## Color picker diff --git a/viewer/locale/cy/viewer.ftl b/viewer/locale/cy/viewer.ftl index b6da4798..1c5415c8 100644 --- a/viewer/locale/cy/viewer.ftl +++ b/viewer/locale/cy/viewer.ftl @@ -105,6 +105,14 @@ pdfjs-document-properties-button-label = Priodweddau Dogfen… pdfjs-document-properties-file-name = Enw ffeil: pdfjs-document-properties-file-size = Maint ffeil: # Variables: +# $kb (Number) - the PDF file size in kilobytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-kb = { NUMBER($kb, maximumSignificantDigits: 3) } KB ({ $b } beit) +# Variables: +# $mb (Number) - the PDF file size in megabytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-mb = { NUMBER($mb, maximumSignificantDigits: 3) } MB ({ $b } beit) +# Variables: # $size_kb (Number) - the PDF file size in kilobytes # $size_b (Number) - the PDF file size in bytes pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } beit) @@ -119,6 +127,9 @@ pdfjs-document-properties-keywords = Allweddair: pdfjs-document-properties-creation-date = Dyddiad Creu: pdfjs-document-properties-modification-date = Dyddiad Addasu: # Variables: +# $dateObj (Date) - the creation/modification date and time of the PDF file +pdfjs-document-properties-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } +# Variables: # $date (Date) - the creation/modification date of the PDF file # $time (Time) - the creation/modification time of the PDF file pdfjs-document-properties-date-string = { $date }, { $time } @@ -283,6 +294,9 @@ pdfjs-annotation-date-string = { $date }, { $time } # Some common types are e.g.: "Check", "Text", "Comment", "Note" pdfjs-text-annotation-type = .alt = [Anodiad { $type } ] +# Variables: +# $dateObj (Date) - the modification date and time of the annotation +pdfjs-annotation-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } ## Password @@ -374,6 +388,22 @@ pdfjs-editor-resizer-label-bottom-right = Y gornel dde isaf — newid maint pdfjs-editor-resizer-label-bottom-middle = Canol gwaelod — newid maint pdfjs-editor-resizer-label-bottom-left = Y gornel chwith isaf — newid maint pdfjs-editor-resizer-label-middle-left = Chwith canol — newid maint +pdfjs-editor-resizer-top-left = + .aria-label = Y gornel chwith uchaf — newid maint +pdfjs-editor-resizer-top-middle = + .aria-label = Canol uchaf - newid maint +pdfjs-editor-resizer-top-right = + .aria-label = Y gornel dde uchaf - newid maint +pdfjs-editor-resizer-middle-right = + .aria-label = De canol - newid maint +pdfjs-editor-resizer-bottom-right = + .aria-label = Y gornel dde isaf — newid maint +pdfjs-editor-resizer-bottom-middle = + .aria-label = Canol gwaelod — newid maint +pdfjs-editor-resizer-bottom-left = + .aria-label = Y gornel chwith isaf — newid maint +pdfjs-editor-resizer-middle-left = + .aria-label = Chwith canol — newid maint ## Color picker diff --git a/viewer/locale/da/viewer.ftl b/viewer/locale/da/viewer.ftl index 2c5f526d..a3ba621a 100644 --- a/viewer/locale/da/viewer.ftl +++ b/viewer/locale/da/viewer.ftl @@ -380,6 +380,22 @@ pdfjs-editor-resizer-label-bottom-right = Nederste højre hjørne - tilpas stør pdfjs-editor-resizer-label-bottom-middle = Nederst i midten - tilpas størrelse pdfjs-editor-resizer-label-bottom-left = Nederste venstre hjørne - tilpas størrelse pdfjs-editor-resizer-label-middle-left = Midten til venstre — tilpas størrelse +pdfjs-editor-resizer-top-left = + .aria-label = Øverste venstre hjørne — tilpas størrelse +pdfjs-editor-resizer-top-middle = + .aria-label = Øverste i midten — tilpas størrelse +pdfjs-editor-resizer-top-right = + .aria-label = Øverste højre hjørne — tilpas størrelse +pdfjs-editor-resizer-middle-right = + .aria-label = Midten til højre — tilpas størrelse +pdfjs-editor-resizer-bottom-right = + .aria-label = Nederste højre hjørne - tilpas størrelse +pdfjs-editor-resizer-bottom-middle = + .aria-label = Nederst i midten - tilpas størrelse +pdfjs-editor-resizer-bottom-left = + .aria-label = Nederste venstre hjørne - tilpas størrelse +pdfjs-editor-resizer-middle-left = + .aria-label = Midten til venstre — tilpas størrelse ## Color picker diff --git a/viewer/locale/de/viewer.ftl b/viewer/locale/de/viewer.ftl index 24fcb103..b8d7ab9a 100644 --- a/viewer/locale/de/viewer.ftl +++ b/viewer/locale/de/viewer.ftl @@ -105,6 +105,14 @@ pdfjs-document-properties-button-label = Dokumenteigenschaften… pdfjs-document-properties-file-name = Dateiname: pdfjs-document-properties-file-size = Dateigröße: # Variables: +# $kb (Number) - the PDF file size in kilobytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-kb = { NUMBER($kb, maximumSignificantDigits: 3) } KB ({ $b } Bytes) +# Variables: +# $mb (Number) - the PDF file size in megabytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-mb = { NUMBER($mb, maximumSignificantDigits: 3) } MB ({ $b } Bytes) +# Variables: # $size_kb (Number) - the PDF file size in kilobytes # $size_b (Number) - the PDF file size in bytes pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } Bytes) @@ -119,6 +127,9 @@ pdfjs-document-properties-keywords = Stichwörter: pdfjs-document-properties-creation-date = Erstelldatum: pdfjs-document-properties-modification-date = Bearbeitungsdatum: # Variables: +# $dateObj (Date) - the creation/modification date and time of the PDF file +pdfjs-document-properties-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } +# Variables: # $date (Date) - the creation/modification date of the PDF file # $time (Time) - the creation/modification time of the PDF file pdfjs-document-properties-date-string = { $date } { $time } @@ -275,6 +286,9 @@ pdfjs-annotation-date-string = { $date }, { $time } # Some common types are e.g.: "Check", "Text", "Comment", "Note" pdfjs-text-annotation-type = .alt = [Anlage: { $type }] +# Variables: +# $dateObj (Date) - the modification date and time of the annotation +pdfjs-annotation-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } ## Password @@ -366,6 +380,22 @@ pdfjs-editor-resizer-label-bottom-right = Rechte untere Ecke - Größe ändern pdfjs-editor-resizer-label-bottom-middle = Unten mittig - Größe ändern pdfjs-editor-resizer-label-bottom-left = Linke untere Ecke - Größe ändern pdfjs-editor-resizer-label-middle-left = Mitte links - Größe ändern +pdfjs-editor-resizer-top-left = + .aria-label = Linke obere Ecke - Größe ändern +pdfjs-editor-resizer-top-middle = + .aria-label = Oben mittig - Größe ändern +pdfjs-editor-resizer-top-right = + .aria-label = Rechts oben - Größe ändern +pdfjs-editor-resizer-middle-right = + .aria-label = Mitte rechts - Größe ändern +pdfjs-editor-resizer-bottom-right = + .aria-label = Rechte untere Ecke - Größe ändern +pdfjs-editor-resizer-bottom-middle = + .aria-label = Unten mittig - Größe ändern +pdfjs-editor-resizer-bottom-left = + .aria-label = Linke untere Ecke - Größe ändern +pdfjs-editor-resizer-middle-left = + .aria-label = Mitte links - Größe ändern ## Color picker @@ -406,8 +436,6 @@ pdfjs-editor-new-alt-text-textarea = pdfjs-editor-new-alt-text-description = Kurze Beschreibung für Personen, die die Grafik nicht sehen können, oder wenn die Grafik nicht geladen wird. # This is a required legal disclaimer that refers to the automatically created text inside the alt text box above this text. It disappears if the text is edited by a human. pdfjs-editor-new-alt-text-disclaimer1 = Dieser Alternativ-Text wurde automatisch erstellt und könnte ungenau sein. -# This is a required legal disclaimer that refers to the automatically created text inside the alt text box above this text. It disappears if the text is edited by a human. -pdfjs-editor-new-alt-text-disclaimer = Dieser Alternativ-Text wurde automatisch erstellt. pdfjs-editor-new-alt-text-disclaimer-learn-more-url = Weitere Informationen pdfjs-editor-new-alt-text-create-automatically-button-label = Alternativ-Text automatisch erstellen pdfjs-editor-new-alt-text-not-now-button = Nicht jetzt diff --git a/viewer/locale/dsb/viewer.ftl b/viewer/locale/dsb/viewer.ftl index f78c3661..eeb41da9 100644 --- a/viewer/locale/dsb/viewer.ftl +++ b/viewer/locale/dsb/viewer.ftl @@ -105,6 +105,14 @@ pdfjs-document-properties-button-label = Dokumentowe kakosći… pdfjs-document-properties-file-name = Mě dataje: pdfjs-document-properties-file-size = Wjelikosć dataje: # Variables: +# $kb (Number) - the PDF file size in kilobytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-kb = { NUMBER($kb, maximumSignificantDigits: 3) } KB ({ $b } bajtow) +# Variables: +# $mb (Number) - the PDF file size in megabytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-mb = { NUMBER($mb, maximumSignificantDigits: 3) } MB ({ $b } bajtow) +# Variables: # $size_kb (Number) - the PDF file size in kilobytes # $size_b (Number) - the PDF file size in bytes pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bajtow) @@ -119,6 +127,9 @@ pdfjs-document-properties-keywords = Klucowe słowa: pdfjs-document-properties-creation-date = Datum napóranja: pdfjs-document-properties-modification-date = Datum změny: # Variables: +# $dateObj (Date) - the creation/modification date and time of the PDF file +pdfjs-document-properties-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } +# Variables: # $date (Date) - the creation/modification date of the PDF file # $time (Time) - the creation/modification time of the PDF file pdfjs-document-properties-date-string = { $date }, { $time } @@ -279,6 +290,9 @@ pdfjs-annotation-date-string = { $date }, { $time } # Some common types are e.g.: "Check", "Text", "Comment", "Note" pdfjs-text-annotation-type = .alt = [Typ pśipiskow: { $type }] +# Variables: +# $dateObj (Date) - the modification date and time of the annotation +pdfjs-annotation-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } ## Password @@ -370,6 +384,22 @@ pdfjs-editor-resizer-label-bottom-right = Dołojce napšawo – wjelikosć změn pdfjs-editor-resizer-label-bottom-middle = Dołojce wesrjejź – wjelikosć změniś pdfjs-editor-resizer-label-bottom-left = Dołojce nalěwo – wjelikosć změniś pdfjs-editor-resizer-label-middle-left = Wesrjejź nalěwo – wjelikosć změniś +pdfjs-editor-resizer-top-left = + .aria-label = Górjejce nalěwo – wjelikosć změniś +pdfjs-editor-resizer-top-middle = + .aria-label = Górjejce wesrjejź – wjelikosć změniś +pdfjs-editor-resizer-top-right = + .aria-label = Górjejce napšawo – wjelikosć změniś +pdfjs-editor-resizer-middle-right = + .aria-label = Wesrjejź napšawo – wjelikosć změniś +pdfjs-editor-resizer-bottom-right = + .aria-label = Dołojce napšawo – wjelikosć změniś +pdfjs-editor-resizer-bottom-middle = + .aria-label = Dołojce wesrjejź – wjelikosć změniś +pdfjs-editor-resizer-bottom-left = + .aria-label = Dołojce nalěwo – wjelikosć změniś +pdfjs-editor-resizer-middle-left = + .aria-label = Wesrjejź nalěwo – wjelikosć změniś ## Color picker diff --git a/viewer/locale/el/viewer.ftl b/viewer/locale/el/viewer.ftl index 4c5df349..a95b6e71 100644 --- a/viewer/locale/el/viewer.ftl +++ b/viewer/locale/el/viewer.ftl @@ -380,6 +380,22 @@ pdfjs-editor-resizer-label-bottom-right = Κάτω δεξιά γωνία — α pdfjs-editor-resizer-label-bottom-middle = Μέσο κάτω πλευράς — αλλαγή μεγέθους pdfjs-editor-resizer-label-bottom-left = Κάτω αριστερή γωνία — αλλαγή μεγέθους pdfjs-editor-resizer-label-middle-left = Μέσο αριστερής πλευράς — αλλαγή μεγέθους +pdfjs-editor-resizer-top-left = + .aria-label = Επάνω αριστερή γωνία — αλλαγή μεγέθους +pdfjs-editor-resizer-top-middle = + .aria-label = Μέσο επάνω πλευράς — αλλαγή μεγέθους +pdfjs-editor-resizer-top-right = + .aria-label = Επάνω δεξιά γωνία — αλλαγή μεγέθους +pdfjs-editor-resizer-middle-right = + .aria-label = Μέσο δεξιάς πλευράς — αλλαγή μεγέθους +pdfjs-editor-resizer-bottom-right = + .aria-label = Κάτω δεξιά γωνία — αλλαγή μεγέθους +pdfjs-editor-resizer-bottom-middle = + .aria-label = Μέσο κάτω πλευράς — αλλαγή μεγέθους +pdfjs-editor-resizer-bottom-left = + .aria-label = Κάτω αριστερή γωνία — αλλαγή μεγέθους +pdfjs-editor-resizer-middle-left = + .aria-label = Μέσο αριστερής πλευράς — αλλαγή μεγέθους ## Color picker diff --git a/viewer/locale/en-CA/viewer.ftl b/viewer/locale/en-CA/viewer.ftl index 6068bd0b..729b6152 100644 --- a/viewer/locale/en-CA/viewer.ftl +++ b/viewer/locale/en-CA/viewer.ftl @@ -105,6 +105,14 @@ pdfjs-document-properties-button-label = Document Properties… pdfjs-document-properties-file-name = File name: pdfjs-document-properties-file-size = File size: # Variables: +# $kb (Number) - the PDF file size in kilobytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-kb = { NUMBER($kb, maximumSignificantDigits: 3) } KB ({ $b } bytes) +# Variables: +# $mb (Number) - the PDF file size in megabytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-mb = { NUMBER($mb, maximumSignificantDigits: 3) } MB ({ $b } bytes) +# Variables: # $size_kb (Number) - the PDF file size in kilobytes # $size_b (Number) - the PDF file size in bytes pdfjs-document-properties-kb = { $size_kb } kB ({ $size_b } bytes) @@ -119,6 +127,9 @@ pdfjs-document-properties-keywords = Keywords: pdfjs-document-properties-creation-date = Creation Date: pdfjs-document-properties-modification-date = Modification Date: # Variables: +# $dateObj (Date) - the creation/modification date and time of the PDF file +pdfjs-document-properties-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } +# Variables: # $date (Date) - the creation/modification date of the PDF file # $time (Time) - the creation/modification time of the PDF file pdfjs-document-properties-date-string = { $date }, { $time } @@ -275,6 +286,9 @@ pdfjs-annotation-date-string = { $date }, { $time } # Some common types are e.g.: "Check", "Text", "Comment", "Note" pdfjs-text-annotation-type = .alt = [{ $type } Annotation] +# Variables: +# $dateObj (Date) - the modification date and time of the annotation +pdfjs-annotation-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } ## Password @@ -366,6 +380,22 @@ pdfjs-editor-resizer-label-bottom-right = Bottom right corner — resize pdfjs-editor-resizer-label-bottom-middle = Bottom middle — resize pdfjs-editor-resizer-label-bottom-left = Bottom left corner — resize pdfjs-editor-resizer-label-middle-left = Middle left — resize +pdfjs-editor-resizer-top-left = + .aria-label = Top left corner — resize +pdfjs-editor-resizer-top-middle = + .aria-label = Top middle — resize +pdfjs-editor-resizer-top-right = + .aria-label = Top right corner — resize +pdfjs-editor-resizer-middle-right = + .aria-label = Middle right — resize +pdfjs-editor-resizer-bottom-right = + .aria-label = Bottom right corner — resize +pdfjs-editor-resizer-bottom-middle = + .aria-label = Bottom middle — resize +pdfjs-editor-resizer-bottom-left = + .aria-label = Bottom left corner — resize +pdfjs-editor-resizer-middle-left = + .aria-label = Middle left — resize ## Color picker @@ -405,7 +435,7 @@ pdfjs-editor-new-alt-text-textarea = # This text refers to the alt text box above this description. It offers a definition of alt text. pdfjs-editor-new-alt-text-description = Short description for people who can’t see the image or when the image doesn’t load. # This is a required legal disclaimer that refers to the automatically created text inside the alt text box above this text. It disappears if the text is edited by a human. -pdfjs-editor-new-alt-text-disclaimer = This alt text was created automatically. +pdfjs-editor-new-alt-text-disclaimer1 = This alt text was created automatically and may be inaccurate. pdfjs-editor-new-alt-text-disclaimer-learn-more-url = Learn more pdfjs-editor-new-alt-text-create-automatically-button-label = Create alt text automatically pdfjs-editor-new-alt-text-not-now-button = Not now diff --git a/viewer/locale/en-GB/viewer.ftl b/viewer/locale/en-GB/viewer.ftl index 9dedd14b..52e4a12b 100644 --- a/viewer/locale/en-GB/viewer.ftl +++ b/viewer/locale/en-GB/viewer.ftl @@ -380,6 +380,22 @@ pdfjs-editor-resizer-label-bottom-right = Bottom right corner — resize pdfjs-editor-resizer-label-bottom-middle = Bottom middle — resize pdfjs-editor-resizer-label-bottom-left = Bottom left corner — resize pdfjs-editor-resizer-label-middle-left = Middle left — resize +pdfjs-editor-resizer-top-left = + .aria-label = Top left corner — resize +pdfjs-editor-resizer-top-middle = + .aria-label = Top middle — resize +pdfjs-editor-resizer-top-right = + .aria-label = Top right corner — resize +pdfjs-editor-resizer-middle-right = + .aria-label = Middle right — resize +pdfjs-editor-resizer-bottom-right = + .aria-label = Bottom right corner — resize +pdfjs-editor-resizer-bottom-middle = + .aria-label = Bottom middle — resize +pdfjs-editor-resizer-bottom-left = + .aria-label = Bottom left corner — resize +pdfjs-editor-resizer-middle-left = + .aria-label = Middle left — resize ## Color picker diff --git a/viewer/locale/eo/viewer.ftl b/viewer/locale/eo/viewer.ftl index 2b77231f..bb68201c 100644 --- a/viewer/locale/eo/viewer.ftl +++ b/viewer/locale/eo/viewer.ftl @@ -105,6 +105,14 @@ pdfjs-document-properties-button-label = Atributoj de dokumento… pdfjs-document-properties-file-name = Nomo de dosiero: pdfjs-document-properties-file-size = Grando de dosiero: # Variables: +# $kb (Number) - the PDF file size in kilobytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-kb = { NUMBER($kb, maximumSignificantDigits: 3) } KO ({ $b } oktetoj) +# Variables: +# $mb (Number) - the PDF file size in megabytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-mb = { NUMBER($mb, maximumSignificantDigits: 3) } Mo ({ $b } oktetoj) +# Variables: # $size_kb (Number) - the PDF file size in kilobytes # $size_b (Number) - the PDF file size in bytes pdfjs-document-properties-kb = { $size_kb } KO ({ $size_b } oktetoj) @@ -119,6 +127,9 @@ pdfjs-document-properties-keywords = Ŝlosilvorto: pdfjs-document-properties-creation-date = Dato de kreado: pdfjs-document-properties-modification-date = Dato de modifo: # Variables: +# $dateObj (Date) - the creation/modification date and time of the PDF file +pdfjs-document-properties-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } +# Variables: # $date (Date) - the creation/modification date of the PDF file # $time (Time) - the creation/modification time of the PDF file pdfjs-document-properties-date-string = { $date }, { $time } @@ -275,6 +286,9 @@ pdfjs-annotation-date-string = { $date }, { $time } # Some common types are e.g.: "Check", "Text", "Comment", "Note" pdfjs-text-annotation-type = .alt = [Prinoto: { $type }] +# Variables: +# $dateObj (Date) - the modification date and time of the annotation +pdfjs-annotation-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } ## Password @@ -366,6 +380,22 @@ pdfjs-editor-resizer-label-bottom-right = Malsupra deksta angulo — ŝanĝi gra pdfjs-editor-resizer-label-bottom-middle = Malsupra mezo — ŝanĝi grandon pdfjs-editor-resizer-label-bottom-left = Malsupra maldekstra angulo — ŝanĝi grandon pdfjs-editor-resizer-label-middle-left = Maldekstra mezo — ŝanĝi grandon +pdfjs-editor-resizer-top-left = + .aria-label = Supra maldekstra angulo — ŝangi grandon +pdfjs-editor-resizer-top-middle = + .aria-label = Supra mezo — ŝanĝi grandon +pdfjs-editor-resizer-top-right = + .aria-label = Supran dekstran angulon — ŝanĝi grandon +pdfjs-editor-resizer-middle-right = + .aria-label = Dekstra mezo — ŝanĝi grandon +pdfjs-editor-resizer-bottom-right = + .aria-label = Malsupra deksta angulo — ŝanĝi grandon +pdfjs-editor-resizer-bottom-middle = + .aria-label = Malsupra mezo — ŝanĝi grandon +pdfjs-editor-resizer-bottom-left = + .aria-label = Malsupra maldekstra angulo — ŝanĝi grandon +pdfjs-editor-resizer-middle-left = + .aria-label = Maldekstra mezo — ŝanĝi grandon ## Color picker diff --git a/viewer/locale/es-AR/viewer.ftl b/viewer/locale/es-AR/viewer.ftl index 686781e5..33f88f6b 100644 --- a/viewer/locale/es-AR/viewer.ftl +++ b/viewer/locale/es-AR/viewer.ftl @@ -380,6 +380,22 @@ pdfjs-editor-resizer-label-bottom-right = Esquina inferior derecha — cambiar e pdfjs-editor-resizer-label-bottom-middle = Abajo en el medio — cambiar el tamaño pdfjs-editor-resizer-label-bottom-left = Esquina inferior izquierda — cambiar el tamaño pdfjs-editor-resizer-label-middle-left = Al centro a la izquierda — cambiar el tamaño +pdfjs-editor-resizer-top-left = + .aria-label = Esquina superior izquierda — cambiar el tamaño +pdfjs-editor-resizer-top-middle = + .aria-label = Arriba en el medio — cambiar el tamaño +pdfjs-editor-resizer-top-right = + .aria-label = Esquina superior derecha — cambiar el tamaño +pdfjs-editor-resizer-middle-right = + .aria-label = Al centro a la derecha — cambiar el tamaño +pdfjs-editor-resizer-bottom-right = + .aria-label = Esquina inferior derecha — cambiar el tamaño +pdfjs-editor-resizer-bottom-middle = + .aria-label = Abajo en el medio — cambiar el tamaño +pdfjs-editor-resizer-bottom-left = + .aria-label = Esquina inferior izquierda — cambiar el tamaño +pdfjs-editor-resizer-middle-left = + .aria-label = Al centro a la izquierda — cambiar el tamaño ## Color picker diff --git a/viewer/locale/es-CL/viewer.ftl b/viewer/locale/es-CL/viewer.ftl index ede3d252..51dbb224 100644 --- a/viewer/locale/es-CL/viewer.ftl +++ b/viewer/locale/es-CL/viewer.ftl @@ -380,6 +380,22 @@ pdfjs-editor-resizer-label-bottom-right = Esquina inferior derecha — cambiar e pdfjs-editor-resizer-label-bottom-middle = Borde inferior en el medio — cambiar el tamaño pdfjs-editor-resizer-label-bottom-left = Esquina inferior izquierda — cambiar el tamaño pdfjs-editor-resizer-label-middle-left = Borde izquierdo en el medio — cambiar el tamaño +pdfjs-editor-resizer-top-left = + .aria-label = Esquina superior izquierda — cambiar el tamaño +pdfjs-editor-resizer-top-middle = + .aria-label = Borde superior en el medio — cambiar el tamaño +pdfjs-editor-resizer-top-right = + .aria-label = Esquina superior derecha — cambiar el tamaño +pdfjs-editor-resizer-middle-right = + .aria-label = Borde derecho en el medio — cambiar el tamaño +pdfjs-editor-resizer-bottom-right = + .aria-label = Esquina inferior derecha — cambiar el tamaño +pdfjs-editor-resizer-bottom-middle = + .aria-label = Borde inferior en el medio — cambiar el tamaño +pdfjs-editor-resizer-bottom-left = + .aria-label = Esquina inferior izquierda — cambiar el tamaño +pdfjs-editor-resizer-middle-left = + .aria-label = Borde izquierdo en el medio — cambiar el tamaño ## Color picker diff --git a/viewer/locale/es-ES/viewer.ftl b/viewer/locale/es-ES/viewer.ftl index e3f87b47..b7705e5c 100644 --- a/viewer/locale/es-ES/viewer.ftl +++ b/viewer/locale/es-ES/viewer.ftl @@ -51,12 +51,6 @@ pdfjs-download-button-label = Descargar pdfjs-bookmark-button = .title = Página actual (Ver URL de la página actual) pdfjs-bookmark-button-label = Página actual -# Used in Firefox for Android. -pdfjs-open-in-app-button = - .title = Abrir en aplicación -# Used in Firefox for Android. -# Length of the translation matters since we are in a mobile context, with limited screen estate. -pdfjs-open-in-app-button-label = Abrir en aplicación ## Secondary toolbar and context menu @@ -304,8 +298,6 @@ pdfjs-editor-stamp-button-label = Añadir o editar imágenes pdfjs-editor-highlight-button = .title = Resaltar pdfjs-editor-highlight-button-label = Resaltar -pdfjs-highlight-floating-button = - .title = Resaltar pdfjs-highlight-floating-button1 = .title = Resaltar .aria-label = Resaltar @@ -374,6 +366,22 @@ pdfjs-editor-resizer-label-bottom-right = Esquina inferior derecha — redimensi pdfjs-editor-resizer-label-bottom-middle = Borde inferior en el medio — redimensionar pdfjs-editor-resizer-label-bottom-left = Esquina inferior izquierda — redimensionar pdfjs-editor-resizer-label-middle-left = Borde izquierdo en el medio — redimensionar +pdfjs-editor-resizer-top-left = + .aria-label = Esquina superior izquierda — redimensionar +pdfjs-editor-resizer-top-middle = + .aria-label = Borde superior en el medio — redimensionar +pdfjs-editor-resizer-top-right = + .aria-label = Esquina superior derecha — redimensionar +pdfjs-editor-resizer-middle-right = + .aria-label = Borde derecho en el medio — redimensionar +pdfjs-editor-resizer-bottom-right = + .aria-label = Esquina inferior derecha — redimensionar +pdfjs-editor-resizer-bottom-middle = + .aria-label = Borde inferior en el medio — redimensionar +pdfjs-editor-resizer-bottom-left = + .aria-label = Esquina inferior izquierda — redimensionar +pdfjs-editor-resizer-middle-left = + .aria-label = Borde izquierdo en el medio — redimensionar ## Color picker @@ -400,3 +408,25 @@ pdfjs-editor-colorpicker-red = pdfjs-editor-highlight-show-all-button-label = Mostrar todo pdfjs-editor-highlight-show-all-button = .title = Mostrar todo + +## New alt-text dialog +## Group note for entire feature: Alternative text (alt text) helps when people can't see the image. This feature includes a tool to create alt text automatically using an AI model that works locally on the user's device to preserve privacy. + + +## Image alt-text settings + +pdfjs-editor-alt-text-settings-dialog-label = Ajustes del texto alternativo de la imagen +pdfjs-editor-alt-text-settings-automatic-title = Texto alternativo automático +pdfjs-editor-alt-text-settings-create-model-button-label = Crear texto alternativo automáticamente +pdfjs-editor-alt-text-settings-create-model-description = Sugiere descripciones para ayudar a las personas que no pueden ver la imagen o cuando la imagen no se carga. +# Variables: +# $totalSize (Number) - the total size (in MB) of the AI model. +pdfjs-editor-alt-text-settings-download-model-label = Modelo de IA de texto alternativo ({ $totalSize } MB) +pdfjs-editor-alt-text-settings-ai-model-description = Se ejecuta localmente en el dispositivo para que los datos se mantengan privados. Requerido para texto alternativo automático. +pdfjs-editor-alt-text-settings-delete-model-button = Eliminar +pdfjs-editor-alt-text-settings-download-model-button = Descargar +pdfjs-editor-alt-text-settings-downloading-model-button = Descargando… +pdfjs-editor-alt-text-settings-editor-title = Editor de texto alternativo +pdfjs-editor-alt-text-settings-show-dialog-button-label = Mostrar el editor de texto alternativo inmediatamente al añadir una imagen +pdfjs-editor-alt-text-settings-show-dialog-description = Le ayuda a asegurarse de que todas sus imágenes tengan texto alternativo. +pdfjs-editor-alt-text-settings-close-button = Cerrar diff --git a/viewer/locale/eu/viewer.ftl b/viewer/locale/eu/viewer.ftl index 1ed37397..93719e0f 100644 --- a/viewer/locale/eu/viewer.ftl +++ b/viewer/locale/eu/viewer.ftl @@ -51,12 +51,6 @@ pdfjs-download-button-label = Deskargatu pdfjs-bookmark-button = .title = Uneko orria (ikusi uneko orriaren URLa) pdfjs-bookmark-button-label = Uneko orria -# Used in Firefox for Android. -pdfjs-open-in-app-button = - .title = Ireki aplikazioan -# Used in Firefox for Android. -# Length of the translation matters since we are in a mobile context, with limited screen estate. -pdfjs-open-in-app-button-label = Ireki aplikazioan ## Secondary toolbar and context menu @@ -304,8 +298,6 @@ pdfjs-editor-stamp-button-label = Gehitu edo editatu irudiak pdfjs-editor-highlight-button = .title = Nabarmendu pdfjs-editor-highlight-button-label = Nabarmendu -pdfjs-highlight-floating-button = - .title = Nabarmendu pdfjs-highlight-floating-button1 = .title = Nabarmendu .aria-label = Nabarmendu @@ -374,6 +366,22 @@ pdfjs-editor-resizer-label-bottom-right = Beheko eskuineko izkina — aldatu tam pdfjs-editor-resizer-label-bottom-middle = Behean erdian — aldatu tamaina pdfjs-editor-resizer-label-bottom-left = Beheko ezkerreko izkina — aldatu tamaina pdfjs-editor-resizer-label-middle-left = Erdian ezkerrean — aldatu tamaina +pdfjs-editor-resizer-top-left = + .aria-label = Goiko ezkerreko izkina — aldatu tamaina +pdfjs-editor-resizer-top-middle = + .aria-label = Goian erdian — aldatu tamaina +pdfjs-editor-resizer-top-right = + .aria-label = Goiko eskuineko izkina — aldatu tamaina +pdfjs-editor-resizer-middle-right = + .aria-label = Erdian eskuinean — aldatu tamaina +pdfjs-editor-resizer-bottom-right = + .aria-label = Beheko eskuineko izkina — aldatu tamaina +pdfjs-editor-resizer-bottom-middle = + .aria-label = Behean erdian — aldatu tamaina +pdfjs-editor-resizer-bottom-left = + .aria-label = Beheko ezkerreko izkina — aldatu tamaina +pdfjs-editor-resizer-middle-left = + .aria-label = Erdian ezkerrean — aldatu tamaina ## Color picker @@ -400,3 +408,10 @@ pdfjs-editor-colorpicker-red = pdfjs-editor-highlight-show-all-button-label = Erakutsi denak pdfjs-editor-highlight-show-all-button = .title = Erakutsi denak + +## New alt-text dialog +## Group note for entire feature: Alternative text (alt text) helps when people can't see the image. This feature includes a tool to create alt text automatically using an AI model that works locally on the user's device to preserve privacy. + + +## Image alt-text settings + diff --git a/viewer/locale/fi/viewer.ftl b/viewer/locale/fi/viewer.ftl index ebec8916..88c96de8 100644 --- a/viewer/locale/fi/viewer.ftl +++ b/viewer/locale/fi/viewer.ftl @@ -105,6 +105,14 @@ pdfjs-document-properties-button-label = Dokumentin ominaisuudet… pdfjs-document-properties-file-name = Tiedoston nimi: pdfjs-document-properties-file-size = Tiedoston koko: # Variables: +# $kb (Number) - the PDF file size in kilobytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-kb = { NUMBER($kb, maximumSignificantDigits: 3) } kt ({ $b } tavua) +# Variables: +# $mb (Number) - the PDF file size in megabytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-mb = { NUMBER($mb, maximumSignificantDigits: 3) } Mt ({ $b } tavua) +# Variables: # $size_kb (Number) - the PDF file size in kilobytes # $size_b (Number) - the PDF file size in bytes pdfjs-document-properties-kb = { $size_kb } kt ({ $size_b } tavua) @@ -119,6 +127,9 @@ pdfjs-document-properties-keywords = Avainsanat: pdfjs-document-properties-creation-date = Luomispäivämäärä: pdfjs-document-properties-modification-date = Muokkauspäivämäärä: # Variables: +# $dateObj (Date) - the creation/modification date and time of the PDF file +pdfjs-document-properties-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } +# Variables: # $date (Date) - the creation/modification date of the PDF file # $time (Time) - the creation/modification time of the PDF file pdfjs-document-properties-date-string = { $date }, { $time } @@ -275,6 +286,9 @@ pdfjs-annotation-date-string = { $date }, { $time } # Some common types are e.g.: "Check", "Text", "Comment", "Note" pdfjs-text-annotation-type = .alt = [{ $type }-merkintä] +# Variables: +# $dateObj (Date) - the modification date and time of the annotation +pdfjs-annotation-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } ## Password @@ -366,6 +380,22 @@ pdfjs-editor-resizer-label-bottom-right = Oikea alakulma - muuta kokoa pdfjs-editor-resizer-label-bottom-middle = Alhaalla keskellä - muuta kokoa pdfjs-editor-resizer-label-bottom-left = Vasen alakulma - muuta kokoa pdfjs-editor-resizer-label-middle-left = Keskellä vasemmalla - muuta kokoa +pdfjs-editor-resizer-top-left = + .aria-label = Vasen yläkulma - muuta kokoa +pdfjs-editor-resizer-top-middle = + .aria-label = Ylhäällä keskellä - muuta kokoa +pdfjs-editor-resizer-top-right = + .aria-label = Oikea yläkulma - muuta kokoa +pdfjs-editor-resizer-middle-right = + .aria-label = Keskellä oikealla - muuta kokoa +pdfjs-editor-resizer-bottom-right = + .aria-label = Oikea alakulma - muuta kokoa +pdfjs-editor-resizer-bottom-middle = + .aria-label = Alhaalla keskellä - muuta kokoa +pdfjs-editor-resizer-bottom-left = + .aria-label = Vasen alakulma - muuta kokoa +pdfjs-editor-resizer-middle-left = + .aria-label = Keskellä vasemmalla - muuta kokoa ## Color picker @@ -406,8 +436,6 @@ pdfjs-editor-new-alt-text-textarea = pdfjs-editor-new-alt-text-description = Lyhyt kuvaus ihmisille, jotka eivät näe kuvaa tai kun kuva ei lataudu. # This is a required legal disclaimer that refers to the automatically created text inside the alt text box above this text. It disappears if the text is edited by a human. pdfjs-editor-new-alt-text-disclaimer1 = Tämä vaihtoehtoinen teksti luotiin automaattisesti, ja se voi olla epätarkka. -# This is a required legal disclaimer that refers to the automatically created text inside the alt text box above this text. It disappears if the text is edited by a human. -pdfjs-editor-new-alt-text-disclaimer = Tämä vaihtoehtoinen teksti luotiin automaattisesti. pdfjs-editor-new-alt-text-disclaimer-learn-more-url = Lue lisää pdfjs-editor-new-alt-text-create-automatically-button-label = Luo vaihtoehtoinen teksti automaattisesti pdfjs-editor-new-alt-text-not-now-button = Ei nyt diff --git a/viewer/locale/fr/viewer.ftl b/viewer/locale/fr/viewer.ftl index bfd483fd..23d82501 100644 --- a/viewer/locale/fr/viewer.ftl +++ b/viewer/locale/fr/viewer.ftl @@ -376,6 +376,22 @@ pdfjs-editor-resizer-label-bottom-right = Coin inférieur droit — redimensionn pdfjs-editor-resizer-label-bottom-middle = Centre bas — redimensionner pdfjs-editor-resizer-label-bottom-left = Coin inférieur gauche — redimensionner pdfjs-editor-resizer-label-middle-left = Milieu gauche — redimensionner +pdfjs-editor-resizer-top-left = + .aria-label = Coin supérieur gauche — redimensionner +pdfjs-editor-resizer-top-middle = + .aria-label = Milieu haut — redimensionner +pdfjs-editor-resizer-top-right = + .aria-label = Coin supérieur droit — redimensionner +pdfjs-editor-resizer-middle-right = + .aria-label = Milieu droit — redimensionner +pdfjs-editor-resizer-bottom-right = + .aria-label = Coin inférieur droit — redimensionner +pdfjs-editor-resizer-bottom-middle = + .aria-label = Centre bas — redimensionner +pdfjs-editor-resizer-bottom-left = + .aria-label = Coin inférieur gauche — redimensionner +pdfjs-editor-resizer-middle-left = + .aria-label = Milieu gauche — redimensionner ## Color picker diff --git a/viewer/locale/fur/viewer.ftl b/viewer/locale/fur/viewer.ftl index 79688eea..c587f556 100644 --- a/viewer/locale/fur/viewer.ftl +++ b/viewer/locale/fur/viewer.ftl @@ -105,6 +105,14 @@ pdfjs-document-properties-button-label = Proprietâts dal document… pdfjs-document-properties-file-name = Non dal file: pdfjs-document-properties-file-size = Dimension dal file: # Variables: +# $kb (Number) - the PDF file size in kilobytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-kb = { NUMBER($kb, maximumSignificantDigits: 3) } KB ({ $b } bytes) +# Variables: +# $mb (Number) - the PDF file size in megabytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-mb = { NUMBER($mb, maximumSignificantDigits: 3) } MB ({ $b } bytes) +# Variables: # $size_kb (Number) - the PDF file size in kilobytes # $size_b (Number) - the PDF file size in bytes pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) @@ -119,6 +127,9 @@ pdfjs-document-properties-keywords = Peraulis clâf: pdfjs-document-properties-creation-date = Date di creazion: pdfjs-document-properties-modification-date = Date di modifiche: # Variables: +# $dateObj (Date) - the creation/modification date and time of the PDF file +pdfjs-document-properties-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } +# Variables: # $date (Date) - the creation/modification date of the PDF file # $time (Time) - the creation/modification time of the PDF file pdfjs-document-properties-date-string = { $date }, { $time } @@ -275,6 +286,9 @@ pdfjs-annotation-date-string = { $date }, { $time } # Some common types are e.g.: "Check", "Text", "Comment", "Note" pdfjs-text-annotation-type = .alt = [Anotazion { $type }] +# Variables: +# $dateObj (Date) - the modification date and time of the annotation +pdfjs-annotation-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } ## Password @@ -366,6 +380,22 @@ pdfjs-editor-resizer-label-bottom-right = Cjanton in bas a diestre — ridimensi pdfjs-editor-resizer-label-bottom-middle = Bande inferiôr tal mieç — ridimensione pdfjs-editor-resizer-label-bottom-left = Cjanton in bas a çampe — ridimensione pdfjs-editor-resizer-label-middle-left = Bande di çampe tal mieç — ridimensione +pdfjs-editor-resizer-top-left = + .aria-label = Cjanton in alt a çampe — ridimensione +pdfjs-editor-resizer-top-middle = + .aria-label = Bande superiôr tal mieç — ridimensione +pdfjs-editor-resizer-top-right = + .aria-label = Cjanton in alt a diestre — ridimensione +pdfjs-editor-resizer-middle-right = + .aria-label = Bande diestre tal mieç — ridimensione +pdfjs-editor-resizer-bottom-right = + .aria-label = Cjanton in bas a diestre — ridimensione +pdfjs-editor-resizer-bottom-middle = + .aria-label = Bande inferiôr tal mieç — ridimensione +pdfjs-editor-resizer-bottom-left = + .aria-label = Cjanton in bas a çampe — ridimensione +pdfjs-editor-resizer-middle-left = + .aria-label = Bande di çampe tal mieç — ridimensione ## Color picker @@ -406,8 +436,6 @@ pdfjs-editor-new-alt-text-textarea = pdfjs-editor-new-alt-text-description = Curte descrizion par personis che no rivin a viodi la imagjin, o che e ven mostrade cuant che no si rive a cjariâle. # This is a required legal disclaimer that refers to the automatically created text inside the alt text box above this text. It disappears if the text is edited by a human. pdfjs-editor-new-alt-text-disclaimer1 = Chest test alternatîf al è stât creât in automatic e al è pussibil che nol sedi cret. -# This is a required legal disclaimer that refers to the automatically created text inside the alt text box above this text. It disappears if the text is edited by a human. -pdfjs-editor-new-alt-text-disclaimer = Chest test alternatîf al è stât creât in automatic. pdfjs-editor-new-alt-text-disclaimer-learn-more-url = Plui informazions pdfjs-editor-new-alt-text-create-automatically-button-label = Cree test alternatîf in automatic pdfjs-editor-new-alt-text-not-now-button = No cumò diff --git a/viewer/locale/fy-NL/viewer.ftl b/viewer/locale/fy-NL/viewer.ftl index d2af154a..d336034d 100644 --- a/viewer/locale/fy-NL/viewer.ftl +++ b/viewer/locale/fy-NL/viewer.ftl @@ -380,6 +380,22 @@ pdfjs-editor-resizer-label-bottom-right = Rjochterûnderhoek – formaat wizigje pdfjs-editor-resizer-label-bottom-middle = Midden ûnder – formaat wizigje pdfjs-editor-resizer-label-bottom-left = Linkerûnderhoek – formaat wizigje pdfjs-editor-resizer-label-middle-left = Links midden – formaat wizigje +pdfjs-editor-resizer-top-left = + .aria-label = Linkerboppehoek – formaat wizigje +pdfjs-editor-resizer-top-middle = + .aria-label = Midden boppe – formaat wizigje +pdfjs-editor-resizer-top-right = + .aria-label = Rjochterboppehoek – formaat wizigje +pdfjs-editor-resizer-middle-right = + .aria-label = Midden rjochts – formaat wizigje +pdfjs-editor-resizer-bottom-right = + .aria-label = Rjochterûnderhoek – formaat wizigje +pdfjs-editor-resizer-bottom-middle = + .aria-label = Midden ûnder – formaat wizigje +pdfjs-editor-resizer-bottom-left = + .aria-label = Linkerûnderhoek – formaat wizigje +pdfjs-editor-resizer-middle-left = + .aria-label = Links midden – formaat wizigje ## Color picker diff --git a/viewer/locale/gd/viewer.ftl b/viewer/locale/gd/viewer.ftl index cc67391a..a3d62a0f 100644 --- a/viewer/locale/gd/viewer.ftl +++ b/viewer/locale/gd/viewer.ftl @@ -45,12 +45,6 @@ pdfjs-save-button-label = Sàbhail pdfjs-bookmark-button = .title = An duilleag làithreach (Seall an URL on duilleag làithreach) pdfjs-bookmark-button-label = An duilleag làithreach -# Used in Firefox for Android. -pdfjs-open-in-app-button = - .title = Fosgail san aplacaid -# Used in Firefox for Android. -# Length of the translation matters since we are in a mobile context, with limited screen estate. -pdfjs-open-in-app-button-label = Fosgail san aplacaid ## Secondary toolbar and context menu @@ -277,6 +271,12 @@ pdfjs-editor-free-text-button-label = Teacsa pdfjs-editor-ink-button = .title = Tarraing pdfjs-editor-ink-button-label = Tarraing + +## Remove button for the various kind of editor. + + +## + # Editor Parameters pdfjs-editor-free-text-color-input = Dath pdfjs-editor-free-text-size-input = Meud @@ -297,3 +297,17 @@ pdfjs-ink-canvas = ## Editor resizers ## This is used in an aria label to help to understand the role of the resizer. + +## Color picker + + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + + +## New alt-text dialog +## Group note for entire feature: Alternative text (alt text) helps when people can't see the image. This feature includes a tool to create alt text automatically using an AI model that works locally on the user's device to preserve privacy. + + +## Image alt-text settings + diff --git a/viewer/locale/gl/viewer.ftl b/viewer/locale/gl/viewer.ftl index a08fb1a3..641a6075 100644 --- a/viewer/locale/gl/viewer.ftl +++ b/viewer/locale/gl/viewer.ftl @@ -51,12 +51,6 @@ pdfjs-download-button-label = Descargar pdfjs-bookmark-button = .title = Páxina actual (ver o URL da páxina actual) pdfjs-bookmark-button-label = Páxina actual -# Used in Firefox for Android. -pdfjs-open-in-app-button = - .title = Abrir cunha aplicación -# Used in Firefox for Android. -# Length of the translation matters since we are in a mobile context, with limited screen estate. -pdfjs-open-in-app-button-label = Abrir cunha aplicación ## Secondary toolbar and context menu @@ -359,6 +353,33 @@ pdfjs-editor-resizer-label-bottom-right = Esquina inferior dereita: cambia o tam pdfjs-editor-resizer-label-bottom-middle = Abaixo medio: cambia o tamaño pdfjs-editor-resizer-label-bottom-left = Esquina inferior esquerda: cambia o tamaño pdfjs-editor-resizer-label-middle-left = Medio esquerdo: cambia o tamaño +pdfjs-editor-resizer-top-left = + .aria-label = Esquina superior esquerda: cambia o tamaño +pdfjs-editor-resizer-top-middle = + .aria-label = Medio superior: cambia o tamaño +pdfjs-editor-resizer-top-right = + .aria-label = Esquina superior dereita: cambia o tamaño +pdfjs-editor-resizer-middle-right = + .aria-label = Medio dereito: cambia o tamaño +pdfjs-editor-resizer-bottom-right = + .aria-label = Esquina inferior dereita: cambia o tamaño +pdfjs-editor-resizer-bottom-middle = + .aria-label = Abaixo medio: cambia o tamaño +pdfjs-editor-resizer-bottom-left = + .aria-label = Esquina inferior esquerda: cambia o tamaño +pdfjs-editor-resizer-middle-left = + .aria-label = Medio esquerdo: cambia o tamaño ## Color picker + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + + +## New alt-text dialog +## Group note for entire feature: Alternative text (alt text) helps when people can't see the image. This feature includes a tool to create alt text automatically using an AI model that works locally on the user's device to preserve privacy. + + +## Image alt-text settings + diff --git a/viewer/locale/gn/viewer.ftl b/viewer/locale/gn/viewer.ftl index 9f1493c3..a7a68e74 100644 --- a/viewer/locale/gn/viewer.ftl +++ b/viewer/locale/gn/viewer.ftl @@ -105,6 +105,14 @@ pdfjs-document-properties-button-label = Kuatia mba’etee… pdfjs-document-properties-file-name = Marandurenda réra: pdfjs-document-properties-file-size = Marandurenda tuichakue: # Variables: +# $kb (Number) - the PDF file size in kilobytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-kb = { NUMBER($kb, maximumSignificantDigits: 3) } KB ({ $b } bytes) +# Variables: +# $mb (Number) - the PDF file size in megabytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-mb = { NUMBER($mb, maximumSignificantDigits: 3) } MB ({ $b } bytes) +# Variables: # $size_kb (Number) - the PDF file size in kilobytes # $size_b (Number) - the PDF file size in bytes pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) @@ -119,6 +127,9 @@ pdfjs-document-properties-keywords = Jehero: pdfjs-document-properties-creation-date = Teñoihague arange: pdfjs-document-properties-modification-date = Iñambue hague arange: # Variables: +# $dateObj (Date) - the creation/modification date and time of the PDF file +pdfjs-document-properties-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } +# Variables: # $date (Date) - the creation/modification date of the PDF file # $time (Time) - the creation/modification time of the PDF file pdfjs-document-properties-date-string = { $date }, { $time } @@ -275,6 +286,9 @@ pdfjs-annotation-date-string = { $date }, { $time } # Some common types are e.g.: "Check", "Text", "Comment", "Note" pdfjs-text-annotation-type = .alt = [Jehaipy { $type }] +# Variables: +# $dateObj (Date) - the modification date and time of the annotation +pdfjs-annotation-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } ## Password @@ -366,6 +380,22 @@ pdfjs-editor-resizer-label-bottom-right = Yvy gotyo akatúape — emoambue tuich pdfjs-editor-resizer-label-bottom-middle = Yvy gotyo mbytépe — emoambue tuichakue pdfjs-editor-resizer-label-bottom-left = Iguýpe asu gotyo — emoambue tuichakue pdfjs-editor-resizer-label-middle-left = Mbyte asu gotyo — emoambue tuichakue +pdfjs-editor-resizer-top-left = + .aria-label = Yvate asu gotyo — emoambue tuichakue +pdfjs-editor-resizer-top-middle = + .aria-label = Yvate mbytépe — emoambue tuichakue +pdfjs-editor-resizer-top-right = + .aria-label = Yvate akatúape — emoambue tuichakue +pdfjs-editor-resizer-middle-right = + .aria-label = Mbyte akatúape — emoambue tuichakue +pdfjs-editor-resizer-bottom-right = + .aria-label = Yvy gotyo akatúape — emoambue tuichakue +pdfjs-editor-resizer-bottom-middle = + .aria-label = Yvy gotyo mbytépe — emoambue tuichakue +pdfjs-editor-resizer-bottom-left = + .aria-label = Iguýpe asu gotyo — emoambue tuichakue +pdfjs-editor-resizer-middle-left = + .aria-label = Mbyte asu gotyo — emoambue tuichakue ## Color picker @@ -402,8 +432,6 @@ pdfjs-editor-new-alt-text-dialog-edit-label = Embosako’i moñe’ẽrã mokõi pdfjs-editor-new-alt-text-dialog-add-label = Embojuaju moñe’ẽrã mokõiha (ta’ãngáre ñeñe’ẽ) pdfjs-editor-new-alt-text-textarea = .placeholder = Edescribi ko’ápe… -# This is a required legal disclaimer that refers to the automatically created text inside the alt text box above this text. It disappears if the text is edited by a human. -pdfjs-editor-new-alt-text-disclaimer = Ko moñe’ẽrã mokõiha heñói ijeheguiete. pdfjs-editor-new-alt-text-disclaimer-learn-more-url = Eikuaave pdfjs-editor-new-alt-text-create-automatically-button-label = Emoheñói moñe’ẽrã mokõiha ijeheguíva pdfjs-editor-new-alt-text-not-now-button = Ani ko’ág̃a diff --git a/viewer/locale/he/viewer.ftl b/viewer/locale/he/viewer.ftl index 8824f624..11302c4c 100644 --- a/viewer/locale/he/viewer.ftl +++ b/viewer/locale/he/viewer.ftl @@ -380,6 +380,22 @@ pdfjs-editor-resizer-label-bottom-right = פינה ימנית תחתונה - ש pdfjs-editor-resizer-label-bottom-middle = למטה באמצע - שינוי גודל pdfjs-editor-resizer-label-bottom-left = פינה שמאלית תחתונה - שינוי גודל pdfjs-editor-resizer-label-middle-left = שמאלה באמצע - שינוי גודל +pdfjs-editor-resizer-top-left = + .aria-label = פינה שמאלית עליונה - שינוי גודל +pdfjs-editor-resizer-top-middle = + .aria-label = למעלה באמצע - שינוי גודל +pdfjs-editor-resizer-top-right = + .aria-label = פינה ימנית עליונה - שינוי גודל +pdfjs-editor-resizer-middle-right = + .aria-label = ימינה באמצע - שינוי גודל +pdfjs-editor-resizer-bottom-right = + .aria-label = פינה ימנית תחתונה - שינוי גודל +pdfjs-editor-resizer-bottom-middle = + .aria-label = למטה באמצע - שינוי גודל +pdfjs-editor-resizer-bottom-left = + .aria-label = פינה שמאלית תחתונה - שינוי גודל +pdfjs-editor-resizer-middle-left = + .aria-label = שמאלה באמצע - שינוי גודל ## Color picker diff --git a/viewer/locale/hi-IN/viewer.ftl b/viewer/locale/hi-IN/viewer.ftl index 1ead5930..b6f378f6 100644 --- a/viewer/locale/hi-IN/viewer.ftl +++ b/viewer/locale/hi-IN/viewer.ftl @@ -39,12 +39,6 @@ pdfjs-open-file-button-label = खोलें pdfjs-print-button = .title = छापें pdfjs-print-button-label = छापें -# Used in Firefox for Android. -pdfjs-open-in-app-button = - .title = ऐप में खोलें -# Used in Firefox for Android. -# Length of the translation matters since we are in a mobile context, with limited screen estate. -pdfjs-open-in-app-button-label = ऐप में खोलें ## Secondary toolbar and context menu @@ -242,6 +236,12 @@ pdfjs-web-fonts-disabled = वेब फॉन्ट्स निष्क्र ## Editing + +## Remove button for the various kind of editor. + + +## + # Editor Parameters pdfjs-editor-free-text-color-input = रंग @@ -251,3 +251,17 @@ pdfjs-editor-free-text-color-input = रंग ## Editor resizers ## This is used in an aria label to help to understand the role of the resizer. + +## Color picker + + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + + +## New alt-text dialog +## Group note for entire feature: Alternative text (alt text) helps when people can't see the image. This feature includes a tool to create alt text automatically using an AI model that works locally on the user's device to preserve privacy. + + +## Image alt-text settings + diff --git a/viewer/locale/hr/viewer.ftl b/viewer/locale/hr/viewer.ftl index 7867f507..0c66341f 100644 --- a/viewer/locale/hr/viewer.ftl +++ b/viewer/locale/hr/viewer.ftl @@ -31,8 +31,8 @@ pdfjs-zoom-in-button-label = Uvećaj pdfjs-zoom-select = .title = Zumiranje pdfjs-presentation-mode-button = - .title = Prebaci u prezentacijski način rada -pdfjs-presentation-mode-button-label = Prezentacijski način rada + .title = Prebaci u modus prezentacija +pdfjs-presentation-mode-button-label = Modus prezentacija pdfjs-open-file-button = .title = Otvori datoteku pdfjs-open-file-button-label = Otvori @@ -70,10 +70,10 @@ pdfjs-page-rotate-ccw-button = .title = Rotiraj obrnutno od smjera kazaljke na satu pdfjs-page-rotate-ccw-button-label = Rotiraj obrnutno od smjera kazaljke na satu pdfjs-cursor-text-select-tool-button = - .title = Omogući alat za označavanje teksta + .title = Aktiviraj alat za biranje teksta pdfjs-cursor-text-select-tool-button-label = Alat za označavanje teksta pdfjs-cursor-hand-tool-button = - .title = Omogući ručni alat + .title = Aktiviraj ručni alat pdfjs-cursor-hand-tool-button-label = Ručni alat pdfjs-scroll-page-button = .title = Koristi klizanje stranice @@ -179,7 +179,7 @@ pdfjs-attachments-button = .title = Prikaži privitke pdfjs-attachments-button-label = Privitci pdfjs-layers-button = - .title = Prikaži slojeve (dvoklik za vraćanje svih slojeva u zadano stanje) + .title = Prikaži slojeve (dvoklik za vraćanje svih slojeva u standardno stanje) pdfjs-layers-button-label = Slojevi pdfjs-thumbs-button = .title = Prikaži minijature @@ -360,14 +360,30 @@ pdfjs-editor-alt-text-textarea = ## Editor resizers ## This is used in an aria label to help to understand the role of the resizer. -pdfjs-editor-resizer-label-top-left = Gornji lijevi kut — promijenite veličinu -pdfjs-editor-resizer-label-top-middle = Gore sredina — promijenite veličinu -pdfjs-editor-resizer-label-top-right = Gornji desni kut — promijenite veličinu -pdfjs-editor-resizer-label-middle-right = Sredina desno — promijenite veličinu -pdfjs-editor-resizer-label-bottom-right = Donji desni kut — promijenite veličinu -pdfjs-editor-resizer-label-bottom-middle = Dolje sredina — promjenite veličinu -pdfjs-editor-resizer-label-bottom-left = Donji lijevi kut — promijenite veličinu -pdfjs-editor-resizer-label-middle-left = Sredina lijevo — promijenite veličinu +pdfjs-editor-resizer-label-top-left = Gornji lijevi kut – promijeni veličinu +pdfjs-editor-resizer-label-top-middle = Sredina gore – promijeni veličinu +pdfjs-editor-resizer-label-top-right = Gornji desni kut – promijeni veličinu +pdfjs-editor-resizer-label-middle-right = Sredina desno – promijeni veličinu +pdfjs-editor-resizer-label-bottom-right = Donji desni kut – promijeni veličinu +pdfjs-editor-resizer-label-bottom-middle = Sredina dolje – promjeni veličinu +pdfjs-editor-resizer-label-bottom-left = Donji lijevi kut – promijeni veličinu +pdfjs-editor-resizer-label-middle-left = Sredina lijevo – promijeni veličinu +pdfjs-editor-resizer-top-left = + .aria-label = Gornji lijevi kut – promijeni veličinu +pdfjs-editor-resizer-top-middle = + .aria-label = Sredina gore – promijeni veličinu +pdfjs-editor-resizer-top-right = + .aria-label = Gornji desni kut – promijeni veličinu +pdfjs-editor-resizer-middle-right = + .aria-label = Sredina desno – promijeni veličinu +pdfjs-editor-resizer-bottom-right = + .aria-label = Donji desni kut – promijeni veličinu +pdfjs-editor-resizer-bottom-middle = + .aria-label = Sredina dolje – promjeni veličinu +pdfjs-editor-resizer-bottom-left = + .aria-label = Donji lijevi kut – promijeni veličinu +pdfjs-editor-resizer-middle-left = + .aria-label = Sredina lijevo – promijeni veličinu ## Color picker @@ -398,21 +414,31 @@ pdfjs-editor-highlight-show-all-button = ## New alt-text dialog ## Group note for entire feature: Alternative text (alt text) helps when people can't see the image. This feature includes a tool to create alt text automatically using an AI model that works locally on the user's device to preserve privacy. +pdfjs-editor-new-alt-text-textarea = + .placeholder = Ovdje upiši tvoj opis … +# This is a required legal disclaimer that refers to the automatically created text inside the alt text box above this text. It disappears if the text is edited by a human. +pdfjs-editor-new-alt-text-disclaimer1 = Ovaj je alternativni tekst stvoren automatski i može biti netočan. pdfjs-editor-new-alt-text-disclaimer-learn-more-url = Saznaj više -pdfjs-editor-new-alt-text-create-automatically-button-label = Automatski stvori zamjenski tekst +pdfjs-editor-new-alt-text-create-automatically-button-label = Automatski stvori alternativni tekst +pdfjs-editor-new-alt-text-error-title = Nije bilo moguće automatski izraditi alternativni tekst +# "Created automatically" is a prefix that will be added to the beginning of any alt text that has been automatically generated. After the colon, the user will see/hear the actual alt text description. If the alt text has been edited by a human, this prefix will not appear. +# Variables: +# $generatedAltText (String) - the generated alt-text. +pdfjs-editor-new-alt-text-generated-alt-text-with-disclaimer = Stvoreno automatski: { $generatedAltText } ## Image alt-text settings pdfjs-image-alt-text-settings-button = - .title = Postavke zamjenskog teksta slike -pdfjs-image-alt-text-settings-button-label = Postavke zamjenskog teksta slike -pdfjs-editor-alt-text-settings-dialog-label = Postavke zamjenskog teksta slike -pdfjs-editor-alt-text-settings-automatic-title = Automatski zamjenski tekst -pdfjs-editor-alt-text-settings-create-model-button-label = Automatski stvori zamjenski tekst + .title = Postavke alternativnog teksta slike +pdfjs-image-alt-text-settings-button-label = Postavke alternativnog teksta slike +pdfjs-editor-alt-text-settings-dialog-label = Postavke alternativnog teksta slike +pdfjs-editor-alt-text-settings-automatic-title = Automatski alternativni tekst +pdfjs-editor-alt-text-settings-create-model-button-label = Stvori alternativni tekst automatski +pdfjs-editor-alt-text-settings-ai-model-description = Radi lokalno na tvom uređaju kako bi tvoji podaci ostali privatni. Potrebno za automatski alternativni tekst. pdfjs-editor-alt-text-settings-delete-model-button = Izbriši pdfjs-editor-alt-text-settings-download-model-button = Preuzmi pdfjs-editor-alt-text-settings-downloading-model-button = Preuzimanje … -pdfjs-editor-alt-text-settings-editor-title = Uređivač zamjenskog teksta -pdfjs-editor-alt-text-settings-show-dialog-button-label = Prikaži uređivač zamjenskog teksta odmah pri dodavanju slike -pdfjs-editor-alt-text-settings-show-dialog-description = Pomaže osigurati da sve tvoje slike imaju zamjenski tekst. +pdfjs-editor-alt-text-settings-editor-title = Uređivač alternativnog teksta +pdfjs-editor-alt-text-settings-show-dialog-button-label = Prikaži uređivač alternativnog teksta odmah pri dodavanju slike +pdfjs-editor-alt-text-settings-show-dialog-description = Pomaže osigurati da sve tvoje slike imaju alternativni tekst. pdfjs-editor-alt-text-settings-close-button = Zatvori diff --git a/viewer/locale/hsb/viewer.ftl b/viewer/locale/hsb/viewer.ftl index 2f8e920f..d5fe5d5d 100644 --- a/viewer/locale/hsb/viewer.ftl +++ b/viewer/locale/hsb/viewer.ftl @@ -384,6 +384,22 @@ pdfjs-editor-resizer-label-bottom-right = Deleka naprawo – wulkosć změnić pdfjs-editor-resizer-label-bottom-middle = Deleka wosrjedź – wulkosć změnić pdfjs-editor-resizer-label-bottom-left = Deleka nalěwo – wulkosć změnić pdfjs-editor-resizer-label-middle-left = Wosrjedź nalěwo – wulkosć změnić +pdfjs-editor-resizer-top-left = + .aria-label = Horjeka nalěwo – wulkosć změnić +pdfjs-editor-resizer-top-middle = + .aria-label = Horjeka wosrjedź – wulkosć změnić +pdfjs-editor-resizer-top-right = + .aria-label = Horjeka naprawo – wulkosć změnić +pdfjs-editor-resizer-middle-right = + .aria-label = Wosrjedź naprawo – wulkosć změnić +pdfjs-editor-resizer-bottom-right = + .aria-label = Deleka naprawo – wulkosć změnić +pdfjs-editor-resizer-bottom-middle = + .aria-label = Deleka wosrjedź – wulkosć změnić +pdfjs-editor-resizer-bottom-left = + .aria-label = Deleka nalěwo – wulkosć změnić +pdfjs-editor-resizer-middle-left = + .aria-label = Wosrjedź nalěwo – wulkosć změnić ## Color picker diff --git a/viewer/locale/hu/viewer.ftl b/viewer/locale/hu/viewer.ftl index 5a1956a3..d8f5c5ea 100644 --- a/viewer/locale/hu/viewer.ftl +++ b/viewer/locale/hu/viewer.ftl @@ -380,6 +380,22 @@ pdfjs-editor-resizer-label-bottom-right = Jobb alsó sarok – átméretezés pdfjs-editor-resizer-label-bottom-middle = Alul középen – átméretezés pdfjs-editor-resizer-label-bottom-left = Bal alsó sarok – átméretezés pdfjs-editor-resizer-label-middle-left = Balra középen – átméretezés +pdfjs-editor-resizer-top-left = + .aria-label = Bal felső sarok – átméretezés +pdfjs-editor-resizer-top-middle = + .aria-label = Felül középen – átméretezés +pdfjs-editor-resizer-top-right = + .aria-label = Jobb felső sarok – átméretezés +pdfjs-editor-resizer-middle-right = + .aria-label = Jobbra középen – átméretezés +pdfjs-editor-resizer-bottom-right = + .aria-label = Jobb alsó sarok – átméretezés +pdfjs-editor-resizer-bottom-middle = + .aria-label = Alul középen – átméretezés +pdfjs-editor-resizer-bottom-left = + .aria-label = Bal alsó sarok – átméretezés +pdfjs-editor-resizer-middle-left = + .aria-label = Balra középen – átméretezés ## Color picker diff --git a/viewer/locale/ia/viewer.ftl b/viewer/locale/ia/viewer.ftl index bf207ab4..b69be14b 100644 --- a/viewer/locale/ia/viewer.ftl +++ b/viewer/locale/ia/viewer.ftl @@ -380,6 +380,22 @@ pdfjs-editor-resizer-label-bottom-right = Angulo inferior dextre — redimension pdfjs-editor-resizer-label-bottom-middle = Medio inferior — redimensionar pdfjs-editor-resizer-label-bottom-left = Angulo inferior sinistre — redimensionar pdfjs-editor-resizer-label-middle-left = Medio sinistre — redimensionar +pdfjs-editor-resizer-top-left = + .aria-label = Angulo superior sinistre — redimensionar +pdfjs-editor-resizer-top-middle = + .aria-label = Medio superior — redimensionar +pdfjs-editor-resizer-top-right = + .aria-label = Angulo superior dextre — redimensionar +pdfjs-editor-resizer-middle-right = + .aria-label = Medio dextre — redimensionar +pdfjs-editor-resizer-bottom-right = + .aria-label = Angulo inferior dextre — redimensionar +pdfjs-editor-resizer-bottom-middle = + .aria-label = Medio inferior — redimensionar +pdfjs-editor-resizer-bottom-left = + .aria-label = Angulo inferior sinistre — redimensionar +pdfjs-editor-resizer-middle-left = + .aria-label = Medio sinistre — redimensionar ## Color picker diff --git a/viewer/locale/is/viewer.ftl b/viewer/locale/is/viewer.ftl index 5bd3d61f..80242620 100644 --- a/viewer/locale/is/viewer.ftl +++ b/viewer/locale/is/viewer.ftl @@ -105,6 +105,14 @@ pdfjs-document-properties-button-label = Eiginleikar skjals… pdfjs-document-properties-file-name = Skráarnafn: pdfjs-document-properties-file-size = Skrárstærð: # Variables: +# $kb (Number) - the PDF file size in kilobytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-kb = { NUMBER($kb, maximumSignificantDigits: 3) } KB ({ $b } bæti) +# Variables: +# $mb (Number) - the PDF file size in megabytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-mb = { NUMBER($mb, maximumSignificantDigits: 3) } MB ({ $b } bæti) +# Variables: # $size_kb (Number) - the PDF file size in kilobytes # $size_b (Number) - the PDF file size in bytes pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) @@ -119,6 +127,9 @@ pdfjs-document-properties-keywords = Stikkorð: pdfjs-document-properties-creation-date = Búið til: pdfjs-document-properties-modification-date = Dags breytingar: # Variables: +# $dateObj (Date) - the creation/modification date and time of the PDF file +pdfjs-document-properties-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } +# Variables: # $date (Date) - the creation/modification date of the PDF file # $time (Time) - the creation/modification time of the PDF file pdfjs-document-properties-date-string = { $date }, { $time } @@ -275,6 +286,9 @@ pdfjs-annotation-date-string = { $date }, { $time } # Some common types are e.g.: "Check", "Text", "Comment", "Note" pdfjs-text-annotation-type = .alt = [{ $type } Skýring] +# Variables: +# $dateObj (Date) - the modification date and time of the annotation +pdfjs-annotation-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } ## Password @@ -366,6 +380,22 @@ pdfjs-editor-resizer-label-bottom-right = Neðst í hægra horni - breyta stær pdfjs-editor-resizer-label-bottom-middle = Neðst á miðju - breyta stærð pdfjs-editor-resizer-label-bottom-left = Neðst í vinstra horni - breyta stærð pdfjs-editor-resizer-label-middle-left = Miðja til vinstri - breyta stærð +pdfjs-editor-resizer-top-left = + .aria-label = Efst í vinstra horni - breyta stærð +pdfjs-editor-resizer-top-middle = + .aria-label = Efst á miðju - breyta stærð +pdfjs-editor-resizer-top-right = + .aria-label = Efst í hægra horni - breyta stærð +pdfjs-editor-resizer-middle-right = + .aria-label = Miðja til hægri - breyta stærð +pdfjs-editor-resizer-bottom-right = + .aria-label = Neðst í hægra horni - breyta stærð +pdfjs-editor-resizer-bottom-middle = + .aria-label = Neðst á miðju - breyta stærð +pdfjs-editor-resizer-bottom-left = + .aria-label = Neðst í vinstra horni - breyta stærð +pdfjs-editor-resizer-middle-left = + .aria-label = Miðja til vinstri - breyta stærð ## Color picker diff --git a/viewer/locale/ja/viewer.ftl b/viewer/locale/ja/viewer.ftl index 5681d5e5..97a73987 100644 --- a/viewer/locale/ja/viewer.ftl +++ b/viewer/locale/ja/viewer.ftl @@ -105,6 +105,14 @@ pdfjs-document-properties-button-label = 文書のプロパティ... pdfjs-document-properties-file-name = ファイル名: pdfjs-document-properties-file-size = ファイルサイズ: # Variables: +# $kb (Number) - the PDF file size in kilobytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-kb = { NUMBER($kb, maximumSignificantDigits: 3) } KB ({ $b } バイト) +# Variables: +# $mb (Number) - the PDF file size in megabytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-mb = { NUMBER($mb, maximumSignificantDigits: 3) } MB ({ $b } バイト) +# Variables: # $size_kb (Number) - the PDF file size in kilobytes # $size_b (Number) - the PDF file size in bytes pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } バイト) @@ -119,6 +127,9 @@ pdfjs-document-properties-keywords = キーワード: pdfjs-document-properties-creation-date = 作成日: pdfjs-document-properties-modification-date = 更新日: # Variables: +# $dateObj (Date) - the creation/modification date and time of the PDF file +pdfjs-document-properties-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } +# Variables: # $date (Date) - the creation/modification date of the PDF file # $time (Time) - the creation/modification time of the PDF file pdfjs-document-properties-date-string = { $date }, { $time } @@ -267,6 +278,9 @@ pdfjs-annotation-date-string = { $date }, { $time } # Some common types are e.g.: "Check", "Text", "Comment", "Note" pdfjs-text-annotation-type = .alt = [{ $type } 注釈] +# Variables: +# $dateObj (Date) - the modification date and time of the annotation +pdfjs-annotation-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } ## Password @@ -358,6 +372,22 @@ pdfjs-editor-resizer-label-bottom-right = 右下隅 — サイズ変更 pdfjs-editor-resizer-label-bottom-middle = 下中央 — サイズ変更 pdfjs-editor-resizer-label-bottom-left = 左下隅 — サイズ変更 pdfjs-editor-resizer-label-middle-left = 左中央 — サイズ変更 +pdfjs-editor-resizer-top-left = + .aria-label = 左上隅 — サイズ変更 +pdfjs-editor-resizer-top-middle = + .aria-label = 上中央 — サイズ変更 +pdfjs-editor-resizer-top-right = + .aria-label = 右上隅 — サイズ変更 +pdfjs-editor-resizer-middle-right = + .aria-label = 右中央 — サイズ変更 +pdfjs-editor-resizer-bottom-right = + .aria-label = 右下隅 — サイズ変更 +pdfjs-editor-resizer-bottom-middle = + .aria-label = 下中央 — サイズ変更 +pdfjs-editor-resizer-bottom-left = + .aria-label = 左下隅 — サイズ変更 +pdfjs-editor-resizer-middle-left = + .aria-label = 左中央 — サイズ変更 ## Color picker @@ -397,8 +427,7 @@ pdfjs-editor-new-alt-text-textarea = .placeholder = ここに説明を記入してください... # This text refers to the alt text box above this description. It offers a definition of alt text. pdfjs-editor-new-alt-text-description = 画像が読み込まれない場合や見えない人のための短い説明です。 -# This is a required legal disclaimer that refers to the automatically created text inside the alt text box above this text. It disappears if the text is edited by a human. -pdfjs-editor-new-alt-text-disclaimer = この代替テキストは自動的に生成されました。 +pdfjs-editor-new-alt-text-disclaimer1 = この代替テキストは自動的に生成されたため正確でない可能性があります。 pdfjs-editor-new-alt-text-disclaimer-learn-more-url = 詳細情報 pdfjs-editor-new-alt-text-create-automatically-button-label = 代替テキストを自動生成 pdfjs-editor-new-alt-text-not-now-button = 後で diff --git a/viewer/locale/ka/viewer.ftl b/viewer/locale/ka/viewer.ftl index f31898fa..1a1fdb44 100644 --- a/viewer/locale/ka/viewer.ftl +++ b/viewer/locale/ka/viewer.ftl @@ -51,12 +51,6 @@ pdfjs-download-button-label = ჩამოტვირთვა pdfjs-bookmark-button = .title = მიმდინარე გვერდი (ბმული ამ გვერდისთვის) pdfjs-bookmark-button-label = მიმდინარე გვერდი -# Used in Firefox for Android. -pdfjs-open-in-app-button = - .title = გახსნა პროგრამით -# Used in Firefox for Android. -# Length of the translation matters since we are in a mobile context, with limited screen estate. -pdfjs-open-in-app-button-label = გახსნა პროგრამით ## Secondary toolbar and context menu @@ -301,8 +295,6 @@ pdfjs-editor-ink-button-label = ხაზვა pdfjs-editor-stamp-button = .title = სურათების დართვა ან ჩასწორება pdfjs-editor-stamp-button-label = სურათების დართვა ან ჩასწორება -pdfjs-editor-remove-button = - .title = მოცილება pdfjs-editor-highlight-button = .title = მონიშვნა pdfjs-editor-highlight-button-label = მონიშვნა @@ -366,6 +358,22 @@ pdfjs-editor-resizer-label-bottom-right = ქვევით მარჯვნ pdfjs-editor-resizer-label-bottom-middle = ქვევით შუაში — ზომაცვლა pdfjs-editor-resizer-label-bottom-left = ზვევით მარცხნივ — ზომაცვლა pdfjs-editor-resizer-label-middle-left = შუაში მარცხნივ — ზომაცვლა +pdfjs-editor-resizer-top-left = + .aria-label = ზევით მარცხნივ — ზომაცვლა +pdfjs-editor-resizer-top-middle = + .aria-label = ზევით შუაში — ზომაცვლა +pdfjs-editor-resizer-top-right = + .aria-label = ზევით მარჯვნივ — ზომაცვლა +pdfjs-editor-resizer-middle-right = + .aria-label = შუაში მარჯვნივ — ზომაცვლა +pdfjs-editor-resizer-bottom-right = + .aria-label = ქვევით მარჯვნივ — ზომაცვლა +pdfjs-editor-resizer-bottom-middle = + .aria-label = ქვევით შუაში — ზომაცვლა +pdfjs-editor-resizer-bottom-left = + .aria-label = ზვევით მარცხნივ — ზომაცვლა +pdfjs-editor-resizer-middle-left = + .aria-label = შუაში მარცხნივ — ზომაცვლა ## Color picker @@ -385,3 +393,14 @@ pdfjs-editor-colorpicker-pink = .title = ვარდისფერი pdfjs-editor-colorpicker-red = .title = წითელი + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + + +## New alt-text dialog +## Group note for entire feature: Alternative text (alt text) helps when people can't see the image. This feature includes a tool to create alt text automatically using an AI model that works locally on the user's device to preserve privacy. + + +## Image alt-text settings + diff --git a/viewer/locale/kab/viewer.ftl b/viewer/locale/kab/viewer.ftl index cfe0ba33..dda88c1e 100644 --- a/viewer/locale/kab/viewer.ftl +++ b/viewer/locale/kab/viewer.ftl @@ -105,6 +105,14 @@ pdfjs-document-properties-button-label = Taɣaṛa n isemli… pdfjs-document-properties-file-name = Isem n ufaylu: pdfjs-document-properties-file-size = Teɣzi n ufaylu: # Variables: +# $kb (Number) - the PDF file size in kilobytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-kb = { NUMBER($kb, maximumSignificantDigits: 3) } KB ({ $b } yibiten) +# Variables: +# $mb (Number) - the PDF file size in megabytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-mb = { NUMBER($mb, maximumSignificantDigits: 3) } MB ({ $b } yibiten) +# Variables: # $size_kb (Number) - the PDF file size in kilobytes # $size_b (Number) - the PDF file size in bytes pdfjs-document-properties-kb = { $size_kb } KAṬ ({ $size_b } ibiten) @@ -119,6 +127,9 @@ pdfjs-document-properties-keywords = Awalen n tsaruţ pdfjs-document-properties-creation-date = Azemz n tmerna: pdfjs-document-properties-modification-date = Azemz n usnifel: # Variables: +# $dateObj (Date) - the creation/modification date and time of the PDF file +pdfjs-document-properties-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } +# Variables: # $date (Date) - the creation/modification date of the PDF file # $time (Time) - the creation/modification time of the PDF file pdfjs-document-properties-date-string = { $date }, { $time } @@ -275,6 +286,9 @@ pdfjs-annotation-date-string = { $date }, { $time } # Some common types are e.g.: "Check", "Text", "Comment", "Note" pdfjs-text-annotation-type = .alt = [Tabzimt { $type }] +# Variables: +# $dateObj (Date) - the modification date and time of the annotation +pdfjs-annotation-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } ## Password @@ -327,6 +341,8 @@ pdfjs-editor-stamp-add-image-button = pdfjs-editor-stamp-add-image-button-label = Rnu tawlaft # This refers to the thickness of the line used for free highlighting (not bound to text) pdfjs-editor-free-highlight-thickness-input = Tuzert +pdfjs-editor-free-highlight-thickness-title = + .title = Beddel tuzert mi ara d-tesbeggneḍ iferdisen niḍen ur nelli d aḍris pdfjs-free-text = .aria-label = Amaẓrag n uḍris pdfjs-free-text-default-content = Bdu tira... @@ -358,6 +374,22 @@ pdfjs-editor-resizer-label-bottom-right = Tiɣmert n wadda n yeffus — semsawi pdfjs-editor-resizer-label-bottom-middle = Talemmat n wadda — semsawi teɣzi pdfjs-editor-resizer-label-bottom-left = Tiɣmert n wadda n zelmeḍ — semsawi teɣzi pdfjs-editor-resizer-label-middle-left = Talemmast tazelmdaḍt — semsawi teɣzi +pdfjs-editor-resizer-top-left = + .aria-label = Tiɣmert n ufella n zelmeḍ — semsawi teɣzi +pdfjs-editor-resizer-top-middle = + .aria-label = Talemmat n ufella — semsawi teɣzi +pdfjs-editor-resizer-top-right = + .aria-label = Tiɣmert n ufella n yeffus — semsawi teɣzi +pdfjs-editor-resizer-middle-right = + .aria-label = Talemmast tayeffust — semsawi teɣzi +pdfjs-editor-resizer-bottom-right = + .aria-label = Tiɣmert n wadda n yeffus — semsawi teɣzi +pdfjs-editor-resizer-bottom-middle = + .aria-label = Talemmat n wadda — semsawi teɣzi +pdfjs-editor-resizer-bottom-left = + .aria-label = Tiɣmert n wadda n zelmeḍ — semsawi teɣzi +pdfjs-editor-resizer-middle-left = + .aria-label = Talemmast tazelmdaḍt — semsawi teɣzi ## Color picker @@ -384,3 +416,23 @@ pdfjs-editor-colorpicker-red = pdfjs-editor-highlight-show-all-button-label = Sken akk pdfjs-editor-highlight-show-all-button = .title = Sken akk + +## New alt-text dialog +## Group note for entire feature: Alternative text (alt text) helps when people can't see the image. This feature includes a tool to create alt text automatically using an AI model that works locally on the user's device to preserve privacy. + +# Modal header positioned above a text box where users can add the alt text. +pdfjs-editor-new-alt-text-dialog-add-label = Rnu aḍris niḍen (aglam n tugna) +pdfjs-editor-new-alt-text-textarea = + .placeholder = Aru aglam-ik dagi… +pdfjs-editor-new-alt-text-disclaimer-learn-more-url = Issin ugar +pdfjs-editor-new-alt-text-create-automatically-button-label = Rnu aḍris niḍen s wudem awurman +pdfjs-editor-new-alt-text-not-now-button = Mačči tura +pdfjs-editor-new-alt-text-error-title = D awezɣi timerna n uḍris niḍen s wudem awurman +pdfjs-editor-new-alt-text-error-close-button = Mdel + +## Image alt-text settings + +pdfjs-editor-alt-text-settings-delete-model-button = Kkes +pdfjs-editor-alt-text-settings-download-model-button = Sader +pdfjs-editor-alt-text-settings-downloading-model-button = Asader… +pdfjs-editor-alt-text-settings-close-button = Mdel diff --git a/viewer/locale/kk/viewer.ftl b/viewer/locale/kk/viewer.ftl index f8abb1ba..28a89962 100644 --- a/viewer/locale/kk/viewer.ftl +++ b/viewer/locale/kk/viewer.ftl @@ -380,6 +380,22 @@ pdfjs-editor-resizer-label-bottom-right = Төменгі оң жақ бұрыш pdfjs-editor-resizer-label-bottom-middle = Төменгі ортасы — өлшемін өзгерту pdfjs-editor-resizer-label-bottom-left = Төменгі сол жақ бұрыш — өлшемін өзгерту pdfjs-editor-resizer-label-middle-left = Ортаңғы сол жақ — өлшемін өзгерту +pdfjs-editor-resizer-top-left = + .aria-label = Жоғарғы сол жақ бұрыш — өлшемін өзгерту +pdfjs-editor-resizer-top-middle = + .aria-label = Жоғарғы ортасы — өлшемін өзгерту +pdfjs-editor-resizer-top-right = + .aria-label = Жоғарғы оң жақ бұрыш — өлшемін өзгерту +pdfjs-editor-resizer-middle-right = + .aria-label = Ортаңғы оң жақ — өлшемін өзгерту +pdfjs-editor-resizer-bottom-right = + .aria-label = Төменгі оң жақ бұрыш — өлшемін өзгерту +pdfjs-editor-resizer-bottom-middle = + .aria-label = Төменгі ортасы — өлшемін өзгерту +pdfjs-editor-resizer-bottom-left = + .aria-label = Төменгі сол жақ бұрыш — өлшемін өзгерту +pdfjs-editor-resizer-middle-left = + .aria-label = Ортаңғы сол жақ — өлшемін өзгерту ## Color picker diff --git a/viewer/locale/ko/viewer.ftl b/viewer/locale/ko/viewer.ftl index 5c9b91f6..ee20d78d 100644 --- a/viewer/locale/ko/viewer.ftl +++ b/viewer/locale/ko/viewer.ftl @@ -372,6 +372,22 @@ pdfjs-editor-resizer-label-bottom-right = 오른쪽 아래 - 크기 조정 pdfjs-editor-resizer-label-bottom-middle = 가운데 아래 — 크기 조정 pdfjs-editor-resizer-label-bottom-left = 왼쪽 아래 - 크기 조정 pdfjs-editor-resizer-label-middle-left = 왼쪽 가운데 — 크기 조정 +pdfjs-editor-resizer-top-left = + .aria-label = 왼쪽 위 — 크기 조정 +pdfjs-editor-resizer-top-middle = + .aria-label = 가운데 위 - 크기 조정 +pdfjs-editor-resizer-top-right = + .aria-label = 오른쪽 위 — 크기 조정 +pdfjs-editor-resizer-middle-right = + .aria-label = 오른쪽 가운데 — 크기 조정 +pdfjs-editor-resizer-bottom-right = + .aria-label = 오른쪽 아래 - 크기 조정 +pdfjs-editor-resizer-bottom-middle = + .aria-label = 가운데 아래 — 크기 조정 +pdfjs-editor-resizer-bottom-left = + .aria-label = 왼쪽 아래 - 크기 조정 +pdfjs-editor-resizer-middle-left = + .aria-label = 왼쪽 가운데 — 크기 조정 ## Color picker diff --git a/viewer/locale/lo/viewer.ftl b/viewer/locale/lo/viewer.ftl index fdad16ad..557e2015 100644 --- a/viewer/locale/lo/viewer.ftl +++ b/viewer/locale/lo/viewer.ftl @@ -45,12 +45,6 @@ pdfjs-save-button-label = ບັນທຶກ pdfjs-bookmark-button = .title = ໜ້າປັດຈຸບັນ (ເບິ່ງ URL ຈາກໜ້າປັດຈຸບັນ) pdfjs-bookmark-button-label = ຫນ້າ​ປັດ​ຈຸ​ບັນ -# Used in Firefox for Android. -pdfjs-open-in-app-button = - .title = ເປີດໃນ App -# Used in Firefox for Android. -# Length of the translation matters since we are in a mobile context, with limited screen estate. -pdfjs-open-in-app-button-label = ເປີດໃນ App ## Secondary toolbar and context menu @@ -277,6 +271,12 @@ pdfjs-editor-free-text-button-label = ຂໍ້ຄວາມ pdfjs-editor-ink-button = .title = ແຕ້ມ pdfjs-editor-ink-button-label = ແຕ້ມ + +## Remove button for the various kind of editor. + + +## + # Editor Parameters pdfjs-editor-free-text-color-input = ສີ pdfjs-editor-free-text-size-input = ຂະຫນາດ @@ -297,3 +297,17 @@ pdfjs-ink-canvas = ## Editor resizers ## This is used in an aria label to help to understand the role of the resizer. + +## Color picker + + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + + +## New alt-text dialog +## Group note for entire feature: Alternative text (alt text) helps when people can't see the image. This feature includes a tool to create alt text automatically using an AI model that works locally on the user's device to preserve privacy. + + +## Image alt-text settings + diff --git a/viewer/locale/nb-NO/viewer.ftl b/viewer/locale/nb-NO/viewer.ftl index 6519adb3..d802ebcc 100644 --- a/viewer/locale/nb-NO/viewer.ftl +++ b/viewer/locale/nb-NO/viewer.ftl @@ -105,6 +105,14 @@ pdfjs-document-properties-button-label = Dokumentegenskaper … pdfjs-document-properties-file-name = Filnavn: pdfjs-document-properties-file-size = Filstørrelse: # Variables: +# $kb (Number) - the PDF file size in kilobytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-kb = { NUMBER($kb, maximumSignificantDigits: 3) } KB ({ $b } byte) +# Variables: +# $mb (Number) - the PDF file size in megabytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-mb = { NUMBER($mb, maximumSignificantDigits: 3) } MB ({ $b } byte) +# Variables: # $size_kb (Number) - the PDF file size in kilobytes # $size_b (Number) - the PDF file size in bytes pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) @@ -119,6 +127,9 @@ pdfjs-document-properties-keywords = Nøkkelord: pdfjs-document-properties-creation-date = Opprettet dato: pdfjs-document-properties-modification-date = Endret dato: # Variables: +# $dateObj (Date) - the creation/modification date and time of the PDF file +pdfjs-document-properties-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } +# Variables: # $date (Date) - the creation/modification date of the PDF file # $time (Time) - the creation/modification time of the PDF file pdfjs-document-properties-date-string = { $date }, { $time } @@ -275,6 +286,9 @@ pdfjs-annotation-date-string = { $date }, { $time } # Some common types are e.g.: "Check", "Text", "Comment", "Note" pdfjs-text-annotation-type = .alt = [{ $type } annotasjon] +# Variables: +# $dateObj (Date) - the modification date and time of the annotation +pdfjs-annotation-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } ## Password @@ -298,8 +312,6 @@ pdfjs-editor-stamp-button-label = Legg til eller rediger bilder pdfjs-editor-highlight-button = .title = Markere pdfjs-editor-highlight-button-label = Markere -pdfjs-highlight-floating-button = - .title = Markere pdfjs-highlight-floating-button1 = .title = Markere .aria-label = Markere @@ -368,6 +380,22 @@ pdfjs-editor-resizer-label-bottom-right = Nederste høyre hjørne – endre stø pdfjs-editor-resizer-label-bottom-middle = Nederst i midten — endre størrelse pdfjs-editor-resizer-label-bottom-left = Nederste venstre hjørne – endre størrelse pdfjs-editor-resizer-label-middle-left = Midt til venstre — endre størrelse +pdfjs-editor-resizer-top-left = + .aria-label = Øverste venstre hjørne – endre størrelse +pdfjs-editor-resizer-top-middle = + .aria-label = Øverst i midten — endre størrelse +pdfjs-editor-resizer-top-right = + .aria-label = Øverste høyre hjørne – endre størrelse +pdfjs-editor-resizer-middle-right = + .aria-label = Midt til høyre – endre størrelse +pdfjs-editor-resizer-bottom-right = + .aria-label = Nederste høyre hjørne – endre størrelse +pdfjs-editor-resizer-bottom-middle = + .aria-label = Nederst i midten — endre størrelse +pdfjs-editor-resizer-bottom-left = + .aria-label = Nederste venstre hjørne – endre størrelse +pdfjs-editor-resizer-middle-left = + .aria-label = Midt til venstre — endre størrelse ## Color picker @@ -394,3 +422,60 @@ pdfjs-editor-colorpicker-red = pdfjs-editor-highlight-show-all-button-label = Vis alle pdfjs-editor-highlight-show-all-button = .title = Vis alle + +## New alt-text dialog +## Group note for entire feature: Alternative text (alt text) helps when people can't see the image. This feature includes a tool to create alt text automatically using an AI model that works locally on the user's device to preserve privacy. + +# Modal header positioned above a text box where users can edit the alt text. +pdfjs-editor-new-alt-text-dialog-edit-label = Rediger alternativ tekst (bildebeskrivelse) +# Modal header positioned above a text box where users can add the alt text. +pdfjs-editor-new-alt-text-dialog-add-label = Legg til alternativ tekst (bildebeskrivelse) +pdfjs-editor-new-alt-text-textarea = + .placeholder = Skriv din beskrivelse her… +# This text refers to the alt text box above this description. It offers a definition of alt text. +pdfjs-editor-new-alt-text-description = Kort beskrivelse for folk som ikke kan se bildet eller når bildet ikke lastes inn. +# This is a required legal disclaimer that refers to the automatically created text inside the alt text box above this text. It disappears if the text is edited by a human. +pdfjs-editor-new-alt-text-disclaimer1 = Denne alternative teksten ble opprettet automatisk og kan være unøyaktig. +pdfjs-editor-new-alt-text-disclaimer-learn-more-url = Les mer +pdfjs-editor-new-alt-text-create-automatically-button-label = Lag alternativ tekst automatisk +pdfjs-editor-new-alt-text-not-now-button = Ikke nå +pdfjs-editor-new-alt-text-error-title = Kunne ikke opprette alternativ tekst automatisk +pdfjs-editor-new-alt-text-error-description = Skriv din egen alternativ-tekst eller prøv igjen senere. +pdfjs-editor-new-alt-text-error-close-button = Lukk +# Variables: +# $totalSize (Number) - the total size (in MB) of the AI model. +# $downloadedSize (Number) - the downloaded size (in MB) of the AI model. +# $percent (Number) - the percentage of the downloaded size. +pdfjs-editor-new-alt-text-ai-model-downloading-progress = Laster ned alternativ tekst AI-modell ({ $downloadedSize } av { $totalSize } MB) + .aria-valuetext = Laster ned alternativ tekst AI-modell ({ $downloadedSize } av { $totalSize } MB) +# This is a button that users can click to edit the alt text they have already added. +pdfjs-editor-new-alt-text-added-button-label = Alternativ tekst lagt til +# This is a button that users can click to open the alt text editor and add alt text when it is not present. +pdfjs-editor-new-alt-text-missing-button-label = Mangler alternativ tekst +# This is a button that opens up the alt text modal where users should review the alt text that was automatically generated. +pdfjs-editor-new-alt-text-to-review-button-label = Gjennomgå alternativ tekst +# "Created automatically" is a prefix that will be added to the beginning of any alt text that has been automatically generated. After the colon, the user will see/hear the actual alt text description. If the alt text has been edited by a human, this prefix will not appear. +# Variables: +# $generatedAltText (String) - the generated alt-text. +pdfjs-editor-new-alt-text-generated-alt-text-with-disclaimer = Opprettet automatisk: { $generatedAltText } + +## Image alt-text settings + +pdfjs-image-alt-text-settings-button = + .title = Innstillinger for alternativ tekst for bilde +pdfjs-image-alt-text-settings-button-label = Innstillinger for alternativ tekst for bilde +pdfjs-editor-alt-text-settings-dialog-label = Innstillinger for alternativ tekst for bilde +pdfjs-editor-alt-text-settings-automatic-title = Automatisk alternativ tekst +pdfjs-editor-alt-text-settings-create-model-button-label = Opprett alternativ tekst automatisk +pdfjs-editor-alt-text-settings-create-model-description = Foreslår beskrivelser for å hjelpe folk som ikke kan se bildet eller når bildet ikke lastes inn. +# Variables: +# $totalSize (Number) - the total size (in MB) of the AI model. +pdfjs-editor-alt-text-settings-download-model-label = Alternativ tekst AI-modell ({ $totalSize } MB) +pdfjs-editor-alt-text-settings-ai-model-description = Kjører lokalt på enheten din slik at dataene dine forblir private. Nødvendig for automatisk alternativ tekst. +pdfjs-editor-alt-text-settings-delete-model-button = Slett +pdfjs-editor-alt-text-settings-download-model-button = Last ned +pdfjs-editor-alt-text-settings-downloading-model-button = Laster ned… +pdfjs-editor-alt-text-settings-editor-title = Alternativ tekst-redigerer +pdfjs-editor-alt-text-settings-show-dialog-button-label = Vis alternativ tekst-redigerer direkte når du legger til et bilde +pdfjs-editor-alt-text-settings-show-dialog-description = Hjelper deg å sørge for at alle bildene dine har alternativ tekst. +pdfjs-editor-alt-text-settings-close-button = Lukk diff --git a/viewer/locale/nl/viewer.ftl b/viewer/locale/nl/viewer.ftl index 8a76d43a..7b162e42 100644 --- a/viewer/locale/nl/viewer.ftl +++ b/viewer/locale/nl/viewer.ftl @@ -380,6 +380,22 @@ pdfjs-editor-resizer-label-bottom-right = Rechterbenedenhoek – formaat wijzige pdfjs-editor-resizer-label-bottom-middle = Midden onder – formaat wijzigen pdfjs-editor-resizer-label-bottom-left = Linkerbenedenhoek – formaat wijzigen pdfjs-editor-resizer-label-middle-left = Links midden – formaat wijzigen +pdfjs-editor-resizer-top-left = + .aria-label = Linkerbovenhoek – formaat wijzigen +pdfjs-editor-resizer-top-middle = + .aria-label = Midden boven – formaat wijzigen +pdfjs-editor-resizer-top-right = + .aria-label = Rechterbovenhoek – formaat wijzigen +pdfjs-editor-resizer-middle-right = + .aria-label = Midden rechts – formaat wijzigen +pdfjs-editor-resizer-bottom-right = + .aria-label = Rechterbenedenhoek – formaat wijzigen +pdfjs-editor-resizer-bottom-middle = + .aria-label = Midden onder – formaat wijzigen +pdfjs-editor-resizer-bottom-left = + .aria-label = Linkerbenedenhoek – formaat wijzigen +pdfjs-editor-resizer-middle-left = + .aria-label = Links midden – formaat wijzigen ## Color picker diff --git a/viewer/locale/nn-NO/viewer.ftl b/viewer/locale/nn-NO/viewer.ftl index fbee62c2..3044c57b 100644 --- a/viewer/locale/nn-NO/viewer.ftl +++ b/viewer/locale/nn-NO/viewer.ftl @@ -105,6 +105,14 @@ pdfjs-document-properties-button-label = Dokumenteigenskapar… pdfjs-document-properties-file-name = Filnamn: pdfjs-document-properties-file-size = Filstorleik: # Variables: +# $kb (Number) - the PDF file size in kilobytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-kb = { NUMBER($kb, maximumSignificantDigits: 3) } kB ({ $b } byte) +# Variables: +# $mb (Number) - the PDF file size in megabytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-mb = { NUMBER($mb, maximumSignificantDigits: 3) } MB ({ $b } byte) +# Variables: # $size_kb (Number) - the PDF file size in kilobytes # $size_b (Number) - the PDF file size in bytes pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) @@ -119,6 +127,9 @@ pdfjs-document-properties-keywords = Stikkord: pdfjs-document-properties-creation-date = Dato oppretta: pdfjs-document-properties-modification-date = Dato endra: # Variables: +# $dateObj (Date) - the creation/modification date and time of the PDF file +pdfjs-document-properties-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } +# Variables: # $date (Date) - the creation/modification date of the PDF file # $time (Time) - the creation/modification time of the PDF file pdfjs-document-properties-date-string = { $date }, { $time } @@ -275,6 +286,9 @@ pdfjs-annotation-date-string = { $date } { $time } # Some common types are e.g.: "Check", "Text", "Comment", "Note" pdfjs-text-annotation-type = .alt = [{ $type } annotasjon] +# Variables: +# $dateObj (Date) - the modification date and time of the annotation +pdfjs-annotation-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } ## Password @@ -366,6 +380,22 @@ pdfjs-editor-resizer-label-bottom-right = Nedste høgre hjørne – endre størr pdfjs-editor-resizer-label-bottom-middle = Nedst i midten — endre størrelse pdfjs-editor-resizer-label-bottom-left = Nedste venstre hjørne – endre størrelse pdfjs-editor-resizer-label-middle-left = Midt til venstre — endre størrelse +pdfjs-editor-resizer-top-left = + .aria-label = Øvste venstre hjørne – endre størrelse +pdfjs-editor-resizer-top-middle = + .aria-label = Øvst i midten — endre størrelse +pdfjs-editor-resizer-top-right = + .aria-label = Øvste høgre hjørne – endre størrelse +pdfjs-editor-resizer-middle-right = + .aria-label = Midt til høgre – endre størrelse +pdfjs-editor-resizer-bottom-right = + .aria-label = Nedste høgre hjørne – endre størrelse +pdfjs-editor-resizer-bottom-middle = + .aria-label = Nedst i midten — endre størrelse +pdfjs-editor-resizer-bottom-left = + .aria-label = Nedste venstre hjørne – endre størrelse +pdfjs-editor-resizer-middle-left = + .aria-label = Midt til venstre — endre størrelse ## Color picker @@ -437,6 +467,7 @@ pdfjs-image-alt-text-settings-button-label = Alternative tekst-innstillingar for pdfjs-editor-alt-text-settings-dialog-label = Alternative tekst-innstillingar for bilde pdfjs-editor-alt-text-settings-automatic-title = Automatisk alternativ tekst pdfjs-editor-alt-text-settings-create-model-button-label = Opprett alternativ tekt automatisk +pdfjs-editor-alt-text-settings-create-model-description = Foreslår skildringar for å hjelpe folk som ikkje kan sjå bildet eller når bildet ikkje blir lasta inn. # Variables: # $totalSize (Number) - the total size (in MB) of the AI model. pdfjs-editor-alt-text-settings-download-model-label = AI-modell for alternativ tekst ({ $totalSize } MB) @@ -446,4 +477,5 @@ pdfjs-editor-alt-text-settings-download-model-button = Last ned pdfjs-editor-alt-text-settings-downloading-model-button = Lastar ned… pdfjs-editor-alt-text-settings-editor-title = Alternativ tekst-redigerar pdfjs-editor-alt-text-settings-show-dialog-button-label = Vis alternativ tekst-redigerar direkte når du legg til eit bilde +pdfjs-editor-alt-text-settings-show-dialog-description = Hjelper deg med å sørgje for at alle bilda dine har alternativ tekst. pdfjs-editor-alt-text-settings-close-button = Lat att diff --git a/viewer/locale/pa-IN/viewer.ftl b/viewer/locale/pa-IN/viewer.ftl index 6500b344..f977edf2 100644 --- a/viewer/locale/pa-IN/viewer.ftl +++ b/viewer/locale/pa-IN/viewer.ftl @@ -105,6 +105,14 @@ pdfjs-document-properties-button-label = …ਦਸਤਾਵੇਜ਼ ਦੀ ਵਿ pdfjs-document-properties-file-name = ਫਾਈਲ ਦਾ ਨਾਂ: pdfjs-document-properties-file-size = ਫਾਈਲ ਦਾ ਆਕਾਰ: # Variables: +# $kb (Number) - the PDF file size in kilobytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-kb = { NUMBER($kb, maximumSignificantDigits: 3) } KB ({ $b } ਬਾਈਟ) +# Variables: +# $mb (Number) - the PDF file size in megabytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-mb = { NUMBER($mb, maximumSignificantDigits: 3) } MB ({ $b } ਬਾਈਟ) +# Variables: # $size_kb (Number) - the PDF file size in kilobytes # $size_b (Number) - the PDF file size in bytes pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } ਬਾਈਟ) @@ -119,6 +127,9 @@ pdfjs-document-properties-keywords = ਸ਼ਬਦ: pdfjs-document-properties-creation-date = ਬਣਾਉਣ ਦੀ ਮਿਤੀ: pdfjs-document-properties-modification-date = ਸੋਧ ਦੀ ਮਿਤੀ: # Variables: +# $dateObj (Date) - the creation/modification date and time of the PDF file +pdfjs-document-properties-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } +# Variables: # $date (Date) - the creation/modification date of the PDF file # $time (Time) - the creation/modification time of the PDF file pdfjs-document-properties-date-string = { $date }, { $time } @@ -275,6 +286,9 @@ pdfjs-annotation-date-string = { $date }, { $time } # Some common types are e.g.: "Check", "Text", "Comment", "Note" pdfjs-text-annotation-type = .alt = [{ $type } ਵਿਆਖਿਆ] +# Variables: +# $dateObj (Date) - the modification date and time of the annotation +pdfjs-annotation-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } ## Password @@ -366,6 +380,22 @@ pdfjs-editor-resizer-label-bottom-right = ਹੇਠਾਂ ਸੱਜਾ ਕੋਨ pdfjs-editor-resizer-label-bottom-middle = ਹੇਠਾਂ ਮੱਧ — ਮੁੜ-ਆਕਾਰ ਕਰੋ pdfjs-editor-resizer-label-bottom-left = ਹੇਠਾਂ ਖੱਬਾ ਕੋਨਾ — ਮੁੜ-ਆਕਾਰ ਕਰੋ pdfjs-editor-resizer-label-middle-left = ਮੱਧ ਖੱਬਾ — ਮੁੜ-ਆਕਾਰ ਕਰੋ +pdfjs-editor-resizer-top-left = + .aria-label = ਉੱਤੇ ਖੱਬਾ ਕੋਨਾ — ਮੁੜ-ਆਕਾਰ ਕਰੋ +pdfjs-editor-resizer-top-middle = + .aria-label = ਉੱਤੇ ਮੱਧ — ਮੁੜ-ਆਕਾਰ ਕਰੋ +pdfjs-editor-resizer-top-right = + .aria-label = ਉੱਤੇ ਸੱਜਾ ਕੋਨਾ — ਮੁੜ-ਆਕਾਰ ਕਰੋ +pdfjs-editor-resizer-middle-right = + .aria-label = ਮੱਧ ਸੱਜਾ — ਮੁੜ-ਆਕਾਰ ਕਰੋ +pdfjs-editor-resizer-bottom-right = + .aria-label = ਹੇਠਾਂ ਸੱਜਾ ਕੋਨਾ — ਮੁੜ-ਆਕਾਰ ਕਰੋ +pdfjs-editor-resizer-bottom-middle = + .aria-label = ਹੇਠਾਂ ਮੱਧ — ਮੁੜ-ਆਕਾਰ ਕਰੋ +pdfjs-editor-resizer-bottom-left = + .aria-label = ਹੇਠਾਂ ਖੱਬਾ ਕੋਨਾ — ਮੁੜ-ਆਕਾਰ ਕਰੋ +pdfjs-editor-resizer-middle-left = + .aria-label = ਮੱਧ ਖੱਬਾ — ਮੁੜ-ਆਕਾਰ ਕਰੋ ## Color picker @@ -406,8 +436,6 @@ pdfjs-editor-new-alt-text-textarea = pdfjs-editor-new-alt-text-description = ਲੋਕ, ਜੋ ਕਿ ਚਿੱਤਰ ਨਹੀਂ ਵੇਖ ਸਕਦੇ ਜਾਂ ਜਦ ਵੀ ਚਿੱਤਰਾਂ ਨੂੰ ਲੋਡ ਨਹੀਂ ਜਾ ਸਕਦਾ, ਉਸ ਲਈ ਛੋਟਾ ਵੇਰਵਾ ਦਿਓ। # This is a required legal disclaimer that refers to the automatically created text inside the alt text box above this text. It disappears if the text is edited by a human. pdfjs-editor-new-alt-text-disclaimer1 = ਇਹ ਬਦਲਵੀਂ ਲਿਖਤ ਆਪਣੇ-ਆਪ ਤਿਆਰ ਕੀਤੀ ਗਈ ਸੀ ਅਤੇ ਗਲਤ ਵੀ ਹੋ ਸਕਦੀ ਹੈ। -# This is a required legal disclaimer that refers to the automatically created text inside the alt text box above this text. It disappears if the text is edited by a human. -pdfjs-editor-new-alt-text-disclaimer = ਇਹ ਬਦਲਵੀ ਲਿਖਤ ਆਪਣੇ-ਆਪ ਤਿਆਰ ਕੀਤੀ ਗਈ ਸੀ। pdfjs-editor-new-alt-text-disclaimer-learn-more-url = ਹੋਰ ਜਾਣੋ pdfjs-editor-new-alt-text-create-automatically-button-label = ਬਲਦਵੀਂ ਲਿਖਤ ਆਪਣੇ-ਆਪ ਬਣਾਓ pdfjs-editor-new-alt-text-not-now-button = ਹੁਣੇ ਨਹੀਂ diff --git a/viewer/locale/pl/viewer.ftl b/viewer/locale/pl/viewer.ftl index 4f98f870..5ed53a29 100644 --- a/viewer/locale/pl/viewer.ftl +++ b/viewer/locale/pl/viewer.ftl @@ -105,6 +105,14 @@ pdfjs-document-properties-button-label = Właściwości dokumentu… pdfjs-document-properties-file-name = Nazwa pliku: pdfjs-document-properties-file-size = Rozmiar pliku: # Variables: +# $kb (Number) - the PDF file size in kilobytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-kb = { NUMBER($kb, maximumSignificantDigits: 3) } KB ({ $b } B) +# Variables: +# $mb (Number) - the PDF file size in megabytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-mb = { NUMBER($mb, maximumSignificantDigits: 3) } MB ({ $b } B) +# Variables: # $size_kb (Number) - the PDF file size in kilobytes # $size_b (Number) - the PDF file size in bytes pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } B) @@ -119,6 +127,9 @@ pdfjs-document-properties-keywords = Słowa kluczowe: pdfjs-document-properties-creation-date = Data utworzenia: pdfjs-document-properties-modification-date = Data modyfikacji: # Variables: +# $dateObj (Date) - the creation/modification date and time of the PDF file +pdfjs-document-properties-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } +# Variables: # $date (Date) - the creation/modification date of the PDF file # $time (Time) - the creation/modification time of the PDF file pdfjs-document-properties-date-string = { $date }, { $time } @@ -277,6 +288,9 @@ pdfjs-annotation-date-string = { $date }, { $time } # Some common types are e.g.: "Check", "Text", "Comment", "Note" pdfjs-text-annotation-type = .alt = [Przypis: { $type }] +# Variables: +# $dateObj (Date) - the modification date and time of the annotation +pdfjs-annotation-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } ## Password @@ -368,6 +382,22 @@ pdfjs-editor-resizer-label-bottom-right = Prawy dolny róg — zmień rozmiar pdfjs-editor-resizer-label-bottom-middle = Dolny środkowy — zmień rozmiar pdfjs-editor-resizer-label-bottom-left = Lewy dolny róg — zmień rozmiar pdfjs-editor-resizer-label-middle-left = Lewy środkowy — zmień rozmiar +pdfjs-editor-resizer-top-left = + .aria-label = Lewy górny róg — zmień rozmiar +pdfjs-editor-resizer-top-middle = + .aria-label = Górny środkowy — zmień rozmiar +pdfjs-editor-resizer-top-right = + .aria-label = Prawy górny róg — zmień rozmiar +pdfjs-editor-resizer-middle-right = + .aria-label = Prawy środkowy — zmień rozmiar +pdfjs-editor-resizer-bottom-right = + .aria-label = Prawy dolny róg — zmień rozmiar +pdfjs-editor-resizer-bottom-middle = + .aria-label = Dolny środkowy — zmień rozmiar +pdfjs-editor-resizer-bottom-left = + .aria-label = Lewy dolny róg — zmień rozmiar +pdfjs-editor-resizer-middle-left = + .aria-label = Lewy środkowy — zmień rozmiar ## Color picker diff --git a/viewer/locale/pt-BR/viewer.ftl b/viewer/locale/pt-BR/viewer.ftl index f3fc1076..3205411a 100644 --- a/viewer/locale/pt-BR/viewer.ftl +++ b/viewer/locale/pt-BR/viewer.ftl @@ -181,8 +181,8 @@ pdfjs-printing-not-ready = Aviso: o PDF não está totalmente carregado para imp pdfjs-toggle-sidebar-button = .title = Exibir/ocultar painel lateral pdfjs-toggle-sidebar-notification-button = - .title = Exibir/ocultar painel (documento contém estrutura/anexos/camadas) -pdfjs-toggle-sidebar-button-label = Exibir/ocultar painel + .title = Exibir/ocultar painel lateral (documento contém estrutura/anexos/camadas) +pdfjs-toggle-sidebar-button-label = Exibir/ocultar painel lateral pdfjs-document-outline-button = .title = Mostrar estrutura do documento (duplo-clique expande/recolhe todos os itens) pdfjs-document-outline-button-label = Estrutura do documento @@ -380,6 +380,22 @@ pdfjs-editor-resizer-label-bottom-right = Canto inferior direito — redimension pdfjs-editor-resizer-label-bottom-middle = No centro da base — redimensionar pdfjs-editor-resizer-label-bottom-left = Canto inferior esquerdo — redimensionar pdfjs-editor-resizer-label-middle-left = No meio à esquerda — redimensionar +pdfjs-editor-resizer-top-left = + .aria-label = Canto superior esquerdo — redimensionar +pdfjs-editor-resizer-top-middle = + .aria-label = No centro do topo — redimensionar +pdfjs-editor-resizer-top-right = + .aria-label = Canto superior direito — redimensionar +pdfjs-editor-resizer-middle-right = + .aria-label = No meio à direita — redimensionar +pdfjs-editor-resizer-bottom-right = + .aria-label = Canto inferior direito — redimensionar +pdfjs-editor-resizer-bottom-middle = + .aria-label = No centro da base — redimensionar +pdfjs-editor-resizer-bottom-left = + .aria-label = Canto inferior esquerdo — redimensionar +pdfjs-editor-resizer-middle-left = + .aria-label = No meio à esquerda — redimensionar ## Color picker diff --git a/viewer/locale/pt-PT/viewer.ftl b/viewer/locale/pt-PT/viewer.ftl index 09fbef84..4184c0aa 100644 --- a/viewer/locale/pt-PT/viewer.ftl +++ b/viewer/locale/pt-PT/viewer.ftl @@ -105,6 +105,14 @@ pdfjs-document-properties-button-label = Propriedades do documento… pdfjs-document-properties-file-name = Nome do ficheiro: pdfjs-document-properties-file-size = Tamanho do ficheiro: # Variables: +# $kb (Number) - the PDF file size in kilobytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-kb = { NUMBER($kb, maximumSignificantDigits: 3) } KB ({ $b } bytes) +# Variables: +# $mb (Number) - the PDF file size in megabytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-mb = { NUMBER($mb, maximumSignificantDigits: 3) } MB ({ $b } bytes) +# Variables: # $size_kb (Number) - the PDF file size in kilobytes # $size_b (Number) - the PDF file size in bytes pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) @@ -119,6 +127,9 @@ pdfjs-document-properties-keywords = Palavras-chave: pdfjs-document-properties-creation-date = Data de criação: pdfjs-document-properties-modification-date = Data de modificação: # Variables: +# $dateObj (Date) - the creation/modification date and time of the PDF file +pdfjs-document-properties-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } +# Variables: # $date (Date) - the creation/modification date of the PDF file # $time (Time) - the creation/modification time of the PDF file pdfjs-document-properties-date-string = { $date }, { $time } @@ -275,6 +286,9 @@ pdfjs-annotation-date-string = { $date }, { $time } # Some common types are e.g.: "Check", "Text", "Comment", "Note" pdfjs-text-annotation-type = .alt = [Anotação { $type }] +# Variables: +# $dateObj (Date) - the modification date and time of the annotation +pdfjs-annotation-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } ## Password @@ -366,6 +380,22 @@ pdfjs-editor-resizer-label-bottom-right = Canto inferior direito — redimension pdfjs-editor-resizer-label-bottom-middle = Inferior ao centro — redimensionar pdfjs-editor-resizer-label-bottom-left = Canto inferior esquerdo — redimensionar pdfjs-editor-resizer-label-middle-left = Centro à esquerda — redimensionar +pdfjs-editor-resizer-top-left = + .aria-label = Canto superior esquerdo — redimensionar +pdfjs-editor-resizer-top-middle = + .aria-label = Superior ao centro — redimensionar +pdfjs-editor-resizer-top-right = + .aria-label = Canto superior direito — redimensionar +pdfjs-editor-resizer-middle-right = + .aria-label = Centro à direita — redimensionar +pdfjs-editor-resizer-bottom-right = + .aria-label = Canto inferior direito — redimensionar +pdfjs-editor-resizer-bottom-middle = + .aria-label = Inferior ao centro — redimensionar +pdfjs-editor-resizer-bottom-left = + .aria-label = Canto inferior esquerdo — redimensionar +pdfjs-editor-resizer-middle-left = + .aria-label = Centro à esquerda — redimensionar ## Color picker @@ -406,8 +436,6 @@ pdfjs-editor-new-alt-text-textarea = pdfjs-editor-new-alt-text-description = Descrição curta para as pessoas que não podem visualizar a imagem ou quando a imagem não carrega. # This is a required legal disclaimer that refers to the automatically created text inside the alt text box above this text. It disappears if the text is edited by a human. pdfjs-editor-new-alt-text-disclaimer1 = Este texto alternativo foi criado automaticamente e pode ser impreciso. -# This is a required legal disclaimer that refers to the automatically created text inside the alt text box above this text. It disappears if the text is edited by a human. -pdfjs-editor-new-alt-text-disclaimer = Este texto alternativo foi criado automaticamente. pdfjs-editor-new-alt-text-disclaimer-learn-more-url = Saber mais pdfjs-editor-new-alt-text-create-automatically-button-label = Criar texto alternativo automaticamente pdfjs-editor-new-alt-text-not-now-button = Agora não diff --git a/viewer/locale/rm/viewer.ftl b/viewer/locale/rm/viewer.ftl index e428e133..2c28eedd 100644 --- a/viewer/locale/rm/viewer.ftl +++ b/viewer/locale/rm/viewer.ftl @@ -105,6 +105,14 @@ pdfjs-document-properties-button-label = Caracteristicas dal document… pdfjs-document-properties-file-name = Num da la datoteca: pdfjs-document-properties-file-size = Grondezza da la datoteca: # Variables: +# $kb (Number) - the PDF file size in kilobytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-kb = { NUMBER($kb, maximumSignificantDigits: 3) } KB ({ $b } bytes) +# Variables: +# $mb (Number) - the PDF file size in megabytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-mb = { NUMBER($mb, maximumSignificantDigits: 3) } MB ({ $b } bytes) +# Variables: # $size_kb (Number) - the PDF file size in kilobytes # $size_b (Number) - the PDF file size in bytes pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bytes) @@ -119,6 +127,9 @@ pdfjs-document-properties-keywords = Chavazzins: pdfjs-document-properties-creation-date = Data da creaziun: pdfjs-document-properties-modification-date = Data da modificaziun: # Variables: +# $dateObj (Date) - the creation/modification date and time of the PDF file +pdfjs-document-properties-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } +# Variables: # $date (Date) - the creation/modification date of the PDF file # $time (Time) - the creation/modification time of the PDF file pdfjs-document-properties-date-string = { $date } { $time } @@ -275,6 +286,9 @@ pdfjs-annotation-date-string = { $date }, { $time } # Some common types are e.g.: "Check", "Text", "Comment", "Note" pdfjs-text-annotation-type = .alt = [Annotaziun da { $type }] +# Variables: +# $dateObj (Date) - the modification date and time of the annotation +pdfjs-annotation-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } ## Password @@ -298,8 +312,6 @@ pdfjs-editor-stamp-button-label = Agiuntar u modifitgar maletgs pdfjs-editor-highlight-button = .title = Marcar pdfjs-editor-highlight-button-label = Marcar -pdfjs-highlight-floating-button = - .title = Relevar pdfjs-highlight-floating-button1 = .title = Marcar .aria-label = Marcar @@ -368,6 +380,22 @@ pdfjs-editor-resizer-label-bottom-right = Chantun sut a dretga — redimensiunar pdfjs-editor-resizer-label-bottom-middle = Sutvart amez — redimensiunar pdfjs-editor-resizer-label-bottom-left = Chantun sut a sanestra — redimensiunar pdfjs-editor-resizer-label-middle-left = Vart sanestra amez — redimensiunar +pdfjs-editor-resizer-top-left = + .aria-label = Chantun sura a sanestra — redimensiunar +pdfjs-editor-resizer-top-middle = + .aria-label = Sura amez — redimensiunar +pdfjs-editor-resizer-top-right = + .aria-label = Chantun sura a dretga — redimensiunar +pdfjs-editor-resizer-middle-right = + .aria-label = Da vart dretga amez — redimensiunar +pdfjs-editor-resizer-bottom-right = + .aria-label = Chantun sut a dretga — redimensiunar +pdfjs-editor-resizer-bottom-middle = + .aria-label = Sutvart amez — redimensiunar +pdfjs-editor-resizer-bottom-left = + .aria-label = Chantun sut a sanestra — redimensiunar +pdfjs-editor-resizer-middle-left = + .aria-label = Vart sanestra amez — redimensiunar ## Color picker @@ -394,3 +422,60 @@ pdfjs-editor-colorpicker-red = pdfjs-editor-highlight-show-all-button-label = Mussar tut pdfjs-editor-highlight-show-all-button = .title = Mussar tut + +## New alt-text dialog +## Group note for entire feature: Alternative text (alt text) helps when people can't see the image. This feature includes a tool to create alt text automatically using an AI model that works locally on the user's device to preserve privacy. + +# Modal header positioned above a text box where users can edit the alt text. +pdfjs-editor-new-alt-text-dialog-edit-label = Modifitgar il text alternativ (descripziun dal maletg) +# Modal header positioned above a text box where users can add the alt text. +pdfjs-editor-new-alt-text-dialog-add-label = Agiuntar in text alternativ (descripziun dal maletg) +pdfjs-editor-new-alt-text-textarea = + .placeholder = Scriva qua tia descripziun… +# This text refers to the alt text box above this description. It offers a definition of alt text. +pdfjs-editor-new-alt-text-description = Curta descripziun per persunas che na vesan betg il maletg u per cass en ils quals il maletg na vegn betg chargià. +# This is a required legal disclaimer that refers to the automatically created text inside the alt text box above this text. It disappears if the text is edited by a human. +pdfjs-editor-new-alt-text-disclaimer1 = Quest text alternativ è vegnì creà automaticamain ed è eventualmain nunprecis. +pdfjs-editor-new-alt-text-disclaimer-learn-more-url = Ulteriuras infurmaziuns +pdfjs-editor-new-alt-text-create-automatically-button-label = Crear automaticamain il text alternativ +pdfjs-editor-new-alt-text-not-now-button = Betg ussa +pdfjs-editor-new-alt-text-error-title = I n’è betg reussì da crear automaticamain il text alternativ +pdfjs-editor-new-alt-text-error-description = Scriva per plaschair tes agen text alternativ u emprova pli tard anc ina giada. +pdfjs-editor-new-alt-text-error-close-button = Serrar +# Variables: +# $totalSize (Number) - the total size (in MB) of the AI model. +# $downloadedSize (Number) - the downloaded size (in MB) of the AI model. +# $percent (Number) - the percentage of the downloaded size. +pdfjs-editor-new-alt-text-ai-model-downloading-progress = Telechargiar il model IA da text alternativ ({ $downloadedSize } da { $totalSize } MB) + .aria-valuetext = Telechargiar il model IA da text alternativ ({ $downloadedSize } da { $totalSize } MB) +# This is a button that users can click to edit the alt text they have already added. +pdfjs-editor-new-alt-text-added-button-label = Text alternativ agiuntà +# This is a button that users can click to open the alt text editor and add alt text when it is not present. +pdfjs-editor-new-alt-text-missing-button-label = Text alternativ manca +# This is a button that opens up the alt text modal where users should review the alt text that was automatically generated. +pdfjs-editor-new-alt-text-to-review-button-label = Repassar il text alternativ +# "Created automatically" is a prefix that will be added to the beginning of any alt text that has been automatically generated. After the colon, the user will see/hear the actual alt text description. If the alt text has been edited by a human, this prefix will not appear. +# Variables: +# $generatedAltText (String) - the generated alt-text. +pdfjs-editor-new-alt-text-generated-alt-text-with-disclaimer = Creà automaticamain: { $generatedAltText } + +## Image alt-text settings + +pdfjs-image-alt-text-settings-button = + .title = Parameters dal text alternativ da maletgs +pdfjs-image-alt-text-settings-button-label = Parameters dal text alternativ da maletgs +pdfjs-editor-alt-text-settings-dialog-label = Parameters dal text alternativ da maletgs +pdfjs-editor-alt-text-settings-automatic-title = Text alternativ automatic +pdfjs-editor-alt-text-settings-create-model-button-label = Crear automaticamain text alternativ +pdfjs-editor-alt-text-settings-create-model-description = Propona descripziuns per gidar a persunas che na vesan betg il maletg u per cass en ils quals il maletg na vegn betg chargià. +# Variables: +# $totalSize (Number) - the total size (in MB) of the AI model. +pdfjs-editor-alt-text-settings-download-model-label = Model IA da text alternativ ({ $totalSize } MB) +pdfjs-editor-alt-text-settings-ai-model-description = Vegn exequì localmain sin tes apparat per che tias datas restian privatas. Necessari per text alternativ automatic. +pdfjs-editor-alt-text-settings-delete-model-button = Stizzar +pdfjs-editor-alt-text-settings-download-model-button = Telechargiar +pdfjs-editor-alt-text-settings-downloading-model-button = Telechargiar… +pdfjs-editor-alt-text-settings-editor-title = Editur per text alternativ +pdfjs-editor-alt-text-settings-show-dialog-button-label = Mussar l’editur per text alternativ directamain cun agiuntar in maletg +pdfjs-editor-alt-text-settings-show-dialog-description = Ta gida a garantir che tut tes maletgs hajan in text alternativ. +pdfjs-editor-alt-text-settings-close-button = Serrar diff --git a/viewer/locale/ru/viewer.ftl b/viewer/locale/ru/viewer.ftl index dd2aa198..fa311702 100644 --- a/viewer/locale/ru/viewer.ftl +++ b/viewer/locale/ru/viewer.ftl @@ -382,6 +382,22 @@ pdfjs-editor-resizer-label-bottom-right = Нижний правый угол — pdfjs-editor-resizer-label-bottom-middle = Внизу посередине — изменить размер pdfjs-editor-resizer-label-bottom-left = Нижний левый угол — изменить размер pdfjs-editor-resizer-label-middle-left = В центре слева — изменить размер +pdfjs-editor-resizer-top-left = + .aria-label = Левый верхний угол — изменить размер +pdfjs-editor-resizer-top-middle = + .aria-label = Вверху посередине — изменить размер +pdfjs-editor-resizer-top-right = + .aria-label = Верхний правый угол — изменить размер +pdfjs-editor-resizer-middle-right = + .aria-label = В центре справа — изменить размер +pdfjs-editor-resizer-bottom-right = + .aria-label = Нижний правый угол — изменить размер +pdfjs-editor-resizer-bottom-middle = + .aria-label = Внизу посередине — изменить размер +pdfjs-editor-resizer-bottom-left = + .aria-label = Нижний левый угол — изменить размер +pdfjs-editor-resizer-middle-left = + .aria-label = В центре слева — изменить размер ## Color picker @@ -439,7 +455,7 @@ pdfjs-editor-new-alt-text-added-button-label = Альтернативный те # This is a button that users can click to open the alt text editor and add alt text when it is not present. pdfjs-editor-new-alt-text-missing-button-label = Отсутствует альтернативный текст # This is a button that opens up the alt text modal where users should review the alt text that was automatically generated. -pdfjs-editor-new-alt-text-to-review-button-label = Отзыв на альтернативный текст +pdfjs-editor-new-alt-text-to-review-button-label = Оценить альтернативный текст # "Created automatically" is a prefix that will be added to the beginning of any alt text that has been automatically generated. After the colon, the user will see/hear the actual alt text description. If the alt text has been edited by a human, this prefix will not appear. # Variables: # $generatedAltText (String) - the generated alt-text. diff --git a/viewer/locale/sat/viewer.ftl b/viewer/locale/sat/viewer.ftl index 90f12a31..2fbbc123 100644 --- a/viewer/locale/sat/viewer.ftl +++ b/viewer/locale/sat/viewer.ftl @@ -51,12 +51,6 @@ pdfjs-download-button-label = ᱰᱟᱣᱩᱱᱞᱚᱰ pdfjs-bookmark-button = .title = ᱱᱤᱛᱚᱜᱟᱜ ᱥᱟᱦᱴᱟ (ᱱᱤᱛᱚᱜᱟᱜ ᱥᱟᱦᱴᱟ ᱠᱷᱚᱱ URL ᱫᱮᱠᱷᱟᱣ ᱢᱮ) pdfjs-bookmark-button-label = ᱱᱤᱛᱚᱜᱟᱜ ᱥᱟᱦᱴᱟ -# Used in Firefox for Android. -pdfjs-open-in-app-button = - .title = ᱮᱯ ᱨᱮ ᱡᱷᱤᱡᱽ ᱢᱮ -# Used in Firefox for Android. -# Length of the translation matters since we are in a mobile context, with limited screen estate. -pdfjs-open-in-app-button-label = ᱮᱯ ᱨᱮ ᱡᱷᱤᱡᱽ ᱢᱮ ## Secondary toolbar and context menu @@ -286,6 +280,12 @@ pdfjs-editor-ink-button-label = ᱛᱮᱭᱟᱨ pdfjs-editor-stamp-button = .title = ᱪᱤᱛᱟᱹᱨᱠᱚ ᱥᱮᱞᱮᱫ ᱥᱮ ᱥᱟᱯᱲᱟᱣ ᱢᱮ pdfjs-editor-stamp-button-label = ᱪᱤᱛᱟᱹᱨᱠᱚ ᱥᱮᱞᱮᱫ ᱥᱮ ᱥᱟᱯᱲᱟᱣ ᱢᱮ + +## Remove button for the various kind of editor. + + +## + # Editor Parameters pdfjs-editor-free-text-color-input = ᱨᱚᱝ pdfjs-editor-free-text-size-input = ᱢᱟᱯ @@ -309,3 +309,17 @@ pdfjs-ink-canvas = ## Editor resizers ## This is used in an aria label to help to understand the role of the resizer. + +## Color picker + + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + + +## New alt-text dialog +## Group note for entire feature: Alternative text (alt text) helps when people can't see the image. This feature includes a tool to create alt text automatically using an AI model that works locally on the user's device to preserve privacy. + + +## Image alt-text settings + diff --git a/viewer/locale/si/viewer.ftl b/viewer/locale/si/viewer.ftl index 28387298..2b3a7027 100644 --- a/viewer/locale/si/viewer.ftl +++ b/viewer/locale/si/viewer.ftl @@ -45,12 +45,6 @@ pdfjs-download-button = # Length of the translation matters since we are in a mobile context, with limited screen estate. pdfjs-download-button-label = බාගන්න pdfjs-bookmark-button-label = පවතින පිටුව -# Used in Firefox for Android. -pdfjs-open-in-app-button = - .title = යෙදුමෙහි අරින්න -# Used in Firefox for Android. -# Length of the translation matters since we are in a mobile context, with limited screen estate. -pdfjs-open-in-app-button-label = යෙදුමෙහි අරින්න ## Secondary toolbar and context menu @@ -236,6 +230,12 @@ pdfjs-editor-free-text-button-label = පෙළ pdfjs-editor-ink-button = .title = අඳින්න pdfjs-editor-ink-button-label = අඳින්න + +## Remove button for the various kind of editor. + + +## + # Editor Parameters pdfjs-editor-free-text-color-input = වර්ණය pdfjs-editor-free-text-size-input = තරම @@ -251,3 +251,17 @@ pdfjs-free-text-default-content = ලිවීීම අරඹන්න… ## Editor resizers ## This is used in an aria label to help to understand the role of the resizer. + +## Color picker + + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + + +## New alt-text dialog +## Group note for entire feature: Alternative text (alt text) helps when people can't see the image. This feature includes a tool to create alt text automatically using an AI model that works locally on the user's device to preserve privacy. + + +## Image alt-text settings + diff --git a/viewer/locale/sk/viewer.ftl b/viewer/locale/sk/viewer.ftl index 59ffe736..64770178 100644 --- a/viewer/locale/sk/viewer.ftl +++ b/viewer/locale/sk/viewer.ftl @@ -105,6 +105,14 @@ pdfjs-document-properties-button-label = Vlastnosti dokumentu… pdfjs-document-properties-file-name = Názov súboru: pdfjs-document-properties-file-size = Veľkosť súboru: # Variables: +# $kb (Number) - the PDF file size in kilobytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-kb = { NUMBER($kb, maximumSignificantDigits: 3) } kB ({ $b } bajtov) +# Variables: +# $mb (Number) - the PDF file size in megabytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-mb = { NUMBER($mb, maximumSignificantDigits: 3) } MB ({ $b } bajtov) +# Variables: # $size_kb (Number) - the PDF file size in kilobytes # $size_b (Number) - the PDF file size in bytes pdfjs-document-properties-kb = { $size_kb } kB ({ $size_b } bajtov) @@ -119,6 +127,9 @@ pdfjs-document-properties-keywords = Kľúčové slová: pdfjs-document-properties-creation-date = Dátum vytvorenia: pdfjs-document-properties-modification-date = Dátum úpravy: # Variables: +# $dateObj (Date) - the creation/modification date and time of the PDF file +pdfjs-document-properties-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } +# Variables: # $date (Date) - the creation/modification date of the PDF file # $time (Time) - the creation/modification time of the PDF file pdfjs-document-properties-date-string = { $date }, { $time } @@ -279,6 +290,9 @@ pdfjs-annotation-date-string = { $date }, { $time } # Some common types are e.g.: "Check", "Text", "Comment", "Note" pdfjs-text-annotation-type = .alt = [Anotácia typu { $type }] +# Variables: +# $dateObj (Date) - the modification date and time of the annotation +pdfjs-annotation-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } ## Password @@ -370,6 +384,22 @@ pdfjs-editor-resizer-label-bottom-right = Pravý dolný roh – zmena veľkosti pdfjs-editor-resizer-label-bottom-middle = Stred dole – zmena veľkosti pdfjs-editor-resizer-label-bottom-left = Ľavý dolný roh – zmena veľkosti pdfjs-editor-resizer-label-middle-left = Vľavo uprostred – zmena veľkosti +pdfjs-editor-resizer-top-left = + .aria-label = Ľavý horný roh – zmena veľkosti +pdfjs-editor-resizer-top-middle = + .aria-label = Horný stred – zmena veľkosti +pdfjs-editor-resizer-top-right = + .aria-label = Pravý horný roh – zmena veľkosti +pdfjs-editor-resizer-middle-right = + .aria-label = Vpravo uprostred – zmena veľkosti +pdfjs-editor-resizer-bottom-right = + .aria-label = Pravý dolný roh – zmena veľkosti +pdfjs-editor-resizer-bottom-middle = + .aria-label = Stred dole – zmena veľkosti +pdfjs-editor-resizer-bottom-left = + .aria-label = Ľavý dolný roh – zmena veľkosti +pdfjs-editor-resizer-middle-left = + .aria-label = Vľavo uprostred – zmena veľkosti ## Color picker @@ -410,8 +440,6 @@ pdfjs-editor-new-alt-text-textarea = pdfjs-editor-new-alt-text-description = Krátky popis pre ľudí, ktorí nevidia obrázok alebo ak sa obrázok nenačíta. # This is a required legal disclaimer that refers to the automatically created text inside the alt text box above this text. It disappears if the text is edited by a human. pdfjs-editor-new-alt-text-disclaimer1 = Tento alternatívny text bol vytvorený automaticky a môže byť nepresný. -# This is a required legal disclaimer that refers to the automatically created text inside the alt text box above this text. It disappears if the text is edited by a human. -pdfjs-editor-new-alt-text-disclaimer = Tento alternatívny text bol vytvorený automaticky. pdfjs-editor-new-alt-text-disclaimer-learn-more-url = Ďalšie informácie pdfjs-editor-new-alt-text-create-automatically-button-label = Automaticky vytvoriť alternatívny text pdfjs-editor-new-alt-text-not-now-button = Teraz nie diff --git a/viewer/locale/skr/viewer.ftl b/viewer/locale/skr/viewer.ftl index f129ea86..186f6147 100644 --- a/viewer/locale/skr/viewer.ftl +++ b/viewer/locale/skr/viewer.ftl @@ -380,6 +380,22 @@ pdfjs-editor-resizer-label-bottom-right = تلوِیں سَڄّی نُکَّڑ pdfjs-editor-resizer-label-bottom-middle = تلواں وِچلا — سائز بدلو pdfjs-editor-resizer-label-bottom-left = تلوِیں کَھٻّی نُکّڑ — سائز بدلو pdfjs-editor-resizer-label-middle-left = وِچلا کَھٻّا — سائز بدلو +pdfjs-editor-resizer-top-left = + .aria-label = اُتلی کَھٻّی نُکّڑ — سائز بدلو +pdfjs-editor-resizer-top-middle = + .aria-label = اُتلا وِچلا — سائز بدلو +pdfjs-editor-resizer-top-right = + .aria-label = اُتلی سَڄّی نُکَّڑ — سائز بدلو +pdfjs-editor-resizer-middle-right = + .aria-label = وِچلا سڄّا — سائز بدلو +pdfjs-editor-resizer-bottom-right = + .aria-label = تلوِیں سَڄّی نُکَّڑ — سائز بدلو +pdfjs-editor-resizer-bottom-middle = + .aria-label = تلواں وِچلا — سائز بدلو +pdfjs-editor-resizer-bottom-left = + .aria-label = تلوِیں کَھٻّی نُکّڑ — سائز بدلو +pdfjs-editor-resizer-middle-left = + .aria-label = وِچلا کَھٻّا — سائز بدلو ## Color picker @@ -410,13 +426,28 @@ pdfjs-editor-highlight-show-all-button = ## New alt-text dialog ## Group note for entire feature: Alternative text (alt text) helps when people can't see the image. This feature includes a tool to create alt text automatically using an AI model that works locally on the user's device to preserve privacy. +# Modal header positioned above a text box where users can edit the alt text. +pdfjs-editor-new-alt-text-dialog-edit-label = آلٹ عبارت وچ تبدیلی کرو (تصویر تفصیل) +# Modal header positioned above a text box where users can add the alt text. +pdfjs-editor-new-alt-text-dialog-add-label = آلٹ عبارت شامل کرو (تصویر تفصیل) pdfjs-editor-new-alt-text-textarea = .placeholder = اتھ آپݨی وضاحت لکھو۔۔۔ +# This text refers to the alt text box above this description. It offers a definition of alt text. +pdfjs-editor-new-alt-text-description = اُنہاں لوکاں کیتے مختصر تفصیل جہڑے تصویر کائنی ݙیکھ سڳدے یا ڄݙݨ تصویر لوڈ کائبی تھیندی۔ +# This is a required legal disclaimer that refers to the automatically created text inside the alt text box above this text. It disappears if the text is edited by a human. +pdfjs-editor-new-alt-text-disclaimer1 = آلٹ عبارت خودکار تخلیق تھئی ہے تے غلط تھی سڳدی ہے۔ pdfjs-editor-new-alt-text-disclaimer-learn-more-url = ٻیا سِکھو pdfjs-editor-new-alt-text-create-automatically-button-label = آلٹ عبارت خودکار بݨاؤ pdfjs-editor-new-alt-text-not-now-button = ہݨ کائناں pdfjs-editor-new-alt-text-error-title = آلٹ عبارت خودکار نہ بݨاؤ +pdfjs-editor-new-alt-text-error-description = سوہݨا، آپݨی آلٹ عبارت لکھو یا ولدا بعد وچ کوشش کرو۔ pdfjs-editor-new-alt-text-error-close-button = بند کرو +# Variables: +# $totalSize (Number) - the total size (in MB) of the AI model. +# $downloadedSize (Number) - the downloaded size (in MB) of the AI model. +# $percent (Number) - the percentage of the downloaded size. +pdfjs-editor-new-alt-text-ai-model-downloading-progress = آلٹ عبارت اے آئی ماڈل({ $totalSize }ایم بی دے { $downloadedSize }) ڈاؤن لوڈ تھیندا پئے + .aria-valuetext = آلٹ عبارت اے آئی ماڈل({ $totalSize }ایم بی دے { $downloadedSize }) ڈاؤن لوڈ تھیندا پئے # This is a button that users can click to edit the alt text they have already added. pdfjs-editor-new-alt-text-added-button-label = آلٹ عبارت شامل تھی ڳئی # This is a button that users can click to open the alt text editor and add alt text when it is not present. @@ -436,8 +467,15 @@ pdfjs-image-alt-text-settings-button-label = تصویر آلٹ عبارت ترت pdfjs-editor-alt-text-settings-dialog-label = تصویر آلٹ عبارت ترتیباں pdfjs-editor-alt-text-settings-automatic-title = خودکار آلٹ عبارت pdfjs-editor-alt-text-settings-create-model-button-label = آلٹ عبارت خودکار بݨاؤ +pdfjs-editor-alt-text-settings-create-model-description = اُنہاں لوکاں دی مدد کیتے تفصیل تجویز کرو جہڑے تصویر کائنی ݙیکھ سڳدے یا ڄݙݨ تصویر لوڈ کائبی تھیندی۔ +# Variables: +# $totalSize (Number) - the total size (in MB) of the AI model. +pdfjs-editor-alt-text-settings-download-model-label = آلٹ عبارت اے آئی ماڈل ({ $totalSize } ایم بی) +pdfjs-editor-alt-text-settings-ai-model-description = تہاݙی ڈیوائس تے مقامی طور تے چلدا ہے تاں جو تہاݙا ڈیٹا نجی رہوے۔ خودکار آلٹ عبارت کیتے ضروری ہے۔ pdfjs-editor-alt-text-settings-delete-model-button = مٹاؤ pdfjs-editor-alt-text-settings-download-model-button = ڈاؤن لوڈ pdfjs-editor-alt-text-settings-downloading-model-button = ڈاؤن لوڈ تھیندا پئے … pdfjs-editor-alt-text-settings-editor-title = متبادل ٹیکسٹ ایڈیٹر +pdfjs-editor-alt-text-settings-show-dialog-button-label = تصویر شامل کرݨ ویلے فوری طور تے آلٹ ٹیکسٹ ایڈیٹر ݙکھاؤ +pdfjs-editor-alt-text-settings-show-dialog-description = ایہ تہاکوں یقینی بݨاوݨ وچ مدد کریندے جو تہاݙیاں ساریاں تصویراں وچ آلٹ عبارت ہے۔ pdfjs-editor-alt-text-settings-close-button = بند کرو diff --git a/viewer/locale/sl/viewer.ftl b/viewer/locale/sl/viewer.ftl index 7c90021f..d30bf3ea 100644 --- a/viewer/locale/sl/viewer.ftl +++ b/viewer/locale/sl/viewer.ftl @@ -384,6 +384,22 @@ pdfjs-editor-resizer-label-bottom-right = Spodnji desni kot – spremeni velikos pdfjs-editor-resizer-label-bottom-middle = Spodaj na sredini – spremeni velikost pdfjs-editor-resizer-label-bottom-left = Spodnji levi kot – spremeni velikost pdfjs-editor-resizer-label-middle-left = Levo na sredini – spremeni velikost +pdfjs-editor-resizer-top-left = + .aria-label = Zgornji levi kot – spremeni velikost +pdfjs-editor-resizer-top-middle = + .aria-label = Zgoraj na sredini – spremeni velikost +pdfjs-editor-resizer-top-right = + .aria-label = Zgornji desni kot – spremeni velikost +pdfjs-editor-resizer-middle-right = + .aria-label = Desno na sredini – spremeni velikost +pdfjs-editor-resizer-bottom-right = + .aria-label = Spodnji desni kot – spremeni velikost +pdfjs-editor-resizer-bottom-middle = + .aria-label = Spodaj na sredini – spremeni velikost +pdfjs-editor-resizer-bottom-left = + .aria-label = Spodnji levi kot – spremeni velikost +pdfjs-editor-resizer-middle-left = + .aria-label = Levo na sredini – spremeni velikost ## Color picker diff --git a/viewer/locale/sq/viewer.ftl b/viewer/locale/sq/viewer.ftl index eb27d41d..9edbe328 100644 --- a/viewer/locale/sq/viewer.ftl +++ b/viewer/locale/sq/viewer.ftl @@ -96,6 +96,14 @@ pdfjs-document-properties-button-label = Veti Dokumenti… pdfjs-document-properties-file-name = Emër kartele: pdfjs-document-properties-file-size = Madhësi kartele: # Variables: +# $kb (Number) - the PDF file size in kilobytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-kb = { NUMBER($kb, maximumSignificantDigits: 3) } KB ({ $b } bajte) +# Variables: +# $mb (Number) - the PDF file size in megabytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-mb = { NUMBER($mb, maximumSignificantDigits: 3) } MB ({ $b } bajte) +# Variables: # $size_kb (Number) - the PDF file size in kilobytes # $size_b (Number) - the PDF file size in bytes pdfjs-document-properties-kb = { $size_kb } KB ({ $size_b } bajte) @@ -357,6 +365,22 @@ pdfjs-editor-resizer-label-bottom-right = Cepi i poshtëm djathtas — ripërmas pdfjs-editor-resizer-label-bottom-middle = Mesi i pjesës poshtë — ripërmasojeni pdfjs-editor-resizer-label-bottom-left = Cepi i poshtëm — ripërmasojeni pdfjs-editor-resizer-label-middle-left = Majtas në mes — ripërmasojeni +pdfjs-editor-resizer-top-left = + .aria-label = Cepi i sipërm majtas — ripërmasojeni +pdfjs-editor-resizer-top-middle = + .aria-label = Mesi i pjesës sipër — ripërmasojeni +pdfjs-editor-resizer-top-right = + .aria-label = Cepi i sipërm djathtas — ripërmasojeni +pdfjs-editor-resizer-middle-right = + .aria-label = Djathtas në mes — ripërmasojeni +pdfjs-editor-resizer-bottom-right = + .aria-label = Cepi i poshtëm djathtas — ripërmasojeni +pdfjs-editor-resizer-bottom-middle = + .aria-label = Mesi i pjesës poshtë — ripërmasojeni +pdfjs-editor-resizer-bottom-left = + .aria-label = Cepi i poshtëm — ripërmasojeni +pdfjs-editor-resizer-middle-left = + .aria-label = Majtas në mes — ripërmasojeni ## Color picker diff --git a/viewer/locale/sr/viewer.ftl b/viewer/locale/sr/viewer.ftl index c678d491..dbdb67e4 100644 --- a/viewer/locale/sr/viewer.ftl +++ b/viewer/locale/sr/viewer.ftl @@ -45,12 +45,6 @@ pdfjs-save-button-label = Сачувај pdfjs-bookmark-button = .title = Тренутна страница (погледајте URL са тренутне странице) pdfjs-bookmark-button-label = Тренутна страница -# Used in Firefox for Android. -pdfjs-open-in-app-button = - .title = Отвори у апликацији -# Used in Firefox for Android. -# Length of the translation matters since we are in a mobile context, with limited screen estate. -pdfjs-open-in-app-button-label = Отвори у апликацији ## Secondary toolbar and context menu @@ -277,6 +271,12 @@ pdfjs-editor-free-text-button-label = Текст pdfjs-editor-ink-button = .title = Цртај pdfjs-editor-ink-button-label = Цртај + +## Remove button for the various kind of editor. + + +## + # Editor Parameters pdfjs-editor-free-text-color-input = Боја pdfjs-editor-free-text-size-input = Величина @@ -297,3 +297,17 @@ pdfjs-ink-canvas = ## Editor resizers ## This is used in an aria label to help to understand the role of the resizer. + +## Color picker + + +## Show all highlights +## This is a toggle button to show/hide all the highlights. + + +## New alt-text dialog +## Group note for entire feature: Alternative text (alt text) helps when people can't see the image. This feature includes a tool to create alt text automatically using an AI model that works locally on the user's device to preserve privacy. + + +## Image alt-text settings + diff --git a/viewer/locale/sv-SE/viewer.ftl b/viewer/locale/sv-SE/viewer.ftl index 2590ce8d..87c7da09 100644 --- a/viewer/locale/sv-SE/viewer.ftl +++ b/viewer/locale/sv-SE/viewer.ftl @@ -380,6 +380,22 @@ pdfjs-editor-resizer-label-bottom-right = Nedre högra hörnet — ändra storle pdfjs-editor-resizer-label-bottom-middle = Nedre mitten — ändra storlek pdfjs-editor-resizer-label-bottom-left = Nedre vänstra hörnet — ändra storlek pdfjs-editor-resizer-label-middle-left = Mitten till vänster — ändra storlek +pdfjs-editor-resizer-top-left = + .aria-label = Det övre vänstra hörnet — ändra storlek +pdfjs-editor-resizer-top-middle = + .aria-label = Överst i mitten — ändra storlek +pdfjs-editor-resizer-top-right = + .aria-label = Det övre högra hörnet — ändra storlek +pdfjs-editor-resizer-middle-right = + .aria-label = Mitten höger — ändra storlek +pdfjs-editor-resizer-bottom-right = + .aria-label = Nedre högra hörnet — ändra storlek +pdfjs-editor-resizer-bottom-middle = + .aria-label = Nedre mitten — ändra storlek +pdfjs-editor-resizer-bottom-left = + .aria-label = Nedre vänstra hörnet — ändra storlek +pdfjs-editor-resizer-middle-left = + .aria-label = Mitten till vänster — ändra storlek ## Color picker diff --git a/viewer/locale/tg/viewer.ftl b/viewer/locale/tg/viewer.ftl index 8b3c03df..18182fe0 100644 --- a/viewer/locale/tg/viewer.ftl +++ b/viewer/locale/tg/viewer.ftl @@ -105,6 +105,14 @@ pdfjs-document-properties-button-label = Хусусиятҳои ҳуҷҷат… pdfjs-document-properties-file-name = Номи файл: pdfjs-document-properties-file-size = Андозаи файл: # Variables: +# $kb (Number) - the PDF file size in kilobytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-kb = { NUMBER($kb, maximumSignificantDigits: 3) } КБ ({ $b } байт) +# Variables: +# $mb (Number) - the PDF file size in megabytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-mb = { NUMBER($mb, maximumSignificantDigits: 3) } МБ ({ $b } байт) +# Variables: # $size_kb (Number) - the PDF file size in kilobytes # $size_b (Number) - the PDF file size in bytes pdfjs-document-properties-kb = { $size_kb } КБ ({ $size_b } байт) @@ -119,6 +127,9 @@ pdfjs-document-properties-keywords = Калимаҳои калидӣ: pdfjs-document-properties-creation-date = Санаи эҷод: pdfjs-document-properties-modification-date = Санаи тағйирот: # Variables: +# $dateObj (Date) - the creation/modification date and time of the PDF file +pdfjs-document-properties-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } +# Variables: # $date (Date) - the creation/modification date of the PDF file # $time (Time) - the creation/modification time of the PDF file pdfjs-document-properties-date-string = { $date }, { $time } @@ -275,6 +286,9 @@ pdfjs-annotation-date-string = { $date }, { $time } # Some common types are e.g.: "Check", "Text", "Comment", "Note" pdfjs-text-annotation-type = .alt = [Ҳошиянависӣ - { $type }] +# Variables: +# $dateObj (Date) - the modification date and time of the annotation +pdfjs-annotation-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } ## Password @@ -340,8 +354,8 @@ pdfjs-ink-canvas = ## Alt-text dialog # Alternative text (alt text) helps when people can't see the image. -pdfjs-editor-alt-text-button-label = Матни ивазкунанда -pdfjs-editor-alt-text-edit-button-label = Таҳрир кардани матни ивазкунанда +pdfjs-editor-alt-text-button-label = Матни иловагӣ +pdfjs-editor-alt-text-edit-button-label = Таҳрир кардани матни иловагӣ pdfjs-editor-alt-text-dialog-label = Имконеро интихоб намоед pdfjs-editor-alt-text-dialog-description = Вақте ки одамон тасвирро дида наметавонанд ё вақте ки тасвир бор карда намешавад, матни иловагӣ (Alt text) кумак мерасонад. pdfjs-editor-alt-text-add-description-label = Илова кардани тавсиф @@ -366,6 +380,22 @@ pdfjs-editor-resizer-label-bottom-right = Кунҷи рости поён — т pdfjs-editor-resizer-label-bottom-middle = Канори миёнаи поён — тағйир додани андоза pdfjs-editor-resizer-label-bottom-left = Кунҷи чапи поён — тағйир додани андоза pdfjs-editor-resizer-label-middle-left = Канори миёнаи чап — тағйир додани андоза +pdfjs-editor-resizer-top-left = + .aria-label = Кунҷи чапи боло — тағйир додани андоза +pdfjs-editor-resizer-top-middle = + .aria-label = Канори миёнаи боло — тағйир додани андоза +pdfjs-editor-resizer-top-right = + .aria-label = Кунҷи рости боло — тағйир додани андоза +pdfjs-editor-resizer-middle-right = + .aria-label = Канори миёнаи рост — тағйир додани андоза +pdfjs-editor-resizer-bottom-right = + .aria-label = Кунҷи рости поён — тағйир додани андоза +pdfjs-editor-resizer-bottom-middle = + .aria-label = Канори миёнаи поён — тағйир додани андоза +pdfjs-editor-resizer-bottom-left = + .aria-label = Кунҷи чапи поён — тағйир додани андоза +pdfjs-editor-resizer-middle-left = + .aria-label = Канори миёнаи чап — тағйир додани андоза ## Color picker @@ -396,7 +426,36 @@ pdfjs-editor-highlight-show-all-button = ## New alt-text dialog ## Group note for entire feature: Alternative text (alt text) helps when people can't see the image. This feature includes a tool to create alt text automatically using an AI model that works locally on the user's device to preserve privacy. +# Modal header positioned above a text box where users can edit the alt text. +pdfjs-editor-new-alt-text-dialog-edit-label = Таҳрир кардани матни иловагӣ (тафсири тасвир) +# Modal header positioned above a text box where users can add the alt text. +pdfjs-editor-new-alt-text-dialog-add-label = Илова кардани матни иловагӣ (тафсири тасвир) +pdfjs-editor-new-alt-text-textarea = + .placeholder = Тафсири худро дар ин ҷо нависед… pdfjs-editor-new-alt-text-disclaimer-learn-more-url = Маълумоти бештар +pdfjs-editor-new-alt-text-not-now-button = Ҳоло не +pdfjs-editor-new-alt-text-error-close-button = Пӯшидан +# This is a button that users can click to edit the alt text they have already added. +pdfjs-editor-new-alt-text-added-button-label = Матни иловагӣ илова карда шуд +# This is a button that users can click to open the alt text editor and add alt text when it is not present. +pdfjs-editor-new-alt-text-missing-button-label = Матни иловагӣ вуҷуд надорад +# This is a button that opens up the alt text modal where users should review the alt text that was automatically generated. +pdfjs-editor-new-alt-text-to-review-button-label = Бознигарӣ кардани матни иловагӣ +# "Created automatically" is a prefix that will be added to the beginning of any alt text that has been automatically generated. After the colon, the user will see/hear the actual alt text description. If the alt text has been edited by a human, this prefix will not appear. +# Variables: +# $generatedAltText (String) - the generated alt-text. +pdfjs-editor-new-alt-text-generated-alt-text-with-disclaimer = Ба таври худкор сохта шудааст: «{ $generatedAltText }» ## Image alt-text settings +pdfjs-image-alt-text-settings-button = + .title = Танзимоти матни иловагии тасвир +pdfjs-image-alt-text-settings-button-label = Танзимоти матни иловагии тасвир +pdfjs-editor-alt-text-settings-dialog-label = Танзимоти матни иловагии тасвир +pdfjs-editor-alt-text-settings-automatic-title = Матни иловагии худкор +pdfjs-editor-alt-text-settings-create-model-button-label = Ба таври худкор эҷод кардани матни иловагӣ +pdfjs-editor-alt-text-settings-delete-model-button = Нест кардан +pdfjs-editor-alt-text-settings-download-model-button = Боргирӣ кардан +pdfjs-editor-alt-text-settings-downloading-model-button = Дар ҳоли боргирӣ… +pdfjs-editor-alt-text-settings-editor-title = Муҳаррири матни иловагӣ +pdfjs-editor-alt-text-settings-close-button = Пӯшидан diff --git a/viewer/locale/th/viewer.ftl b/viewer/locale/th/viewer.ftl index 99787cfb..26cb0323 100644 --- a/viewer/locale/th/viewer.ftl +++ b/viewer/locale/th/viewer.ftl @@ -358,6 +358,22 @@ pdfjs-editor-resizer-label-bottom-right = มุมขวาล่าง — ป pdfjs-editor-resizer-label-bottom-middle = ตรงกลางด้านล่าง — ปรับขนาด pdfjs-editor-resizer-label-bottom-left = มุมซ้ายล่าง — ปรับขนาด pdfjs-editor-resizer-label-middle-left = ตรงกลางด้านซ้าย — ปรับขนาด +pdfjs-editor-resizer-top-left = + .aria-label = มุมซ้ายบน — ปรับขนาด +pdfjs-editor-resizer-top-middle = + .aria-label = ตรงกลางด้านบน — ปรับขนาด +pdfjs-editor-resizer-top-right = + .aria-label = มุมขวาบน — ปรับขนาด +pdfjs-editor-resizer-middle-right = + .aria-label = ตรงกลางด้านขวา — ปรับขนาด +pdfjs-editor-resizer-bottom-right = + .aria-label = มุมขวาล่าง — ปรับขนาด +pdfjs-editor-resizer-bottom-middle = + .aria-label = ตรงกลางด้านล่าง — ปรับขนาด +pdfjs-editor-resizer-bottom-left = + .aria-label = มุมซ้ายล่าง — ปรับขนาด +pdfjs-editor-resizer-middle-left = + .aria-label = ตรงกลางด้านซ้าย — ปรับขนาด ## Color picker diff --git a/viewer/locale/tr/viewer.ftl b/viewer/locale/tr/viewer.ftl index 5d8c5076..0d70b3f9 100644 --- a/viewer/locale/tr/viewer.ftl +++ b/viewer/locale/tr/viewer.ftl @@ -380,6 +380,22 @@ pdfjs-editor-resizer-label-bottom-right = Sağ alt köşe — yeniden boyutland pdfjs-editor-resizer-label-bottom-middle = Alt orta — yeniden boyutlandır pdfjs-editor-resizer-label-bottom-left = Sol alt köşe — yeniden boyutlandır pdfjs-editor-resizer-label-middle-left = Orta sol — yeniden boyutlandır +pdfjs-editor-resizer-top-left = + .aria-label = Sol üst köşe — yeniden boyutlandır +pdfjs-editor-resizer-top-middle = + .aria-label = Üst orta — yeniden boyutlandır +pdfjs-editor-resizer-top-right = + .aria-label = Sağ üst köşe — yeniden boyutlandır +pdfjs-editor-resizer-middle-right = + .aria-label = Orta sağ — yeniden boyutlandır +pdfjs-editor-resizer-bottom-right = + .aria-label = Sağ alt köşe — yeniden boyutlandır +pdfjs-editor-resizer-bottom-middle = + .aria-label = Alt orta — yeniden boyutlandır +pdfjs-editor-resizer-bottom-left = + .aria-label = Sol alt köşe — yeniden boyutlandır +pdfjs-editor-resizer-middle-left = + .aria-label = Orta sol — yeniden boyutlandır ## Color picker diff --git a/viewer/locale/uk/viewer.ftl b/viewer/locale/uk/viewer.ftl index 07038119..d11cb440 100644 --- a/viewer/locale/uk/viewer.ftl +++ b/viewer/locale/uk/viewer.ftl @@ -105,9 +105,17 @@ pdfjs-document-properties-button-label = Властивості документ pdfjs-document-properties-file-name = Назва файлу: pdfjs-document-properties-file-size = Розмір файлу: # Variables: +# $kb (Number) - the PDF file size in kilobytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-kb = { NUMBER($kb, maximumSignificantDigits: 3) } кБ ({ $b } байтів) +# Variables: +# $mb (Number) - the PDF file size in megabytes +# $b (Number) - the PDF file size in bytes +pdfjs-document-properties-size-mb = { NUMBER($mb, maximumSignificantDigits: 3) } МБ ({ $b } байтів) +# Variables: # $size_kb (Number) - the PDF file size in kilobytes # $size_b (Number) - the PDF file size in bytes -pdfjs-document-properties-kb = { $size_kb } КБ ({ $size_b } байтів) +pdfjs-document-properties-kb = { $size_kb } кБ ({ $size_b } байтів) # Variables: # $size_mb (Number) - the PDF file size in megabytes # $size_b (Number) - the PDF file size in bytes @@ -119,6 +127,9 @@ pdfjs-document-properties-keywords = Ключові слова: pdfjs-document-properties-creation-date = Дата створення: pdfjs-document-properties-modification-date = Дата зміни: # Variables: +# $dateObj (Date) - the creation/modification date and time of the PDF file +pdfjs-document-properties-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } +# Variables: # $date (Date) - the creation/modification date of the PDF file # $time (Time) - the creation/modification time of the PDF file pdfjs-document-properties-date-string = { $date }, { $time } @@ -277,6 +288,9 @@ pdfjs-annotation-date-string = { $date }, { $time } # Some common types are e.g.: "Check", "Text", "Comment", "Note" pdfjs-text-annotation-type = .alt = [{ $type }-анотація] +# Variables: +# $dateObj (Date) - the modification date and time of the annotation +pdfjs-annotation-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") } ## Password @@ -368,6 +382,22 @@ pdfjs-editor-resizer-label-bottom-right = Нижній правий кут – pdfjs-editor-resizer-label-bottom-middle = Внизу посередині – зміна розміру pdfjs-editor-resizer-label-bottom-left = Нижній лівий кут – зміна розміру pdfjs-editor-resizer-label-middle-left = Ліворуч посередині – зміна розміру +pdfjs-editor-resizer-top-left = + .aria-label = Верхній лівий кут – зміна розміру +pdfjs-editor-resizer-top-middle = + .aria-label = Вгорі посередині – зміна розміру +pdfjs-editor-resizer-top-right = + .aria-label = Верхній правий кут – зміна розміру +pdfjs-editor-resizer-middle-right = + .aria-label = Праворуч посередині – зміна розміру +pdfjs-editor-resizer-bottom-right = + .aria-label = Нижній правий кут – зміна розміру +pdfjs-editor-resizer-bottom-middle = + .aria-label = Внизу посередині – зміна розміру +pdfjs-editor-resizer-bottom-left = + .aria-label = Нижній лівий кут – зміна розміру +pdfjs-editor-resizer-middle-left = + .aria-label = Ліворуч посередині – зміна розміру ## Color picker @@ -404,10 +434,22 @@ pdfjs-editor-new-alt-text-dialog-edit-label = Редагувати альтер pdfjs-editor-new-alt-text-dialog-add-label = Додати альтернативний текст (опис зображення) pdfjs-editor-new-alt-text-textarea = .placeholder = Напишіть свій опис тут… +# This text refers to the alt text box above this description. It offers a definition of alt text. +pdfjs-editor-new-alt-text-description = Короткий опис для людей, які не бачать зображення, або якщо зображення не завантажується. +# This is a required legal disclaimer that refers to the automatically created text inside the alt text box above this text. It disappears if the text is edited by a human. +pdfjs-editor-new-alt-text-disclaimer1 = Цей альтернативний текст створено автоматично, тому він може бути неточним. pdfjs-editor-new-alt-text-disclaimer-learn-more-url = Докладніше pdfjs-editor-new-alt-text-create-automatically-button-label = Автоматично створювати альтернативний текст pdfjs-editor-new-alt-text-not-now-button = Не зараз +pdfjs-editor-new-alt-text-error-title = Не вдалося автоматично створити альтернативний текст +pdfjs-editor-new-alt-text-error-description = Напишіть власний альтернативний текст або повторіть спробу пізніше. pdfjs-editor-new-alt-text-error-close-button = Закрити +# Variables: +# $totalSize (Number) - the total size (in MB) of the AI model. +# $downloadedSize (Number) - the downloaded size (in MB) of the AI model. +# $percent (Number) - the percentage of the downloaded size. +pdfjs-editor-new-alt-text-ai-model-downloading-progress = Завантаження моделі ШІ для альтернативного тексту ({ $downloadedSize } з { $totalSize } МБ) + .aria-valuetext = Завантаження моделі ШІ для альтернативного тексту ({ $downloadedSize } з { $totalSize } МБ) # This is a button that users can click to edit the alt text they have already added. pdfjs-editor-new-alt-text-added-button-label = Альтернативний текст додано # This is a button that users can click to open the alt text editor and add alt text when it is not present. @@ -427,3 +469,15 @@ pdfjs-image-alt-text-settings-button-label = Налаштування альте pdfjs-editor-alt-text-settings-dialog-label = Налаштування альтернативного тексту зображення pdfjs-editor-alt-text-settings-automatic-title = Автоматичний альтернативний текст pdfjs-editor-alt-text-settings-create-model-button-label = Автоматично створювати альтернативний текст +pdfjs-editor-alt-text-settings-create-model-description = Пропонує описи, щоб допомогти людям, які не бачать зображення, або якщо зображення не завантажується. +# Variables: +# $totalSize (Number) - the total size (in MB) of the AI model. +pdfjs-editor-alt-text-settings-download-model-label = Модель ШІ для альтернативного тексту ({ $totalSize } МБ) +pdfjs-editor-alt-text-settings-ai-model-description = Працює локально на вашому пристрої, тому приватність ваших даних захищена. Призначена для автоматичного створення альтернативного тексту. +pdfjs-editor-alt-text-settings-delete-model-button = Видалити +pdfjs-editor-alt-text-settings-download-model-button = Завантажити +pdfjs-editor-alt-text-settings-downloading-model-button = Завантаження… +pdfjs-editor-alt-text-settings-editor-title = Редактор альтернативного тексту +pdfjs-editor-alt-text-settings-show-dialog-button-label = Показувати редактор альтернативного тексту під час додавання зображення +pdfjs-editor-alt-text-settings-show-dialog-description = Допомагає переконатися, що всі ваші зображення мають альтернативний текст. +pdfjs-editor-alt-text-settings-close-button = Закрити diff --git a/viewer/locale/vi/viewer.ftl b/viewer/locale/vi/viewer.ftl index 98c1bb5b..14d990ad 100644 --- a/viewer/locale/vi/viewer.ftl +++ b/viewer/locale/vi/viewer.ftl @@ -372,6 +372,22 @@ pdfjs-editor-resizer-label-bottom-right = Dưới cùng bên phải — thay đ pdfjs-editor-resizer-label-bottom-middle = Ở giữa dưới cùng — thay đổi kích thước pdfjs-editor-resizer-label-bottom-left = Góc dưới bên trái — thay đổi kích thước pdfjs-editor-resizer-label-middle-left = Ở giữa bên trái — thay đổi kích thước +pdfjs-editor-resizer-top-left = + .aria-label = Trên cùng bên trái — thay đổi kích thước +pdfjs-editor-resizer-top-middle = + .aria-label = Trên cùng ở giữa — thay đổi kích thước +pdfjs-editor-resizer-top-right = + .aria-label = Trên cùng bên phải — thay đổi kích thước +pdfjs-editor-resizer-middle-right = + .aria-label = Ở giữa bên phải — thay đổi kích thước +pdfjs-editor-resizer-bottom-right = + .aria-label = Dưới cùng bên phải — thay đổi kích thước +pdfjs-editor-resizer-bottom-middle = + .aria-label = Ở giữa dưới cùng — thay đổi kích thước +pdfjs-editor-resizer-bottom-left = + .aria-label = Góc dưới bên trái — thay đổi kích thước +pdfjs-editor-resizer-middle-left = + .aria-label = Ở giữa bên trái — thay đổi kích thước ## Color picker diff --git a/viewer/locale/zh-CN/viewer.ftl b/viewer/locale/zh-CN/viewer.ftl index 03798c1a..9cebb3cd 100644 --- a/viewer/locale/zh-CN/viewer.ftl +++ b/viewer/locale/zh-CN/viewer.ftl @@ -372,6 +372,22 @@ pdfjs-editor-resizer-label-bottom-right = 调整尺寸 - 右下角 pdfjs-editor-resizer-label-bottom-middle = 调整大小 - 底部中间 pdfjs-editor-resizer-label-bottom-left = 调整尺寸 - 左下角 pdfjs-editor-resizer-label-middle-left = 调整尺寸 - 左侧中间 +pdfjs-editor-resizer-top-left = + .aria-label = 调整尺寸 - 左上角 +pdfjs-editor-resizer-top-middle = + .aria-label = 调整尺寸 - 顶部中间 +pdfjs-editor-resizer-top-right = + .aria-label = 调整尺寸 - 右上角 +pdfjs-editor-resizer-middle-right = + .aria-label = 调整尺寸 - 右侧中间 +pdfjs-editor-resizer-bottom-right = + .aria-label = 调整尺寸 - 右下角 +pdfjs-editor-resizer-bottom-middle = + .aria-label = 调整大小 - 底部中间 +pdfjs-editor-resizer-bottom-left = + .aria-label = 调整尺寸 - 左下角 +pdfjs-editor-resizer-middle-left = + .aria-label = 调整尺寸 - 左侧中间 ## Color picker diff --git a/viewer/locale/zh-TW/viewer.ftl b/viewer/locale/zh-TW/viewer.ftl index 20ff406c..e96d6375 100644 --- a/viewer/locale/zh-TW/viewer.ftl +++ b/viewer/locale/zh-TW/viewer.ftl @@ -372,6 +372,22 @@ pdfjs-editor-resizer-label-bottom-right = 右下角 — 調整大小 pdfjs-editor-resizer-label-bottom-middle = 底部中間 — 調整大小 pdfjs-editor-resizer-label-bottom-left = 左下角 — 調整大小 pdfjs-editor-resizer-label-middle-left = 中間左方 — 調整大小 +pdfjs-editor-resizer-top-left = + .aria-label = 左上角 — 調整大小 +pdfjs-editor-resizer-top-middle = + .aria-label = 頂部中間 — 調整大小 +pdfjs-editor-resizer-top-right = + .aria-label = 右上角 — 調整大小 +pdfjs-editor-resizer-middle-right = + .aria-label = 中間右方 — 調整大小 +pdfjs-editor-resizer-bottom-right = + .aria-label = 右下角 — 調整大小 +pdfjs-editor-resizer-bottom-middle = + .aria-label = 底部中間 — 調整大小 +pdfjs-editor-resizer-bottom-left = + .aria-label = 左下角 — 調整大小 +pdfjs-editor-resizer-middle-left = + .aria-label = 中間左方 — 調整大小 ## Color picker diff --git a/viewer/viewer.css b/viewer/viewer.css index b9e2437c..fc6bddfb 100644 --- a/viewer/viewer.css +++ b/viewer/viewer.css @@ -172,9 +172,10 @@ :is(.dialog .mainContainer) .dialogSeparator{ width:100%; - height:1px; + height:0; margin-block:4px; - background-color:var(--separator-color); + border-top:1px solid var(--separator-color); + border-bottom:none; } :is(.dialog .mainContainer) .dialogButtonsGroup{ @@ -508,6 +509,13 @@ height:0; } +.textLayer span[role="img"]{ + -webkit-user-select:none; + -moz-user-select:none; + user-select:none; + cursor:default; + } + .textLayer .highlight{ --highlight-bg-color:rgb(180 0 170 / 0.25); --highlight-selected-bg-color:rgb(0 100 0 / 0.25); @@ -1635,11 +1643,15 @@ cursor:var(--editorHighlight-editing-cursor); } +[role="img"]:is(.textLayer.highlighting:not(.free) span){ + cursor:var(--editorFreeHighlight-editing-cursor); + } + .textLayer.highlighting.free span{ cursor:var(--editorFreeHighlight-editing-cursor); } -#viewerContainer.pdfPresentationMode:fullscreen .noAltTextBadge{ +:is(#viewerContainer.pdfPresentationMode:fullscreen,.annotationEditorLayer.disabled) .noAltTextBadge{ display:none !important; } @@ -1863,11 +1875,12 @@ } :is(:is(:is(.annotationEditorLayer :is(.freeTextEditor,.inkEditor,.stampEditor,.highlightEditor),.textLayer) .editToolbar) .buttons) .divider{ - width:1px; + width:0; height:calc( 2 * var(--editor-toolbar-padding) + var(--editor-toolbar-height) ); - background-color:var(--editor-toolbar-border-color); + border-left:1px solid var(--editor-toolbar-border-color); + border-right:none; display:inline-block; margin-inline:2px; } @@ -2784,21 +2797,11 @@ } #highlightParamsToolbarContainer{ - height:auto; - padding-inline:10px; - padding-block:10px 16px; gap:16px; - display:flex; - flex-direction:column; - box-sizing:border-box; + padding-inline:10px; + padding-block-end:12px; } -#highlightParamsToolbarContainer .editorParamsLabel{ - width:-moz-fit-content; - width:fit-content; - inset-inline-start:0; - } - #highlightParamsToolbarContainer .colorPicker{ display:flex; flex-direction:column; @@ -2823,6 +2826,7 @@ align-items:center; background:none; flex:0 0 auto; + padding:0; } :is(:is(:is(#highlightParamsToolbarContainer .colorPicker) .dropdown) button) .swatch{ @@ -2851,7 +2855,6 @@ } :is(#highlightParamsToolbarContainer #editorHighlightThickness) .editorParamsLabel{ - width:100%; height:auto; align-self:stretch; } @@ -3044,6 +3047,7 @@ .pdfViewer{ --scale-factor:1; + --page-bg-color:unset; padding-bottom:var(--pdfViewer-padding-bottom); @@ -3071,6 +3075,8 @@ :is(.pdfViewer .canvasWrapper) canvas{ margin:0; display:block; + width:100%; + height:100%; } [hidden]:is(:is(.pdfViewer .canvasWrapper) canvas){ @@ -3087,6 +3093,9 @@ } .pdfViewer .page{ + --scale-round-x:1px; + --scale-round-y:1px; + direction:ltr; width:816px; height:1056px; @@ -3095,7 +3104,7 @@ overflow:visible; border:var(--page-border); background-clip:content-box; - background-color:rgb(255 255 255); + background-color:var(--page-bg-color, rgb(255 255 255)); } .pdfViewer .dummyPage{ @@ -3193,9 +3202,14 @@ --sidebar-transition-duration:200ms; --sidebar-transition-timing-function:ease; + --toolbar-height:32px; + --toolbar-horizontal-padding:1px; + --toolbar-vertical-padding:2px; + --icon-size:16px; + --toolbar-icon-opacity:0.7; --doorhanger-icon-opacity:0.9; - --editor-toolbar-base-offset:105px; + --doorhanger-height:8px; --main-color:rgb(12 12 13); --body-bg-color:rgb(212 212 215); @@ -3213,7 +3227,6 @@ --toolbar-border-color:rgb(184 184 184); --toolbar-box-shadow:0 1px 0 var(--toolbar-border-color); --toolbar-border-bottom:none; - --toolbar-height:32px; --toolbarSidebar-box-shadow:inset calc(-1px * var(--dir-factor)) 0 0 rgb(0 0 0 / 0.25), 0 1px 0 rgb(0 0 0 / 0.15), 0 0 1px rgb(0 0 0 / 0.1); --toolbarSidebar-border-bottom:none; --button-hover-color:rgb(221 222 223); @@ -3414,11 +3427,24 @@ } } -*{ - padding:0; - margin:0; +@keyframes progressIndeterminate{ + 0%{ + transform:translateX(calc(-142px * var(--dir-factor))); + } + + 100%{ + transform:translateX(0); + } } +html[data-toolbar-density="compact"]{ + --toolbar-height:30px; + } + +html[data-toolbar-density="touch"]{ + --toolbar-height:44px; + } + html, body{ height:100%; @@ -3426,6 +3452,7 @@ body{ } body{ + margin:0; background-color:var(--body-bg-color); scrollbar-color:var(--scrollbar-color) var(--scrollbar-bg-color); } @@ -3473,6 +3500,7 @@ body.wait::before{ width:100%; height:100%; position:relative; + margin:0; } #sidebarContainer{ @@ -3481,9 +3509,9 @@ body.wait::before{ inset-inline-start:calc(-1 * var(--sidebar-width)); width:var(--sidebar-width); visibility:hidden; - z-index:100; + z-index:1; font:message-box; - border-top:1px solid rgb(51 51 51); + border-top:1px solid transparent; border-inline-end:var(--doorhanger-border-color-whcm); transition-property:inset-inline-start; transition-duration:var(--sidebar-transition-duration); @@ -3493,6 +3521,7 @@ body.wait::before{ #outerContainer:is(.sidebarMoving, .sidebarOpen) #sidebarContainer{ visibility:visible; } + #outerContainer.sidebarOpen #sidebarContainer{ inset-inline-start:0; } @@ -3501,6 +3530,9 @@ body.wait::before{ position:absolute; inset:0; min-width:350px; + margin:0; + display:flex; + flex-direction:column; } #sidebarContent{ @@ -3517,7 +3549,9 @@ body.wait::before{ position:absolute; inset:var(--toolbar-height) 0 0; outline:none; + z-index:0; } + #viewerContainer:not(.pdfPresentationMode){ transition-duration:var(--sidebar-transition-duration); transition-timing-function:var(--sidebar-transition-timing-function); @@ -3528,22 +3562,12 @@ body.wait::before{ transition-property:inset-inline-start; } -.toolbar{ - position:relative; - inset-inline:0; - z-index:9999; - cursor:default; - font:message-box; -} - -:is(.toolbar, .editorParamsToolbar, #sidebarContainer) - :is(input, button, select){ - outline:none; +#sidebarContainer :is(input, button, select){ font:message-box; } -#toolbarContainer{ - width:100%; +.toolbar{ + z-index:2; } #toolbarSidebar{ @@ -3552,8 +3576,42 @@ body.wait::before{ background-color:var(--sidebar-toolbar-bg-color); box-shadow:var(--toolbarSidebar-box-shadow); border-bottom:var(--toolbarSidebar-border-bottom); + padding:var(--toolbar-vertical-padding) var(--toolbar-horizontal-padding); + justify-content:space-between; } +#toolbarSidebar #toolbarSidebarLeft{ + width:auto; + height:100%; + } + +:is(#toolbarSidebar #toolbarSidebarLeft) #viewThumbnail::before{ + -webkit-mask-image:var(--toolbarButton-viewThumbnail-icon); + mask-image:var(--toolbarButton-viewThumbnail-icon); + } + +:is(#toolbarSidebar #toolbarSidebarLeft) #viewOutline::before{ + -webkit-mask-image:var(--toolbarButton-viewOutline-icon); + mask-image:var(--toolbarButton-viewOutline-icon); + transform:scaleX(var(--dir-factor)); + } + +:is(#toolbarSidebar #toolbarSidebarLeft) #viewAttachments::before{ + -webkit-mask-image:var(--toolbarButton-viewAttachments-icon); + mask-image:var(--toolbarButton-viewAttachments-icon); + } + +:is(#toolbarSidebar #toolbarSidebarLeft) #viewLayers::before{ + -webkit-mask-image:var(--toolbarButton-viewLayers-icon); + mask-image:var(--toolbarButton-viewLayers-icon); + } + +#toolbarSidebar #toolbarSidebarRight{ + width:auto; + height:100%; + padding-inline-end:2px; + } + #sidebarResizer{ position:absolute; inset-block:0; @@ -3563,258 +3621,71 @@ body.wait::before{ cursor:ew-resize; } -#toolbarContainer, -.editorParamsToolbar{ - position:relative; - height:var(--toolbar-height); - background-color:var(--toolbar-bg-color); - box-shadow:var(--toolbar-box-shadow); - border-bottom:var(--toolbar-border-bottom); -} - -#toolbarViewer{ - height:var(--toolbar-height); -} - -#loadingBar{ - --progressBar-percent:0%; - --progressBar-end-offset:0; - - position:absolute; - inset-inline:0 var(--progressBar-end-offset); - height:4px; - background-color:var(--progressBar-bg-color); - border-bottom:1px solid var(--toolbar-border-color); - transition-property:inset-inline-start; - transition-duration:var(--sidebar-transition-duration); - transition-timing-function:var(--sidebar-transition-timing-function); -} - #outerContainer.sidebarOpen #loadingBar{ inset-inline-start:var(--sidebar-width); } -#loadingBar .progress{ - position:absolute; - top:0; - inset-inline-start:0; - width:100%; - transform:scaleX(var(--progressBar-percent)); - transform-origin:calc(50% - 50% * var(--dir-factor)) 0; - height:100%; - background-color:var(--progressBar-color); - overflow:hidden; - transition:transform 200ms; -} - -@keyframes progressIndeterminate{ - 0%{ - transform:translateX(calc(-142px * var(--dir-factor))); - } - 100%{ - transform:translateX(0); - } -} - -#loadingBar.indeterminate .progress{ - transform:none; - background-color:var(--progressBar-bg-color); - transition:none; -} - -#loadingBar.indeterminate .progress .glimmer{ - position:absolute; - top:0; - inset-inline-start:0; - height:100%; - width:calc(100% + 150px); - background:repeating-linear-gradient( - 135deg, - var(--progressBar-blend-color) 0, - var(--progressBar-bg-color) 5px, - var(--progressBar-bg-color) 45px, - var(--progressBar-color) 55px, - var(--progressBar-color) 95px, - var(--progressBar-blend-color) 100px - ); - animation:progressIndeterminate 1s linear infinite; -} - #outerContainer.sidebarResizing :is(#sidebarContainer, #viewerContainer, #loadingBar){ transition-duration:0s; } -.editorParamsToolbar{ +.doorHanger, +.doorHangerRight{ + border-radius:2px; + box-shadow:0 1px 5px var(--doorhanger-border-color), 0 0 0 1px var(--doorhanger-border-color); + border:var(--doorhanger-border-color-whcm); background-color:var(--doorhanger-bg-color); - top:var(--toolbar-height); - position:absolute; - z-index:30000; - height:auto; - inset-inline-end:4px; - padding:6px 0 10px; - margin:4px 2px; - font:message-box; - font-size:12px; - line-height:14px; - text-align:left; - cursor:default; -} - -.editorParamsToolbarContainer{ - width:220px; - margin-bottom:-4px; -} - -.editorParamsToolbarContainer > .editorParamsSetter{ - min-height:26px; - display:flex; - align-items:center; - justify-content:space-between; - padding-inline:10px; -} - -.editorParamsToolbarContainer .editorParamsLabel{ - padding-inline-end:10px; - flex:none; - font:menu; - font-size:13px; - font-style:normal; - font-weight:400; - line-height:150%; - color:var(--main-color); -} - -.editorParamsToolbarContainer .editorParamsColor{ - width:32px; - height:32px; - flex:none; -} - -.editorParamsToolbarContainer .editorParamsSlider{ - background-color:transparent; - width:90px; - flex:0 1 0; -} - -.editorParamsToolbarContainer .editorParamsSlider::-moz-range-progress{ - background-color:black; -} - -.editorParamsToolbarContainer .editorParamsSlider::-webkit-slider-runnable-track, -.editorParamsToolbarContainer .editorParamsSlider::-moz-range-track{ - background-color:black; -} - -.editorParamsToolbarContainer .editorParamsSlider::-webkit-slider-thumb, -.editorParamsToolbarContainer .editorParamsSlider::-moz-range-thumb{ - background-color:white; -} - -#editorStampParamsToolbar{ - inset-inline-end:calc(var(--editor-toolbar-base-offset) + 0px); -} - -#editorInkParamsToolbar{ - inset-inline-end:calc(var(--editor-toolbar-base-offset) + 28px); + inset-block-start:calc(100% + var(--doorhanger-height) - 2px); } -#editorFreeTextParamsToolbar{ - inset-inline-end:calc(var(--editor-toolbar-base-offset) + 56px); -} +:is(.doorHanger,.doorHangerRight)::after,:is(.doorHanger,.doorHangerRight)::before{ + bottom:100%; + border-style:solid; + border-color:transparent; + content:""; + height:0; + width:0; + position:absolute; + pointer-events:none; + opacity:var(--doorhanger-triangle-opacity-whcm); + } -#editorHighlightParamsToolbar{ - inset-inline-end:calc(var(--editor-toolbar-base-offset) + 84px); -} +:is(.doorHanger,.doorHangerRight)::before{ + border-width:calc(var(--doorhanger-height) + 2px); + border-bottom-color:var(--doorhanger-border-color); + } -#editorStampAddImage::before{ - -webkit-mask-image:var(--editorParams-stampAddImage-icon); - mask-image:var(--editorParams-stampAddImage-icon); -} +:is(.doorHanger,.doorHangerRight)::after{ + border-width:var(--doorhanger-height); + } -.doorHanger, .doorHangerRight{ - border-radius:2px; - box-shadow:0 1px 5px var(--doorhanger-border-color), 0 0 0 1px var(--doorhanger-border-color); - border:var(--doorhanger-border-color-whcm); -} -:is(.doorHanger, .doorHangerRight)::after, -:is(.doorHanger, .doorHangerRight)::before{ - bottom:100%; - border:8px solid rgb(0 0 0 / 0); - content:" "; - height:0; - width:0; - position:absolute; - pointer-events:none; - opacity:var(--doorhanger-triangle-opacity-whcm); -} -.doorHanger::after{ - inset-inline-start:10px; - margin-inline-start:-8px; - border-bottom-color:var(--toolbar-bg-color); -} -.doorHangerRight::after{ - inset-inline-end:10px; - margin-inline-end:-8px; - border-bottom-color:var(--doorhanger-bg-color); -} -:is(.doorHanger, .doorHangerRight)::before{ - border-bottom-color:var(--doorhanger-border-color); - border-width:9px; -} -.doorHanger::before{ - inset-inline-start:10px; - margin-inline-start:-9px; -} -.doorHangerRight::before{ - inset-inline-end:10px; - margin-inline-end:-9px; + inset-inline-end:calc(50% - var(--doorhanger-height) - 1px); } -#toolbarViewerMiddle{ - position:absolute; - left:50%; - transform:translateX(-50%); -} +.doorHangerRight::before{ + inset-inline-end:-1px; + } -#toolbarViewerLeft, -#toolbarSidebarLeft{ - float:var(--inline-start); -} -#toolbarViewerRight, -#toolbarSidebarRight{ - float:var(--inline-end); -} +.doorHangerRight::after{ + border-bottom-color:var(--doorhanger-bg-color); + inset-inline-end:1px; + } -#toolbarViewerLeft > *, -#toolbarViewerMiddle > *, -#toolbarViewerRight > *, -#toolbarSidebarLeft *, -#toolbarSidebarRight *{ - position:relative; - float:var(--inline-start); +.doorHanger{ + inset-inline-start:calc(50% - var(--doorhanger-height) - 1px); } -#toolbarViewerLeft{ - padding-inline-start:1px; -} -#toolbarViewerRight{ - padding-inline-end:1px; -} -#toolbarSidebarRight{ - padding-inline-end:2px; -} +.doorHanger::before{ + inset-inline-start:-1px; + } -.splitToolbarButton{ - margin:2px; - display:inline-block; -} -.splitToolbarButton > .toolbarButton{ - float:var(--inline-start); -} +.doorHanger::after{ + border-bottom-color:var(--toolbar-bg-color); + inset-inline-start:1px; + } -.toolbarButton, .dialogButton{ border:none; background:none; @@ -3831,39 +3702,14 @@ body.wait::before{ color:var(--dialog-button-hover-color); } -.toolbarButton > span{ - display:inline-block; - width:0; - height:0; - overflow:hidden; -} - -:is(.toolbarButton, .dialogButton)[disabled]{ - opacity:0.5; -} - -.splitToolbarButton > .toolbarButton:is(:hover, :focus-visible), -.dropdownToolbarButton:hover{ - background-color:var(--button-hover-color); -} -.splitToolbarButton > .toolbarButton{ - position:relative; - margin:0; -} -#toolbarSidebar .splitToolbarButton > .toolbarButton{ - margin-inline-end:2px; -} - .splitToolbarButtonSeparator{ float:var(--inline-start); - margin:4px 0; - width:1px; - height:20px; - background-color:var(--separator-color); + width:0; + height:62%; + border-left:1px solid var(--separator-color); + border-right:none; } -.toolbarButton, -.dropdownToolbarButton, .dialogButton{ min-width:16px; margin:2px 1px; @@ -3880,114 +3726,28 @@ body.wait::before{ box-sizing:border-box; } -.toolbarButton:is(:hover, :focus-visible){ - background-color:var(--button-hover-color); -} - -.toolbarButton.toggled, -.splitToolbarButton.toggled > .toolbarButton.toggled{ - background-color:var(--toggled-btn-bg-color); - color:var(--toggled-btn-color); -} +.treeItemToggler::before{ + position:absolute; + display:inline-block; + width:16px; + height:16px; -.toolbarButton.toggled:hover, -.splitToolbarButton.toggled > .toolbarButton.toggled:hover{ - outline:var(--toggled-hover-btn-outline) !important; + content:""; + background-color:var(--toolbar-icon-bg-color); + -webkit-mask-size:cover; + mask-size:cover; } -.toolbarButton.toggled::before{ - background-color:var(--toggled-btn-color); +#sidebarToggleButton::before{ + -webkit-mask-image:var(--toolbarButton-sidebarToggle-icon); + mask-image:var(--toolbarButton-sidebarToggle-icon); + transform:scaleX(var(--dir-factor)); } -.toolbarButton.toggled:hover:active, -.splitToolbarButton.toggled > .toolbarButton.toggled:hover:active{ - background-color:var(--toggled-hover-active-btn-color); -} - -.dropdownToolbarButton{ - display:flex; - width:-moz-fit-content; - width:fit-content; - min-width:140px; - padding:0; - background-color:var(--dropdown-btn-bg-color); - border:var(--dropdown-btn-border); -} -.dropdownToolbarButton::after{ - top:6px; - inset-inline-end:6px; - pointer-events:none; - -webkit-mask-image:var(--toolbarButton-menuArrow-icon); - mask-image:var(--toolbarButton-menuArrow-icon); -} - -.dropdownToolbarButton > select{ - -webkit-appearance:none; - -moz-appearance:none; - appearance:none; - width:inherit; - min-width:inherit; - height:28px; - font-size:12px; - color:var(--main-color); - margin:0; - padding-block:1px 2px; - padding-inline:6px 38px; - border:none; - background-color:var(--dropdown-btn-bg-color); -} -.dropdownToolbarButton > select:is(:hover, :focus-visible){ - background-color:var(--button-hover-color); - color:var(--toggled-btn-color); -} -.dropdownToolbarButton > select > option{ - background:var(--doorhanger-bg-color); - color:var(--main-color); -} - -.toolbarButtonSpacer{ - width:30px; - display:inline-block; - height:1px; -} - -:is(.toolbarButton, .treeItemToggler)::before, -.dropdownToolbarButton::after{ - position:absolute; - display:inline-block; - width:16px; - height:16px; - - content:""; - background-color:var(--toolbar-icon-bg-color); - -webkit-mask-size:cover; - mask-size:cover; -} - -.dropdownToolbarButton:is(:hover, :focus-visible, :active)::after{ - background-color:var(--toolbar-icon-hover-bg-color); -} - -.toolbarButton::before{ - opacity:var(--toolbar-icon-opacity); - top:6px; - left:6px; -} - -.toolbarButton:is(:hover, :focus-visible)::before{ - background-color:var(--toolbar-icon-hover-bg-color); -} - -#sidebarToggle::before{ - -webkit-mask-image:var(--toolbarButton-sidebarToggle-icon); - mask-image:var(--toolbarButton-sidebarToggle-icon); - transform:scaleX(var(--dir-factor)); -} - -#secondaryToolbarToggle::before{ - -webkit-mask-image:var(--toolbarButton-secondaryToolbarToggle-icon); - mask-image:var(--toolbarButton-secondaryToolbarToggle-icon); - transform:scaleX(var(--dir-factor)); +#secondaryToolbarToggleButton::before{ + -webkit-mask-image:var(--toolbarButton-secondaryToolbarToggle-icon); + mask-image:var(--toolbarButton-secondaryToolbarToggle-icon); + transform:scaleX(var(--dir-factor)); } #previous::before{ @@ -4000,65 +3760,59 @@ body.wait::before{ mask-image:var(--toolbarButton-pageDown-icon); } -#zoomOut::before{ +#zoomOutButton::before{ -webkit-mask-image:var(--toolbarButton-zoomOut-icon); mask-image:var(--toolbarButton-zoomOut-icon); } -#zoomIn::before{ +#zoomInButton::before{ -webkit-mask-image:var(--toolbarButton-zoomIn-icon); mask-image:var(--toolbarButton-zoomIn-icon); } -#editorFreeText::before{ +#presentationMode::before{ + -webkit-mask-image:var(--toolbarButton-presentationMode-icon); + mask-image:var(--toolbarButton-presentationMode-icon); +} + +#editorFreeTextButton::before{ -webkit-mask-image:var(--toolbarButton-editorFreeText-icon); mask-image:var(--toolbarButton-editorFreeText-icon); } -#editorHighlight::before{ +#editorHighlightButton::before{ -webkit-mask-image:var(--toolbarButton-editorHighlight-icon); mask-image:var(--toolbarButton-editorHighlight-icon); } -#editorInk::before{ +#editorInkButton::before{ -webkit-mask-image:var(--toolbarButton-editorInk-icon); mask-image:var(--toolbarButton-editorInk-icon); } -#editorStamp::before{ +#editorStampButton::before{ -webkit-mask-image:var(--toolbarButton-editorStamp-icon); mask-image:var(--toolbarButton-editorStamp-icon); } -#print::before{ +:is(#printButton, #secondaryPrint)::before{ -webkit-mask-image:var(--toolbarButton-print-icon); mask-image:var(--toolbarButton-print-icon); } -#download::before{ - -webkit-mask-image:var(--toolbarButton-download-icon); - mask-image:var(--toolbarButton-download-icon); -} - -#viewThumbnail::before{ - -webkit-mask-image:var(--toolbarButton-viewThumbnail-icon); - mask-image:var(--toolbarButton-viewThumbnail-icon); +#secondaryOpenFile::before{ + -webkit-mask-image:var(--toolbarButton-openFile-icon); + mask-image:var(--toolbarButton-openFile-icon); } -#viewOutline::before{ - -webkit-mask-image:var(--toolbarButton-viewOutline-icon); - mask-image:var(--toolbarButton-viewOutline-icon); - transform:scaleX(var(--dir-factor)); -} - -#viewAttachments::before{ - -webkit-mask-image:var(--toolbarButton-viewAttachments-icon); - mask-image:var(--toolbarButton-viewAttachments-icon); +:is(#downloadButton, #secondaryDownload)::before{ + -webkit-mask-image:var(--toolbarButton-download-icon); + mask-image:var(--toolbarButton-download-icon); } -#viewLayers::before{ - -webkit-mask-image:var(--toolbarButton-viewLayers-icon); - mask-image:var(--toolbarButton-viewLayers-icon); +#viewBookmark::before{ + -webkit-mask-image:var(--toolbarButton-bookmark-icon); + mask-image:var(--toolbarButton-bookmark-icon); } #currentOutlineItem::before{ @@ -4067,7 +3821,7 @@ body.wait::before{ transform:scaleX(var(--dir-factor)); } -#viewFind::before{ +#viewFindButton::before{ -webkit-mask-image:var(--toolbarButton-search-icon); mask-image:var(--toolbarButton-search-icon); } @@ -4086,19 +3840,46 @@ body.wait::before{ .verticalToolbarSeparator{ display:block; - margin:5px 2px; - width:1px; - height:22px; - background-color:var(--separator-color); + margin-inline:2px; + width:0; + height:80%; + border-left:1px solid var(--separator-color); + border-right:none; + box-sizing:border-box; } + .horizontalToolbarSeparator{ display:block; margin:6px 0; - height:1px; + border-top:1px solid var(--doorhanger-separator-color); + border-bottom:none; + height:0; width:100%; - background-color:var(--doorhanger-separator-color); } +.toggleButton{ + display:inline; +} + +.toggleButton:is(:hover,:has( > input:focus-visible)){ + color:var(--toggled-btn-color); + background-color:var(--button-hover-color); + } + +.toggleButton:has( > input:checked){ + color:var(--toggled-btn-color); + background-color:var(--toggled-btn-bg-color); + } + +.toggleButton > input{ + position:absolute; + top:50%; + left:50%; + opacity:0; + width:0; + height:0; + } + .toolbarField{ padding:4px 7px; margin:3px 0; @@ -4113,13 +3894,9 @@ body.wait::before{ outline:none; } -.toolbarField[type="checkbox"]{ - opacity:0; - position:absolute !important; - left:0; - margin:10px 0 3px; - margin-inline-start:7px; -} +.toolbarField:focus{ + border-color:#0a84ff; + } #pageNumber{ -moz-appearance:textfield; @@ -4134,20 +3911,23 @@ body.wait::before{ } .loadingInput:has( > .loading:is(#pageNumber))::after{ - display:block; + display:inline; visibility:visible; transition-property:visibility; transition-delay:var(--loading-icon-delay); } +.loadingInput{ + position:relative; +} + .loadingInput::after{ position:absolute; visibility:hidden; display:none; - top:calc(50% - 8px); - width:16px; - height:16px; + width:var(--icon-size); + height:var(--icon-size); content:""; background-color:var(--toolbar-icon-bg-color); @@ -4165,29 +3945,6 @@ body.wait::before{ inset-inline-end:4px; } -.toolbarField:focus{ - border-color:#0a84ff; -} - -.toolbarLabel{ - min-width:16px; - padding:7px; - margin:2px; - border-radius:2px; - color:var(--main-color); - font-size:12px; - line-height:14px; - text-align:left; - -webkit-user-select:none; - -moz-user-select:none; - user-select:none; - cursor:default; -} - -#numPages.toolbarLabel{ - padding-inline-start:3px; -} - #thumbnailView, #outlineView, #attachmentsView, @@ -4201,6 +3958,7 @@ body.wait::before{ -moz-user-select:none; user-select:none; } + #thumbnailView{ width:calc(100% - 60px); padding:10px 30px 0; @@ -4231,6 +3989,7 @@ a:focus > .thumbnail, .thumbnail:hover{ border-color:var(--thumbnail-hover-color); } + .thumbnail.selected{ border-color:var(--thumbnail-selected-color) !important; } @@ -4240,10 +3999,12 @@ a:focus > .thumbnail, height:var(--thumbnail-height); opacity:0.9; } + a:focus > .thumbnail > .thumbnailImage, .thumbnail:hover > .thumbnailImage{ opacity:0.95; } + .thumbnail.selected > .thumbnailImage{ opacity:1 !important; } @@ -4281,9 +4042,11 @@ a:focus > .thumbnail > .thumbnailImage, #layersView .treeItem > a *{ cursor:pointer; } + #layersView .treeItem > a > label{ padding-inline-start:4px; } + #layersView .treeItem > a > label > input{ float:var(--inline-start); margin-top:1px; @@ -4296,16 +4059,19 @@ a:focus > .thumbnail > .thumbnailImage, width:0; color:rgb(255 255 255 / 0.5); } + .treeItemToggler::before{ inset-inline-end:4px; -webkit-mask-image:var(--treeitem-expanded-icon); mask-image:var(--treeitem-expanded-icon); } + .treeItemToggler.treeItemsHidden::before{ -webkit-mask-image:var(--treeitem-collapsed-icon); mask-image:var(--treeitem-collapsed-icon); transform:scaleX(var(--dir-factor)); } + .treeItemToggler.treeItemsHidden ~ .treeItems{ display:none; } @@ -4330,7 +4096,7 @@ a:focus > .thumbnail > .thumbnailImage, } #sidebarContainer:has(#outlineView:not(.hidden)) #outlineOptionsContainer{ - display:inherit; + display:inline flex; } .dialogButton{ @@ -4355,6 +4121,7 @@ dialog{ border-radius:4px; box-shadow:0 1px 4px rgb(0 0 0 / 0.3); } + dialog::backdrop{ background-color:rgb(0 0 0 / 0.2); } @@ -4374,9 +4141,10 @@ dialog .toolbarField{ dialog .separator{ display:block; margin:4px 0; - height:1px; + height:0; width:100%; - background-color:var(--separator-color); + border-top:1px solid var(--separator-color); + border-bottom:none; } dialog .buttonRow{ @@ -4391,6 +4159,7 @@ dialog :link{ #passwordDialog{ text-align:center; } + #passwordDialog .toolbarField{ width:200px; } @@ -4398,18 +4167,22 @@ dialog :link{ #documentPropertiesDialog{ text-align:left; } + #documentPropertiesDialog .row > *{ min-width:100px; text-align:start; } + #documentPropertiesDialog .row > span{ width:125px; word-wrap:break-word; } + #documentPropertiesDialog .row > p{ max-width:225px; word-wrap:break-word; } + #documentPropertiesDialog .buttonRow{ margin-top:10px; } @@ -4417,14 +4190,17 @@ dialog :link{ .grab-to-pan-grab{ cursor:grab !important; } + .grab-to-pan-grab *:not(input):not(textarea):not(button):not(select):not(:link){ cursor:inherit !important; } + .grab-to-pan-grab:active, .grab-to-pan-grabbing{ cursor:grabbing !important; } + .grab-to-pan-grabbing{ position:fixed; background:rgb(0 0 0 / 0); @@ -4434,23 +4210,86 @@ dialog :link{ z-index:50000; } -.toolbarButton.labeled{ - border-radius:0; +.toolbarButton{ + height:100%; + aspect-ratio:1; + display:flex; + align-items:center; + justify-content:center; + background:none; + border:none; + color:var(--main-color); + outline:none; + border-radius:2px; + box-sizing:border-box; + font:message-box; + flex:none; + position:relative; +} + +.toolbarButton > span{ display:inline-block; - height:auto; - margin:0; - padding:0 0 1px; - padding-inline-start:36px; - position:relative; - min-height:26px; - min-width:100%; + width:0; + height:0; + overflow:hidden; + } + +.toolbarButton::before{ + opacity:var(--toolbar-icon-opacity); + display:inline-block; + width:var(--icon-size); + height:var(--icon-size); + content:""; + background-color:var(--toolbar-icon-bg-color); + -webkit-mask-size:cover; + mask-size:cover; + -webkit-mask-position:center; + mask-position:center; + } + +.toolbarButton.toggled{ + background-color:var(--toggled-btn-bg-color); + color:var(--toggled-btn-color); + } + +.toolbarButton.toggled::before{ + background-color:var(--toggled-btn-color); + } + +.toolbarButton.toggled:hover{ + outline:var(--toggled-hover-btn-outline) !important; + } + +.toolbarButton.toggled:hover:active{ + background-color:var(--toggled-hover-active-btn-color); + } + +.toolbarButton:is(:hover,:focus-visible){ + background-color:var(--button-hover-color); + } + +.toolbarButton:is(:hover,:focus-visible)::before{ + background-color:var(--toolbar-icon-hover-bg-color); + } + +.toolbarButton:is([disabled="disabled"],[disabled]){ + opacity:0.5; + pointer-events:none; + } + +.toolbarButton.labeled{ + width:100%; + min-height:var(--menuitem-height); + justify-content:flex-start; + gap:8px; + padding-inline-start:12px; + aspect-ratio:unset; text-align:start; white-space:normal; - width:auto; + cursor:default; } .toolbarButton.labeled:is(a){ - padding-top:5px; text-decoration:none; } @@ -4460,50 +4299,130 @@ dialog :link{ } .toolbarButton.labeled::before{ - inset-inline-start:12px; opacity:var(--doorhanger-icon-opacity); - top:5px; } -.toolbarButton.labeled:not(.toggled):is(:hover,:focus-visible){ +.toolbarButton.labeled:is(:hover,:focus-visible){ background-color:var(--doorhanger-hover-bg-color); color:var(--doorhanger-hover-color); } .toolbarButton.labeled > span{ - display:unset; - padding-inline-end:4px; + display:inline-block; + width:-moz-max-content; + width:max-content; + height:auto; } -#secondaryToolbar{ - background-color:var(--doorhanger-bg-color); - cursor:default; - font:message-box; - font-size:12px; - height:auto; - inset-inline-end:4px; - line-height:14px; - margin:4px 2px; - padding:6px 0 10px; - position:absolute; - text-align:left; - top:var(--toolbar-height); - z-index:30000; +.toolbarButtonWithContainer{ + height:100%; + aspect-ratio:1; + display:inline-block; + position:relative; + flex:none; } -#secondaryToolbar :is(button,a){ - font:message-box; - outline:none; +.toolbarButtonWithContainer > .toolbarButton{ + width:100%; + height:100%; } -#secondaryToolbar #secondaryToolbarButtonContainer{ - margin-bottom:-4px; - max-height:calc(var(--viewer-container-height) - 40px); - max-width:220px; - min-height:26px; +.toolbarButtonWithContainer .menu{ + padding-block:5px; + } + +.toolbarButtonWithContainer .menuContainer{ + width:100%; + height:auto; + max-height:calc( + var(--viewer-container-height) - var(--toolbar-height) - + var(--doorhanger-height) + ); + display:flex; + flex-direction:column; + box-sizing:border-box; overflow-y:auto; } +.toolbarButtonWithContainer .editorParamsToolbar{ + height:auto; + width:220px; + position:absolute; + z-index:30000; + cursor:default; + } + +:is(.toolbarButtonWithContainer .editorParamsToolbar) #editorStampAddImage::before{ + -webkit-mask-image:var(--editorParams-stampAddImage-icon); + mask-image:var(--editorParams-stampAddImage-icon); + } + +:is(.toolbarButtonWithContainer .editorParamsToolbar) .editorParamsLabel{ + flex:none; + font:menu; + font-size:13px; + font-style:normal; + font-weight:400; + line-height:150%; + color:var(--main-color); + width:-moz-fit-content; + width:fit-content; + inset-inline-start:0; + } + +:is(.toolbarButtonWithContainer .editorParamsToolbar) .editorParamsToolbarContainer{ + width:100%; + height:auto; + display:flex; + flex-direction:column; + box-sizing:border-box; + padding-inline:10px; + padding-block:10px; + } + +:is(:is(.toolbarButtonWithContainer .editorParamsToolbar) .editorParamsToolbarContainer) > .editorParamsSetter{ + min-height:26px; + display:flex; + align-items:center; + justify-content:space-between; + } + +:is(:is(.toolbarButtonWithContainer .editorParamsToolbar) .editorParamsToolbarContainer) .editorParamsColor{ + width:32px; + height:32px; + flex:none; + padding:0; + } + +:is(:is(.toolbarButtonWithContainer .editorParamsToolbar) .editorParamsToolbarContainer) .editorParamsSlider{ + background-color:transparent; + width:90px; + flex:0 1 0; + font:message-box; + } + +:is(:is(:is(.toolbarButtonWithContainer .editorParamsToolbar) .editorParamsToolbarContainer) .editorParamsSlider)::-moz-range-progress{ + background-color:black; + } + +:is(:is(:is(.toolbarButtonWithContainer .editorParamsToolbar) .editorParamsToolbarContainer) .editorParamsSlider)::-webkit-slider-runnable-track,:is(:is(:is(.toolbarButtonWithContainer .editorParamsToolbar) .editorParamsToolbarContainer) .editorParamsSlider)::-moz-range-track{ + background-color:black; + } + +:is(:is(:is(.toolbarButtonWithContainer .editorParamsToolbar) .editorParamsToolbarContainer) .editorParamsSlider)::-webkit-slider-thumb,:is(:is(:is(.toolbarButtonWithContainer .editorParamsToolbar) .editorParamsToolbarContainer) .editorParamsSlider)::-moz-range-thumb{ + background-color:white; + } + +#secondaryToolbar{ + height:auto; + width:220px; + position:absolute; + z-index:30000; + cursor:default; + min-height:26px; + max-height:calc(var(--viewer-container-height) - 40px); +} + :is(#secondaryToolbar #secondaryToolbarButtonContainer) #secondaryOpenFile::before{ -webkit-mask-image:var(--toolbarButton-openFile-icon); mask-image:var(--toolbarButton-openFile-icon); @@ -4605,124 +4524,121 @@ dialog :link{ } #findbar{ - background-color:var(--toolbar-bg-color); - cursor:default; - font:message-box; - font-size:12px; + --input-horizontal-padding:4px; + --findbar-padding:2px; + + width:-moz-max-content; + + width:max-content; + max-width:90vw; + min-height:var(--toolbar-height); height:auto; - inset-inline-start:64px; - line-height:14px; - margin:4px 2px; - min-width:300px; - padding:0 4px; position:absolute; - text-align:left; - top:var(--toolbar-height); z-index:30000; + cursor:default; + padding:0; + min-width:300px; + background-color:var(--toolbar-bg-color); + box-sizing:border-box; + flex-wrap:wrap; + justify-content:flex-start; } -#findbar *{ - float:var(--inline-start); - position:relative; - } - -#findbar > div{ +#findbar > *{ height:var(--toolbar-height); + padding:var(--findbar-padding); } -#findbar :is(button,input){ - font:message-box; - outline:none; +#findbar #findInputContainer{ + margin-inline-start:2px; } -[type="checkbox"]:is(#findbar input){ - pointer-events:none; +:is(#findbar #findInputContainer) #findPreviousButton::before{ + -webkit-mask-image:var(--findbarButton-previous-icon); + mask-image:var(--findbarButton-previous-icon); } -[type="checkbox"]:is(#findbar input):checked + .toolbarLabel{ - background-color:var(--toggled-btn-bg-color) !important; - color:var(--toggled-btn-color); - } - -#findbar label{ - -webkit-user-select:none; - -moz-user-select:none; - user-select:none; - } - -#findbar :is(label:hover,input:focus-visible + label){ - background-color:var(--button-hover-color); - color:var(--toggled-btn-color); - } - -#findbar #findbarInputContainer{ - margin-inline-end:4px; - } +:is(#findbar #findInputContainer) #findNextButton::before{ + -webkit-mask-image:var(--findbarButton-next-icon); + mask-image:var(--findbarButton-next-icon); + } -:is(#findbar #findbarInputContainer) #findInput{ +:is(#findbar #findInputContainer) #findInput{ width:200px; + padding:5px var(--input-horizontal-padding); } -:is(:is(#findbar #findbarInputContainer) #findInput)::-moz-placeholder{ +:is(:is(#findbar #findInputContainer) #findInput)::-moz-placeholder{ font-style:normal; } -:is(:is(#findbar #findbarInputContainer) #findInput)::placeholder{ +:is(:is(#findbar #findInputContainer) #findInput)::placeholder{ font-style:normal; } -.loadingInput:has( > [data-status="pending"]:is(:is(#findbar #findbarInputContainer) #findInput))::after{ - display:block; +.loadingInput:has( > [data-status="pending"]:is(:is(#findbar #findInputContainer) #findInput))::after{ + display:inline; visibility:visible; + inset-inline-end:calc(var(--input-horizontal-padding) + 1px); } -[data-status="notFound"]:is(:is(#findbar #findbarInputContainer) #findInput){ +[data-status="notFound"]:is(:is(#findbar #findInputContainer) #findInput){ background-color:rgb(255 102 102); } -:is(#findbar #findbarInputContainer) #findPrevious::before{ - -webkit-mask-image:var(--findbarButton-previous-icon); - mask-image:var(--findbarButton-previous-icon); - } +#findbar #findbarMessageContainer{ + display:none; + gap:4px; + } -:is(#findbar #findbarInputContainer) #findNext::before{ - -webkit-mask-image:var(--findbarButton-next-icon); - mask-image:var(--findbarButton-next-icon); +:is(#findbar #findbarMessageContainer):has( > :is(#findResultsCount,#findMsg):not(:empty)){ + display:inline flex; } :is(#findbar #findbarMessageContainer) #findResultsCount{ background-color:rgb(217 217 217); color:rgb(82 82 82); - margin:5px; - padding:4px 5px; - text-align:center; + padding-block:4px; } +:is(:is(#findbar #findbarMessageContainer) #findResultsCount):empty{ + display:none; + } + [data-status="notFound"]:is(:is(#findbar #findbarMessageContainer) #findMsg){ font-weight:bold; } -:is(#findbar #findbarMessageContainer) *:empty{ - display:none; - } +:is(:is(#findbar #findbarMessageContainer) #findMsg):empty{ + display:none; + } + +#findbar.wrapContainers{ + flex-direction:column; + align-items:flex-start; + height:-moz-max-content; + height:max-content; + } -#findbar.wrapContainers > div{ - clear:both; +#findbar.wrapContainers .toolbarLabel{ + margin:0 4px; } -#findbar.wrapContainers > #findbarMessageContainer{ - height:auto; +#findbar.wrapContainers #findbarMessageContainer{ + flex-wrap:wrap; + flex-flow:column nowrap; + align-items:flex-start; + height:-moz-max-content; + height:max-content; } -:is(#findbar.wrapContainers > #findbarMessageContainer) > *{ - clear:both; +:is(#findbar.wrapContainers #findbarMessageContainer) #findResultsCount{ + height:calc(var(--toolbar-height) - 2 * var(--findbar-padding)); } -@media all and (max-width: 690px){ - #findbar{ - inset-inline-start:34px; - } - } +:is(#findbar.wrapContainers #findbarMessageContainer) #findMsg{ + min-height:var(--toolbar-height); + } @page{ margin:0; @@ -4736,12 +4652,15 @@ dialog :link{ body{ background:rgb(0 0 0 / 0) none; } + body[data-pdfjsprinting] #outerContainer{ display:none; } + body[data-pdfjsprinting] #printContainer{ display:block; } + #printContainer{ height:100%; } @@ -4782,16 +4701,284 @@ dialog :link{ display:none !important; } -@media all and (max-width: 900px){ - #toolbarViewerMiddle{ - display:table; - margin:auto; - left:auto; - position:inherit; - transform:none; +.toolbarLabel{ + width:-moz-max-content; + width:max-content; + min-width:16px; + height:100%; + padding-inline:4px; + margin:2px; + border-radius:2px; + color:var(--main-color); + font-size:12px; + line-height:14px; + text-align:left; + -webkit-user-select:none; + -moz-user-select:none; + user-select:none; + cursor:default; + box-sizing:border-box; + + display:inline flex; + flex-direction:column; + align-items:center; + justify-content:center; +} + +.toolbarLabel > label{ + width:100%; + } + +.toolbarHorizontalGroup{ + height:100%; + display:inline flex; + flex-direction:row; + align-items:center; + justify-content:space-between; + gap:1px; + box-sizing:border-box; +} + +.dropdownToolbarButton{ + display:inline flex; + flex-direction:row; + align-items:center; + justify-content:center; + position:relative; + + width:-moz-fit-content; + + width:fit-content; + min-width:140px; + padding:0; + background-color:var(--dropdown-btn-bg-color); + border:var(--dropdown-btn-border); + border-radius:2px; + color:var(--main-color); + font-size:12px; + line-height:14px; + -webkit-user-select:none; + -moz-user-select:none; + user-select:none; + cursor:default; + box-sizing:border-box; + outline:none; +} + +.dropdownToolbarButton:hover{ + background-color:var(--button-hover-color); } + +.dropdownToolbarButton > select{ + -webkit-appearance:none; + -moz-appearance:none; + appearance:none; + width:inherit; + min-width:inherit; + height:28px; + font:message-box; + font-size:12px; + color:var(--main-color); + margin:0; + padding-block:1px 2px; + padding-inline:6px 38px; + border:none; + outline:none; + background-color:var(--dropdown-btn-bg-color); + } + +:is(.dropdownToolbarButton > select) > option{ + background:var(--doorhanger-bg-color); + color:var(--main-color); + } + +:is(.dropdownToolbarButton > select):is(:hover,:focus-visible){ + background-color:var(--button-hover-color); + color:var(--toggled-btn-color); + } + +.dropdownToolbarButton::after{ + position:absolute; + display:inline; + width:var(--icon-size); + height:var(--icon-size); + + content:""; + background-color:var(--toolbar-icon-bg-color); + -webkit-mask-size:cover; + mask-size:cover; + + inset-inline-end:4px; + pointer-events:none; + -webkit-mask-image:var(--toolbarButton-menuArrow-icon); + mask-image:var(--toolbarButton-menuArrow-icon); + } + +.dropdownToolbarButton:is(:hover,:focus-visible,:active)::after{ + background-color:var(--toolbar-icon-hover-bg-color); + } + +#toolbarContainer{ + --menuitem-height:calc(var(--toolbar-height) - 6px); + + width:100%; + height:var(--toolbar-height); + padding:var(--toolbar-vertical-padding) var(--toolbar-horizontal-padding); + position:relative; + box-sizing:border-box; + font:message-box; + background-color:var(--toolbar-bg-color); + box-shadow:var(--toolbar-box-shadow); + border-bottom:var(--toolbar-border-bottom); } +#toolbarContainer #toolbarViewer{ + width:100%; + height:100%; + justify-content:space-between; + } + +:is(#toolbarContainer #toolbarViewer) > *{ + flex:none; + } + +:is(#toolbarContainer #toolbarViewer) input{ + font:message-box; + } + +:is(#toolbarContainer #toolbarViewer) .toolbarButtonSpacer{ + width:30px; + display:block; + height:1px; + } + +:is(#toolbarContainer #toolbarViewer) #toolbarViewerLeft #numPages.toolbarLabel{ + padding-inline-start:3px; + flex:none; + } + +#toolbarContainer #loadingBar{ + --progressBar-percent:0%; + --progressBar-end-offset:0; + + position:absolute; + top:var(--toolbar-height); + inset-inline:0 var(--progressBar-end-offset); + height:4px; + background-color:var(--progressBar-bg-color); + border-bottom:1px solid var(--toolbar-border-color); + transition-property:inset-inline-start; + transition-duration:var(--sidebar-transition-duration); + transition-timing-function:var(--sidebar-transition-timing-function); + } + +:is(#toolbarContainer #loadingBar) .progress{ + position:absolute; + top:0; + inset-inline-start:0; + width:100%; + transform:scaleX(var(--progressBar-percent)); + transform-origin:calc(50% - 50% * var(--dir-factor)) 0; + height:100%; + background-color:var(--progressBar-color); + overflow:hidden; + transition:transform 200ms; + } + +.indeterminate:is(#toolbarContainer #loadingBar) .progress{ + transform:none; + background-color:var(--progressBar-bg-color); + transition:none; + } + +:is(.indeterminate:is(#toolbarContainer #loadingBar) .progress) .glimmer{ + position:absolute; + top:0; + inset-inline-start:0; + height:100%; + width:calc(100% + 150px); + background:repeating-linear-gradient( + 135deg, + var(--progressBar-blend-color) 0, + var(--progressBar-bg-color) 5px, + var(--progressBar-bg-color) 45px, + var(--progressBar-color) 55px, + var(--progressBar-color) 95px, + var(--progressBar-blend-color) 100px + ); + animation:progressIndeterminate 1s linear infinite; + } + +#secondaryToolbar #firstPage::before{ + -webkit-mask-image:var(--secondaryToolbarButton-firstPage-icon); + mask-image:var(--secondaryToolbarButton-firstPage-icon); + } + +#secondaryToolbar #lastPage::before{ + -webkit-mask-image:var(--secondaryToolbarButton-lastPage-icon); + mask-image:var(--secondaryToolbarButton-lastPage-icon); + } + +#secondaryToolbar #pageRotateCcw::before{ + -webkit-mask-image:var(--secondaryToolbarButton-rotateCcw-icon); + mask-image:var(--secondaryToolbarButton-rotateCcw-icon); + } + +#secondaryToolbar #pageRotateCw::before{ + -webkit-mask-image:var(--secondaryToolbarButton-rotateCw-icon); + mask-image:var(--secondaryToolbarButton-rotateCw-icon); + } + +#secondaryToolbar #cursorSelectTool::before{ + -webkit-mask-image:var(--secondaryToolbarButton-selectTool-icon); + mask-image:var(--secondaryToolbarButton-selectTool-icon); + } + +#secondaryToolbar #cursorHandTool::before{ + -webkit-mask-image:var(--secondaryToolbarButton-handTool-icon); + mask-image:var(--secondaryToolbarButton-handTool-icon); + } + +#secondaryToolbar #scrollPage::before{ + -webkit-mask-image:var(--secondaryToolbarButton-scrollPage-icon); + mask-image:var(--secondaryToolbarButton-scrollPage-icon); + } + +#secondaryToolbar #scrollVertical::before{ + -webkit-mask-image:var(--secondaryToolbarButton-scrollVertical-icon); + mask-image:var(--secondaryToolbarButton-scrollVertical-icon); + } + +#secondaryToolbar #scrollHorizontal::before{ + -webkit-mask-image:var(--secondaryToolbarButton-scrollHorizontal-icon); + mask-image:var(--secondaryToolbarButton-scrollHorizontal-icon); + } + +#secondaryToolbar #scrollWrapped::before{ + -webkit-mask-image:var(--secondaryToolbarButton-scrollWrapped-icon); + mask-image:var(--secondaryToolbarButton-scrollWrapped-icon); + } + +#secondaryToolbar #spreadNone::before{ + -webkit-mask-image:var(--secondaryToolbarButton-spreadNone-icon); + mask-image:var(--secondaryToolbarButton-spreadNone-icon); + } + +#secondaryToolbar #spreadOdd::before{ + -webkit-mask-image:var(--secondaryToolbarButton-spreadOdd-icon); + mask-image:var(--secondaryToolbarButton-spreadOdd-icon); + } + +#secondaryToolbar #spreadEven::before{ + -webkit-mask-image:var(--secondaryToolbarButton-spreadEven-icon); + mask-image:var(--secondaryToolbarButton-spreadEven-icon); + } + +#secondaryToolbar #documentProperties::before{ + -webkit-mask-image:var(--secondaryToolbarButton-documentProperties-icon); + mask-image:var(--secondaryToolbarButton-documentProperties-icon); + } + @media all and (max-width: 840px){ #sidebarContainer{ background-color:var(--sidebar-narrow-bg-color); @@ -4802,14 +4989,11 @@ dialog :link{ } @media all and (max-width: 750px){ - :root{ - --editor-toolbar-base-offset:40px; - } #outerContainer .hiddenMediumView{ display:none !important; } - #outerContainer .visibleMediumView{ - display:inherit !important; + #outerContainer .visibleMediumView:not(.hidden, [hidden]){ + display:inline-block !important; } } @@ -4818,7 +5002,8 @@ dialog :link{ .hiddenSmallView *{ display:none !important; } - .toolbarButtonSpacer{ + + #toolbarContainer #toolbarViewer .toolbarButtonSpacer{ width:0; } } diff --git a/viewer/viewer.html b/viewer/viewer.html index f4503e03..d3e10147 100644 --- a/viewer/viewer.html +++ b/viewer/viewer.html @@ -43,33 +43,33 @@ - +
-
+
-
- - - -
-
+
-
@@ -89,266 +89,89 @@
- - - - - - - - - - - -
-
-
-
- -
- + +
+
+
-
- - - - -
-
-
- - - - +
+ + + +
- -
- - - - - -
- -
-
-
-
- +
- @@ -365,6 +188,204 @@
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ +
+ + + +
+ +
+ +
+ + +
+
diff --git a/viewer/viewer.mjs b/viewer/viewer.mjs index 0e354ad4..811b16c2 100644 --- a/viewer/viewer.mjs +++ b/viewer/viewer.mjs @@ -51,7 +51,7 @@ __webpack_require__.d(__webpack_exports__, { PDFViewerApplicationOptions: () => (/* reexport */ AppOptions) }); -;// CONCATENATED MODULE: ./web/ui_utils.js +;// ./web/ui_utils.js const DEFAULT_SCALE_VALUE = "auto"; const DEFAULT_SCALE = 1.0; const DEFAULT_SCALE_DELTA = 1.1; @@ -105,16 +105,6 @@ const CursorTool = { ZOOM: 2 }; const AutoPrintRegExp = /\bprint\s*\(/; -class OutputScale { - constructor() { - const pixelRatio = window.devicePixelRatio || 1; - this.sx = pixelRatio; - this.sy = pixelRatio; - } - get scaled() { - return this.sx !== 1 || this.sy !== 1; - } -} function scrollIntoView(element, spot, scrollMatches = false) { let parent = element.offsetParent; if (!parent) { @@ -532,8 +522,13 @@ function toggleExpandedBtn(button, toggle, view = null) { button.setAttribute("aria-expanded", toggle); view?.classList.toggle("hidden", !toggle); } +const calcRound = function () { + const e = document.createElement("div"); + e.style.width = "round(down, calc(1.6666666666666665 * 792px), 1px)"; + return e.style.width === "calc(1320px)" ? Math.fround : x => x; +}(); -;// CONCATENATED MODULE: ./web/app_options.js +;// ./web/app_options.js { var compatParams = new Map(); const userAgent = navigator.userAgent || ""; @@ -931,7 +926,7 @@ class AppOptions { } } -;// CONCATENATED MODULE: ./web/pdf_link_service.js +;// ./web/pdf_link_service.js const DEFAULT_LINK_REL = "noopener noreferrer nofollow"; const LinkTarget = { @@ -1277,7 +1272,7 @@ class SimpleLinkService extends PDFLinkService { setDocument(pdfDocument, baseUrl = null) {} } -;// CONCATENATED MODULE: ./web/pdfjs.js +;// ./web/pdfjs.js const { AbortException, AnnotationEditorLayer, @@ -1307,6 +1302,7 @@ const { noContextMenu, normalizeUnicode, OPS, + OutputScale, PasswordResponses, PDFDataRangeTransport, PDFDateString, @@ -1324,7 +1320,7 @@ const { XfaLayer } = globalThis.pdfjsLib; -;// CONCATENATED MODULE: ./web/event_utils.js +;// ./web/event_utils.js const WaitOnType = { EVENT: "event", TIMEOUT: "timeout" @@ -1445,7 +1441,7 @@ class FirefoxEventBus extends EventBus { } } -;// CONCATENATED MODULE: ./web/external_services.js +;// ./web/external_services.js class BaseExternalServices { updateFindControlState(data) {} updateFindMatchesCount(data) {} @@ -1463,7 +1459,7 @@ class BaseExternalServices { dispatchGlobalEvent(_event) {} } -;// CONCATENATED MODULE: ./web/preferences.js +;// ./web/preferences.js class BasePreferences { #defaults = Object.freeze({ @@ -1546,7 +1542,7 @@ class BasePreferences { } } -;// CONCATENATED MODULE: ./node_modules/@fluent/bundle/esm/types.js +;// ./node_modules/@fluent/bundle/esm/types.js class FluentType { constructor(value) { this.value = value; @@ -1593,7 +1589,7 @@ class FluentDateTime extends FluentType { } } } -;// CONCATENATED MODULE: ./node_modules/@fluent/bundle/esm/resolver.js +;// ./node_modules/@fluent/bundle/esm/resolver.js const MAX_PLACEABLES = 100; const FSI = "\u2068"; @@ -1813,7 +1809,7 @@ function resolvePattern(scope, value) { } return resolveComplexPattern(scope, value); } -;// CONCATENATED MODULE: ./node_modules/@fluent/bundle/esm/scope.js +;// ./node_modules/@fluent/bundle/esm/scope.js class Scope { constructor(bundle, errors, args) { this.dirty = new WeakSet(); @@ -1842,7 +1838,7 @@ class Scope { return cache[id]; } } -;// CONCATENATED MODULE: ./node_modules/@fluent/bundle/esm/builtins.js +;// ./node_modules/@fluent/bundle/esm/builtins.js function values(opts, allowed) { const unwrapped = Object.create(null); @@ -1891,7 +1887,7 @@ function DATETIME(args, opts) { } throw new TypeError("Invalid argument to DATETIME"); } -;// CONCATENATED MODULE: ./node_modules/@fluent/bundle/esm/memoizer.js +;// ./node_modules/@fluent/bundle/esm/memoizer.js const cache = new Map(); function getMemoizerForLocale(locales) { const stringLocale = Array.isArray(locales) ? locales.join(" ") : locales; @@ -1902,7 +1898,7 @@ function getMemoizerForLocale(locales) { } return memoizer; } -;// CONCATENATED MODULE: ./node_modules/@fluent/bundle/esm/bundle.js +;// ./node_modules/@fluent/bundle/esm/bundle.js @@ -1971,7 +1967,7 @@ class FluentBundle { } } } -;// CONCATENATED MODULE: ./node_modules/@fluent/bundle/esm/resource.js +;// ./node_modules/@fluent/bundle/esm/resource.js const RE_MESSAGE_START = /^(-?[a-zA-Z][\w-]*) *= */gm; const RE_ATTRIBUTE_START = /\.([a-zA-Z][\w-]*) *= */y; const RE_VARIANT_START = /\*?\[/y; @@ -2350,11 +2346,11 @@ class Indent { this.length = length; } } -;// CONCATENATED MODULE: ./node_modules/@fluent/bundle/esm/index.js +;// ./node_modules/@fluent/bundle/esm/index.js -;// CONCATENATED MODULE: ./node_modules/@fluent/dom/esm/overlay.js +;// ./node_modules/@fluent/dom/esm/overlay.js const reOverlay = /<|&#?\w+;/; const TEXT_LEVEL_ELEMENTS = { "http://www.w3.org/1999/xhtml": ["em", "strong", "small", "s", "cite", "q", "dfn", "abbr", "data", "time", "code", "var", "samp", "kbd", "sub", "sup", "i", "b", "u", "mark", "bdi", "bdo", "span", "br", "wbr"] @@ -2505,7 +2501,7 @@ function shallowPopulateUsing(fromElement, toElement) { overlayAttributes(fromElement, toElement); return toElement; } -;// CONCATENATED MODULE: ./node_modules/cached-iterable/src/cached_iterable.mjs +;// ./node_modules/cached-iterable/src/cached_iterable.mjs class CachedIterable extends Array { static from(iterable) { if (iterable instanceof this) { @@ -2514,7 +2510,7 @@ class CachedIterable extends Array { return new this(iterable); } } -;// CONCATENATED MODULE: ./node_modules/cached-iterable/src/cached_sync_iterable.mjs +;// ./node_modules/cached-iterable/src/cached_sync_iterable.mjs class CachedSyncIterable extends CachedIterable { constructor(iterable) { @@ -2549,7 +2545,7 @@ class CachedSyncIterable extends CachedIterable { return this[this.length - 1]; } } -;// CONCATENATED MODULE: ./node_modules/cached-iterable/src/cached_async_iterable.mjs +;// ./node_modules/cached-iterable/src/cached_async_iterable.mjs class CachedAsyncIterable extends CachedIterable { constructor(iterable) { @@ -2586,10 +2582,10 @@ class CachedAsyncIterable extends CachedIterable { return this[this.length - 1]; } } -;// CONCATENATED MODULE: ./node_modules/cached-iterable/src/index.mjs +;// ./node_modules/cached-iterable/src/index.mjs -;// CONCATENATED MODULE: ./node_modules/@fluent/dom/esm/localization.js +;// ./node_modules/@fluent/dom/esm/localization.js class Localization { constructor(resourceIds = [], generateBundles) { @@ -2704,7 +2700,7 @@ function keysFromBundle(method, bundle, keys, translations) { }); return missingIds; } -;// CONCATENATED MODULE: ./node_modules/@fluent/dom/esm/dom_localization.js +;// ./node_modules/@fluent/dom/esm/dom_localization.js const L10NID_ATTR_NAME = "data-l10n-id"; @@ -2867,10 +2863,10 @@ class DOMLocalization extends Localization { }; } } -;// CONCATENATED MODULE: ./node_modules/@fluent/dom/esm/index.js +;// ./node_modules/@fluent/dom/esm/index.js -;// CONCATENATED MODULE: ./web/l10n.js +;// ./web/l10n.js class L10n { #dir; #elements = new Set(); @@ -2961,7 +2957,7 @@ class L10n { } const GenericL10n = null; -;// CONCATENATED MODULE: ./web/genericl10n.js +;// ./web/genericl10n.js @@ -3039,7 +3035,7 @@ class genericl10n_GenericL10n extends L10n { } } -;// CONCATENATED MODULE: ./web/generic_scripting.js +;// ./web/generic_scripting.js async function docProperties(pdfDocument) { const url = "", @@ -3070,7 +3066,7 @@ async function docProperties(pdfDocument) { class GenericScripting { constructor(sandboxBundleSrc) { this._ready = new Promise((resolve, reject) => { - const sandbox = import( /*webpackIgnore: true*/sandboxBundleSrc); + const sandbox = import(/*webpackIgnore: true*/sandboxBundleSrc); sandbox.then(pdfjsSandbox => { resolve(pdfjsSandbox.QuickJSSandbox()); }).catch(reject); @@ -3090,7 +3086,7 @@ class GenericScripting { } } -;// CONCATENATED MODULE: ./web/genericcom.js +;// ./web/genericcom.js @@ -3205,7 +3201,7 @@ class FakeMLManager { } } -;// CONCATENATED MODULE: ./web/new_alt_text_manager.js +;// ./web/new_alt_text_manager.js class NewAltTextManager { #boundCancel = this.#cancel.bind(this); @@ -3220,6 +3216,7 @@ class NewAltTextManager { #eventBus; #firstTime = false; #guessedAltText; + #hasAI = null; #isEditing = null; #imagePreview; #imageData; @@ -3291,16 +3288,16 @@ class NewAltTextManager { textarea.addEventListener("focus", () => { this.#wasAILoading = this.#isAILoading; this.#toggleLoading(false); + this.#toggleTitleAndDisclaimer(); }); textarea.addEventListener("blur", () => { - if (textarea.value) { - return; + if (!textarea.value) { + this.#toggleLoading(this.#wasAILoading); } - this.#toggleLoading(this.#wasAILoading); + this.#toggleTitleAndDisclaimer(); }); textarea.addEventListener("input", () => { - this.#toggleTitle(); - this.#toggleDisclaimer(); + this.#toggleTitleAndDisclaimer(); }); eventBus._on("enableguessalttext", ({ value @@ -3330,14 +3327,6 @@ class NewAltTextManager { } this.#dialog.classList.toggle("error", value); } - #toggleTitle() { - const isEditing = this.#isAILoading || !!this.#textarea.value; - if (this.#isEditing === isEditing) { - return; - } - this.#isEditing = isEditing; - this.#title.setAttribute("data-l10n-id", isEditing ? "pdfjs-editor-new-alt-text-dialog-edit-label" : "pdfjs-editor-new-alt-text-dialog-add-label"); - } async #toggleGuessAltText(value, isInitial = false) { if (!this.#uiManager) { return; @@ -3355,8 +3344,7 @@ class NewAltTextManager { } else { this.#toggleLoading(false); this.#isAILoading = false; - this.#toggleTitle(); - this.#toggleDisclaimer(); + this.#toggleTitleAndDisclaimer(); } } #toggleNotNow() { @@ -3364,15 +3352,22 @@ class NewAltTextManager { this.#cancelButton.classList.toggle("hidden", this.#firstTime); } #toggleAI(value) { + if (!this.#uiManager || this.#hasAI === value) { + return; + } + this.#hasAI = value; this.#dialog.classList.toggle("noAi", !value); - this.#toggleTitle(); + this.#toggleTitleAndDisclaimer(); } - #toggleDisclaimer(value = null) { - if (!this.#uiManager) { + #toggleTitleAndDisclaimer() { + const visible = this.#isAILoading || this.#guessedAltText && this.#guessedAltText === this.#textarea.value; + this.#disclaimer.hidden = !visible; + const isEditing = this.#isAILoading || !!this.#textarea.value; + if (this.#isEditing === isEditing) { return; } - const hidden = value === null ? !this.#guessedAltText || this.#guessedAltText !== this.#textarea.value : !value; - this.#disclaimer.classList.toggle("hidden", hidden); + this.#isEditing = isEditing; + this.#title.setAttribute("data-l10n-id", isEditing ? "pdfjs-editor-new-alt-text-dialog-edit-label" : "pdfjs-editor-new-alt-text-dialog-add-label"); } async #mlGuessAltText(isInitial) { if (this.#isAILoading) { @@ -3387,13 +3382,10 @@ class NewAltTextManager { this.#guessedAltText = this.#currentEditor.guessedAltText; if (this.#previousAltText === null && this.#guessedAltText) { this.#addAltText(this.#guessedAltText); - this.#toggleDisclaimer(); - this.#toggleTitle(); return; } this.#toggleLoading(true); - this.#toggleTitle(); - this.#toggleDisclaimer(true); + this.#toggleTitleAndDisclaimer(); let hasError = false; try { const altText = await this.#currentEditor.mlGuessAltText(this.#imageData, false); @@ -3409,10 +3401,9 @@ class NewAltTextManager { hasError = true; } this.#toggleLoading(false); + this.#toggleTitleAndDisclaimer(); if (hasError && this.#uiManager) { this.#toggleError(true); - this.#toggleTitle(); - this.#toggleDisclaimer(); } } #addAltText(altText) { @@ -3420,6 +3411,7 @@ class NewAltTextManager { return; } this.#textarea.value = altText; + this.#toggleTitleAndDisclaimer(); } #setProgress() { this.#downloadModel.classList.toggle("hidden", false); @@ -3468,6 +3460,7 @@ class NewAltTextManager { mlManager } = uiManager; let hasAI = !!mlManager; + this.#toggleTitleAndDisclaimer(); if (mlManager && !mlManager.isReady("altText")) { hasAI = false; if (mlManager.hasProgress) { @@ -3487,21 +3480,31 @@ class NewAltTextManager { } = editor.altTextData); this.#textarea.value = this.#previousAltText ?? ""; const AI_MAX_IMAGE_DIMENSION = 224; - let canvas; + const MAX_PREVIEW_DIMENSION = 180; + let canvas, width, height; if (mlManager) { ({ canvas, + width, + height, imageData: this.#imageData - } = editor.copyCanvas(AI_MAX_IMAGE_DIMENSION, true)); + } = editor.copyCanvas(AI_MAX_IMAGE_DIMENSION, MAX_PREVIEW_DIMENSION, true)); if (hasAI) { this.#toggleGuessAltText(await isAltTextEnabledPromise, true); } } else { ({ - canvas - } = editor.copyCanvas(AI_MAX_IMAGE_DIMENSION, false)); + canvas, + width, + height + } = editor.copyCanvas(AI_MAX_IMAGE_DIMENSION, MAX_PREVIEW_DIMENSION, false)); } canvas.setAttribute("role", "presentation"); + const { + style + } = canvas; + style.width = `${width}px`; + style.height = `${height}px`; this.#imagePreview.append(canvas); this.#toggleNotNow(); this.#toggleAI(hasAI); @@ -3743,7 +3746,7 @@ class ImageAltTextSettings { } } -;// CONCATENATED MODULE: ./web/alt_text_manager.js +;// ./web/alt_text_manager.js class AltTextManager { #boundUpdateUIState = this.#updateUIState.bind(this); @@ -3990,7 +3993,7 @@ class AltTextManager { } } -;// CONCATENATED MODULE: ./web/annotation_editor_params.js +;// ./web/annotation_editor_params.js class AnnotationEditorParams { constructor(options, eventBus) { @@ -4082,16 +4085,31 @@ class AnnotationEditorParams { } } -;// CONCATENATED MODULE: ./web/caret_browsing.js +;// ./web/caret_browsing.js const PRECISION = 1e-1; class CaretBrowsingMode { #mainContainer; - #toolBarHeight; + #toolBarHeight = 0; #viewerContainer; - constructor(mainContainer, viewerContainer, toolbarContainer) { + constructor(abortSignal, mainContainer, viewerContainer, toolbarContainer) { this.#mainContainer = mainContainer; this.#viewerContainer = viewerContainer; - this.#toolBarHeight = toolbarContainer?.getBoundingClientRect().height ?? 0; + if (!toolbarContainer) { + return; + } + this.#toolBarHeight = toolbarContainer.getBoundingClientRect().height; + const toolbarObserver = new ResizeObserver(entries => { + for (const entry of entries) { + if (entry.target === toolbarContainer) { + this.#toolBarHeight = Math.floor(entry.borderBoxSize[0].blockSize); + break; + } + } + }); + toolbarObserver.observe(toolbarContainer); + abortSignal.addEventListener("abort", () => toolbarObserver.disconnect(), { + once: true + }); } #isOnSameLine(rect1, rect2) { const top1 = rect1.y; @@ -4283,7 +4301,7 @@ class CaretBrowsingMode { } } -;// CONCATENATED MODULE: ./web/download_manager.js +;// ./web/download_manager.js function download(blobUrl, filename) { const a = document.createElement("a"); @@ -4352,7 +4370,7 @@ class DownloadManager { } } -;// CONCATENATED MODULE: ./web/overlay_manager.js +;// ./web/overlay_manager.js class OverlayManager { #overlays = new WeakMap(); #active = null; @@ -4400,7 +4418,7 @@ class OverlayManager { } } -;// CONCATENATED MODULE: ./web/password_prompt.js +;// ./web/password_prompt.js class PasswordPrompt { #activeCapability = null; @@ -4472,7 +4490,7 @@ class PasswordPrompt { } } -;// CONCATENATED MODULE: ./web/base_tree_viewer.js +;// ./web/base_tree_viewer.js const TREEITEM_OFFSET_TOP = -100; const TREEITEM_SELECTED_CLASS = "selected"; @@ -4568,7 +4586,7 @@ class BaseTreeViewer { } } -;// CONCATENATED MODULE: ./web/pdf_attachment_viewer.js +;// ./web/pdf_attachment_viewer.js class PDFAttachmentViewer extends BaseTreeViewer { @@ -4665,7 +4683,7 @@ class PDFAttachmentViewer extends BaseTreeViewer { } } -;// CONCATENATED MODULE: ./web/grab_to_pan.js +;// ./web/grab_to_pan.js const CSS_CLASS_GRAB = "grab-to-pan-grab"; class GrabToPan { constructor({ @@ -4757,7 +4775,7 @@ class GrabToPan { } } -;// CONCATENATED MODULE: ./web/pdf_cursor_tools.js +;// ./web/pdf_cursor_tools.js @@ -4783,7 +4801,17 @@ class PDFCursorTools { if (this.#prevActive !== null) { return; } + this.#switchTool(tool); + } + #switchTool(tool, disabled = false) { if (tool === this.#active) { + if (this.#prevActive !== null) { + this.eventBus.dispatch("cursortoolchanged", { + source: this, + tool, + disabled + }); + } return; } const disableActiveTool = () => { @@ -4812,7 +4840,8 @@ class PDFCursorTools { this.#active = tool; this.eventBus.dispatch("cursortoolchanged", { source: this, - tool + tool, + disabled }); } #addEventListeners() { @@ -4828,15 +4857,13 @@ class PDFCursorTools { let annotationEditorMode = AnnotationEditorType.NONE, presentationModeState = PresentationModeState.NORMAL; const disableActive = () => { - const prevActive = this.#active; - this.switchTool(CursorTool.SELECT); - this.#prevActive ??= prevActive; + this.#prevActive ??= this.#active; + this.#switchTool(CursorTool.SELECT, true); }; const enableActive = () => { - const prevActive = this.#prevActive; - if (prevActive !== null && annotationEditorMode === AnnotationEditorType.NONE && presentationModeState === PresentationModeState.NORMAL) { + if (this.#prevActive !== null && annotationEditorMode === AnnotationEditorType.NONE && presentationModeState === PresentationModeState.NORMAL) { + this.#switchTool(this.#prevActive); this.#prevActive = null; - this.switchTool(prevActive); } }; this.eventBus._on("annotationeditormodechanged", ({ @@ -4867,7 +4894,7 @@ class PDFCursorTools { } } -;// CONCATENATED MODULE: ./web/pdf_document_properties.js +;// ./web/pdf_document_properties.js const NON_METRIC_LOCALES = ["en-us", "en-lr", "my"]; @@ -5046,7 +5073,7 @@ class PDFDocumentProperties { async #parseDate(inputDate) { const dateObj = PDFDateString.toDateObject(inputDate); return dateObj ? this.l10n.get("pdfjs-document-properties-date-time-string", { - dateObj + dateObj: dateObj.valueOf() }) : undefined; } #parseLinearization(isLinearized) { @@ -5054,7 +5081,7 @@ class PDFDocumentProperties { } } -;// CONCATENATED MODULE: ./web/pdf_find_utils.js +;// ./web/pdf_find_utils.js const CharacterType = { SPACE: 0, ALPHA_LETTER: 1, @@ -5128,7 +5155,7 @@ function getNormalizeWithNFKC() { return NormalizeWithNFKC; } -;// CONCATENATED MODULE: ./web/pdf_find_controller.js +;// ./web/pdf_find_controller.js const FindState = { @@ -5192,7 +5219,8 @@ function normalize(text) { const toNormalizeWithNFKC = getNormalizeWithNFKC(); const CJK = "(?:\\p{Ideographic}|[\u3040-\u30FF])"; const HKDiacritics = "(?:\u3099|\u309A)"; - const regexp = `([${replace}])|([${toNormalizeWithNFKC}])|(${HKDiacritics}\\n)|(\\p{M}+(?:-\\n)?)|(\\S-\\n)|(${CJK}\\n)|(\\n)`; + const CompoundWord = "\\p{Ll}-\\n\\p{Lu}"; + const regexp = `([${replace}])|([${toNormalizeWithNFKC}])|(${HKDiacritics}\\n)|(\\p{M}+(?:-\\n)?)|(${CompoundWord})|(\\S-\\n)|(${CJK}\\n)|(\\n)`; if (syllablePositions.length === 0) { normalizationRegex = noSyllablesRegExp = new RegExp(regexp + "|(\\u0000)", "gum"); } else { @@ -5211,7 +5239,7 @@ function normalize(text) { let shiftOrigin = 0; let eol = 0; let hasDiacritics = false; - normalized = normalized.replace(normalizationRegex, (match, p1, p2, p3, p4, p5, p6, p7, p8, i) => { + normalized = normalized.replace(normalizationRegex, (match, p1, p2, p3, p4, p5, p6, p7, p8, p9, i) => { i -= shiftOrigin; if (p1) { const replacement = CHARACTERS_TO_NORMALIZE[p1]; @@ -5274,21 +5302,28 @@ function normalize(text) { return p4; } if (p5) { - const len = p5.length - 2; - positions.push([i - shift + len, 1 + shift]); + positions.push([i - shift + 3, 1 + shift]); shift += 1; shiftOrigin += 1; eol += 1; - return p5.slice(0, -2); + return p5.replace("\n", ""); } if (p6) { - const len = p6.length - 1; - positions.push([i - shift + len, shift]); + const len = p6.length - 2; + positions.push([i - shift + len, 1 + shift]); + shift += 1; shiftOrigin += 1; eol += 1; - return p6.slice(0, -1); + return p6.slice(0, -2); } if (p7) { + const len = p7.length - 1; + positions.push([i - shift + len, shift]); + shiftOrigin += 1; + eol += 1; + return p7.slice(0, -1); + } + if (p8) { positions.push([i - shift + 1, shift - 1]); shift -= 1; shiftOrigin += 1; @@ -5304,7 +5339,7 @@ function normalize(text) { shift -= newCharLen; shiftOrigin += newCharLen; } - return p8; + return p9; }); positions.push([normalized.length, shift]); return [normalized, positions, hasDiacritics]; @@ -5861,13 +5896,14 @@ class PDFFindController { } } -;// CONCATENATED MODULE: ./web/pdf_find_bar.js +;// ./web/pdf_find_bar.js const MATCHES_COUNT_LIMIT = 1000; class PDFFindBar { + #mainContainer; #resizeObserver = new ResizeObserver(this.#resizeObserverCallback.bind(this)); - constructor(options, eventBus) { + constructor(options, mainContainer, eventBus) { this.opened = false; this.bar = options.bar; this.toggleButton = options.toggleButton; @@ -5881,6 +5917,7 @@ class PDFFindBar { this.findPreviousButton = options.findPreviousButton; this.findNextButton = options.findNextButton; this.eventBus = eventBus; + this.#mainContainer = mainContainer; this.toggleButton.addEventListener("click", () => { this.toggle(); }); @@ -5987,7 +6024,7 @@ class PDFFindBar { } open() { if (!this.opened) { - this.#resizeObserver.observe(this.bar.parentNode); + this.#resizeObserver.observe(this.#mainContainer); this.#resizeObserver.observe(this.bar); this.opened = true; toggleExpandedBtn(this.toggleButton, true, this.bar); @@ -6013,7 +6050,7 @@ class PDFFindBar { this.open(); } } - #resizeObserverCallback(entries) { + #resizeObserverCallback() { const { bar } = this; @@ -6026,7 +6063,7 @@ class PDFFindBar { } } -;// CONCATENATED MODULE: ./web/pdf_history.js +;// ./web/pdf_history.js const HASH_CHANGE_TIMEOUT = 1000; @@ -6493,7 +6530,7 @@ function isDestArraysEqual(firstDest, secondDest) { return true; } -;// CONCATENATED MODULE: ./web/pdf_layer_viewer.js +;// ./web/pdf_layer_viewer.js class PDFLayerViewer extends BaseTreeViewer { constructor(options) { @@ -6509,7 +6546,8 @@ class PDFLayerViewer extends BaseTreeViewer { reset() { super.reset(); this._optionalContentConfig = null; - this._optionalContentHash = null; + this._optionalContentVisibility?.clear(); + this._optionalContentVisibility = null; } _dispatchEvent(layersCount) { this.eventBus.dispatch("layersloaded", { @@ -6522,8 +6560,12 @@ class PDFLayerViewer extends BaseTreeViewer { input }) { const setVisibility = () => { - this._optionalContentConfig.setVisibility(groupId, input.checked); - this._optionalContentHash = this._optionalContentConfig.getHash(); + const visible = input.checked; + this._optionalContentConfig.setVisibility(groupId, visible); + const cached = this._optionalContentVisibility.get(groupId); + if (cached) { + cached.visible = visible; + } this.eventBus.dispatch("optionalcontentconfig", { source: this, promise: Promise.resolve(this._optionalContentConfig) @@ -6577,7 +6619,7 @@ class PDFLayerViewer extends BaseTreeViewer { this._dispatchEvent(0); return; } - this._optionalContentHash = optionalContentConfig.getHash(); + this._optionalContentVisibility = new Map(); const fragment = document.createDocumentFragment(), queue = [{ parent: fragment, @@ -6612,6 +6654,10 @@ class PDFLayerViewer extends BaseTreeViewer { }); input.type = "checkbox"; input.checked = group.visible; + this._optionalContentVisibility.set(groupId, { + input, + visible: input.checked + }); const label = document.createElement("label"); label.textContent = this._normalizeTextContent(group.name); label.append(input); @@ -6635,15 +6681,18 @@ class PDFLayerViewer extends BaseTreeViewer { return; } if (promise) { - if (optionalContentConfig.getHash() === this._optionalContentHash) { - return; + for (const [groupId, cached] of this._optionalContentVisibility) { + const group = optionalContentConfig.getGroup(groupId); + if (group && cached.visible !== group.visible) { + cached.input.checked = cached.visible = !cached.visible; + } } - } else { - this.eventBus.dispatch("optionalcontentconfig", { - source: this, - promise: Promise.resolve(optionalContentConfig) - }); + return; } + this.eventBus.dispatch("optionalcontentconfig", { + source: this, + promise: Promise.resolve(optionalContentConfig) + }); this.render({ optionalContentConfig, pdfDocument: this._pdfDocument @@ -6651,7 +6700,7 @@ class PDFLayerViewer extends BaseTreeViewer { } } -;// CONCATENATED MODULE: ./web/pdf_outline_viewer.js +;// ./web/pdf_outline_viewer.js class PDFOutlineViewer extends BaseTreeViewer { @@ -6913,7 +6962,7 @@ class PDFOutlineViewer extends BaseTreeViewer { } } -;// CONCATENATED MODULE: ./web/pdf_presentation_mode.js +;// ./web/pdf_presentation_mode.js const DELAY_BEFORE_HIDING_CONTROLS = 3000; @@ -7206,7 +7255,7 @@ class PDFPresentationMode { } } -;// CONCATENATED MODULE: ./web/xfa_layer_builder.js +;// ./web/xfa_layer_builder.js class XfaLayerBuilder { constructor({ @@ -7272,7 +7321,7 @@ class XfaLayerBuilder { } } -;// CONCATENATED MODULE: ./web/print_utils.js +;// ./web/print_utils.js @@ -7298,7 +7347,7 @@ function getXfaHtmlForPrinting(printContainer, pdfDocument) { } } -;// CONCATENATED MODULE: ./web/pdf_print_service.js +;// ./web/pdf_print_service.js let activeService = null; @@ -7564,7 +7613,7 @@ class PDFPrintServiceFactory { } } -;// CONCATENATED MODULE: ./web/pdf_rendering_queue.js +;// ./web/pdf_rendering_queue.js const CLEANUP_TIMEOUT = 30000; @@ -7679,7 +7728,7 @@ class PDFRenderingQueue { } } -;// CONCATENATED MODULE: ./web/pdf_scripting_manager.js +;// ./web/pdf_scripting_manager.js class PDFScriptingManager { @@ -8044,7 +8093,7 @@ class PDFScriptingManager { } } -;// CONCATENATED MODULE: ./web/pdf_sidebar.js +;// ./web/pdf_sidebar.js const SIDEBAR_WIDTH_VAR = "--sidebar-width"; const SIDEBAR_MIN_WIDTH = 200; @@ -8105,7 +8154,7 @@ class PDFSidebar { this.#dispatchEvent(); return; } - this.switchView(view, true); + this.switchView(view, false); if (!this.isInitialEventDispatched) { this.#dispatchEvent(); } @@ -8361,7 +8410,7 @@ class PDFSidebar { } } -;// CONCATENATED MODULE: ./web/pdf_thumbnail_view.js +;// ./web/pdf_thumbnail_view.js const DRAW_UPSCALE_FACTOR = 2; @@ -8655,7 +8704,7 @@ class PDFThumbnailView { } } -;// CONCATENATED MODULE: ./web/pdf_thumbnail_viewer.js +;// ./web/pdf_thumbnail_viewer.js const THUMBNAIL_SCROLL_MARGIN = -19; @@ -8867,13 +8916,14 @@ class PDFThumbnailViewer { } } -;// CONCATENATED MODULE: ./web/annotation_editor_layer_builder.js +;// ./web/annotation_editor_layer_builder.js class AnnotationEditorLayerBuilder { #annotationLayer = null; #drawLayer = null; #onAppend = null; + #structTreeLayer = null; #textLayer = null; #uiManager; constructor(options) { @@ -8889,6 +8939,7 @@ class AnnotationEditorLayerBuilder { this.#textLayer = options.textLayer || null; this.#drawLayer = options.drawLayer || null; this.#onAppend = options.onAppend || null; + this.#structTreeLayer = options.structTreeLayer || null; } async render(viewport, intent = "display") { if (intent !== "display") { @@ -8915,6 +8966,7 @@ class AnnotationEditorLayerBuilder { this.annotationEditorLayer = new AnnotationEditorLayer({ uiManager: this.#uiManager, div, + structTreeLayer: this.#structTreeLayer, accessibilityManager: this.accessibilityManager, pageIndex: this.pdfPage.pageNumber - 1, l10n: this.l10n, @@ -8953,7 +9005,7 @@ class AnnotationEditorLayerBuilder { } } -;// CONCATENATED MODULE: ./web/annotation_layer_builder.js +;// ./web/annotation_layer_builder.js class AnnotationLayerBuilder { @@ -8992,7 +9044,7 @@ class AnnotationLayerBuilder { this._cancelled = false; this._eventBus = linkService.eventBus; } - async render(viewport, intent = "display") { + async render(viewport, options, intent = "display") { if (this.div) { if (this._cancelled || !this.annotationLayer) { return; @@ -9025,7 +9077,8 @@ class AnnotationLayerBuilder { page: this.pdfPage, viewport: viewport.clone({ dontFlip: true - }) + }), + structTreeLayer: options?.structTreeLayer || null }); await this.annotationLayer.render({ annotations, @@ -9087,7 +9140,7 @@ class AnnotationLayerBuilder { } } -;// CONCATENATED MODULE: ./web/draw_layer_builder.js +;// ./web/draw_layer_builder.js class DrawLayerBuilder { #drawLayer = null; @@ -9118,7 +9171,7 @@ class DrawLayerBuilder { } } -;// CONCATENATED MODULE: ./web/struct_tree_layer_builder.js +;// ./web/struct_tree_layer_builder.js const PDF_ROLE_TO_HTML_ROLE = { Document: null, @@ -9164,17 +9217,39 @@ const PDF_ROLE_TO_HTML_ROLE = { }; const HEADING_PATTERN = /^H(\d+)$/; class StructTreeLayerBuilder { - #treeDom = undefined; - get renderingDone() { - return this.#treeDom !== undefined; - } - render(structTree) { - if (this.#treeDom !== undefined) { - return this.#treeDom; + #promise; + #treeDom = null; + #treePromise; + #elementAttributes = new Map(); + #rawDims; + #elementsToAddToTextLayer = null; + constructor(pdfPage, rawDims) { + this.#promise = pdfPage.getStructTree(); + this.#rawDims = rawDims; + } + async render() { + if (this.#treePromise) { + return this.#treePromise; } - const treeDom = this.#walk(structTree); - treeDom?.classList.add("structTree"); - return this.#treeDom = treeDom; + const { + promise, + resolve, + reject + } = Promise.withResolvers(); + this.#treePromise = promise; + try { + this.#treeDom = this.#walk(await this.#promise); + } catch (ex) { + reject(ex); + } + this.#promise = null; + this.#treeDom?.classList.add("structTree"); + resolve(this.#treeDom); + return promise; + } + async getAriaAttributes(annotationId) { + await this.render(); + return this.#elementAttributes.get(annotationId); } hide() { if (this.#treeDom && !this.#treeDom.hidden) { @@ -9193,7 +9268,22 @@ class StructTreeLayerBuilder { lang } = structElement; if (alt !== undefined) { - htmlElement.setAttribute("aria-label", removeNullCharacters(alt)); + let added = false; + const label = removeNullCharacters(alt); + for (const child of structElement.children) { + if (child.type === "annotation") { + let attrs = this.#elementAttributes.get(child.id); + if (!attrs) { + attrs = new Map(); + this.#elementAttributes.set(child.id, attrs); + } + attrs.set("aria-label", label); + added = true; + } + } + if (!added) { + htmlElement.setAttribute("aria-label", label); + } } if (id !== undefined) { htmlElement.setAttribute("aria-owns", id); @@ -9202,6 +9292,52 @@ class StructTreeLayerBuilder { htmlElement.setAttribute("lang", removeNullCharacters(lang, true)); } } + #addImageInTextLayer(node, element) { + const { + alt, + bbox, + children + } = node; + const child = children?.[0]; + if (!this.#rawDims || !alt || !bbox || child?.type !== "content") { + return false; + } + const { + id + } = child; + if (!id) { + return false; + } + element.setAttribute("aria-owns", id); + const img = document.createElement("span"); + (this.#elementsToAddToTextLayer ||= new Map()).set(id, img); + img.setAttribute("role", "img"); + img.setAttribute("aria-label", removeNullCharacters(alt)); + const { + pageHeight, + pageX, + pageY + } = this.#rawDims; + const calc = "calc(var(--scale-factor)*"; + const { + style + } = img; + style.width = `${calc}${bbox[2] - bbox[0]}px)`; + style.height = `${calc}${bbox[3] - bbox[1]}px)`; + style.left = `${calc}${bbox[0] - pageX}px)`; + style.top = `${calc}${pageHeight - bbox[3] + pageY}px)`; + return true; + } + addElementsToTextLayer() { + if (!this.#elementsToAddToTextLayer) { + return; + } + for (const [id, img] of this.#elementsToAddToTextLayer) { + document.getElementById(id)?.append(img); + } + this.#elementsToAddToTextLayer.clear(); + this.#elementsToAddToTextLayer = null; + } #walk(node) { if (!node) { return null; @@ -9218,6 +9354,9 @@ class StructTreeLayerBuilder { } else if (PDF_ROLE_TO_HTML_ROLE[role]) { element.setAttribute("role", PDF_ROLE_TO_HTML_ROLE[role]); } + if (role === "Figure" && this.#addImageInTextLayer(node, element)) { + return element; + } } this.#setAttributes(node, element); if (node.children) { @@ -9233,7 +9372,7 @@ class StructTreeLayerBuilder { } } -;// CONCATENATED MODULE: ./web/text_accessibility.js +;// ./web/text_accessibility.js class TextAccessibilityManager { #enabled = false; @@ -9385,7 +9524,7 @@ class TextAccessibilityManager { } } -;// CONCATENATED MODULE: ./web/text_highlighter.js +;// ./web/text_highlighter.js class TextHighlighter { #eventAbortController = null; constructor({ @@ -9605,7 +9744,7 @@ class TextHighlighter { } } -;// CONCATENATED MODULE: ./web/text_layer_builder.js +;// ./web/text_layer_builder.js class TextLayerBuilder { @@ -9795,7 +9934,7 @@ class TextLayerBuilder { } } -;// CONCATENATED MODULE: ./web/pdf_page_view.js +;// ./web/pdf_page_view.js @@ -9819,6 +9958,8 @@ class PDFPageView { #layerProperties = null; #loadingId = null; #previousRotation = null; + #scaleRoundX = 1; + #scaleRoundY = 1; #renderError = null; #renderingState = RenderingStates.INITIAL; #textLayerMode = TextLayerMode.ENABLE; @@ -9877,6 +10018,9 @@ class PDFPageView { container?.append(div); if (this._isStandalone) { container?.style.setProperty("--scale-factor", this.scale * PixelsPerInch.PDF_TO_CSS_UNITS); + if (this.pageColors?.background) { + container?.style.setProperty("--page-bg-color", this.pageColors.background); + } const { optionalContentConfigPromise } = options; @@ -9990,7 +10134,9 @@ class PDFPageView { async #renderAnnotationLayer() { let error = null; try { - await this.annotationLayer.render(this.viewport, "display"); + await this.annotationLayer.render(this.viewport, { + structTreeLayer: this.structTreeLayer + }, "display"); } catch (ex) { console.error(`#renderAnnotationLayer: "${ex}".`); error = ex; @@ -10056,12 +10202,13 @@ class PDFPageView { if (!this.textLayer) { return; } - this.structTreeLayer ||= new StructTreeLayerBuilder(); - const tree = await (!this.structTreeLayer.renderingDone ? this.pdfPage.getStructTree() : null); - const treeDom = this.structTreeLayer?.render(tree); + const treeDom = await this.structTreeLayer?.render(); if (treeDom) { this.l10n.pause(); - this.canvas?.append(treeDom); + this.structTreeLayer?.addElementsToTextLayer(); + if (this.canvas && treeDom.parentNode !== this.canvas) { + this.canvas.append(treeDom); + } this.l10n.resume(); } this.structTreeLayer?.show(); @@ -10276,14 +10423,14 @@ class PDFPageView { this.textLayer.cancel(); this.textLayer = null; } - if (this.structTreeLayer && !this.textLayer) { - this.structTreeLayer = null; - } if (this.annotationLayer && (!keepAnnotationLayer || !this.annotationLayer.div)) { this.annotationLayer.cancel(); this.annotationLayer = null; this._annotationCanvasMap = null; } + if (this.structTreeLayer && !this.textLayer) { + this.structTreeLayer = null; + } if (this.annotationEditorLayer && (!keepAnnotationEditorLayer || !this.annotationEditorLayer.div)) { if (this.drawLayer) { this.drawLayer.cancel(); @@ -10496,13 +10643,20 @@ class PDFPageView { } const sfx = approximateFraction(outputScale.sx); const sfy = approximateFraction(outputScale.sy); - canvas.width = floorToDivide(width * outputScale.sx, sfx[0]); - canvas.height = floorToDivide(height * outputScale.sy, sfy[0]); - const { - style - } = canvas; - style.width = floorToDivide(width, sfx[1]) + "px"; - style.height = floorToDivide(height, sfy[1]) + "px"; + const canvasWidth = canvas.width = floorToDivide(calcRound(width * outputScale.sx), sfx[0]); + const canvasHeight = canvas.height = floorToDivide(calcRound(height * outputScale.sy), sfy[0]); + const pageWidth = floorToDivide(calcRound(width), sfx[1]); + const pageHeight = floorToDivide(calcRound(height), sfy[1]); + outputScale.sx = canvasWidth / pageWidth; + outputScale.sy = canvasHeight / pageHeight; + if (this.#scaleRoundX !== sfx[1]) { + div.style.setProperty("--scale-round-x", `${sfx[1]}px`); + this.#scaleRoundX = sfx[1]; + } + if (this.#scaleRoundY !== sfy[1]) { + div.style.setProperty("--scale-round-y", `${sfy[1]}px`); + this.#scaleRoundY = sfy[1]; + } this.#viewportMap.set(canvas, viewport); const transform = outputScale.scaled ? [outputScale.sx, 0, 0, outputScale.sy, 0, 0] : null; const renderContext = { @@ -10520,6 +10674,7 @@ class PDFPageView { const resultPromise = renderTask.promise.then(async () => { showCanvas?.(true); await this.#finishRenderTask(renderTask); + this.structTreeLayer ||= new StructTreeLayerBuilder(pdfPage, viewport.rawDims); this.#renderTextLayer(); if (this.annotationLayer) { await this.#renderAnnotationLayer(); @@ -10539,6 +10694,7 @@ class PDFPageView { uiManager: annotationEditorUIManager, pdfPage, l10n, + structTreeLayer: this.structTreeLayer, accessibilityManager: this._accessibilityManager, annotationLayer: this.annotationLayer?.annotationLayer, textLayer: this.textLayer, @@ -10596,7 +10752,7 @@ class PDFPageView { } } -;// CONCATENATED MODULE: ./web/pdf_viewer.js +;// ./web/pdf_viewer.js @@ -10675,7 +10831,7 @@ class PDFViewer { #enableNewAltTextWhenAddingImage = false; #eventAbortController = null; #mlManager = null; - #onPageRenderedCallback = null; + #switchAnnotationEditorModeAC = null; #switchAnnotationEditorModeTimeoutId = null; #getAllTextInProgress = false; #hiddenCopyElement = null; @@ -10686,7 +10842,7 @@ class PDFViewer { #scaleTimeoutId = null; #textLayerMode = TextLayerMode.ENABLE; constructor(options) { - const viewerVersion = "4.6.82"; + const viewerVersion = "4.7.76"; if (version !== viewerVersion) { throw new Error(`The API version "${version}" does not match the Viewer version "${viewerVersion}".`); } @@ -11139,6 +11295,9 @@ class PDFViewer { scale: scale * PixelsPerInch.PDF_TO_CSS_UNITS }); viewer.style.setProperty("--scale-factor", viewport.scale); + if (pageColors?.background) { + viewer.style.setProperty("--page-bg-color", pageColors.background); + } if (pageColors?.foreground === "CanvasText" || pageColors?.background === "Canvas") { viewer.style.setProperty("--hcm-highlight-filter", pdfDocument.filterFactory.addHighlightHCMFilter("highlight", "CanvasText", "Canvas", "HighlightText", "Highlight")); viewer.style.setProperty("--hcm-highlight-selected-filter", pdfDocument.filterFactory.addHighlightHCMFilter("highlight_selected", "CanvasText", "Canvas", "HighlightText", "ButtonText")); @@ -12114,10 +12273,8 @@ class PDFViewer { return this.#containerTopLeft ||= [this.container.offsetTop, this.container.offsetLeft]; } #cleanupSwitchAnnotationEditorMode() { - if (this.#onPageRenderedCallback) { - this.eventBus._off("pagerendered", this.#onPageRenderedCallback); - this.#onPageRenderedCallback = null; - } + this.#switchAnnotationEditorModeAC?.abort(); + this.#switchAnnotationEditorModeAC = null; if (this.#switchAnnotationEditorModeTimeoutId !== null) { clearTimeout(this.#switchAnnotationEditorModeTimeoutId); this.#switchAnnotationEditorModeTimeoutId = null; @@ -12169,18 +12326,16 @@ class PDFViewer { const idsToRefresh = this.#switchToEditAnnotationMode(); if (isEditing && idsToRefresh) { this.#cleanupSwitchAnnotationEditorMode(); - this.#onPageRenderedCallback = ({ + this.#switchAnnotationEditorModeAC = new AbortController(); + const signal = AbortSignal.any([this.#eventAbortController.signal, this.#switchAnnotationEditorModeAC.signal]); + eventBus._on("pagerendered", ({ pageNumber }) => { idsToRefresh.delete(pageNumber); if (idsToRefresh.size === 0) { this.#switchAnnotationEditorModeTimeoutId = setTimeout(updater, 0); } - }; - const { - signal - } = this.#eventAbortController; - eventBus._on("pagerendered", this.#onPageRenderedCallback, { + }, { signal }); return; @@ -12205,7 +12360,7 @@ class PDFViewer { } } -;// CONCATENATED MODULE: ./web/secondary_toolbar.js +;// ./web/secondary_toolbar.js class SecondaryToolbar { @@ -12404,7 +12559,8 @@ class SecondaryToolbar { eventBus._on("spreadmodechanged", this.#spreadModeChanged.bind(this)); } #cursorToolChanged({ - tool + tool, + disabled }) { const { cursorSelectToolButton, @@ -12412,6 +12568,8 @@ class SecondaryToolbar { } = this.#opts; toggleCheckedBtn(cursorSelectToolButton, tool === CursorTool.SELECT); toggleCheckedBtn(cursorHandToolButton, tool === CursorTool.HAND); + cursorSelectToolButton.disabled = disabled; + cursorHandToolButton.disabled = disabled; } #scrollModeChanged({ mode @@ -12482,7 +12640,7 @@ class SecondaryToolbar { } } -;// CONCATENATED MODULE: ./web/toolbar.js +;// ./web/toolbar.js class Toolbar { @@ -12565,7 +12723,20 @@ class Toolbar { }); this.reset(); } - #updateToolbarDensity() {} + #updateToolbarDensity({ + value + }) { + let name = "normal"; + switch (value) { + case 1: + name = "compact"; + break; + case 2: + name = "touch"; + break; + } + document.documentElement.setAttribute("data-toolbar-density", name); + } #setAnnotationEditorUIManager(uiManager, parentContainer) { const colorPicker = new ColorPicker({ uiManager @@ -12694,10 +12865,10 @@ class Toolbar { editorStampButton, editorStampParamsToolbar } = this.#opts; - toggleCheckedBtn(editorFreeTextButton, mode === AnnotationEditorType.FREETEXT, editorFreeTextParamsToolbar); - toggleCheckedBtn(editorHighlightButton, mode === AnnotationEditorType.HIGHLIGHT, editorHighlightParamsToolbar); - toggleCheckedBtn(editorInkButton, mode === AnnotationEditorType.INK, editorInkParamsToolbar); - toggleCheckedBtn(editorStampButton, mode === AnnotationEditorType.STAMP, editorStampParamsToolbar); + toggleExpandedBtn(editorFreeTextButton, mode === AnnotationEditorType.FREETEXT, editorFreeTextParamsToolbar); + toggleExpandedBtn(editorHighlightButton, mode === AnnotationEditorType.HIGHLIGHT, editorHighlightParamsToolbar); + toggleExpandedBtn(editorInkButton, mode === AnnotationEditorType.INK, editorInkParamsToolbar); + toggleExpandedBtn(editorStampButton, mode === AnnotationEditorType.STAMP, editorStampParamsToolbar); const isDisable = mode === AnnotationEditorType.DISABLE; editorFreeTextButton.disabled = isDisable; editorHighlightButton.disabled = isDisable; @@ -12762,7 +12933,7 @@ class Toolbar { } } -;// CONCATENATED MODULE: ./web/view_history.js +;// ./web/view_history.js const DEFAULT_VIEW_HISTORY_CACHE_SIZE = 20; class ViewHistory { constructor(fingerprint, cacheSize = DEFAULT_VIEW_HISTORY_CACHE_SIZE) { @@ -12829,7 +13000,7 @@ class ViewHistory { } } -;// CONCATENATED MODULE: ./web/app.js +;// ./web/app.js @@ -12977,13 +13148,13 @@ const PDFViewerApplication = { } const { PDFBug - } = await import( /*webpackIgnore: true*/AppOptions.get("debuggerSrc")); + } = await import(/*webpackIgnore: true*/AppOptions.get("debuggerSrc")); this._PDFBug = PDFBug; }; if (params.get("disableworker") === "true") { try { GlobalWorkerOptions.workerSrc ||= AppOptions.get("workerSrc"); - await import( /*webpackIgnore: true*/PDFWorker.workerSrc); + await import(/*webpackIgnore: true*/PDFWorker.workerSrc); } catch (ex) { console.error(`_parseHashParams: "${ex.message}".`); } @@ -13046,10 +13217,9 @@ const PDFViewerApplication = { externalServices, l10n } = this; - let eventBus; - eventBus = new EventBus(); + const eventBus = new EventBus(); + this.eventBus = AppOptions.eventBus = eventBus; this.mlManager?.setEventBus(eventBus, this._globalAbortController.signal); - this.eventBus = eventBus; this.overlayManager = new OverlayManager(); const pdfRenderingQueue = new PDFRenderingQueue(); pdfRenderingQueue.onIdle = this._cleanup.bind(this); @@ -13139,7 +13309,7 @@ const PDFViewerApplication = { pdfLinkService.setHistory(this.pdfHistory); } if (!this.supportsIntegratedFind && appConfig.findBar) { - this.findBar = new PDFFindBar(appConfig.findBar, eventBus); + this.findBar = new PDFFindBar(appConfig.findBar, appConfig.principalContainer, eventBus); } if (appConfig.annotationEditorParams) { if (typeof AbortSignal.any === "function" && annotationEditorMode !== AnnotationEditorType.DISABLE) { @@ -13366,7 +13536,7 @@ const PDFViewerApplication = { return AppOptions.get("supportsCaretBrowsingMode"); }, moveCaret(isUp, select) { - this._caretBrowsing ||= new CaretBrowsingMode(this.appConfig.mainContainer, this.appConfig.viewerContainer, this.appConfig.toolbar?.container); + this._caretBrowsing ||= new CaretBrowsingMode(this._globalAbortController.signal, this.appConfig.mainContainer, this.appConfig.viewerContainer, this.appConfig.toolbar?.container); this._caretBrowsing.moveCaret(isUp, select); }, setTitleUsingUrl(url = "", downloadUrl = null) { @@ -14728,7 +14898,7 @@ function onClick(evt) { return; } const appConfig = this.appConfig; - if (this.pdfViewer.containsElement(evt.target) || appConfig.toolbar?.container.contains(evt.target) && evt.target !== appConfig.secondaryToolbar?.toggleButton) { + if (this.pdfViewer.containsElement(evt.target) || appConfig.toolbar?.container.contains(evt.target) && !appConfig.secondaryToolbar?.toggleButton.contains(evt.target)) { this.secondaryToolbar.close(); } } @@ -15017,13 +15187,13 @@ function beforeUnload(evt) { return false; } -;// CONCATENATED MODULE: ./web/viewer.js +;// ./web/viewer.js -const pdfjsVersion = "4.6.82"; -const pdfjsBuild = "9b541910f"; +const pdfjsVersion = "4.7.76"; +const pdfjsBuild = "8b73b828b"; const AppConstants = { LinkTarget: LinkTarget, RenderingStates: RenderingStates, @@ -15036,33 +15206,34 @@ window.PDFViewerApplicationOptions = AppOptions; function getViewerConfiguration() { return { appContainer: document.body, + principalContainer: document.getElementById("mainContainer"), mainContainer: document.getElementById("viewerContainer"), viewerContainer: document.getElementById("viewer"), toolbar: { - container: document.getElementById("toolbarViewer"), + container: document.getElementById("toolbarContainer"), numPages: document.getElementById("numPages"), pageNumber: document.getElementById("pageNumber"), scaleSelect: document.getElementById("scaleSelect"), customScaleOption: document.getElementById("customScaleOption"), previous: document.getElementById("previous"), next: document.getElementById("next"), - zoomIn: document.getElementById("zoomIn"), - zoomOut: document.getElementById("zoomOut"), - print: document.getElementById("print"), - editorFreeTextButton: document.getElementById("editorFreeText"), + zoomIn: document.getElementById("zoomInButton"), + zoomOut: document.getElementById("zoomOutButton"), + print: document.getElementById("printButton"), + editorFreeTextButton: document.getElementById("editorFreeTextButton"), editorFreeTextParamsToolbar: document.getElementById("editorFreeTextParamsToolbar"), - editorHighlightButton: document.getElementById("editorHighlight"), + editorHighlightButton: document.getElementById("editorHighlightButton"), editorHighlightParamsToolbar: document.getElementById("editorHighlightParamsToolbar"), editorHighlightColorPicker: document.getElementById("editorHighlightColorPicker"), - editorInkButton: document.getElementById("editorInk"), + editorInkButton: document.getElementById("editorInkButton"), editorInkParamsToolbar: document.getElementById("editorInkParamsToolbar"), - editorStampButton: document.getElementById("editorStamp"), + editorStampButton: document.getElementById("editorStampButton"), editorStampParamsToolbar: document.getElementById("editorStampParamsToolbar"), - download: document.getElementById("download") + download: document.getElementById("downloadButton") }, secondaryToolbar: { toolbar: document.getElementById("secondaryToolbar"), - toggleButton: document.getElementById("secondaryToolbarToggle"), + toggleButton: document.getElementById("secondaryToolbarToggleButton"), presentationModeButton: document.getElementById("presentationMode"), openFileButton: document.getElementById("secondaryOpenFile"), printButton: document.getElementById("secondaryPrint"), @@ -15088,7 +15259,7 @@ function getViewerConfiguration() { sidebar: { outerContainer: document.getElementById("outerContainer"), sidebarContainer: document.getElementById("sidebarContainer"), - toggleButton: document.getElementById("sidebarToggle"), + toggleButton: document.getElementById("sidebarToggleButton"), resizer: document.getElementById("sidebarResizer"), thumbnailButton: document.getElementById("viewThumbnail"), outlineButton: document.getElementById("viewOutline"), @@ -15102,7 +15273,7 @@ function getViewerConfiguration() { }, findBar: { bar: document.getElementById("findbar"), - toggleButton: document.getElementById("viewFind"), + toggleButton: document.getElementById("viewFindButton"), findField: document.getElementById("findInput"), highlightAllCheckbox: document.getElementById("findHighlightAll"), caseSensitiveCheckbox: document.getElementById("findMatchCase"), @@ -15110,8 +15281,8 @@ function getViewerConfiguration() { entireWordCheckbox: document.getElementById("findEntireWord"), findMsg: document.getElementById("findMsg"), findResultsCount: document.getElementById("findResultsCount"), - findPreviousButton: document.getElementById("findPrevious"), - findNextButton: document.getElementById("findNext") + findPreviousButton: document.getElementById("findPreviousButton"), + findNextButton: document.getElementById("findNextButton") }, passwordOverlay: { dialog: document.getElementById("passwordDialog"),