mirror of
https://github.com/mozilla/pdf.js.git
synced 2026-04-23 13:44:09 +02:00
Merge branch 'master' into scientific
This commit is contained in:
commit
9c3a752388
49
.github/workflows/update_locales.yml
vendored
Normal file
49
.github/workflows/update_locales.yml
vendored
Normal file
@ -0,0 +1,49 @@
|
||||
name: Update locales
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 0 * * 5" # Every Friday at midnight UTC
|
||||
workflow_dispatch: # Allow manual triggering
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
update-locales:
|
||||
name: Update locales
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Use Node.js LTS
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: lts/*
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Import translations from mozilla-central
|
||||
run: npx gulp importl10n
|
||||
|
||||
- name: Create Pull Request
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
if [ -z "$(git status --porcelain l10n/)" ]; then
|
||||
echo "No locale changes to commit."
|
||||
exit 0
|
||||
fi
|
||||
git config user.name "github-actions[bot]"
|
||||
git config user.email "github-actions[bot]@users.noreply.github.com"
|
||||
git switch -C update-locales
|
||||
git add l10n/
|
||||
git commit -m "l10n: Update locale files"
|
||||
git push --force origin update-locales
|
||||
gh pr create \
|
||||
--title "l10n: Update locale files" \
|
||||
--body "Automated weekly update of locale files from mozilla-central." \
|
||||
--label l10n || true
|
||||
11
external/importL10n/locales.mjs
vendored
11
external/importL10n/locales.mjs
vendored
@ -91,7 +91,7 @@ async function downloadL10n(root) {
|
||||
await downloadLanguageFiles(root, langCode);
|
||||
}
|
||||
|
||||
const removeCodes = [];
|
||||
const rmCodes = [];
|
||||
for (const entry of fs.readdirSync(root)) {
|
||||
const dirPath = path.join(root, entry),
|
||||
stat = fs.lstatSync(dirPath);
|
||||
@ -101,14 +101,13 @@ async function downloadL10n(root) {
|
||||
entry !== DEFAULT_LOCALE &&
|
||||
!langCodes.includes(entry)
|
||||
) {
|
||||
removeCodes.push(entry);
|
||||
fs.rmSync(dirPath, { recursive: true, force: true });
|
||||
rmCodes.push(entry);
|
||||
}
|
||||
}
|
||||
if (removeCodes.length) {
|
||||
if (rmCodes.length) {
|
||||
console.log(
|
||||
"\nConsider removing the following unmaintained locales:\n" +
|
||||
removeCodes.join(", ") +
|
||||
"\n"
|
||||
`\nRemoved the following unmaintained locales: ${rmCodes.join(", ")}\n`
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -537,6 +537,7 @@ pdfjs-editor-undo-bar-message-freetext = Тэкст выдалены
|
||||
pdfjs-editor-undo-bar-message-ink = Малюнак выдалены
|
||||
pdfjs-editor-undo-bar-message-stamp = Відарыс выдалены
|
||||
pdfjs-editor-undo-bar-message-signature = Подпіс выдалены
|
||||
pdfjs-editor-undo-bar-message-comment = Каментарый выдалены
|
||||
# Variables:
|
||||
# $count (Number) - the number of removed annotations.
|
||||
pdfjs-editor-undo-bar-message-multiple =
|
||||
@ -644,24 +645,71 @@ pdfjs-editor-add-comment-button =
|
||||
## - layers.
|
||||
## The thumbnails view is used to edit the pdf: remove/insert pages, ...
|
||||
|
||||
pdfjs-toggle-views-manager-button =
|
||||
.title = Паказаць/схаваць бакавую панэль
|
||||
pdfjs-toggle-views-manager-notification-button =
|
||||
.title = Паказаць/схаваць бакавую панэль (дакумент мае мініяцюры/змест/далучэнні/пласты)
|
||||
pdfjs-toggle-views-manager-button-label = Паказаць/схаваць бакавую панэль
|
||||
pdfjs-views-manager-sidebar =
|
||||
.aria-label = Бакавая панэль
|
||||
pdfjs-views-manager-view-selector-button =
|
||||
.title = Выгляд
|
||||
pdfjs-views-manager-view-selector-button-label = Выгляд
|
||||
pdfjs-views-manager-pages-title = Старонкі
|
||||
pdfjs-views-manager-outlines-title = Структура дакумента
|
||||
pdfjs-views-manager-attachments-title = Далучэнні
|
||||
pdfjs-views-manager-layers-title = Пласты
|
||||
pdfjs-views-manager-pages-option-label = Старонкі
|
||||
pdfjs-views-manager-outlines-option-label = Структура дакумента
|
||||
pdfjs-views-manager-attachments-option-label = Далучэнні
|
||||
pdfjs-views-manager-layers-option-label = Пласты
|
||||
pdfjs-views-manager-add-file-button =
|
||||
.title = Дадаць файл
|
||||
pdfjs-views-manager-add-file-button-label = Дадаць файл
|
||||
# Variables:
|
||||
# $count (Number) - the number of selected pages.
|
||||
pdfjs-views-manager-pages-status-action-label =
|
||||
{ $count ->
|
||||
[one] Вылучана { $count }
|
||||
[few] Вылучаны { $count }
|
||||
*[many] Вылучана { $count }
|
||||
}
|
||||
pdfjs-views-manager-pages-status-none-action-label = Выбраць старонкі
|
||||
pdfjs-views-manager-pages-status-action-button-label = Кіраваць
|
||||
pdfjs-views-manager-pages-status-copy-button-label = Капіяваць
|
||||
pdfjs-views-manager-pages-status-cut-button-label = Выразаць
|
||||
pdfjs-views-manager-pages-status-delete-button-label = Выдаліць
|
||||
pdfjs-views-manager-pages-status-save-as-button-label = Захаваць як…
|
||||
# Variables:
|
||||
# $count (Number) - the number of selected pages to be cut.
|
||||
pdfjs-views-manager-status-undo-cut-label =
|
||||
{ $count ->
|
||||
[one] Выразана { $count } старонка
|
||||
[few] Выразана { $count } старонкі
|
||||
*[many] Выразана { $count } старонак
|
||||
}
|
||||
# Variables:
|
||||
# $count (Number) - the number of selected pages to be copied.
|
||||
pdfjs-views-manager-pages-status-undo-copy-label =
|
||||
{ $count ->
|
||||
[one] Скапіравана { $count } старонка
|
||||
[few] Скапіравана { $count } старонкі
|
||||
*[many] Скапіравана { $count } старонак
|
||||
}
|
||||
# Variables:
|
||||
# $count (Number) - the number of selected pages to be deleted.
|
||||
pdfjs-views-manager-pages-status-undo-delete-label =
|
||||
{ $count ->
|
||||
[one] Выдалена { $count } старонка
|
||||
[few] Выдалена { $count } старонкі
|
||||
*[many] Выдалена { $count } старонак
|
||||
}
|
||||
pdfjs-views-manager-pages-status-waiting-ready-label = Рыхтуецца ваш файл…
|
||||
pdfjs-views-manager-pages-status-waiting-uploading-label = Зацягваецца файл…
|
||||
pdfjs-views-manager-status-warning-cut-label = Не ўдалося выразаць. Абнавіце старонку і паспрабуйце зноў.
|
||||
pdfjs-views-manager-status-warning-copy-label = Не ўдалося скапіяваць. Абнавіце старонку і паспрабуйце зноў.
|
||||
pdfjs-views-manager-status-warning-delete-label = Не ўдалося выдаліць. Абнавіце старонку і паспрабуйце зноў.
|
||||
pdfjs-views-manager-status-warning-save-label = Не ўдалося захаваць. Абнавіце старонку і паспрабуйце зноў.
|
||||
pdfjs-views-manager-status-undo-button-label = Адмяніць
|
||||
pdfjs-views-manager-status-close-button =
|
||||
.title = Закрыць
|
||||
|
||||
@ -706,6 +706,7 @@ pdfjs-views-manager-status-undo-button-label = Rückgängig
|
||||
pdfjs-views-manager-status-close-button =
|
||||
.title = Schließen
|
||||
pdfjs-views-manager-status-close-button-label = Schließen
|
||||
pdfjs-views-manager-paste-button-label = Einfügen
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
|
||||
@ -534,6 +534,7 @@ pdfjs-editor-undo-bar-message-freetext = Το κείμενο αφαιρέθηκ
|
||||
pdfjs-editor-undo-bar-message-ink = Το σχέδιο αφαιρέθηκε
|
||||
pdfjs-editor-undo-bar-message-stamp = Η εικόνα αφαιρέθηκε
|
||||
pdfjs-editor-undo-bar-message-signature = Η υπογραφή αφαιρέθηκε
|
||||
pdfjs-editor-undo-bar-message-comment = Το σχόλιο αφαιρέθηκε
|
||||
# Variables:
|
||||
# $count (Number) - the number of removed annotations.
|
||||
pdfjs-editor-undo-bar-message-multiple =
|
||||
@ -642,6 +643,8 @@ pdfjs-editor-add-comment-button =
|
||||
|
||||
pdfjs-toggle-views-manager-button =
|
||||
.title = (Απ)ενεργοποίηση πλαϊνής γραμμής
|
||||
pdfjs-toggle-views-manager-notification-button =
|
||||
.title = (Απ)ενεργοποίηση πλαϊνής γραμμής (το έγγραφο περιέχει μικρογραφίες/περίγραμμα/συνημμένα/επίπεδα)
|
||||
pdfjs-toggle-views-manager-button-label = (Απ)ενεργοποίηση πλαϊνής γραμμής
|
||||
pdfjs-views-manager-sidebar =
|
||||
.aria-label = Πλαϊνή γραμμή
|
||||
|
||||
@ -201,6 +201,10 @@ pdfjs-thumb-page-title =
|
||||
# $page (Number) - the page number
|
||||
pdfjs-thumb-page-canvas =
|
||||
.aria-label = Thumbnail of Page { $page }
|
||||
# Variables:
|
||||
# $page (Number) - the page number
|
||||
pdfjs-thumb-page-checkbox =
|
||||
.aria-label = Select page { $page }
|
||||
|
||||
## Find panel button title and messages
|
||||
|
||||
@ -648,6 +652,8 @@ pdfjs-toggle-views-manager-notification-button =
|
||||
pdfjs-toggle-views-manager-button-label = Toggle Sidebar
|
||||
pdfjs-views-manager-sidebar =
|
||||
.aria-label = Sidebar
|
||||
pdfjs-views-manager-sidebar-resizer =
|
||||
.aria-label = Sidebar resizer
|
||||
pdfjs-views-manager-view-selector-button =
|
||||
.title = Views
|
||||
pdfjs-views-manager-view-selector-button-label = Views
|
||||
@ -706,6 +712,7 @@ pdfjs-views-manager-status-undo-button-label = Undo
|
||||
pdfjs-views-manager-status-close-button =
|
||||
.title = Close
|
||||
pdfjs-views-manager-status-close-button-label = Close
|
||||
pdfjs-views-manager-paste-button-label = Paste
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
|
||||
@ -192,8 +192,9 @@ pdfjs-additional-layers = Additional Layers
|
||||
|
||||
# Variables:
|
||||
# $page (Number) - the page number
|
||||
pdfjs-thumb-page-title =
|
||||
.title = Page { $page }
|
||||
# $total (Number) - the number of pages
|
||||
pdfjs-thumb-page-title1 =
|
||||
.title = Page { $page } of { $total }
|
||||
|
||||
# Variables:
|
||||
# $page (Number) - the page number
|
||||
@ -202,8 +203,8 @@ pdfjs-thumb-page-canvas =
|
||||
|
||||
# Variables:
|
||||
# $page (Number) - the page number
|
||||
pdfjs-thumb-page-checkbox =
|
||||
.aria-label = Select page { $page }
|
||||
pdfjs-thumb-page-checkbox1 =
|
||||
.title = Select page { $page }
|
||||
|
||||
## Find panel button title and messages
|
||||
|
||||
@ -690,11 +691,11 @@ pdfjs-editor-add-comment-button =
|
||||
## - layers.
|
||||
## The thumbnails view is used to edit the pdf: remove/insert pages, ...
|
||||
|
||||
pdfjs-toggle-views-manager-button =
|
||||
.title = Toggle Sidebar
|
||||
pdfjs-toggle-views-manager-button1 =
|
||||
.title = Manage pages
|
||||
pdfjs-toggle-views-manager-notification-button =
|
||||
.title = Toggle Sidebar (document contains thumbnails/outline/attachments/layers)
|
||||
pdfjs-toggle-views-manager-button-label = Toggle Sidebar
|
||||
pdfjs-toggle-views-manager-button1-label = Manage pages
|
||||
|
||||
pdfjs-views-manager-sidebar =
|
||||
.aria-label = Sidebar
|
||||
|
||||
@ -706,6 +706,7 @@ pdfjs-views-manager-status-undo-button-label = Deshacer
|
||||
pdfjs-views-manager-status-close-button =
|
||||
.title = Cerrar
|
||||
pdfjs-views-manager-status-close-button-label = Cerrar
|
||||
pdfjs-views-manager-paste-button-label = Pegar
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
|
||||
@ -201,6 +201,10 @@ pdfjs-thumb-page-title =
|
||||
# $page (Number) - the page number
|
||||
pdfjs-thumb-page-canvas =
|
||||
.aria-label = Vignette de la page { $page }
|
||||
# Variables:
|
||||
# $page (Number) - the page number
|
||||
pdfjs-thumb-page-checkbox =
|
||||
.aria-label = Sélectionner la page { $page }
|
||||
|
||||
## Find panel button title and messages
|
||||
|
||||
@ -644,6 +648,8 @@ pdfjs-toggle-views-manager-notification-button =
|
||||
pdfjs-toggle-views-manager-button-label = Afficher/Masquer le panneau latéral
|
||||
pdfjs-views-manager-sidebar =
|
||||
.aria-label = Panneau latéral
|
||||
pdfjs-views-manager-sidebar-resizer =
|
||||
.aria-label = Redimensionner le panneau latéral
|
||||
pdfjs-views-manager-view-selector-button =
|
||||
.title = Vues
|
||||
pdfjs-views-manager-view-selector-button-label = Vues
|
||||
@ -702,6 +708,7 @@ pdfjs-views-manager-status-undo-button-label = Annuler
|
||||
pdfjs-views-manager-status-close-button =
|
||||
.title = Fermer
|
||||
pdfjs-views-manager-status-close-button-label = Fermer
|
||||
pdfjs-views-manager-paste-button-label = Coller
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
|
||||
@ -534,6 +534,7 @@ pdfjs-editor-undo-bar-message-freetext = Tekst fuortsmiten
|
||||
pdfjs-editor-undo-bar-message-ink = Tekening fuortsmiten
|
||||
pdfjs-editor-undo-bar-message-stamp = Ofbylding fuortsmiten
|
||||
pdfjs-editor-undo-bar-message-signature = Hantekening fuortsmiten
|
||||
pdfjs-editor-undo-bar-message-comment = Opmerking fuortsmiten
|
||||
# Variables:
|
||||
# $count (Number) - the number of removed annotations.
|
||||
pdfjs-editor-undo-bar-message-multiple =
|
||||
|
||||
@ -647,6 +647,8 @@ pdfjs-toggle-views-manager-notification-button =
|
||||
pdfjs-toggle-views-manager-button-label = Emoambue tenda yke
|
||||
pdfjs-views-manager-sidebar =
|
||||
.aria-label = Ta’ãngarupa yke
|
||||
pdfjs-views-manager-sidebar-resizer =
|
||||
.aria-label = Tuichakue mongu’eha tenda yképe
|
||||
pdfjs-views-manager-view-selector-button =
|
||||
.title = Hechaha
|
||||
pdfjs-views-manager-view-selector-button-label = Hechaha
|
||||
@ -705,6 +707,7 @@ pdfjs-views-manager-status-undo-button-label = Mboguevi
|
||||
pdfjs-views-manager-status-close-button =
|
||||
.title = Mboty
|
||||
pdfjs-views-manager-status-close-button-label = Mboty
|
||||
pdfjs-views-manager-paste-button-label = Mboja
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
|
||||
@ -201,6 +201,10 @@ pdfjs-thumb-page-title =
|
||||
# $page (Number) - the page number
|
||||
pdfjs-thumb-page-canvas =
|
||||
.aria-label = תצוגה מקדימה של עמוד { $page }
|
||||
# Variables:
|
||||
# $page (Number) - the page number
|
||||
pdfjs-thumb-page-checkbox =
|
||||
.aria-label = בחירת עמוד { $page }
|
||||
|
||||
## Find panel button title and messages
|
||||
|
||||
@ -648,6 +652,8 @@ pdfjs-toggle-views-manager-notification-button =
|
||||
pdfjs-toggle-views-manager-button-label = החלפת תצוגת סרגל צד
|
||||
pdfjs-views-manager-sidebar =
|
||||
.aria-label = סרגל צד
|
||||
pdfjs-views-manager-sidebar-resizer =
|
||||
.aria-label = שינוי גודל סרגל הצד
|
||||
pdfjs-views-manager-view-selector-button =
|
||||
.title = תצוגות
|
||||
pdfjs-views-manager-view-selector-button-label = תצוגות
|
||||
@ -706,6 +712,7 @@ pdfjs-views-manager-status-undo-button-label = ביטול פעולה
|
||||
pdfjs-views-manager-status-close-button =
|
||||
.title = סגירה
|
||||
pdfjs-views-manager-status-close-button-label = סגירה
|
||||
pdfjs-views-manager-paste-button-label = הדבקה
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
|
||||
@ -201,6 +201,10 @@ pdfjs-thumb-page-title =
|
||||
# $page (Number) - the page number
|
||||
pdfjs-thumb-page-canvas =
|
||||
.aria-label = Miniatura strony { $page }
|
||||
# Variables:
|
||||
# $page (Number) - the page number
|
||||
pdfjs-thumb-page-checkbox =
|
||||
.aria-label = Stronu { $page } wubrać
|
||||
|
||||
## Find panel button title and messages
|
||||
|
||||
@ -722,6 +726,7 @@ pdfjs-views-manager-status-undo-button-label = Cofnyć
|
||||
pdfjs-views-manager-status-close-button =
|
||||
.title = Začinić
|
||||
pdfjs-views-manager-status-close-button-label = Začinić
|
||||
pdfjs-views-manager-paste-button-label = Zasadźić
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
|
||||
@ -706,6 +706,7 @@ pdfjs-views-manager-status-undo-button-label = Disfacer
|
||||
pdfjs-views-manager-status-close-button =
|
||||
.title = Clauder
|
||||
pdfjs-views-manager-status-close-button-label = Clauder
|
||||
pdfjs-views-manager-paste-button-label = Collar
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
|
||||
@ -201,6 +201,10 @@ pdfjs-thumb-page-title =
|
||||
# $page (Number) - the page number
|
||||
pdfjs-thumb-page-canvas =
|
||||
.aria-label = Miniatura della pagina { $page }
|
||||
# Variables:
|
||||
# $page (Number) - the page number
|
||||
pdfjs-thumb-page-checkbox =
|
||||
.aria-label = Seleziona pagina { $page }
|
||||
|
||||
## Find panel button title and messages
|
||||
|
||||
@ -648,6 +652,8 @@ pdfjs-toggle-views-manager-notification-button =
|
||||
pdfjs-toggle-views-manager-button-label = Attiva/disattiva barra laterale
|
||||
pdfjs-views-manager-sidebar =
|
||||
.aria-label = Barra laterale
|
||||
pdfjs-views-manager-sidebar-resizer =
|
||||
.aria-label = Regolatore della larghezza della barra laterale
|
||||
pdfjs-views-manager-view-selector-button =
|
||||
.title = Viste
|
||||
pdfjs-views-manager-view-selector-button-label = Viste
|
||||
@ -706,6 +712,7 @@ pdfjs-views-manager-status-undo-button-label = Annulla
|
||||
pdfjs-views-manager-status-close-button =
|
||||
.title = Chiudi
|
||||
pdfjs-views-manager-status-close-button-label = Chiudi
|
||||
pdfjs-views-manager-paste-button-label = Incolla
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
@ -720,4 +727,3 @@ pdfjs-editor-add-signature-edit-button-label = Modifica descrizione
|
||||
## Edit signature description dialog
|
||||
|
||||
pdfjs-editor-edit-signature-dialog-title = Modifica descrizione
|
||||
|
||||
|
||||
@ -201,6 +201,10 @@ pdfjs-thumb-page-title =
|
||||
# $page (Number) - the page number
|
||||
pdfjs-thumb-page-canvas =
|
||||
.aria-label = { $page } парағы үшін кіші көрінісі
|
||||
# Variables:
|
||||
# $page (Number) - the page number
|
||||
pdfjs-thumb-page-checkbox =
|
||||
.aria-label = { $page } бетін таңдау
|
||||
|
||||
## Find panel button title and messages
|
||||
|
||||
@ -648,6 +652,8 @@ pdfjs-toggle-views-manager-notification-button =
|
||||
pdfjs-toggle-views-manager-button-label = Бүйір панелін көрсету/жасыру
|
||||
pdfjs-views-manager-sidebar =
|
||||
.aria-label = Бүйір панелі
|
||||
pdfjs-views-manager-sidebar-resizer =
|
||||
.aria-label = Бүйір панелінің өлшемін өзгертуші
|
||||
pdfjs-views-manager-view-selector-button =
|
||||
.title = Көріністер
|
||||
pdfjs-views-manager-view-selector-button-label = Көріністер
|
||||
@ -706,6 +712,7 @@ pdfjs-views-manager-status-undo-button-label = Болдырмау
|
||||
pdfjs-views-manager-status-close-button =
|
||||
.title = Жабу
|
||||
pdfjs-views-manager-status-close-button-label = Жабу
|
||||
pdfjs-views-manager-paste-button-label = Кірістіру
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
|
||||
@ -201,6 +201,10 @@ pdfjs-thumb-page-title =
|
||||
# $page (Number) - the page number
|
||||
pdfjs-thumb-page-canvas =
|
||||
.aria-label = { $page } 페이지 미리보기
|
||||
# Variables:
|
||||
# $page (Number) - the page number
|
||||
pdfjs-thumb-page-checkbox =
|
||||
.aria-label = { $page } 페이지 선택
|
||||
|
||||
## Find panel button title and messages
|
||||
|
||||
@ -632,6 +636,8 @@ pdfjs-toggle-views-manager-notification-button =
|
||||
pdfjs-toggle-views-manager-button-label = 사이드바 표시/숨기기
|
||||
pdfjs-views-manager-sidebar =
|
||||
.aria-label = 사이드바
|
||||
pdfjs-views-manager-sidebar-resizer =
|
||||
.aria-label = 사이드바 크기 조정
|
||||
pdfjs-views-manager-view-selector-button =
|
||||
.title = 보기
|
||||
pdfjs-views-manager-view-selector-button-label = 보기
|
||||
@ -674,6 +680,7 @@ pdfjs-views-manager-status-undo-button-label = 실행 취소
|
||||
pdfjs-views-manager-status-close-button =
|
||||
.title = 닫기
|
||||
pdfjs-views-manager-status-close-button-label = 닫기
|
||||
pdfjs-views-manager-paste-button-label = 붙여넣기
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
|
||||
@ -201,6 +201,10 @@ pdfjs-thumb-page-title =
|
||||
# $page (Number) - the page number
|
||||
pdfjs-thumb-page-canvas =
|
||||
.aria-label = Miniatuur van pagina { $page }
|
||||
# Variables:
|
||||
# $page (Number) - the page number
|
||||
pdfjs-thumb-page-checkbox =
|
||||
.aria-label = Pagina { $page } selecteren
|
||||
|
||||
## Find panel button title and messages
|
||||
|
||||
@ -648,6 +652,8 @@ pdfjs-toggle-views-manager-notification-button =
|
||||
pdfjs-toggle-views-manager-button-label = Zijbalk in-/uitschakelen
|
||||
pdfjs-views-manager-sidebar =
|
||||
.aria-label = Zijbalk
|
||||
pdfjs-views-manager-sidebar-resizer =
|
||||
.aria-label = Groottewijziging zijbalk
|
||||
pdfjs-views-manager-view-selector-button =
|
||||
.title = Weergaven
|
||||
pdfjs-views-manager-view-selector-button-label = Weergaven
|
||||
@ -706,6 +712,7 @@ pdfjs-views-manager-status-undo-button-label = Ongedaan maken
|
||||
pdfjs-views-manager-status-close-button =
|
||||
.title = Sluiten
|
||||
pdfjs-views-manager-status-close-button-label = Sluiten
|
||||
pdfjs-views-manager-paste-button-label = Plakken
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
|
||||
@ -706,6 +706,7 @@ pdfjs-views-manager-status-undo-button-label = Angre
|
||||
pdfjs-views-manager-status-close-button =
|
||||
.title = Lat att
|
||||
pdfjs-views-manager-status-close-button-label = Lat att
|
||||
pdfjs-views-manager-paste-button-label = Lim inn
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
|
||||
@ -536,6 +536,7 @@ pdfjs-editor-undo-bar-message-freetext = Usunięto tekst
|
||||
pdfjs-editor-undo-bar-message-ink = Usunięto rysunek
|
||||
pdfjs-editor-undo-bar-message-stamp = Usunięto obraz
|
||||
pdfjs-editor-undo-bar-message-signature = Usunięto podpis
|
||||
pdfjs-editor-undo-bar-message-comment = Usunięto komentarz
|
||||
# Variables:
|
||||
# $count (Number) - the number of removed annotations.
|
||||
pdfjs-editor-undo-bar-message-multiple =
|
||||
@ -636,6 +637,83 @@ pdfjs-editor-edit-comment-dialog-cancel-button = Anuluj
|
||||
pdfjs-editor-add-comment-button =
|
||||
.title = Dodaj komentarz
|
||||
|
||||
## The view manager is a sidebar displaying different views:
|
||||
## - thumbnails;
|
||||
## - outline;
|
||||
## - attachments;
|
||||
## - layers.
|
||||
## The thumbnails view is used to edit the pdf: remove/insert pages, ...
|
||||
|
||||
pdfjs-toggle-views-manager-button =
|
||||
.title = Przełącz panel boczny
|
||||
pdfjs-toggle-views-manager-notification-button =
|
||||
.title = Przełącz panel boczny (dokument zawiera miniatury/konspekt/załączniki/warstwy)
|
||||
pdfjs-toggle-views-manager-button-label = Przełącz panel boczny
|
||||
pdfjs-views-manager-sidebar =
|
||||
.aria-label = Panel boczny
|
||||
pdfjs-views-manager-view-selector-button =
|
||||
.title = Widoki
|
||||
pdfjs-views-manager-view-selector-button-label = Widoki
|
||||
pdfjs-views-manager-pages-title = Strony
|
||||
pdfjs-views-manager-outlines-title = Konspekt dokumentu
|
||||
pdfjs-views-manager-attachments-title = Załączniki
|
||||
pdfjs-views-manager-layers-title = Warstwy
|
||||
pdfjs-views-manager-pages-option-label = Strony
|
||||
pdfjs-views-manager-outlines-option-label = Konspekt dokumentu
|
||||
pdfjs-views-manager-attachments-option-label = Załączniki
|
||||
pdfjs-views-manager-layers-option-label = Warstwy
|
||||
pdfjs-views-manager-add-file-button =
|
||||
.title = Dodaj plik
|
||||
pdfjs-views-manager-add-file-button-label = Dodaj plik
|
||||
# Variables:
|
||||
# $count (Number) - the number of selected pages.
|
||||
pdfjs-views-manager-pages-status-action-label =
|
||||
{ $count ->
|
||||
[one] { $count } zaznaczona
|
||||
[few] { $count } zaznaczone
|
||||
*[many] { $count } zaznaczonych
|
||||
}
|
||||
pdfjs-views-manager-pages-status-none-action-label = Zaznacz strony
|
||||
pdfjs-views-manager-pages-status-action-button-label = Zarządzaj
|
||||
pdfjs-views-manager-pages-status-copy-button-label = Kopiuj
|
||||
pdfjs-views-manager-pages-status-cut-button-label = Wytnij
|
||||
pdfjs-views-manager-pages-status-delete-button-label = Usuń
|
||||
pdfjs-views-manager-pages-status-save-as-button-label = Zapisz jako…
|
||||
# Variables:
|
||||
# $count (Number) - the number of selected pages to be cut.
|
||||
pdfjs-views-manager-status-undo-cut-label =
|
||||
{ $count ->
|
||||
[one] Wycięto 1 stronę
|
||||
[few] Wycięto { $count } strony
|
||||
*[many] Wycięto { $count } stron
|
||||
}
|
||||
# Variables:
|
||||
# $count (Number) - the number of selected pages to be copied.
|
||||
pdfjs-views-manager-pages-status-undo-copy-label =
|
||||
{ $count ->
|
||||
[one] Skopiowano 1 stronę
|
||||
[few] Skopiowano { $count } strony
|
||||
*[many] Skopiowano { $count } stron
|
||||
}
|
||||
# Variables:
|
||||
# $count (Number) - the number of selected pages to be deleted.
|
||||
pdfjs-views-manager-pages-status-undo-delete-label =
|
||||
{ $count ->
|
||||
[one] Usunięto 1 stronę
|
||||
[few] Usunięto { $count } strony
|
||||
*[many] Usunięto { $count } stron
|
||||
}
|
||||
pdfjs-views-manager-pages-status-waiting-ready-label = Przygotowywanie pliku…
|
||||
pdfjs-views-manager-pages-status-waiting-uploading-label = Przesyłanie pliku…
|
||||
pdfjs-views-manager-status-warning-cut-label = Nie udało się wyciąć. Odśwież stronę i spróbuj ponownie.
|
||||
pdfjs-views-manager-status-warning-copy-label = Nie udało się skopiować. Odśwież stronę i spróbuj ponownie.
|
||||
pdfjs-views-manager-status-warning-delete-label = Nie udało się usunąć. Odśwież stronę i spróbuj ponownie.
|
||||
pdfjs-views-manager-status-warning-save-label = Nie udało się zachować. Odśwież stronę i spróbuj ponownie.
|
||||
pdfjs-views-manager-status-undo-button-label = Cofnij
|
||||
pdfjs-views-manager-status-close-button =
|
||||
.title = Zamknij
|
||||
pdfjs-views-manager-status-close-button-label = Zamknij
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -201,6 +201,10 @@ pdfjs-thumb-page-title =
|
||||
# $page (Number) - the page number
|
||||
pdfjs-thumb-page-canvas =
|
||||
.aria-label = Миниатюра страницы { $page }
|
||||
# Variables:
|
||||
# $page (Number) - the page number
|
||||
pdfjs-thumb-page-checkbox =
|
||||
.aria-label = Выбрать страницу { $page }
|
||||
|
||||
## Find panel button title and messages
|
||||
|
||||
@ -652,6 +656,8 @@ pdfjs-toggle-views-manager-notification-button =
|
||||
pdfjs-toggle-views-manager-button-label = Показать/скрыть боковую панель
|
||||
pdfjs-views-manager-sidebar =
|
||||
.aria-label = Боковая панель
|
||||
pdfjs-views-manager-sidebar-resizer =
|
||||
.aria-label = Изменение размера боковой панели
|
||||
pdfjs-views-manager-view-selector-button =
|
||||
.title = Вид
|
||||
pdfjs-views-manager-view-selector-button-label = Вид
|
||||
@ -714,6 +720,7 @@ pdfjs-views-manager-status-undo-button-label = Отменить
|
||||
pdfjs-views-manager-status-close-button =
|
||||
.title = Закрыть
|
||||
pdfjs-views-manager-status-close-button-label = Закрыть
|
||||
pdfjs-views-manager-paste-button-label = Вставить
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
|
||||
@ -540,6 +540,7 @@ pdfjs-editor-undo-bar-message-freetext = Besedilo odstranjeno
|
||||
pdfjs-editor-undo-bar-message-ink = Risba odstranjena
|
||||
pdfjs-editor-undo-bar-message-stamp = Slika odstranjena
|
||||
pdfjs-editor-undo-bar-message-signature = Podpis odstranjen
|
||||
pdfjs-editor-undo-bar-message-comment = Komentar odstranjen
|
||||
# Variables:
|
||||
# $count (Number) - the number of removed annotations.
|
||||
pdfjs-editor-undo-bar-message-multiple =
|
||||
|
||||
@ -201,6 +201,10 @@ pdfjs-thumb-page-title =
|
||||
# $page (Number) - the page number
|
||||
pdfjs-thumb-page-canvas =
|
||||
.aria-label = Miniatyr av sida { $page }
|
||||
# Variables:
|
||||
# $page (Number) - the page number
|
||||
pdfjs-thumb-page-checkbox =
|
||||
.aria-label = Välj sida { $page }
|
||||
|
||||
## Find panel button title and messages
|
||||
|
||||
@ -648,6 +652,8 @@ pdfjs-toggle-views-manager-notification-button =
|
||||
pdfjs-toggle-views-manager-button-label = Visa/dölj sidofält
|
||||
pdfjs-views-manager-sidebar =
|
||||
.aria-label = Sidofält
|
||||
pdfjs-views-manager-sidebar-resizer =
|
||||
.aria-label = Storleksändring av sidofält
|
||||
pdfjs-views-manager-view-selector-button =
|
||||
.title = Vyer
|
||||
pdfjs-views-manager-view-selector-button-label = Vyer
|
||||
@ -706,6 +712,7 @@ pdfjs-views-manager-status-undo-button-label = Ångra
|
||||
pdfjs-views-manager-status-close-button =
|
||||
.title = Stäng
|
||||
pdfjs-views-manager-status-close-button-label = Stäng
|
||||
pdfjs-views-manager-paste-button-label = Klistra in
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
|
||||
@ -288,9 +288,13 @@ pdfjs-web-fonts-disabled = Вебшрифти вимкнено: неможлив
|
||||
|
||||
pdfjs-editor-free-text-button =
|
||||
.title = Текст
|
||||
pdfjs-editor-color-picker-free-text-input =
|
||||
.title = Змінити колір тексту
|
||||
pdfjs-editor-free-text-button-label = Текст
|
||||
pdfjs-editor-ink-button =
|
||||
.title = Малювати
|
||||
pdfjs-editor-color-picker-ink-input =
|
||||
.title = Змінити колір малюнка
|
||||
pdfjs-editor-ink-button-label = Малювати
|
||||
pdfjs-editor-stamp-button =
|
||||
.title = Додати чи редагувати зображення
|
||||
@ -302,6 +306,14 @@ pdfjs-highlight-floating-button1 =
|
||||
.title = Підсвітити
|
||||
.aria-label = Підсвітити
|
||||
pdfjs-highlight-floating-button-label = Підсвітити
|
||||
pdfjs-comment-floating-button =
|
||||
.title = Коментувати
|
||||
.aria-label = Коментувати
|
||||
pdfjs-comment-floating-button-label = Коментувати
|
||||
pdfjs-editor-comment-button =
|
||||
.title = Коментар
|
||||
.aria-label = Коментар
|
||||
pdfjs-editor-comment-button-label = Коментар
|
||||
pdfjs-editor-signature-button =
|
||||
.title = Додати підпис
|
||||
pdfjs-editor-signature-button-label = Додати підпис
|
||||
@ -364,6 +376,22 @@ pdfjs-editor-add-saved-signature-button =
|
||||
pdfjs-free-text2 =
|
||||
.aria-label = Текстовий редактор
|
||||
.default-content = Напишіть щось…
|
||||
# Used to show how many comments are present in the pdf file.
|
||||
# Variables:
|
||||
# $count (Number) - the number of comments.
|
||||
pdfjs-editor-comments-sidebar-title =
|
||||
{ $count ->
|
||||
[one] Коментар
|
||||
[few] Коментарі
|
||||
*[many] Коментарі
|
||||
}
|
||||
pdfjs-editor-comments-sidebar-close-button =
|
||||
.title = Закрити бічну панель
|
||||
.aria-label = Закрити бічну панель
|
||||
pdfjs-editor-comments-sidebar-close-button-label = Закрити бічну панель
|
||||
# Instructional copy to add a comment by selecting text or an annotations.
|
||||
pdfjs-editor-comments-sidebar-no-comments1 = Бачите щось варте уваги? Підсвітіть і додайте коментар.
|
||||
pdfjs-editor-comments-sidebar-no-comments-link = Докладніше
|
||||
|
||||
## Alt-text dialog
|
||||
|
||||
@ -494,6 +522,14 @@ pdfjs-editor-alt-text-settings-show-dialog-button-label = Показувати
|
||||
pdfjs-editor-alt-text-settings-show-dialog-description = Допомагає переконатися, що всі ваші зображення мають альтернативний текст.
|
||||
pdfjs-editor-alt-text-settings-close-button = Закрити
|
||||
|
||||
## Accessibility labels (announced by screen readers) for objects added to the editor.
|
||||
|
||||
pdfjs-editor-highlight-added-alert = Підсвічення додано
|
||||
pdfjs-editor-freetext-added-alert = Текст додано
|
||||
pdfjs-editor-ink-added-alert = Малюнок додано
|
||||
pdfjs-editor-stamp-added-alert = Зображення додано
|
||||
pdfjs-editor-signature-added-alert = Підпис додано
|
||||
|
||||
## "Annotations removed" bar
|
||||
|
||||
pdfjs-editor-undo-bar-message-highlight = Підсвічення вилучено
|
||||
@ -501,6 +537,7 @@ pdfjs-editor-undo-bar-message-freetext = Текст вилучено
|
||||
pdfjs-editor-undo-bar-message-ink = Малюнок вилучено
|
||||
pdfjs-editor-undo-bar-message-stamp = Зображення вилучено
|
||||
pdfjs-editor-undo-bar-message-signature = Підпис вилучено
|
||||
pdfjs-editor-undo-bar-message-comment = Коментар вилучено
|
||||
# Variables:
|
||||
# $count (Number) - the number of removed annotations.
|
||||
pdfjs-editor-undo-bar-message-multiple =
|
||||
@ -563,6 +600,8 @@ pdfjs-editor-add-signature-save-checkbox = Зберегти підпис
|
||||
pdfjs-editor-add-signature-save-warning-message = Ви досягли ліміту в 5 збережених підписів. Вилучіть один, щоб зберегти інший.
|
||||
pdfjs-editor-add-signature-image-upload-error-title = Не вдалося вивантажити зображення
|
||||
pdfjs-editor-add-signature-image-upload-error-description = Перевірте мережеве з'єднання або спробуйте інше зображення.
|
||||
pdfjs-editor-add-signature-image-no-data-error-title = Не вдається конвертувати це зображення в підпис
|
||||
pdfjs-editor-add-signature-image-no-data-error-description = Спробуйте вивантажити інше зображення.
|
||||
pdfjs-editor-add-signature-error-close-button = Закрити
|
||||
|
||||
## Dialog buttons
|
||||
@ -571,6 +610,111 @@ pdfjs-editor-add-signature-cancel-button = Скасувати
|
||||
pdfjs-editor-add-signature-add-button = Додати
|
||||
pdfjs-editor-edit-signature-update-button = Оновити
|
||||
|
||||
## Comment popup
|
||||
|
||||
pdfjs-editor-edit-comment-popup-button-label = Редагувати коментар
|
||||
pdfjs-editor-edit-comment-popup-button =
|
||||
.title = Редагувати коментар
|
||||
pdfjs-editor-delete-comment-popup-button-label = Вилучити коментар
|
||||
pdfjs-editor-delete-comment-popup-button =
|
||||
.title = Вилучити коментар
|
||||
pdfjs-show-comment-button =
|
||||
.title = Показати коментар
|
||||
|
||||
## Edit a comment dialog
|
||||
|
||||
# An existing comment is edited
|
||||
pdfjs-editor-edit-comment-dialog-title-when-editing = Редагувати коментар
|
||||
pdfjs-editor-edit-comment-dialog-save-button-when-editing = Оновити
|
||||
# No existing comment
|
||||
pdfjs-editor-edit-comment-dialog-title-when-adding = Додати коментар
|
||||
pdfjs-editor-edit-comment-dialog-save-button-when-adding = Додати
|
||||
pdfjs-editor-edit-comment-dialog-text-input =
|
||||
.placeholder = Почніть вводити…
|
||||
pdfjs-editor-edit-comment-dialog-cancel-button = Скасувати
|
||||
|
||||
## Edit a comment button in the editor toolbar
|
||||
|
||||
pdfjs-editor-add-comment-button =
|
||||
.title = Додати коментар
|
||||
|
||||
## The view manager is a sidebar displaying different views:
|
||||
## - thumbnails;
|
||||
## - outline;
|
||||
## - attachments;
|
||||
## - layers.
|
||||
## The thumbnails view is used to edit the pdf: remove/insert pages, ...
|
||||
|
||||
pdfjs-toggle-views-manager-button =
|
||||
.title = Перемкнути бічну панель
|
||||
pdfjs-toggle-views-manager-notification-button =
|
||||
.title = Перемкнути бічну панель (документ містить мініатюри/ескіз/вкладення/шари)
|
||||
pdfjs-toggle-views-manager-button-label = Перемкнути бічну панель
|
||||
pdfjs-views-manager-sidebar =
|
||||
.aria-label = Бічна панель
|
||||
pdfjs-views-manager-view-selector-button =
|
||||
.title = Вигляд
|
||||
pdfjs-views-manager-view-selector-button-label = Вигляд
|
||||
pdfjs-views-manager-pages-title = Сторінки
|
||||
pdfjs-views-manager-outlines-title = Схема документа
|
||||
pdfjs-views-manager-attachments-title = Вкладення
|
||||
pdfjs-views-manager-layers-title = Шари
|
||||
pdfjs-views-manager-pages-option-label = Сторінки
|
||||
pdfjs-views-manager-outlines-option-label = Схема документа
|
||||
pdfjs-views-manager-attachments-option-label = Вкладення
|
||||
pdfjs-views-manager-layers-option-label = Шари
|
||||
pdfjs-views-manager-add-file-button =
|
||||
.title = Додати файл
|
||||
pdfjs-views-manager-add-file-button-label = Додати файл
|
||||
# Variables:
|
||||
# $count (Number) - the number of selected pages.
|
||||
pdfjs-views-manager-pages-status-action-label =
|
||||
{ $count ->
|
||||
[one] Вибрано { $count }
|
||||
[few] Вибрано { $count }
|
||||
*[many] Вибрано { $count }
|
||||
}
|
||||
pdfjs-views-manager-pages-status-none-action-label = Вибрати сторінки
|
||||
pdfjs-views-manager-pages-status-action-button-label = Керувати
|
||||
pdfjs-views-manager-pages-status-copy-button-label = Копіювати
|
||||
pdfjs-views-manager-pages-status-cut-button-label = Вирізати
|
||||
pdfjs-views-manager-pages-status-delete-button-label = Видалити
|
||||
pdfjs-views-manager-pages-status-save-as-button-label = Зберегти як…
|
||||
# Variables:
|
||||
# $count (Number) - the number of selected pages to be cut.
|
||||
pdfjs-views-manager-status-undo-cut-label =
|
||||
{ $count ->
|
||||
[one] 1 сторінку вирізано
|
||||
[few] { $count } сторінки вирізано
|
||||
*[many] { $count } сторінок вирізано
|
||||
}
|
||||
# Variables:
|
||||
# $count (Number) - the number of selected pages to be copied.
|
||||
pdfjs-views-manager-pages-status-undo-copy-label =
|
||||
{ $count ->
|
||||
[one] 1 сторінку скопійовано
|
||||
[few] { $count } сторінки скопійовано
|
||||
*[many] { $count } сторінок скопійовано
|
||||
}
|
||||
# Variables:
|
||||
# $count (Number) - the number of selected pages to be deleted.
|
||||
pdfjs-views-manager-pages-status-undo-delete-label =
|
||||
{ $count ->
|
||||
[one] 1 сторінку видалено
|
||||
[few] { $count } сторінки видалено
|
||||
*[many] { $count } сторінок видалено
|
||||
}
|
||||
pdfjs-views-manager-pages-status-waiting-ready-label = Підготовка файлу…
|
||||
pdfjs-views-manager-pages-status-waiting-uploading-label = Вивантаження файлу…
|
||||
pdfjs-views-manager-status-warning-cut-label = Не вдалося вирізати. Оновіть сторінку та спробуйте ще раз.
|
||||
pdfjs-views-manager-status-warning-copy-label = Не вдалося скопіювати. Оновіть сторінку та спробуйте ще раз.
|
||||
pdfjs-views-manager-status-warning-delete-label = Не вдалося видалити. Оновіть сторінку та спробуйте ще раз.
|
||||
pdfjs-views-manager-status-warning-save-label = Не вдалося зберегти. Оновіть сторінку та спробуйте ще раз.
|
||||
pdfjs-views-manager-status-undo-button-label = Повернути
|
||||
pdfjs-views-manager-status-close-button =
|
||||
.title = Закрити
|
||||
pdfjs-views-manager-status-close-button-label = Закрити
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
pdfjs-editor-delete-signature-button1 =
|
||||
|
||||
@ -201,6 +201,10 @@ pdfjs-thumb-page-title =
|
||||
# $page (Number) - the page number
|
||||
pdfjs-thumb-page-canvas =
|
||||
.aria-label = Ảnh thu nhỏ của trang { $page }
|
||||
# Variables:
|
||||
# $page (Number) - the page number
|
||||
pdfjs-thumb-page-checkbox =
|
||||
.aria-label = Chọn trang { $page }
|
||||
|
||||
## Find panel button title and messages
|
||||
|
||||
@ -632,6 +636,8 @@ pdfjs-toggle-views-manager-notification-button =
|
||||
pdfjs-toggle-views-manager-button-label = Bật/tắt thanh lề
|
||||
pdfjs-views-manager-sidebar =
|
||||
.aria-label = Thanh lề
|
||||
pdfjs-views-manager-sidebar-resizer =
|
||||
.aria-label = Công cụ điều chỉnh kích thước thanh lề
|
||||
pdfjs-views-manager-view-selector-button =
|
||||
.title = Chế độ hiển thị
|
||||
pdfjs-views-manager-view-selector-button-label = Chế độ hiển thị
|
||||
@ -674,6 +680,7 @@ pdfjs-views-manager-status-undo-button-label = Hoàn tác
|
||||
pdfjs-views-manager-status-close-button =
|
||||
.title = Đóng
|
||||
pdfjs-views-manager-status-close-button-label = Đóng
|
||||
pdfjs-views-manager-paste-button-label = Dán
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
|
||||
@ -201,6 +201,10 @@ pdfjs-thumb-page-title =
|
||||
# $page (Number) - the page number
|
||||
pdfjs-thumb-page-canvas =
|
||||
.aria-label = 第 { $page } 頁的縮圖
|
||||
# Variables:
|
||||
# $page (Number) - the page number
|
||||
pdfjs-thumb-page-checkbox =
|
||||
.aria-label = 選擇第 { $page } 頁
|
||||
|
||||
## Find panel button title and messages
|
||||
|
||||
@ -632,6 +636,8 @@ pdfjs-toggle-views-manager-notification-button =
|
||||
pdfjs-toggle-views-manager-button-label = 切換側邊欄
|
||||
pdfjs-views-manager-sidebar =
|
||||
.aria-label = 側邊欄
|
||||
pdfjs-views-manager-sidebar-resizer =
|
||||
.aria-label = 調整側邊欄大小
|
||||
pdfjs-views-manager-view-selector-button =
|
||||
.title = 畫面
|
||||
pdfjs-views-manager-view-selector-button-label = 畫面
|
||||
@ -674,6 +680,7 @@ pdfjs-views-manager-status-undo-button-label = 還原
|
||||
pdfjs-views-manager-status-close-button =
|
||||
.title = 關閉
|
||||
pdfjs-views-manager-status-close-button-label = 關閉
|
||||
pdfjs-views-manager-paste-button-label = 貼上
|
||||
|
||||
## Main menu for adding/removing signatures
|
||||
|
||||
|
||||
32
package-lock.json
generated
32
package-lock.json
generated
@ -108,7 +108,6 @@
|
||||
"integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@babel/code-frame": "^7.29.0",
|
||||
"@babel/generator": "^7.29.0",
|
||||
@ -1648,7 +1647,6 @@
|
||||
"integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@keyv/serialize": "^1.1.1"
|
||||
}
|
||||
@ -1690,7 +1688,6 @@
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=20.19.0"
|
||||
},
|
||||
@ -1731,7 +1728,6 @@
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=20.19.0"
|
||||
}
|
||||
@ -3124,7 +3120,6 @@
|
||||
"integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@types/estree": "*",
|
||||
"@types/json-schema": "*"
|
||||
@ -3189,7 +3184,6 @@
|
||||
"integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@types/linkify-it": "^5",
|
||||
"@types/mdurl": "^2"
|
||||
@ -3616,7 +3610,6 @@
|
||||
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"bin": {
|
||||
"acorn": "bin/acorn"
|
||||
},
|
||||
@ -4272,8 +4265,7 @@
|
||||
"resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.7.0.tgz",
|
||||
"integrity": "sha512-b3N5eTW1g7vXkw+0CXh/HazGTcO5KYuu/RCNaJbDMPI6LHDi+7qe8EmxKUVe1sUbY2KZOVZFyj62x0OEz9qyAA==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"peer": true
|
||||
"license": "Apache-2.0"
|
||||
},
|
||||
"node_modules/bare-fs": {
|
||||
"version": "4.5.4",
|
||||
@ -4389,9 +4381,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/basic-ftp": {
|
||||
"version": "5.1.0",
|
||||
"resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.1.0.tgz",
|
||||
"integrity": "sha512-RkaJzeJKDbaDWTIPiJwubyljaEPwpVWkm9Rt5h9Nd6h7tEXTJ3VB4qxdZBioV7JO5yLUaOKwz7vDOzlncUsegw==",
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.2.0.tgz",
|
||||
"integrity": "sha512-VoMINM2rqJwJgfdHq6RiUudKt2BV+FY5ZFezP/ypmwayk68+NzzAQy4XXLlqsGD4MCzq3DrmNFD/uUmBJuGoXw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
@ -4509,7 +4501,6 @@
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"baseline-browser-mapping": "^2.9.0",
|
||||
"caniuse-lite": "^1.0.30001759",
|
||||
@ -5770,8 +5761,7 @@
|
||||
"resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1566079.tgz",
|
||||
"integrity": "sha512-MJfAEA1UfVhSs7fbSQOG4czavUp1ajfg6prlAN0+cmfa2zNjaIbvq8VneP7do1WAQQIvgNJWSMeP6UyI90gIlQ==",
|
||||
"dev": true,
|
||||
"license": "BSD-3-Clause",
|
||||
"peer": true
|
||||
"license": "BSD-3-Clause"
|
||||
},
|
||||
"node_modules/dir-glob": {
|
||||
"version": "3.0.1",
|
||||
@ -6308,7 +6298,6 @@
|
||||
"integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@eslint-community/eslint-utils": "^4.8.0",
|
||||
"@eslint-community/regexpp": "^4.12.1",
|
||||
@ -6369,7 +6358,6 @@
|
||||
"integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"bin": {
|
||||
"eslint-config-prettier": "bin/cli.js"
|
||||
},
|
||||
@ -7750,7 +7738,6 @@
|
||||
"integrity": "sha512-PErok3DZSA5WGMd6XXV3IRNO0mlB+wW3OzhFJLEec1jSERg2j1bxJ6e5Fh6N6fn3FH2T9AP4UYNb/pYlADB9sA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"glob-watcher": "^6.0.0",
|
||||
"gulp-cli": "^3.1.0",
|
||||
@ -9832,7 +9819,6 @@
|
||||
"integrity": "sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"argparse": "^2.0.1",
|
||||
"entities": "^4.4.0",
|
||||
@ -9974,7 +9960,6 @@
|
||||
"integrity": "sha512-DkoXO1jz0UY+k1tj1LpxYLrN+jeGKBicbtsQYeYF8nX9QK4AGyGh4g421qsmEOGfZ02GjW1qxr1XP+8afwcTGQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"chokidar": "^4.0.3",
|
||||
"commander": "^11.1.0",
|
||||
@ -11045,7 +11030,6 @@
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"nanoid": "^3.3.11",
|
||||
"picocolors": "^1.1.1",
|
||||
@ -11198,7 +11182,6 @@
|
||||
"integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"cssesc": "^3.0.0",
|
||||
"util-deprecate": "^1.0.2"
|
||||
@ -11251,7 +11234,6 @@
|
||||
"integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"bin": {
|
||||
"prettier": "bin/prettier.cjs"
|
||||
},
|
||||
@ -12128,7 +12110,6 @@
|
||||
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"fast-deep-equal": "^3.1.3",
|
||||
"fast-uri": "^3.0.1",
|
||||
@ -13871,7 +13852,6 @@
|
||||
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
},
|
||||
@ -14125,7 +14105,6 @@
|
||||
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"peer": true,
|
||||
"bin": {
|
||||
"tsc": "bin/tsc",
|
||||
"tsserver": "bin/tsserver"
|
||||
@ -14512,7 +14491,6 @@
|
||||
"integrity": "sha512-dRXm0a2qcHPUBEzVk8uph0xWSjV/xZxenQQbLwnwP7caQCYpqG1qddwlyEkIDkYn0K8tvmcrZ+bOrzoQ3HxCDw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@types/eslint-scope": "^3.7.7",
|
||||
"@types/estree": "^1.0.8",
|
||||
|
||||
@ -330,15 +330,21 @@ class AnnotationStorage {
|
||||
* contents. (Necessary since printing is triggered synchronously in browsers.)
|
||||
*/
|
||||
class PrintAnnotationStorage extends AnnotationStorage {
|
||||
#serializable;
|
||||
#serializable = SerializableEmpty;
|
||||
|
||||
constructor(parent) {
|
||||
super();
|
||||
const { map, hash, transfer } = parent.serializable;
|
||||
|
||||
const { serializable } = parent;
|
||||
if (serializable === SerializableEmpty) {
|
||||
return;
|
||||
}
|
||||
const { map, hash, transfer } = serializable;
|
||||
// Create a *copy* of the data, since Objects are passed by reference in JS.
|
||||
const clone = structuredClone(map, transfer ? { transfer } : null);
|
||||
|
||||
this.#serializable = { map: clone, hash, transfer };
|
||||
// The `PrintAnnotationStorage` instance is re-used for all pages,
|
||||
// hence we cannot transfer the data since that breaks printing.
|
||||
this.#serializable = { map: clone, hash, transfer: [] };
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -1898,6 +1898,7 @@ class PDFPageProxy {
|
||||
annotationStorage: map,
|
||||
modifiedIds,
|
||||
},
|
||||
/* queueingStrategy = */ undefined,
|
||||
transfer
|
||||
);
|
||||
const reader = readableStream.getReader();
|
||||
|
||||
@ -803,6 +803,10 @@ class Driver {
|
||||
}
|
||||
|
||||
task.pdfDoc = doc;
|
||||
if (!task.save && task.print && task.annotationStorage) {
|
||||
doc.annotationStorage._setValues(task.annotationStorage);
|
||||
task.printAnnotationStorage = doc.annotationStorage.print;
|
||||
}
|
||||
task.optionalContentConfigPromise = doc.getOptionalContentConfig({
|
||||
intent: task.print ? "print" : "display",
|
||||
});
|
||||
@ -969,7 +973,7 @@ class Driver {
|
||||
pageColors = null,
|
||||
partialCrop = null;
|
||||
|
||||
if (task.annotationStorage) {
|
||||
if (!task.print && task.annotationStorage) {
|
||||
task.pdfDoc.annotationStorage._setValues(task.annotationStorage);
|
||||
}
|
||||
|
||||
@ -1079,6 +1083,8 @@ class Driver {
|
||||
} else if (renderPrint) {
|
||||
if (task.annotationStorage) {
|
||||
renderContext.annotationMode = AnnotationMode.ENABLE_STORAGE;
|
||||
renderContext.printAnnotationStorage =
|
||||
task.printAnnotationStorage;
|
||||
}
|
||||
renderContext.intent = "print";
|
||||
}
|
||||
|
||||
@ -28,12 +28,13 @@ import {
|
||||
kbDelete,
|
||||
loadAndWait,
|
||||
scrollIntoView,
|
||||
showViewsManager,
|
||||
waitAndClick,
|
||||
waitForDOMMutation,
|
||||
} from "./test_utils.mjs";
|
||||
|
||||
async function waitForThumbnailVisible(page, pageNums) {
|
||||
await page.click("#viewsManagerToggleButton");
|
||||
await showViewsManager(page);
|
||||
|
||||
const thumbSelector = "#thumbnailsView .thumbnailImageContainer > img";
|
||||
await page.waitForSelector(thumbSelector, { visible: true });
|
||||
@ -283,12 +284,12 @@ describe("Reorganize Pages View", () => {
|
||||
await waitForThumbnailVisible(page, 1);
|
||||
const rect1 = await getRect(page, getThumbnailSelector(1));
|
||||
const rect2 = await getRect(page, getThumbnailSelector(2));
|
||||
await (await page.$(".thumbnail[page-id='14'")).scrollIntoView();
|
||||
await (await page.$(".thumbnail[page-number='14'")).scrollIntoView();
|
||||
await page.waitForSelector(getThumbnailSelector(14), {
|
||||
visible: true,
|
||||
});
|
||||
await page.click(`.thumbnail:has(${getThumbnailSelector(14)}) input`);
|
||||
await (await page.$(".thumbnail[page-id='1'")).scrollIntoView();
|
||||
await (await page.$(".thumbnail[page-number='1'")).scrollIntoView();
|
||||
await page.waitForSelector(getThumbnailSelector(1), {
|
||||
visible: true,
|
||||
});
|
||||
|
||||
@ -262,7 +262,7 @@ function getAnnotationSelector(id) {
|
||||
}
|
||||
|
||||
function getThumbnailSelector(pageNumber) {
|
||||
return `.thumbnailImageContainer[data-l10n-args='{"page":${pageNumber}}']`;
|
||||
return `.thumbnailImageContainer[data-l10n-args^='{"page":${pageNumber}']`;
|
||||
}
|
||||
|
||||
async function getSpanRectFromText(page, pageNumber, text) {
|
||||
@ -645,6 +645,7 @@ function waitForEditorMovedInDOM(page) {
|
||||
}
|
||||
|
||||
async function scrollIntoView(page, selector) {
|
||||
await page.waitForSelector(selector, { visible: true });
|
||||
const handle = await page.evaluateHandle(
|
||||
sel => [
|
||||
new Promise(resolve => {
|
||||
@ -964,6 +965,29 @@ async function highlightSpan(
|
||||
await page.waitForSelector(getEditorSelector(nextId));
|
||||
}
|
||||
|
||||
async function showViewsManager(page) {
|
||||
const hasAnimations = await page.evaluate(
|
||||
() => !window.matchMedia("(prefers-reduced-motion: reduce)").matches
|
||||
);
|
||||
const movingPromise = hasAnimations
|
||||
? page.waitForSelector("#outerContainer.viewsManagerMoving", {
|
||||
visible: true,
|
||||
})
|
||||
: Promise.resolve();
|
||||
await page.click("#viewsManagerToggleButton");
|
||||
if (hasAnimations) {
|
||||
await movingPromise;
|
||||
}
|
||||
await page.waitForSelector("#viewsManager", { visible: true });
|
||||
await page.waitForSelector(
|
||||
"#outerContainer:not(.viewsManagerMoving).viewsManagerOpen",
|
||||
{ visible: true }
|
||||
);
|
||||
await page.waitForSelector("#viewsManagerStatusActionButton:not(:disabled)", {
|
||||
visible: true,
|
||||
});
|
||||
}
|
||||
|
||||
// Unicode bidi isolation characters, Fluent adds these markers to the text.
|
||||
const FSI = "\u2068";
|
||||
const PDI = "\u2069";
|
||||
@ -1030,6 +1054,7 @@ export {
|
||||
selectEditors,
|
||||
serializeBitmapDimensions,
|
||||
setCaretAt,
|
||||
showViewsManager,
|
||||
switchToEditor,
|
||||
unselectEditor,
|
||||
waitAndClick,
|
||||
|
||||
@ -2,16 +2,15 @@ import {
|
||||
awaitPromise,
|
||||
closePages,
|
||||
FSI,
|
||||
getThumbnailSelector,
|
||||
kbFocusNext,
|
||||
loadAndWait,
|
||||
PDI,
|
||||
showViewsManager,
|
||||
} from "./test_utils.mjs";
|
||||
|
||||
function waitForThumbnailVisible(page, pageNum) {
|
||||
return page.waitForSelector(
|
||||
`.thumbnailImageContainer[data-l10n-args='{"page":${pageNum}}']`,
|
||||
{ visible: true }
|
||||
);
|
||||
return page.waitForSelector(getThumbnailSelector(pageNum), { visible: true });
|
||||
}
|
||||
|
||||
async function waitForMenu(page, buttonSelector, visible = true) {
|
||||
@ -44,7 +43,7 @@ describe("PDF Thumbnail View", () => {
|
||||
it("should render thumbnails without errors", async () => {
|
||||
await Promise.all(
|
||||
pages.map(async ([browserName, page]) => {
|
||||
await page.click("#viewsManagerToggleButton");
|
||||
await showViewsManager(page);
|
||||
|
||||
const thumbSelector =
|
||||
"#thumbnailsView .thumbnailImageContainer > img";
|
||||
@ -55,6 +54,14 @@ describe("PDF Thumbnail View", () => {
|
||||
await page.waitForSelector(`${thumbSelector}[src^="blob:http:"]`, {
|
||||
visible: true,
|
||||
});
|
||||
|
||||
const title = await page.$eval(
|
||||
getThumbnailSelector(1),
|
||||
el => el.title
|
||||
);
|
||||
expect(title)
|
||||
.withContext(`In ${browserName}`)
|
||||
.toBe(`Page ${FSI}1${PDI} of ${FSI}14${PDI}`);
|
||||
})
|
||||
);
|
||||
});
|
||||
@ -62,7 +69,7 @@ describe("PDF Thumbnail View", () => {
|
||||
it("should have accessible label on resizer", async () => {
|
||||
await Promise.all(
|
||||
pages.map(async ([browserName, page]) => {
|
||||
await page.click("#viewsManagerToggleButton");
|
||||
await showViewsManager(page);
|
||||
|
||||
const ariaLabel = await page.$eval("#viewsManagerResizer", el =>
|
||||
el.getAttribute("aria-label")
|
||||
@ -104,13 +111,12 @@ describe("PDF Thumbnail View", () => {
|
||||
it("should scroll the view", async () => {
|
||||
await Promise.all(
|
||||
pages.map(async ([browserName, page]) => {
|
||||
await page.click("#viewsManagerToggleButton");
|
||||
|
||||
await showViewsManager(page);
|
||||
await waitForThumbnailVisible(page, 1);
|
||||
|
||||
for (const pageNum of [14, 1, 13, 2]) {
|
||||
await goToPage(page, pageNum);
|
||||
const thumbSelector = `.thumbnailImageContainer[data-l10n-args='{"page":${pageNum}}']`;
|
||||
const thumbSelector = getThumbnailSelector(pageNum);
|
||||
await page.waitForSelector(
|
||||
`.thumbnail ${thumbSelector}[aria-current="page"]`,
|
||||
{ visible: true }
|
||||
@ -141,8 +147,7 @@ describe("PDF Thumbnail View", () => {
|
||||
it("should navigate with the keyboard", async () => {
|
||||
await Promise.all(
|
||||
pages.map(async ([browserName, page]) => {
|
||||
await page.click("#viewsManagerToggleButton");
|
||||
|
||||
await showViewsManager(page);
|
||||
await waitForThumbnailVisible(page, 1);
|
||||
await waitForThumbnailVisible(page, 2);
|
||||
await waitForThumbnailVisible(page, 3);
|
||||
@ -159,26 +164,25 @@ describe("PDF Thumbnail View", () => {
|
||||
|
||||
await kbFocusNext(page);
|
||||
await page.waitForSelector(
|
||||
`#thumbnailsView .thumbnailImageContainer[data-l10n-args='{"page":1}']:focus`,
|
||||
`#thumbnailsView ${getThumbnailSelector(1)}:focus`,
|
||||
{ visible: true }
|
||||
);
|
||||
|
||||
await page.keyboard.press("ArrowDown");
|
||||
await page.waitForSelector(
|
||||
`#thumbnailsView .thumbnailImageContainer[data-l10n-args='{"page":2}']:focus`,
|
||||
`#thumbnailsView ${getThumbnailSelector(2)}:focus`,
|
||||
{ visible: true }
|
||||
);
|
||||
|
||||
await page.keyboard.press("ArrowUp");
|
||||
await page.waitForSelector(
|
||||
`#thumbnailsView .thumbnailImageContainer[data-l10n-args='{"page":1}']:focus`,
|
||||
{ visible: true }
|
||||
);
|
||||
await page.waitForSelector(`${getThumbnailSelector(1)}:focus`, {
|
||||
visible: true,
|
||||
});
|
||||
|
||||
await page.keyboard.press("ArrowDown");
|
||||
await page.keyboard.press("ArrowDown");
|
||||
await page.waitForSelector(
|
||||
`#thumbnailsView .thumbnailImageContainer[data-l10n-args='{"page":3}']:focus`,
|
||||
`#thumbnailsView ${getThumbnailSelector(3)}:focus`,
|
||||
{ visible: true }
|
||||
);
|
||||
|
||||
@ -191,13 +195,13 @@ describe("PDF Thumbnail View", () => {
|
||||
|
||||
await page.keyboard.press("End");
|
||||
await page.waitForSelector(
|
||||
`#thumbnailsView .thumbnailImageContainer[data-l10n-args='{"page":14}']:focus`,
|
||||
`#thumbnailsView ${getThumbnailSelector(14)}:focus`,
|
||||
{ visible: true }
|
||||
);
|
||||
|
||||
await page.keyboard.press("Home");
|
||||
await page.waitForSelector(
|
||||
`#thumbnailsView .thumbnailImageContainer[data-l10n-args='{"page":1}']:focus`,
|
||||
`#thumbnailsView ${getThumbnailSelector(1)}:focus`,
|
||||
{ visible: true }
|
||||
);
|
||||
})
|
||||
@ -235,7 +239,7 @@ describe("PDF Thumbnail View", () => {
|
||||
it("should open with Enter key and remain open", async () => {
|
||||
await Promise.all(
|
||||
pages.map(async ([browserName, page]) => {
|
||||
await page.click("#viewsManagerToggleButton");
|
||||
await showViewsManager(page);
|
||||
await waitForThumbnailVisible(page, 1);
|
||||
|
||||
await enableMenuItems(page);
|
||||
@ -267,7 +271,7 @@ describe("PDF Thumbnail View", () => {
|
||||
it("should open with Space key and remain open", async () => {
|
||||
await Promise.all(
|
||||
pages.map(async ([browserName, page]) => {
|
||||
await page.click("#viewsManagerToggleButton");
|
||||
await showViewsManager(page);
|
||||
await waitForThumbnailVisible(page, 1);
|
||||
|
||||
await enableMenuItems(page);
|
||||
@ -323,18 +327,17 @@ describe("PDF Thumbnail View", () => {
|
||||
await closePages(pages);
|
||||
});
|
||||
|
||||
it("should have accessible label on checkbox", async () => {
|
||||
it("should have a title on the checkbox", async () => {
|
||||
await Promise.all(
|
||||
pages.map(async ([browserName, page]) => {
|
||||
await page.click("#viewsManagerToggleButton");
|
||||
|
||||
await showViewsManager(page);
|
||||
await waitForThumbnailVisible(page, 1);
|
||||
|
||||
const ariaLabel = await page.$eval(
|
||||
const title = await page.$eval(
|
||||
`.thumbnail[page-number="1"] input[type="checkbox"]`,
|
||||
el => el.getAttribute("aria-label")
|
||||
el => el.title
|
||||
);
|
||||
expect(ariaLabel)
|
||||
expect(title)
|
||||
.withContext(`In ${browserName}`)
|
||||
.toBe(`Select page ${FSI}1${PDI}`);
|
||||
})
|
||||
@ -362,7 +365,7 @@ describe("PDF Thumbnail View", () => {
|
||||
it("must navigate menus with ArrowDown and Tab keys", async () => {
|
||||
await Promise.all(
|
||||
pages.map(async ([browserName, page]) => {
|
||||
await page.click("#viewsManagerToggleButton");
|
||||
await showViewsManager(page);
|
||||
await waitForThumbnailVisible(page, 1);
|
||||
|
||||
// Focus the views manager selector button
|
||||
@ -431,7 +434,7 @@ describe("PDF Thumbnail View", () => {
|
||||
it("should show the manage button in thumbnail view and hide it in outline view", async () => {
|
||||
await Promise.all(
|
||||
pages.map(async ([browserName, page]) => {
|
||||
await page.click("#viewsManagerToggleButton");
|
||||
await showViewsManager(page);
|
||||
await waitForThumbnailVisible(page, 1);
|
||||
|
||||
// The status bar (Select pages + Manage button) must be visible in
|
||||
@ -471,8 +474,7 @@ describe("PDF Thumbnail View", () => {
|
||||
it("should focus checkboxes with Tab key", async () => {
|
||||
await Promise.all(
|
||||
pages.map(async ([browserName, page]) => {
|
||||
await page.click("#viewsManagerToggleButton");
|
||||
|
||||
await showViewsManager(page);
|
||||
await waitForThumbnailVisible(page, 1);
|
||||
|
||||
// Focus the first thumbnail button
|
||||
@ -481,10 +483,9 @@ describe("PDF Thumbnail View", () => {
|
||||
await kbFocusNext(page);
|
||||
|
||||
// Verify we're on the first thumbnail
|
||||
await page.waitForSelector(
|
||||
`#thumbnailsView .thumbnailImageContainer[data-l10n-args='{"page":1}']:focus`,
|
||||
{ visible: true }
|
||||
);
|
||||
await page.waitForSelector(`${getThumbnailSelector(1)}:focus`, {
|
||||
visible: true,
|
||||
});
|
||||
|
||||
// Tab to checkbox
|
||||
await kbFocusNext(page);
|
||||
@ -499,8 +500,7 @@ describe("PDF Thumbnail View", () => {
|
||||
it("should navigate checkboxes with arrow keys", async () => {
|
||||
await Promise.all(
|
||||
pages.map(async ([browserName, page]) => {
|
||||
await page.click("#viewsManagerToggleButton");
|
||||
|
||||
await showViewsManager(page);
|
||||
await waitForThumbnailVisible(page, 1);
|
||||
await waitForThumbnailVisible(page, 2);
|
||||
|
||||
|
||||
@ -21,6 +21,7 @@ import {
|
||||
getSpanRectFromText,
|
||||
loadAndWait,
|
||||
scrollIntoView,
|
||||
showViewsManager,
|
||||
waitForPageChanging,
|
||||
waitForPageRendered,
|
||||
} from "./test_utils.mjs";
|
||||
@ -1451,6 +1452,82 @@ describe("PDF viewer", () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe("Outline tree shift-click toggle (PR 20740)", () => {
|
||||
let pages;
|
||||
|
||||
beforeEach(async () => {
|
||||
pages = await loadAndWait(
|
||||
"nested_outline.pdf",
|
||||
"#viewsManagerToggleButton"
|
||||
);
|
||||
});
|
||||
|
||||
afterEach(async () => {
|
||||
await closePages(pages);
|
||||
});
|
||||
|
||||
it("should only toggle the clicked item's subtree, not the whole outline", async () => {
|
||||
await Promise.all(
|
||||
pages.map(async ([browserName, page]) => {
|
||||
// Open the sidebar.
|
||||
await showViewsManager(page);
|
||||
|
||||
// Switch to outline view.
|
||||
await page.click("#viewsManagerSelectorButton");
|
||||
await page.waitForSelector("#outlinesViewMenu", { visible: true });
|
||||
await page.click("#outlinesViewMenu");
|
||||
|
||||
// Wait for the outline tree to render with nesting (toggle buttons).
|
||||
await page.waitForSelector("#outlinesView.withNesting");
|
||||
|
||||
// Initially all three top-level togglers must be expanded.
|
||||
const initialHiddenCount = await page.$$eval(
|
||||
"#outlinesView > .treeItem > .treeItemToggler",
|
||||
togglers =>
|
||||
togglers.filter(t => t.classList.contains("treeItemsHidden"))
|
||||
.length
|
||||
);
|
||||
expect(initialHiddenCount).withContext(`In ${browserName}`).toBe(0);
|
||||
|
||||
// Shift-click the first top-level toggler (section "1. Introduction")
|
||||
// to collapse only its subtree.
|
||||
// The toggler has width/height 0 (visual content via ::before), so
|
||||
// we dispatch the MouseEvent directly rather than using page.click().
|
||||
await page.evaluate(() => {
|
||||
const toggler = document.querySelector(
|
||||
"#outlinesView > .treeItem:nth-child(1) > .treeItemToggler"
|
||||
);
|
||||
toggler.dispatchEvent(
|
||||
new MouseEvent("click", {
|
||||
shiftKey: true,
|
||||
bubbles: true,
|
||||
cancelable: true,
|
||||
})
|
||||
);
|
||||
});
|
||||
|
||||
// Section 1's toggler must now be collapsed.
|
||||
const section1Collapsed = await page.$eval(
|
||||
"#outlinesView > .treeItem:nth-child(1) > .treeItemToggler",
|
||||
t => t.classList.contains("treeItemsHidden")
|
||||
);
|
||||
expect(section1Collapsed).withContext(`In ${browserName}`).toBeTrue();
|
||||
|
||||
// Sections 2 and 3 must remain expanded (the bug collapsed the whole
|
||||
// outline by passing `this.container` instead of
|
||||
// `target.parentNode`).
|
||||
const otherHiddenCount = await page.$$eval(
|
||||
"#outlinesView > .treeItem:nth-child(n+2) > .treeItemToggler",
|
||||
togglers =>
|
||||
togglers.filter(t => t.classList.contains("treeItemsHidden"))
|
||||
.length
|
||||
);
|
||||
expect(otherHiddenCount).withContext(`In ${browserName}`).toBe(0);
|
||||
})
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe("Scroll into view", () => {
|
||||
let pages;
|
||||
|
||||
|
||||
1
test/pdfs/.gitignore
vendored
1
test/pdfs/.gitignore
vendored
@ -875,3 +875,4 @@
|
||||
!bug2014080.pdf
|
||||
!two_pages.pdf
|
||||
!sci-notation.pdf
|
||||
!nested_outline.pdf
|
||||
|
||||
BIN
test/pdfs/nested_outline.pdf
Normal file
BIN
test/pdfs/nested_outline.pdf
Normal file
Binary file not shown.
@ -604,6 +604,7 @@ const PDFViewerApplication = {
|
||||
enableHWA,
|
||||
enableSplitMerge: AppOptions.get("enableSplitMerge"),
|
||||
manageMenu: appConfig.viewsManager.manageMenu,
|
||||
addFileButton: appConfig.viewsManager.viewsManagerAddFileButton,
|
||||
});
|
||||
renderingQueue.setThumbnailViewer(this.pdfThumbnailViewer);
|
||||
}
|
||||
|
||||
@ -131,7 +131,7 @@ class BaseTreeViewer {
|
||||
target.classList.toggle("treeItemsHidden");
|
||||
if (e.shiftKey) {
|
||||
const shouldShowAll = !target.classList.contains("treeItemsHidden");
|
||||
this._toggleTreeItem(this.container, shouldShowAll);
|
||||
this._toggleTreeItem(target.parentNode, shouldShowAll);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@ -243,6 +243,7 @@
|
||||
padding-bottom: 16px;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
overflow-y: visible;
|
||||
|
||||
#editorCommentsSidebarHeader {
|
||||
width: 100%;
|
||||
|
||||
@ -140,6 +140,9 @@ function getNormalizeWithNFKC() {
|
||||
const diacriticsRegex = /^\p{M}$/u;
|
||||
// Some chars must be replaced by their NFKC counterpart during a search.
|
||||
for (let i = 0; i < 65536; i++) {
|
||||
if (i >= 0xd800 && i <= 0xdfff) {
|
||||
continue; // Skip surrogates since they're not valid Unicode scalar values.
|
||||
}
|
||||
const c = String.fromCharCode(i);
|
||||
if (c.normalize("NFKC") !== c && !diacriticsRegex.test(c)) {
|
||||
if (range.length !== 2) {
|
||||
|
||||
@ -119,7 +119,6 @@ class PDFThumbnailView extends RenderableView {
|
||||
const thumbnailContainer = (this.div = document.createElement("div"));
|
||||
thumbnailContainer.className = "thumbnail";
|
||||
thumbnailContainer.setAttribute("page-number", id);
|
||||
thumbnailContainer.setAttribute("page-id", id);
|
||||
|
||||
const imageContainer = (this.imageContainer =
|
||||
document.createElement("div"));
|
||||
@ -132,6 +131,8 @@ class PDFThumbnailView extends RenderableView {
|
||||
imageContainer.tabIndex = -1;
|
||||
imageContainer.draggable = false;
|
||||
imageContainer.setAttribute("page-number", id);
|
||||
imageContainer.setAttribute("data-l10n-id", "pdfjs-thumb-page-title1");
|
||||
imageContainer.setAttribute("data-l10n-args", this.#getPageL10nArgs(true));
|
||||
|
||||
const image = (this.image = document.createElement("img"));
|
||||
imageContainer.append(image);
|
||||
@ -140,8 +141,8 @@ class PDFThumbnailView extends RenderableView {
|
||||
const checkbox = (this.checkbox = document.createElement("input"));
|
||||
checkbox.type = "checkbox";
|
||||
checkbox.tabIndex = -1;
|
||||
checkbox.setAttribute("data-l10n-id", "pdfjs-thumb-page-checkbox");
|
||||
checkbox.setAttribute("data-l10n-args", this.#pageL10nArgs);
|
||||
checkbox.setAttribute("data-l10n-id", "pdfjs-thumb-page-checkbox1");
|
||||
checkbox.setAttribute("data-l10n-args", this.#getPageL10nArgs());
|
||||
thumbnailContainer.append(checkbox);
|
||||
this.pasteButton = null;
|
||||
}
|
||||
@ -332,8 +333,8 @@ class PDFThumbnailView extends RenderableView {
|
||||
reducedCanvas.toBlob(resolve);
|
||||
const blob = await promise;
|
||||
image.src = URL.createObjectURL(blob);
|
||||
imageContainer.setAttribute("data-l10n-id", "pdfjs-thumb-page-canvas");
|
||||
imageContainer.setAttribute("data-l10n-args", this.#pageL10nArgs);
|
||||
image.setAttribute("data-l10n-id", "pdfjs-thumb-page-canvas");
|
||||
image.setAttribute("data-l10n-args", this.#getPageL10nArgs());
|
||||
imageContainer.classList.remove("missingThumbnailImage");
|
||||
if (!FeatureTest.isOffscreenCanvasSupported) {
|
||||
// Clean up the canvas element since it is no longer needed.
|
||||
@ -526,8 +527,11 @@ class PDFThumbnailView extends RenderableView {
|
||||
return canvas;
|
||||
}
|
||||
|
||||
get #pageL10nArgs() {
|
||||
return JSON.stringify({ page: this.pageLabel ?? this.id });
|
||||
#getPageL10nArgs(hasTotal = false) {
|
||||
return JSON.stringify({
|
||||
page: this.pageLabel ?? this.id,
|
||||
total: hasTotal ? this.linkService.pagesCount : undefined,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@ -535,8 +539,12 @@ class PDFThumbnailView extends RenderableView {
|
||||
*/
|
||||
setPageLabel(label) {
|
||||
this.pageLabel = typeof label === "string" ? label : null;
|
||||
this.imageContainer.setAttribute("data-l10n-args", this.#pageL10nArgs);
|
||||
this.checkbox?.setAttribute("data-l10n-args", this.#pageL10nArgs);
|
||||
this.imageContainer.setAttribute(
|
||||
"data-l10n-args",
|
||||
this.#getPageL10nArgs(true)
|
||||
);
|
||||
this.image.setAttribute("data-l10n-args", this.#getPageL10nArgs());
|
||||
this.checkbox?.setAttribute("data-l10n-args", this.#getPageL10nArgs());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -70,7 +70,8 @@ const SPACE_FOR_DRAG_MARKER_WHEN_NO_NEXT_ELEMENT = 15;
|
||||
* The default value is `false`.
|
||||
* @property {Object} [manageMenu] - The menu elements to manage saving edited
|
||||
* PDF.
|
||||
*/
|
||||
* @property {HTMLButtonElement} addFileButton - The button that opens a dialog
|
||||
* to add a PDF file to merge with the current one.
|
||||
|
||||
/**
|
||||
* Viewer control to display thumbnails for pages in a PDF document.
|
||||
@ -141,6 +142,7 @@ class PDFThumbnailViewer {
|
||||
enableHWA,
|
||||
enableSplitMerge,
|
||||
manageMenu,
|
||||
addFileButton,
|
||||
}) {
|
||||
this.scrollableContainer = container.parentElement;
|
||||
this.container = container;
|
||||
@ -152,6 +154,8 @@ class PDFThumbnailViewer {
|
||||
this.pageColors = pageColors || null;
|
||||
this.enableHWA = enableHWA || false;
|
||||
this.#enableSplitMerge = enableSplitMerge || false;
|
||||
// TODO: uncomment when the "add file" feature is implemented.
|
||||
// this.#addFileButton = addFileButton;
|
||||
|
||||
if (this.#enableSplitMerge && manageMenu) {
|
||||
const { button, menu, copy, cut, delete: del, saveAs } = manageMenu;
|
||||
|
||||
@ -29,6 +29,7 @@
|
||||
--sidebar-max-width: 632px;
|
||||
--sidebar-width: 239px;
|
||||
--resizer-width: 4px;
|
||||
--resizer-shift: calc(0px - var(--resizer-width) - 2px);
|
||||
--resizer-hover-bg-color: light-dark(#0062fa, #00cadb);
|
||||
|
||||
@media screen and (forced-colors: active) {
|
||||
@ -49,6 +50,7 @@
|
||||
max-width: var(--sidebar-max-width);
|
||||
backdrop-filter: var(--sidebar-backdrop-filter);
|
||||
box-sizing: border-box;
|
||||
position: relative;
|
||||
|
||||
.sidebarResizer {
|
||||
width: var(--resizer-width);
|
||||
@ -56,9 +58,11 @@
|
||||
forced-color-adjust: none;
|
||||
cursor: ew-resize;
|
||||
position: absolute;
|
||||
inset-block: calc(var(--sidebar-padding) + var(--sidebar-border-radius));
|
||||
inset-inline-start: calc(0px - var(--resizer-width) / 2);
|
||||
transition: background-color 0.5s ease-in-out;
|
||||
inset-block: 0;
|
||||
inset-inline-start: var(--resizer-shift);
|
||||
transition:
|
||||
background-color 0.5s ease-in-out,
|
||||
border-color 0.5s ease-in-out;
|
||||
box-sizing: border-box;
|
||||
border: 1px solid transparent;
|
||||
border-block-width: 0;
|
||||
@ -66,6 +70,7 @@
|
||||
|
||||
&:hover {
|
||||
background-color: var(--resizer-hover-bg-color);
|
||||
border-color: white;
|
||||
}
|
||||
&:focus-visible {
|
||||
background-color: var(--resizer-hover-bg-color);
|
||||
|
||||
@ -1360,9 +1360,13 @@ dialog :link {
|
||||
height: 1px;
|
||||
}
|
||||
|
||||
#toolbarViewerLeft #numPages.toolbarLabel {
|
||||
padding-inline-start: 3px;
|
||||
flex: none;
|
||||
#toolbarViewerLeft {
|
||||
margin-inline-start: 8px;
|
||||
|
||||
#numPages.toolbarLabel {
|
||||
padding-inline-start: 3px;
|
||||
flex: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -111,12 +111,12 @@ See https://github.com/adobe-type-tools/cmap-resources
|
||||
class="toolbarButton"
|
||||
type="button"
|
||||
tabindex="0"
|
||||
data-l10n-id="pdfjs-toggle-views-manager-button"
|
||||
data-l10n-id="pdfjs-toggle-views-manager-button1"
|
||||
aria-expanded="false"
|
||||
aria-haspopup="true"
|
||||
aria-controls="viewsManager"
|
||||
>
|
||||
<span data-l10n-id="pdfjs-toggle-views-manager-button-label"></span>
|
||||
<span data-l10n-id="pdfjs-toggle-views-manager-button1-label"></span>
|
||||
</button>
|
||||
<div
|
||||
id="viewsManager"
|
||||
|
||||
@ -23,7 +23,7 @@
|
||||
&.viewsManagerOpen {
|
||||
#viewsManager {
|
||||
visibility: visible;
|
||||
inset-inline-start: 1px;
|
||||
inset-inline-start: 8px;
|
||||
}
|
||||
|
||||
#viewerContainer:not(.pdfPresentationMode) {
|
||||
@ -53,7 +53,7 @@
|
||||
--pages-selected-icon: url(images/pages_selected.svg);
|
||||
--spinner-icon: url(images/altText_spinner.svg);
|
||||
|
||||
--sidebar-bg-color: light-dark(rgb(255 255 255 / 0.92), rgb(35 34 43 / 0.92));
|
||||
--sidebar-bg-color: light-dark(rgb(255 255 255 / 0.92), rgb(66 65 77 / 0.92));
|
||||
--sidebar-backdrop-filter: blur(7px);
|
||||
--sidebar-width: 230px;
|
||||
--sidebar-min-width: min-content;
|
||||
@ -86,13 +86,14 @@
|
||||
--header-shadow:
|
||||
0 0.25px 0.75px -0.75px light-dark(rgb(0 0 0 / 0.05), rgb(0 0 0 / 0.2)),
|
||||
0 2px 6px -6px light-dark(rgb(0 0 0 / 0.1), rgb(0 0 0 / 0.4));
|
||||
--header-bg: light-dark(rgb(255 255 255 / 0.92), #42414e);
|
||||
--image-outline: none;
|
||||
--image-border-width: 6px;
|
||||
--image-border-color: light-dark(#cfcfd8, #3a3944);
|
||||
--image-hover-border-color: #bfbfc9;
|
||||
--image-current-border-color: var(--button-focus-outline-color);
|
||||
--image-current-focused-outline-color: var(--image-hover-border-color);
|
||||
--image-page-number-bg: light-dark(#f0f0f4, #23222b);
|
||||
--image-page-number-bg: light-dark(#f0f0f4, #42414d);
|
||||
--image-page-number-fg: var(--text-color);
|
||||
--image-page-number-border-color: transparent;
|
||||
--image-hover-page-number-bg: var(--image-page-number-bg);
|
||||
@ -189,7 +190,7 @@
|
||||
transition-timing-function: var(--sidebar-transition-timing-function);
|
||||
|
||||
.sidebarResizer {
|
||||
inset-inline-start: 100%;
|
||||
inset-inline-start: calc(100% + 4px);
|
||||
}
|
||||
|
||||
.viewsManagerButton {
|
||||
@ -243,12 +244,14 @@
|
||||
width: 100%;
|
||||
box-shadow: var(--header-shadow);
|
||||
flex: 0 0 auto;
|
||||
background-color: var(--header-bg);
|
||||
|
||||
.viewsManagerLabel {
|
||||
flex: 1 0 0;
|
||||
flex: 0;
|
||||
color: var(--text-color);
|
||||
text-align: center;
|
||||
height: fit-content;
|
||||
width: fit-content;
|
||||
user-select: none;
|
||||
|
||||
font: menu;
|
||||
@ -336,6 +339,8 @@
|
||||
}
|
||||
|
||||
#viewsManagerAddFileButton {
|
||||
visibility: hidden;
|
||||
|
||||
background: var(--button-no-bg);
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
|
||||
@ -69,6 +69,9 @@ const UI_NOTIFICATION_CLASS = "pdfSidebarNotification";
|
||||
class ViewsManager extends Sidebar {
|
||||
static #l10nDescription = null;
|
||||
|
||||
#hasAnimations = !window.matchMedia("(prefers-reduced-motion: reduce)")
|
||||
.matches;
|
||||
|
||||
/**
|
||||
* @param {PDFSidebarOptions} options
|
||||
*/
|
||||
@ -86,6 +89,7 @@ class ViewsManager extends Sidebar {
|
||||
outlinesView,
|
||||
attachmentsView,
|
||||
layersView,
|
||||
viewsManagerAddFileButton,
|
||||
viewsManagerCurrentOutlineButton,
|
||||
viewsManagerSelectorButton,
|
||||
viewsManagerSelectorOptions,
|
||||
@ -131,6 +135,7 @@ class ViewsManager extends Sidebar {
|
||||
this.attachmentsView = attachmentsView;
|
||||
this.layersView = layersView;
|
||||
|
||||
this.viewsManagerAddFileButton = viewsManagerAddFileButton;
|
||||
this.viewsManagerCurrentOutlineButton = viewsManagerCurrentOutlineButton;
|
||||
this.viewsManagerHeaderLabel = viewsManagerHeaderLabel;
|
||||
this.viewsManagerStatus = viewsManagerStatus;
|
||||
@ -248,6 +253,7 @@ class ViewsManager extends Sidebar {
|
||||
}
|
||||
|
||||
this.viewsManagerStatus.hidden = view !== SidebarView.THUMBS;
|
||||
this.viewsManagerAddFileButton.hidden = view !== SidebarView.THUMBS;
|
||||
this.viewsManagerCurrentOutlineButton.hidden = view !== SidebarView.OUTLINE;
|
||||
this.viewsManagerHeaderLabel.setAttribute(
|
||||
"data-l10n-id",
|
||||
@ -303,15 +309,20 @@ class ViewsManager extends Sidebar {
|
||||
toggleExpandedBtn(this.toggleButton, true);
|
||||
this.switchView(this.active);
|
||||
|
||||
// Changing `hidden` above may cause a reflow which would prevent the
|
||||
// CSS transition from being applied correctly, so we need to delay
|
||||
// adding the relevant CSS classes.
|
||||
queueMicrotask(() => {
|
||||
this.outerContainer.classList.add(
|
||||
"viewsManagerMoving",
|
||||
"viewsManagerOpen"
|
||||
);
|
||||
});
|
||||
if (this.#hasAnimations) {
|
||||
// Changing `hidden` above may cause a reflow which would prevent the
|
||||
// CSS transition from being applied correctly, so we need to delay
|
||||
// adding the relevant CSS classes.
|
||||
queueMicrotask(() => {
|
||||
this.outerContainer.classList.add(
|
||||
"viewsManagerMoving",
|
||||
"viewsManagerOpen"
|
||||
);
|
||||
});
|
||||
} else {
|
||||
this.outerContainer.classList.add("viewsManagerOpen");
|
||||
this.eventBus.dispatch("resize", { source: this });
|
||||
}
|
||||
if (this.active === SidebarView.THUMBS) {
|
||||
this.onUpdateThumbnails();
|
||||
}
|
||||
@ -392,13 +403,16 @@ class ViewsManager extends Sidebar {
|
||||
#addEventListeners() {
|
||||
const { eventBus, outerContainer } = this;
|
||||
|
||||
this.sidebarContainer.addEventListener("transitionend", evt => {
|
||||
if (evt.target === this.sidebarContainer) {
|
||||
outerContainer.classList.remove("viewsManagerMoving");
|
||||
// Ensure that rendering is triggered after opening/closing the sidebar.
|
||||
eventBus.dispatch("resize", { source: this });
|
||||
}
|
||||
});
|
||||
if (this.#hasAnimations) {
|
||||
this.sidebarContainer.addEventListener("transitionend", evt => {
|
||||
if (evt.target === this.sidebarContainer) {
|
||||
outerContainer.classList.remove("viewsManagerMoving");
|
||||
// Ensure that rendering is triggered after opening/closing the
|
||||
// sidebar.
|
||||
eventBus.dispatch("resize", { source: this });
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Buttons for switching views.
|
||||
this.thumbnailButton.addEventListener("click", () => {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user