underpost 2.8.867 → 2.8.872
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/.github/workflows/release.cd.yml +3 -1
- package/README.md +26 -2
- package/bin/build.js +1 -0
- package/bin/deploy.js +4 -0
- package/bin/util.js +1 -56
- package/cli.md +3 -1
- package/conf.js +3 -2
- package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
- package/manifests/deployment/mongo-express/deployment.yaml +12 -12
- package/manifests/maas/nvim.sh +91 -0
- package/package.json +2 -12
- package/src/api/file/file.service.js +28 -8
- package/src/api/user/user.router.js +24 -0
- package/src/api/user/user.service.js +3 -4
- package/src/cli/cluster.js +2 -13
- package/src/cli/cron.js +0 -1
- package/src/cli/db.js +0 -19
- package/src/cli/deploy.js +17 -26
- package/src/cli/fs.js +1 -0
- package/src/cli/index.js +1 -0
- package/src/cli/repository.js +1 -0
- package/src/cli/run.js +10 -2
- package/src/client/components/core/Account.js +2 -1
- package/src/client/components/core/AgGrid.js +2 -2
- package/src/client/components/core/CalendarCore.js +2 -3
- package/src/client/components/core/CommonJs.js +1 -2
- package/src/client/components/core/Content.js +2 -1
- package/src/client/components/core/Css.js +2 -1
- package/src/client/components/core/CssCore.js +14 -1
- package/src/client/components/core/Docs.js +5 -5
- package/src/client/components/core/FileExplorer.js +3 -3
- package/src/client/components/core/FullScreen.js +19 -28
- package/src/client/components/core/Input.js +1 -0
- package/src/client/components/core/JoyStick.js +2 -2
- package/src/client/components/core/LoadingAnimation.js +2 -2
- package/src/client/components/core/Logger.js +4 -1
- package/src/client/components/core/Modal.js +54 -47
- package/src/client/components/core/ObjectLayerEngine.js +229 -4
- package/src/client/components/core/ObjectLayerEngineModal.js +442 -0
- package/src/client/components/core/Pagination.js +14 -0
- package/src/client/components/core/Panel.js +3 -8
- package/src/client/components/core/PanelForm.js +5 -14
- package/src/client/components/core/Recover.js +2 -2
- package/src/client/components/core/Router.js +183 -34
- package/src/client/components/core/Stream.js +1 -1
- package/src/client/components/core/ToggleSwitch.js +15 -1
- package/src/client/components/core/VanillaJs.js +0 -84
- package/src/client/components/core/Worker.js +2 -2
- package/src/client/components/default/MenuDefault.js +4 -3
- package/src/client/components/default/RoutesDefault.js +3 -2
- package/src/client/public/default/assets/mailer/api-user-default-avatar.png +0 -0
- package/src/client/services/core/core.service.js +1 -1
- package/src/client/ssr/head/DefaultScripts.js +1 -0
- package/src/index.js +1 -1
- package/src/server/client-build.js +3 -11
- package/src/server/client-icons.js +6 -78
- package/src/server/conf.js +4 -56
- package/src/server/process.js +2 -1
- package/src/server/runtime.js +7 -0
- package/src/server/ssl.js +1 -2
|
@@ -0,0 +1,442 @@
|
|
|
1
|
+
import { CoreService } from '../../services/core/core.service.js';
|
|
2
|
+
import { BtnIcon } from './BtnIcon.js';
|
|
3
|
+
import { borderChar, dynamicCol } from './Css.js';
|
|
4
|
+
import { DropDown } from './DropDown.js';
|
|
5
|
+
import { EventsUI } from './EventsUI.js';
|
|
6
|
+
import { Translate } from './Translate.js';
|
|
7
|
+
import { s, append, hexToRgbA } from './VanillaJs.js';
|
|
8
|
+
import { getProxyPath } from './Router.js';
|
|
9
|
+
import { s4 } from './CommonJs.js';
|
|
10
|
+
import { Input } from './Input.js';
|
|
11
|
+
import { ToggleSwitch } from './ToggleSwitch.js';
|
|
12
|
+
import { ObjectLayerService } from '../../services/object-layer/object-layer.service.js';
|
|
13
|
+
|
|
14
|
+
const ObjectLayerEngineModal = {
|
|
15
|
+
templates: [
|
|
16
|
+
{
|
|
17
|
+
label: 'empty',
|
|
18
|
+
id: 'empty',
|
|
19
|
+
data: [],
|
|
20
|
+
},
|
|
21
|
+
],
|
|
22
|
+
RenderTemplate: (colorTemplate) => {
|
|
23
|
+
const ole = s('object-layer-engine');
|
|
24
|
+
if (!ole) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if (colorTemplate.length === 0) {
|
|
29
|
+
ole.clear();
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const matrix = colorTemplate.map((row) => row.map((hex) => [...hexToRgbA(hex), 255]));
|
|
34
|
+
ole.loadMatrix(matrix);
|
|
35
|
+
},
|
|
36
|
+
ObjectLayerData: {},
|
|
37
|
+
Render: async (options = { idModal: '' }) => {
|
|
38
|
+
await import(`${getProxyPath()}components/core/ObjectLayerEngine.js`);
|
|
39
|
+
// await import(`${getProxyPath()}components/core/WebComponent.js`);
|
|
40
|
+
const directionCodes = ['08', '18', '02', '12', '04', '14', '06', '16'];
|
|
41
|
+
const itemTypes = ['skin', 'weapon', 'armor', 'artifact', 'floor'];
|
|
42
|
+
const statTypes = ['effect', 'resistance', 'agility', 'range', 'intelligence', 'utility'];
|
|
43
|
+
let selectItemType = itemTypes[0];
|
|
44
|
+
let itemActivable = false;
|
|
45
|
+
let renderIsStateless = false;
|
|
46
|
+
let renderFrameDuration = 100;
|
|
47
|
+
|
|
48
|
+
for (const url of [
|
|
49
|
+
`${getProxyPath()}assets/templates/item-skin-08.json`,
|
|
50
|
+
`${getProxyPath()}assets/templates/item-skin-06.json`,
|
|
51
|
+
]) {
|
|
52
|
+
const id = url.split('/').pop().replace('.json', '');
|
|
53
|
+
ObjectLayerEngineModal.templates.push({
|
|
54
|
+
label: id,
|
|
55
|
+
id,
|
|
56
|
+
data: JSON.parse(await CoreService.getRaw({ url })).color,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const cells = 26;
|
|
61
|
+
const pixelSize = parseInt(320 / cells);
|
|
62
|
+
const idSectionA = 'template-section-a';
|
|
63
|
+
const idSectionB = 'template-section-b';
|
|
64
|
+
|
|
65
|
+
let directionsCodeBarRender = '';
|
|
66
|
+
|
|
67
|
+
for (const directionCode of directionCodes) {
|
|
68
|
+
setTimeout(() => {
|
|
69
|
+
EventsUI.onClick(`.direction-code-bar-frames-btn-${directionCode}`, async () => {
|
|
70
|
+
const image = await s('object-layer-engine').toBlob();
|
|
71
|
+
const json = s('object-layer-engine').exportMatrixJSON();
|
|
72
|
+
const id = `frame-capture-${s4()}-${s4()}`;
|
|
73
|
+
|
|
74
|
+
if (!ObjectLayerEngineModal.ObjectLayerData[directionCode])
|
|
75
|
+
ObjectLayerEngineModal.ObjectLayerData[directionCode] = [];
|
|
76
|
+
ObjectLayerEngineModal.ObjectLayerData[directionCode].push({ id, image, json });
|
|
77
|
+
|
|
78
|
+
append(
|
|
79
|
+
`.frames-${directionCode}`,
|
|
80
|
+
html`
|
|
81
|
+
<div class="in fll ${id}">
|
|
82
|
+
<img class="in fll direction-code-bar-frames-img" src="${URL.createObjectURL(image)}" />
|
|
83
|
+
${await BtnIcon.Render({
|
|
84
|
+
label: html`<i class="fa-solid fa-trash"></i>`,
|
|
85
|
+
class: `abs direction-code-bar-trash-btn direction-code-bar-trash-btn-${id}`,
|
|
86
|
+
})}
|
|
87
|
+
</div>
|
|
88
|
+
`,
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
EventsUI.onClick(`.direction-code-bar-trash-btn-${id}`, async () => {
|
|
92
|
+
s(`.${id}`).remove();
|
|
93
|
+
ObjectLayerEngineModal.ObjectLayerData[directionCode] = ObjectLayerEngineModal.ObjectLayerData[
|
|
94
|
+
directionCode
|
|
95
|
+
].filter((frame) => frame.id !== id);
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
EventsUI.onClick(`.ol-btn-save`, async () => {
|
|
100
|
+
const objectLayer = {
|
|
101
|
+
data: {
|
|
102
|
+
render: {
|
|
103
|
+
frames: {},
|
|
104
|
+
color: [],
|
|
105
|
+
frame_duration: 0,
|
|
106
|
+
is_stateless: false,
|
|
107
|
+
},
|
|
108
|
+
stats: {},
|
|
109
|
+
item: {},
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
for (const directionCode of directionCodes) {
|
|
113
|
+
const directions = ObjectLayerEngineModal.getDirectionsFromDirectionCode(directionCode);
|
|
114
|
+
for (const direction of directions) {
|
|
115
|
+
if (!objectLayer.data.render.frames[direction]) objectLayer.data.render.frames[direction] = [];
|
|
116
|
+
|
|
117
|
+
if (!(directionCode in ObjectLayerEngineModal.ObjectLayerData)) {
|
|
118
|
+
console.warn('No set directionCodeBarFrameData for directionCode', directionCode);
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
for (const frameData of ObjectLayerEngineModal.ObjectLayerData[directionCode]) {
|
|
123
|
+
const { matrix } = JSON.parse(frameData.json);
|
|
124
|
+
const frameIndexColorMatrix = [];
|
|
125
|
+
let indexRow = -1;
|
|
126
|
+
for (const row of matrix) {
|
|
127
|
+
indexRow++;
|
|
128
|
+
frameIndexColorMatrix[indexRow] = [];
|
|
129
|
+
let indexCol = -1;
|
|
130
|
+
for (const value of row) {
|
|
131
|
+
indexCol++;
|
|
132
|
+
let colorIndex = objectLayer.data.render.color.findIndex(
|
|
133
|
+
(color) =>
|
|
134
|
+
color[0] === value[0] &&
|
|
135
|
+
color[1] === value[1] &&
|
|
136
|
+
color[2] === value[2] &&
|
|
137
|
+
color[3] === value[3],
|
|
138
|
+
);
|
|
139
|
+
if (colorIndex === -1) {
|
|
140
|
+
objectLayer.data.render.color.push(value);
|
|
141
|
+
colorIndex = objectLayer.data.render.color.length - 1;
|
|
142
|
+
}
|
|
143
|
+
frameIndexColorMatrix[indexRow][indexCol] = colorIndex;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
objectLayer.data.render.frames[direction].push(frameIndexColorMatrix);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
objectLayer.data.render.frame_duration = parseInt(s(`.ol-input-render-frame-duration`).value);
|
|
151
|
+
objectLayer.data.render.is_stateless = renderIsStateless;
|
|
152
|
+
objectLayer.data.stats = {
|
|
153
|
+
effect: parseInt(s(`.ol-input-item-stats-effect`).value),
|
|
154
|
+
resistance: parseInt(s(`.ol-input-item-stats-resistance`).value),
|
|
155
|
+
agility: parseInt(s(`.ol-input-item-stats-agility`).value),
|
|
156
|
+
range: parseInt(s(`.ol-input-item-stats-range`).value),
|
|
157
|
+
intelligence: parseInt(s(`.ol-input-item-stats-intelligence`).value),
|
|
158
|
+
utility: parseInt(s(`.ol-input-item-stats-utility`).value),
|
|
159
|
+
};
|
|
160
|
+
objectLayer.data.item = {
|
|
161
|
+
type: selectItemType,
|
|
162
|
+
activable: itemActivable,
|
|
163
|
+
id: s(`.ol-input-item-id`).value,
|
|
164
|
+
description: s(`.ol-input-item-description`).value,
|
|
165
|
+
};
|
|
166
|
+
console.warn('objectLayer', objectLayer);
|
|
167
|
+
|
|
168
|
+
// Upload images
|
|
169
|
+
{
|
|
170
|
+
for (const directionCode of Object.keys(ObjectLayerEngineModal.ObjectLayerData)) {
|
|
171
|
+
let frameIndex = -1;
|
|
172
|
+
for (const frame of ObjectLayerEngineModal.ObjectLayerData[directionCode]) {
|
|
173
|
+
frameIndex++;
|
|
174
|
+
const pngBlob = frame.image;
|
|
175
|
+
|
|
176
|
+
const form = new FormData();
|
|
177
|
+
form.append(directionCode, pngBlob, `${frameIndex}.png`);
|
|
178
|
+
|
|
179
|
+
const { status, data } = await ObjectLayerService.post({
|
|
180
|
+
id: `frame-image/${objectLayer.data.item.type}/${objectLayer.data.item.id}/${directionCode}`,
|
|
181
|
+
body: form,
|
|
182
|
+
headerId: 'file',
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// Upload metadata
|
|
189
|
+
{
|
|
190
|
+
delete objectLayer.data.render.frames;
|
|
191
|
+
delete objectLayer.data.render.color;
|
|
192
|
+
const { status, data } = await ObjectLayerService.post({
|
|
193
|
+
id: `metadata/${objectLayer.data.item.type}/${objectLayer.data.item.id}`,
|
|
194
|
+
body: objectLayer,
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
directionsCodeBarRender += html`
|
|
200
|
+
<div class="in section-mp-border">
|
|
201
|
+
<div class="fl">
|
|
202
|
+
<div class="in fll">
|
|
203
|
+
<div class="in direction-code-bar-frames-title">${directionCode}</div>
|
|
204
|
+
<div class="in direction-code-bar-frames-btn">
|
|
205
|
+
${await BtnIcon.Render({
|
|
206
|
+
label: html`<i class="fa-solid fa-plus"></i>`,
|
|
207
|
+
class: `direction-code-bar-frames-btn-${directionCode}`,
|
|
208
|
+
})}
|
|
209
|
+
</div>
|
|
210
|
+
</div>
|
|
211
|
+
<div class="frames-${directionCode}"></div>
|
|
212
|
+
</div>
|
|
213
|
+
</div>
|
|
214
|
+
`;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
let statsInputsRender = '';
|
|
218
|
+
for (const statType of statTypes) {
|
|
219
|
+
statsInputsRender += html`
|
|
220
|
+
${await Input.Render({
|
|
221
|
+
id: `ol-input-item-stats-${statType}`,
|
|
222
|
+
label: html`<div class="inl" style="width: 120px; font-size: 16px; overflow: hidden">
|
|
223
|
+
<i class="fa-solid fa-chart-simple"></i> ${statType}
|
|
224
|
+
</div>`,
|
|
225
|
+
containerClass: 'inl',
|
|
226
|
+
type: 'number',
|
|
227
|
+
min: 0,
|
|
228
|
+
max: 10,
|
|
229
|
+
placeholder: true,
|
|
230
|
+
value: 0,
|
|
231
|
+
})}
|
|
232
|
+
`;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
return html`
|
|
236
|
+
<style>
|
|
237
|
+
.direction-code-bar-frames-title {
|
|
238
|
+
font-weight: bold;
|
|
239
|
+
font-size: 1.2rem;
|
|
240
|
+
padding: 0.5rem;
|
|
241
|
+
}
|
|
242
|
+
.direction-code-bar-frames-img {
|
|
243
|
+
width: 100px;
|
|
244
|
+
height: auto;
|
|
245
|
+
margin: 3px;
|
|
246
|
+
}
|
|
247
|
+
.direction-code-bar-trash-btn {
|
|
248
|
+
top: 3px;
|
|
249
|
+
left: 3px;
|
|
250
|
+
background: red;
|
|
251
|
+
color: white;
|
|
252
|
+
}
|
|
253
|
+
.ol-btn-save {
|
|
254
|
+
padding: 0.5rem;
|
|
255
|
+
font-size: 30px;
|
|
256
|
+
font-weight: bold;
|
|
257
|
+
}
|
|
258
|
+
.ol-number-label {
|
|
259
|
+
width: 120px;
|
|
260
|
+
font-size: 16px;
|
|
261
|
+
overflow: hidden;
|
|
262
|
+
font-family: 'retro-font';
|
|
263
|
+
}
|
|
264
|
+
.sub-title-modal {
|
|
265
|
+
color: #ffcc00;
|
|
266
|
+
}
|
|
267
|
+
</style>
|
|
268
|
+
${borderChar(2, 'black', ['.sub-title-modal'])}
|
|
269
|
+
|
|
270
|
+
<div class="in section-mp section-mp-border">
|
|
271
|
+
<div class="in sub-title-modal"><i class="fa-solid fa-table-cells-large"></i> Frame editor</div>
|
|
272
|
+
|
|
273
|
+
<object-layer-engine id="ole" width="${cells}" height="${cells}" pixel-size="${pixelSize}">
|
|
274
|
+
</object-layer-engine>
|
|
275
|
+
</div>
|
|
276
|
+
|
|
277
|
+
<div class="in section-mp section-mp-border">
|
|
278
|
+
<div class="in sub-title-modal"><i class="fa-solid fa-database"></i> Render data</div>
|
|
279
|
+
${dynamicCol({ containerSelector: options.idModal, id: idSectionA })}
|
|
280
|
+
|
|
281
|
+
<div class="fl">
|
|
282
|
+
<div class="in fll ${idSectionA}-col-a">
|
|
283
|
+
<div class="in section-mp">
|
|
284
|
+
${await DropDown.Render({
|
|
285
|
+
value: ObjectLayerEngineModal.templates[0].id,
|
|
286
|
+
label: html`${Translate.Render('select-template')}`,
|
|
287
|
+
data: ObjectLayerEngineModal.templates.map((template) => {
|
|
288
|
+
return {
|
|
289
|
+
value: template.id,
|
|
290
|
+
display: html`<i class="fa-solid fa-paint-roller"></i> ${template.label}`,
|
|
291
|
+
onClick: async () => {
|
|
292
|
+
ObjectLayerEngineModal.RenderTemplate(template.data);
|
|
293
|
+
},
|
|
294
|
+
};
|
|
295
|
+
}),
|
|
296
|
+
})}
|
|
297
|
+
</div>
|
|
298
|
+
</div>
|
|
299
|
+
<div class="in fll ${idSectionA}-col-b">
|
|
300
|
+
<div class="in section-mp-border" style="width: 135px;">
|
|
301
|
+
${await Input.Render({
|
|
302
|
+
id: `ol-input-render-frame-duration`,
|
|
303
|
+
label: html`<div class="inl ol-number-label">
|
|
304
|
+
<i class="fa-solid fa-chart-simple"></i> Frame duration
|
|
305
|
+
</div>`,
|
|
306
|
+
containerClass: 'inl',
|
|
307
|
+
type: 'number',
|
|
308
|
+
min: 100,
|
|
309
|
+
max: 1000,
|
|
310
|
+
placeholder: true,
|
|
311
|
+
value: renderFrameDuration,
|
|
312
|
+
})}
|
|
313
|
+
</div>
|
|
314
|
+
<div class="in section-mp">
|
|
315
|
+
${await ToggleSwitch.Render({
|
|
316
|
+
id: 'ol-toggle-render-is-stateless',
|
|
317
|
+
wrapper: true,
|
|
318
|
+
wrapperLabel: html`${Translate.Render('is-stateless')}`,
|
|
319
|
+
disabledOnClick: true,
|
|
320
|
+
checked: renderIsStateless,
|
|
321
|
+
on: {
|
|
322
|
+
unchecked: () => {
|
|
323
|
+
renderIsStateless = false;
|
|
324
|
+
console.warn('renderIsStateless', renderIsStateless);
|
|
325
|
+
},
|
|
326
|
+
checked: () => {
|
|
327
|
+
renderIsStateless = true;
|
|
328
|
+
console.warn('renderIsStateless', renderIsStateless);
|
|
329
|
+
},
|
|
330
|
+
},
|
|
331
|
+
})}
|
|
332
|
+
</div>
|
|
333
|
+
</div>
|
|
334
|
+
</div>
|
|
335
|
+
${directionsCodeBarRender}
|
|
336
|
+
</div>
|
|
337
|
+
${dynamicCol({ containerSelector: options.idModal, id: idSectionB, type: 'a-50-b-50' })}
|
|
338
|
+
|
|
339
|
+
<div class="fl">
|
|
340
|
+
<div class="in fll ${idSectionB}-col-a">
|
|
341
|
+
<div class="in section-mp section-mp-border">
|
|
342
|
+
<div class="in sub-title-modal"><i class="fa-solid fa-database"></i> Item data</div>
|
|
343
|
+
${await Input.Render({
|
|
344
|
+
id: `ol-input-item-id`,
|
|
345
|
+
label: html`<i class="fa-solid fa-pen-to-square"></i> ${Translate.Render('item-id')}`,
|
|
346
|
+
containerClass: '',
|
|
347
|
+
placeholder: true,
|
|
348
|
+
})}
|
|
349
|
+
${await Input.Render({
|
|
350
|
+
id: `ol-input-item-description`,
|
|
351
|
+
label: html`<i class="fa-solid fa-pen-to-square"></i> ${Translate.Render('item-description')}`,
|
|
352
|
+
containerClass: '',
|
|
353
|
+
placeholder: true,
|
|
354
|
+
})}
|
|
355
|
+
<div class="in section-mp">
|
|
356
|
+
${await DropDown.Render({
|
|
357
|
+
value: itemTypes[0],
|
|
358
|
+
label: html`${Translate.Render('select-item-type')}`,
|
|
359
|
+
data: itemTypes.map((itemType) => {
|
|
360
|
+
return {
|
|
361
|
+
value: itemType,
|
|
362
|
+
display: html`${itemType}`,
|
|
363
|
+
onClick: async () => {
|
|
364
|
+
console.warn('itemType click', itemType);
|
|
365
|
+
selectItemType = itemType;
|
|
366
|
+
},
|
|
367
|
+
};
|
|
368
|
+
}),
|
|
369
|
+
})}
|
|
370
|
+
</div>
|
|
371
|
+
<div class="in section-mp">
|
|
372
|
+
${await ToggleSwitch.Render({
|
|
373
|
+
id: 'ol-toggle-item-activable',
|
|
374
|
+
wrapper: true,
|
|
375
|
+
wrapperLabel: html`${Translate.Render('item-activable')}`,
|
|
376
|
+
disabledOnClick: true,
|
|
377
|
+
checked: itemActivable,
|
|
378
|
+
on: {
|
|
379
|
+
unchecked: () => {
|
|
380
|
+
itemActivable = false;
|
|
381
|
+
console.warn('itemActivable', itemActivable);
|
|
382
|
+
},
|
|
383
|
+
checked: () => {
|
|
384
|
+
itemActivable = true;
|
|
385
|
+
console.warn('itemActivable', itemActivable);
|
|
386
|
+
},
|
|
387
|
+
},
|
|
388
|
+
})}
|
|
389
|
+
</div>
|
|
390
|
+
</div>
|
|
391
|
+
</div>
|
|
392
|
+
<div class="in fll ${idSectionB}-col-b">
|
|
393
|
+
<div class="in section-mp section-mp-border">
|
|
394
|
+
<div class="in sub-title-modal"><i class="fa-solid fa-database"></i> Stats data</div>
|
|
395
|
+
${statsInputsRender}
|
|
396
|
+
</div>
|
|
397
|
+
</div>
|
|
398
|
+
</div>
|
|
399
|
+
|
|
400
|
+
<div class="in section-mp">
|
|
401
|
+
${await BtnIcon.Render({
|
|
402
|
+
label: html`<i class="fa-solid fa-save"></i> ${Translate.Render('save')}`,
|
|
403
|
+
class: `in flr ol-btn-save`,
|
|
404
|
+
})}
|
|
405
|
+
</div>
|
|
406
|
+
`;
|
|
407
|
+
},
|
|
408
|
+
getDirectionsFromDirectionCode(directionCode = '08') {
|
|
409
|
+
let objectLayerFrameDirections = [];
|
|
410
|
+
|
|
411
|
+
switch (directionCode) {
|
|
412
|
+
case '08':
|
|
413
|
+
objectLayerFrameDirections = ['down_idle', 'none_idle', 'default_idle'];
|
|
414
|
+
break;
|
|
415
|
+
case '18':
|
|
416
|
+
objectLayerFrameDirections = ['down_walking'];
|
|
417
|
+
break;
|
|
418
|
+
case '02':
|
|
419
|
+
objectLayerFrameDirections = ['up_idle'];
|
|
420
|
+
break;
|
|
421
|
+
case '12':
|
|
422
|
+
objectLayerFrameDirections = ['up_walking'];
|
|
423
|
+
break;
|
|
424
|
+
case '04':
|
|
425
|
+
objectLayerFrameDirections = ['left_idle', 'up_left_idle', 'down_left_idle'];
|
|
426
|
+
break;
|
|
427
|
+
case '14':
|
|
428
|
+
objectLayerFrameDirections = ['left_walking', 'up_left_walking', 'down_left_walking'];
|
|
429
|
+
break;
|
|
430
|
+
case '06':
|
|
431
|
+
objectLayerFrameDirections = ['right_idle', 'up_right_idle', 'down_right_idle'];
|
|
432
|
+
break;
|
|
433
|
+
case '16':
|
|
434
|
+
objectLayerFrameDirections = ['right_walking', 'up_right_walking', 'down_right_walking'];
|
|
435
|
+
break;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
return objectLayerFrameDirections;
|
|
439
|
+
},
|
|
440
|
+
};
|
|
441
|
+
|
|
442
|
+
export { ObjectLayerEngineModal };
|
|
@@ -2,17 +2,14 @@ import { getId, isValidDate, newInstance } from './CommonJs.js';
|
|
|
2
2
|
import { LoadingAnimation } from '../core/LoadingAnimation.js';
|
|
3
3
|
import { Validator } from '../core/Validator.js';
|
|
4
4
|
import { Input } from '../core/Input.js';
|
|
5
|
-
import { Responsive } from '../core/Responsive.js';
|
|
6
5
|
import { darkTheme, ThemeEvents } from './Css.js';
|
|
7
|
-
import { append, getDataFromInputFile,
|
|
6
|
+
import { append, getDataFromInputFile, htmls, s } from './VanillaJs.js';
|
|
8
7
|
import { BtnIcon } from './BtnIcon.js';
|
|
9
8
|
import { Translate } from './Translate.js';
|
|
10
9
|
import { DropDown } from './DropDown.js';
|
|
11
|
-
import { dynamicCol
|
|
10
|
+
import { dynamicCol } from './Css.js';
|
|
12
11
|
import { EventsUI } from './EventsUI.js';
|
|
13
12
|
import { ToggleSwitch } from './ToggleSwitch.js';
|
|
14
|
-
import { Modal } from './Modal.js';
|
|
15
|
-
import { RouterEvents } from './Router.js';
|
|
16
13
|
import { RichText } from './RichText.js';
|
|
17
14
|
import { loggerFactory } from './Logger.js';
|
|
18
15
|
import { Badge } from './Badge.js';
|
|
@@ -470,9 +467,7 @@ const Panel = {
|
|
|
470
467
|
s(`.${btnSelector}`).classList.remove('hide');
|
|
471
468
|
}
|
|
472
469
|
}
|
|
473
|
-
|
|
474
|
-
s(`.${idPanel}-form-body`).classList.add('hide');
|
|
475
|
-
});
|
|
470
|
+
s(`.${idPanel}-form-body`).classList.add('hide');
|
|
476
471
|
};
|
|
477
472
|
s(`.btn-${idPanel}-add`).onclick = (e) => {
|
|
478
473
|
e.preventDefault();
|
|
@@ -1,12 +1,6 @@
|
|
|
1
1
|
import { getCapVariableName, newInstance, random, range, uniqueArray } from './CommonJs.js';
|
|
2
2
|
import { marked } from 'marked';
|
|
3
|
-
import {
|
|
4
|
-
getBlobFromUint8ArrayFile,
|
|
5
|
-
getDataFromInputFile,
|
|
6
|
-
getQueryParams,
|
|
7
|
-
getRawContentFile,
|
|
8
|
-
htmls,
|
|
9
|
-
} from './VanillaJs.js';
|
|
3
|
+
import { getBlobFromUint8ArrayFile, getDataFromInputFile, getRawContentFile, htmls } from './VanillaJs.js';
|
|
10
4
|
import { Panel } from './Panel.js';
|
|
11
5
|
import { NotificationManager } from './NotificationManager.js';
|
|
12
6
|
import { DocumentService } from '../../services/document/document.service.js';
|
|
@@ -15,7 +9,7 @@ import { getSrcFromFileData } from './Input.js';
|
|
|
15
9
|
import { imageShimmer, renderCssAttr } from './Css.js';
|
|
16
10
|
import { Translate } from './Translate.js';
|
|
17
11
|
import { Modal } from './Modal.js';
|
|
18
|
-
import { closeModalRouteChangeEvents, listenQueryPathInstance, setQueryPath } from './Router.js';
|
|
12
|
+
import { closeModalRouteChangeEvents, listenQueryPathInstance, setQueryPath, getQueryParams } from './Router.js';
|
|
19
13
|
|
|
20
14
|
const PanelForm = {
|
|
21
15
|
Data: {},
|
|
@@ -426,10 +420,8 @@ const PanelForm = {
|
|
|
426
420
|
let firsUpdateEvent = false;
|
|
427
421
|
let lastCid;
|
|
428
422
|
let lastUserId;
|
|
429
|
-
closeModalRouteChangeEvents[idPanel] = (
|
|
430
|
-
|
|
431
|
-
this.Data[idPanel].updatePanel();
|
|
432
|
-
}
|
|
423
|
+
closeModalRouteChangeEvents[idPanel] = () => {
|
|
424
|
+
this.Data[idPanel].updatePanel();
|
|
433
425
|
};
|
|
434
426
|
this.Data[idPanel].updatePanel = async () => {
|
|
435
427
|
const cid = getQueryParams().cid ? getQueryParams().cid : '';
|
|
@@ -437,7 +429,6 @@ const PanelForm = {
|
|
|
437
429
|
if (lastCid === cid && !forceUpdate) return;
|
|
438
430
|
lastUserId = newInstance(Elements.Data.user.main.model.user._id);
|
|
439
431
|
lastCid = cid;
|
|
440
|
-
if (options.route === 'home') Modal.homeCid = newInstance(cid);
|
|
441
432
|
htmls(`.${options.parentIdModal ? 'html-' + options.parentIdModal : 'main-body'}`, await renderSrrPanelData());
|
|
442
433
|
await getPanelData();
|
|
443
434
|
htmls(
|
|
@@ -461,7 +452,7 @@ const PanelForm = {
|
|
|
461
452
|
Modal.Data['modal-menu'].onHome[idPanel] = async () => {
|
|
462
453
|
lastCid = undefined;
|
|
463
454
|
lastUserId = undefined;
|
|
464
|
-
setQueryPath({ path: options.route, queryPath: '' });
|
|
455
|
+
setQueryPath({ path: options.route, queryPath: options.route === 'home' ? '?' : '' });
|
|
465
456
|
await this.Data[idPanel].updatePanel();
|
|
466
457
|
};
|
|
467
458
|
}
|
|
@@ -3,11 +3,11 @@ import { Auth } from './Auth.js';
|
|
|
3
3
|
import { BtnIcon } from './BtnIcon.js';
|
|
4
4
|
import { EventsUI } from './EventsUI.js';
|
|
5
5
|
import { Input } from './Input.js';
|
|
6
|
-
import { LogIn } from './LogIn.js';
|
|
7
6
|
import { NotificationManager } from './NotificationManager.js';
|
|
8
7
|
import { Translate } from './Translate.js';
|
|
9
8
|
import { Validator } from './Validator.js';
|
|
10
|
-
import {
|
|
9
|
+
import { s } from './VanillaJs.js';
|
|
10
|
+
import { getProxyPath, getQueryParams } from './Router.js';
|
|
11
11
|
|
|
12
12
|
const Recover = {
|
|
13
13
|
Event: {},
|