vgapp 1.2.1 → 1.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/CHANGELOG.md +14 -1
  2. package/README.md +48 -48
  3. package/app/langs/en/buttons.json +17 -17
  4. package/app/langs/en/messages.json +36 -36
  5. package/app/langs/ru/buttons.json +17 -17
  6. package/app/langs/ru/messages.json +36 -36
  7. package/app/modules/vgfilepreview/js/i18n.js +56 -56
  8. package/app/modules/vgfilepreview/js/renderers/image-modal.js +145 -145
  9. package/app/modules/vgfilepreview/js/renderers/image.js +92 -92
  10. package/app/modules/vgfilepreview/js/renderers/index.js +19 -19
  11. package/app/modules/vgfilepreview/js/renderers/office-modal.js +168 -168
  12. package/app/modules/vgfilepreview/js/renderers/office.js +79 -79
  13. package/app/modules/vgfilepreview/js/renderers/pdf-modal.js +260 -260
  14. package/app/modules/vgfilepreview/js/renderers/pdf.js +76 -76
  15. package/app/modules/vgfilepreview/js/renderers/playlist.js +71 -71
  16. package/app/modules/vgfilepreview/js/renderers/text-modal.js +343 -343
  17. package/app/modules/vgfilepreview/js/renderers/text.js +83 -83
  18. package/app/modules/vgfilepreview/js/renderers/video-modal.js +272 -272
  19. package/app/modules/vgfilepreview/js/renderers/video.js +80 -80
  20. package/app/modules/vgfilepreview/js/renderers/zip-modal.js +522 -522
  21. package/app/modules/vgfilepreview/js/renderers/zip.js +89 -89
  22. package/app/modules/vgfilepreview/js/vgfilepreview.js +7 -7
  23. package/app/modules/vgfilepreview/readme.md +68 -68
  24. package/app/modules/vgfilepreview/scss/_variables.scss +113 -113
  25. package/app/modules/vgfilepreview/scss/vgfilepreview.scss +464 -464
  26. package/app/modules/vgfiles/js/base.js +26 -26
  27. package/app/modules/vgfiles/js/droppable.js +260 -260
  28. package/app/modules/vgfiles/js/render.js +153 -153
  29. package/app/modules/vgfiles/js/vgfiles.js +79 -45
  30. package/app/modules/vgfiles/readme.md +123 -123
  31. package/app/modules/vgfiles/scss/_variables.scss +18 -18
  32. package/app/modules/vgfiles/scss/vgfiles.scss +148 -148
  33. package/app/modules/vgformsender/js/hideshowpass.js +7 -2
  34. package/app/modules/vgformsender/js/vgformsender.js +90 -31
  35. package/app/modules/vgformsender/scss/vgformsender.scss +25 -1
  36. package/app/modules/vgmodal/js/vgmodal.drag.js +332 -332
  37. package/app/modules/vgmodal/js/vgmodal.js +1 -1
  38. package/app/modules/vgmodal/js/vgmodal.resize.js +435 -435
  39. package/app/modules/vgnav/js/vgnav.js +135 -135
  40. package/app/modules/vgnav/readme.md +67 -67
  41. package/app/modules/vgnestable/README.md +307 -307
  42. package/app/modules/vgnestable/scss/_variables.scss +60 -60
  43. package/app/modules/vgnestable/scss/vgnestable.scss +163 -163
  44. package/app/modules/vgselect/js/vgselect.js +39 -39
  45. package/app/modules/vgselect/scss/vgselect.scss +22 -22
  46. package/app/modules/vgspy/readme.md +28 -28
  47. package/app/modules/vgtoast/js/vgtoast.js +166 -135
  48. package/app/modules/vgtoast/readme.md +18 -18
  49. package/app/modules/vgtoast/scss/vgtoast.scss +48 -48
  50. package/app/utils/js/components/audio-metadata.js +240 -240
  51. package/app/utils/js/components/file-icon.js +109 -109
  52. package/app/utils/js/components/file-preview.js +304 -304
  53. package/app/utils/js/components/sanitize.js +150 -150
  54. package/app/utils/js/components/video-metadata.js +140 -140
  55. package/build/vgapp.css +1 -1
  56. package/build/vgapp.css.map +1 -1
  57. package/build/vgapp.js.map +1 -1
  58. package/index.scss +9 -9
  59. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,4 +1,17 @@
