vgapp 1.1.5 → 1.1.6

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 (58) hide show
  1. package/CHANGELOG.md +28 -21
  2. package/README.md +48 -48
  3. package/agents.md +7 -0
  4. package/app/langs/en/buttons.json +17 -17
  5. package/app/langs/en/messages.json +36 -36
  6. package/app/langs/ru/buttons.json +17 -17
  7. package/app/langs/ru/messages.json +36 -36
  8. package/app/modules/vgfilepreview/js/i18n.js +56 -56
  9. package/app/modules/vgfilepreview/js/renderers/image-modal.js +145 -145
  10. package/app/modules/vgfilepreview/js/renderers/image.js +92 -92
  11. package/app/modules/vgfilepreview/js/renderers/index.js +19 -19
  12. package/app/modules/vgfilepreview/js/renderers/office-modal.js +168 -168
  13. package/app/modules/vgfilepreview/js/renderers/office.js +79 -79
  14. package/app/modules/vgfilepreview/js/renderers/pdf-modal.js +260 -260
  15. package/app/modules/vgfilepreview/js/renderers/pdf.js +76 -76
  16. package/app/modules/vgfilepreview/js/renderers/playlist.js +71 -71
  17. package/app/modules/vgfilepreview/js/renderers/text-modal.js +343 -343
  18. package/app/modules/vgfilepreview/js/renderers/text.js +83 -83
  19. package/app/modules/vgfilepreview/js/renderers/video-modal.js +272 -272
  20. package/app/modules/vgfilepreview/js/renderers/video.js +80 -80
  21. package/app/modules/vgfilepreview/js/renderers/zip-modal.js +522 -522
  22. package/app/modules/vgfilepreview/js/renderers/zip.js +89 -89
  23. package/app/modules/vgfilepreview/js/vgfilepreview.js +10 -5
  24. package/app/modules/vgfilepreview/readme.md +68 -68
  25. package/app/modules/vgfilepreview/scss/_variables.scss +113 -113
  26. package/app/modules/vgfilepreview/scss/vgfilepreview.scss +464 -464
  27. package/app/modules/vgfiles/js/base.js +18 -0
  28. package/app/modules/vgfiles/js/droppable.js +260 -260
  29. package/app/modules/vgfiles/js/render.js +153 -153
  30. package/app/modules/vgfiles/js/vgfiles.js +41 -41
  31. package/app/modules/vgfiles/readme.md +123 -123
  32. package/app/modules/vgfiles/scss/_variables.scss +18 -18
  33. package/app/modules/vgfiles/scss/vgfiles.scss +148 -148
  34. package/app/modules/vgformsender/js/vgformsender.js +13 -13
  35. package/app/modules/vgmodal/js/vgmodal.drag.js +332 -332
  36. package/app/modules/vgmodal/js/vgmodal.js +33 -33
  37. package/app/modules/vgmodal/js/vgmodal.resize.js +435 -435
  38. package/app/modules/vgnav/js/vgnav.js +135 -135
  39. package/app/modules/vgnav/readme.md +67 -67
  40. package/app/modules/vgnestable/README.md +307 -307
  41. package/app/modules/vgnestable/scss/_variables.scss +60 -60
  42. package/app/modules/vgnestable/scss/vgnestable.scss +163 -163
  43. package/app/modules/vgselect/js/vgselect.js +39 -39
  44. package/app/modules/vgselect/scss/vgselect.scss +22 -22
  45. package/app/modules/vgspy/readme.md +28 -28
  46. package/app/modules/vgtoast/js/vgtoast.drag.js +335 -0
  47. package/app/modules/vgtoast/js/vgtoast.js +198 -76
  48. package/app/modules/vgtoast/js/vgtoast.resize.js +437 -0
  49. package/app/utils/js/components/audio-metadata.js +240 -240
  50. package/app/utils/js/components/file-icon.js +109 -109
  51. package/app/utils/js/components/file-preview.js +304 -304
  52. package/app/utils/js/components/sanitize.js +150 -150
  53. package/app/utils/js/components/video-metadata.js +140 -140
  54. package/build/vgapp.css +1 -1
  55. package/build/vgapp.css.map +1 -1
  56. package/build/vgapp.js.map +1 -1
  57. package/index.scss +9 -9
  58. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,18 +1,30 @@
