iobroker.staticsfilefolder 0.0.11 → 0.0.13
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/io-package.json +8 -2
- package/lib/web.js +12 -0
- package/package.json +1 -1
- package/www/app.js +75 -4
package/io-package.json
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "staticsfilefolder",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.13",
|
|
5
5
|
"news": {
|
|
6
|
+
"0.0.13": {
|
|
7
|
+
"en": "Fixed repochecker error validation requirements (gitignore and dependabot ignore rules)."
|
|
8
|
+
},
|
|
9
|
+
"0.0.12": {
|
|
10
|
+
"en": "Automatically detect ioBroker system language. Added German and Russian translations."
|
|
11
|
+
},
|
|
6
12
|
"0.0.11": {
|
|
7
13
|
"en": "Added multi-language support (English and Azerbaijani) with English as the default."
|
|
8
14
|
},
|
|
@@ -139,7 +145,7 @@
|
|
|
139
145
|
"common": {
|
|
140
146
|
"name": "Latest File Path",
|
|
141
147
|
"type": "string",
|
|
142
|
-
"role": "
|
|
148
|
+
"role": "text",
|
|
143
149
|
"read": true,
|
|
144
150
|
"write": false,
|
|
145
151
|
"def": ""
|
package/lib/web.js
CHANGED
|
@@ -12,6 +12,7 @@ class ExtensionExample {
|
|
|
12
12
|
*/
|
|
13
13
|
constructor(server, webSettings, adapter, instanceSettings, app) {
|
|
14
14
|
this.app = app;
|
|
15
|
+
this.adapter = adapter;
|
|
15
16
|
this.config = instanceSettings ? instanceSettings.native : {};
|
|
16
17
|
this.config.route = this.config.route || "demo";
|
|
17
18
|
|
|
@@ -27,6 +28,17 @@ class ExtensionExample {
|
|
|
27
28
|
this.app.use("/" + this.config.route + "/files", express.static(this.config.dirname));
|
|
28
29
|
}
|
|
29
30
|
|
|
31
|
+
// API Endpoint for configuration and system language
|
|
32
|
+
this.app.get("/" + this.config.route + "/api/config", async (req, res) => {
|
|
33
|
+
try {
|
|
34
|
+
const systemConfig = await this.adapter.getForeignObjectAsync("system.config");
|
|
35
|
+
const systemLanguage = (systemConfig && systemConfig.common && systemConfig.common.language) || "en";
|
|
36
|
+
res.json({ success: true, language: systemLanguage });
|
|
37
|
+
} catch (e) {
|
|
38
|
+
res.json({ success: false, language: "en" });
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
|
|
30
42
|
// API Endpoint for listing files
|
|
31
43
|
this.app.get("/" + this.config.route + "/api/list", (req, res) => {
|
|
32
44
|
try {
|
package/package.json
CHANGED
package/www/app.js
CHANGED
|
@@ -87,9 +87,62 @@ const translations = {
|
|
|
87
87
|
modalDownload: "📥 Yüklə",
|
|
88
88
|
todayBadge: "Bu gün",
|
|
89
89
|
errorLoading: "Xəta baş verdi: "
|
|
90
|
+
},
|
|
91
|
+
de: {
|
|
92
|
+
back: "← Zurück",
|
|
93
|
+
forward: "Weiter →",
|
|
94
|
+
home: "Startseite",
|
|
95
|
+
searchPlaceholder: "Suchen...",
|
|
96
|
+
allTypes: "Alle Typen",
|
|
97
|
+
sortAz: "A-Z sortieren",
|
|
98
|
+
sortZa: "Z-A sortieren",
|
|
99
|
+
sortNewest: "Neueste zuerst",
|
|
100
|
+
sortOldest: "Älteste zuerst",
|
|
101
|
+
title: "Omni Berichte",
|
|
102
|
+
loadingPdf: "PDF wird geladen...",
|
|
103
|
+
loadingExcel: "Excel wird geladen...",
|
|
104
|
+
loadingWord: "Word wird geladen...",
|
|
105
|
+
emptyFolder: "Dieser Ordner ist leer.",
|
|
106
|
+
root: "Hauptverzeichnis",
|
|
107
|
+
themeTooltip: "Dunkel/Hell-Modus umschalten",
|
|
108
|
+
langTooltip: "Sprache ändern",
|
|
109
|
+
modalTitle: "Dateibetrachter",
|
|
110
|
+
modalBack: "← Zurück",
|
|
111
|
+
modalForward: "Weiter →",
|
|
112
|
+
modalPrint: "🖨️ Drucken / PDF",
|
|
113
|
+
modalDownload: "📥 Herunterladen",
|
|
114
|
+
todayBadge: "Heute",
|
|
115
|
+
errorLoading: "Ein Fehler ist aufgetreten: "
|
|
116
|
+
},
|
|
117
|
+
ru: {
|
|
118
|
+
back: "← Назад",
|
|
119
|
+
forward: "Вперед →",
|
|
120
|
+
home: "Главная",
|
|
121
|
+
searchPlaceholder: "Поиск...",
|
|
122
|
+
allTypes: "Все типы",
|
|
123
|
+
sortAz: "Сортировка А-Я",
|
|
124
|
+
sortZa: "Сортировка Я-А",
|
|
125
|
+
sortNewest: "Сначала новые",
|
|
126
|
+
sortOldest: "Сначала старые",
|
|
127
|
+
title: "Omni Отчеты",
|
|
128
|
+
loadingPdf: "Загрузка PDF...",
|
|
129
|
+
loadingExcel: "Загрузка Excel...",
|
|
130
|
+
loadingWord: "Загрузка Word...",
|
|
131
|
+
emptyFolder: "Эта папка пуста.",
|
|
132
|
+
root: "Корень",
|
|
133
|
+
themeTooltip: "Переключить тему",
|
|
134
|
+
langTooltip: "Изменить язык",
|
|
135
|
+
modalTitle: "Просмотр файла",
|
|
136
|
+
modalBack: "← Назад",
|
|
137
|
+
modalForward: "Вперед →",
|
|
138
|
+
modalPrint: "🖨️ Печать / PDF",
|
|
139
|
+
modalDownload: "📥 Скачать",
|
|
140
|
+
todayBadge: "Сегодня",
|
|
141
|
+
errorLoading: "Произошла ошибка: "
|
|
90
142
|
}
|
|
91
143
|
};
|
|
92
144
|
|
|
145
|
+
const supportedLangs = ['en', 'az', 'de', 'ru'];
|
|
93
146
|
let currentLang = 'en'; // default English
|
|
94
147
|
|
|
95
148
|
// Setup PDF.js worker
|
|
@@ -98,13 +151,31 @@ if (window.pdfjsLib) {
|
|
|
98
151
|
}
|
|
99
152
|
|
|
100
153
|
// Language Initialization
|
|
101
|
-
function initLang() {
|
|
102
|
-
|
|
154
|
+
async function initLang() {
|
|
155
|
+
let savedLang = localStorage.getItem('staticsfilefolder_lang');
|
|
156
|
+
if (!savedLang) {
|
|
157
|
+
try {
|
|
158
|
+
const res = await fetch(`${BASE_ROUTE}/api/config`);
|
|
159
|
+
const data = await res.json();
|
|
160
|
+
if (data && data.language) {
|
|
161
|
+
savedLang = data.language;
|
|
162
|
+
}
|
|
163
|
+
} catch (e) {
|
|
164
|
+
// ignore
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
currentLang = savedLang || navigator.language.split('-')[0] || 'en';
|
|
169
|
+
if (!translations[currentLang]) {
|
|
170
|
+
currentLang = 'en';
|
|
171
|
+
}
|
|
103
172
|
applyTranslations();
|
|
104
173
|
}
|
|
105
174
|
|
|
106
175
|
function toggleLang() {
|
|
107
|
-
|
|
176
|
+
let index = supportedLangs.indexOf(currentLang);
|
|
177
|
+
index = (index + 1) % supportedLangs.length;
|
|
178
|
+
currentLang = supportedLangs[index];
|
|
108
179
|
localStorage.setItem('staticsfilefolder_lang', currentLang);
|
|
109
180
|
applyTranslations();
|
|
110
181
|
}
|
|
@@ -126,7 +197,7 @@ function applyTranslations() {
|
|
|
126
197
|
|
|
127
198
|
// Update search placeholder and other specific inputs
|
|
128
199
|
searchBox.placeholder = t.searchPlaceholder;
|
|
129
|
-
btnLang.textContent = currentLang
|
|
200
|
+
btnLang.textContent = `🌐 ${currentLang.toUpperCase()}`;
|
|
130
201
|
|
|
131
202
|
// Refresh UI to update dynamic content like dates/breadcrumbs
|
|
132
203
|
updateBreadcrumb();
|