chuijs 4.0.1 → 4.0.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.
- package/CHANGELOG.md +113 -0
- package/README.md +43 -632
- package/framework/appLayout/default/chui_app_layout.js +314 -273
- package/framework/appLayout/default/global_style.css +93 -53
- package/framework/components/chui_accordion/accordion.js +29 -26
- package/framework/components/chui_accordion/styles.css +6 -5
- package/framework/components/chui_action_sheet/action_sheet.js +59 -33
- package/framework/components/chui_action_sheet/styles.css +2 -1
- package/framework/components/chui_affix/affix.js +11 -6
- package/framework/components/chui_alert/alert.js +23 -14
- package/framework/components/chui_avatar/avatar.js +23 -22
- package/framework/components/chui_avatar_group/avatar_group.js +21 -19
- package/framework/components/chui_backtop/backtop.js +35 -19
- package/framework/components/chui_badge/badge.js +15 -13
- package/framework/components/chui_breadcrumb/breadcrumb.js +15 -13
- package/framework/components/chui_button/button.js +42 -22
- package/framework/components/chui_button/styles.css +2 -2
- package/framework/components/chui_calendar/calendar.js +12 -10
- package/framework/components/chui_card/card.js +43 -23
- package/framework/components/chui_chat/chat.js +72 -33
- package/framework/components/chui_clipboard_history/clipboard_history.js +30 -21
- package/framework/components/chui_clipboard_history/styles.css +4 -2
- package/framework/components/chui_code/code.js +2 -2
- package/framework/components/chui_code/styles.css +2 -2
- package/framework/components/chui_code_editor/code_editor.js +47 -31
- package/framework/components/chui_code_editor/styles.css +3 -2
- package/framework/components/chui_command_palette/command_palette.js +60 -37
- package/framework/components/chui_console/console.js +5 -5
- package/framework/components/chui_console/styles.css +1 -1
- package/framework/components/chui_content_block/content_block.js +33 -19
- package/framework/components/chui_content_block/styles.css +2 -2
- package/framework/components/chui_context_menu/context_menu.js +9 -4
- package/framework/components/chui_custom_element/custom_element.js +22 -15
- package/framework/components/chui_data_grid/data_grid.js +396 -234
- package/framework/components/chui_data_grid/styles.css +10 -8
- package/framework/components/chui_descriptions/descriptions.js +34 -17
- package/framework/components/chui_details/details.js +32 -26
- package/framework/components/chui_details/styles.css +5 -4
- package/framework/components/chui_diff_viewer/diff_viewer.js +91 -66
- package/framework/components/chui_diff_viewer/styles.css +1 -1
- package/framework/components/chui_divider/divider.js +13 -11
- package/framework/components/chui_drawer/drawer.js +27 -25
- package/framework/components/chui_drop_zone/drop_zone.js +31 -21
- package/framework/components/chui_empty_state/empty_state.js +20 -15
- package/framework/components/chui_fieldset/fieldset.js +37 -20
- package/framework/components/chui_fieldset/styles.css +1 -1
- package/framework/components/chui_file_explorer/file_explorer.js +157 -86
- package/framework/components/chui_file_explorer/styles.css +2 -1
- package/framework/components/chui_form/form.js +31 -19
- package/framework/components/chui_form/styles.css +1 -1
- package/framework/components/chui_gantt/gantt.js +64 -40
- package/framework/components/chui_graphs/graphs.js +301 -200
- package/framework/components/chui_graphs/styles.css +1 -1
- package/framework/components/chui_hero/hero.js +40 -22
- package/framework/components/chui_html_block/html_block.js +6 -6
- package/framework/components/chui_html_block/styles.css +2 -2
- package/framework/components/chui_hx/hx.js +3 -3
- package/framework/components/chui_hx/styles.css +11 -4
- package/framework/components/chui_icons/icons.js +2109 -2109
- package/framework/components/chui_icons/styles.css +2 -2
- package/framework/components/chui_inputs/chui_check_box/check_box.js +31 -19
- package/framework/components/chui_inputs/chui_check_box/styles.css +18 -18
- package/framework/components/chui_inputs/chui_chips/chips.js +50 -40
- package/framework/components/chui_inputs/chui_chips/styles.css +4 -2
- package/framework/components/chui_inputs/chui_color_picker/color_picker.js +36 -24
- package/framework/components/chui_inputs/chui_combo_box/combo_box.js +100 -82
- package/framework/components/chui_inputs/chui_combo_box/styles.css +14 -12
- package/framework/components/chui_inputs/chui_date/date.js +102 -66
- package/framework/components/chui_inputs/chui_date/styles.css +12 -11
- package/framework/components/chui_inputs/chui_date_range/date_range.js +40 -29
- package/framework/components/chui_inputs/chui_datetime/datetime.js +35 -27
- package/framework/components/chui_inputs/chui_email/email.js +43 -31
- package/framework/components/chui_inputs/chui_email/styles.css +5 -5
- package/framework/components/chui_inputs/chui_file/file.js +68 -41
- package/framework/components/chui_inputs/chui_file/styles.css +13 -12
- package/framework/components/chui_inputs/chui_hotkey/hotkey.js +61 -36
- package/framework/components/chui_inputs/chui_masked/masked.js +39 -28
- package/framework/components/chui_inputs/chui_mention/mention.js +77 -30
- package/framework/components/chui_inputs/chui_multi_combo_box/multi_combo_box.js +173 -153
- package/framework/components/chui_inputs/chui_multi_combo_box/styles.css +9 -7
- package/framework/components/chui_inputs/chui_number/number.js +58 -41
- package/framework/components/chui_inputs/chui_number/styles.css +7 -7
- package/framework/components/chui_inputs/chui_otp/otp.js +38 -29
- package/framework/components/chui_inputs/chui_password/password.js +58 -36
- package/framework/components/chui_inputs/chui_password/styles.css +8 -8
- package/framework/components/chui_inputs/chui_radio_button/radio_button.js +37 -25
- package/framework/components/chui_inputs/chui_radio_button/styles.css +20 -20
- package/framework/components/chui_inputs/chui_rating/rating.js +26 -22
- package/framework/components/chui_inputs/chui_select_box/select_box.js +102 -78
- package/framework/components/chui_inputs/chui_select_box/styles.css +11 -11
- package/framework/components/chui_inputs/chui_slider/slider.js +29 -26
- package/framework/components/chui_inputs/chui_slider/styles.css +2 -1
- package/framework/components/chui_inputs/chui_text/styles.css +8 -8
- package/framework/components/chui_inputs/chui_text/text.js +65 -44
- package/framework/components/chui_inputs/chui_text_area/styles.css +6 -6
- package/framework/components/chui_inputs/chui_text_area/text_area.js +51 -28
- package/framework/components/chui_inputs/chui_time/styles.css +5 -3
- package/framework/components/chui_inputs/chui_time/time.js +38 -27
- package/framework/components/chui_inputs/chui_toggle/styles.css +3 -3
- package/framework/components/chui_inputs/chui_toggle/toggle.js +16 -16
- package/framework/components/chui_json_editor/json_editor.js +53 -43
- package/framework/components/chui_json_viewer/json_viewer.js +52 -33
- package/framework/components/chui_json_viewer/styles.css +3 -2
- package/framework/components/chui_kanban/kanban.js +52 -34
- package/framework/components/chui_kbd/kbd.js +12 -10
- package/framework/components/chui_label/label.js +14 -12
- package/framework/components/chui_label/styles.css +2 -2
- package/framework/components/chui_link/link.js +27 -20
- package/framework/components/chui_list/list.js +31 -27
- package/framework/components/chui_list/styles.css +2 -1
- package/framework/components/chui_markdown_editor/markdown_editor.js +60 -44
- package/framework/components/chui_media/audio.js +326 -227
- package/framework/components/chui_media/audio_styles.css +40 -21
- package/framework/components/chui_media/image.js +70 -38
- package/framework/components/chui_media/image_compare.js +52 -21
- package/framework/components/chui_media/image_styles.css +3 -3
- package/framework/components/chui_media/video.js +155 -62
- package/framework/components/chui_media/video_styles.css +33 -16
- package/framework/components/chui_menu_bar/menu_bar.js +26 -24
- package/framework/components/chui_menu_bar/styles.css +4 -2
- package/framework/components/chui_modal/modal.js +44 -43
- package/framework/components/chui_modal/styles.css +3 -2
- package/framework/components/chui_notification/notification.js +50 -34
- package/framework/components/chui_notification/notification_download.js +31 -25
- package/framework/components/chui_notification/notification_download_progress.css +3 -2
- package/framework/components/chui_notification/notification_download_progress.js +47 -41
- package/framework/components/chui_notification/notification_update.js +23 -16
- package/framework/components/chui_notification/status_plate.js +2 -2
- package/framework/components/chui_notification/styles_download.css +1 -1
- package/framework/components/chui_notification/styles_update.css +1 -1
- package/framework/components/chui_org_chart/org_chart.js +74 -35
- package/framework/components/chui_pagination/pagination.js +62 -27
- package/framework/components/chui_paragraph/paragraph.js +2 -2
- package/framework/components/chui_paragraph/styles.css +1 -1
- package/framework/components/chui_popover/popover.js +49 -28
- package/framework/components/chui_popups/popups.js +137 -108
- package/framework/components/chui_popups/styles.css +2 -2
- package/framework/components/chui_print_button/print_button.js +33 -23
- package/framework/components/chui_progress_bar/progress_bar.js +23 -15
- package/framework/components/chui_progress_bar/styles.css +2 -2
- package/framework/components/chui_progress_ring/progress_ring.js +17 -15
- package/framework/components/chui_qrcode/qrcode.js +75 -31
- package/framework/components/chui_query_builder/query_builder.js +216 -123
- package/framework/components/chui_radio_group/radio_group.js +36 -26
- package/framework/components/chui_radio_group/styles.css +1 -1
- package/framework/components/chui_result/result.js +26 -16
- package/framework/components/chui_scheduler/scheduler.js +57 -35
- package/framework/components/chui_scheduler/styles.css +6 -2
- package/framework/components/chui_segmented_control/segmented_control.js +27 -21
- package/framework/components/chui_settings/settings.js +122 -48
- package/framework/components/chui_shortcut_help/shortcut_help.js +55 -32
- package/framework/components/chui_sidebar_nav/sidebar_nav.js +33 -23
- package/framework/components/chui_skeleton/skeleton.js +29 -24
- package/framework/components/chui_slideshow/slideshow.js +60 -41
- package/framework/components/chui_slideshow/styles.css +18 -12
- package/framework/components/chui_spinner/spinner.js +8 -8
- package/framework/components/chui_spinner/styles.css +0 -1
- package/framework/components/chui_split_button/split_button.js +23 -18
- package/framework/components/chui_split_button/styles.css +1 -1
- package/framework/components/chui_splitter/splitter.js +35 -28
- package/framework/components/chui_statistic/statistic.js +65 -38
- package/framework/components/chui_status_bar/status_bar.js +11 -9
- package/framework/components/chui_stepper/stepper.js +27 -22
- package/framework/components/chui_sticky_bar/sticky_bar.js +9 -4
- package/framework/components/chui_sticky_bar/styles.css +3 -1
- package/framework/components/chui_tabs/chui_tabs.js +28 -22
- package/framework/components/chui_tabs/styles.css +3 -3
- package/framework/components/chui_text_editor/styles.css +20 -19
- package/framework/components/chui_text_editor/text_editor.js +85 -61
- package/framework/components/chui_text_editor/text_editor_panel.js +346 -284
- package/framework/components/chui_theme_toggle/theme_toggle.js +27 -22
- package/framework/components/chui_timeline/timeline.js +14 -12
- package/framework/components/chui_toast_queue/toast_queue.js +52 -46
- package/framework/components/chui_toolbar/toolbar.js +20 -13
- package/framework/components/chui_tooltip/tooltip.js +37 -24
- package/framework/components/chui_tour/styles.css +8 -3
- package/framework/components/chui_tour/tour.js +61 -27
- package/framework/components/chui_transfer/styles.css +2 -1
- package/framework/components/chui_transfer/transfer.js +75 -42
- package/framework/components/chui_tree_table/tree_table.js +43 -29
- package/framework/components/chui_tree_view/styles.css +4 -2
- package/framework/components/chui_tree_view/tree_view.js +142 -99
- package/framework/components/chui_watermark/watermark.js +24 -16
- package/framework/components/chui_webview/styles.css +2 -2
- package/framework/components/chui_webview/webview.js +62 -50
- package/framework/components/telegram_bot/chui_telegram_bot.js +71 -64
- package/framework/modules/chui_a11y/chui_a11y.js +77 -46
- package/framework/modules/chui_animations/animations.js +42 -42
- package/framework/modules/chui_animations/styles.css +1 -1
- package/framework/modules/chui_bridge/preload.js +56 -26
- package/framework/modules/chui_functions.js +52 -50
- package/framework/modules/chui_highlight/chui_highlight.js +25 -22
- package/framework/modules/chui_i18n/chui_i18n.js +9 -7
- package/framework/modules/chui_i18n/locales/a11y.js +5 -5
- package/framework/modules/chui_i18n/locales/app_layout.js +5 -5
- package/framework/modules/chui_i18n/locales/calendar.js +3 -3
- package/framework/modules/chui_i18n/locales/common.js +3 -3
- package/framework/modules/chui_i18n/locales/data.js +36 -26
- package/framework/modules/chui_i18n/locales/editors.js +40 -13
- package/framework/modules/chui_i18n/locales/feedback.js +3 -3
- package/framework/modules/chui_i18n/locales/forms.js +8 -8
- package/framework/modules/chui_i18n/locales/graphics.js +8 -8
- package/framework/modules/chui_i18n/locales/media.js +4 -4
- package/framework/modules/chui_i18n/locales/navigation.js +8 -8
- package/framework/modules/chui_i18n/locales/validate.js +3 -3
- package/framework/modules/chui_json/chui_json.js +9 -9
- package/framework/modules/chui_layout/chui_layout.js +12 -10
- package/framework/modules/chui_logger/chui_logger.js +29 -25
- package/framework/modules/chui_page/page.js +33 -27
- package/framework/modules/chui_page/styles.css +3 -26
- package/framework/modules/chui_qr/chui_qr.js +158 -67
- package/framework/modules/chui_scrollbar/chui_scrollbar.js +35 -24
- package/framework/modules/chui_scrollbar/styles.css +3 -1
- package/framework/modules/chui_services/chui_channels.js +76 -11
- package/framework/modules/chui_services/chui_services.js +39 -31
- package/framework/modules/chui_services/desktop.js +149 -30
- package/framework/modules/chui_sortable/chui_sortable.js +17 -12
- package/framework/modules/chui_validate/chui_validate.js +7 -4
- package/framework/tray_bar/chui_menu_items.js +136 -46
- package/index.d.ts +4814 -0
- package/index.js +449 -334
- package/package.json +79 -68
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
const fs = require("fs")
|
|
1
|
+
const fs = require("fs");
|
|
2
2
|
|
|
3
3
|
function sleep(ms) {
|
|
4
|
-
return new Promise(resolve => setTimeout(resolve, ms));
|
|
4
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
5
5
|
}
|
|
6
6
|
|
|
7
7
|
/** Кэш прочитанных таблиц стилей: один файл отдаётся разным `id` без повторного чтения с диска */
|
|
@@ -9,11 +9,11 @@ const styles_cache = new Map();
|
|
|
9
9
|
|
|
10
10
|
function setStyles(pathToCSS = String(), component = String()) {
|
|
11
11
|
if (document.getElementById(component) != null) return;
|
|
12
|
-
if (styles_cache.has(pathToCSS) === false) styles_cache.set(pathToCSS, fs.readFileSync(pathToCSS,
|
|
13
|
-
let style = document.createElement(
|
|
12
|
+
if (styles_cache.has(pathToCSS) === false) styles_cache.set(pathToCSS, fs.readFileSync(pathToCSS, "utf8"));
|
|
13
|
+
let style = document.createElement("style");
|
|
14
14
|
style.innerHTML = styles_cache.get(pathToCSS);
|
|
15
|
-
style.type =
|
|
16
|
-
style.setAttribute(
|
|
15
|
+
style.type = "text/css";
|
|
16
|
+
style.setAttribute("id", component);
|
|
17
17
|
document.head.appendChild(style);
|
|
18
18
|
}
|
|
19
19
|
|
|
@@ -23,17 +23,17 @@ function style_parse(json, component) {
|
|
|
23
23
|
let stringz = JSON.parse(JSON.stringify(json));
|
|
24
24
|
let style_string = [];
|
|
25
25
|
for (let i = 0; i < stringz.length; i++) {
|
|
26
|
-
style_string.push(`${stringz[i].name} {`)
|
|
27
|
-
JSON.parse(JSON.stringify(stringz[i].style), function(key, value) {
|
|
28
|
-
if (typeof value !==
|
|
26
|
+
style_string.push(`${stringz[i].name} {`);
|
|
27
|
+
JSON.parse(JSON.stringify(stringz[i].style), function (key, value) {
|
|
28
|
+
if (typeof value !== "object") style_string.push(`${key}:${value};`);
|
|
29
29
|
return value;
|
|
30
30
|
});
|
|
31
|
-
style_string.push(`}\n`)
|
|
31
|
+
style_string.push(`}\n`);
|
|
32
32
|
}
|
|
33
|
-
let style = document.createElement(
|
|
33
|
+
let style = document.createElement("style");
|
|
34
34
|
style.innerText = style_string.join("").slice(0, -1);
|
|
35
|
-
style.type =
|
|
36
|
-
style.setAttribute(
|
|
35
|
+
style.type = "text/css";
|
|
36
|
+
style.setAttribute("id", component);
|
|
37
37
|
document.head.appendChild(style);
|
|
38
38
|
}
|
|
39
39
|
|
|
@@ -48,13 +48,13 @@ const render = (rendez) => {
|
|
|
48
48
|
reject(e);
|
|
49
49
|
}
|
|
50
50
|
};
|
|
51
|
-
if (document.readyState ===
|
|
51
|
+
if (document.readyState === "loading") window.addEventListener("DOMContentLoaded", run, { once: true });
|
|
52
52
|
else run();
|
|
53
53
|
});
|
|
54
|
-
}
|
|
54
|
+
};
|
|
55
55
|
|
|
56
56
|
function getDefaultIcon() {
|
|
57
|
-
return require(
|
|
57
|
+
return require("path").join(__dirname, "chui_icon.png");
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
const DROPDOWN_VIEWPORT_MARGIN = 8;
|
|
@@ -70,7 +70,8 @@ function dropdownViewport(anchor = new HTMLElement()) {
|
|
|
70
70
|
let current = anchor.parentElement;
|
|
71
71
|
while (current !== null) {
|
|
72
72
|
const style = window.getComputedStyle(current);
|
|
73
|
-
const clips =
|
|
73
|
+
const clips =
|
|
74
|
+
/(auto|scroll|overlay|hidden)/.test(style.overflowY) ||
|
|
74
75
|
/(auto|scroll|overlay|hidden)/.test(style.overflowX);
|
|
75
76
|
if (clips) {
|
|
76
77
|
const box = current.getBoundingClientRect();
|
|
@@ -79,7 +80,7 @@ function dropdownViewport(anchor = new HTMLElement()) {
|
|
|
79
80
|
}
|
|
80
81
|
current = current.parentElement;
|
|
81
82
|
}
|
|
82
|
-
return {top: top, bottom: Math.max(bottom, top)};
|
|
83
|
+
return { top: top, bottom: Math.max(bottom, top) };
|
|
83
84
|
}
|
|
84
85
|
|
|
85
86
|
/**
|
|
@@ -93,7 +94,7 @@ function dropdownPlacement(dropdown = new HTMLElement(), anchor = new HTMLElemen
|
|
|
93
94
|
const spaceBelow = view.bottom - anchorRect.bottom - DROPDOWN_VIEWPORT_MARGIN;
|
|
94
95
|
const spaceAbove = anchorRect.top - view.top - DROPDOWN_VIEWPORT_MARGIN;
|
|
95
96
|
const up = dropdown.offsetHeight > spaceBelow && spaceAbove >= spaceBelow;
|
|
96
|
-
return {up: up, maxHeight: Math.max(0, up ? spaceAbove : spaceBelow)};
|
|
97
|
+
return { up: up, maxHeight: Math.max(0, up ? spaceAbove : spaceBelow) };
|
|
97
98
|
}
|
|
98
99
|
|
|
99
100
|
/**
|
|
@@ -116,24 +117,25 @@ function shouldOpenDropdownUp(dropdown = new HTMLElement(), anchor = new HTMLEle
|
|
|
116
117
|
let markdown_parser = undefined;
|
|
117
118
|
function markdownToHtml(text = String()) {
|
|
118
119
|
if (text === undefined || text === null || String(text) === "") return "";
|
|
119
|
-
if (markdown_parser === undefined)
|
|
120
|
+
if (markdown_parser === undefined)
|
|
121
|
+
markdown_parser = new (require("markdown-it"))({ html: false, linkify: false, breaks: false });
|
|
120
122
|
return markdown_parser.render(String(text)).trim();
|
|
121
123
|
}
|
|
122
124
|
|
|
123
125
|
/** Обратный разбор: HTML → markdown (`turndown`) */
|
|
124
126
|
function htmlToMarkdown(text = String()) {
|
|
125
127
|
if (text === undefined || text === null || String(text) === "") return "";
|
|
126
|
-
const TurndownService = require(
|
|
128
|
+
const TurndownService = require("turndown");
|
|
127
129
|
return new TurndownService().turndown(String(text));
|
|
128
130
|
}
|
|
129
131
|
|
|
130
132
|
function getDate() {
|
|
131
133
|
let date = new Date();
|
|
132
|
-
let day = (
|
|
133
|
-
let month = (
|
|
134
|
+
let day = ("0" + Number(date.getDate()).toString()).slice(-2);
|
|
135
|
+
let month = ("0" + Number(date.getMonth() + 1).toString()).slice(-2);
|
|
134
136
|
let year = date.getFullYear();
|
|
135
|
-
let hours = (
|
|
136
|
-
let minutes = (
|
|
137
|
+
let hours = ("0" + Number(date.getHours()).toString()).slice(-2);
|
|
138
|
+
let minutes = ("0" + Number(date.getMinutes()).toString()).slice(-2);
|
|
137
139
|
return `${day}.${month}.${year} ${hours}:${minutes}`;
|
|
138
140
|
}
|
|
139
141
|
|
|
@@ -145,8 +147,8 @@ function getDate() {
|
|
|
145
147
|
* в узкой карточке съедала полстроки заголовка и читалась служебной подписью.
|
|
146
148
|
*/
|
|
147
149
|
function getTime(date = new Date()) {
|
|
148
|
-
const hours = (
|
|
149
|
-
const minutes = (
|
|
150
|
+
const hours = ("0" + Number(date.getHours()).toString()).slice(-2);
|
|
151
|
+
const minutes = ("0" + Number(date.getMinutes()).toString()).slice(-2);
|
|
150
152
|
return `${hours}:${minutes}`;
|
|
151
153
|
}
|
|
152
154
|
|
|
@@ -159,18 +161,18 @@ function getTime(date = new Date()) {
|
|
|
159
161
|
* как строки.
|
|
160
162
|
*/
|
|
161
163
|
function getDayKey(date = new Date()) {
|
|
162
|
-
const month = (
|
|
163
|
-
const day = (
|
|
164
|
+
const month = ("0" + Number(date.getMonth() + 1).toString()).slice(-2);
|
|
165
|
+
const day = ("0" + Number(date.getDate()).toString()).slice(-2);
|
|
164
166
|
return `${date.getFullYear()}-${month}-${day}`;
|
|
165
167
|
}
|
|
166
168
|
|
|
167
169
|
function formatBytes(bytes, decimals = 2) {
|
|
168
|
-
if (!+bytes) return
|
|
169
|
-
const k = 1024
|
|
170
|
-
const dm = decimals < 0 ? 0 : decimals
|
|
171
|
-
const sizes = [
|
|
172
|
-
const i = Math.floor(Math.log(bytes) / Math.log(k))
|
|
173
|
-
return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}
|
|
170
|
+
if (!+bytes) return "0 Bytes";
|
|
171
|
+
const k = 1024;
|
|
172
|
+
const dm = decimals < 0 ? 0 : decimals;
|
|
173
|
+
const sizes = ["Bytes", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"];
|
|
174
|
+
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
175
|
+
return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;
|
|
174
176
|
}
|
|
175
177
|
|
|
176
178
|
/**
|
|
@@ -204,18 +206,18 @@ function scrollParent(node = undefined) {
|
|
|
204
206
|
return document.scrollingElement;
|
|
205
207
|
}
|
|
206
208
|
|
|
207
|
-
exports.getDate = getDate
|
|
208
|
-
exports.getTime = getTime
|
|
209
|
-
exports.getDayKey = getDayKey
|
|
210
|
-
exports.sleep = sleep
|
|
211
|
-
exports.style_parse = style_parse
|
|
212
|
-
exports.render = render
|
|
213
|
-
exports.markdownToHtml = markdownToHtml
|
|
214
|
-
exports.htmlToMarkdown = htmlToMarkdown
|
|
215
|
-
exports.getDefaultIcon = getDefaultIcon
|
|
216
|
-
exports.shouldOpenDropdownUp = shouldOpenDropdownUp
|
|
217
|
-
exports.dropdownPlacement = dropdownPlacement
|
|
218
|
-
exports.setStyles = setStyles
|
|
219
|
-
exports.formatBytes = formatBytes
|
|
220
|
-
exports.optionOr = optionOr
|
|
221
|
-
exports.scrollParent = scrollParent
|
|
209
|
+
exports.getDate = getDate;
|
|
210
|
+
exports.getTime = getTime;
|
|
211
|
+
exports.getDayKey = getDayKey;
|
|
212
|
+
exports.sleep = sleep;
|
|
213
|
+
exports.style_parse = style_parse;
|
|
214
|
+
exports.render = render;
|
|
215
|
+
exports.markdownToHtml = markdownToHtml;
|
|
216
|
+
exports.htmlToMarkdown = htmlToMarkdown;
|
|
217
|
+
exports.getDefaultIcon = getDefaultIcon;
|
|
218
|
+
exports.shouldOpenDropdownUp = shouldOpenDropdownUp;
|
|
219
|
+
exports.dropdownPlacement = dropdownPlacement;
|
|
220
|
+
exports.setStyles = setStyles;
|
|
221
|
+
exports.formatBytes = formatBytes;
|
|
222
|
+
exports.optionOr = optionOr;
|
|
223
|
+
exports.scrollParent = scrollParent;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const {setStyles} = require("../chui_functions");
|
|
1
|
+
const { setStyles } = require("../chui_functions");
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Подсветка кода регулярными токенами: общий модуль для `CodeEditor` и `JsonEditor`.
|
|
@@ -16,32 +16,35 @@ const {setStyles} = require("../chui_functions");
|
|
|
16
16
|
*/
|
|
17
17
|
const RULES = {
|
|
18
18
|
javascript: [
|
|
19
|
-
{type: "comment", source: "/\\*[\\s\\S]*?\\*/|//[^\\n]*"},
|
|
20
|
-
{type: "string", source: "`(?:\\\\.|[^`\\\\])*`|\"(?:\\\\.|[^\"\\\\\\n])*\"|'(?:\\\\.|[^'\\\\\\n])*'"},
|
|
21
|
-
{type: "number", source: "\\b(?:0[xX][0-9a-fA-F]+|\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)\\b"},
|
|
22
|
-
{
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
19
|
+
{ type: "comment", source: "/\\*[\\s\\S]*?\\*/|//[^\\n]*" },
|
|
20
|
+
{ type: "string", source: "`(?:\\\\.|[^`\\\\])*`|\"(?:\\\\.|[^\"\\\\\\n])*\"|'(?:\\\\.|[^'\\\\\\n])*'" },
|
|
21
|
+
{ type: "number", source: "\\b(?:0[xX][0-9a-fA-F]+|\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)\\b" },
|
|
22
|
+
{
|
|
23
|
+
type: "keyword",
|
|
24
|
+
source: "\\b(?:const|let|var|function|return|if|else|for|while|do|switch|case|break|continue|class|new|import|export|from|async|await|try|catch|finally|throw|typeof|instanceof|extends|super|this|null|undefined|true|false|delete|in|of|yield)\\b",
|
|
25
|
+
},
|
|
26
|
+
{ type: "function", source: "\\b[A-Za-z_$][\\w$]*(?=\\s*\\()" },
|
|
27
|
+
{ type: "property", source: "(?<=\\.)[A-Za-z_$][\\w$]*" },
|
|
28
|
+
{ type: "operator", source: "=>|===|!==|==|!=|<=|>=|&&|\\|\\||[+\\-*/%!<>=&|^~?:]" },
|
|
26
29
|
],
|
|
27
30
|
json: [
|
|
28
|
-
{type: "key", source: "
|
|
29
|
-
{type: "string", source: "
|
|
30
|
-
{type: "number", source: "-?\\b\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?\\b"},
|
|
31
|
-
{type: "keyword", source: "\\b(?:true|false|null)\\b"},
|
|
32
|
-
{type: "operator", source: "[{}\\[\\],:]"}
|
|
31
|
+
{ type: "key", source: '"(?:\\\\.|[^"\\\\])*"(?=\\s*:)' },
|
|
32
|
+
{ type: "string", source: '"(?:\\\\.|[^"\\\\])*"' },
|
|
33
|
+
{ type: "number", source: "-?\\b\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?\\b" },
|
|
34
|
+
{ type: "keyword", source: "\\b(?:true|false|null)\\b" },
|
|
35
|
+
{ type: "operator", source: "[{}\\[\\],:]" },
|
|
33
36
|
],
|
|
34
37
|
css: [
|
|
35
|
-
{type: "comment", source: "/\\*[\\s\\S]*?\\*/"},
|
|
36
|
-
{type: "keyword", source: "@[a-zA-Z-]+"},
|
|
37
|
-
{type: "string", source: "\"(?:\\\\.|[^\"\\\\\n])*\"|'(?:\\\\.|[^'\\\\\n])*'"},
|
|
38
|
+
{ type: "comment", source: "/\\*[\\s\\S]*?\\*/" },
|
|
39
|
+
{ type: "keyword", source: "@[a-zA-Z-]+" },
|
|
40
|
+
{ type: "string", source: "\"(?:\\\\.|[^\"\\\\\n])*\"|'(?:\\\\.|[^'\\\\\n])*'" },
|
|
38
41
|
// Цвета проверяем раньше селекторов: #ff9500 иначе считался бы идентификатором
|
|
39
|
-
{type: "color", source: "#[0-9a-fA-F]{3,8}\\b"},
|
|
40
|
-
{type: "selector", source: "[.#][A-Za-z_][\\w-]*|(?<=^|\\s|,)[a-zA-Z][\\w-]*(?=\\s*[,{])"},
|
|
41
|
-
{type: "property", source: "[a-zA-Z-]+(?=\\s*:)"},
|
|
42
|
-
{type: "number", source: "-?\\b\\d+(?:\\.\\d+)?(?:px|em|rem|%|vh|vw|s|ms|deg|fr)?\\b"},
|
|
43
|
-
{type: "operator", source: "[{};:,]"}
|
|
44
|
-
]
|
|
42
|
+
{ type: "color", source: "#[0-9a-fA-F]{3,8}\\b" },
|
|
43
|
+
{ type: "selector", source: "[.#][A-Za-z_][\\w-]*|(?<=^|\\s|,)[a-zA-Z][\\w-]*(?=\\s*[,{])" },
|
|
44
|
+
{ type: "property", source: "[a-zA-Z-]+(?=\\s*:)" },
|
|
45
|
+
{ type: "number", source: "-?\\b\\d+(?:\\.\\d+)?(?:px|em|rem|%|vh|vw|s|ms|deg|fr)?\\b" },
|
|
46
|
+
{ type: "operator", source: "[{};:,]" },
|
|
47
|
+
],
|
|
45
48
|
};
|
|
46
49
|
|
|
47
50
|
/** Языки, для которых есть правила подсветки */
|
|
@@ -29,16 +29,16 @@ const NAMESPACES = [
|
|
|
29
29
|
require("./locales/navigation"),
|
|
30
30
|
require("./locales/forms"),
|
|
31
31
|
require("./locales/feedback"),
|
|
32
|
-
require("./locales/graphics")
|
|
32
|
+
require("./locales/graphics"),
|
|
33
33
|
];
|
|
34
34
|
|
|
35
35
|
/** Направление письма по умолчанию для известных языков: остальные считаются LTR */
|
|
36
|
-
const DIRECTIONS = {ar: "rtl", he: "rtl", fa: "rtl", ur: "rtl"};
|
|
36
|
+
const DIRECTIONS = { ar: "rtl", he: "rtl", fa: "rtl", ur: "rtl" };
|
|
37
37
|
|
|
38
38
|
const FALLBACK = "ru";
|
|
39
39
|
|
|
40
40
|
function buildDictionaries() {
|
|
41
|
-
const dictionaries = {ru: {}, en: {}};
|
|
41
|
+
const dictionaries = { ru: {}, en: {} };
|
|
42
42
|
for (const namespace of NAMESPACES) {
|
|
43
43
|
for (const locale of Object.keys(namespace)) {
|
|
44
44
|
if (dictionaries[locale] === undefined) dictionaries[locale] = {};
|
|
@@ -111,7 +111,9 @@ class I18n {
|
|
|
111
111
|
if (entry === undefined) return String(key);
|
|
112
112
|
const template = typeof entry === "object" && entry !== null ? this.#pluralForm(entry, params) : entry;
|
|
113
113
|
if (params === undefined) return template;
|
|
114
|
-
return template.replace(/\{(\w+)\}/g, (match, name) =>
|
|
114
|
+
return template.replace(/\{(\w+)\}/g, (match, name) =>
|
|
115
|
+
params[name] === undefined ? match : String(params[name])
|
|
116
|
+
);
|
|
115
117
|
}
|
|
116
118
|
|
|
117
119
|
/** Форма числа по правилам языка: `count` обязателен, иначе берётся `other` */
|
|
@@ -137,7 +139,7 @@ class I18n {
|
|
|
137
139
|
|
|
138
140
|
/** Словарь языка целиком (для инструментов и тестов) */
|
|
139
141
|
static getMessages(locale = this.#locale) {
|
|
140
|
-
return {...(this.#dictionaries[locale] === undefined ? {} : this.#dictionaries[locale])};
|
|
142
|
+
return { ...(this.#dictionaries[locale] === undefined ? {} : this.#dictionaries[locale]) };
|
|
141
143
|
}
|
|
142
144
|
|
|
143
145
|
/**
|
|
@@ -182,8 +184,8 @@ class I18n {
|
|
|
182
184
|
}
|
|
183
185
|
}
|
|
184
186
|
|
|
185
|
-
exports.I18n = I18n
|
|
186
|
-
exports.I18N_DIRECTIONS = DIRECTIONS
|
|
187
|
+
exports.I18n = I18n;
|
|
188
|
+
exports.I18N_DIRECTIONS = DIRECTIONS;
|
|
187
189
|
|
|
188
190
|
// При загрузке в рендерере документ сразу получает `dir` и `lang` по умолчанию:
|
|
189
191
|
// без атрибута стили с логическими свойствами не знают направления
|
|
@@ -18,7 +18,7 @@ module.exports = {
|
|
|
18
18
|
"a11y.sideBottom": "Снизу",
|
|
19
19
|
"a11y.previous": "Назад",
|
|
20
20
|
"a11y.next": "Вперёд",
|
|
21
|
-
"a11y.splitterValue": "{first} {firstPercent}%, {second} {secondPercent}% (всего {total}%)"
|
|
21
|
+
"a11y.splitterValue": "{first} {firstPercent}%, {second} {secondPercent}% (всего {total}%)",
|
|
22
22
|
},
|
|
23
23
|
en: {
|
|
24
24
|
"a11y.closeDialog": "Close dialog",
|
|
@@ -26,8 +26,8 @@ module.exports = {
|
|
|
26
26
|
"a11y.closeMessage": "Close message",
|
|
27
27
|
"a11y.resizePanel": "Resize panels",
|
|
28
28
|
"a11y.resizePanelHint": "Drag to resize, double-click to restore the original sizes",
|
|
29
|
-
"a11y.expandNode":
|
|
30
|
-
"a11y.collapseNode":
|
|
29
|
+
"a11y.expandNode": 'Expand "{name}"',
|
|
30
|
+
"a11y.collapseNode": 'Collapse "{name}"',
|
|
31
31
|
"a11y.backToTop": "Back to top",
|
|
32
32
|
"a11y.sideLeft": "Left",
|
|
33
33
|
"a11y.sideRight": "Right",
|
|
@@ -35,6 +35,6 @@ module.exports = {
|
|
|
35
35
|
"a11y.sideBottom": "Bottom",
|
|
36
36
|
"a11y.previous": "Previous",
|
|
37
37
|
"a11y.next": "Next",
|
|
38
|
-
"a11y.splitterValue": "{first} {firstPercent}%, {second} {secondPercent}% ({total}% total)"
|
|
39
|
-
}
|
|
38
|
+
"a11y.splitterValue": "{first} {firstPercent}%, {second} {secondPercent}% ({total}% total)",
|
|
39
|
+
},
|
|
40
40
|
};
|
|
@@ -12,7 +12,7 @@ module.exports = {
|
|
|
12
12
|
"appLayout.search.placeholder": "Поиск...",
|
|
13
13
|
"appLayout.search.sections": "Поиск по разделам",
|
|
14
14
|
"appLayout.search.empty": "Ничего не найдено",
|
|
15
|
-
"appLayout.search.alreadyAdded":
|
|
15
|
+
"appLayout.search.alreadyAdded": 'Страница "{title}" уже добавлена в меню',
|
|
16
16
|
"appLayout.notifications.title": "Уведомления",
|
|
17
17
|
"appLayout.notifications.empty": "Уведомлений пока нет",
|
|
18
18
|
"appLayout.notifications.today": "Сегодня",
|
|
@@ -30,7 +30,7 @@ module.exports = {
|
|
|
30
30
|
"appLayout.update.downloaded": "Загрузка завершена",
|
|
31
31
|
"appLayout.update.downloading": "Загрузка новой версии {version}",
|
|
32
32
|
"appLayout.recentDocuments": "Открыть последние",
|
|
33
|
-
"appLayout.clearRecentDocuments": "Очистить список"
|
|
33
|
+
"appLayout.clearRecentDocuments": "Очистить список",
|
|
34
34
|
},
|
|
35
35
|
en: {
|
|
36
36
|
"appLayout.window.close": "Close",
|
|
@@ -41,7 +41,7 @@ module.exports = {
|
|
|
41
41
|
"appLayout.search.placeholder": "Search...",
|
|
42
42
|
"appLayout.search.sections": "Search sections",
|
|
43
43
|
"appLayout.search.empty": "Nothing found",
|
|
44
|
-
"appLayout.search.alreadyAdded":
|
|
44
|
+
"appLayout.search.alreadyAdded": 'Page "{title}" is already in the menu',
|
|
45
45
|
"appLayout.notifications.title": "Notifications",
|
|
46
46
|
"appLayout.notifications.empty": "No notifications yet",
|
|
47
47
|
"appLayout.notifications.today": "Today",
|
|
@@ -59,6 +59,6 @@ module.exports = {
|
|
|
59
59
|
"appLayout.update.downloaded": "Download complete",
|
|
60
60
|
"appLayout.update.downloading": "Downloading version {version}",
|
|
61
61
|
"appLayout.recentDocuments": "Open recent",
|
|
62
|
-
"appLayout.clearRecentDocuments": "Clear list"
|
|
63
|
-
}
|
|
62
|
+
"appLayout.clearRecentDocuments": "Clear list",
|
|
63
|
+
},
|
|
64
64
|
};
|
|
@@ -49,7 +49,7 @@ module.exports = {
|
|
|
49
49
|
"gantt.task": "Задача",
|
|
50
50
|
"gantt.empty": "Задач нет",
|
|
51
51
|
"gantt.progress": "выполнено {progress}%",
|
|
52
|
-
"gantt.dependsOn": "зависит от: {tasks}"
|
|
52
|
+
"gantt.dependsOn": "зависит от: {tasks}",
|
|
53
53
|
},
|
|
54
54
|
en: {
|
|
55
55
|
"date.calendar": "Calendar",
|
|
@@ -95,6 +95,6 @@ module.exports = {
|
|
|
95
95
|
"gantt.task": "Task",
|
|
96
96
|
"gantt.empty": "No tasks",
|
|
97
97
|
"gantt.progress": "{progress}% done",
|
|
98
|
-
"gantt.dependsOn": "depends on: {tasks}"
|
|
99
|
-
}
|
|
98
|
+
"gantt.dependsOn": "depends on: {tasks}",
|
|
99
|
+
},
|
|
100
100
|
};
|
|
@@ -28,7 +28,7 @@ module.exports = {
|
|
|
28
28
|
"common.expand": "Развернуть",
|
|
29
29
|
"common.collapse": "Свернуть",
|
|
30
30
|
"common.today": "Сегодня",
|
|
31
|
-
"common.yesterday": "Вчера"
|
|
31
|
+
"common.yesterday": "Вчера",
|
|
32
32
|
},
|
|
33
33
|
en: {
|
|
34
34
|
"common.close": "Close",
|
|
@@ -55,6 +55,6 @@ module.exports = {
|
|
|
55
55
|
"common.expand": "Expand",
|
|
56
56
|
"common.collapse": "Collapse",
|
|
57
57
|
"common.today": "Today",
|
|
58
|
-
"common.yesterday": "Yesterday"
|
|
59
|
-
}
|
|
58
|
+
"common.yesterday": "Yesterday",
|
|
59
|
+
},
|
|
60
60
|
};
|
|
@@ -69,7 +69,12 @@ module.exports = {
|
|
|
69
69
|
"data.orgChartEmpty": "В схеме нет сотрудников",
|
|
70
70
|
"data.orgChartExpanded": "Развёрнуто: {name}, подчинённых {count}",
|
|
71
71
|
"data.orgChartCollapsed": "Свёрнуто: {name}, скрыто подчинённых {count}",
|
|
72
|
-
"data.orgChartReports": {
|
|
72
|
+
"data.orgChartReports": {
|
|
73
|
+
one: "{count} подчинённый",
|
|
74
|
+
few: "{count} подчинённых",
|
|
75
|
+
many: "{count} подчинённых",
|
|
76
|
+
other: "{count} подчинённых",
|
|
77
|
+
},
|
|
73
78
|
|
|
74
79
|
"transfer.title": "Перенос значений",
|
|
75
80
|
"transfer.available": "Доступно",
|
|
@@ -154,7 +159,12 @@ module.exports = {
|
|
|
154
159
|
"queryBuilder.yes": "Да",
|
|
155
160
|
"queryBuilder.no": "Нет",
|
|
156
161
|
"queryBuilder.unset": "Не выбрано",
|
|
157
|
-
"queryBuilder.rulesCount": {
|
|
162
|
+
"queryBuilder.rulesCount": {
|
|
163
|
+
one: "{count} условие",
|
|
164
|
+
few: "{count} условия",
|
|
165
|
+
many: "{count} условий",
|
|
166
|
+
other: "{count} условия",
|
|
167
|
+
},
|
|
158
168
|
"queryBuilder.operator.equals": "равно",
|
|
159
169
|
"queryBuilder.operator.notEquals": "не равно",
|
|
160
170
|
"queryBuilder.operator.contains": "содержит",
|
|
@@ -166,7 +176,7 @@ module.exports = {
|
|
|
166
176
|
"queryBuilder.operator.less": "меньше",
|
|
167
177
|
"queryBuilder.operator.lessOrEqual": "меньше или равно",
|
|
168
178
|
"queryBuilder.operator.isEmpty": "пусто",
|
|
169
|
-
"queryBuilder.operator.isNotEmpty": "не пусто"
|
|
179
|
+
"queryBuilder.operator.isNotEmpty": "не пусто",
|
|
170
180
|
},
|
|
171
181
|
en: {
|
|
172
182
|
"data.empty": "No data",
|
|
@@ -199,28 +209,28 @@ module.exports = {
|
|
|
199
209
|
"dataGrid.groupTitle": "{key} — rows: {count}",
|
|
200
210
|
"dataGrid.columns": "Columns",
|
|
201
211
|
"dataGrid.showAll": "Show all",
|
|
202
|
-
"dataGrid.columnMove":
|
|
203
|
-
"dataGrid.columnPlace":
|
|
212
|
+
"dataGrid.columnMove": 'Moving column "{title}"',
|
|
213
|
+
"dataGrid.columnPlace": 'Column "{title}" is at position {place} of {total}',
|
|
204
214
|
"dataGrid.emptyValue": "empty",
|
|
205
215
|
"dataGrid.yes": "yes",
|
|
206
216
|
"dataGrid.no": "no",
|
|
207
|
-
"dataGrid.editStart":
|
|
208
|
-
"dataGrid.enterNumber": "
|
|
209
|
-
"dataGrid.notNumber": "
|
|
210
|
-
"dataGrid.editCanceled": "
|
|
217
|
+
"dataGrid.editStart": 'Editing: "{title}", row {row}',
|
|
218
|
+
"dataGrid.enterNumber": '"{title}": enter a number',
|
|
219
|
+
"dataGrid.notNumber": '"{title}": "{text}" is not a number',
|
|
220
|
+
"dataGrid.editCanceled": '"{title}": editing canceled',
|
|
211
221
|
"dataGrid.editCanceledReason": "{message} — editing canceled",
|
|
212
|
-
"dataGrid.saved":
|
|
222
|
+
"dataGrid.saved": 'Saved: "{title}" = {value}',
|
|
213
223
|
"dataGrid.loadedRows": "Rows loaded: {shown}",
|
|
214
224
|
"dataGrid.loadedRowsOf": "Rows loaded: {shown} of {total}",
|
|
215
|
-
"dataGrid.filterActive":
|
|
216
|
-
"dataGrid.filterSummary":
|
|
225
|
+
"dataGrid.filterActive": 'filter "{filter}"',
|
|
226
|
+
"dataGrid.filterSummary": 'Filter "{filter}": {shown} of {total}',
|
|
217
227
|
"dataGrid.rowsSummary": "Rows: {shown}",
|
|
218
228
|
"dataGrid.groupsSummary": "groups: {count}",
|
|
219
|
-
"dataGrid.sortSummary":
|
|
229
|
+
"dataGrid.sortSummary": 'sorted by "{title}" {direction}',
|
|
220
230
|
|
|
221
|
-
"table.sortBy":
|
|
231
|
+
"table.sortBy": 'Sort by "{head}"',
|
|
222
232
|
"table.filter": "Filter",
|
|
223
|
-
"table.filterBy":
|
|
233
|
+
"table.filterBy": 'Filter by "{title}"',
|
|
224
234
|
"table.filterFound": "Filter: {found} of {total} found",
|
|
225
235
|
"table.selectedRows": "Rows selected: {count}",
|
|
226
236
|
|
|
@@ -230,23 +240,23 @@ module.exports = {
|
|
|
230
240
|
"data.orgChartEmpty": "No employees in the chart",
|
|
231
241
|
"data.orgChartExpanded": "Expanded: {name}, {count} reports",
|
|
232
242
|
"data.orgChartCollapsed": "Collapsed: {name}, {count} reports hidden",
|
|
233
|
-
"data.orgChartReports": {one: "{count} report", other: "{count} reports"},
|
|
243
|
+
"data.orgChartReports": { one: "{count} report", other: "{count} reports" },
|
|
234
244
|
|
|
235
245
|
"transfer.title": "Transfer values",
|
|
236
246
|
"transfer.available": "Available",
|
|
237
247
|
"transfer.chosen": "Selected",
|
|
238
|
-
"transfer.addMarked":
|
|
239
|
-
"transfer.removeMarked":
|
|
248
|
+
"transfer.addMarked": 'Add marked to "{title}"',
|
|
249
|
+
"transfer.removeMarked": 'Remove marked from "{title}"',
|
|
240
250
|
"transfer.nothingChosen": "Nothing selected",
|
|
241
251
|
"transfer.nothingMarked": "Nothing marked",
|
|
242
252
|
"transfer.search": "Search",
|
|
243
|
-
"transfer.searchIn":
|
|
244
|
-
"transfer.clearSearchIn":
|
|
253
|
+
"transfer.searchIn": 'Search in "{title}"',
|
|
254
|
+
"transfer.clearSearchIn": 'Clear search in "{title}"',
|
|
245
255
|
"transfer.selectMin": "Select at least {min}",
|
|
246
256
|
"transfer.selectMax": "Select at most {max}",
|
|
247
257
|
"transfer.maxReached": "You can select at most {max}",
|
|
248
|
-
"transfer.emptyList":
|
|
249
|
-
"transfer.moved":
|
|
258
|
+
"transfer.emptyList": 'The list "{title}" is empty',
|
|
259
|
+
"transfer.moved": 'Moved to "{title}": {titles}. Selected {count} of {total}',
|
|
250
260
|
|
|
251
261
|
"treeTable.label": "Tree table",
|
|
252
262
|
"treeTable.shownRows": "Rows shown: {shown} of {total}",
|
|
@@ -315,7 +325,7 @@ module.exports = {
|
|
|
315
325
|
"queryBuilder.yes": "Yes",
|
|
316
326
|
"queryBuilder.no": "No",
|
|
317
327
|
"queryBuilder.unset": "Not selected",
|
|
318
|
-
"queryBuilder.rulesCount": {one: "{count} condition", other: "{count} conditions"},
|
|
328
|
+
"queryBuilder.rulesCount": { one: "{count} condition", other: "{count} conditions" },
|
|
319
329
|
"queryBuilder.operator.equals": "equals",
|
|
320
330
|
"queryBuilder.operator.notEquals": "does not equal",
|
|
321
331
|
"queryBuilder.operator.contains": "contains",
|
|
@@ -327,6 +337,6 @@ module.exports = {
|
|
|
327
337
|
"queryBuilder.operator.less": "less than",
|
|
328
338
|
"queryBuilder.operator.lessOrEqual": "less than or equal",
|
|
329
339
|
"queryBuilder.operator.isEmpty": "is empty",
|
|
330
|
-
"queryBuilder.operator.isNotEmpty": "is not empty"
|
|
331
|
-
}
|
|
332
|
-
};
|
|
340
|
+
"queryBuilder.operator.isNotEmpty": "is not empty",
|
|
341
|
+
},
|
|
342
|
+
};
|
|
@@ -104,10 +104,30 @@ module.exports = {
|
|
|
104
104
|
"jsonViewer.dataTree": "{name}: дерево данных",
|
|
105
105
|
"jsonViewer.expanded": "Развёрнуто: {name}",
|
|
106
106
|
"jsonViewer.collapsed": "Свёрнуто: {name}",
|
|
107
|
-
"jsonViewer.elements": {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
107
|
+
"jsonViewer.elements": {
|
|
108
|
+
one: "{count} элемент",
|
|
109
|
+
few: "{count} элемента",
|
|
110
|
+
many: "{count} элементов",
|
|
111
|
+
other: "{count} элемента",
|
|
112
|
+
},
|
|
113
|
+
"jsonViewer.properties": {
|
|
114
|
+
one: "{count} свойство",
|
|
115
|
+
few: "{count} свойства",
|
|
116
|
+
many: "{count} свойств",
|
|
117
|
+
other: "{count} свойства",
|
|
118
|
+
},
|
|
119
|
+
"jsonViewer.found": {
|
|
120
|
+
one: "Найден {count} узел",
|
|
121
|
+
few: "Найдено {count} узла",
|
|
122
|
+
many: "Найдено {count} узлов",
|
|
123
|
+
other: "Найдено {count} узла",
|
|
124
|
+
},
|
|
125
|
+
"jsonViewer.visible": {
|
|
126
|
+
one: "Виден {count} узел",
|
|
127
|
+
few: "Видно {count} узла",
|
|
128
|
+
many: "Видно {count} узлов",
|
|
129
|
+
other: "Видно {count} узла",
|
|
130
|
+
},
|
|
111
131
|
|
|
112
132
|
"diffViewer.title": "Сравнение текста",
|
|
113
133
|
"diffViewer.before": "Было",
|
|
@@ -119,8 +139,14 @@ module.exports = {
|
|
|
119
139
|
"diffViewer.lineAdded": "Добавлена строка {number}",
|
|
120
140
|
"diffViewer.lineRemoved": "Удалена строка {number}",
|
|
121
141
|
"diffViewer.lineChanged": "Заменена строка {number}",
|
|
122
|
-
"diffViewer.showLines": {
|
|
123
|
-
|
|
142
|
+
"diffViewer.showLines": {
|
|
143
|
+
one: "Показать {count} строку",
|
|
144
|
+
few: "Показать {count} строки",
|
|
145
|
+
many: "Показать {count} строк",
|
|
146
|
+
other: "Показать {count} строки",
|
|
147
|
+
},
|
|
148
|
+
"diffViewer.summary":
|
|
149
|
+
"Изменений: {groups}, добавлено строк: {added}, удалено строк: {removed}, заменено строк: {changed}",
|
|
124
150
|
},
|
|
125
151
|
en: {
|
|
126
152
|
"editor.formatting": "Formatting",
|
|
@@ -219,10 +245,10 @@ module.exports = {
|
|
|
219
245
|
"jsonViewer.dataTree": "{name}: data tree",
|
|
220
246
|
"jsonViewer.expanded": "Expanded: {name}",
|
|
221
247
|
"jsonViewer.collapsed": "Collapsed: {name}",
|
|
222
|
-
"jsonViewer.elements": {one: "{count} element", other: "{count} elements"},
|
|
223
|
-
"jsonViewer.properties": {one: "{count} property", other: "{count} properties"},
|
|
224
|
-
"jsonViewer.found": {one: "{count} node found", other: "{count} nodes found"},
|
|
225
|
-
"jsonViewer.visible": {one: "{count} node visible", other: "{count} nodes visible"},
|
|
248
|
+
"jsonViewer.elements": { one: "{count} element", other: "{count} elements" },
|
|
249
|
+
"jsonViewer.properties": { one: "{count} property", other: "{count} properties" },
|
|
250
|
+
"jsonViewer.found": { one: "{count} node found", other: "{count} nodes found" },
|
|
251
|
+
"jsonViewer.visible": { one: "{count} node visible", other: "{count} nodes visible" },
|
|
226
252
|
|
|
227
253
|
"diffViewer.title": "Text comparison",
|
|
228
254
|
"diffViewer.before": "Before",
|
|
@@ -234,7 +260,8 @@ module.exports = {
|
|
|
234
260
|
"diffViewer.lineAdded": "Line {number} added",
|
|
235
261
|
"diffViewer.lineRemoved": "Line {number} removed",
|
|
236
262
|
"diffViewer.lineChanged": "Line {number} changed",
|
|
237
|
-
"diffViewer.showLines": {one: "Show {count} line", other: "Show {count} lines"},
|
|
238
|
-
"diffViewer.summary":
|
|
239
|
-
|
|
263
|
+
"diffViewer.showLines": { one: "Show {count} line", other: "Show {count} lines" },
|
|
264
|
+
"diffViewer.summary":
|
|
265
|
+
"Changes: {groups}, lines added: {added}, lines removed: {removed}, lines changed: {changed}",
|
|
266
|
+
},
|
|
240
267
|
};
|