1
- # VEGAS-APP 1.1.5 (Апрель, 9, 2026)
2
- ## Новые фичи
3
- * В VGModal добавлены встроенные модули `VGModalDrag` и `VGModalResize` с поддержкой параметров `drag`/`resize` (включение, порог, зона edge, минимальные размеры, debug).
4
-
5
- ## Изменения
6
- * В VGFilePreview при `ui.nameOnly=true` блок `.preview` отключается (очистка + скрытие), отображается только имя файла.
7
- * В VGFilePreview добавлена интеграция метаданных для audio/video. Audio: `title` и `cover` из ID3; Video: генерация poster-кадра в `icon`.
8
- * В VGFilePreview унифицировано поведение имени для audio/video: `name` показывает title из метаданных (если есть), иначе имя файла; `original_name` при наличии title показывает имя файла.
9
- * В VGFilePreview клик по `.vg-filepreview-audio-inline__name` теперь запускает/ставит на паузу аудио.
10
- * В VGFilePreview клик по картинке в `icon` (image/audio cover/video poster) открывает ImageModal.
11
- * В стилях VGFilePreview добавлен `.is-preview-action { cursor: pointer; }`.
12
- * В VGFilePreview добавлена конфигурация предпросмотра по группам через `this._params.preview.<group>.enable` (`audio`, `video`, `image`, `archive`, `text`, `office`, `pdf`), в текущем состоянии по умолчанию группы включены.
13
- * В VGModal добавлено автоматическое управление drag/resize при `show/hide/resize` модального окна, с синхронизацией позиции и границ внутри viewport.
14
- * В VGFilePreview изменены дефолты групп предпросмотра: `image` и `office` включены по умолчанию (теперь включены все группы предпросмотра).
15
- * В VGFilePreview для image-файлов в `_shouldRenderPreviewForCurrentFile()` добавлено принудительное отключение inline-preview.
1
+ # VEGAS-APP 1.1.6 (Апрель, 10, 2026)
2
+ ## Новые фичи
3
+ * **VGToast**: добавлены встроенные модули VGToastDrag и VGToastResize с поддержкой параметров drag/resize (enable, threshold, edgeSize, minWidth/minHeight, debug).
4
+
5
+ ## Изменения
6
+ * В VGToast добавлено автоматическое управление drag/resize при show/hide/dispose и синхронизация позиции/размера внутри viewport.
7
+ * Исправлен скачок тоста при начале drag/resize: при подготовке позиции сбрасывается translate.
8
+ * Исправлено поведение автоскрытия при интеракции: таймер останавливается на pointerdown и корректно возобновляется на pointerup/pointercancel.
9
+ * В VGToast.build() при static: true и отсутствии явного autohide автоскрытие по умолчанию отключается.
10
+ * Исправлены некорректно отображавшиеся комментарии в vgtoast.js.
11
+
12
+ ---
13
+ # VEGAS-APP 1.1.5 (Апрель, 9, 2026)
14
+ ## Новые фичи
15
+ * В VGModal добавлены встроенные модули `VGModalDrag` и `VGModalResize` с поддержкой параметров `drag`/`resize` (включение, порог, зона edge, минимальные размеры, debug).
16
+
17
+ ## Изменения
18
+ * В VGFilePreview при `ui.nameOnly=true` блок `.preview` отключается (очистка + скрытие), отображается только имя файла.
19
+ * В VGFilePreview добавлена интеграция метаданных для audio/video. Audio: `title` и `cover` из ID3; Video: генерация poster-кадра в `icon`.
20
+ * В VGFilePreview унифицировано поведение имени для audio/video: `name` показывает title из метаданных (если есть), иначе имя файла; `original_name` при наличии title показывает имя файла.
21
+ * В VGFilePreview клик по `.vg-filepreview-audio-inline__name` теперь запускает/ставит на паузу аудио.
22
+ * В VGFilePreview клик по картинке в `icon` (image/audio cover/video poster) открывает ImageModal.
23
+ * В стилях VGFilePreview добавлен `.is-preview-action { cursor: pointer; }`.
24
+ * В VGFilePreview добавлена конфигурация предпросмотра по группам через `this._params.preview.<group>.enable` (`audio`, `video`, `image`, `archive`, `text`, `office`, `pdf`), в текущем состоянии по умолчанию группы включены.
25
+ * В VGModal добавлено автоматическое управление drag/resize при `show/hide/resize` модального окна, с синхронизацией позиции и границ внутри viewport.
26
+ * В VGFilePreview изменены дефолты групп предпросмотра: `image` и `office` включены по умолчанию (теперь включены все группы предпросмотра).
27
+ * В VGFilePreview для image-файлов в `_shouldRenderPreviewForCurrentFile()` добавлено принудительное отключение inline-preview.
16
28
 