1
- # VEGAS-APP 1.2.0 (Июнь, 16, 2026)
1
+ # VEGAS-APP 1.2.2 (Июнь, 16, 2026)
2
+ ## Новые фичи
3
+ * В VGFiles добавлена настройка кнопок подтверждения удаления через `removes.buttons`, `removes.single.buttons` и `removes.all.buttons`.
4
+ * В VGFormSender добавлены опции `alert.modal.closeModalsBeforeModal` и `alert.toast.closeModalsBeforeToast` для управления закрытием открытых модалок перед показом alert-modal или toast.
5
+
6
+ ## Изменения
7
+ * В VGFormSender при `alert.modal.closeModalsBeforeModal = false` новая alert-modal открывается поверх существующей модалки, получает класс `vg-modal-stacked` и повышенный `z-index`.
8
+ * В VGFormSender закрытие открытых Bootstrap/VGModal модалок вынесено в общий helper.
9
+ * В VGFormSender служебный параметр `closeModalsBeforeToast` не передается в настройки VGToast.
10
+ * Обновлена версия пакета в `package.json`: `1.2.1` -> `1.2.2`.
11
+
12
+ ---
13
+
14
+ # VEGAS-APP 1.2.0 (Июнь, 16, 2026)
2
15
  ## Новые фичи
3
16
  * В VGToast добавлен параметр `type` со встроенными SVG-иконками для типов `success`, `error`, `warning`, `info`.
4
17
  * В VGFormSender добавлен новый режим алертов `alert.type = 'toast'` с интеграцией через `VGToast`.
