@daracl/form 0.0.17 → 0.0.19
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/README.md +1 -1
- package/dist/DaraForm.d.ts +51 -2
- package/dist/FieldInfoMap.d.ts +8 -1
- package/dist/FormTemplate.d.ts +2 -2
- package/dist/constants.d.ts +5 -1
- package/dist/daracl.form.css +788 -0
- package/dist/daracl.form.min.css +10 -0
- package/dist/daracl.form.min.umd.js +171 -0
- package/dist/daracl.form.min.umd.js.map +1 -0
- package/dist/daracl.form.umd.js +4497 -0
- package/dist/daracl.form.umd.js.map +1 -0
- package/dist/defaultOption.d.ts +8 -0
- package/dist/event/renderEvents.d.ts +1 -1
- package/dist/global.d.ts +6 -0
- package/dist/index.cjs +1827 -520
- package/dist/index.cjs.map +1 -7
- package/dist/index.d.ts +7 -2
- package/dist/index.html +193 -348
- package/dist/index.js +4106 -3097
- package/dist/index.js.map +1 -7
- package/dist/index.min.cjs +171 -0
- package/dist/index.min.cjs.map +1 -0
- package/dist/index.min.js +2915 -0
- package/dist/index.min.js.map +1 -0
- package/dist/index.umd.d.ts +7 -0
- package/dist/renderer/ButtonRender.d.ts +2 -2
- package/dist/renderer/CheckboxRender.d.ts +2 -2
- package/dist/renderer/CustomRender.d.ts +2 -2
- package/dist/renderer/DateRender.d.ts +2 -2
- package/dist/renderer/DropdownRender.d.ts +2 -2
- package/dist/renderer/FileRender.d.ts +2 -2
- package/dist/renderer/GridRender.d.ts +2 -2
- package/dist/renderer/GroupRender.d.ts +2 -2
- package/dist/renderer/HiddenRender.d.ts +2 -2
- package/dist/renderer/NumberRender.d.ts +2 -2
- package/dist/renderer/PasswordRender.d.ts +2 -2
- package/dist/renderer/RadioRender.d.ts +2 -2
- package/dist/renderer/RangeRender.d.ts +2 -2
- package/dist/renderer/Render.d.ts +2 -2
- package/dist/renderer/TabRender.d.ts +2 -2
- package/dist/renderer/TextAreaRender.d.ts +2 -2
- package/dist/renderer/TextRender.d.ts +2 -2
- package/dist/types/FormField.d.ts +18 -13
- package/dist/types/FormOptions.d.ts +1 -1
- package/dist/types/style.d.ts +3 -0
- package/dist/util/renderFactory.d.ts +1 -1
- package/dist/util/styleUtils.d.ts +10 -12
- package/dist/util/utils.d.ts +1 -1
- package/package.json +129 -140
- package/style/abstracts/_index.scss +2 -0
- package/style/abstracts/_mixins.scss +22 -0
- package/style/abstracts/_variables.scss +1 -0
- package/style/base/_base.scss +68 -0
- package/style/base/_index.scss +1 -0
- package/style/components/_button.scss +16 -0
- package/style/components/_field-container.scss +42 -0
- package/style/components/_field-group.scss +16 -0
- package/style/components/_file-list.scss +59 -0
- package/style/components/_form-field.scss +48 -0
- package/style/components/_form-group.scss +94 -0
- package/style/components/_grid-field.scss +120 -0
- package/style/components/_icon.scss +26 -0
- package/style/components/_index.scss +11 -0
- package/style/components/_label.scss +65 -0
- package/style/components/_row.scss +88 -0
- package/style/components/_tab.scss +69 -0
- package/{dist/index.css → style/daracl.form.css} +213 -184
- package/style/daracl.form.css.map +1 -0
- package/style/daracl.form.min.css +2 -0
- package/style/daracl.form.min.css.map +1 -0
- package/style/daracl.form.scss +53 -691
- package/style/themes/_common.scss +18 -0
- package/style/themes/_dark.scss +32 -0
- package/style/themes/_index.scss +14 -0
- package/style/themes/_light.scss +26 -0
- package/style/themes/_mixin.scss +6 -0
- package/dist/commonVender.d.ts +0 -1
- package/dist/daracl.form.js +0 -5720
- package/dist/daracl.form.js.map +0 -1
- package/dist/daracl.form.min.js +0 -7
- package/dist/daracl.form.min.js.LICENSE.txt +0 -5
- package/dist/daracl.form.min.js.map +0 -1
- package/dist/daracl.vender.min.css +0 -5
- package/dist/daracl.vender.min.js +0 -2
- package/dist/daracl.vender.min.js.LICENSE.txt +0 -3
- package/dist/index.css.map +0 -7
- package/dist/indexVender.d.ts +0 -6
- package/dist/main.css +0 -6
- package/dist/main.css.map +0 -1
- package/src/index.ts +0 -5
- /package/dist/util/{Lanauage.d.ts → Language.d.ts} +0 -0
package/dist/index.cjs
CHANGED
|
@@ -1,36 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __copyProps = (to, from, except, desc) => {
|
|
9
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
10
|
-
for (let key of __getOwnPropNames(from))
|
|
11
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
12
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
13
|
-
}
|
|
14
|
-
return to;
|
|
15
|
-
};
|
|
16
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
17
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
18
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
19
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
20
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
21
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
22
|
-
mod
|
|
23
|
-
));
|
|
24
|
-
|
|
25
|
-
// src/util/utils.ts
|
|
26
|
-
var xssFilter = {
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const core = require("@daracl/core");
|
|
4
|
+
const xssFilter = {
|
|
27
5
|
"&": "&",
|
|
28
6
|
"<": "<",
|
|
29
7
|
">": ">",
|
|
30
8
|
'"': """,
|
|
31
9
|
"'": "'"
|
|
32
10
|
};
|
|
33
|
-
|
|
11
|
+
const replaceXss = (inputText) => {
|
|
34
12
|
let returnText = inputText;
|
|
35
13
|
if (returnText) {
|
|
36
14
|
Object.keys(xssFilter).forEach((key) => {
|
|
@@ -39,55 +17,51 @@ var replaceXss = (inputText) => {
|
|
|
39
17
|
}
|
|
40
18
|
return returnText;
|
|
41
19
|
};
|
|
42
|
-
|
|
20
|
+
const hasOwnProp = (obj, key) => {
|
|
43
21
|
return obj.hasOwnProperty(key);
|
|
44
22
|
};
|
|
45
|
-
|
|
46
|
-
if (value === null)
|
|
47
|
-
|
|
48
|
-
if (value === "")
|
|
49
|
-
|
|
50
|
-
if (typeof value === "undefined")
|
|
51
|
-
return true;
|
|
52
|
-
if (typeof value === "string" && (value === "" || value.replace(/\s/g, "") === ""))
|
|
53
|
-
return true;
|
|
23
|
+
const isBlank = (value) => {
|
|
24
|
+
if (value === null) return true;
|
|
25
|
+
if (value === "") return true;
|
|
26
|
+
if (typeof value === "undefined") return true;
|
|
27
|
+
if (typeof value === "string" && (value === "" || value.replace(/\s/g, "") === "")) return true;
|
|
54
28
|
return false;
|
|
55
29
|
};
|
|
56
|
-
|
|
30
|
+
const isUndefined = (value) => {
|
|
57
31
|
return typeof value === "undefined";
|
|
58
32
|
};
|
|
59
|
-
|
|
33
|
+
const isFunction = (value) => {
|
|
60
34
|
return typeof value === "function";
|
|
61
35
|
};
|
|
62
|
-
|
|
36
|
+
const isString = (value) => {
|
|
63
37
|
return typeof value === "string";
|
|
64
38
|
};
|
|
65
|
-
|
|
39
|
+
const isNumber = (value) => {
|
|
66
40
|
if (isBlank(value)) {
|
|
67
41
|
return false;
|
|
68
42
|
}
|
|
69
43
|
value = +value;
|
|
70
44
|
return !isNaN(value);
|
|
71
45
|
};
|
|
72
|
-
|
|
73
|
-
return
|
|
46
|
+
const isArray = (value) => {
|
|
47
|
+
return core.isArray(value);
|
|
74
48
|
};
|
|
75
|
-
|
|
76
|
-
|
|
49
|
+
const isEmpty = (value) => isUndefined(value) || value == null;
|
|
50
|
+
const isTabType = (field) => {
|
|
77
51
|
return field && field.renderType === "tab";
|
|
78
52
|
};
|
|
79
|
-
|
|
53
|
+
const isGridType = (field) => {
|
|
80
54
|
return field && field.renderType === "grid";
|
|
81
55
|
};
|
|
82
|
-
|
|
56
|
+
const replaceXssField = (field) => {
|
|
83
57
|
field.$xssName = getXssFieldName(field);
|
|
84
58
|
field.label = replaceXss(field.label);
|
|
85
59
|
return field;
|
|
86
60
|
};
|
|
87
|
-
|
|
61
|
+
const ignoreValueField = (field) => {
|
|
88
62
|
return isGridType(field.$parent) || isTabType(field.$parent);
|
|
89
63
|
};
|
|
90
|
-
|
|
64
|
+
const getXssFieldName = (field) => {
|
|
91
65
|
if (isUndefined(field.$xssName)) {
|
|
92
66
|
let returnText = field.name;
|
|
93
67
|
if (returnText) {
|
|
@@ -99,10 +73,9 @@ var getXssFieldName = (field) => {
|
|
|
99
73
|
}
|
|
100
74
|
return field.$xssName;
|
|
101
75
|
};
|
|
102
|
-
|
|
76
|
+
const getHashCode = (str) => {
|
|
103
77
|
let hash = 0;
|
|
104
|
-
if (str.length == 0)
|
|
105
|
-
return hash;
|
|
78
|
+
if (str.length == 0) return hash;
|
|
106
79
|
for (let i = 0; i < str.length; i++) {
|
|
107
80
|
let tmpChar = str.charCodeAt(i);
|
|
108
81
|
hash = (hash << 5) - hash + tmpChar;
|
|
@@ -110,13 +83,13 @@ var getHashCode = (str) => {
|
|
|
110
83
|
}
|
|
111
84
|
return String(hash).replaceAll(/-/g, "_");
|
|
112
85
|
};
|
|
113
|
-
|
|
86
|
+
const isHiddenField = (field) => {
|
|
114
87
|
if (field.renderType === "hidden") {
|
|
115
88
|
return true;
|
|
116
89
|
}
|
|
117
90
|
return false;
|
|
118
91
|
};
|
|
119
|
-
|
|
92
|
+
const templateToElement = (htmlTemplate) => {
|
|
120
93
|
const template = document.createElement("template");
|
|
121
94
|
template.innerHTML = htmlTemplate;
|
|
122
95
|
return template.content.firstElementChild;
|
|
@@ -132,12 +105,12 @@ function isPlainObject(obj) {
|
|
|
132
105
|
return Object.getPrototypeOf(obj) === proto;
|
|
133
106
|
}
|
|
134
107
|
function isObject(value) {
|
|
135
|
-
return typeof value === "object" && value !== null && !
|
|
108
|
+
return typeof value === "object" && value !== null && !isArray(value);
|
|
136
109
|
}
|
|
137
110
|
function isDate(value) {
|
|
138
111
|
return value instanceof Date && !isNaN(value.valueOf());
|
|
139
112
|
}
|
|
140
|
-
|
|
113
|
+
const merge = (...value) => {
|
|
141
114
|
let reval = value[0];
|
|
142
115
|
if (!isPlainObject(reval) || isEmpty(reval)) {
|
|
143
116
|
return reval;
|
|
@@ -206,17 +179,15 @@ function cloneArrayDeep(dst, src) {
|
|
|
206
179
|
}
|
|
207
180
|
return dst;
|
|
208
181
|
}
|
|
209
|
-
|
|
210
|
-
// src/renderer/Render.ts
|
|
211
|
-
var Render = class _Render {
|
|
182
|
+
class Render {
|
|
212
183
|
constructor(form, field, rowElement) {
|
|
184
|
+
var _a;
|
|
213
185
|
this.enableView = true;
|
|
214
186
|
this.daraForm = form;
|
|
215
187
|
this.field = field;
|
|
216
188
|
this.rowElement = rowElement;
|
|
217
189
|
this.createField();
|
|
218
|
-
if (field.tooltip)
|
|
219
|
-
rowElement.querySelector(".df-tooltip")?.setAttribute("tooltip", field.tooltip);
|
|
190
|
+
if (field.tooltip) (_a = rowElement.querySelector(".df-tooltip")) == null ? void 0 : _a.setAttribute("tooltip", field.tooltip);
|
|
220
191
|
}
|
|
221
192
|
setDefaultInfo() {
|
|
222
193
|
if (isUndefined(this.field.defaultValue)) {
|
|
@@ -235,7 +206,8 @@ var Render = class _Render {
|
|
|
235
206
|
this.setDisabled(this.field.disabled ?? false);
|
|
236
207
|
}
|
|
237
208
|
addChildField(element) {
|
|
238
|
-
|
|
209
|
+
var _a;
|
|
210
|
+
(_a = this.rowElement.querySelector(".df-field-container")) == null ? void 0 : _a.append(element);
|
|
239
211
|
}
|
|
240
212
|
static isDataRender() {
|
|
241
213
|
return true;
|
|
@@ -249,9 +221,12 @@ var Render = class _Render {
|
|
|
249
221
|
setValueItems(value) {
|
|
250
222
|
}
|
|
251
223
|
static getDescriptionTemplate(field) {
|
|
252
|
-
|
|
224
|
+
const classNames = field.descriptionClass ? replaceXss(field.descriptionClass) : "";
|
|
225
|
+
const style = field.descriptionStyle ? 'style="' + replaceXss(field.descriptionStyle) + '"' : "";
|
|
226
|
+
return field.description ? `<div class="df-description ${classNames}" ${style}>${field.description}</div>` : "";
|
|
253
227
|
}
|
|
254
228
|
changeEventCall(field, e, rederInfo, fieldValue) {
|
|
229
|
+
var _a;
|
|
255
230
|
if (field.onChange) {
|
|
256
231
|
let changeInfo = {
|
|
257
232
|
field,
|
|
@@ -259,9 +234,9 @@ var Render = class _Render {
|
|
|
259
234
|
oldValue: field.$value,
|
|
260
235
|
value: fieldValue
|
|
261
236
|
};
|
|
262
|
-
if (field.listItem
|
|
237
|
+
if ((_a = field.listItem) == null ? void 0 : _a.list) {
|
|
263
238
|
let valuesItem = [];
|
|
264
|
-
const valueKey =
|
|
239
|
+
const valueKey = Render.valuesValueKey(field);
|
|
265
240
|
for (let val of field.listItem.list) {
|
|
266
241
|
let changeVal = val[valueKey];
|
|
267
242
|
if (isString(fieldValue)) {
|
|
@@ -308,17 +283,17 @@ var Render = class _Render {
|
|
|
308
283
|
* @param {string} desc
|
|
309
284
|
*/
|
|
310
285
|
setDescription(desc) {
|
|
286
|
+
var _a;
|
|
311
287
|
const descEle = this.rowElement.querySelector(".df-description");
|
|
312
288
|
if (descEle) {
|
|
313
|
-
descEle.
|
|
289
|
+
descEle.textContent = desc;
|
|
314
290
|
} else {
|
|
315
291
|
const fieldEle = this.rowElement.querySelector(".df-field");
|
|
316
292
|
if (fieldEle) {
|
|
317
|
-
const
|
|
293
|
+
const parser2 = new DOMParser();
|
|
318
294
|
this.field.description = desc;
|
|
319
|
-
const descEle2 =
|
|
320
|
-
if (descEle2)
|
|
321
|
-
fieldEle.parentNode?.insertBefore(descEle2, fieldEle.nextSibling);
|
|
295
|
+
const descEle2 = parser2.parseFromString(Render.getDescriptionTemplate(this.field), "text/html").querySelector(".df-description");
|
|
296
|
+
if (descEle2) (_a = fieldEle.parentNode) == null ? void 0 : _a.insertBefore(descEle2, fieldEle.nextSibling);
|
|
322
297
|
}
|
|
323
298
|
}
|
|
324
299
|
}
|
|
@@ -337,10 +312,12 @@ var Render = class _Render {
|
|
|
337
312
|
commonValidator() {
|
|
338
313
|
}
|
|
339
314
|
static valuesValueKey(field) {
|
|
340
|
-
|
|
315
|
+
var _a;
|
|
316
|
+
return ((_a = field.listItem) == null ? void 0 : _a.valueField) ? field.listItem.valueField : "value";
|
|
341
317
|
}
|
|
342
318
|
static valuesLabelKey(field) {
|
|
343
|
-
|
|
319
|
+
var _a;
|
|
320
|
+
return ((_a = field.listItem) == null ? void 0 : _a.labelField) ? field.listItem.labelField : "label";
|
|
344
321
|
}
|
|
345
322
|
static valuesLabelValue(label, val) {
|
|
346
323
|
let replaceFlag = false;
|
|
@@ -353,10 +330,8 @@ var Render = class _Render {
|
|
|
353
330
|
}
|
|
354
331
|
return val[label] || "";
|
|
355
332
|
}
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
// src/rule/regexpValidator.ts
|
|
359
|
-
var regexp = {
|
|
333
|
+
}
|
|
334
|
+
const regexp = {
|
|
360
335
|
mobile: /^\d{3}-\d{3,4}-\d{4}$/,
|
|
361
336
|
email: /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/,
|
|
362
337
|
url: /^(?:(?:https?|HTTPS?|ftp|FTP):\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-zA-Z\u00a1-\uffff0-9]-*)*[a-zA-Z\u00a1-\uffff0-9]+)(?:\.(?:[a-zA-Z\u00a1-\uffff0-9]-*)*[a-zA-Z\u00a1-\uffff0-9]+)*(?:\.(?:[a-zA-Z\u00a1-\uffff]{2,}))\.?)(?::\d{2,5})?(?:[/?#]\S*)?$/,
|
|
@@ -369,7 +344,7 @@ var regexp = {
|
|
|
369
344
|
"upper-char-special": /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[#?!@$%^&*-])/,
|
|
370
345
|
"upper-char-special-number": /^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]/
|
|
371
346
|
};
|
|
372
|
-
|
|
347
|
+
const regexpValidator = (value, field, result) => {
|
|
373
348
|
if (!field.$instance.isEnableView()) {
|
|
374
349
|
return { name: field.name, constraint: [] };
|
|
375
350
|
}
|
|
@@ -385,9 +360,7 @@ var regexpValidator = (value, field, result) => {
|
|
|
385
360
|
}
|
|
386
361
|
return result;
|
|
387
362
|
};
|
|
388
|
-
|
|
389
|
-
// src/rule/validator.ts
|
|
390
|
-
var validator = (value, field, result) => {
|
|
363
|
+
const validator = (value, field, result) => {
|
|
391
364
|
if (field.validator) {
|
|
392
365
|
result.validator = field.validator(field, value);
|
|
393
366
|
if (typeof result.validator === "object") {
|
|
@@ -416,9 +389,7 @@ var validator = (value, field, result) => {
|
|
|
416
389
|
}
|
|
417
390
|
return true;
|
|
418
391
|
};
|
|
419
|
-
|
|
420
|
-
// src/rule/numberValidator.ts
|
|
421
|
-
var numberValidator = (value, field) => {
|
|
392
|
+
const numberValidator = (value, field) => {
|
|
422
393
|
if (!field.$instance.isEnableView()) {
|
|
423
394
|
return true;
|
|
424
395
|
}
|
|
@@ -483,15 +454,13 @@ var numberValidator = (value, field) => {
|
|
|
483
454
|
}
|
|
484
455
|
return true;
|
|
485
456
|
};
|
|
486
|
-
|
|
487
|
-
// src/util/validUtils.ts
|
|
488
|
-
var invalidMessage = (field, rowElement, validResult) => {
|
|
457
|
+
const invalidMessage = (field, rowElement, validResult) => {
|
|
489
458
|
if (validResult === true) {
|
|
490
459
|
rowElement.classList.remove("invalid");
|
|
491
460
|
if (!rowElement.classList.contains("valid")) {
|
|
492
461
|
rowElement.classList.add("valid");
|
|
493
462
|
}
|
|
494
|
-
const helpMessageElement = rowElement.querySelector(".help-message");
|
|
463
|
+
const helpMessageElement = rowElement.querySelector(".df-help-message");
|
|
495
464
|
if (helpMessageElement) {
|
|
496
465
|
helpMessageElement.innerHTML = "";
|
|
497
466
|
}
|
|
@@ -502,11 +471,11 @@ var invalidMessage = (field, rowElement, validResult) => {
|
|
|
502
471
|
rowElement.classList.add("invalid");
|
|
503
472
|
}
|
|
504
473
|
if (validResult !== false) {
|
|
505
|
-
const message2 =
|
|
474
|
+
const message2 = Language3.validMessage(field, validResult);
|
|
506
475
|
if (validResult.message) {
|
|
507
476
|
message2.push(validResult.message);
|
|
508
477
|
}
|
|
509
|
-
const helpMessageElement = rowElement.querySelector(".help-message");
|
|
478
|
+
const helpMessageElement = rowElement.querySelector(".df-help-message");
|
|
510
479
|
if (helpMessageElement && message2.length > 0) {
|
|
511
480
|
const msgHtml = [];
|
|
512
481
|
message2.forEach((item) => {
|
|
@@ -516,19 +485,17 @@ var invalidMessage = (field, rowElement, validResult) => {
|
|
|
516
485
|
}
|
|
517
486
|
}
|
|
518
487
|
};
|
|
519
|
-
|
|
488
|
+
const resetRowElementStyleClass = (rowElement) => {
|
|
520
489
|
rowElement.classList.remove("invalid");
|
|
521
490
|
rowElement.classList.remove("valid");
|
|
522
491
|
};
|
|
523
|
-
|
|
524
|
-
// src/event/renderEvents.ts
|
|
525
|
-
var inputEvent = (field, element, renderInfo) => {
|
|
492
|
+
const inputEvent = (field, element, renderInfo) => {
|
|
526
493
|
element.addEventListener("input", (e) => {
|
|
527
494
|
customChangeEventCall(field, e, renderInfo, renderInfo.getValue());
|
|
528
495
|
renderInfo.valid();
|
|
529
496
|
});
|
|
530
497
|
};
|
|
531
|
-
|
|
498
|
+
const numberInputEvent = (field, element, renderInfo) => {
|
|
532
499
|
element.addEventListener("keyup", (e) => {
|
|
533
500
|
const val = e.target.value;
|
|
534
501
|
if (!isNumber(val)) {
|
|
@@ -539,18 +506,16 @@ var numberInputEvent = (field, element, renderInfo) => {
|
|
|
539
506
|
renderInfo.valid();
|
|
540
507
|
});
|
|
541
508
|
};
|
|
542
|
-
|
|
509
|
+
const dropdownChangeEvent = (field, element, renderInfo) => {
|
|
543
510
|
element.addEventListener("change", (e) => {
|
|
544
511
|
customChangeEventCall(field, e, renderInfo, renderInfo.getValue());
|
|
545
512
|
renderInfo.valid();
|
|
546
513
|
});
|
|
547
514
|
};
|
|
548
|
-
|
|
515
|
+
const customChangeEventCall = (field, e, renderInfo, value) => {
|
|
549
516
|
renderInfo.changeEventCall(field, e, renderInfo, value);
|
|
550
517
|
};
|
|
551
|
-
|
|
552
|
-
// src/renderer/NumberRender.ts
|
|
553
|
-
var NumberRender = class extends Render {
|
|
518
|
+
class NumberRender extends Render {
|
|
554
519
|
constructor(field, rowElement, daraForm) {
|
|
555
520
|
super(daraForm, field, rowElement);
|
|
556
521
|
this.mounted();
|
|
@@ -565,10 +530,10 @@ var NumberRender = class extends Render {
|
|
|
565
530
|
const fieldContainerElement = this.rowElement.querySelector(".df-field-container");
|
|
566
531
|
fieldContainerElement.innerHTML = `
|
|
567
532
|
<div class="df-field">
|
|
568
|
-
<input type="text" name="${field.$xssName}" class="form-field number help-icon" />
|
|
533
|
+
<input type="text" name="${field.$xssName}" class="df-form-field df-number df-help-icon" />
|
|
569
534
|
</div>
|
|
570
535
|
${Render.getDescriptionTemplate(field)}
|
|
571
|
-
<div class="help-message"></div>
|
|
536
|
+
<div class="df-help-message"></div>
|
|
572
537
|
`;
|
|
573
538
|
this.element = fieldContainerElement.querySelector(`[name="${field.$xssName}"]`);
|
|
574
539
|
}
|
|
@@ -596,10 +561,8 @@ var NumberRender = class extends Render {
|
|
|
596
561
|
invalidMessage(this.field, this.rowElement, validResult);
|
|
597
562
|
return validResult;
|
|
598
563
|
}
|
|
599
|
-
}
|
|
600
|
-
|
|
601
|
-
// src/rule/stringValidator.ts
|
|
602
|
-
var stringValidator = (value, field) => {
|
|
564
|
+
}
|
|
565
|
+
const stringValidator = (value, field) => {
|
|
603
566
|
if (!field.$instance.isEnableView()) {
|
|
604
567
|
return true;
|
|
605
568
|
}
|
|
@@ -639,9 +602,7 @@ var stringValidator = (value, field) => {
|
|
|
639
602
|
}
|
|
640
603
|
return true;
|
|
641
604
|
};
|
|
642
|
-
|
|
643
|
-
// src/renderer/TextAreaRender.ts
|
|
644
|
-
var TextAreaRender = class extends Render {
|
|
605
|
+
class TextAreaRender extends Render {
|
|
645
606
|
constructor(field, rowElement, daraForm) {
|
|
646
607
|
super(daraForm, field, rowElement);
|
|
647
608
|
this.mounted();
|
|
@@ -652,16 +613,17 @@ var TextAreaRender = class extends Render {
|
|
|
652
613
|
inputEvent(this.field, this.element, this);
|
|
653
614
|
}
|
|
654
615
|
createField() {
|
|
616
|
+
var _a;
|
|
655
617
|
const field = this.field;
|
|
656
618
|
const fieldContainerElement = this.rowElement.querySelector(".df-field-container");
|
|
657
|
-
let rows = field.
|
|
619
|
+
let rows = (_a = field.rendererOptions) == null ? void 0 : _a.rows;
|
|
658
620
|
rows = +rows > 0 ? rows : 3;
|
|
659
621
|
fieldContainerElement.innerHTML = `
|
|
660
622
|
<div class="df-field">
|
|
661
|
-
<textarea name="${field.$xssName}" rows="${rows}" class="form-field textarea help-icon"></textarea>
|
|
623
|
+
<textarea name="${field.$xssName}" rows="${rows}" class="df-form-field df-textarea df-help-icon"></textarea>
|
|
662
624
|
</div>
|
|
663
625
|
${Render.getDescriptionTemplate(field)}
|
|
664
|
-
<div class="help-message"></div>
|
|
626
|
+
<div class="df-help-message"></div>
|
|
665
627
|
`;
|
|
666
628
|
this.element = fieldContainerElement.querySelector(`[name="${field.$xssName}"]`);
|
|
667
629
|
}
|
|
@@ -689,19 +651,18 @@ var TextAreaRender = class extends Render {
|
|
|
689
651
|
invalidMessage(this.field, this.rowElement, validResult);
|
|
690
652
|
return validResult;
|
|
691
653
|
}
|
|
692
|
-
}
|
|
693
|
-
|
|
694
|
-
// src/renderer/DropdownRender.ts
|
|
695
|
-
var DropdownRender = class _DropdownRender extends Render {
|
|
654
|
+
}
|
|
655
|
+
class DropdownRender extends Render {
|
|
696
656
|
constructor(field, rowElement, daraForm) {
|
|
657
|
+
var _a, _b, _c, _d, _e;
|
|
697
658
|
super(daraForm, field, rowElement);
|
|
698
659
|
let initDefaultValue = "";
|
|
699
660
|
if (!isUndefined(field.defaultValue)) {
|
|
700
661
|
initDefaultValue = field.defaultValue;
|
|
701
662
|
}
|
|
702
|
-
const valueKey =
|
|
663
|
+
const valueKey = DropdownRender.valuesValueKey(field);
|
|
703
664
|
let initDefaultValueFlag = false;
|
|
704
|
-
this.field.listItem
|
|
665
|
+
(_b = (_a = this.field.listItem) == null ? void 0 : _a.list) == null ? void 0 : _b.forEach((item) => {
|
|
705
666
|
let itemValue = item[valueKey];
|
|
706
667
|
if (item.selected) {
|
|
707
668
|
this.defaultSelected = itemValue;
|
|
@@ -713,8 +674,8 @@ var DropdownRender = class _DropdownRender extends Render {
|
|
|
713
674
|
if (initDefaultValueFlag) {
|
|
714
675
|
this.defaultSelected = initDefaultValue;
|
|
715
676
|
} else if (!this.defaultSelected) {
|
|
716
|
-
if (field.
|
|
717
|
-
this.defaultSelected = this.field.listItem
|
|
677
|
+
if (((_c = field.rendererOptions) == null ? void 0 : _c.disableDefaultOption) === true) {
|
|
678
|
+
this.defaultSelected = ((_e = (_d = this.field.listItem) == null ? void 0 : _d.list) == null ? void 0 : _e.length) > 0 ? this.field.listItem.list[0][valueKey] || "" : "";
|
|
718
679
|
}
|
|
719
680
|
}
|
|
720
681
|
if (isUndefined(this.defaultSelected)) {
|
|
@@ -730,11 +691,11 @@ var DropdownRender = class _DropdownRender extends Render {
|
|
|
730
691
|
createField() {
|
|
731
692
|
const field = this.field;
|
|
732
693
|
const fieldContainerElement = this.rowElement.querySelector(".df-field-container");
|
|
733
|
-
let template = ` <div class="df-field"><select name="${field.$xssName}" class="form-field dropdown">
|
|
694
|
+
let template = ` <div class="df-field"><select name="${field.$xssName}" class="df-form-field df-dropdown">
|
|
734
695
|
${this.dropdownValuesTemplate(field)}
|
|
735
|
-
</select> <i class="help-icon"></i></div>
|
|
696
|
+
</select> <i class="df-help-icon"></i></div>
|
|
736
697
|
${Render.getDescriptionTemplate(field)}
|
|
737
|
-
<div class="help-message"></div>
|
|
698
|
+
<div class="df-help-message"></div>
|
|
738
699
|
`;
|
|
739
700
|
fieldContainerElement.innerHTML = template;
|
|
740
701
|
this.element = fieldContainerElement.querySelector(`[name="${field.$xssName}"]`);
|
|
@@ -786,13 +747,14 @@ var DropdownRender = class _DropdownRender extends Render {
|
|
|
786
747
|
return validResult;
|
|
787
748
|
}
|
|
788
749
|
dropdownValuesTemplate(field) {
|
|
750
|
+
var _a, _b, _c;
|
|
789
751
|
const labelKey = Render.valuesLabelKey(field);
|
|
790
752
|
const valueKey = Render.valuesValueKey(field);
|
|
791
753
|
let template = "";
|
|
792
|
-
if (field.
|
|
793
|
-
template += `<option value="">${
|
|
754
|
+
if (((_a = field.rendererOptions) == null ? void 0 : _a.disableDefaultOption) !== true) {
|
|
755
|
+
template += `<option value="">${Language3.getMessage("selection")}</option>`;
|
|
794
756
|
}
|
|
795
|
-
field.listItem
|
|
757
|
+
(_c = (_b = field.listItem) == null ? void 0 : _b.list) == null ? void 0 : _c.forEach((val) => {
|
|
796
758
|
const attr = `${val.selected ? "selected" : ""} ${val.disabled ? "disabled" : ""}`;
|
|
797
759
|
if (isUndefined(val[valueKey]) && val.label) {
|
|
798
760
|
template += `<option value="${val.value || ""}" ${attr}>${val.label}</option>`;
|
|
@@ -802,10 +764,8 @@ var DropdownRender = class _DropdownRender extends Render {
|
|
|
802
764
|
});
|
|
803
765
|
return template;
|
|
804
766
|
}
|
|
805
|
-
}
|
|
806
|
-
|
|
807
|
-
// src/renderer/TextRender.ts
|
|
808
|
-
var TextRender = class extends Render {
|
|
767
|
+
}
|
|
768
|
+
class TextRender extends Render {
|
|
809
769
|
constructor(field, rowElement, daraForm) {
|
|
810
770
|
super(daraForm, field, rowElement);
|
|
811
771
|
this.mounted();
|
|
@@ -820,10 +780,10 @@ var TextRender = class extends Render {
|
|
|
820
780
|
const fieldContainerElement = this.rowElement.querySelector(".df-field-container");
|
|
821
781
|
fieldContainerElement.innerHTML = `
|
|
822
782
|
<div class="df-field">
|
|
823
|
-
<input type="text" name="${field.$xssName}" class="form-field text help-icon" />
|
|
783
|
+
<input type="text" name="${field.$xssName}" class="df-form-field df-text df-help-icon" />
|
|
824
784
|
</div>
|
|
825
785
|
${Render.getDescriptionTemplate(field)}
|
|
826
|
-
<div class="help-message"></div>
|
|
786
|
+
<div class="df-help-message"></div>
|
|
827
787
|
`;
|
|
828
788
|
this.element = fieldContainerElement.querySelector(`[name="${field.$xssName}"]`);
|
|
829
789
|
}
|
|
@@ -851,11 +811,74 @@ var TextRender = class extends Render {
|
|
|
851
811
|
invalidMessage(this.field, this.rowElement, validResult);
|
|
852
812
|
return validResult;
|
|
853
813
|
}
|
|
854
|
-
}
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
814
|
+
}
|
|
815
|
+
function resolveFieldStyle(formOptions, field, beforeField, isLabelHide) {
|
|
816
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
|
817
|
+
const fieldStyle = {
|
|
818
|
+
rowStyleClass: orientationClassName(field.orientation),
|
|
819
|
+
fieldClass: "",
|
|
820
|
+
fieldStyle: "",
|
|
821
|
+
labelClass: "",
|
|
822
|
+
labelStyle: "",
|
|
823
|
+
labelAlignClass: "",
|
|
824
|
+
valueClass: "",
|
|
825
|
+
valueStyle: "",
|
|
826
|
+
tabAlignClass: ""
|
|
827
|
+
};
|
|
828
|
+
const defaultLabelWidth = ((_a = beforeField == null ? void 0 : beforeField.style) == null ? void 0 : _a.labelWidth) ?? formOptions.style.labelWidth ?? "3";
|
|
829
|
+
let defaultValueWidth = ((_b = beforeField == null ? void 0 : beforeField.style) == null ? void 0 : _b.valueWidth) ?? formOptions.style.valueWidth ?? "9";
|
|
830
|
+
const position = ((_c = beforeField == null ? void 0 : beforeField.style) == null ? void 0 : _c.position) ?? formOptions.style.position;
|
|
831
|
+
const width = (_d = field.style) == null ? void 0 : _d.width;
|
|
832
|
+
const positionArr = FIELD_POSITION_STYLE[(_e = field.style) == null ? void 0 : _e.position] ?? FIELD_POSITION_STYLE[position] ?? FIELD_POSITION_STYLE.top;
|
|
833
|
+
fieldStyle.fieldClass = `${positionArr[0] ? "df-" + positionArr[0] : ""} ${((_f = field.style) == null ? void 0 : _f.customClass) || ""}`;
|
|
834
|
+
if (width) {
|
|
835
|
+
if (isNumber(width)) {
|
|
836
|
+
fieldStyle.fieldClass += isNumber(width) ? ` df-col-xs-${width}` : "";
|
|
837
|
+
} else {
|
|
838
|
+
fieldStyle.fieldStyle = isNumber(width) ? "" : `width:${width};`;
|
|
839
|
+
}
|
|
840
|
+
}
|
|
841
|
+
fieldStyle.tabAlignClass = "df-tab-al-" + (["right", "center"].includes((_g = field.style) == null ? void 0 : _g.tabAlign) ? field.style.tabAlign : "left");
|
|
842
|
+
const labelWidth = ((_h = field.style) == null ? void 0 : _h.labelWidth) || defaultLabelWidth;
|
|
843
|
+
fieldStyle.labelAlignClass = positionArr[1];
|
|
844
|
+
if (!isLabelHide && labelWidth && !["top", "bottom"].includes(positionArr[0])) {
|
|
845
|
+
if (isNumber(labelWidth)) {
|
|
846
|
+
const labelWidthValue = +labelWidth;
|
|
847
|
+
defaultValueWidth = 12 - labelWidthValue;
|
|
848
|
+
fieldStyle.labelClass = `df-col-xs-${labelWidthValue}`;
|
|
849
|
+
fieldStyle.valueClass = fieldStyle.labelStyle ? "df-col-full" : `df-col-xs-${defaultValueWidth}`;
|
|
850
|
+
} else {
|
|
851
|
+
fieldStyle.labelStyle = `width:${labelWidth};`;
|
|
852
|
+
}
|
|
853
|
+
}
|
|
854
|
+
const valueWidth = ((_i = field.style) == null ? void 0 : _i.valueWidth) || defaultValueWidth;
|
|
855
|
+
if (isLabelHide && !["left", "right"].includes(positionArr[0])) {
|
|
856
|
+
fieldStyle.valueClass = "df-col-full";
|
|
857
|
+
} else {
|
|
858
|
+
if (valueWidth && !["top", "bottom"].includes(positionArr[0])) {
|
|
859
|
+
if (isNumber(valueWidth)) {
|
|
860
|
+
fieldStyle.valueClass = fieldStyle.labelStyle ? "df-col-full" : `df-col-xs-${valueWidth}`;
|
|
861
|
+
} else {
|
|
862
|
+
fieldStyle.valueStyle = `width:${valueWidth};`;
|
|
863
|
+
}
|
|
864
|
+
} else {
|
|
865
|
+
fieldStyle.valueClass = fieldStyle.labelStyle ? "df-col-full" : "";
|
|
866
|
+
}
|
|
867
|
+
}
|
|
868
|
+
fieldStyle.fieldClass = spaceReplace(fieldStyle.fieldClass);
|
|
869
|
+
fieldStyle.labelClass = spaceReplace(fieldStyle.labelClass);
|
|
870
|
+
fieldStyle.valueClass = spaceReplace(fieldStyle.valueClass);
|
|
871
|
+
return fieldStyle;
|
|
872
|
+
}
|
|
873
|
+
function orientationClassName(orientation) {
|
|
874
|
+
return orientation === "horizontal" ? "df-horizontal" : "df-vertical";
|
|
875
|
+
}
|
|
876
|
+
function spaceReplace(str) {
|
|
877
|
+
return str.replace(/\s+/g, " ").trim();
|
|
878
|
+
}
|
|
879
|
+
class CheckboxRender extends Render {
|
|
858
880
|
constructor(field, rowElement, daraForm) {
|
|
881
|
+
var _a, _b;
|
|
859
882
|
super(daraForm, field, rowElement);
|
|
860
883
|
this.defaultCheckValue = [];
|
|
861
884
|
this.defaultCheckValue = [];
|
|
@@ -867,12 +890,12 @@ var CheckboxRender = class _CheckboxRender extends Render {
|
|
|
867
890
|
initDefaultValue = [field.defaultValue];
|
|
868
891
|
}
|
|
869
892
|
}
|
|
870
|
-
const valueKey =
|
|
893
|
+
const valueKey = CheckboxRender.valuesValueKey(field);
|
|
871
894
|
if (isUndefined(this.field.listItem)) {
|
|
872
895
|
this.setValueItems([{ label: "", value: "Y" }]);
|
|
873
896
|
}
|
|
874
897
|
let initDefaultValueFlag = false;
|
|
875
|
-
this.field.listItem
|
|
898
|
+
(_b = (_a = this.field.listItem) == null ? void 0 : _a.list) == null ? void 0 : _b.forEach((item) => {
|
|
876
899
|
let itemValue = item[valueKey];
|
|
877
900
|
if (item.selected) {
|
|
878
901
|
this.defaultCheckValue.push(itemValue ? itemValue : true);
|
|
@@ -902,25 +925,26 @@ var CheckboxRender = class _CheckboxRender extends Render {
|
|
|
902
925
|
return `input[type="checkbox"][name="${this.field.$xssName}"]`;
|
|
903
926
|
}
|
|
904
927
|
createField() {
|
|
928
|
+
var _a, _b;
|
|
905
929
|
const field = this.field;
|
|
906
930
|
const fieldContainerElement = this.rowElement.querySelector(".df-field-container");
|
|
907
931
|
const templates = [];
|
|
908
932
|
const fieldName = field.$xssName;
|
|
909
933
|
const labelKey = Render.valuesLabelKey(field);
|
|
910
934
|
const valueKey = Render.valuesValueKey(field);
|
|
911
|
-
templates.push(` <div class="df-field"><div class="field-group">`);
|
|
912
|
-
field.listItem
|
|
935
|
+
templates.push(` <div class="df-field"><div class="df-field-group">`);
|
|
936
|
+
(_b = (_a = field.listItem) == null ? void 0 : _a.list) == null ? void 0 : _b.forEach((val) => {
|
|
913
937
|
const checkVal = val[valueKey];
|
|
914
938
|
templates.push(`
|
|
915
|
-
<span class="field ${field.listItem.orientation
|
|
939
|
+
<span class="df-field-item ${orientationClassName(field.listItem.orientation ?? OrientationMap.horizontal)}">
|
|
916
940
|
<label>
|
|
917
|
-
<input type="checkbox" name="${fieldName}" value="${checkVal ? replaceXss(checkVal) : ""}" class="form-field checkbox" ${val.selected ? "checked" : ""} ${val.disabled ? "disabled" : ""} />
|
|
941
|
+
<input type="checkbox" name="${fieldName}" value="${checkVal ? replaceXss(checkVal) : ""}" class="df-form-field df-checkbox" ${val.selected ? "checked" : ""} ${val.disabled ? "disabled" : ""} />
|
|
918
942
|
${Render.valuesLabelValue(labelKey, val)}
|
|
919
943
|
</label>
|
|
920
944
|
</span>
|
|
921
945
|
`);
|
|
922
946
|
});
|
|
923
|
-
templates.push(`<i class="
|
|
947
|
+
templates.push(`<i class="df-form-icon df-help-icon"></i></div></div> ${Render.getDescriptionTemplate(field)}<div class="df-help-message"></div>`);
|
|
924
948
|
fieldContainerElement.innerHTML = templates.join("");
|
|
925
949
|
}
|
|
926
950
|
setValueItems(items) {
|
|
@@ -954,7 +978,7 @@ var CheckboxRender = class _CheckboxRender extends Render {
|
|
|
954
978
|
return checkValue;
|
|
955
979
|
} else {
|
|
956
980
|
const checkElement = this.rowElement.querySelector(`[name="${this.field.$xssName}"]`);
|
|
957
|
-
if (checkElement
|
|
981
|
+
if (checkElement == null ? void 0 : checkElement.checked) {
|
|
958
982
|
return checkElement.value ? checkElement.value : true;
|
|
959
983
|
}
|
|
960
984
|
return checkElement.value ? "" : false;
|
|
@@ -974,7 +998,7 @@ var CheckboxRender = class _CheckboxRender extends Render {
|
|
|
974
998
|
return;
|
|
975
999
|
}
|
|
976
1000
|
let valueArr = [];
|
|
977
|
-
if (
|
|
1001
|
+
if (isArray(value)) {
|
|
978
1002
|
valueArr = value;
|
|
979
1003
|
} else {
|
|
980
1004
|
valueArr.push(value);
|
|
@@ -985,12 +1009,12 @@ var CheckboxRender = class _CheckboxRender extends Render {
|
|
|
985
1009
|
});
|
|
986
1010
|
valueArr.forEach((val) => {
|
|
987
1011
|
const ele = this.rowElement.querySelector(`[name="${this.field.$xssName}"][value="${val}"]`);
|
|
988
|
-
if (ele)
|
|
989
|
-
ele.checked = true;
|
|
1012
|
+
if (ele) ele.checked = true;
|
|
990
1013
|
});
|
|
991
1014
|
}
|
|
992
1015
|
reset() {
|
|
993
|
-
|
|
1016
|
+
var _a, _b;
|
|
1017
|
+
if (((_b = (_a = this.field.listItem) == null ? void 0 : _a.list) == null ? void 0 : _b.length) == 1 && this.defaultCheckValue.length == 1) {
|
|
994
1018
|
this.setValue(true, false);
|
|
995
1019
|
} else {
|
|
996
1020
|
this.setValue(this.defaultCheckValue, false);
|
|
@@ -1019,20 +1043,19 @@ var CheckboxRender = class _CheckboxRender extends Render {
|
|
|
1019
1043
|
invalidMessage(this.field, this.rowElement, validResult);
|
|
1020
1044
|
return validResult;
|
|
1021
1045
|
}
|
|
1022
|
-
}
|
|
1023
|
-
|
|
1024
|
-
// src/renderer/RadioRender.ts
|
|
1025
|
-
var RadioRender = class _RadioRender extends Render {
|
|
1046
|
+
}
|
|
1047
|
+
class RadioRender extends Render {
|
|
1026
1048
|
constructor(field, rowElement, daraForm) {
|
|
1049
|
+
var _a, _b, _c, _d, _e;
|
|
1027
1050
|
super(daraForm, field, rowElement);
|
|
1028
1051
|
this.defaultCheckValue = "";
|
|
1029
1052
|
let initDefaultValue = [];
|
|
1030
1053
|
if (!isUndefined(field.defaultValue)) {
|
|
1031
1054
|
initDefaultValue = field.defaultValue;
|
|
1032
1055
|
}
|
|
1033
|
-
const valueKey =
|
|
1056
|
+
const valueKey = RadioRender.valuesValueKey(field);
|
|
1034
1057
|
let initDefaultValueFlag = false;
|
|
1035
|
-
this.field.listItem
|
|
1058
|
+
(_b = (_a = this.field.listItem) == null ? void 0 : _a.list) == null ? void 0 : _b.forEach((item) => {
|
|
1036
1059
|
let itemValue = item[valueKey];
|
|
1037
1060
|
if (item.selected) {
|
|
1038
1061
|
this.defaultCheckValue = itemValue;
|
|
@@ -1044,7 +1067,7 @@ var RadioRender = class _RadioRender extends Render {
|
|
|
1044
1067
|
if (initDefaultValueFlag) {
|
|
1045
1068
|
this.defaultCheckValue = initDefaultValue;
|
|
1046
1069
|
} else if (!this.defaultCheckValue) {
|
|
1047
|
-
this.defaultCheckValue = this.field.listItem
|
|
1070
|
+
this.defaultCheckValue = ((_d = (_c = this.field.listItem) == null ? void 0 : _c.list) == null ? void 0 : _d.length) > 0 ? (_e = this.field.listItem) == null ? void 0 : _e.list[0][valueKey] : "";
|
|
1048
1071
|
}
|
|
1049
1072
|
this.mounted();
|
|
1050
1073
|
this.setDefaultOption();
|
|
@@ -1066,28 +1089,29 @@ var RadioRender = class _RadioRender extends Render {
|
|
|
1066
1089
|
return `input[type="radio"][name="${this.field.$xssName}"]`;
|
|
1067
1090
|
}
|
|
1068
1091
|
createField() {
|
|
1092
|
+
var _a, _b;
|
|
1069
1093
|
const field = this.field;
|
|
1070
1094
|
const fieldContainerElement = this.rowElement.querySelector(".df-field-container");
|
|
1071
1095
|
const templates = [];
|
|
1072
1096
|
const fieldName = field.$xssName;
|
|
1073
1097
|
const labelKey = Render.valuesLabelKey(field);
|
|
1074
1098
|
const valueKey = Render.valuesValueKey(field);
|
|
1075
|
-
templates.push(`<div class="df-field"><div class="field-group">`);
|
|
1076
|
-
field.listItem
|
|
1099
|
+
templates.push(`<div class="df-field"><div class="df-field-group">`);
|
|
1100
|
+
(_b = (_a = field.listItem) == null ? void 0 : _a.list) == null ? void 0 : _b.forEach((val) => {
|
|
1077
1101
|
const radioVal = val[valueKey];
|
|
1078
1102
|
templates.push(
|
|
1079
|
-
`<span class="field ${field.orientation
|
|
1103
|
+
`<span class="df-field-item ${orientationClassName(field.orientation ?? OrientationMap.horizontal)}">
|
|
1080
1104
|
<label>
|
|
1081
|
-
<input type="radio" name="${fieldName}" value="${radioVal}" class="form-field radio" ${val.selected ? "checked" : ""} ${val.disabled ? "disabled" : ""}/>
|
|
1105
|
+
<input type="radio" name="${fieldName}" value="${radioVal}" class="df-form-field df-radio" ${val.selected ? "checked" : ""} ${val.disabled ? "disabled" : ""}/>
|
|
1082
1106
|
${Render.valuesLabelValue(labelKey, val)}
|
|
1083
1107
|
</label>
|
|
1084
1108
|
</span>
|
|
1085
1109
|
`
|
|
1086
1110
|
);
|
|
1087
1111
|
});
|
|
1088
|
-
templates.push(`<i class="
|
|
1112
|
+
templates.push(`<i class="df-form-icon df-help-icon"></i></div></div>
|
|
1089
1113
|
${Render.getDescriptionTemplate(field)}
|
|
1090
|
-
<div class="help-message"></div>
|
|
1114
|
+
<div class="df-help-message"></div>
|
|
1091
1115
|
`);
|
|
1092
1116
|
fieldContainerElement.innerHTML = templates.join("");
|
|
1093
1117
|
this.initEvent();
|
|
@@ -1111,7 +1135,8 @@ var RadioRender = class _RadioRender extends Render {
|
|
|
1111
1135
|
}
|
|
1112
1136
|
}
|
|
1113
1137
|
getValue() {
|
|
1114
|
-
|
|
1138
|
+
var _a;
|
|
1139
|
+
return (_a = this.rowElement.querySelector(`[name="${this.field.$xssName}"]:checked`)) == null ? void 0 : _a.value;
|
|
1115
1140
|
}
|
|
1116
1141
|
setValue(value, changeCheckFlag) {
|
|
1117
1142
|
if (changeCheckFlag !== false && this.changeEventCall(this.field, null, this, value) === false) {
|
|
@@ -1162,10 +1187,8 @@ var RadioRender = class _RadioRender extends Render {
|
|
|
1162
1187
|
invalidMessage(this.field, this.rowElement, validResult);
|
|
1163
1188
|
return validResult;
|
|
1164
1189
|
}
|
|
1165
|
-
}
|
|
1166
|
-
|
|
1167
|
-
// src/renderer/PasswordRender.ts
|
|
1168
|
-
var PasswordRender = class extends Render {
|
|
1190
|
+
}
|
|
1191
|
+
class PasswordRender extends Render {
|
|
1169
1192
|
constructor(field, rowElement, daraForm) {
|
|
1170
1193
|
super(daraForm, field, rowElement);
|
|
1171
1194
|
this.mounted();
|
|
@@ -1180,10 +1203,10 @@ var PasswordRender = class extends Render {
|
|
|
1180
1203
|
const fieldContainerElement = this.rowElement.querySelector(".df-field-container");
|
|
1181
1204
|
fieldContainerElement.innerHTML = `
|
|
1182
1205
|
<div class="df-field">
|
|
1183
|
-
<input type="password" name="${field.$xssName}" class="form-field password help-icon" autocomplete="off" />
|
|
1206
|
+
<input type="password" name="${field.$xssName}" class="df-form-field df-password df-help-icon" autocomplete="off" />
|
|
1184
1207
|
</div>
|
|
1185
1208
|
${Render.getDescriptionTemplate(field)}
|
|
1186
|
-
<div class="help-message"></div>
|
|
1209
|
+
<div class="df-help-message"></div>
|
|
1187
1210
|
`;
|
|
1188
1211
|
this.element = fieldContainerElement.querySelector(`[name="${field.$xssName}"]`);
|
|
1189
1212
|
}
|
|
@@ -1211,10 +1234,8 @@ var PasswordRender = class extends Render {
|
|
|
1211
1234
|
invalidMessage(this.field, this.rowElement, validResult);
|
|
1212
1235
|
return validResult;
|
|
1213
1236
|
}
|
|
1214
|
-
}
|
|
1215
|
-
|
|
1216
|
-
// src/rule/fileValidator.ts
|
|
1217
|
-
var fileValidator = (element, field, fileList) => {
|
|
1237
|
+
}
|
|
1238
|
+
const fileValidator = (element, field, fileList) => {
|
|
1218
1239
|
const result = { name: field.name, constraint: [] };
|
|
1219
1240
|
if (field.required && fileList.length < 1) {
|
|
1220
1241
|
result.constraint.push(RULES.REQUIRED);
|
|
@@ -1225,23 +1246,23 @@ var fileValidator = (element, field, fileList) => {
|
|
|
1225
1246
|
}
|
|
1226
1247
|
return true;
|
|
1227
1248
|
};
|
|
1228
|
-
|
|
1229
|
-
// src/renderer/FileRender.ts
|
|
1230
|
-
var FileRender = class extends Render {
|
|
1249
|
+
class FileRender extends Render {
|
|
1231
1250
|
constructor(field, rowElement, daraForm) {
|
|
1251
|
+
var _a;
|
|
1232
1252
|
super(daraForm, field, rowElement);
|
|
1233
1253
|
this.removeIds = [];
|
|
1234
1254
|
this.uploadFiles = {};
|
|
1235
1255
|
this.fileList = [];
|
|
1236
1256
|
this.fileSeq = 0;
|
|
1237
1257
|
this.element = rowElement.querySelector(`[name="${field.$xssName}"]`);
|
|
1238
|
-
this.fileList = field.listItem
|
|
1258
|
+
this.fileList = ((_a = field.listItem) == null ? void 0 : _a.list) || [];
|
|
1239
1259
|
this.mounted();
|
|
1240
1260
|
this.setDefaultOption();
|
|
1241
1261
|
}
|
|
1242
1262
|
mounted() {
|
|
1243
1263
|
this.element.addEventListener("change", (e) => {
|
|
1244
|
-
|
|
1264
|
+
var _a;
|
|
1265
|
+
const files = (_a = e.target) == null ? void 0 : _a.files;
|
|
1245
1266
|
if (files) {
|
|
1246
1267
|
let fileList = [];
|
|
1247
1268
|
for (let item of files) {
|
|
@@ -1262,17 +1283,17 @@ var FileRender = class extends Render {
|
|
|
1262
1283
|
const fieldContainerElement = this.rowElement.querySelector(".df-field-container");
|
|
1263
1284
|
fieldContainerElement.innerHTML = `
|
|
1264
1285
|
<div class="df-field">
|
|
1265
|
-
<span class="file-wrapper">
|
|
1266
|
-
<label class="file-label">
|
|
1267
|
-
<input type="file" name="${field.$xssName}" class="form-field file" multiple />
|
|
1268
|
-
${
|
|
1286
|
+
<span class="df-file-wrapper">
|
|
1287
|
+
<label class="df-file-label">
|
|
1288
|
+
<input type="file" name="${field.$xssName}" class="df-form-field df-file" multiple />
|
|
1289
|
+
${Language3.getMessage("fileButton")}
|
|
1269
1290
|
</label>
|
|
1270
|
-
<i class="
|
|
1291
|
+
<i class="df-form-icon df-help-icon"></i>
|
|
1271
1292
|
</span>
|
|
1272
1293
|
</div>
|
|
1273
1294
|
${Render.getDescriptionTemplate(field)}
|
|
1274
|
-
<div class="
|
|
1275
|
-
<div class="help-message"></div>
|
|
1295
|
+
<div class="df-file-list"></div>
|
|
1296
|
+
<div class="df-help-message"></div>
|
|
1276
1297
|
`;
|
|
1277
1298
|
this.element = fieldContainerElement.querySelector(`[name="${field.$xssName}"]`);
|
|
1278
1299
|
}
|
|
@@ -1281,8 +1302,7 @@ var FileRender = class extends Render {
|
|
|
1281
1302
|
const newFiles = [];
|
|
1282
1303
|
for (let item of files) {
|
|
1283
1304
|
const fileCheckList = this.fileList.filter((fileItem) => fileItem.fileName == item.name && fileItem.fileSize == item.size && fileItem.lastModified == item.lastModified);
|
|
1284
|
-
if (fileCheckList.length > 0)
|
|
1285
|
-
continue;
|
|
1305
|
+
if (fileCheckList.length > 0) continue;
|
|
1286
1306
|
this.fileSeq += 1;
|
|
1287
1307
|
this.uploadFiles[this.fileSeq] = item;
|
|
1288
1308
|
let newFileInfo = {
|
|
@@ -1300,7 +1320,7 @@ var FileRender = class extends Render {
|
|
|
1300
1320
|
}
|
|
1301
1321
|
}
|
|
1302
1322
|
setFileList(fileList, initFlag) {
|
|
1303
|
-
const fileListElement = this.rowElement.querySelector(".
|
|
1323
|
+
const fileListElement = this.rowElement.querySelector(".df-file-list");
|
|
1304
1324
|
if (fileListElement) {
|
|
1305
1325
|
if (initFlag === true) {
|
|
1306
1326
|
fileListElement.innerHTML = "";
|
|
@@ -1308,9 +1328,9 @@ var FileRender = class extends Render {
|
|
|
1308
1328
|
const fileTemplateHtml = [];
|
|
1309
1329
|
fileList.forEach((file) => {
|
|
1310
1330
|
fileTemplateHtml.push(`
|
|
1311
|
-
<div class="file-item" data-seq="${file.$seq}">
|
|
1312
|
-
${file.fileId ? '<span class="file-icon download"></span>' : '<span class="file-icon"></span>'} <span class="file-icon remove"></span>
|
|
1313
|
-
<span class="file-name">${file.fileName}</span >
|
|
1331
|
+
<div class="df-file-item" data-seq="${file.$seq}">
|
|
1332
|
+
${file.fileId ? '<span class="df-file-icon df-file-download"></span>' : '<span class="df-file-icon df-empty-icon"></span>'} <span class="df-file-icon df-file-remove"></span>
|
|
1333
|
+
<span class="df-file-name">${file.fileName}</span >
|
|
1314
1334
|
</div>`);
|
|
1315
1335
|
});
|
|
1316
1336
|
fileListElement.insertAdjacentHTML("beforeend", fileTemplateHtml.join(""));
|
|
@@ -1327,10 +1347,10 @@ var FileRender = class extends Render {
|
|
|
1327
1347
|
* @param fileListElement
|
|
1328
1348
|
*/
|
|
1329
1349
|
downloadFileEvent(item, fileListElement) {
|
|
1330
|
-
const ele = fileListElement.querySelector(`[data-seq="${item.$seq}"] .download`);
|
|
1350
|
+
const ele = fileListElement.querySelector(`[data-seq="${item.$seq}"] .df-file-download`);
|
|
1331
1351
|
if (ele) {
|
|
1332
1352
|
ele.addEventListener("click", (evt) => {
|
|
1333
|
-
const fileItemElement = evt.target.closest(".file-item");
|
|
1353
|
+
const fileItemElement = evt.target.closest(".df-file-item");
|
|
1334
1354
|
if (fileItemElement) {
|
|
1335
1355
|
const attrSeq = fileItemElement.getAttribute("data-seq");
|
|
1336
1356
|
if (attrSeq) {
|
|
@@ -1357,10 +1377,10 @@ var FileRender = class extends Render {
|
|
|
1357
1377
|
* @param fileListElement
|
|
1358
1378
|
*/
|
|
1359
1379
|
removeFileEvent(item, fileListElement) {
|
|
1360
|
-
const ele = fileListElement.querySelector(`[data-seq="${item.$seq}"] .remove`);
|
|
1380
|
+
const ele = fileListElement.querySelector(`[data-seq="${item.$seq}"] .df-file-remove`);
|
|
1361
1381
|
if (ele) {
|
|
1362
1382
|
ele.addEventListener("click", (evt) => {
|
|
1363
|
-
const fileItemElement = evt.target.closest(".file-item");
|
|
1383
|
+
const fileItemElement = evt.target.closest(".df-file-item");
|
|
1364
1384
|
if (fileItemElement) {
|
|
1365
1385
|
const attrSeq = fileItemElement.getAttribute("data-seq");
|
|
1366
1386
|
if (attrSeq) {
|
|
@@ -1396,7 +1416,7 @@ var FileRender = class extends Render {
|
|
|
1396
1416
|
this.setFileList(this.fileList, true);
|
|
1397
1417
|
}
|
|
1398
1418
|
setValue(value) {
|
|
1399
|
-
if (isArray(value)) {
|
|
1419
|
+
if (core.isArray(value)) {
|
|
1400
1420
|
this.setValueItems(value);
|
|
1401
1421
|
}
|
|
1402
1422
|
this.element.value = "";
|
|
@@ -1414,10 +1434,8 @@ var FileRender = class extends Render {
|
|
|
1414
1434
|
invalidMessage(this.field, this.rowElement, validResult);
|
|
1415
1435
|
return validResult;
|
|
1416
1436
|
}
|
|
1417
|
-
}
|
|
1418
|
-
|
|
1419
|
-
// src/renderer/CustomRender.ts
|
|
1420
|
-
var CustomRender = class extends Render {
|
|
1437
|
+
}
|
|
1438
|
+
class CustomRender extends Render {
|
|
1421
1439
|
constructor(field, rowElement, daraForm) {
|
|
1422
1440
|
super(daraForm, field, rowElement);
|
|
1423
1441
|
if (field.renderer) {
|
|
@@ -1445,7 +1463,7 @@ var CustomRender = class extends Render {
|
|
|
1445
1463
|
${fieldTemplate}
|
|
1446
1464
|
</div>
|
|
1447
1465
|
${Render.getDescriptionTemplate(field)}
|
|
1448
|
-
<div class="help-message"></div>`;
|
|
1466
|
+
<div class="df-help-message"></div>`;
|
|
1449
1467
|
}
|
|
1450
1468
|
getValue() {
|
|
1451
1469
|
if (this.customFunction.getValue) {
|
|
@@ -1490,10 +1508,8 @@ var CustomRender = class extends Render {
|
|
|
1490
1508
|
this.customFunction.focus.call(this, this.field, this.rowElement);
|
|
1491
1509
|
}
|
|
1492
1510
|
}
|
|
1493
|
-
}
|
|
1494
|
-
|
|
1495
|
-
// src/renderer/GroupRender.ts
|
|
1496
|
-
var GroupRender = class extends Render {
|
|
1511
|
+
}
|
|
1512
|
+
class GroupRender extends Render {
|
|
1497
1513
|
constructor(field, rowElement, daraForm) {
|
|
1498
1514
|
super(daraForm, field, rowElement);
|
|
1499
1515
|
}
|
|
@@ -1528,10 +1544,8 @@ var GroupRender = class extends Render {
|
|
|
1528
1544
|
}
|
|
1529
1545
|
focus() {
|
|
1530
1546
|
}
|
|
1531
|
-
}
|
|
1532
|
-
|
|
1533
|
-
// src/renderer/HiddenRender.ts
|
|
1534
|
-
var HiddenRender = class extends Render {
|
|
1547
|
+
}
|
|
1548
|
+
class HiddenRender extends Render {
|
|
1535
1549
|
constructor(field, rowElement, daraForm) {
|
|
1536
1550
|
super(daraForm, field, rowElement);
|
|
1537
1551
|
this.field.$value = field.defaultValue;
|
|
@@ -1556,17 +1570,16 @@ var HiddenRender = class extends Render {
|
|
|
1556
1570
|
valid() {
|
|
1557
1571
|
return true;
|
|
1558
1572
|
}
|
|
1559
|
-
}
|
|
1560
|
-
|
|
1561
|
-
// src/renderer/ButtonRender.ts
|
|
1562
|
-
var ButtonRender = class extends Render {
|
|
1573
|
+
}
|
|
1574
|
+
class ButtonRender extends Render {
|
|
1563
1575
|
constructor(field, rowElement, daraForm) {
|
|
1564
1576
|
super(daraForm, field, rowElement);
|
|
1565
1577
|
this.mounted();
|
|
1566
1578
|
this.setDefaultOption();
|
|
1567
1579
|
}
|
|
1568
1580
|
mounted() {
|
|
1569
|
-
|
|
1581
|
+
var _a;
|
|
1582
|
+
(_a = this.rowElement.querySelector(`#${this.field.$key}`)) == null ? void 0 : _a.addEventListener("click", (evt) => {
|
|
1570
1583
|
if (this.field.onClick) {
|
|
1571
1584
|
this.field.onClick.call(null, this.field);
|
|
1572
1585
|
}
|
|
@@ -1596,13 +1609,11 @@ var ButtonRender = class extends Render {
|
|
|
1596
1609
|
valid() {
|
|
1597
1610
|
return true;
|
|
1598
1611
|
}
|
|
1599
|
-
}
|
|
1600
|
-
|
|
1601
|
-
// src/renderer/RangeRender.ts
|
|
1602
|
-
var RangeRender = class extends Render {
|
|
1612
|
+
}
|
|
1613
|
+
class RangeRender extends Render {
|
|
1603
1614
|
constructor(field, rowElement, daraForm) {
|
|
1604
1615
|
super(daraForm, field, rowElement);
|
|
1605
|
-
this.rangeNumElement = rowElement.querySelector(".range-num");
|
|
1616
|
+
this.rangeNumElement = rowElement.querySelector(".df-range-num");
|
|
1606
1617
|
this.mounted();
|
|
1607
1618
|
this.setDefaultOption();
|
|
1608
1619
|
this.setDefaultInfo();
|
|
@@ -1620,11 +1631,11 @@ var RangeRender = class extends Render {
|
|
|
1620
1631
|
const fieldContainerElement = this.rowElement.querySelector(".df-field-container");
|
|
1621
1632
|
fieldContainerElement.innerHTML = `
|
|
1622
1633
|
<div class="df-field">
|
|
1623
|
-
<span class="range-num">${field.defaultValue ? field.defaultValue : 0}</span>
|
|
1624
|
-
<input type="range" name="${field.$xssName}" class="form-field range help-icon" min="${field.rule.minimum}" max="${field.rule.maximum}"/>
|
|
1634
|
+
<span class="df-range-num">${field.defaultValue ? field.defaultValue : 0}</span>
|
|
1635
|
+
<input type="range" name="${field.$xssName}" class="df-form-field df-range df-help-icon" min="${field.rule.minimum}" max="${field.rule.maximum}"/>
|
|
1625
1636
|
</div>
|
|
1626
1637
|
${Render.getDescriptionTemplate(field)}
|
|
1627
|
-
<div class="help-message"></div>
|
|
1638
|
+
<div class="df-help-message"></div>
|
|
1628
1639
|
`;
|
|
1629
1640
|
this.element = fieldContainerElement.querySelector(`[name="${field.$xssName}"]`);
|
|
1630
1641
|
}
|
|
@@ -1652,11 +1663,1300 @@ var RangeRender = class extends Render {
|
|
|
1652
1663
|
invalidMessage(this.field, this.rowElement, validResult);
|
|
1653
1664
|
return validResult;
|
|
1654
1665
|
}
|
|
1666
|
+
}
|
|
1667
|
+
let localeMessage$1 = {
|
|
1668
|
+
year: "Year",
|
|
1669
|
+
month: "Month",
|
|
1670
|
+
day: "Day",
|
|
1671
|
+
am: "AM",
|
|
1672
|
+
pm: "PM",
|
|
1673
|
+
today: "Today",
|
|
1674
|
+
ok: "Ok",
|
|
1675
|
+
months: {
|
|
1676
|
+
full: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
|
|
1677
|
+
abbr: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
|
|
1678
|
+
},
|
|
1679
|
+
weeks: {
|
|
1680
|
+
full: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
|
|
1681
|
+
abbr: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
|
|
1682
|
+
}
|
|
1683
|
+
};
|
|
1684
|
+
let Language$2 = class Language {
|
|
1685
|
+
constructor() {
|
|
1686
|
+
this.lang = localeMessage$1;
|
|
1687
|
+
}
|
|
1688
|
+
setDefaultMessage(lang) {
|
|
1689
|
+
localeMessage$1 = Object.assign(localeMessage$1, lang);
|
|
1690
|
+
}
|
|
1691
|
+
/**
|
|
1692
|
+
* 다국어 메시지 등록
|
|
1693
|
+
*
|
|
1694
|
+
* @public
|
|
1695
|
+
* @param {?Message} [lang] 둥록할 메시지
|
|
1696
|
+
*/
|
|
1697
|
+
set(lang) {
|
|
1698
|
+
this.lang = Object.assign({}, localeMessage$1, lang);
|
|
1699
|
+
}
|
|
1700
|
+
/**
|
|
1701
|
+
* 메시지 얻기
|
|
1702
|
+
*
|
|
1703
|
+
* @public
|
|
1704
|
+
* @param {string} messageKey 메시지 키
|
|
1705
|
+
* @returns {*}
|
|
1706
|
+
*/
|
|
1707
|
+
getMessage(messageKey) {
|
|
1708
|
+
return this.lang[messageKey];
|
|
1709
|
+
}
|
|
1710
|
+
getMonthsMessage(idx, mode = "abbr") {
|
|
1711
|
+
return this.lang.months[mode][idx] || "";
|
|
1712
|
+
}
|
|
1713
|
+
getWeeksMessage(idx, mode = "abbr") {
|
|
1714
|
+
return this.lang.weeks[mode][idx] || "";
|
|
1715
|
+
}
|
|
1716
|
+
getMonthsIdx(val, mode = "abbr") {
|
|
1717
|
+
return mode == "full" ? this.lang.months.full.indexOf(val) : this.lang.months.abbr.indexOf(val);
|
|
1718
|
+
}
|
|
1719
|
+
getWeeksIdx(val, mode = "abbr") {
|
|
1720
|
+
return mode == "full" ? this.lang.weeks.full.indexOf(val) : this.lang.weeks.abbr.indexOf(val);
|
|
1721
|
+
}
|
|
1722
|
+
};
|
|
1723
|
+
const Lanauage = new Language$2();
|
|
1724
|
+
const EXPRESSIONS_FORMAT = ["YY", "YYYY", "MMMM", "MMM", "MM", "M", "dddd", "ddd", "dd", "d", "DD", "D", "S", "HH", "H", "hh", "h", "mm", "m", "ss", "s", "SSS", "zzzz", "zzz", "zz", "z", "a", "A"];
|
|
1725
|
+
let MAX_CHAR_LENGTH = 0;
|
|
1726
|
+
let DEFAULT_FORMAT = {
|
|
1727
|
+
year: "YYYY",
|
|
1728
|
+
month: "YYYY-MM",
|
|
1729
|
+
date: "YYYY-MM-DD",
|
|
1730
|
+
time: "HH:mm",
|
|
1731
|
+
datetime: "YYYY-MM-DD HH:mm"
|
|
1732
|
+
};
|
|
1733
|
+
const DAY_STYLE_CLASS = ["ddtp-sun", "ddtp-mon", "ddtp-tue", "ddtp-wed", "ddtp-thu", "ddtp-fri", "ddtp-sat"];
|
|
1734
|
+
var DateViewMode = /* @__PURE__ */ ((DateViewMode2) => {
|
|
1735
|
+
DateViewMode2["year"] = "year";
|
|
1736
|
+
DateViewMode2["month"] = "month";
|
|
1737
|
+
DateViewMode2["date"] = "date";
|
|
1738
|
+
DateViewMode2["datetime"] = "datetime";
|
|
1739
|
+
DateViewMode2["time"] = "time";
|
|
1740
|
+
return DateViewMode2;
|
|
1741
|
+
})(DateViewMode || {});
|
|
1742
|
+
EXPRESSIONS_FORMAT.forEach((item) => {
|
|
1743
|
+
MAX_CHAR_LENGTH = Math.max(item.length, MAX_CHAR_LENGTH);
|
|
1744
|
+
});
|
|
1745
|
+
const format = (date, format2) => {
|
|
1746
|
+
format2 = format2 || "YYYY-MM-DD";
|
|
1747
|
+
const len = format2.length;
|
|
1748
|
+
let result = [];
|
|
1749
|
+
for (let i = 0; i < len; ) {
|
|
1750
|
+
let minLen = Math.min(MAX_CHAR_LENGTH, len - i);
|
|
1751
|
+
let j = minLen;
|
|
1752
|
+
for (; j > 0; j--) {
|
|
1753
|
+
const v = format2.substring(i, i + j);
|
|
1754
|
+
if (EXPRESSIONS_FORMAT.includes(v)) {
|
|
1755
|
+
try {
|
|
1756
|
+
result.push(expressionsFunction$1[v](date));
|
|
1757
|
+
} catch (e) {
|
|
1758
|
+
console.log(EXPRESSIONS_FORMAT.includes(v), v, e);
|
|
1759
|
+
}
|
|
1760
|
+
break;
|
|
1761
|
+
}
|
|
1762
|
+
}
|
|
1763
|
+
if (j < 1) {
|
|
1764
|
+
result.push(format2.substring(i, i + 1));
|
|
1765
|
+
i += 1;
|
|
1766
|
+
} else {
|
|
1767
|
+
i += j;
|
|
1768
|
+
}
|
|
1769
|
+
}
|
|
1770
|
+
return result.join("");
|
|
1771
|
+
};
|
|
1772
|
+
const expressionsFunction$1 = {
|
|
1773
|
+
YY: (date) => {
|
|
1774
|
+
return String(date.getFullYear()).slice(-2);
|
|
1775
|
+
},
|
|
1776
|
+
YYYY: (date) => {
|
|
1777
|
+
return String(date.getFullYear());
|
|
1778
|
+
},
|
|
1779
|
+
M: (date) => {
|
|
1780
|
+
return String(date.getMonth() + 1);
|
|
1781
|
+
},
|
|
1782
|
+
MM: (date) => {
|
|
1783
|
+
return core.leftPad(date.getMonth() + 1, 2);
|
|
1784
|
+
},
|
|
1785
|
+
MMM: (date) => {
|
|
1786
|
+
return Lanauage.getMonthsMessage(date.getMonth());
|
|
1787
|
+
},
|
|
1788
|
+
MMMM: (date) => {
|
|
1789
|
+
return Lanauage.getMonthsMessage(date.getMonth(), "full");
|
|
1790
|
+
},
|
|
1791
|
+
D: (date) => {
|
|
1792
|
+
return String(date.getDate());
|
|
1793
|
+
},
|
|
1794
|
+
DD: (date) => {
|
|
1795
|
+
return core.leftPad(date.getDate(), 2);
|
|
1796
|
+
},
|
|
1797
|
+
d: (date) => {
|
|
1798
|
+
return String(date.getDate());
|
|
1799
|
+
},
|
|
1800
|
+
dd: (date) => {
|
|
1801
|
+
return core.leftPad(date.getDate(), 2);
|
|
1802
|
+
},
|
|
1803
|
+
ddd: (date) => {
|
|
1804
|
+
return Lanauage.getWeeksMessage(date.getDay());
|
|
1805
|
+
},
|
|
1806
|
+
dddd: (date) => {
|
|
1807
|
+
return Lanauage.getWeeksMessage(date.getDay(), "full");
|
|
1808
|
+
},
|
|
1809
|
+
H: (date) => {
|
|
1810
|
+
return String(date.getHours());
|
|
1811
|
+
},
|
|
1812
|
+
HH: (date) => {
|
|
1813
|
+
return core.leftPad(date.getHours(), 2);
|
|
1814
|
+
},
|
|
1815
|
+
h: (date) => {
|
|
1816
|
+
return getH(date);
|
|
1817
|
+
},
|
|
1818
|
+
hh: (date) => {
|
|
1819
|
+
return core.leftPad(getH(date), 2);
|
|
1820
|
+
},
|
|
1821
|
+
a: (date) => {
|
|
1822
|
+
return String(date.getFullYear()).slice(-2);
|
|
1823
|
+
},
|
|
1824
|
+
A: (date) => {
|
|
1825
|
+
return getMeridiem(date);
|
|
1826
|
+
},
|
|
1827
|
+
m: (date) => {
|
|
1828
|
+
return String(date.getMinutes());
|
|
1829
|
+
},
|
|
1830
|
+
mm: (date) => {
|
|
1831
|
+
return core.leftPad(date.getMinutes(), 2);
|
|
1832
|
+
},
|
|
1833
|
+
s: (date) => {
|
|
1834
|
+
return String(date.getSeconds());
|
|
1835
|
+
},
|
|
1836
|
+
ss: (date) => {
|
|
1837
|
+
return core.leftPad(date.getSeconds(), 2);
|
|
1838
|
+
},
|
|
1839
|
+
SSS: (date) => {
|
|
1840
|
+
return core.leftPad(date.getMilliseconds(), 3);
|
|
1841
|
+
}
|
|
1842
|
+
};
|
|
1843
|
+
function getH(date) {
|
|
1844
|
+
let hour = date.getHours();
|
|
1845
|
+
if (hour > 12) {
|
|
1846
|
+
hour -= 12;
|
|
1847
|
+
} else if (hour < 1) {
|
|
1848
|
+
hour = 12;
|
|
1849
|
+
}
|
|
1850
|
+
return hour;
|
|
1851
|
+
}
|
|
1852
|
+
function getMeridiem(date, isUpper, isShort) {
|
|
1853
|
+
const hour = date.getHours();
|
|
1854
|
+
let m = hour < 12 ? "am" : "pm";
|
|
1855
|
+
m = Lanauage.getMessage(m);
|
|
1856
|
+
m = m.toUpperCase();
|
|
1857
|
+
return m;
|
|
1858
|
+
}
|
|
1859
|
+
const parser = (dateStr, format2) => {
|
|
1860
|
+
if (dateStr.length > 1e3) {
|
|
1861
|
+
return null;
|
|
1862
|
+
}
|
|
1863
|
+
format2 = format2 || DEFAULT_FORMAT.date;
|
|
1864
|
+
const dateInfo = {
|
|
1865
|
+
year: (/* @__PURE__ */ new Date()).getFullYear(),
|
|
1866
|
+
month: 0,
|
|
1867
|
+
day: 1,
|
|
1868
|
+
hour: 0,
|
|
1869
|
+
minute: 0,
|
|
1870
|
+
second: 0,
|
|
1871
|
+
millisecond: 0,
|
|
1872
|
+
isPm: false,
|
|
1873
|
+
isH: false,
|
|
1874
|
+
charIdx: 0
|
|
1875
|
+
};
|
|
1876
|
+
const len = format2.length;
|
|
1877
|
+
let startIdx = 0;
|
|
1878
|
+
for (let i = 0; i < len; ) {
|
|
1879
|
+
let minLen = Math.min(MAX_CHAR_LENGTH, len - i);
|
|
1880
|
+
let j = minLen;
|
|
1881
|
+
for (; j > 0; j--) {
|
|
1882
|
+
const v = format2.substring(i, i + j);
|
|
1883
|
+
if (EXPRESSIONS_FORMAT.includes(v)) {
|
|
1884
|
+
const expInfo = expressionsFunction[v];
|
|
1885
|
+
const val = matchFind(dateStr.substring(startIdx), expInfo[0]);
|
|
1886
|
+
expInfo[1](dateInfo, val);
|
|
1887
|
+
startIdx += val.length;
|
|
1888
|
+
break;
|
|
1889
|
+
}
|
|
1890
|
+
}
|
|
1891
|
+
if (j < 1) {
|
|
1892
|
+
i += 1;
|
|
1893
|
+
startIdx += 1;
|
|
1894
|
+
} else {
|
|
1895
|
+
i += j;
|
|
1896
|
+
}
|
|
1897
|
+
}
|
|
1898
|
+
if (dateInfo.hour != null && !dateInfo.isH) {
|
|
1899
|
+
if (dateInfo.isPm && +dateInfo.hour !== 12) {
|
|
1900
|
+
dateInfo.hour = +dateInfo.hour + 12;
|
|
1901
|
+
} else if (!dateInfo.isPm && +dateInfo.hour === 12) {
|
|
1902
|
+
dateInfo.hour = 0;
|
|
1903
|
+
}
|
|
1904
|
+
}
|
|
1905
|
+
let date;
|
|
1906
|
+
date = new Date(dateInfo.year, dateInfo.month, dateInfo.day, dateInfo.hour, dateInfo.minute, dateInfo.second, dateInfo.millisecond);
|
|
1907
|
+
return date;
|
|
1908
|
+
};
|
|
1909
|
+
const matchFind = (val, regexp2) => {
|
|
1910
|
+
const match = regexp2.exec(val);
|
|
1911
|
+
return match == null ? "" : match[0];
|
|
1912
|
+
};
|
|
1913
|
+
const digitsCheck = {
|
|
1914
|
+
twoOptional: /\d\d?/,
|
|
1915
|
+
two: /\d\d/,
|
|
1916
|
+
three: /\d{3}/,
|
|
1917
|
+
four: /\d{4}/
|
|
1918
|
+
};
|
|
1919
|
+
const word = /[^\s]+/;
|
|
1920
|
+
const expressionsFunction = {
|
|
1921
|
+
YY: [
|
|
1922
|
+
digitsCheck["two"],
|
|
1923
|
+
(dateInfo, val) => {
|
|
1924
|
+
dateInfo.year = +(("" + (/* @__PURE__ */ new Date()).getFullYear()).substring(0, 2) + val);
|
|
1925
|
+
return dateInfo;
|
|
1926
|
+
}
|
|
1927
|
+
],
|
|
1928
|
+
YYYY: [
|
|
1929
|
+
digitsCheck["four"],
|
|
1930
|
+
(dateInfo, val) => {
|
|
1931
|
+
dateInfo.year = +val;
|
|
1932
|
+
return dateInfo;
|
|
1933
|
+
}
|
|
1934
|
+
],
|
|
1935
|
+
M: [
|
|
1936
|
+
digitsCheck["twoOptional"],
|
|
1937
|
+
(dateInfo, val) => {
|
|
1938
|
+
dateInfo.month = +val - 1;
|
|
1939
|
+
return dateInfo;
|
|
1940
|
+
}
|
|
1941
|
+
],
|
|
1942
|
+
MM: [
|
|
1943
|
+
digitsCheck["two"],
|
|
1944
|
+
(dateInfo, val) => {
|
|
1945
|
+
dateInfo.month = +val - 1;
|
|
1946
|
+
return dateInfo;
|
|
1947
|
+
}
|
|
1948
|
+
],
|
|
1949
|
+
MMM: [
|
|
1950
|
+
word,
|
|
1951
|
+
(dateInfo, val) => {
|
|
1952
|
+
dateInfo.month = Lanauage.getMonthsIdx(val, "abbr");
|
|
1953
|
+
return dateInfo;
|
|
1954
|
+
}
|
|
1955
|
+
],
|
|
1956
|
+
MMMM: [
|
|
1957
|
+
word,
|
|
1958
|
+
(dateInfo, val) => {
|
|
1959
|
+
dateInfo.month = Lanauage.getMonthsIdx(val, "full");
|
|
1960
|
+
return dateInfo;
|
|
1961
|
+
}
|
|
1962
|
+
],
|
|
1963
|
+
D: [
|
|
1964
|
+
digitsCheck["twoOptional"],
|
|
1965
|
+
(dateInfo, val) => {
|
|
1966
|
+
dateInfo.day = +val;
|
|
1967
|
+
return dateInfo;
|
|
1968
|
+
}
|
|
1969
|
+
],
|
|
1970
|
+
DD: [
|
|
1971
|
+
digitsCheck["two"],
|
|
1972
|
+
(dateInfo, val) => {
|
|
1973
|
+
dateInfo.day = +val;
|
|
1974
|
+
return dateInfo;
|
|
1975
|
+
}
|
|
1976
|
+
],
|
|
1977
|
+
d: [
|
|
1978
|
+
digitsCheck["twoOptional"],
|
|
1979
|
+
(dateInfo, val) => {
|
|
1980
|
+
dateInfo.day = +val;
|
|
1981
|
+
return dateInfo;
|
|
1982
|
+
}
|
|
1983
|
+
],
|
|
1984
|
+
dd: [
|
|
1985
|
+
digitsCheck["two"],
|
|
1986
|
+
(dateInfo, val) => {
|
|
1987
|
+
dateInfo.day = +val;
|
|
1988
|
+
return dateInfo;
|
|
1989
|
+
}
|
|
1990
|
+
],
|
|
1991
|
+
ddd: [
|
|
1992
|
+
word,
|
|
1993
|
+
(dateInfo, val) => {
|
|
1994
|
+
return dateInfo;
|
|
1995
|
+
}
|
|
1996
|
+
],
|
|
1997
|
+
dddd: [
|
|
1998
|
+
word,
|
|
1999
|
+
(dateInfo, val) => {
|
|
2000
|
+
return dateInfo;
|
|
2001
|
+
}
|
|
2002
|
+
],
|
|
2003
|
+
H: [
|
|
2004
|
+
digitsCheck["twoOptional"],
|
|
2005
|
+
(dateInfo, val) => {
|
|
2006
|
+
dateInfo.hour = +val;
|
|
2007
|
+
dateInfo.isH = true;
|
|
2008
|
+
return dateInfo;
|
|
2009
|
+
}
|
|
2010
|
+
],
|
|
2011
|
+
HH: [
|
|
2012
|
+
digitsCheck["two"],
|
|
2013
|
+
(dateInfo, val) => {
|
|
2014
|
+
dateInfo.hour = +val;
|
|
2015
|
+
dateInfo.isH = true;
|
|
2016
|
+
return dateInfo;
|
|
2017
|
+
}
|
|
2018
|
+
],
|
|
2019
|
+
h: [
|
|
2020
|
+
digitsCheck["twoOptional"],
|
|
2021
|
+
(dateInfo, val) => {
|
|
2022
|
+
dateInfo.hour = +val;
|
|
2023
|
+
return dateInfo;
|
|
2024
|
+
}
|
|
2025
|
+
],
|
|
2026
|
+
hh: [
|
|
2027
|
+
digitsCheck["two"],
|
|
2028
|
+
(dateInfo, val) => {
|
|
2029
|
+
dateInfo.hour = +val;
|
|
2030
|
+
return dateInfo;
|
|
2031
|
+
}
|
|
2032
|
+
],
|
|
2033
|
+
a: [
|
|
2034
|
+
word,
|
|
2035
|
+
(dateInfo, val) => {
|
|
2036
|
+
if (Lanauage.getMessage("am") != val.toLowerCase()) {
|
|
2037
|
+
dateInfo.isPm = true;
|
|
2038
|
+
}
|
|
2039
|
+
return dateInfo;
|
|
2040
|
+
}
|
|
2041
|
+
],
|
|
2042
|
+
A: [
|
|
2043
|
+
word,
|
|
2044
|
+
(dateInfo, val) => {
|
|
2045
|
+
if (Lanauage.getMessage("am") != val.toLowerCase()) {
|
|
2046
|
+
dateInfo.isPm = true;
|
|
2047
|
+
}
|
|
2048
|
+
return dateInfo;
|
|
2049
|
+
}
|
|
2050
|
+
],
|
|
2051
|
+
m: [
|
|
2052
|
+
digitsCheck["twoOptional"],
|
|
2053
|
+
(dateInfo, val) => {
|
|
2054
|
+
dateInfo.minute = +val;
|
|
2055
|
+
return dateInfo;
|
|
2056
|
+
}
|
|
2057
|
+
],
|
|
2058
|
+
mm: [
|
|
2059
|
+
digitsCheck["two"],
|
|
2060
|
+
(dateInfo, val) => {
|
|
2061
|
+
dateInfo.minute = +val;
|
|
2062
|
+
return dateInfo;
|
|
2063
|
+
}
|
|
2064
|
+
],
|
|
2065
|
+
s: [
|
|
2066
|
+
digitsCheck["twoOptional"],
|
|
2067
|
+
(dateInfo, val) => {
|
|
2068
|
+
dateInfo.second = +val;
|
|
2069
|
+
return dateInfo;
|
|
2070
|
+
}
|
|
2071
|
+
],
|
|
2072
|
+
ss: [
|
|
2073
|
+
digitsCheck["two"],
|
|
2074
|
+
(dateInfo, val) => {
|
|
2075
|
+
dateInfo.second = +val;
|
|
2076
|
+
return dateInfo;
|
|
2077
|
+
}
|
|
2078
|
+
],
|
|
2079
|
+
SSS: [
|
|
2080
|
+
digitsCheck["three"],
|
|
2081
|
+
(dateInfo, val) => {
|
|
2082
|
+
dateInfo.millisecond = +val;
|
|
2083
|
+
return dateInfo;
|
|
2084
|
+
}
|
|
2085
|
+
]
|
|
1655
2086
|
};
|
|
2087
|
+
function closestElement(el, checkElement) {
|
|
2088
|
+
let currentEl = el;
|
|
2089
|
+
while (currentEl) {
|
|
2090
|
+
if (currentEl == checkElement) {
|
|
2091
|
+
return true;
|
|
2092
|
+
}
|
|
2093
|
+
currentEl = currentEl.parentElement;
|
|
2094
|
+
}
|
|
2095
|
+
return false;
|
|
2096
|
+
}
|
|
2097
|
+
class DaraDate {
|
|
2098
|
+
constructor(dt) {
|
|
2099
|
+
this.date = dt;
|
|
2100
|
+
}
|
|
2101
|
+
setYear(num) {
|
|
2102
|
+
this.date.setFullYear(num);
|
|
2103
|
+
return this;
|
|
2104
|
+
}
|
|
2105
|
+
addYear(num) {
|
|
2106
|
+
this.date.setFullYear(this.date.getFullYear() + num);
|
|
2107
|
+
return this;
|
|
2108
|
+
}
|
|
2109
|
+
addMonth(num) {
|
|
2110
|
+
this.date.setMonth(this.date.getMonth() + num);
|
|
2111
|
+
return this;
|
|
2112
|
+
}
|
|
2113
|
+
setMonth(num) {
|
|
2114
|
+
this.date.setMonth(num);
|
|
2115
|
+
return this;
|
|
2116
|
+
}
|
|
2117
|
+
setDate(num) {
|
|
2118
|
+
this.date.setDate(num);
|
|
2119
|
+
return this;
|
|
2120
|
+
}
|
|
2121
|
+
addDate(num) {
|
|
2122
|
+
this.date.setDate(this.date.getDate() + num);
|
|
2123
|
+
return this;
|
|
2124
|
+
}
|
|
2125
|
+
addWeek(num) {
|
|
2126
|
+
this.date.setDate(this.date.getDate() + num * 7);
|
|
2127
|
+
return this;
|
|
2128
|
+
}
|
|
2129
|
+
addHours(num) {
|
|
2130
|
+
this.date.setHours(this.date.getHours() + num);
|
|
2131
|
+
return this;
|
|
2132
|
+
}
|
|
2133
|
+
setHour(num) {
|
|
2134
|
+
this.date.setHours(num);
|
|
2135
|
+
return this;
|
|
2136
|
+
}
|
|
2137
|
+
addMinutes(num) {
|
|
2138
|
+
this.date.setMinutes(this.date.getMinutes() + num);
|
|
2139
|
+
return this;
|
|
2140
|
+
}
|
|
2141
|
+
setMinutes(num) {
|
|
2142
|
+
this.date.setMinutes(num);
|
|
2143
|
+
return this;
|
|
2144
|
+
}
|
|
2145
|
+
addSeconds(num) {
|
|
2146
|
+
this.date.setSeconds(this.date.getSeconds() + num);
|
|
2147
|
+
return this;
|
|
2148
|
+
}
|
|
2149
|
+
addMilliseconds(num) {
|
|
2150
|
+
this.date.setMilliseconds(this.date.getMilliseconds() + num);
|
|
2151
|
+
return this;
|
|
2152
|
+
}
|
|
2153
|
+
compare(date) {
|
|
2154
|
+
if (this.date.valueOf() < date.valueOf()) {
|
|
2155
|
+
return -1;
|
|
2156
|
+
} else if (this.date.valueOf() > date.valueOf()) {
|
|
2157
|
+
return 1;
|
|
2158
|
+
}
|
|
2159
|
+
return 0;
|
|
2160
|
+
}
|
|
2161
|
+
getYear() {
|
|
2162
|
+
return this.date.getFullYear();
|
|
2163
|
+
}
|
|
2164
|
+
getMonth() {
|
|
2165
|
+
return this.date.getMonth() + 1;
|
|
2166
|
+
}
|
|
2167
|
+
getDate() {
|
|
2168
|
+
return this.date.getDate();
|
|
2169
|
+
}
|
|
2170
|
+
getDay() {
|
|
2171
|
+
return this.date.getDay();
|
|
2172
|
+
}
|
|
2173
|
+
getTime() {
|
|
2174
|
+
return this.date.getTime();
|
|
2175
|
+
}
|
|
2176
|
+
format(format$1) {
|
|
2177
|
+
return format(this.date, format$1);
|
|
2178
|
+
}
|
|
2179
|
+
clone() {
|
|
2180
|
+
return new DaraDate(new Date(this.date.valueOf()));
|
|
2181
|
+
}
|
|
2182
|
+
}
|
|
2183
|
+
let DEFAULT_OPTIONS$1 = {
|
|
2184
|
+
inline: false,
|
|
2185
|
+
// layer or innerhtml
|
|
2186
|
+
weekStartDay: 0,
|
|
2187
|
+
initialDate: "",
|
|
2188
|
+
autoClose: true,
|
|
2189
|
+
isRTL: false,
|
|
2190
|
+
mode: DateViewMode.date,
|
|
2191
|
+
enableTodayBtn: false,
|
|
2192
|
+
showMonthAfterYear: false,
|
|
2193
|
+
isPositionFixed: false,
|
|
2194
|
+
format: "",
|
|
2195
|
+
zIndex: 1e3,
|
|
2196
|
+
minDate: "",
|
|
2197
|
+
maxDate: "",
|
|
2198
|
+
beforeDrawDate: (dt) => {
|
|
2199
|
+
return {
|
|
2200
|
+
check: false,
|
|
2201
|
+
style: "",
|
|
2202
|
+
tooltip: ""
|
|
2203
|
+
};
|
|
2204
|
+
}
|
|
2205
|
+
};
|
|
2206
|
+
function hiddenElement() {
|
|
2207
|
+
var _a;
|
|
2208
|
+
if (document.getElementById("hiddenDaraDatetimeElement") == null) {
|
|
2209
|
+
(_a = document.querySelector("body")) == null ? void 0 : _a.insertAdjacentHTML("beforeend", `<div id="hiddenDaraDatetimeElement" class="daracl-datetime-hidden"></div>`);
|
|
2210
|
+
}
|
|
2211
|
+
return document.getElementById("hiddenDaraDatetimeElement");
|
|
2212
|
+
}
|
|
2213
|
+
let daraDatetimeIdx = 0;
|
|
2214
|
+
const _DateTimePicker = class _DateTimePicker2 {
|
|
2215
|
+
constructor(selector, options, message2) {
|
|
2216
|
+
var _a;
|
|
2217
|
+
this.isInput = false;
|
|
2218
|
+
this.isVisible = false;
|
|
2219
|
+
this.minYear = -1;
|
|
2220
|
+
this.maxYear = -1;
|
|
2221
|
+
this.minMonth = -1;
|
|
2222
|
+
this.maxMonth = -1;
|
|
2223
|
+
this.dayOrder = [0, 1, 2, 3, 4, 5, 6];
|
|
2224
|
+
this._documentClickEvent = (e) => {
|
|
2225
|
+
if (this.isVisible && e.target != this.targetElement && !closestElement(e.target, this.datetimeElement)) {
|
|
2226
|
+
this.hide();
|
|
2227
|
+
}
|
|
2228
|
+
};
|
|
2229
|
+
this.options = Object.assign({}, DEFAULT_OPTIONS$1, options);
|
|
2230
|
+
daraDatetimeIdx += 1;
|
|
2231
|
+
let selectorElement;
|
|
2232
|
+
if (typeof selector === "string") {
|
|
2233
|
+
selectorElement = document.querySelector(selector);
|
|
2234
|
+
} else {
|
|
2235
|
+
selectorElement = selector;
|
|
2236
|
+
}
|
|
2237
|
+
if (!selectorElement) {
|
|
2238
|
+
throw new Error(`${selector} datetimepicker element not found`);
|
|
2239
|
+
}
|
|
2240
|
+
this._viewMode = Object.keys(DateViewMode).includes(this.options.mode) ? this.options.mode : DateViewMode.date;
|
|
2241
|
+
this.initMode = this._viewMode;
|
|
2242
|
+
Lanauage.set(message2);
|
|
2243
|
+
if (this.initMode == DateViewMode.year) {
|
|
2244
|
+
this.dateFormat = this.options.format || DEFAULT_FORMAT.year;
|
|
2245
|
+
} else if (this.initMode == DateViewMode.month) {
|
|
2246
|
+
this.dateFormat = this.options.format || DEFAULT_FORMAT.month;
|
|
2247
|
+
} else if (this.initMode == DateViewMode.time) {
|
|
2248
|
+
this.dateFormat = this.options.format || DEFAULT_FORMAT.time;
|
|
2249
|
+
} else if (this.initMode == DateViewMode.datetime) {
|
|
2250
|
+
this.dateFormat = this.options.format || DEFAULT_FORMAT.datetime;
|
|
2251
|
+
} else {
|
|
2252
|
+
this.dateFormat = this.options.format || DEFAULT_FORMAT.date;
|
|
2253
|
+
}
|
|
2254
|
+
let viewDate;
|
|
2255
|
+
if (this.options.initialDate) {
|
|
2256
|
+
if (typeof this.options.initialDate === "string") {
|
|
2257
|
+
viewDate = new DaraDate(parser(this.options.initialDate, this.dateFormat) || /* @__PURE__ */ new Date());
|
|
2258
|
+
} else {
|
|
2259
|
+
viewDate = new DaraDate(this.options.initialDate);
|
|
2260
|
+
}
|
|
2261
|
+
} else {
|
|
2262
|
+
viewDate = new DaraDate(/* @__PURE__ */ new Date());
|
|
2263
|
+
this.options.initialDate = viewDate.format(this.dateFormat);
|
|
2264
|
+
}
|
|
2265
|
+
this.setWeekDays();
|
|
2266
|
+
this.todayDate = viewDate.format(DEFAULT_FORMAT.date);
|
|
2267
|
+
this.currentDate = viewDate;
|
|
2268
|
+
this.targetElement = selectorElement;
|
|
2269
|
+
this.minDate = this._minDate();
|
|
2270
|
+
this.maxDate = this._maxDate();
|
|
2271
|
+
if (this.options.inline) {
|
|
2272
|
+
this.datetimeElement = selectorElement;
|
|
2273
|
+
this.datetimeElement.className = `daracl-datetime-wrapper ddtp-${daraDatetimeIdx} embed`;
|
|
2274
|
+
} else {
|
|
2275
|
+
this.isInput = true;
|
|
2276
|
+
this.targetElement.setAttribute("value", viewDate.format(this.dateFormat));
|
|
2277
|
+
const datetimeElement = document.createElement("div");
|
|
2278
|
+
datetimeElement.className = `daracl-datetime-wrapper ddtp-${daraDatetimeIdx} layer`;
|
|
2279
|
+
datetimeElement.setAttribute("style", `z-index:${this.options.zIndex};`);
|
|
2280
|
+
(_a = hiddenElement()) == null ? void 0 : _a.appendChild(datetimeElement);
|
|
2281
|
+
this.datetimeElement = datetimeElement;
|
|
2282
|
+
this.initTargetEvent();
|
|
2283
|
+
}
|
|
2284
|
+
this.createDatetimeTemplate();
|
|
2285
|
+
if (this.isTimeMode()) {
|
|
2286
|
+
this.hourInputEle = this.datetimeElement.querySelector(".ddtp-hour");
|
|
2287
|
+
this.minuteInputEle = this.datetimeElement.querySelector(".ddtp-minute");
|
|
2288
|
+
} else {
|
|
2289
|
+
this.hourInputEle = {};
|
|
2290
|
+
this.minuteInputEle = {};
|
|
2291
|
+
}
|
|
2292
|
+
this.changeViewMode(this._viewMode);
|
|
2293
|
+
this.initHeaderEvent();
|
|
2294
|
+
this.initDateEvent();
|
|
2295
|
+
this.initTimeEvent();
|
|
2296
|
+
}
|
|
2297
|
+
setWeekDays() {
|
|
2298
|
+
let weekStartDay = this.options.weekStartDay;
|
|
2299
|
+
if (weekStartDay == 0) return;
|
|
2300
|
+
if (weekStartDay < 0 || weekStartDay > 6) {
|
|
2301
|
+
weekStartDay = 0;
|
|
2302
|
+
}
|
|
2303
|
+
for (let i = 0; i < 7; i++) {
|
|
2304
|
+
let day = weekStartDay + i;
|
|
2305
|
+
this.dayOrder[i] = day < 7 ? day : day - 7;
|
|
2306
|
+
}
|
|
2307
|
+
}
|
|
2308
|
+
static create(selector, options, message2) {
|
|
2309
|
+
return new _DateTimePicker2(selector, options, message2);
|
|
2310
|
+
}
|
|
2311
|
+
/**
|
|
2312
|
+
* default date format setting
|
|
2313
|
+
* @example
|
|
2314
|
+
```
|
|
2315
|
+
setDefaultFormat({
|
|
2316
|
+
year: "YYYY",
|
|
2317
|
+
month: "YYYY-MM",
|
|
2318
|
+
date: "YYYY-MM-DD",
|
|
2319
|
+
time: "HH:mm",
|
|
2320
|
+
datetime: "YYYY-MM-DD HH:mm",
|
|
2321
|
+
});
|
|
2322
|
+
```
|
|
2323
|
+
* @public
|
|
2324
|
+
* @static
|
|
2325
|
+
* @param {*} dateFormat
|
|
2326
|
+
*/
|
|
2327
|
+
static setDefaultFormat(dateFormat) {
|
|
2328
|
+
Object.assign(DEFAULT_FORMAT, dateFormat);
|
|
2329
|
+
}
|
|
2330
|
+
_minDate() {
|
|
2331
|
+
let minDate = this.options.minDate;
|
|
2332
|
+
if (minDate != "") {
|
|
2333
|
+
if (typeof minDate === "string") {
|
|
2334
|
+
const dt = parser(minDate, this.dateFormat);
|
|
2335
|
+
if (!dt) {
|
|
2336
|
+
return -1;
|
|
2337
|
+
}
|
|
2338
|
+
minDate = dt;
|
|
2339
|
+
}
|
|
2340
|
+
this.minYear = minDate.getFullYear();
|
|
2341
|
+
this.minMonth = +(this.minYear + core.leftPad(minDate.getMonth(), 2));
|
|
2342
|
+
return new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate(), 0, 0).getTime();
|
|
2343
|
+
}
|
|
2344
|
+
return -1;
|
|
2345
|
+
}
|
|
2346
|
+
_maxDate() {
|
|
2347
|
+
let maxDate = this.options.maxDate;
|
|
2348
|
+
if (maxDate != "") {
|
|
2349
|
+
if (typeof maxDate === "string") {
|
|
2350
|
+
const dt = parser(maxDate, this.dateFormat);
|
|
2351
|
+
if (!dt) {
|
|
2352
|
+
return -1;
|
|
2353
|
+
}
|
|
2354
|
+
maxDate = dt;
|
|
2355
|
+
}
|
|
2356
|
+
this.maxYear = maxDate.getFullYear();
|
|
2357
|
+
this.maxMonth = +(this.maxYear + core.leftPad(maxDate.getMonth(), 2));
|
|
2358
|
+
return new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate(), 23, 59).getTime();
|
|
2359
|
+
}
|
|
2360
|
+
return -1;
|
|
2361
|
+
}
|
|
2362
|
+
set viewMode(mode) {
|
|
2363
|
+
if (this._viewMode === mode) {
|
|
2364
|
+
return;
|
|
2365
|
+
}
|
|
2366
|
+
this._viewMode = mode;
|
|
2367
|
+
this.changeViewMode(mode);
|
|
2368
|
+
}
|
|
2369
|
+
get viewMode() {
|
|
2370
|
+
return this._viewMode;
|
|
2371
|
+
}
|
|
2372
|
+
/**
|
|
2373
|
+
* 모드 change
|
|
2374
|
+
* @param mode
|
|
2375
|
+
*/
|
|
2376
|
+
changeViewMode(mode) {
|
|
2377
|
+
var _a;
|
|
2378
|
+
(_a = this.datetimeElement.querySelector(".ddtp-datetime")) == null ? void 0 : _a.setAttribute("view-mode", mode);
|
|
2379
|
+
if (mode === "year") {
|
|
2380
|
+
this.yearDraw();
|
|
2381
|
+
} else if (mode === "month") {
|
|
2382
|
+
this.monthDraw();
|
|
2383
|
+
} else {
|
|
2384
|
+
this.dayDraw();
|
|
2385
|
+
}
|
|
2386
|
+
}
|
|
2387
|
+
/**
|
|
2388
|
+
* init header event
|
|
2389
|
+
*
|
|
2390
|
+
* @public
|
|
2391
|
+
*/
|
|
2392
|
+
initHeaderEvent() {
|
|
2393
|
+
var _a, _b, _c, _d;
|
|
2394
|
+
const isRTL = this.options.isRTL;
|
|
2395
|
+
(_a = this.datetimeElement.querySelector(".ddtp-move-btn.prev")) == null ? void 0 : _a.addEventListener("click", (e) => {
|
|
2396
|
+
this.moveDate(isRTL ? "next" : "prev", e);
|
|
2397
|
+
});
|
|
2398
|
+
(_b = this.datetimeElement.querySelector(".ddtp-move-btn.next")) == null ? void 0 : _b.addEventListener("click", (e) => {
|
|
2399
|
+
this.moveDate(isRTL ? "prev" : "next", e);
|
|
2400
|
+
});
|
|
2401
|
+
(_c = this.datetimeElement.querySelector(".ddtp-header-year")) == null ? void 0 : _c.addEventListener("click", (e) => {
|
|
2402
|
+
this.viewMode = DateViewMode.year;
|
|
2403
|
+
});
|
|
2404
|
+
(_d = this.datetimeElement.querySelector(".ddtp-header-month")) == null ? void 0 : _d.addEventListener("click", (e) => {
|
|
2405
|
+
this.viewMode = DateViewMode.month;
|
|
2406
|
+
});
|
|
2407
|
+
}
|
|
2408
|
+
/**
|
|
2409
|
+
* 날짜 달력 이벤트처리.
|
|
2410
|
+
*/
|
|
2411
|
+
initDateEvent() {
|
|
2412
|
+
var _a, _b;
|
|
2413
|
+
(_a = this.datetimeElement.querySelector(".ddtp-day-body")) == null ? void 0 : _a.addEventListener("click", (e) => {
|
|
2414
|
+
var _a2;
|
|
2415
|
+
const targetEle = e.target;
|
|
2416
|
+
if (targetEle.classList.contains("ddtp-day") || targetEle.closest(".ddtp-day")) {
|
|
2417
|
+
const selectDate = targetEle.getAttribute("data-day") || "1";
|
|
2418
|
+
const mmDD = selectDate.split(",");
|
|
2419
|
+
this.currentDate.setMonth(+mmDD[0] - 1);
|
|
2420
|
+
this.currentDate.setDate(+mmDD[1]);
|
|
2421
|
+
if (this.isDayDisabled(this.currentDate)) {
|
|
2422
|
+
return;
|
|
2423
|
+
}
|
|
2424
|
+
(_a2 = this.datetimeElement.querySelector(".select")) == null ? void 0 : _a2.classList.remove("select");
|
|
2425
|
+
targetEle.classList.add("select");
|
|
2426
|
+
if (this.isTimeMode()) {
|
|
2427
|
+
this.currentDate.setHour(+this.hourInputEle.value);
|
|
2428
|
+
this.currentDate.setMinutes(+this.minuteInputEle.value);
|
|
2429
|
+
}
|
|
2430
|
+
this.dateChangeEvent(e);
|
|
2431
|
+
}
|
|
2432
|
+
});
|
|
2433
|
+
(_b = this.datetimeElement.querySelector(".ddtp-today")) == null ? void 0 : _b.addEventListener("click", (e) => {
|
|
2434
|
+
const initDate = new DaraDate(parser(this.todayDate, DEFAULT_FORMAT.date) || /* @__PURE__ */ new Date());
|
|
2435
|
+
this.currentDate.setYear(initDate.getYear());
|
|
2436
|
+
this.currentDate.setMonth(initDate.getMonth() - 1);
|
|
2437
|
+
this.currentDate.setDate(initDate.getDate());
|
|
2438
|
+
this.changeViewMode(this.initMode);
|
|
2439
|
+
});
|
|
2440
|
+
}
|
|
2441
|
+
isTimeMode() {
|
|
2442
|
+
return this._viewMode === DateViewMode.time || this._viewMode === DateViewMode.datetime;
|
|
2443
|
+
}
|
|
2444
|
+
getTimeNumberValue(val) {
|
|
2445
|
+
if (!core.isNumeric(val)) {
|
|
2446
|
+
return 0;
|
|
2447
|
+
}
|
|
2448
|
+
return parseInt(val, 10);
|
|
2449
|
+
}
|
|
2450
|
+
/**
|
|
2451
|
+
* 시간 분 설정 이벤트 처리.
|
|
2452
|
+
*
|
|
2453
|
+
* @public
|
|
2454
|
+
*/
|
|
2455
|
+
initTimeEvent() {
|
|
2456
|
+
var _a;
|
|
2457
|
+
if (!this.isTimeMode()) return;
|
|
2458
|
+
let hh = this.currentDate.format("HH");
|
|
2459
|
+
const datetimeElement = this.datetimeElement;
|
|
2460
|
+
const hourInputEle = datetimeElement.querySelector(".ddtp-hour");
|
|
2461
|
+
const hourRangeEle = datetimeElement.querySelector(".ddtp-hour-range");
|
|
2462
|
+
hourInputEle.value = hh;
|
|
2463
|
+
hourRangeEle.value = hh;
|
|
2464
|
+
hourInputEle.addEventListener("input", (e) => {
|
|
2465
|
+
const targetElement = e.target;
|
|
2466
|
+
let val = this.getTimeNumberValue(targetElement.value);
|
|
2467
|
+
let addVal = core.leftPadClamp(val, 2, "0");
|
|
2468
|
+
if (parseInt(addVal, 10) > 23) {
|
|
2469
|
+
addVal = "23";
|
|
2470
|
+
}
|
|
2471
|
+
hourInputEle.value = addVal;
|
|
2472
|
+
hourRangeEle.value = addVal;
|
|
2473
|
+
});
|
|
2474
|
+
hourRangeEle.addEventListener("input", (e) => {
|
|
2475
|
+
const targetElement = e.target;
|
|
2476
|
+
hourInputEle.value = core.leftPadClamp(targetElement.value, 2, "0");
|
|
2477
|
+
});
|
|
2478
|
+
let mm = this.currentDate.format("mm");
|
|
2479
|
+
const minuteInputEle = datetimeElement.querySelector(".ddtp-minute");
|
|
2480
|
+
const minuteRangeEle = datetimeElement.querySelector(".ddtp-minute-range");
|
|
2481
|
+
minuteInputEle.value = mm;
|
|
2482
|
+
minuteRangeEle.value = mm;
|
|
2483
|
+
minuteInputEle.addEventListener("input", (e) => {
|
|
2484
|
+
const targetElement = e.target;
|
|
2485
|
+
let val = this.getTimeNumberValue(targetElement.value);
|
|
2486
|
+
let addVal = core.leftPadClamp(val, 2, "0");
|
|
2487
|
+
if (parseInt(addVal, 10) > 59) {
|
|
2488
|
+
addVal = "59";
|
|
2489
|
+
}
|
|
2490
|
+
minuteInputEle.value = addVal;
|
|
2491
|
+
minuteRangeEle.value = addVal;
|
|
2492
|
+
});
|
|
2493
|
+
minuteRangeEle.addEventListener("input", (e) => {
|
|
2494
|
+
const targetElement = e.target;
|
|
2495
|
+
minuteInputEle.value = core.leftPadClamp(targetElement.value, 2, "0");
|
|
2496
|
+
});
|
|
2497
|
+
(_a = datetimeElement.querySelector(".time-select")) == null ? void 0 : _a.addEventListener("click", (e) => {
|
|
2498
|
+
this.currentDate.setHour(+hourInputEle.value);
|
|
2499
|
+
this.currentDate.setMinutes(+minuteInputEle.value);
|
|
2500
|
+
this.dateChangeEvent(e);
|
|
2501
|
+
});
|
|
2502
|
+
}
|
|
2503
|
+
/**
|
|
2504
|
+
* 날짜 이동
|
|
2505
|
+
* @param moveMode // 앞뒤 이동 prev, next
|
|
2506
|
+
* @returns
|
|
2507
|
+
*/
|
|
2508
|
+
moveDate(moveMode, e) {
|
|
2509
|
+
if (this._viewMode === DateViewMode.date || this._viewMode === DateViewMode.datetime) {
|
|
2510
|
+
this.currentDate.setDate(1);
|
|
2511
|
+
this.currentDate.addMonth("prev" === moveMode ? -1 : 1);
|
|
2512
|
+
this.dayDraw();
|
|
2513
|
+
return;
|
|
2514
|
+
}
|
|
2515
|
+
if (this._viewMode === DateViewMode.month) {
|
|
2516
|
+
this.currentDate.setDate(1);
|
|
2517
|
+
this.currentDate.addYear("prev" === moveMode ? -1 : 1);
|
|
2518
|
+
this.monthDraw();
|
|
2519
|
+
return;
|
|
2520
|
+
}
|
|
2521
|
+
if (this._viewMode === DateViewMode.year) {
|
|
2522
|
+
this.currentDate.setDate(1);
|
|
2523
|
+
this.currentDate.addYear("prev" === moveMode ? -16 : 16);
|
|
2524
|
+
this.yearDraw();
|
|
2525
|
+
}
|
|
2526
|
+
}
|
|
2527
|
+
/**
|
|
2528
|
+
* get date value
|
|
2529
|
+
*
|
|
2530
|
+
* @returns
|
|
2531
|
+
*/
|
|
2532
|
+
getDateValue() {
|
|
2533
|
+
return this.currentDate.format(this.dateFormat);
|
|
2534
|
+
}
|
|
2535
|
+
/**
|
|
2536
|
+
* 옵션 셋팅
|
|
2537
|
+
* @static
|
|
2538
|
+
* @param {DateTimePickerOptions} options
|
|
2539
|
+
*/
|
|
2540
|
+
static setOptions(options) {
|
|
2541
|
+
DEFAULT_OPTIONS$1 = Object.assign({}, DEFAULT_OPTIONS$1, options);
|
|
2542
|
+
}
|
|
2543
|
+
/**
|
|
2544
|
+
* 달력 보이기 처리.
|
|
2545
|
+
*
|
|
2546
|
+
* @returns
|
|
2547
|
+
*/
|
|
2548
|
+
show() {
|
|
2549
|
+
if (this.isVisible) {
|
|
2550
|
+
return;
|
|
2551
|
+
}
|
|
2552
|
+
this.isVisible = true;
|
|
2553
|
+
const docSize = getDocSize();
|
|
2554
|
+
this.datetimeElement.classList.remove("hide");
|
|
2555
|
+
this.datetimeElement.classList.add("show");
|
|
2556
|
+
const rect = this.targetElement.getBoundingClientRect();
|
|
2557
|
+
const scrollTop = window.scrollY || document.documentElement.scrollTop;
|
|
2558
|
+
const scrollLeft = window.scrollX || document.documentElement.scrollLeft;
|
|
2559
|
+
const elementHeight = this.datetimeElement.offsetHeight;
|
|
2560
|
+
const targetElementHeight = this.targetElement.offsetHeight + 2;
|
|
2561
|
+
let left = rect.left + scrollLeft;
|
|
2562
|
+
let top = 0;
|
|
2563
|
+
if (this.options.isPositionFixed) {
|
|
2564
|
+
top = rect.top + targetElementHeight;
|
|
2565
|
+
left = rect.left;
|
|
2566
|
+
} else {
|
|
2567
|
+
if (rect.top + targetElementHeight + elementHeight > docSize.clientHeight && rect.top >= elementHeight) {
|
|
2568
|
+
top = scrollTop + rect.top - elementHeight - 2;
|
|
2569
|
+
} else {
|
|
2570
|
+
top = scrollTop + rect.top + targetElementHeight;
|
|
2571
|
+
}
|
|
2572
|
+
}
|
|
2573
|
+
this.datetimeElement.setAttribute("style", `${this.options.isPositionFixed ? "position:fixed;" : ""}top:${top}px;left:${left}px;z-index:${this.options.zIndex}`);
|
|
2574
|
+
document.addEventListener("click", this._documentClickEvent);
|
|
2575
|
+
}
|
|
2576
|
+
/**
|
|
2577
|
+
* 달력 숨기기
|
|
2578
|
+
*/
|
|
2579
|
+
hide() {
|
|
2580
|
+
this.isVisible = false;
|
|
2581
|
+
if (this.options.onClose) {
|
|
2582
|
+
if (this.options.onClose() === false) {
|
|
2583
|
+
return;
|
|
2584
|
+
}
|
|
2585
|
+
}
|
|
2586
|
+
this.datetimeElement.classList.remove("show");
|
|
2587
|
+
this.datetimeElement.classList.add("hide");
|
|
2588
|
+
document.removeEventListener("click", this._documentClickEvent);
|
|
2589
|
+
}
|
|
2590
|
+
/**
|
|
2591
|
+
* 타켓 이벤트 처리.
|
|
2592
|
+
*/
|
|
2593
|
+
initTargetEvent() {
|
|
2594
|
+
if (this.targetElement) {
|
|
2595
|
+
this.targetElement.addEventListener("click", (e) => {
|
|
2596
|
+
this.show();
|
|
2597
|
+
});
|
|
2598
|
+
}
|
|
2599
|
+
}
|
|
2600
|
+
/**
|
|
2601
|
+
* 날짜 변경후 이벤트
|
|
2602
|
+
*/
|
|
2603
|
+
afterChangeDatepicker() {
|
|
2604
|
+
const formatValue = this.currentDate.format(this.dateFormat);
|
|
2605
|
+
if (this.options.afterChangeDatepicker && core.isFunction(this.options.afterChangeDatepicker)) {
|
|
2606
|
+
this.options.afterChangeDatepicker(formatValue, this.viewMode);
|
|
2607
|
+
}
|
|
2608
|
+
}
|
|
2609
|
+
/**
|
|
2610
|
+
* 날짜 변경 전 이벤트.
|
|
2611
|
+
* @returns void
|
|
2612
|
+
*/
|
|
2613
|
+
beforeChangeDatepicker() {
|
|
2614
|
+
const formatValue = this.currentDate.format(this.dateFormat);
|
|
2615
|
+
if (this.options.beforeChangeDatepicker && core.isFunction(this.options.beforeChangeDatepicker)) {
|
|
2616
|
+
const reval = this.options.beforeChangeDatepicker(formatValue, (result) => {
|
|
2617
|
+
if (result === false) {
|
|
2618
|
+
return;
|
|
2619
|
+
}
|
|
2620
|
+
this.refresh(false);
|
|
2621
|
+
});
|
|
2622
|
+
if (reval === false) {
|
|
2623
|
+
return;
|
|
2624
|
+
}
|
|
2625
|
+
this.refresh(false);
|
|
2626
|
+
return;
|
|
2627
|
+
}
|
|
2628
|
+
this.refresh(false);
|
|
2629
|
+
}
|
|
2630
|
+
dateChangeEvent(e) {
|
|
2631
|
+
const formatValue = this.currentDate.format(this.dateFormat);
|
|
2632
|
+
if (this.options.onSelect) {
|
|
2633
|
+
if (this.options.onSelect(formatValue, this.viewMode, e) === false) {
|
|
2634
|
+
return;
|
|
2635
|
+
}
|
|
2636
|
+
}
|
|
2637
|
+
if (this.isInput) {
|
|
2638
|
+
this.targetElement.setAttribute("value", formatValue);
|
|
2639
|
+
}
|
|
2640
|
+
if (!this.options.inline && this.options.autoClose) {
|
|
2641
|
+
this.hide();
|
|
2642
|
+
}
|
|
2643
|
+
}
|
|
2644
|
+
/**
|
|
2645
|
+
* datepicker template 그리기
|
|
2646
|
+
*/
|
|
2647
|
+
createDatetimeTemplate() {
|
|
2648
|
+
const showMonthAfterYear = this.options.showMonthAfterYear;
|
|
2649
|
+
let datetimeTemplate = `<div class="ddtp-datetime ${this.options.isRTL ? "rtl" : ""}" view-mode="${this._viewMode}">
|
|
2650
|
+
<div class="ddtp-header">
|
|
2651
|
+
<span class="${showMonthAfterYear ? "ddtp-header-year" : "ddtp-header-month"}"></span>
|
|
2652
|
+
<span class="${showMonthAfterYear ? "ddtp-header-month" : "ddtp-header-year"}"></span>
|
|
2653
|
+
|
|
2654
|
+
<span class="ddtp-date-move">
|
|
2655
|
+
<a href="javascript:;" class="ddtp-move-btn prev">
|
|
2656
|
+
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"/></svg>
|
|
2657
|
+
</a>
|
|
2658
|
+
<a href="javascript:;" class="ddtp-move-btn next">
|
|
2659
|
+
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"/></svg>
|
|
2660
|
+
</a>
|
|
2661
|
+
</span>
|
|
2662
|
+
</div>
|
|
2663
|
+
<div class="ddtp-body">
|
|
2664
|
+
<table class="ddtp-days">
|
|
2665
|
+
<thead class="ddtp-day-header">
|
|
2666
|
+
<tr>
|
|
2667
|
+
<td class="ddtp-day-label ${DAY_STYLE_CLASS[this.dayOrder[0]]}">${Lanauage.getWeeksMessage(this.dayOrder[0])}</td>
|
|
2668
|
+
<td class="ddtp-day-label ${DAY_STYLE_CLASS[this.dayOrder[1]]}">${Lanauage.getWeeksMessage(this.dayOrder[1])}</td>
|
|
2669
|
+
<td class="ddtp-day-label ${DAY_STYLE_CLASS[this.dayOrder[2]]}">${Lanauage.getWeeksMessage(this.dayOrder[2])}</td>
|
|
2670
|
+
<td class="ddtp-day-label ${DAY_STYLE_CLASS[this.dayOrder[3]]}">${Lanauage.getWeeksMessage(this.dayOrder[3])}</td>
|
|
2671
|
+
<td class="ddtp-day-label ${DAY_STYLE_CLASS[this.dayOrder[4]]}">${Lanauage.getWeeksMessage(this.dayOrder[4])}</td>
|
|
2672
|
+
<td class="ddtp-day-label ${DAY_STYLE_CLASS[this.dayOrder[5]]}">${Lanauage.getWeeksMessage(this.dayOrder[5])}</td>
|
|
2673
|
+
<td class="ddtp-day-label ${DAY_STYLE_CLASS[this.dayOrder[6]]}">${Lanauage.getWeeksMessage(this.dayOrder[6])}</td>
|
|
2674
|
+
</tr>
|
|
2675
|
+
</thead>
|
|
2676
|
+
<tbody class="ddtp-day-body">
|
|
2677
|
+
</tbody>
|
|
2678
|
+
|
|
2679
|
+
<tfoot class="ddtp-day-footer">
|
|
2680
|
+
<td colspan="7">
|
|
2681
|
+
<div style="width:99%;text-align:center;margin-top: 5px;${this.options.enableTodayBtn ? "" : "display:none;"}"><button type="button" class="ddtp-today">${Lanauage.getMessage("today")}</button></div>
|
|
2682
|
+
<div class="footer-tooltip"></div>
|
|
2683
|
+
</td>
|
|
2684
|
+
</tfoot>
|
|
2685
|
+
</table>
|
|
2686
|
+
|
|
2687
|
+
<div class="ddtp-times">
|
|
2688
|
+
<div class="time-container">
|
|
2689
|
+
<div class="ddtp-time">
|
|
2690
|
+
<span>H: </span><input type="number" class="ddtp-hour" min="0" max="23" maxlength="2">
|
|
2691
|
+
<input type="range" min="0" max="23" class="ddtp-hour-range">
|
|
2692
|
+
</div>
|
|
2693
|
+
<div class="ddtp-time">
|
|
2694
|
+
<span>M: </span><input type="number" class="ddtp-minute" min="0" max="59" size="2" maxlength="2">
|
|
2695
|
+
<input type="range" min="0" max="59" class="ddtp-minute-range">
|
|
2696
|
+
</div>
|
|
2697
|
+
</div>
|
|
2698
|
+
<div class="ddtp-btn">
|
|
2699
|
+
<button type="button" class="time-select">${Lanauage.getMessage("ok")}</button>
|
|
2700
|
+
</div>
|
|
2701
|
+
</div>
|
|
1656
2702
|
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
2703
|
+
<div class="ddtp-months">
|
|
2704
|
+
</div>
|
|
2705
|
+
|
|
2706
|
+
<div class="ddtp-years">
|
|
2707
|
+
</div>
|
|
2708
|
+
</div>
|
|
2709
|
+
</div>`;
|
|
2710
|
+
this.datetimeElement.innerHTML = datetimeTemplate;
|
|
2711
|
+
}
|
|
2712
|
+
refresh(beforeChangeDatepickerCheck) {
|
|
2713
|
+
if (this._viewMode === DateViewMode.date || this._viewMode === DateViewMode.datetime) {
|
|
2714
|
+
this.dayDraw(beforeChangeDatepickerCheck);
|
|
2715
|
+
return;
|
|
2716
|
+
}
|
|
2717
|
+
if (this._viewMode === DateViewMode.month) {
|
|
2718
|
+
this.monthDraw(beforeChangeDatepickerCheck);
|
|
2719
|
+
return;
|
|
2720
|
+
}
|
|
2721
|
+
if (this._viewMode === DateViewMode.year) {
|
|
2722
|
+
this.yearDraw(beforeChangeDatepickerCheck);
|
|
2723
|
+
}
|
|
2724
|
+
}
|
|
2725
|
+
/**
|
|
2726
|
+
* 년 달력 그리기
|
|
2727
|
+
*/
|
|
2728
|
+
yearDraw(beforeChangeDatepickerCheck) {
|
|
2729
|
+
var _a;
|
|
2730
|
+
const currentYear = this.currentDate.format("YYYY");
|
|
2731
|
+
if (beforeChangeDatepickerCheck !== false && this.initMode == DateViewMode.year) {
|
|
2732
|
+
this.beforeChangeDatepicker();
|
|
2733
|
+
return;
|
|
2734
|
+
}
|
|
2735
|
+
const startYear = +currentYear - 8;
|
|
2736
|
+
this.datetimeElement.querySelector(".ddtp-header-year").textContent = `${startYear} ~ ${startYear + 15}`;
|
|
2737
|
+
const beforeDrawDateFlag = core.isFunction(this.options.beforeDrawDate);
|
|
2738
|
+
const beforeDrawDateFn = beforeDrawDateFlag ? this.options.beforeDrawDate : false;
|
|
2739
|
+
const calHTML = [];
|
|
2740
|
+
for (let i = 0; i < 16; i++) {
|
|
2741
|
+
const year = startYear + i;
|
|
2742
|
+
const disabled = this.isYearDisabled(year);
|
|
2743
|
+
let addStylceClass = disabled ? " disabled" : "";
|
|
2744
|
+
let tooltip = "";
|
|
2745
|
+
if (beforeDrawDateFlag && beforeDrawDateFn) {
|
|
2746
|
+
const reval = beforeDrawDateFn({ mode: this._viewMode, date: year });
|
|
2747
|
+
addStylceClass += reval.style ? " " + reval.style : "";
|
|
2748
|
+
tooltip = reval.tooltip;
|
|
2749
|
+
tooltip = tooltip ? `title="${tooltip}"` : "";
|
|
2750
|
+
}
|
|
2751
|
+
calHTML.push(`<div class="ddtp-year ${addStylceClass}" data-year="${year}" ${tooltip}>${year}</div>`);
|
|
2752
|
+
}
|
|
2753
|
+
this.datetimeElement.querySelector(".ddtp-years").innerHTML = calHTML.join("");
|
|
2754
|
+
if (this.initMode == DateViewMode.year) {
|
|
2755
|
+
this.afterChangeDatepicker();
|
|
2756
|
+
}
|
|
2757
|
+
(_a = this.datetimeElement.querySelectorAll(".ddtp-year")) == null ? void 0 : _a.forEach((yearEle) => {
|
|
2758
|
+
yearEle.addEventListener("click", (e) => {
|
|
2759
|
+
const targetEle = e.target;
|
|
2760
|
+
if (targetEle) {
|
|
2761
|
+
const year = targetEle.getAttribute("data-year");
|
|
2762
|
+
if (year) {
|
|
2763
|
+
const numYear = +year;
|
|
2764
|
+
if (this.isYearDisabled(numYear)) {
|
|
2765
|
+
return;
|
|
2766
|
+
}
|
|
2767
|
+
if (this.initMode == DateViewMode.year) {
|
|
2768
|
+
if (this.isYearDisabled(numYear)) {
|
|
2769
|
+
return;
|
|
2770
|
+
}
|
|
2771
|
+
this.currentDate.setYear(numYear);
|
|
2772
|
+
this.dateChangeEvent(e);
|
|
2773
|
+
return;
|
|
2774
|
+
}
|
|
2775
|
+
this.currentDate.setYear(numYear);
|
|
2776
|
+
this.viewMode = this.initMode;
|
|
2777
|
+
}
|
|
2778
|
+
}
|
|
2779
|
+
});
|
|
2780
|
+
});
|
|
2781
|
+
}
|
|
2782
|
+
/**
|
|
2783
|
+
* 월 달력 그리기
|
|
2784
|
+
*/
|
|
2785
|
+
monthDraw(beforeChangeDatepickerCheck) {
|
|
2786
|
+
var _a;
|
|
2787
|
+
if (beforeChangeDatepickerCheck !== false && this.initMode == DateViewMode.month) {
|
|
2788
|
+
this.beforeChangeDatepicker();
|
|
2789
|
+
return;
|
|
2790
|
+
}
|
|
2791
|
+
const year = this.currentDate.format("YYYY");
|
|
2792
|
+
this.datetimeElement.querySelector(".ddtp-header-year").textContent = `${year}`;
|
|
2793
|
+
const monthElements = this.datetimeElement.querySelectorAll(".ddtp-months > .ddtp-month");
|
|
2794
|
+
if (monthElements.length > 0) {
|
|
2795
|
+
if (this.isYearDisabled(+year)) {
|
|
2796
|
+
monthElements.forEach((monthEle) => {
|
|
2797
|
+
if (!monthEle.classList.contains("disabled")) {
|
|
2798
|
+
monthEle.classList.add("disabled");
|
|
2799
|
+
}
|
|
2800
|
+
});
|
|
2801
|
+
return;
|
|
2802
|
+
}
|
|
2803
|
+
monthElements.forEach((monthEle, idx) => {
|
|
2804
|
+
if (this.isMonthDisabled(+year, idx)) {
|
|
2805
|
+
if (!monthEle.classList.contains("disabled")) {
|
|
2806
|
+
monthEle.classList.add("disabled");
|
|
2807
|
+
}
|
|
2808
|
+
} else {
|
|
2809
|
+
monthEle.classList.remove("disabled");
|
|
2810
|
+
}
|
|
2811
|
+
});
|
|
2812
|
+
if (this.initMode == DateViewMode.month) {
|
|
2813
|
+
this.afterChangeDatepicker();
|
|
2814
|
+
}
|
|
2815
|
+
return;
|
|
2816
|
+
}
|
|
2817
|
+
this.datetimeElement.querySelector(".ddtp-header-month").textContent = this.currentDate.format("MMMM");
|
|
2818
|
+
const beforeDrawDateFlag = core.isFunction(this.options.beforeDrawDate);
|
|
2819
|
+
const beforeDrawDateFn = beforeDrawDateFlag ? this.options.beforeDrawDate : false;
|
|
2820
|
+
const calHTML = [];
|
|
2821
|
+
for (let i = 0; i < 12; i++) {
|
|
2822
|
+
const disabled = this.isMonthDisabled(+year, i);
|
|
2823
|
+
let addStylceClass = disabled ? " disabled" : "";
|
|
2824
|
+
let tooltip = "";
|
|
2825
|
+
if (beforeDrawDateFlag && beforeDrawDateFn) {
|
|
2826
|
+
const reval = beforeDrawDateFn({ mode: this._viewMode, date: year + "/" + (i + 1) });
|
|
2827
|
+
addStylceClass += reval.style ? " " + reval.style : "";
|
|
2828
|
+
tooltip = reval.tooltip;
|
|
2829
|
+
tooltip = tooltip ? `title="${tooltip}"` : "";
|
|
2830
|
+
}
|
|
2831
|
+
calHTML.push(`<div class="ddtp-month ${addStylceClass}" data-month="${i}" ${tooltip}>${Lanauage.getMonthsMessage(i, "abbr")}</div>`);
|
|
2832
|
+
}
|
|
2833
|
+
this.datetimeElement.querySelector(".ddtp-months").innerHTML = calHTML.join("");
|
|
2834
|
+
if (this.initMode == DateViewMode.month) {
|
|
2835
|
+
this.afterChangeDatepicker();
|
|
2836
|
+
}
|
|
2837
|
+
(_a = this.datetimeElement.querySelectorAll(".ddtp-month")) == null ? void 0 : _a.forEach((monthEle) => {
|
|
2838
|
+
monthEle.addEventListener("click", (e) => {
|
|
2839
|
+
const targetEle = e.target;
|
|
2840
|
+
if (targetEle) {
|
|
2841
|
+
const month = targetEle.getAttribute("data-month");
|
|
2842
|
+
if (month) {
|
|
2843
|
+
if (this.isMonthDisabled(this.currentDate.getYear(), +month)) {
|
|
2844
|
+
return false;
|
|
2845
|
+
}
|
|
2846
|
+
if (this.initMode == DateViewMode.month) {
|
|
2847
|
+
this.currentDate.setMonth(+month);
|
|
2848
|
+
this.dateChangeEvent(e);
|
|
2849
|
+
return;
|
|
2850
|
+
}
|
|
2851
|
+
this.currentDate.setMonth(+month);
|
|
2852
|
+
this.viewMode = this.initMode;
|
|
2853
|
+
this.dayDraw();
|
|
2854
|
+
}
|
|
2855
|
+
}
|
|
2856
|
+
});
|
|
2857
|
+
});
|
|
2858
|
+
}
|
|
2859
|
+
/**
|
|
2860
|
+
* 날짜 그리기
|
|
2861
|
+
*/
|
|
2862
|
+
dayDraw(beforeChangeDatepickerCheck) {
|
|
2863
|
+
if (beforeChangeDatepickerCheck !== false && (this.initMode == DateViewMode.date || this.initMode == DateViewMode.datetime)) {
|
|
2864
|
+
this.beforeChangeDatepicker();
|
|
2865
|
+
return;
|
|
2866
|
+
}
|
|
2867
|
+
let monthFirstDate = this.currentDate.clone();
|
|
2868
|
+
const currentMonth = monthFirstDate.getMonth();
|
|
2869
|
+
monthFirstDate.setDate(1);
|
|
2870
|
+
this.datetimeElement.querySelector(".ddtp-header-year").textContent = monthFirstDate.format("YYYY");
|
|
2871
|
+
this.datetimeElement.querySelector(".ddtp-header-month").textContent = monthFirstDate.format("MMMM");
|
|
2872
|
+
let day = monthFirstDate.getDay();
|
|
2873
|
+
day = day - this.dayOrder[0];
|
|
2874
|
+
if (day >= 0) {
|
|
2875
|
+
monthFirstDate.addDate(-day);
|
|
2876
|
+
} else {
|
|
2877
|
+
monthFirstDate.addDate(-(7 + day));
|
|
2878
|
+
}
|
|
2879
|
+
const beforeDrawDateFlag = core.isFunction(this.options.beforeDrawDate);
|
|
2880
|
+
const beforeDrawDateFn = beforeDrawDateFlag ? this.options.beforeDrawDate : false;
|
|
2881
|
+
const calHTML = [];
|
|
2882
|
+
for (let i = 0; i < 42; i++) {
|
|
2883
|
+
let dateItem;
|
|
2884
|
+
if (i == 0) {
|
|
2885
|
+
dateItem = monthFirstDate;
|
|
2886
|
+
} else {
|
|
2887
|
+
dateItem = monthFirstDate.clone().addDate(i);
|
|
2888
|
+
}
|
|
2889
|
+
const dateItemFormat = dateItem.format(DEFAULT_FORMAT.date);
|
|
2890
|
+
if (i % 7 == 0) {
|
|
2891
|
+
calHTML.push((i == 0 ? "" : "</tr>") + "<tr>");
|
|
2892
|
+
}
|
|
2893
|
+
let disabled = this.isDayDisabled(dateItem);
|
|
2894
|
+
let addStylceClass = DAY_STYLE_CLASS[this.dayOrder[i % 7]];
|
|
2895
|
+
const dateItemMonth = dateItem.getMonth();
|
|
2896
|
+
if (dateItemMonth != currentMonth) {
|
|
2897
|
+
if (dateItemMonth < currentMonth) {
|
|
2898
|
+
addStylceClass += dateItemMonth == 1 ? " new" : " old";
|
|
2899
|
+
} else {
|
|
2900
|
+
addStylceClass += currentMonth == 1 && dateItemMonth == 12 ? " old" : " new";
|
|
2901
|
+
}
|
|
2902
|
+
}
|
|
2903
|
+
addStylceClass += this.todayDate == dateItemFormat ? " ddtp-today" : "";
|
|
2904
|
+
addStylceClass += disabled ? " disabled" : "";
|
|
2905
|
+
let tooltip = "";
|
|
2906
|
+
if (beforeDrawDateFlag && beforeDrawDateFn) {
|
|
2907
|
+
const reval = beforeDrawDateFn({ mode: this._viewMode, item: dateItem, date: dateItem.format(this.dateFormat) });
|
|
2908
|
+
addStylceClass += reval.style ? " " + reval.style : "";
|
|
2909
|
+
addStylceClass += reval.check ? " ddtp-event" : "";
|
|
2910
|
+
tooltip = reval.tooltip;
|
|
2911
|
+
tooltip = tooltip ? `title="${tooltip}"` : "";
|
|
2912
|
+
}
|
|
2913
|
+
calHTML.push(`<td class="ddtp-day ${addStylceClass}" data-day="${dateItem.format("M,D")}" ${tooltip}>`);
|
|
2914
|
+
calHTML.push(`<span>${dateItem.format("d")}</span>`);
|
|
2915
|
+
calHTML.push("</td>");
|
|
2916
|
+
}
|
|
2917
|
+
calHTML.push("</tr>");
|
|
2918
|
+
this.datetimeElement.querySelector(".ddtp-day-body").innerHTML = calHTML.join("");
|
|
2919
|
+
if (this.initMode == DateViewMode.date || this.initMode == DateViewMode.datetime) {
|
|
2920
|
+
this.afterChangeDatepicker();
|
|
2921
|
+
}
|
|
2922
|
+
}
|
|
2923
|
+
isDayDisabled(dateItem) {
|
|
2924
|
+
if (this.minDate != -1 && this.minDate > dateItem.getTime() || this.maxDate != -1 && this.maxDate < dateItem.getTime()) {
|
|
2925
|
+
return true;
|
|
2926
|
+
}
|
|
2927
|
+
return false;
|
|
2928
|
+
}
|
|
2929
|
+
isYearDisabled(year) {
|
|
2930
|
+
if (this.minYear != -1 && this.minYear > year || this.maxYear != -1 && this.maxYear < year) {
|
|
2931
|
+
return true;
|
|
2932
|
+
}
|
|
2933
|
+
return false;
|
|
2934
|
+
}
|
|
2935
|
+
isMonthDisabled(year, month) {
|
|
2936
|
+
if (this.isYearDisabled(year)) {
|
|
2937
|
+
return true;
|
|
2938
|
+
}
|
|
2939
|
+
let yearMonth = +(year + core.leftPad(month, 2));
|
|
2940
|
+
if (this.minMonth != -1 && this.minMonth > yearMonth || this.maxMonth != -1 && this.maxMonth < yearMonth) {
|
|
2941
|
+
return true;
|
|
2942
|
+
}
|
|
2943
|
+
return false;
|
|
2944
|
+
}
|
|
2945
|
+
static setMessage(message2) {
|
|
2946
|
+
Lanauage.setDefaultMessage(message2);
|
|
2947
|
+
}
|
|
2948
|
+
};
|
|
2949
|
+
_DateTimePicker.VERSION = `${"0.0.13"}`;
|
|
2950
|
+
_DateTimePicker.format = format;
|
|
2951
|
+
_DateTimePicker.parser = parser;
|
|
2952
|
+
let DateTimePicker = _DateTimePicker;
|
|
2953
|
+
function getDocSize() {
|
|
2954
|
+
return {
|
|
2955
|
+
clientHeight: Math.max(document.documentElement.clientHeight, window.innerHeight || 0),
|
|
2956
|
+
clientWidth: Math.max(document.documentElement.clientWidth, window.innerWidth || 0)
|
|
2957
|
+
};
|
|
2958
|
+
}
|
|
2959
|
+
class DateRender extends Render {
|
|
1660
2960
|
constructor(field, rowElement, daraForm) {
|
|
1661
2961
|
super(daraForm, field, rowElement);
|
|
1662
2962
|
this.mounted();
|
|
@@ -1665,39 +2965,35 @@ var DateRender = class extends Render {
|
|
|
1665
2965
|
}
|
|
1666
2966
|
mounted() {
|
|
1667
2967
|
let dateOnSelectEvent;
|
|
1668
|
-
this.field.
|
|
1669
|
-
if (typeof this.field.
|
|
1670
|
-
dateOnSelectEvent = typeof this.field.
|
|
2968
|
+
this.field.rendererOptions = Object.assign({}, this.field.rendererOptions);
|
|
2969
|
+
if (typeof this.field.rendererOptions.onSelect !== "undefined") {
|
|
2970
|
+
dateOnSelectEvent = typeof this.field.rendererOptions.onSelect;
|
|
1671
2971
|
}
|
|
1672
|
-
if (isUndefined(this.field.
|
|
2972
|
+
if (isUndefined(this.field.rendererOptions.mode)) {
|
|
1673
2973
|
if (this.field.renderType == "datemonth" || this.field.renderType == "datehour") {
|
|
1674
|
-
this.field.
|
|
2974
|
+
this.field.rendererOptions.mode = this.field.renderType.replace("date", "");
|
|
1675
2975
|
} else {
|
|
1676
|
-
this.field.
|
|
2976
|
+
this.field.rendererOptions.mode = this.field.renderType;
|
|
1677
2977
|
}
|
|
1678
2978
|
}
|
|
1679
|
-
this.field.
|
|
2979
|
+
this.field.rendererOptions.onSelect = (dt, e) => {
|
|
1680
2980
|
if (dateOnSelectEvent) {
|
|
1681
2981
|
dateOnSelectEvent(dt, e);
|
|
1682
2982
|
}
|
|
1683
2983
|
this.setValue(dt);
|
|
1684
2984
|
this.valid();
|
|
1685
2985
|
};
|
|
1686
|
-
this.dateObj = new
|
|
2986
|
+
this.dateObj = new DateTimePicker(this.element, this.field.rendererOptions, {});
|
|
1687
2987
|
}
|
|
1688
|
-
// async loadDate() {
|
|
1689
|
-
// const DateTimePicker = await import("@daracl/datetimepicker");
|
|
1690
|
-
// this.dateObj = new DateTimePicker.default(this.element, this.field.customOptions, {} as any);
|
|
1691
|
-
// }
|
|
1692
2988
|
createField() {
|
|
1693
2989
|
const field = this.field;
|
|
1694
2990
|
const fieldContainerElement = this.rowElement.querySelector(".df-field-container");
|
|
1695
2991
|
fieldContainerElement.innerHTML = `
|
|
1696
2992
|
<div class="df-field">
|
|
1697
|
-
<input type="text" name="${field.$xssName}" class="form-field text help-icon" autocomplete="off" readonly/>
|
|
2993
|
+
<input type="text" name="${field.$xssName}" class="df-form-field df-text df-help-icon" autocomplete="off" readonly/>
|
|
1698
2994
|
</div>
|
|
1699
2995
|
${Render.getDescriptionTemplate(field)}
|
|
1700
|
-
<div class="help-message"></div>
|
|
2996
|
+
<div class="df-help-message"></div>
|
|
1701
2997
|
`;
|
|
1702
2998
|
this.element = fieldContainerElement.querySelector(`[name="${field.$xssName}"]`);
|
|
1703
2999
|
}
|
|
@@ -1725,82 +3021,8 @@ var DateRender = class extends Render {
|
|
|
1725
3021
|
invalidMessage(this.field, this.rowElement, validResult);
|
|
1726
3022
|
return validResult;
|
|
1727
3023
|
}
|
|
1728
|
-
};
|
|
1729
|
-
|
|
1730
|
-
// src/util/styleUtils.ts
|
|
1731
|
-
var styleUtils_default = {
|
|
1732
|
-
/**
|
|
1733
|
-
* field style 처리
|
|
1734
|
-
*
|
|
1735
|
-
* @param formOptions FormOptions
|
|
1736
|
-
* @param field FormField
|
|
1737
|
-
* @param beforeField FormField
|
|
1738
|
-
* @returns FieldStyle
|
|
1739
|
-
*/
|
|
1740
|
-
fieldStyle(formOptions, field, beforeField, isLabelHide) {
|
|
1741
|
-
const fieldStyle = {
|
|
1742
|
-
rowStyleClass: field.orientation === "horizontal" ? "horizontal" : "vertical",
|
|
1743
|
-
fieldClass: "",
|
|
1744
|
-
fieldStyle: "",
|
|
1745
|
-
labelClass: "",
|
|
1746
|
-
labelStyle: "",
|
|
1747
|
-
labelAlignClass: "",
|
|
1748
|
-
valueClass: "",
|
|
1749
|
-
valueStyle: "",
|
|
1750
|
-
tabAlignClass: ""
|
|
1751
|
-
};
|
|
1752
|
-
const defaultLabelWidth = beforeField?.style?.labelWidth ?? formOptions.style.labelWidth ?? "3";
|
|
1753
|
-
let defaultValueWidth = beforeField?.style?.valueWidth ?? formOptions.style.valueWidth ?? "9";
|
|
1754
|
-
const position = beforeField?.style?.position ?? formOptions.style.position;
|
|
1755
|
-
const width = field.style?.width;
|
|
1756
|
-
const positionArr = FIELD_POSITION_STYLE[field.style?.position] ?? FIELD_POSITION_STYLE[position] ?? FIELD_POSITION_STYLE.top;
|
|
1757
|
-
fieldStyle.fieldClass = `${positionArr[0]} ${field.style?.customClass || ""}`;
|
|
1758
|
-
if (width) {
|
|
1759
|
-
if (isNumber(width)) {
|
|
1760
|
-
fieldStyle.fieldClass += isNumber(width) ? ` col-xs-${width}` : "";
|
|
1761
|
-
} else {
|
|
1762
|
-
fieldStyle.fieldStyle = isNumber(width) ? "" : `width:${width};`;
|
|
1763
|
-
}
|
|
1764
|
-
}
|
|
1765
|
-
fieldStyle.tabAlignClass = "tab-al-" + (["right", "center"].includes(field.style?.tabAlign) ? field.style.tabAlign : "left");
|
|
1766
|
-
const labelWidth = field.style?.labelWidth || defaultLabelWidth;
|
|
1767
|
-
fieldStyle.labelAlignClass = positionArr[1];
|
|
1768
|
-
if (!isLabelHide && labelWidth && !["top", "bottom"].includes(positionArr[0])) {
|
|
1769
|
-
if (isNumber(labelWidth)) {
|
|
1770
|
-
const labelWidthValue = +labelWidth;
|
|
1771
|
-
defaultValueWidth = 12 - labelWidthValue;
|
|
1772
|
-
fieldStyle.labelClass = `col-xs-${labelWidthValue}`;
|
|
1773
|
-
fieldStyle.valueClass = fieldStyle.labelStyle ? "col-full" : `col-xs-${defaultValueWidth}`;
|
|
1774
|
-
} else {
|
|
1775
|
-
fieldStyle.labelStyle = `width:${labelWidth};`;
|
|
1776
|
-
}
|
|
1777
|
-
}
|
|
1778
|
-
const valueWidth = field.style?.valueWidth || defaultValueWidth;
|
|
1779
|
-
if (isLabelHide && !["left", "right"].includes(positionArr[0])) {
|
|
1780
|
-
fieldStyle.valueClass = "col-full";
|
|
1781
|
-
} else {
|
|
1782
|
-
if (valueWidth && !["top", "bottom"].includes(positionArr[0])) {
|
|
1783
|
-
if (isNumber(valueWidth)) {
|
|
1784
|
-
fieldStyle.valueClass = fieldStyle.labelStyle ? "col-full" : `col-xs-${valueWidth}`;
|
|
1785
|
-
} else {
|
|
1786
|
-
fieldStyle.valueStyle = `width:${valueWidth};`;
|
|
1787
|
-
}
|
|
1788
|
-
} else {
|
|
1789
|
-
fieldStyle.valueClass = fieldStyle.labelStyle ? "col-full" : "";
|
|
1790
|
-
}
|
|
1791
|
-
}
|
|
1792
|
-
fieldStyle.fieldClass = spaceReplace(fieldStyle.fieldClass);
|
|
1793
|
-
fieldStyle.labelClass = spaceReplace(fieldStyle.labelClass);
|
|
1794
|
-
fieldStyle.valueClass = spaceReplace(fieldStyle.valueClass);
|
|
1795
|
-
return fieldStyle;
|
|
1796
|
-
}
|
|
1797
|
-
};
|
|
1798
|
-
function spaceReplace(str) {
|
|
1799
|
-
return str.replace(/\s+/g, " ").trim();
|
|
1800
3024
|
}
|
|
1801
|
-
|
|
1802
|
-
// src/renderer/TabRender.ts
|
|
1803
|
-
var TabRender = class extends Render {
|
|
3025
|
+
class TabRender extends Render {
|
|
1804
3026
|
constructor(field, rowElement, daraForm) {
|
|
1805
3027
|
super(daraForm, field, rowElement);
|
|
1806
3028
|
if (field.renderer) {
|
|
@@ -1814,7 +3036,7 @@ var TabRender = class extends Render {
|
|
|
1814
3036
|
if (this.customFunction.mounted) {
|
|
1815
3037
|
this.customFunction.mounted.call(this, this.field, this.rowElement);
|
|
1816
3038
|
}
|
|
1817
|
-
this.tabContainerElement.querySelectorAll(".tab-item").forEach((tabItem) => {
|
|
3039
|
+
this.tabContainerElement.querySelectorAll(".df-tab-item").forEach((tabItem) => {
|
|
1818
3040
|
tabItem.addEventListener("click", (e) => {
|
|
1819
3041
|
this.clickEventHandler(tabItem, e);
|
|
1820
3042
|
});
|
|
@@ -1830,21 +3052,21 @@ var TabRender = class extends Render {
|
|
|
1830
3052
|
this.setActive(tabItem.getAttribute("data-tab-id") ?? "");
|
|
1831
3053
|
}
|
|
1832
3054
|
setActive(tabId) {
|
|
3055
|
+
var _a, _b;
|
|
1833
3056
|
const tabItem = this.tabContainerElement.querySelector(`[data-tab-id="${tabId}"]`);
|
|
1834
|
-
if (!tabItem)
|
|
1835
|
-
return;
|
|
3057
|
+
if (!tabItem) return;
|
|
1836
3058
|
if (!tabItem.classList.contains("active")) {
|
|
1837
|
-
for (let item of tabItem
|
|
3059
|
+
for (let item of ((_a = tabItem == null ? void 0 : tabItem.parentElement) == null ? void 0 : _a.children) ?? []) {
|
|
1838
3060
|
item.classList.remove("active");
|
|
1839
3061
|
}
|
|
1840
3062
|
tabItem.classList.add("active");
|
|
1841
3063
|
}
|
|
1842
3064
|
const tabPanel = this.rowElement.querySelector(`[tab-panel-id="${tabId}"]`);
|
|
1843
|
-
if (!tabPanel
|
|
1844
|
-
for (let item of tabPanel
|
|
3065
|
+
if (!(tabPanel == null ? void 0 : tabPanel.classList.contains("active"))) {
|
|
3066
|
+
for (let item of ((_b = tabPanel == null ? void 0 : tabPanel.parentElement) == null ? void 0 : _b.children) ?? []) {
|
|
1845
3067
|
item.classList.remove("active");
|
|
1846
3068
|
}
|
|
1847
|
-
tabPanel
|
|
3069
|
+
tabPanel == null ? void 0 : tabPanel.classList.add("active");
|
|
1848
3070
|
}
|
|
1849
3071
|
}
|
|
1850
3072
|
static isDataRender() {
|
|
@@ -1862,37 +3084,38 @@ var TabRender = class extends Render {
|
|
|
1862
3084
|
* @returns {string} template string
|
|
1863
3085
|
*/
|
|
1864
3086
|
createField() {
|
|
3087
|
+
var _a, _b;
|
|
1865
3088
|
const field = this.field;
|
|
1866
3089
|
const formTemplate = this.daraForm.formTemplate;
|
|
1867
3090
|
const options = this.daraForm.getOptions();
|
|
1868
3091
|
const fieldContainerElement = this.rowElement.querySelector(".df-field-container");
|
|
1869
|
-
let fieldStyle =
|
|
3092
|
+
let fieldStyle = resolveFieldStyle(options, field);
|
|
1870
3093
|
fieldContainerElement.innerHTML = `
|
|
1871
3094
|
<div class="df-field ">
|
|
1872
|
-
<div class="tab-header ${fieldStyle.tabAlignClass}"></div>
|
|
3095
|
+
<div class="df-tab-header ${fieldStyle.tabAlignClass}"></div>
|
|
1873
3096
|
</div>
|
|
1874
3097
|
<div class="df-tab-body"></div>
|
|
1875
3098
|
`;
|
|
1876
3099
|
if (field.children) {
|
|
1877
3100
|
let firstFlag = true;
|
|
1878
3101
|
const formOptions = this.getForm().getOptions();
|
|
1879
|
-
let fieldStyle2 =
|
|
3102
|
+
let fieldStyle2 = resolveFieldStyle(formOptions, field, null, formTemplate.isLabelHide(field));
|
|
1880
3103
|
for (const childField of field.children) {
|
|
1881
3104
|
childField.$parent = field;
|
|
1882
3105
|
formTemplate.addRowFieldInfo(childField);
|
|
1883
3106
|
let id = childField.$key;
|
|
1884
|
-
let tabTemplate = `<span class="tab-item ${firstFlag ? "active" : ""}" data-tab-id="${id}"><a href="javascript:;">${childField.label}</a></span>`;
|
|
1885
|
-
let tabBodyTemplate = `<div class="tab-panel ${firstFlag ? "active" : ""}" tab-panel-id="${id}">${Render.getDescriptionTemplate(childField)}
|
|
1886
|
-
<div class="tab-group"></div>
|
|
3107
|
+
let tabTemplate = `<span class="df-tab-item ${firstFlag ? "active" : ""}" data-tab-id="${id}"><a href="javascript:;">${childField.label}</a></span>`;
|
|
3108
|
+
let tabBodyTemplate = `<div class="df-tab-panel ${firstFlag ? "active" : ""}" tab-panel-id="${id}">${Render.getDescriptionTemplate(childField)}
|
|
3109
|
+
<div class="df-tab-group"></div>
|
|
1887
3110
|
</div>`;
|
|
1888
3111
|
const tabElement = templateToElement(tabTemplate);
|
|
1889
3112
|
const tabBodyElement = templateToElement(tabBodyTemplate);
|
|
1890
3113
|
firstFlag = false;
|
|
1891
3114
|
if (tabElement) {
|
|
1892
|
-
fieldContainerElement.querySelector(".tab-header")
|
|
3115
|
+
(_a = fieldContainerElement.querySelector(".df-tab-header")) == null ? void 0 : _a.appendChild(tabElement);
|
|
1893
3116
|
}
|
|
1894
3117
|
if (tabBodyElement) {
|
|
1895
|
-
fieldContainerElement.querySelector(".df-tab-body")
|
|
3118
|
+
(_b = fieldContainerElement.querySelector(".df-tab-body")) == null ? void 0 : _b.appendChild(tabBodyElement);
|
|
1896
3119
|
if (childField.children) {
|
|
1897
3120
|
let tabFormOptions = {
|
|
1898
3121
|
style: {
|
|
@@ -1907,7 +3130,7 @@ var TabRender = class extends Render {
|
|
|
1907
3130
|
fields: []
|
|
1908
3131
|
};
|
|
1909
3132
|
childField.$tabForm = new DaraForm(document.createElement("div"), tabFormOptions);
|
|
1910
|
-
childField.$instance = new childField.$renderType(childField, tabBodyElement
|
|
3133
|
+
childField.$instance = new childField.$renderType(childField, tabBodyElement == null ? void 0 : tabBodyElement.querySelector(".df-tab-group"), childField.$tabForm);
|
|
1911
3134
|
childField.$tabForm.formTemplate.childTemplate(childField, fieldStyle2);
|
|
1912
3135
|
}
|
|
1913
3136
|
}
|
|
@@ -1916,13 +3139,14 @@ var TabRender = class extends Render {
|
|
|
1916
3139
|
}
|
|
1917
3140
|
}
|
|
1918
3141
|
getValue() {
|
|
3142
|
+
var _a;
|
|
1919
3143
|
if (this.customFunction.getValue) {
|
|
1920
3144
|
return this.customFunction.getValue.call(this, this.field, this.rowElement);
|
|
1921
3145
|
}
|
|
1922
3146
|
let allTabValue = {};
|
|
1923
3147
|
let useTypeValue = this.getForm().getOptions().useTypeValue;
|
|
1924
3148
|
for (const childField of this.field.children) {
|
|
1925
|
-
const childFieldValue = childField.$tabForm
|
|
3149
|
+
const childFieldValue = (_a = childField.$tabForm) == null ? void 0 : _a.getValue(false);
|
|
1926
3150
|
if (useTypeValue) {
|
|
1927
3151
|
allTabValue[childField.$validName] = childFieldValue;
|
|
1928
3152
|
} else {
|
|
@@ -1934,10 +3158,11 @@ var TabRender = class extends Render {
|
|
|
1934
3158
|
return allTabValue;
|
|
1935
3159
|
}
|
|
1936
3160
|
setValue(value) {
|
|
3161
|
+
var _a;
|
|
1937
3162
|
for (const childField of this.field.children) {
|
|
1938
3163
|
let tabChildValue = value[childField.$validName];
|
|
1939
3164
|
if (tabChildValue) {
|
|
1940
|
-
childField.$tabForm
|
|
3165
|
+
(_a = childField.$tabForm) == null ? void 0 : _a.setValue(tabChildValue);
|
|
1941
3166
|
}
|
|
1942
3167
|
}
|
|
1943
3168
|
}
|
|
@@ -1947,6 +3172,7 @@ var TabRender = class extends Render {
|
|
|
1947
3172
|
return this.rowElement;
|
|
1948
3173
|
}
|
|
1949
3174
|
valid() {
|
|
3175
|
+
var _a;
|
|
1950
3176
|
if (this.customFunction.valid) {
|
|
1951
3177
|
const validResult = this.customFunction.valid.call(this, this.field, this.rowElement);
|
|
1952
3178
|
invalidMessage(this.field, this.rowElement, validResult);
|
|
@@ -1954,7 +3180,7 @@ var TabRender = class extends Render {
|
|
|
1954
3180
|
}
|
|
1955
3181
|
const field = this.field;
|
|
1956
3182
|
for (const childField of field.children) {
|
|
1957
|
-
const validResult = childField.$tabForm
|
|
3183
|
+
const validResult = (_a = childField.$tabForm) == null ? void 0 : _a.validForm();
|
|
1958
3184
|
if (validResult && validResult.length > 0) {
|
|
1959
3185
|
const firstItem = validResult[0];
|
|
1960
3186
|
if (firstItem.message) {
|
|
@@ -1967,11 +3193,9 @@ var TabRender = class extends Render {
|
|
|
1967
3193
|
}
|
|
1968
3194
|
focus() {
|
|
1969
3195
|
}
|
|
1970
|
-
}
|
|
1971
|
-
|
|
1972
|
-
|
|
1973
|
-
var $$idx = 0;
|
|
1974
|
-
var GridRender = class extends Render {
|
|
3196
|
+
}
|
|
3197
|
+
let $$idx = 0;
|
|
3198
|
+
class GridRender extends Render {
|
|
1975
3199
|
constructor(field, rowElement, daraForm) {
|
|
1976
3200
|
super(daraForm, field, rowElement);
|
|
1977
3201
|
this.allAddRowInfo = {};
|
|
@@ -1997,11 +3221,12 @@ var GridRender = class extends Render {
|
|
|
1997
3221
|
this.setDefaultInfo();
|
|
1998
3222
|
}
|
|
1999
3223
|
mounted() {
|
|
3224
|
+
var _a;
|
|
2000
3225
|
this.addRow();
|
|
2001
3226
|
if (this.customFunction.mounted) {
|
|
2002
3227
|
this.customFunction.mounted.call(this, this.field, this.rowElement);
|
|
2003
3228
|
}
|
|
2004
|
-
this.rowElement.querySelector(".df-grid-add-row-btn")
|
|
3229
|
+
(_a = this.rowElement.querySelector(".df-grid-add-row-btn")) == null ? void 0 : _a.addEventListener("click", (evt) => {
|
|
2005
3230
|
this.addRow();
|
|
2006
3231
|
});
|
|
2007
3232
|
}
|
|
@@ -2012,6 +3237,7 @@ var GridRender = class extends Render {
|
|
|
2012
3237
|
return false;
|
|
2013
3238
|
}
|
|
2014
3239
|
createField() {
|
|
3240
|
+
var _a, _b, _c, _d;
|
|
2015
3241
|
const field = this.field;
|
|
2016
3242
|
const fieldContainerElement = this.rowElement.querySelector(".df-field-container");
|
|
2017
3243
|
let theadTemplate = [];
|
|
@@ -2023,12 +3249,12 @@ var GridRender = class extends Render {
|
|
|
2023
3249
|
theadTemplate.push("<tr>");
|
|
2024
3250
|
colgroupTemplate.push(`<col style="width:38px">`);
|
|
2025
3251
|
theadTemplate.push("<th>");
|
|
2026
|
-
if (field.
|
|
3252
|
+
if (((_a = field.rendererOptions) == null ? void 0 : _a.disableAddButton) !== true) {
|
|
2027
3253
|
theadTemplate.push(`<button type="button" class="df-btn df-grid-add-row-btn" title="Add"><i class="df-icon df-add-icon"></i></button>`);
|
|
2028
3254
|
}
|
|
2029
3255
|
theadTemplate.push("</th>");
|
|
2030
3256
|
for (const childField of field.children) {
|
|
2031
|
-
colgroupTemplate.push(`<col style="width:${childField.style
|
|
3257
|
+
colgroupTemplate.push(`<col style="width:${((_b = childField.style) == null ? void 0 : _b.width) ?? "*"}">`);
|
|
2032
3258
|
theadTemplate.push(`<th class="df-grid-header">${childField.label}</th>`);
|
|
2033
3259
|
}
|
|
2034
3260
|
colgroupTemplate.push("</colgroup>");
|
|
@@ -2037,7 +3263,7 @@ var GridRender = class extends Render {
|
|
|
2037
3263
|
fieldContainerElement.innerHTML = `
|
|
2038
3264
|
<div class="df-grid-field">
|
|
2039
3265
|
${addBtnTemplate.join("")}
|
|
2040
|
-
<div class="df-grid-container ${field.style
|
|
3266
|
+
<div class="df-grid-container ${((_c = field.style) == null ? void 0 : _c.position) ?? ""}" style="height:${((_d = field.rendererOptions) == null ? void 0 : _d.height) ?? "auto"};">
|
|
2041
3267
|
<table class="df-grid">${colgroupTemplate.join("")}<thead>${theadTemplate.join("")}</thead><tbody></tbody></table>
|
|
2042
3268
|
</div>
|
|
2043
3269
|
</div>
|
|
@@ -2047,20 +3273,21 @@ var GridRender = class extends Render {
|
|
|
2047
3273
|
* add row
|
|
2048
3274
|
*/
|
|
2049
3275
|
addRow(valueItem) {
|
|
3276
|
+
var _a, _b, _c;
|
|
2050
3277
|
let rowTemplate = [];
|
|
2051
3278
|
const options = this.daraForm.getOptions();
|
|
2052
3279
|
const formTemplate = this.gridForm.formTemplate;
|
|
2053
3280
|
const parentName = this.field.$xssName;
|
|
2054
3281
|
++$$idx;
|
|
2055
3282
|
let addColumns = [];
|
|
2056
|
-
rowTemplate.push(`<tr class="grid-row">`);
|
|
3283
|
+
rowTemplate.push(`<tr class="df-grid-row">`);
|
|
2057
3284
|
rowTemplate.push("<td>");
|
|
2058
|
-
if (this.field.
|
|
3285
|
+
if (((_a = this.field.rendererOptions) == null ? void 0 : _a.disableRemoveButton) !== true) {
|
|
2059
3286
|
rowTemplate.push(`<button type="button" data-row-idx="${$$idx}" class="df-btn df-grid-row-remove"><i class="df-icon df-remove-icon"></i></button>`);
|
|
2060
3287
|
}
|
|
2061
3288
|
rowTemplate.push("</td>");
|
|
2062
3289
|
for (const childField of this.field.children) {
|
|
2063
|
-
let fieldStyle =
|
|
3290
|
+
let fieldStyle = resolveFieldStyle(options, childField, null, true);
|
|
2064
3291
|
let columnField = merge({}, childField);
|
|
2065
3292
|
addColumns.push(columnField);
|
|
2066
3293
|
columnField.$orgin = childField;
|
|
@@ -2073,14 +3300,14 @@ var GridRender = class extends Render {
|
|
|
2073
3300
|
this.allAddRowInfo[$$idx] = addColumns;
|
|
2074
3301
|
const addRowElement = templateToElement(rowTemplate.join(""));
|
|
2075
3302
|
if (addRowElement) {
|
|
2076
|
-
this.rowElement.querySelector("tbody")
|
|
2077
|
-
addRowElement.querySelector(".df-grid-row-remove")
|
|
3303
|
+
(_b = this.rowElement.querySelector("tbody")) == null ? void 0 : _b.append(addRowElement);
|
|
3304
|
+
(_c = addRowElement.querySelector(".df-grid-row-remove")) == null ? void 0 : _c.addEventListener("click", (evt) => {
|
|
2078
3305
|
this.removeRow(evt);
|
|
2079
3306
|
});
|
|
2080
3307
|
}
|
|
2081
3308
|
valueItem = valueItem ?? {};
|
|
2082
3309
|
for (let columnField of addColumns) {
|
|
2083
|
-
columnField.$instance = new columnField.$renderType(columnField, addRowElement
|
|
3310
|
+
columnField.$instance = new columnField.$renderType(columnField, addRowElement == null ? void 0 : addRowElement.querySelector(`#${columnField.$xssName}`), this.gridForm);
|
|
2084
3311
|
if (valueItem[columnField.$orgin.name]) {
|
|
2085
3312
|
columnField.$instance.setValue(valueItem[columnField.$orgin.name]);
|
|
2086
3313
|
}
|
|
@@ -2092,12 +3319,11 @@ var GridRender = class extends Render {
|
|
|
2092
3319
|
* @param evt event
|
|
2093
3320
|
*/
|
|
2094
3321
|
removeRow(evt) {
|
|
3322
|
+
var _a;
|
|
2095
3323
|
const target = evt.target;
|
|
2096
3324
|
const rowElement = target.closest("tr");
|
|
2097
3325
|
if (rowElement) {
|
|
2098
|
-
|
|
2099
|
-
return;
|
|
2100
|
-
let rowIdx = evt.currentTarget?.getAttribute("data-row-idx") || "-1";
|
|
3326
|
+
let rowIdx = ((_a = evt.currentTarget) == null ? void 0 : _a.getAttribute("data-row-idx")) || "-1";
|
|
2101
3327
|
this.removeFieldInfo(rowIdx);
|
|
2102
3328
|
rowElement.remove();
|
|
2103
3329
|
}
|
|
@@ -2108,6 +3334,7 @@ var GridRender = class extends Render {
|
|
|
2108
3334
|
*/
|
|
2109
3335
|
removeFieldInfo(rowIdx) {
|
|
2110
3336
|
let removeFieldArrs = [];
|
|
3337
|
+
console.log("rowIdx : ", rowIdx);
|
|
2111
3338
|
if (isEmpty(rowIdx)) {
|
|
2112
3339
|
for (let key in this.allAddRowInfo) {
|
|
2113
3340
|
removeFieldArrs = removeFieldArrs.concat(this.allAddRowInfo[key]);
|
|
@@ -2123,7 +3350,8 @@ var GridRender = class extends Render {
|
|
|
2123
3350
|
}
|
|
2124
3351
|
}
|
|
2125
3352
|
allRemoveRow() {
|
|
2126
|
-
|
|
3353
|
+
var _a;
|
|
3354
|
+
(_a = this.rowElement.querySelector("tbody")) == null ? void 0 : _a.replaceChildren();
|
|
2127
3355
|
this.removeFieldInfo();
|
|
2128
3356
|
}
|
|
2129
3357
|
getValue() {
|
|
@@ -2147,7 +3375,7 @@ var GridRender = class extends Render {
|
|
|
2147
3375
|
setValue(value) {
|
|
2148
3376
|
this.field.$value = value;
|
|
2149
3377
|
let valueArr = [];
|
|
2150
|
-
if (
|
|
3378
|
+
if (isArray(value)) {
|
|
2151
3379
|
valueArr = value;
|
|
2152
3380
|
} else {
|
|
2153
3381
|
if (isPlainObject(value)) {
|
|
@@ -2187,10 +3415,8 @@ var GridRender = class extends Render {
|
|
|
2187
3415
|
}
|
|
2188
3416
|
focus() {
|
|
2189
3417
|
}
|
|
2190
|
-
}
|
|
2191
|
-
|
|
2192
|
-
// src/constants.ts
|
|
2193
|
-
var RULES = {
|
|
3418
|
+
}
|
|
3419
|
+
const RULES = {
|
|
2194
3420
|
NAN: "nan",
|
|
2195
3421
|
MIN: "minimum",
|
|
2196
3422
|
EXCLUSIVE_MIN: "exclusiveMinimum",
|
|
@@ -2202,12 +3428,10 @@ var RULES = {
|
|
|
2202
3428
|
BETWEEN_EXCLUSIVE_MIN: "betweenExclusiveMin",
|
|
2203
3429
|
BETWEEN_EXCLUSIVE_MAX: "betweenExclusiveMax",
|
|
2204
3430
|
BETWEEN_EXCLUSIVE_MINMAX: "betweenExclusiveMinMax",
|
|
2205
|
-
|
|
2206
|
-
REQUIRED: "required",
|
|
2207
|
-
VALIDATOR: "validator"
|
|
3431
|
+
REQUIRED: "required"
|
|
2208
3432
|
};
|
|
2209
|
-
|
|
2210
|
-
|
|
3433
|
+
const FIELD_PREFIX = "dff";
|
|
3434
|
+
const RENDER_TEMPLATE = {
|
|
2211
3435
|
number: NumberRender,
|
|
2212
3436
|
textarea: TextAreaRender,
|
|
2213
3437
|
dropdown: DropdownRender,
|
|
@@ -2228,61 +3452,62 @@ var RENDER_TEMPLATE = {
|
|
|
2228
3452
|
tab: TabRender,
|
|
2229
3453
|
grid: GridRender
|
|
2230
3454
|
};
|
|
2231
|
-
|
|
2232
|
-
|
|
2233
|
-
|
|
2234
|
-
|
|
2235
|
-
"
|
|
2236
|
-
"
|
|
2237
|
-
"
|
|
2238
|
-
"
|
|
2239
|
-
"
|
|
2240
|
-
"right
|
|
2241
|
-
"
|
|
2242
|
-
"
|
|
2243
|
-
"
|
|
3455
|
+
const OrientationMap = {
|
|
3456
|
+
horizontal: "horizontal"
|
|
3457
|
+
};
|
|
3458
|
+
const FIELD_POSITION_STYLE = {
|
|
3459
|
+
"top-left": ["top", "df-txt-left"],
|
|
3460
|
+
"top-center": ["top", "df-txt-center"],
|
|
3461
|
+
"top-right": ["top", "df-txt-right"],
|
|
3462
|
+
"left-left": ["", "df-txt-left"],
|
|
3463
|
+
"left-center": ["", "df-txt-center"],
|
|
3464
|
+
"left-right": ["", "df-txt-right"],
|
|
3465
|
+
"right-right": ["right", "df-txt-right"],
|
|
3466
|
+
"right-center": ["right", "df-txt-center"],
|
|
3467
|
+
"right-left": ["right", "df-txt-left"],
|
|
3468
|
+
"bottom-left": ["bottom", "df-txt-left"],
|
|
3469
|
+
"bottom-center": ["bottom", "df-txt-center"],
|
|
3470
|
+
"bottom-right": ["bottom", "df-txt-right"]
|
|
2244
3471
|
};
|
|
2245
3472
|
FIELD_POSITION_STYLE["top"] = FIELD_POSITION_STYLE["top-left"];
|
|
2246
3473
|
FIELD_POSITION_STYLE["right"] = FIELD_POSITION_STYLE["right-right"];
|
|
2247
3474
|
FIELD_POSITION_STYLE["left"] = FIELD_POSITION_STYLE["left-left"];
|
|
2248
3475
|
FIELD_POSITION_STYLE["bottom"] = FIELD_POSITION_STYLE["bottom-left"];
|
|
2249
|
-
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
fileButton: "\uD30C\uC77C\uCC3E\uAE30",
|
|
2254
|
-
selection: "\uC120\uD0DD",
|
|
3476
|
+
let localeMessage = {
|
|
3477
|
+
required: "{label} 필수 입력사항입니다.",
|
|
3478
|
+
fileButton: "파일찾기",
|
|
3479
|
+
selection: "선택",
|
|
2255
3480
|
string: {
|
|
2256
|
-
minLength: "{minLength}
|
|
2257
|
-
maxLength: "{maxLength}
|
|
2258
|
-
between: "{minLength} ~ {maxLength}
|
|
3481
|
+
minLength: "{minLength} 글자 이상으로 입력하세요.",
|
|
3482
|
+
maxLength: "{maxLength} 글자 이하로 입력하세요.",
|
|
3483
|
+
between: "{minLength} ~ {maxLength} 사이의 글자를 입력하세요."
|
|
2259
3484
|
},
|
|
2260
3485
|
number: {
|
|
2261
|
-
nan: "
|
|
2262
|
-
minimum: "{minimum}
|
|
2263
|
-
exclusiveMinimum: "{minimum}
|
|
2264
|
-
maximum: "{maximum}
|
|
2265
|
-
exclusiveMaximum: "{maximum}
|
|
2266
|
-
between: "{minimum}~{maximum}
|
|
2267
|
-
betweenExclusiveMin: "{minimum}
|
|
2268
|
-
betweenExclusiveMax: "{minimum}
|
|
2269
|
-
betweenExclusiveMinMax: "{minimum}
|
|
3486
|
+
nan: "숫자만 입력 가능 합니다.",
|
|
3487
|
+
minimum: "{minimum} 값과 같거나 커야 합니다",
|
|
3488
|
+
exclusiveMinimum: "{minimum} 보다 커야 합니다",
|
|
3489
|
+
maximum: "{maximum} 값과 같거나 작아야 합니다",
|
|
3490
|
+
exclusiveMaximum: "{maximum} 보다 작아야 합니다.",
|
|
3491
|
+
between: "{minimum}~{maximum} 사이의 값을 입력하세요.",
|
|
3492
|
+
betweenExclusiveMin: "{minimum} 보다 크고 {maximum} 보다 같거나 작아야 합니다",
|
|
3493
|
+
betweenExclusiveMax: "{minimum} 보다 같거나 크고 {maximum} 보다 작아야 합니다",
|
|
3494
|
+
betweenExclusiveMinMax: "{minimum} 보다 크고 {maximum} 보다 작아야 합니다"
|
|
2270
3495
|
},
|
|
2271
3496
|
regexp: {
|
|
2272
|
-
mobile: "
|
|
2273
|
-
email: "
|
|
2274
|
-
url: "URL
|
|
2275
|
-
alpha: "
|
|
2276
|
-
"alpha-num": "
|
|
2277
|
-
number: "
|
|
2278
|
-
variable: "
|
|
2279
|
-
"number-char": "
|
|
2280
|
-
"upper-char": "
|
|
2281
|
-
"upper-char-special": "
|
|
2282
|
-
"upper-char-special-number": "
|
|
3497
|
+
mobile: "핸드폰 번호가 유효하지 않습니다.",
|
|
3498
|
+
email: "이메일이 유효하지 않습니다.",
|
|
3499
|
+
url: "URL이 유효하지 않습니다.",
|
|
3500
|
+
alpha: "영문만 입력 가능 합니다.",
|
|
3501
|
+
"alpha-num": "영문과 숫자만 입력 가능 합니다.",
|
|
3502
|
+
number: "숫자만 입력 가능 합니다.",
|
|
3503
|
+
variable: "값이 유효하지 않습니다.",
|
|
3504
|
+
"number-char": "숫자, 문자 각각 하나 이상 포함 되어야 합니다.",
|
|
3505
|
+
"upper-char": "대문자가 하나 이상 포함 되어야 합니다.",
|
|
3506
|
+
"upper-char-special": "대문자,소문자,특수문자 각각 하나 이상 포함 되어야 합니다.",
|
|
3507
|
+
"upper-char-special-number": "대문자,소문자,특수문자,숫자 각각 하나 이상 포함 되어야합니다."
|
|
2283
3508
|
}
|
|
2284
3509
|
};
|
|
2285
|
-
|
|
3510
|
+
let Language$1 = class Language2 {
|
|
2286
3511
|
constructor() {
|
|
2287
3512
|
this.lang = localeMessage;
|
|
2288
3513
|
}
|
|
@@ -2351,10 +3576,8 @@ function message(msgFormat, msgParam) {
|
|
|
2351
3576
|
return typeof msgParam[key] !== "undefined" ? msgParam[key] : match;
|
|
2352
3577
|
});
|
|
2353
3578
|
}
|
|
2354
|
-
|
|
2355
|
-
|
|
2356
|
-
// src/util/renderFactory.ts
|
|
2357
|
-
var getRenderer = (field) => {
|
|
3579
|
+
const Language3 = new Language$1();
|
|
3580
|
+
const getRenderer = (field) => {
|
|
2358
3581
|
let render;
|
|
2359
3582
|
if (field.renderType) {
|
|
2360
3583
|
render = RENDER_TEMPLATE[field.renderType];
|
|
@@ -2371,9 +3594,7 @@ var getRenderer = (field) => {
|
|
|
2371
3594
|
}
|
|
2372
3595
|
return RENDER_TEMPLATE["text"];
|
|
2373
3596
|
};
|
|
2374
|
-
|
|
2375
|
-
// src/FieldInfoMap.ts
|
|
2376
|
-
var FieldInfoMap = class {
|
|
3597
|
+
class FieldInfoMap {
|
|
2377
3598
|
constructor(selector, form) {
|
|
2378
3599
|
this.fieldIdx = 0;
|
|
2379
3600
|
this.allFieldInfo = {};
|
|
@@ -2449,7 +3670,24 @@ var FieldInfoMap = class {
|
|
|
2449
3670
|
* @param {string} fieldName
|
|
2450
3671
|
*/
|
|
2451
3672
|
removeFieldInfo(fieldName) {
|
|
2452
|
-
|
|
3673
|
+
const fieldKey = this.keyNameMap[fieldName];
|
|
3674
|
+
if (isUndefined(fieldKey)) return;
|
|
3675
|
+
this.removeFieldInfoByKey(fieldKey);
|
|
3676
|
+
delete this.keyNameMap[fieldName];
|
|
3677
|
+
}
|
|
3678
|
+
/**
|
|
3679
|
+
* 필드 키로 필드 정보 맵에서 지우기
|
|
3680
|
+
*
|
|
3681
|
+
* @public
|
|
3682
|
+
* @param {string} fieldKey
|
|
3683
|
+
*/
|
|
3684
|
+
removeFieldInfoByKey(fieldKey) {
|
|
3685
|
+
const fieldInfo = this.allFieldInfo[fieldKey];
|
|
3686
|
+
if (fieldInfo && this.keyNameMap[fieldInfo.$validName] === fieldKey) {
|
|
3687
|
+
delete this.keyNameMap[fieldInfo.$validName];
|
|
3688
|
+
}
|
|
3689
|
+
delete this.allFieldInfo[fieldKey];
|
|
3690
|
+
this.conditionFields = this.conditionFields.filter((key) => key !== fieldKey);
|
|
2453
3691
|
}
|
|
2454
3692
|
/**
|
|
2455
3693
|
* 모든 필드값 구하기
|
|
@@ -2580,18 +3818,17 @@ var FieldInfoMap = class {
|
|
|
2580
3818
|
}
|
|
2581
3819
|
const renderInfo = fieldInfo.$instance;
|
|
2582
3820
|
let fieldValid = renderInfo.valid();
|
|
2583
|
-
if (fieldValid === true)
|
|
2584
|
-
return true;
|
|
3821
|
+
if (fieldValid === true) return true;
|
|
2585
3822
|
if (focusFlag) {
|
|
2586
3823
|
renderInfo.focus();
|
|
2587
3824
|
}
|
|
2588
3825
|
fieldValid = fieldValid;
|
|
2589
3826
|
if (isUndefined(fieldValid.message)) {
|
|
2590
|
-
fieldValid.message =
|
|
3827
|
+
fieldValid.message = Language3.validMessage(fieldInfo, fieldValid)[0];
|
|
2591
3828
|
}
|
|
2592
3829
|
return fieldValid;
|
|
2593
3830
|
}
|
|
2594
|
-
}
|
|
3831
|
+
}
|
|
2595
3832
|
function addFormValue(formData, fieldInfo, useTypeValue) {
|
|
2596
3833
|
if (ignoreValueField(fieldInfo)) {
|
|
2597
3834
|
return formData;
|
|
@@ -2647,9 +3884,7 @@ function addFieldFormData(formData, fieldInfo, useTypeValue) {
|
|
|
2647
3884
|
}
|
|
2648
3885
|
return formData;
|
|
2649
3886
|
}
|
|
2650
|
-
|
|
2651
|
-
// src/FormTemplate.ts
|
|
2652
|
-
var FormTemplate = class {
|
|
3887
|
+
class FormTemplate {
|
|
2653
3888
|
constructor(daraform, formElement, fieldInfoMap) {
|
|
2654
3889
|
this.addRowFields = [];
|
|
2655
3890
|
this.daraform = daraform;
|
|
@@ -2677,10 +3912,10 @@ var FormTemplate = class {
|
|
|
2677
3912
|
*/
|
|
2678
3913
|
addRowTemplate(field) {
|
|
2679
3914
|
let labelHideFlag = this.isLabelHide(field);
|
|
2680
|
-
let fieldStyle =
|
|
3915
|
+
let fieldStyle = resolveFieldStyle(this.options, field, null, labelHideFlag);
|
|
2681
3916
|
this.addRowFieldInfo(field);
|
|
2682
3917
|
const rowElement = templateToElement(`
|
|
2683
|
-
<div class="df-row form-group ${fieldStyle.fieldClass}" id="${field.$key}">
|
|
3918
|
+
<div class="df-row df-form-group ${fieldStyle.fieldClass}" id="${field.$key}">
|
|
2684
3919
|
${labelHideFlag ? "" : `<div class="df-label ${fieldStyle.labelClass} ${fieldStyle.labelAlignClass}" title="${field.label ?? ""}" style="${fieldStyle.labelStyle}">${this.getLabelTemplate(field)}</div>`}
|
|
2685
3920
|
|
|
2686
3921
|
<div class="df-field-container ${fieldStyle.valueClass} ${field.required ? "required" : ""}" style="${fieldStyle.valueStyle}"></div>
|
|
@@ -2731,13 +3966,13 @@ var FormTemplate = class {
|
|
|
2731
3966
|
let childFieldStyle;
|
|
2732
3967
|
let labelTemplate = "";
|
|
2733
3968
|
if (labelHideFlag) {
|
|
2734
|
-
childFieldStyle =
|
|
2735
|
-
labelTemplate = isEmptyLabel ? `<span class="df-label empty ${childFieldStyle.labelClass}" style="${childFieldStyle.labelStyle}"></span>` : "";
|
|
3969
|
+
childFieldStyle = resolveFieldStyle(this.options, childField, beforeField, !isEmptyLabel);
|
|
3970
|
+
labelTemplate = isEmptyLabel ? `<span class="df-label df-empty ${childFieldStyle.labelClass}" style="${childFieldStyle.labelStyle}"></span>` : "";
|
|
2736
3971
|
} else {
|
|
2737
|
-
childFieldStyle =
|
|
3972
|
+
childFieldStyle = resolveFieldStyle(this.options, childField, beforeField, false);
|
|
2738
3973
|
labelTemplate = `<span class="df-label ${childFieldStyle.labelClass} ${childFieldStyle.labelAlignClass}" title="${childField.label ?? ""}" style="${childFieldStyle.labelStyle}">${this.getLabelTemplate(childField)}</span>`;
|
|
2739
3974
|
}
|
|
2740
|
-
const groupElement = templateToElement(`<div class="form-group ${childFieldStyle.fieldClass}" style="${childFieldStyle.fieldStyle}" id="${childField.$key}">
|
|
3975
|
+
const groupElement = templateToElement(`<div class="df-form-group ${childFieldStyle.fieldClass}" style="${childFieldStyle.fieldStyle}" id="${childField.$key}">
|
|
2741
3976
|
${labelTemplate}
|
|
2742
3977
|
<span class="df-field-container ${childFieldStyle.valueClass} ${childField.required ? "required" : ""}" style="${childFieldStyle.valueStyle}"></span>
|
|
2743
3978
|
</div>`);
|
|
@@ -2763,8 +3998,8 @@ var FormTemplate = class {
|
|
|
2763
3998
|
*/
|
|
2764
3999
|
getLabelTemplate(field) {
|
|
2765
4000
|
const requiredTemplate = field.required ? `<span class="required"></span>` : "";
|
|
2766
|
-
const tooltipTemplate = isBlank(field.tooltip) ? "" : `<span class="df-tooltip">?<span class="tooltip">${field.tooltip}</span></span>`;
|
|
2767
|
-
return
|
|
4001
|
+
const tooltipTemplate = isBlank(field.tooltip) ? "" : `<span class="df-tooltip">?<span class="df-tooltip-text">${field.tooltip}</span></span>`;
|
|
4002
|
+
return `<span class="df-label-text">${field.label ?? ""}</span> ${tooltipTemplate} ${requiredTemplate}`;
|
|
2768
4003
|
}
|
|
2769
4004
|
/**
|
|
2770
4005
|
* label 숨김 여부
|
|
@@ -2773,7 +4008,8 @@ var FormTemplate = class {
|
|
|
2773
4008
|
* @returns
|
|
2774
4009
|
*/
|
|
2775
4010
|
isLabelHide(field) {
|
|
2776
|
-
|
|
4011
|
+
var _a;
|
|
4012
|
+
return ((_a = field.style) == null ? void 0 : _a.labelHide) || isUndefined(field.label);
|
|
2777
4013
|
}
|
|
2778
4014
|
checkHiddenField(field) {
|
|
2779
4015
|
if (isHiddenField(field)) {
|
|
@@ -2795,10 +4031,15 @@ var FormTemplate = class {
|
|
|
2795
4031
|
this.fieldInfoMap.addField(field);
|
|
2796
4032
|
this.addRowFields.push(field.$key);
|
|
2797
4033
|
}
|
|
2798
|
-
}
|
|
2799
|
-
|
|
2800
|
-
|
|
2801
|
-
|
|
4034
|
+
}
|
|
4035
|
+
function initFormOptions(options) {
|
|
4036
|
+
const opts = merge({}, DEFAULT_OPTIONS, options);
|
|
4037
|
+
return opts;
|
|
4038
|
+
}
|
|
4039
|
+
function setDefaultOptions(options) {
|
|
4040
|
+
DEFAULT_OPTIONS = merge({}, DEFAULT_OPTIONS, options);
|
|
4041
|
+
}
|
|
4042
|
+
let DEFAULT_OPTIONS = {
|
|
2802
4043
|
style: {
|
|
2803
4044
|
width: "100%",
|
|
2804
4045
|
labelWidth: 3,
|
|
@@ -2811,24 +4052,37 @@ var defaultOptions = {
|
|
|
2811
4052
|
notValidMessage: "This form is not valid.",
|
|
2812
4053
|
fields: []
|
|
2813
4054
|
};
|
|
2814
|
-
|
|
2815
|
-
|
|
2816
|
-
|
|
2817
|
-
|
|
4055
|
+
const allInstance = {};
|
|
4056
|
+
const SEQ_ATTR_KEY = "data-form-uid";
|
|
4057
|
+
let DARA_FORM_SEQ = 0;
|
|
4058
|
+
const _DaraForm = class _DaraForm {
|
|
2818
4059
|
constructor(formElement, options, message2) {
|
|
2819
4060
|
this.formValue = {};
|
|
2820
|
-
|
|
2821
|
-
* change mode
|
|
2822
|
-
*
|
|
2823
|
-
* @param mode form_mode default new
|
|
2824
|
-
*/
|
|
4061
|
+
this.changeListeners = [];
|
|
2825
4062
|
this.changeMode = (mode) => {
|
|
2826
4063
|
this.options.mode = mode;
|
|
2827
4064
|
this.formElement.setAttribute("data-df-mode", mode);
|
|
4065
|
+
const fields = this.formElement.querySelectorAll(".df-field input, .df-field textarea, .df-field select");
|
|
4066
|
+
if (mode == "view") {
|
|
4067
|
+
fields.forEach((field) => {
|
|
4068
|
+
if (field instanceof HTMLInputElement) {
|
|
4069
|
+
field.readOnly = true;
|
|
4070
|
+
}
|
|
4071
|
+
if (field instanceof HTMLTextAreaElement) {
|
|
4072
|
+
field.readOnly = true;
|
|
4073
|
+
}
|
|
4074
|
+
});
|
|
4075
|
+
} else {
|
|
4076
|
+
fields.forEach((field) => {
|
|
4077
|
+
if (field instanceof HTMLInputElement) {
|
|
4078
|
+
field.readOnly = false;
|
|
4079
|
+
}
|
|
4080
|
+
if (field instanceof HTMLTextAreaElement) {
|
|
4081
|
+
field.readOnly = false;
|
|
4082
|
+
}
|
|
4083
|
+
});
|
|
4084
|
+
}
|
|
2828
4085
|
};
|
|
2829
|
-
/**
|
|
2830
|
-
* 폼 데이터 reset
|
|
2831
|
-
*/
|
|
2832
4086
|
this.resetForm = () => {
|
|
2833
4087
|
const fieldMap = this.fieldInfoMap.getAllFieldInfo();
|
|
2834
4088
|
for (const seq in fieldMap) {
|
|
@@ -2841,21 +4095,11 @@ var DaraForm = class _DaraForm {
|
|
|
2841
4095
|
this.formValue = {};
|
|
2842
4096
|
this.conditionCheck();
|
|
2843
4097
|
};
|
|
2844
|
-
/**
|
|
2845
|
-
* field 값 reset
|
|
2846
|
-
* @param fieldName 필드명
|
|
2847
|
-
*/
|
|
2848
4098
|
this.resetField = (fieldName) => {
|
|
2849
4099
|
this.fieldInfoMap.getFieldName(fieldName).$instance.reset();
|
|
2850
4100
|
this.formValue[fieldName] = "";
|
|
2851
4101
|
this.conditionCheck();
|
|
2852
4102
|
};
|
|
2853
|
-
/**
|
|
2854
|
-
* field 값 얻기
|
|
2855
|
-
*
|
|
2856
|
-
* @param fieldName 필드명
|
|
2857
|
-
* @returns
|
|
2858
|
-
*/
|
|
2859
4103
|
this.getFieldValue = (fieldName) => {
|
|
2860
4104
|
const field = this.fieldInfoMap.getFieldName(fieldName);
|
|
2861
4105
|
if (field) {
|
|
@@ -2863,21 +4107,12 @@ var DaraForm = class _DaraForm {
|
|
|
2863
4107
|
}
|
|
2864
4108
|
return null;
|
|
2865
4109
|
};
|
|
2866
|
-
/**
|
|
2867
|
-
* 폼 필드 값 얻기
|
|
2868
|
-
* @param isValid 폼 유효성 검사 여부 default:false|undefined true일경우 검사.
|
|
2869
|
-
* @returns
|
|
2870
|
-
*/
|
|
2871
4110
|
this.getValue = (isValid) => {
|
|
2872
4111
|
return this.fieldInfoMap.getAllFieldValue(this.formValue, isValid);
|
|
2873
4112
|
};
|
|
2874
4113
|
this.getFormDataValue = (isValid) => {
|
|
2875
4114
|
return this.fieldInfoMap.getFormDataValue(this.formValue, isValid);
|
|
2876
4115
|
};
|
|
2877
|
-
/**
|
|
2878
|
-
* 폼 필드 value 셋팅
|
|
2879
|
-
* @param values
|
|
2880
|
-
*/
|
|
2881
4116
|
this.setValue = (values, dataClear) => {
|
|
2882
4117
|
if (dataClear !== false) {
|
|
2883
4118
|
this.resetForm();
|
|
@@ -2897,42 +4132,29 @@ var DaraForm = class _DaraForm {
|
|
|
2897
4132
|
return field.$instance.setValueItems(values);
|
|
2898
4133
|
}
|
|
2899
4134
|
};
|
|
2900
|
-
/**
|
|
2901
|
-
* field 추가
|
|
2902
|
-
*
|
|
2903
|
-
* @param {FormField} field
|
|
2904
|
-
*/
|
|
2905
4135
|
this.addField = (field) => {
|
|
2906
4136
|
this.options.fields.push(field);
|
|
2907
4137
|
this.formTemplate.addRow(field);
|
|
2908
4138
|
this.conditionCheck();
|
|
2909
4139
|
};
|
|
2910
|
-
/**
|
|
2911
|
-
* field 제거
|
|
2912
|
-
*
|
|
2913
|
-
* @param {string} fieldName
|
|
2914
|
-
*/
|
|
2915
4140
|
this.removeField = (fieldName) => {
|
|
2916
|
-
const
|
|
2917
|
-
if (
|
|
2918
|
-
|
|
2919
|
-
|
|
2920
|
-
|
|
4141
|
+
const fieldInfo = this.fieldInfoMap.getFieldName(fieldName);
|
|
4142
|
+
if (!fieldInfo) return;
|
|
4143
|
+
const removeFields = this.getRemoveFields(fieldInfo);
|
|
4144
|
+
removeFields.forEach((removeField) => {
|
|
4145
|
+
this.removeFormValue(removeField);
|
|
4146
|
+
});
|
|
4147
|
+
this.removeFieldElement(fieldInfo);
|
|
4148
|
+
this.removeParentChildField(fieldInfo);
|
|
4149
|
+
removeFields.forEach((removeField) => {
|
|
4150
|
+
this.fieldInfoMap.removeFieldInfoByKey(removeField.$key);
|
|
4151
|
+
});
|
|
4152
|
+
this.conditionCheck();
|
|
2921
4153
|
};
|
|
2922
|
-
/**
|
|
2923
|
-
* 폼 유효성 검증 여부
|
|
2924
|
-
*
|
|
2925
|
-
* @returns {boolean}
|
|
2926
|
-
*/
|
|
2927
4154
|
this.isValidForm = () => {
|
|
2928
4155
|
const result = this.validForm();
|
|
2929
4156
|
return result.length < 1;
|
|
2930
4157
|
};
|
|
2931
|
-
/**
|
|
2932
|
-
* 유효성 검증 폼 검증여부 리턴
|
|
2933
|
-
*
|
|
2934
|
-
* @returns {any[]}
|
|
2935
|
-
*/
|
|
2936
4158
|
this.validForm = () => {
|
|
2937
4159
|
let validResult = [];
|
|
2938
4160
|
let autoFocusFlag = this.options.autoFocus !== false;
|
|
@@ -2967,12 +4189,15 @@ var DaraForm = class _DaraForm {
|
|
|
2967
4189
|
}
|
|
2968
4190
|
return true;
|
|
2969
4191
|
};
|
|
2970
|
-
/**
|
|
2971
|
-
* 설정 옵션 얻기
|
|
2972
|
-
*/
|
|
2973
4192
|
this.getOptions = () => {
|
|
2974
4193
|
return this.options;
|
|
2975
4194
|
};
|
|
4195
|
+
this.subscribe = (listener) => {
|
|
4196
|
+
this.changeListeners.push(listener);
|
|
4197
|
+
return () => {
|
|
4198
|
+
this.changeListeners = this.changeListeners.filter((l) => l !== listener);
|
|
4199
|
+
};
|
|
4200
|
+
};
|
|
2976
4201
|
this.destroy = () => {
|
|
2977
4202
|
this.formElement.className = this.orginFormStyleClass;
|
|
2978
4203
|
this.formElement.replaceChildren();
|
|
@@ -2983,22 +4208,15 @@ var DaraForm = class _DaraForm {
|
|
|
2983
4208
|
}
|
|
2984
4209
|
}
|
|
2985
4210
|
};
|
|
2986
|
-
/**
|
|
2987
|
-
* 모든 field 얻기
|
|
2988
|
-
*/
|
|
2989
4211
|
this.getFields = () => {
|
|
2990
4212
|
return this.options.fields;
|
|
2991
4213
|
};
|
|
2992
|
-
/**
|
|
2993
|
-
* field setting
|
|
2994
|
-
* @param fields
|
|
2995
|
-
*/
|
|
2996
4214
|
this.setFields = (fields) => {
|
|
2997
4215
|
this.options.fields = fields;
|
|
2998
4216
|
this.createForm(fields);
|
|
2999
4217
|
};
|
|
3000
|
-
this.options =
|
|
3001
|
-
|
|
4218
|
+
this.options = initFormOptions(options);
|
|
4219
|
+
Language3.set(message2);
|
|
3002
4220
|
if (formElement) {
|
|
3003
4221
|
this.orginFormStyleClass = formElement.className;
|
|
3004
4222
|
formElement.classList.add("daracl-form");
|
|
@@ -3018,14 +4236,17 @@ var DaraForm = class _DaraForm {
|
|
|
3018
4236
|
throw new Error(`${formElement} form selector not found`);
|
|
3019
4237
|
}
|
|
3020
4238
|
}
|
|
3021
|
-
static {
|
|
3022
|
-
this.VERSION = `${APP_VERSION}`;
|
|
3023
|
-
}
|
|
3024
4239
|
static create(formElement, options, message2) {
|
|
3025
4240
|
return new _DaraForm(formElement, options, message2);
|
|
3026
4241
|
}
|
|
3027
4242
|
static setMessage(message2) {
|
|
3028
|
-
|
|
4243
|
+
Language3.set(message2);
|
|
4244
|
+
}
|
|
4245
|
+
static setDefaultOptions(options, message2) {
|
|
4246
|
+
setDefaultOptions(options);
|
|
4247
|
+
if (message2) {
|
|
4248
|
+
Language3.set(message2);
|
|
4249
|
+
}
|
|
3029
4250
|
}
|
|
3030
4251
|
createForm(fields) {
|
|
3031
4252
|
this.fieldInfoMap = new FieldInfoMap(this.selector, this);
|
|
@@ -3049,7 +4270,7 @@ var DaraForm = class _DaraForm {
|
|
|
3049
4270
|
*/
|
|
3050
4271
|
getFieldElement(fieldName) {
|
|
3051
4272
|
const field = this.fieldInfoMap.getFieldName(fieldName);
|
|
3052
|
-
if (field
|
|
4273
|
+
if (field == null ? void 0 : field.$instance) {
|
|
3053
4274
|
return field.$instance.getElement();
|
|
3054
4275
|
}
|
|
3055
4276
|
return null;
|
|
@@ -3064,6 +4285,88 @@ var DaraForm = class _DaraForm {
|
|
|
3064
4285
|
fieldInfo.$instance.setValue(value);
|
|
3065
4286
|
}
|
|
3066
4287
|
}
|
|
4288
|
+
/**
|
|
4289
|
+
* 제거할 필드와 같은 fieldInfoMap에 등록된 하위 필드(group 하위 필드, tab 패널) 목록
|
|
4290
|
+
* grid 컬럼, tab 패널 내부 필드는 별도 form에 등록되므로 제외됨.
|
|
4291
|
+
*
|
|
4292
|
+
* @param {FormField} fieldInfo
|
|
4293
|
+
* @param {FormField[]} result
|
|
4294
|
+
* @returns {FormField[]}
|
|
4295
|
+
*/
|
|
4296
|
+
getRemoveFields(fieldInfo, result = []) {
|
|
4297
|
+
var _a;
|
|
4298
|
+
result.push(fieldInfo);
|
|
4299
|
+
(_a = fieldInfo.children) == null ? void 0 : _a.forEach((childField) => {
|
|
4300
|
+
if (childField && this.fieldInfoMap.get(childField.$key) === childField) {
|
|
4301
|
+
this.getRemoveFields(childField, result);
|
|
4302
|
+
}
|
|
4303
|
+
});
|
|
4304
|
+
return result;
|
|
4305
|
+
}
|
|
4306
|
+
/**
|
|
4307
|
+
* field element 제거
|
|
4308
|
+
*
|
|
4309
|
+
* @param {FormField} fieldInfo
|
|
4310
|
+
*/
|
|
4311
|
+
removeFieldElement(fieldInfo) {
|
|
4312
|
+
var _a, _b;
|
|
4313
|
+
const parentField = fieldInfo.$parent;
|
|
4314
|
+
if (parentField && isTabType(parentField)) {
|
|
4315
|
+
const tabElement = parentField.$instance.getElement();
|
|
4316
|
+
const tabItem = tabElement.querySelector(`[data-tab-id="${fieldInfo.$key}"]`);
|
|
4317
|
+
const activeFlag = tabItem == null ? void 0 : tabItem.classList.contains("active");
|
|
4318
|
+
tabItem == null ? void 0 : tabItem.remove();
|
|
4319
|
+
(_a = tabElement.querySelector(`[tab-panel-id="${fieldInfo.$key}"]`)) == null ? void 0 : _a.remove();
|
|
4320
|
+
const firstTabItem = tabElement.querySelector(".df-tab-header .df-tab-item");
|
|
4321
|
+
if (activeFlag && firstTabItem) {
|
|
4322
|
+
parentField.$instance.setActive(firstTabItem.getAttribute("data-tab-id") ?? "");
|
|
4323
|
+
}
|
|
4324
|
+
return;
|
|
4325
|
+
}
|
|
4326
|
+
const rowSelector = `[id="${fieldInfo.$key}"]`;
|
|
4327
|
+
let element = (_b = fieldInfo.$instance) == null ? void 0 : _b.getElement();
|
|
4328
|
+
if (element instanceof NodeList || element instanceof HTMLCollection) {
|
|
4329
|
+
element = element[0] ?? null;
|
|
4330
|
+
}
|
|
4331
|
+
const rowElement = (element instanceof Element ? element.closest(rowSelector) : null) ?? this.formElement.querySelector(rowSelector);
|
|
4332
|
+
const containerElement = rowElement == null ? void 0 : rowElement.parentElement;
|
|
4333
|
+
rowElement == null ? void 0 : rowElement.remove();
|
|
4334
|
+
if (parentField && (containerElement == null ? void 0 : containerElement.classList.contains("df-row")) && containerElement.childElementCount < 1) {
|
|
4335
|
+
containerElement.remove();
|
|
4336
|
+
}
|
|
4337
|
+
}
|
|
4338
|
+
/**
|
|
4339
|
+
* 부모 children(최상위는 options.fields)에서 필드 제거
|
|
4340
|
+
* tab 은 children 기준으로 값/유효성 체크를 하므로 제거해야 함.
|
|
4341
|
+
*
|
|
4342
|
+
* @param {FormField} fieldInfo
|
|
4343
|
+
*/
|
|
4344
|
+
removeParentChildField(fieldInfo) {
|
|
4345
|
+
const fields = fieldInfo.$parent ? fieldInfo.$parent.children : this.options.fields;
|
|
4346
|
+
const idx = fields ? fields.indexOf(fieldInfo) : -1;
|
|
4347
|
+
if (idx > -1) {
|
|
4348
|
+
fields == null ? void 0 : fields.splice(idx, 1);
|
|
4349
|
+
}
|
|
4350
|
+
}
|
|
4351
|
+
/**
|
|
4352
|
+
* getValue() 시 formValue에 누적된 field 값 제거
|
|
4353
|
+
*
|
|
4354
|
+
* @param {FormField} fieldInfo
|
|
4355
|
+
*/
|
|
4356
|
+
removeFormValue(fieldInfo) {
|
|
4357
|
+
const keys = [fieldInfo.name, fieldInfo.$validName];
|
|
4358
|
+
if (fieldInfo.renderType === "file") {
|
|
4359
|
+
keys.push(fieldInfo.$validName + "RemoveIds");
|
|
4360
|
+
} else if (isTabType(fieldInfo)) {
|
|
4361
|
+
keys.push(...Object.keys(fieldInfo.$instance.getValue() ?? {}));
|
|
4362
|
+
}
|
|
4363
|
+
if (fieldInfo.$tabForm) {
|
|
4364
|
+
keys.push(...Object.keys(fieldInfo.$tabForm.getValue(false) ?? {}));
|
|
4365
|
+
}
|
|
4366
|
+
keys.forEach((key) => {
|
|
4367
|
+
if (!isBlank(key)) delete this.formValue[key];
|
|
4368
|
+
});
|
|
4369
|
+
}
|
|
3067
4370
|
validTabCheck(fieldInfo) {
|
|
3068
4371
|
if (fieldInfo.$parent) {
|
|
3069
4372
|
if (fieldInfo.$parent.renderType == "tab") {
|
|
@@ -3074,6 +4377,12 @@ var DaraForm = class _DaraForm {
|
|
|
3074
4377
|
}
|
|
3075
4378
|
conditionCheck() {
|
|
3076
4379
|
this.fieldInfoMap.conditionCheck();
|
|
4380
|
+
this.notifyChange();
|
|
4381
|
+
}
|
|
4382
|
+
notifyChange() {
|
|
4383
|
+
if (this.changeListeners.length < 1) return;
|
|
4384
|
+
const event = { form: this };
|
|
4385
|
+
this.changeListeners.forEach((listener) => listener(event));
|
|
3077
4386
|
}
|
|
3078
4387
|
setFieldDisabled(fieldName, flag) {
|
|
3079
4388
|
const fieldInfo = this.fieldInfoMap.getFieldName(fieldName);
|
|
@@ -3090,20 +4399,6 @@ var DaraForm = class _DaraForm {
|
|
|
3090
4399
|
const fieldInfo = this.fieldInfoMap.getFieldName(fieldName);
|
|
3091
4400
|
fieldInfo.$instance.setDescription(desc);
|
|
3092
4401
|
}
|
|
3093
|
-
static {
|
|
3094
|
-
this.validator = {
|
|
3095
|
-
string: (value, field) => {
|
|
3096
|
-
return stringValidator(value, field);
|
|
3097
|
-
},
|
|
3098
|
-
number: (value, field) => {
|
|
3099
|
-
return numberValidator(value, field);
|
|
3100
|
-
},
|
|
3101
|
-
regexp: (value, field) => {
|
|
3102
|
-
let result = { name: field.name, constraint: [] };
|
|
3103
|
-
return regexpValidator(value, field, result);
|
|
3104
|
-
}
|
|
3105
|
-
};
|
|
3106
|
-
}
|
|
3107
4402
|
static instance(ele) {
|
|
3108
4403
|
let element;
|
|
3109
4404
|
if (isString(ele)) {
|
|
@@ -3126,7 +4421,19 @@ var DaraForm = class _DaraForm {
|
|
|
3126
4421
|
return this.fieldInfoMap;
|
|
3127
4422
|
}
|
|
3128
4423
|
};
|
|
3129
|
-
|
|
3130
|
-
|
|
3131
|
-
|
|
4424
|
+
_DaraForm.VERSION = `${"0.0.19"}`;
|
|
4425
|
+
_DaraForm.validator = {
|
|
4426
|
+
string: (value, field) => {
|
|
4427
|
+
return stringValidator(value, field);
|
|
4428
|
+
},
|
|
4429
|
+
number: (value, field) => {
|
|
4430
|
+
return numberValidator(value, field);
|
|
4431
|
+
},
|
|
4432
|
+
regexp: (value, field) => {
|
|
4433
|
+
let result = { name: field.name, constraint: [] };
|
|
4434
|
+
return regexpValidator(value, field, result);
|
|
4435
|
+
}
|
|
4436
|
+
};
|
|
4437
|
+
let DaraForm = _DaraForm;
|
|
4438
|
+
exports.DaraForm = DaraForm;
|
|
3132
4439
|
//# sourceMappingURL=index.cjs.map
|