@daracl/form 0.0.11 → 0.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/dist/daracl.form.js +2 -2
  2. package/dist/daracl.form.min.js +2 -2
  3. package/dist/daracl.form.min.js.LICENSE.txt +1 -1
  4. package/dist/daracl.vender.min.js +1 -1
  5. package/dist/index.html +3 -4
  6. package/dist/main.css +1 -1
  7. package/dist/types/DateTimePicker.d.ts +5 -0
  8. package/package.json +3 -5
  9. package/src/DaraForm.ts +0 -431
  10. package/src/FieldInfoMap.ts +0 -356
  11. package/src/FormTemplate.ts +0 -207
  12. package/src/constants.ts +0 -100
  13. package/src/event/renderEvents.ts +0 -41
  14. package/src/index copy.html +0 -591
  15. package/src/index-grid.html +0 -655
  16. package/src/index-tab.html +0 -639
  17. package/src/index.html +0 -485
  18. package/src/indexVender.ts +0 -9
  19. package/src/renderer/ButtonRender.ts +0 -51
  20. package/src/renderer/CheckboxRender.ts +0 -214
  21. package/src/renderer/CustomRender.ts +0 -100
  22. package/src/renderer/DateRender.ts +0 -104
  23. package/src/renderer/DropdownRender.ts +0 -149
  24. package/src/renderer/FileRender.ts +0 -239
  25. package/src/renderer/GridRender.ts +0 -289
  26. package/src/renderer/GroupRender.ts +0 -47
  27. package/src/renderer/HiddenRender.ts +0 -36
  28. package/src/renderer/NumberRender.ts +0 -68
  29. package/src/renderer/PasswordRender.ts +0 -69
  30. package/src/renderer/RadioRender.ts +0 -191
  31. package/src/renderer/RangeRender.ts +0 -79
  32. package/src/renderer/Render.ts +0 -194
  33. package/src/renderer/TabRender.ts +0 -229
  34. package/src/renderer/TextAreaRender.ts +0 -72
  35. package/src/renderer/TextRender.ts +0 -68
  36. package/src/rule/fileValidator.ts +0 -26
  37. package/src/rule/numberValidator.ts +0 -96
  38. package/src/rule/regexpValidator.ts +0 -45
  39. package/src/rule/stringValidator.ts +0 -64
  40. package/src/rule/validator.ts +0 -49
  41. package/src/types/DataMap.d.ts +0 -17
  42. package/src/types/FormField.d.ts +0 -129
  43. package/src/types/FormOptions.d.ts +0 -91
  44. package/src/types/Message.d.ts +0 -40
  45. package/src/types/ValidResult.d.ts +0 -9
  46. package/src/util/Lanauage.ts +0 -127
  47. package/src/util/renderFactory.ts +0 -26
  48. package/src/util/styleUtils.ts +0 -85
  49. package/src/util/utils.ts +0 -283
  50. package/src/util/validUtils.ts +0 -53