package/README.md CHANGED
@@ -1,48 +1,48 @@
1
- # VEGAS APP (VGApp)
2
- [FUNC.TRUE?!](http://func-true.ru)
3
-
4
- VGApp — набор фронтенд‑модулей (UI‑компонентов и утилит) на чистом JavaScript от Vegas Studio.
5
- Проект объединяет типовые элементы интерфейса и сценарии (модалки, табы, формы, загрузка файлов и т.д.) с едиными подходами к инициализации, data‑API, событиям и локализации.
6
-
7
- [![npm](https://img.shields.io/npm/v/vgapp.svg?style=flat-square&maxAge=600)](https://www.npmjs.com/package/vgapp) [![npm](https://img.shields.io/npm/l/vgapp.svg?style=flat-square)]()
8
-
9
- ## Install
10
- ```
11
- npm i vgapp
12
- ```
13
-
14
- ## Что умеет
15
-
16
- ### Общие возможности
17
- - Работает без jQuery, ориентирован на ES6+.
18
- - Поддерживает инициализацию через JS и `data-*` атрибуты.
19
- - События на DOM для интеграции и расширения поведения.
20
- - AJAX‑интеграция в ключевых модулях.
21
- - Локализация интерфейсных текстов.
22
- - Расширяемая архитектура модулей и рендереров.
23
-
24
- ### Основные модули
25
- - `VGAlert` — диалоги подтверждения и уведомления с поддержкой AJAX‑сценариев.
26
- - `VGCollapse` — сворачиваемые секции и аккордеоны с анимацией.
27
- - `VGDropdown` — выпадающие меню с гибким открытием и позиционированием.
28
- - `VGFiles` — загрузка и управление файлами (dropzone, валидация, AJAX, сортировка).
29
- - `VGFilePreview` — предпросмотр файлов разных типов и действия по файлу (preview/download).
30
- - `VGFormSender` — отправка форм (AJAX/нативно), обработка состояний и ответов.
31
- - `VGLawCookie` — баннер cookies с сохранением выбора пользователя.
32
- - `VGLoadMore` — подгрузка контента кнопкой или при прокрутке.
33
- - `VGModal` — базовый модуль модальных окон.
34
- - `VGNav` — навигация и мобильное меню.
35
- - `VGNestable` — drag‑and‑drop вложенных списков с обновлением структуры.
36
- - `VGRollup` — ограничение контента по высоте/элементам с кнопкой разворота.
37
- - `VGSelect` — кастомный select с поиском, мультивыбором и i18n.
38
- - `VGSidebar` — боковые панели с управлением открытием/закрытием.
39
- - `VGSpy` — scroll‑spy для подсветки активных ссылок по секциям.
40
- - `VGTabs` — вкладки с переключением контента и поддержкой URL/hash.
41
- - `VGToast` — всплывающие уведомления со стеком и автозакрытием.
42
-
43
- ## Authors
44
-
45
- [VEGAS STUDIO](https://vegas-dev.com) Russia
46
-
47
- ## License
48
- Is published under the [MIT license](http://www.opensource.org/licenses/mit-license)
1
+ # VEGAS APP (VGApp)
2
+ [FUNC.TRUE?!](http://func-true.ru)
3
+
4
+ VGApp — набор фронтенд‑модулей (UI‑компонентов и утилит) на чистом JavaScript от Vegas Studio.
5
+ Проект объединяет типовые элементы интерфейса и сценарии (модалки, табы, формы, загрузка файлов и т.д.) с едиными подходами к инициализации, data‑API, событиям и локализации.
6
+
7
+ [![npm](https://img.shields.io/npm/v/vgapp.svg?style=flat-square&maxAge=600)](https://www.npmjs.com/package/vgapp) [![npm](https://img.shields.io/npm/l/vgapp.svg?style=flat-square)]()
8
+
9
+ ## Install
10
+ ```
11
+ npm i vgapp
12
+ ```
13
+
14
+ ## Что умеет
15
+
16
+ ### Общие возможности
17
+ - Работает без jQuery, ориентирован на ES6+.
18
+ - Поддерживает инициализацию через JS и `data-*` атрибуты.
19
+ - События на DOM для интеграции и расширения поведения.
20
+ - AJAX‑интеграция в ключевых модулях.
21
+ - Локализация интерфейсных текстов.
22
+ - Расширяемая архитектура модулей и рендереров.
23
+
24
+ ### Основные модули
25
+ - `VGAlert` — диалоги подтверждения и уведомления с поддержкой AJAX‑сценариев.
26
+ - `VGCollapse` — сворачиваемые секции и аккордеоны с анимацией.
27
+ - `VGDropdown` — выпадающие меню с гибким открытием и позиционированием.
28
+ - `VGFiles` — загрузка и управление файлами (dropzone, валидация, AJAX, сортировка).
29
+ - `VGFilePreview` — предпросмотр файлов разных типов и действия по файлу (preview/download).
30
+ - `VGFormSender` — отправка форм (AJAX/нативно), обработка состояний и ответов.
31
+ - `VGLawCookie` — баннер cookies с сохранением выбора пользователя.
32
+ - `VGLoadMore` — подгрузка контента кнопкой или при прокрутке.
33
+ - `VGModal` — базовый модуль модальных окон.
34
+ - `VGNav` — навигация и мобильное меню.
35
+ - `VGNestable` — drag‑and‑drop вложенных списков с обновлением структуры.
36
+ - `VGRollup` — ограничение контента по высоте/элементам с кнопкой разворота.
37
+ - `VGSelect` — кастомный select с поиском, мультивыбором и i18n.
38
+ - `VGSidebar` — боковые панели с управлением открытием/закрытием.
39
+ - `VGSpy` — scroll‑spy для подсветки активных ссылок по секциям.
40
+ - `VGTabs` — вкладки с переключением контента и поддержкой URL/hash.
41
+ - `VGToast` — всплывающие уведомления со стеком и автозакрытием.
42
+
43
+ ## Authors
44
+
45
+ [VEGAS STUDIO](https://vegas-dev.com) Russia
46
+
47
+ ## License
48
+ Is published under the [MIT license](http://www.opensource.org/licenses/mit-license)
@@ -7,22 +7,22 @@
7
7
  "agree": "Yeah, I agree",
8
8
  "cancel": "Cancel"
9
9
  },
10
- "filepreview": {
11
- "open_audio": "Open player",
12
- "open_image": "Open image",
13
- "open_text": "Open text",
14
- "open_video": "Open video",
15
- "open_archive": "Open archive",
16
- "open_pdf": "Open PDF",
17
- "open_office": "Open document",
18
- "download": "Download",
19
- "preview": "Preview",
20
- "prev": "Prev",
21
- "next": "Next",
22
- "zoom_in": "Zoom +",
23
- "zoom_out": "Zoom -"
24
- },
25
- "loadmore": {
10
+ "filepreview": {
11
+ "open_audio": "Open player",
12
+ "open_image": "Open image",
13
+ "open_text": "Open text",
14
+ "open_video": "Open video",
15
+ "open_archive": "Open archive",
16
+ "open_pdf": "Open PDF",
17
+ "open_office": "Open document",
18
+ "download": "Download",
19
+ "preview": "Preview",
20
+ "prev": "Prev",
21
+ "next": "Next",
22
+ "zoom_in": "Zoom +",
23
+ "zoom_out": "Zoom -"
24
+ },
25
+ "loadmore": {
26
26
  "send": "Uploading...",
27
27
  "show": "I'm showing you...",
28
28
  "text-ajax": "Upload more",
@@ -36,4 +36,4 @@
36
36
  "select": {
37
37
  "load-more": "Upload more"
38
38
  }
39
- }
39
+ }
@@ -25,42 +25,42 @@
25
25
  "description": "It will not be possible to return it",
26
26
  "drop-active": "Release to upload"
27
27
  },
28
- "filepreview": {
29
- "audio_title": "Audio file",
30
- "image_title": "Image preview",
31
- "image_thumbnail_alt": "Image thumbnail",
32
- "text_title": "Text preview",
33
- "video_title": "Video preview",
34
- "pdf_title": "PDF preview",
35
- "office_title": "Office preview",
36
- "archive_title": "Archive preview",
37
- "loading_text": "Loading...",
38
- "loading_archive": "Loading archive...",
39
- "loading_entry": "Loading entry...",
40
- "cannot_open_file": "Cannot open file",
41
- "cannot_open_archive": "Cannot open archive",
42
- "cannot_preview_entry": "Cannot preview entry",
43
- "office_fallback": "If embedded preview is unavailable, download the file.",
44
- "invalid_zip": "Invalid ZIP file",
45
- "central_directory_not_found": "Central directory not found",
46
- "archive_buffer_missing": "Archive buffer is missing",
47
- "entry_corrupted": "Archive entry is corrupted",
48
- "compression_not_supported": "Compression method is not supported",
49
- "deflate_not_supported": "Deflate decompression is not supported by the browser",
50
- "unknown_error": "Unknown error",
51
- "empty_file": "(empty file)",
52
- "archive_empty_unsupported": "Archive is empty or unsupported.",
53
- "archive_type_dir": "dir",
54
- "archive_type_file": "file",
55
- "archive_table_name": "Name",
56
- "archive_table_type": "Type",
57
- "archive_table_packed": "Packed",
58
- "archive_table_size": "Size",
59
- "archive_table_preview": "Preview",
60
- "pdf_page": "Page",
61
- "pdf_zoom": "Zoom"
62
- },
63
- "alert": {
28
+ "filepreview": {
29
+ "audio_title": "Audio file",
30
+ "image_title": "Image preview",
31
+ "image_thumbnail_alt": "Image thumbnail",
32
+ "text_title": "Text preview",
33
+ "video_title": "Video preview",
34
+ "pdf_title": "PDF preview",
35
+ "office_title": "Office preview",
36
+ "archive_title": "Archive preview",
37
+ "loading_text": "Loading...",
38
+ "loading_archive": "Loading archive...",
39
+ "loading_entry": "Loading entry...",
40
+ "cannot_open_file": "Cannot open file",
41
+ "cannot_open_archive": "Cannot open archive",
42
+ "cannot_preview_entry": "Cannot preview entry",
43
+ "office_fallback": "If embedded preview is unavailable, download the file.",
44
+ "invalid_zip": "Invalid ZIP file",
45
+ "central_directory_not_found": "Central directory not found",
46
+ "archive_buffer_missing": "Archive buffer is missing",
47
+ "entry_corrupted": "Archive entry is corrupted",
48
+ "compression_not_supported": "Compression method is not supported",
49
+ "deflate_not_supported": "Deflate decompression is not supported by the browser",
50
+ "unknown_error": "Unknown error",
51
+ "empty_file": "(empty file)",
52
+ "archive_empty_unsupported": "Archive is empty or unsupported.",
53
+ "archive_type_dir": "dir",
54
+ "archive_type_file": "file",
55
+ "archive_table_name": "Name",
56
+ "archive_table_type": "Type",
57
+ "archive_table_packed": "Packed",
58
+ "archive_table_size": "Size",
59
+ "archive_table_preview": "Preview",
60
+ "pdf_page": "Page",
61
+ "pdf_zoom": "Zoom"
62
+ },
63
+ "alert": {
64
64
  "title": "Default header",
65
65
  "description": "Description of the current action",
66
66
  "reason": "Alert already open"
@@ -7,22 +7,22 @@
7
7
  "agree": "Да",
8
8
  "cancel": "Нет"
9
9
  },
10
- "filepreview": {
11
- "open_audio": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u043b\u0435\u0435\u0440",
12
- "open_image": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435",
13
- "open_text": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0442\u0435\u043a\u0441\u0442",
14
- "open_video": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432\u0438\u0434\u0435\u043e",
15
- "open_archive": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0430\u0440\u0445\u0438\u0432",
16
- "open_pdf": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c PDF",
17
- "open_office": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442",
18
- "download": "\u0421\u043a\u0430\u0447\u0430\u0442\u044c",
19
- "preview": "\u041f\u0440\u0435\u0432\u044c\u044e",
20
- "prev": "\u041d\u0430\u0437\u0430\u0434",
21
- "next": "\u0412\u043f\u0435\u0440\u0435\u0434",
22
- "zoom_in": "\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c",
23
- "zoom_out": "\u0423\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c"
24
- },
25
- "loadmore": {
10
+ "filepreview": {
11
+ "open_audio": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u043b\u0435\u0435\u0440",
12
+ "open_image": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435",
13
+ "open_text": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0442\u0435\u043a\u0441\u0442",
14
+ "open_video": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432\u0438\u0434\u0435\u043e",
15
+ "open_archive": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0430\u0440\u0445\u0438\u0432",
16
+ "open_pdf": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c PDF",
17
+ "open_office": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442",
18
+ "download": "\u0421\u043a\u0430\u0447\u0430\u0442\u044c",
19
+ "preview": "\u041f\u0440\u0435\u0432\u044c\u044e",
20
+ "prev": "\u041d\u0430\u0437\u0430\u0434",
21
+ "next": "\u0412\u043f\u0435\u0440\u0435\u0434",
22
+ "zoom_in": "\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c",
23
+ "zoom_out": "\u0423\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c"
24
+ },
25
+ "loadmore": {
26
26
  "send": "Загружаю...",
27
27
  "show": "Показываю...",
28
28
  "text-ajax": "Загрузить еще",
@@ -36,4 +36,4 @@
36
36
  "select": {
37
37
  "load-more": "Загрузить еще"
38
38
  }
39
- }
39
+ }
@@ -25,42 +25,42 @@
25
25
  "description": "Вернуть будет невозможно",
26
26
  "drop-active": "Отпустите, чтобы загрузить"
27
27
  },
28
- "filepreview": {
29
- "audio_title": "\u0410\u0443\u0434\u0438\u043e \u0444\u0430\u0439\u043b",
30
- "image_title": "\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f",
31
- "image_thumbnail_alt": "\u041c\u0438\u043d\u0438\u0430\u0442\u044e\u0440\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f",
32
- "text_title": "\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0442\u0435\u043a\u0441\u0442\u0430",
33
- "video_title": "\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0432\u0438\u0434\u0435\u043e",
34
- "pdf_title": "\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 PDF",
35
- "office_title": "\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430",
36
- "archive_title": "\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0430\u0440\u0445\u0438\u0432\u0430",
37
- "loading_text": "\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430...",
38
- "loading_archive": "\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0430\u0440\u0445\u0438\u0432\u0430...",
39
- "loading_entry": "\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0444\u0430\u0439\u043b\u0430 \u0438\u0437 \u0430\u0440\u0445\u0438\u0432\u0430...",
40
- "cannot_open_file": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0444\u0430\u0439\u043b",
41
- "cannot_open_archive": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0430\u0440\u0445\u0438\u0432",
42
- "cannot_preview_entry": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0432\u043b\u043e\u0436\u0435\u043d\u0438\u0435",
43
- "office_fallback": "\u0415\u0441\u043b\u0438 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u0435\u0432\u044c\u044e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0441\u043a\u0430\u0447\u0430\u0439\u0442\u0435 \u0444\u0430\u0439\u043b.",
44
- "invalid_zip": "\u041d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 ZIP-\u0444\u0430\u0439\u043b",
45
- "central_directory_not_found": "\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d",
46
- "archive_buffer_missing": "\u0411\u0443\u0444\u0435\u0440 \u0430\u0440\u0445\u0438\u0432\u0430 \u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d",
47
- "entry_corrupted": "\u0424\u0430\u0439\u043b \u0432 \u0430\u0440\u0445\u0438\u0432\u0435 \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0435\u043d",
48
- "compression_not_supported": "\u041c\u0435\u0442\u043e\u0434 \u0441\u0436\u0430\u0442\u0438\u044f \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f",
49
- "deflate_not_supported": "\u0411\u0440\u0430\u0443\u0437\u0435\u0440 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0443 Deflate",
50
- "unknown_error": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430",
51
- "empty_file": "(\u043f\u0443\u0441\u0442\u043e\u0439 \u0444\u0430\u0439\u043b)",
52
- "archive_empty_unsupported": "\u0410\u0440\u0445\u0438\u0432 \u043f\u0443\u0441\u0442\u043e\u0439 \u0438\u043b\u0438 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f.",
53
- "archive_type_dir": "\u043f\u0430\u043f\u043a\u0430",
54
- "archive_type_file": "\u0444\u0430\u0439\u043b",
55
- "archive_table_name": "\u0418\u043c\u044f",
56
- "archive_table_type": "\u0422\u0438\u043f",
57
- "archive_table_packed": "\u0421\u0436\u0430\u0442\u044b\u0439",
58
- "archive_table_size": "\u0420\u0430\u0437\u043c\u0435\u0440",
59
- "archive_table_preview": "\u041f\u0440\u0435\u0432\u044c\u044e",
60
- "pdf_page": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430",
61
- "pdf_zoom": "\u041c\u0430\u0441\u0448\u0442\u0430\u0431"
62
- },
63
- "alert": {
28
+ "filepreview": {
29
+ "audio_title": "\u0410\u0443\u0434\u0438\u043e \u0444\u0430\u0439\u043b",
30
+ "image_title": "\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f",
31
+ "image_thumbnail_alt": "\u041c\u0438\u043d\u0438\u0430\u0442\u044e\u0440\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f",
32
+ "text_title": "\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0442\u0435\u043a\u0441\u0442\u0430",
33
+ "video_title": "\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0432\u0438\u0434\u0435\u043e",
34
+ "pdf_title": "\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 PDF",
35
+ "office_title": "\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430",
36
+ "archive_title": "\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0430\u0440\u0445\u0438\u0432\u0430",
37
+ "loading_text": "\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430...",
38
+ "loading_archive": "\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0430\u0440\u0445\u0438\u0432\u0430...",
39
+ "loading_entry": "\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0444\u0430\u0439\u043b\u0430 \u0438\u0437 \u0430\u0440\u0445\u0438\u0432\u0430...",
40
+ "cannot_open_file": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0444\u0430\u0439\u043b",
41
+ "cannot_open_archive": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0430\u0440\u0445\u0438\u0432",
42
+ "cannot_preview_entry": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0432\u043b\u043e\u0436\u0435\u043d\u0438\u0435",
43
+ "office_fallback": "\u0415\u0441\u043b\u0438 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u0435\u0432\u044c\u044e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0441\u043a\u0430\u0447\u0430\u0439\u0442\u0435 \u0444\u0430\u0439\u043b.",
44
+ "invalid_zip": "\u041d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 ZIP-\u0444\u0430\u0439\u043b",
45
+ "central_directory_not_found": "\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d",
46
+ "archive_buffer_missing": "\u0411\u0443\u0444\u0435\u0440 \u0430\u0440\u0445\u0438\u0432\u0430 \u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d",
47
+ "entry_corrupted": "\u0424\u0430\u0439\u043b \u0432 \u0430\u0440\u0445\u0438\u0432\u0435 \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0435\u043d",
48
+ "compression_not_supported": "\u041c\u0435\u0442\u043e\u0434 \u0441\u0436\u0430\u0442\u0438\u044f \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f",
49
+ "deflate_not_supported": "\u0411\u0440\u0430\u0443\u0437\u0435\u0440 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0443 Deflate",
50
+ "unknown_error": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430",
51
+ "empty_file": "(\u043f\u0443\u0441\u0442\u043e\u0439 \u0444\u0430\u0439\u043b)",
52
+ "archive_empty_unsupported": "\u0410\u0440\u0445\u0438\u0432 \u043f\u0443\u0441\u0442\u043e\u0439 \u0438\u043b\u0438 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f.",
53
+ "archive_type_dir": "\u043f\u0430\u043f\u043a\u0430",
54
+ "archive_type_file": "\u0444\u0430\u0439\u043b",
55
+ "archive_table_name": "\u0418\u043c\u044f",
56
+ "archive_table_type": "\u0422\u0438\u043f",
57
+ "archive_table_packed": "\u0421\u0436\u0430\u0442\u044b\u0439",
58
+ "archive_table_size": "\u0420\u0430\u0437\u043c\u0435\u0440",
59
+ "archive_table_preview": "\u041f\u0440\u0435\u0432\u044c\u044e",
60
+ "pdf_page": "\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430",
61
+ "pdf_zoom": "\u041c\u0430\u0441\u0448\u0442\u0430\u0431"
62
+ },
63
+ "alert": {
64
64
  "title": "Заголовок по умолчанию",
65
65
  "description": "Описание текущего действия",
66
66
  "reason": "Алерт уже открыт"
@@ -1,56 +1,56 @@
1
- import { lang_buttons, lang_messages } from "../../../utils/js/components/lang";
2
-
3
- const SUPPORTED_LANGS = new Set(["ru", "en"]);
4
-
5
- const normalizeLang = (value, fallback = "ru") => {
6
- const candidate = String(value || "").trim().toLowerCase();
7
- if (!candidate) {
8
- return fallback;
9
- }
10
-
11
- const short = candidate.split("-")[0];
12
- return SUPPORTED_LANGS.has(short) ? short : fallback;
13
- };
14
-
15
- const resolveFilePreviewLang = (paramsLang, element) => {
16
- const fromParams = normalizeLang(paramsLang, "");
17
- if (fromParams) {
18
- return fromParams;
19
- }
20
-
21
- const fromElement = normalizeLang(element?.getAttribute("lang"), "");
22
- if (fromElement) {
23
- return fromElement;
24
- }
25
-
26
- const fromClosest = normalizeLang(element?.closest("[lang]")?.getAttribute("lang"), "");
27
- if (fromClosest) {
28
- return fromClosest;
29
- }
30
-
31
- const fromHtml = normalizeLang(document?.documentElement?.getAttribute("lang"), "");
32
- if (fromHtml) {
33
- return fromHtml;
34
- }
35
-
36
- const fromNavigator = normalizeLang(window?.navigator?.language, "");
37
- if (fromNavigator) {
38
- return fromNavigator;
39
- }
40
-
41
- return "ru";
42
- };
43
-
44
- const createFilePreviewI18n = (lang = "ru") => {
45
- const normalizedLang = normalizeLang(lang, "ru");
46
- const messages = lang_messages(normalizedLang, "filepreview") || {};
47
- const buttons = lang_buttons(normalizedLang, "filepreview") || {};
48
-
49
- return {
50
- lang: normalizedLang,
51
- message: (key, fallback = "") => messages[key] || fallback,
52
- button: (key, fallback = "") => buttons[key] || fallback
53
- };
54
- };
55
-
56
- export { createFilePreviewI18n, resolveFilePreviewLang };
1
+ import { lang_buttons, lang_messages } from "../../../utils/js/components/lang";
2
+
3
+ const SUPPORTED_LANGS = new Set(["ru", "en"]);
4
+
5
+ const normalizeLang = (value, fallback = "ru") => {
6
+ const candidate = String(value || "").trim().toLowerCase();
7
+ if (!candidate) {
8
+ return fallback;
9
+ }
10
+
11
+ const short = candidate.split("-")[0];
12
+ return SUPPORTED_LANGS.has(short) ? short : fallback;
13
+ };
14
+
15
+ const resolveFilePreviewLang = (paramsLang, element) => {
16
+ const fromParams = normalizeLang(paramsLang, "");
17
+ if (fromParams) {
18
+ return fromParams;
19
+ }
20
+
21
+ const fromElement = normalizeLang(element?.getAttribute("lang"), "");
22
+ if (fromElement) {
23
+ return fromElement;
24
+ }
25
+
26
+ const fromClosest = normalizeLang(element?.closest("[lang]")?.getAttribute("lang"), "");
27
+ if (fromClosest) {
28
+ return fromClosest;
29
+ }
30
+
31
+ const fromHtml = normalizeLang(document?.documentElement?.getAttribute("lang"), "");
32
+ if (fromHtml) {
33
+ return fromHtml;
34
+ }
35
+
36
+ const fromNavigator = normalizeLang(window?.navigator?.language, "");
37
+ if (fromNavigator) {
38
+ return fromNavigator;
39
+ }
40
+
41
+ return "ru";
42
+ };
43
+
44
+ const createFilePreviewI18n = (lang = "ru") => {
45
+ const normalizedLang = normalizeLang(lang, "ru");
46
+ const messages = lang_messages(normalizedLang, "filepreview") || {};
47
+ const buttons = lang_buttons(normalizedLang, "filepreview") || {};
48
+
49
+ return {
50
+ lang: normalizedLang,
51
+ message: (key, fallback = "") => messages[key] || fallback,
52
+ button: (key, fallback = "") => buttons[key] || fallback
53
+ };
54
+ };
55
+
56
+ export { createFilePreviewI18n, resolveFilePreviewLang };