17
29
  ---
18
30
  # VEGAS-APP 1.1.4 (Апрель, 9, 2026)
@@ -23,7 +35,6 @@
23
35
  * В модуле VGFilePreview параметр `ui.preview` сделан опциональным и выключен по умолчанию.
24
36
  * В модуле VGFilePreview длинные названия файлов и original name ограничены: `min-width: 60px` и `text-overflow: ellipsis`, чтобы название не схлопывалось.
25
37
 
26
-
27
38
  ---
28
39
 
29
40
  # VEGAS-APP 1.0.0 - 1.1.3 (Апрель, 9, 2026)
@@ -125,7 +136,6 @@
125
136
 
126
137
  * Исправлены ошибки в разных модулях
127
138
 
128
-
129
139
  ---
130
140
 
131
141
  # VEGAS-APP 0.7.2 - 0.7.4 (Декабрь, 04, 2025)
@@ -246,19 +256,16 @@
246
256
  * Новый параметр timeout. Задержка показа модального окна после закрытия других открытых окон.
247
257
  ---
248
258
 
249
-
250
259
  # VEGAS-APP 0.1.8 (Март, 13, 2025)
251
260
  ## Модуль VGSelect
252
261
  * Релиз
253
262
  ---
254
263
 
255
-
256
264
  # VEGAS-APP 0.1.7 (Март, 12, 2025)
257
265
  ## Модуль VGSelect
258
266
  * Исправлены ошибки
259
267
  ---
260
268
 
261
-
262
269
  # VEGAS-APP 0.1.5 (Март, 11, 2025)
263
270
  ## Модуль VGSelect
264
271
  ### Добавлено:
@@ -274,7 +281,6 @@
274
281
  * Событие после аякс запроса NAME_KEY.loaded
275
282
  ---
276
283
 
277
-
278
284
  # VEGAS-APP 0.1.4 (Март, 10, 2025)
279
285
  * Перенесен плагин (<a href="https://github.com/vegas-dev/vegas-select">VGSelect</a>) в модуль VGSelect
280
286
  * для модулей VGSidebar и VGModal добавлена возможность собирать параметры с кнопки вызова элемента
@@ -282,3 +288,4 @@
282
288
  * исправлены некоторые ошибки
283
289
  ---
284
290
 
291
+
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)
package/agents.md CHANGED
@@ -1,3 +1,9 @@
1
+ ### Окружение
2
+ - Проект, репозиторий, vegas-app является основным, фундаментальным. Тут идет разработка, редактирование проекта vgapp.
3
+ - Проект, репозиторий, vegas-app-backend является демонстрационным, для тестирования и проверки работоспособности.
4
+ - Оба проекта связаны между собой симлинками, но при этом имеют разные цели и функциональность.
5
+
6
+
1
7
  ### Свод правил:
2
8
  1. Правила по changelog для проекта vegas-app:
3
9
  - Правило: при команде "записать в changelog" или "дополни changelog" записываем вкратце изменения в файл `CHANGELOG.md`, которые были сделаны с прошлой версии. Записываем так: Версия (смотри `package.json`), дата и построчно что было внесено, нужно как-то выделить новые фичи.
@@ -5,3 +11,4 @@
5
11
  - Если версия в `package.json` не изменилась, нужно проверить, есть ли эта версия в `CHANGELOG.md`.
6
12
  - Если запись версии уже есть, дописывать изменения в существующую запись (как дополнение), а не создавать новый блок той же версии.
7
13
  - Если записи версии нет, создавать новый блок с версией из `package.json`, датой и списком изменений, запись добавляется сверху.
14
+ 2. Все файлы должны иметь кодировку UTF-8.
@@ -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 };