@@ -1,639 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
-
4
- <head>
5
- <meta charset="utf-8" />
6
- <title>Dara Form</title>
7
- </head>
8
-
9
- <body>
10
- <div class="header">
11
- <div class="form-button">
12
- <button type="button" onclick="formObj.addItem()">Add</button>
13
- <button type="button" onclick="formObj.getValue()">getValue</button>
14
- <button type="button" onclick="formObj.getValuePromise()">getValue(true)</button>
15
- <button type="button" onclick="formObj.setValue()">setValue()</button>
16
- <button type="button" onclick="formObj.isValidForm()">valid check</button>
17
- <button type="button" onclick="formObj.resetForm()">Reset</button>
18
- <button type="button" onclick="formObj.setFieldItems()">setFieldItems</button>
19
- </div>
20
-
21
- <div>
22
- Theme : <label>Light<input type="radio" name="theme-toggle" value="light" checked="true"></label>
23
- <label>Dark<input type="radio" name="theme-toggle" value="dark"></label>
24
- </div>
25
- </div>
26
-
27
- <div style="padding: 0px 20px">
28
- <form id="loginForm" class="login-form"></form>
29
-
30
- <form id="formArea" class="test-form aaa-test"></form>
31
-
32
- </div>
33
- </body>
34
-
35
- </html>
36
- <style>
37
- .form-button {
38
- text-align: center;
39
- }
40
-
41
- :root {
42
- --bg: #ffffff;
43
- --bg-color: #070d19;
44
-
45
- }
46
-
47
- body.dark {
48
- --bg: #070d19;
49
- --bg-color: #ffffff;
50
-
51
- }
52
-
53
- body {
54
- background-color: var(--bg);
55
- }
56
-
57
- .header {
58
- color: var(--bg-color);
59
- }
60
- </style>
61
- <script type="module">
62
-
63
- const THEME_KEY = "form-theme";
64
- const theme = localStorage.getItem(THEME_KEY);
65
-
66
- if (theme) setMainTheme(theme);
67
-
68
- function setMainTheme(theme, persist = false) {
69
- const classList = document.body.classList;
70
-
71
- classList.remove("light", "dark");
72
-
73
- classList.add(theme);
74
-
75
- if (persist) {
76
- localStorage.setItem(THEME_KEY, theme);
77
- }
78
- }
79
-
80
- function load() {
81
- // theme
82
- const toggler = document.querySelectorAll('[name="theme-toggle"]');
83
- const theme = localStorage.getItem(THEME_KEY);
84
-
85
- if (toggler) {
86
- if (theme === "dark") {
87
- document.querySelector('[name="theme-toggle"][value="dark"]').checked = true;
88
- }
89
-
90
- toggler.forEach((el) => {
91
- el.addEventListener("click", (e) => {
92
- setMainTheme(el.value, true);
93
- });
94
- })
95
- }
96
- }
97
- load();
98
-
99
-
100
-
101
-
102
- var formInfo = {
103
- message: "This value is not valid",
104
- //mode: 'vertical',
105
- //autoFocus: false,
106
- //useTypeValue: true,
107
- style: {
108
- //width: '600px',
109
- position: 'left-left',
110
- labelWidth: '3'
111
-
112
- },
113
- // form load 이후 호출.
114
- onMounted: function () {
115
- console.log(this)
116
- },
117
- message: {
118
- empty: "{name} 필수 입력사항입니다.",
119
- string: {
120
- minLength: "{size} 글자 이상 입력해야합니다.",
121
- maxLength: "{size} 글자 이상 입력할 수 없습니다.",
122
- },
123
- number: {
124
- minimum: "{size} 보다 커야 합니다",
125
- miximum: "{size} 보다 커야 합니다",
126
- },
127
- regexp: {
128
- email: "이메일이 유효하지 않습니다.",
129
- url: "URL이 유효하지 않습니다.",
130
- },
131
- },
132
- fields: [
133
- {
134
- name: "hiddenMode",
135
- renderType: "hidden",
136
- defaultValue: "asdf",
137
- }
138
- ,
139
- {
140
- name: "이름222222",
141
- label: "이름222222",
142
- renderType: 'text',
143
- template: '<div id="customElementID">111</div>',
144
- required: true,
145
- rule: {
146
- minLength: 2,
147
- maxLength: 100,
148
- },
149
- onChange: (arg) => {
150
- console.log(arg);
151
- },
152
- renderer: {
153
- mounted: () => {
154
- console.log(document.getElementById('customElementID'))
155
- }
156
- , getValue() {
157
- return '21';
158
- }
159
- , valid1(field, rowElement) {
160
- const val = this.getValue();
161
- return { name: field.name, message: 'custom type not valid' };
162
- }
163
- }
164
- },
165
- {
166
- name: "tab",
167
- label: "첫번째 탭",
168
- tooltip: "탭을 선택후 정보를 입력해주세요.",
169
- description: "탭 설명설명설명",
170
- renderType: "tab",
171
- style: {
172
- labelHide: false,
173
- position: 'top-left'
174
- },
175
- children: [
176
- {
177
- label: 'tab1'
178
- , description: 'tabl 설명'
179
- , children: [
180
- {
181
- name: "tabPicture",
182
- label: "tab사진",
183
- required: true,
184
- renderType: "file",
185
- listItem: {
186
- list: [
187
- ],
188
- },
189
- }
190
- , {
191
- name: "grid",
192
- label: "grid",
193
- renderType: "grid",
194
- gridOptions: {
195
- disableAddButton: false,
196
- disableRemoveButton: false,
197
- height: '200px',
198
- }
199
- , children: [
200
- {
201
- name: "key",
202
- label: "key",
203
- renderType: "text",
204
- required: true,
205
- style: {
206
- width: '200px'
207
- },
208
- rule: {
209
- minLength: 2,
210
- maxLength: 100,
211
- },
212
- }
213
- , {
214
- name: "value",
215
- label: "value",
216
- renderType: "text",
217
- }
218
- , {
219
- name: "cre",
220
- label: "성별",
221
- required: true,
222
- renderType: "dropdown",
223
- listItem: {
224
- labelField: "credName",
225
- valueField: "credId",
226
- list: [{ label: "선택하세요." }, { credId: "credId", credName: "credName" }],
227
- }
228
- },
229
- ],
230
-
231
- },
232
- {
233
- name: "uname222",
234
- label: "tab-이름",
235
- style: {
236
- customClass: 'custom-class',
237
- position: 'left',
238
- labelWidth: '120px',
239
- labelHide: false,
240
- }
241
- , rule: {
242
- minLength: 2,
243
- maxLength: 100,
244
- },
245
-
246
- }
247
- , {
248
- name: "uname222333",
249
- label: "tab11-이름",
250
- tooltip: "아이디를 넣어주세요.",
251
- rule: {
252
- minLength: 2,
253
- maxLength: 100,
254
- },
255
-
256
- }
257
-
258
- , {
259
- label: "child tab",
260
- renderType: "tab",
261
- style: {
262
- labelHide: true,
263
- //position: 'top-center',
264
- position: 'top-bottom',
265
- }
266
- , children: [
267
- {
268
- label: 'child-tab1'
269
- , description: 'tabl 설명'
270
- , children: [
271
- {
272
- name: "child-uname222",
273
- label: "tab-이름",
274
- style: {
275
- customClass: 'custom-class',
276
- position: 'left',
277
- labelWidth: '120px',
278
- labelHide: false,
279
- }
280
- }
281
- ]
282
- }
283
- , {
284
- label: 'child-uname2-tab2'
285
- , children: [
286
- {
287
- name: "child-uname333",
288
- label: "tab",
289
-
290
- rule: {
291
- minLength: 2,
292
- maxLength: 100,
293
- },
294
- onChange: (arg) => {
295
- console.log(arg);
296
- },
297
- }
298
- ]
299
- }
300
- ]
301
- }
302
- ]
303
- }
304
- , {
305
- label: 'tab2'
306
- , children: [
307
- {
308
- name: "uname333",
309
- label: "tab-22222222222222222222222222222222",
310
- rule: {
311
- minLength: 2,
312
- maxLength: 100,
313
- },
314
- onChange: (arg) => {
315
- console.log(arg);
316
- },
317
- }
318
- ]
319
- }
320
- ]
321
- },
322
-
323
- /*
324
- {
325
- name: "uname",
326
- label: "이름222222",
327
- renderType: 'custom',
328
- template: '<div id="customElementID">111</div>',
329
- required: true,
330
- rule: {
331
- minLength: 2,
332
- maxLength: 100,
333
- },
334
- onChange: (arg) => {
335
- console.log(arg);
336
- },
337
- renderer: {
338
- mounted: () => {
339
- console.log(document.getElementById('customElementID'))
340
- }
341
- , getValue() {
342
- return '21';
343
- }
344
- , valid1(field, rowElement) {
345
- const val = this.getValue();
346
- return { name: field.name, message: 'custom type not valid' };
347
- }
348
- }
349
- },
350
- {
351
- label: '비밀번호'
352
- , orientation: 'vertical'
353
- , conditional: {
354
- show: true,
355
- custom: function () {
356
-
357
- return true;
358
- }
359
- }
360
- , children: [{
361
- name: 'upw'
362
- , label: '비밀번호'
363
- , style: {
364
- labelHide: true
365
- }
366
- , renderType: 'password'
367
- , regexpType: 'number-char'
368
- , rule: {
369
- minLength: 3
370
- }
371
- , different: {
372
- field: 'uid',
373
- message: '아이디와 달라야 합니다.'
374
- }
375
- }
376
- , {
377
- name: 'confirmUpw'
378
- , label: '확인 비밀번호'
379
- , style: {
380
- labelHide: true
381
- }
382
- , renderType: 'password'
383
- , identical: {
384
- field: 'upw',
385
- message: '비밀번호가 같아야합니다.'
386
- }
387
- }]
388
- }
389
-
390
- , {
391
- name: "age",
392
- label: "생년월일",
393
- required: true,
394
- renderType: "date",
395
- customOptions: {
396
- mode: 'datetime'
397
- }
398
- },
399
- {
400
- name: "sex",
401
- label: "성별",
402
- required: true,
403
- renderType: "radio",
404
- listItem: {
405
- list: [
406
- { label: "남", value: "Y", selected: true },
407
- { label: "여", value: "X" },
408
- ],
409
- },
410
- },
411
- {
412
- name: "picture",
413
- label: "사진",
414
- required: true,
415
- renderType: "file",
416
- listItem: {
417
- list: [
418
- ],
419
- },
420
- },
421
-
422
- {
423
- name: "cmpCredId",
424
- label: "credentials",
425
- renderType: "dropdown",
426
- tooltip: "credentials 넣어주세요.",
427
- required: true,
428
- listItem: {
429
- labelField: "credName",
430
- valueField: "credId",
431
- list: [{ label: "선택하세요." }, { credId: "credId", credName: "credName" }],
432
- },
433
- description: "awefawfeawefawef",
434
- },
435
- {
436
- label: "checkbox",
437
-
438
- name: "checkbox11",
439
- required: true,
440
- renderType: "checkbox",
441
- defaultValue: '',
442
- listItem: {
443
- orientation: "horizontal", // 'vertical , horizontal'
444
- list: [
445
- { label: "checkbox value", value: "Y", selected: true }
446
- , { label: "checkbox value111", value: "Y1" }
447
- , { label: "checkbox value222", value: "Y2", disabled: true }
448
- , { label: "checkbox value333", value: "Y3" }
449
- ],
450
- },
451
- onChange: (arg) => {
452
- console.log(arg);
453
- },
454
- }
455
- , {
456
- label: "라벨주소",
457
- name: 'newAddress',
458
- renderType: 'radio',
459
- //defaultValue: 'N',
460
- listItem: {
461
- orientation: "horizontal", // 'vertical , horizontal'
462
- list: [
463
- { label: "추가1", value: "Y", selected: true },
464
- { label: "추가", value: "N" }
465
- ],
466
- }
467
- , description: `<div><a href="asdf">111111111111111</a></div>`
468
- , orientation: "horizontal" // 'vertical , horizontal'
469
- , conditional: {
470
- show: true,
471
- custom: function () {
472
- return true;
473
- },
474
- },
475
- children: [
476
-
477
- {
478
- name: "address32",
479
- label: "주소",
480
- orientation: 'vertical',
481
- style: {
482
- labelHide: false,
483
- position: 'left',
484
- labelWidth: '120px',
485
- },
486
- required: true,
487
- rule: {
488
- minLength: 2,
489
- maxLength: 100,
490
- },
491
- conditional: {
492
- show: false,
493
- field: "newAddress",
494
- eq: "N",
495
- //custom?: OptionCallback
496
- }
497
- },
498
- {
499
- name: "address",
500
- label: "주소2",
501
- hideLabel: true,
502
- required: true,
503
- style: {
504
- labelHide: false,
505
- },
506
- rule: {
507
- minLength: 2,
508
- maxLength: 100,
509
- },
510
- conditional: {
511
- show: true,
512
- custom: function () {
513
- return true;
514
- },
515
- },
516
- },
517
- {
518
- name: "address2",
519
- label: "주소3",
520
- style: {
521
- //width: '200px',
522
- labelHide: false,
523
- position: 'left'
524
- },
525
- required: true,
526
- rule: {
527
- minLength: 2,
528
- maxLength: 100,
529
- },
530
- conditional: {
531
- show: true,
532
- field: "newAddress",
533
- eq: "Y",
534
- //custom?: OptionCallback
535
- },
536
- },
537
- {
538
- renderType: "text",
539
- label: "주소 하위1",
540
- //childLabelWidth: "",
541
- orientation: "horizontal", // 'vertical , horizontal, horizontal-row'
542
- style: {
543
- labelWidth: "200px",
544
- labelHide: false
545
- },
546
- conditional: {
547
- show: true,
548
- custom: function () {
549
- return true;
550
- },
551
- },
552
- children: [
553
- {
554
- name: "address22222",
555
- label: "주소1",
556
- labelWidth: "150px",
557
- },
558
- {
559
- name: "address222333322",
560
- label: "주소2",
561
- renderType: "text",
562
- },
563
- ],
564
- },
565
- {
566
- label: "버튼",
567
- hideLabel: true,
568
- renderType: "button",
569
- onClick: (arg) => {
570
- console.log(arg);
571
- },
572
- },
573
- ],
574
- },
575
- */
576
- ],
577
- };
578
-
579
-
580
- var rowIdx = 0;
581
- var formBuilder;
582
- var formObj = {
583
- load: () => {
584
- // formBuilder = loginForm;
585
- formBuilder = Daracl.form.create(document.getElementById("formArea"), formInfo);
586
- },
587
- addItem: () => {
588
- rowIdx += 1;
589
- formBuilder.addField({
590
- name: `addItem${rowIdx}`,
591
- label: `추가컬럼${rowIdx}`,
592
- maxLength: 100,
593
- required: true,
594
- });
595
- },
596
- getValue: () => {
597
- let formValue = formBuilder.getValue();
598
- console.log('getValue : ', formValue)
599
- alert('파일은 콘솔 확인\n' + JSON.stringify(formValue));
600
- },
601
- getValuePromise: () => {
602
- formBuilder
603
- .getFormDataValue(true)
604
- .then((aa) => {
605
- console.log(aa);
606
-
607
- for (let [name, value] of aa.entries()) {
608
- console.log(`${name} : ${value}`);
609
- }
610
-
611
- alert("form data console 확인");
612
- })
613
- .catch((e) => {
614
- alert(e.message);
615
- });
616
- },
617
- setFieldItems: () => {
618
- formBuilder.setFieldItems("picture", [
619
- { fileId: "test1", fileName: "aaa.zip" },
620
- { fileId: "test2", fileName: "bbb.zip" },
621
- ]);
622
- formBuilder.setValue({ sex: "X" }, false);
623
- },
624
-
625
- setValue: () => {
626
- formBuilder.setValue({
627
- grid: [
628
- { key: 'aaa', value: 'bbb', cre: 'credId' },
629
- { key: 'key임', value: 'value임', cre: 'credId' }
630
- ]
631
- }, false);
632
- },
633
- };
634
-
635
- formObj.load();
636
-
637
- window.formBuilder = formBuilder;
638
- window.formObj = formObj;
639
- </script>