@agung_dhewe/webapps 1.1.2 → 1.2.4
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/lib/fgta5js-dist/fgta5js-v1.8.5.min.js +11 -0
- package/lib/fgta5js-dist/fgta5js-v1.8.5.min.js.map +1 -0
- package/{libs → lib}/webmodule/module-edit.css +73 -18
- package/{libs → lib}/webmodule/module-list.css +13 -0
- package/lib/webmodule/module-print.css +28 -0
- package/{libs → lib}/webmodule/module.css +13 -6
- package/{libs → lib}/webmodule/module.js +14 -4
- package/lib/webmodule/pagehelper.mjs +129 -0
- package/modules/generator/appgen-io.mjs +153 -76
- package/modules/generator/appgen-ui.mjs +234 -167
- package/modules/generator/generator-designtemplate-def.html +38 -0
- package/modules/generator/generator-designtemplate.html +11 -1492
- package/modules/generator/generator.css +103 -65
- package/modules/generator/generator.mjs +1 -1
- package/modules/generator/generator.svg +98 -0
- package/modules/generator/generatorEdit.mjs +43 -35
- package/modules/generator/generatorList.mjs +27 -0
- package/modules/generator/tpl-designerinfo.html +100 -0
- package/modules/generator/tpl-field-checkbox.html +200 -0
- package/modules/generator/tpl-field-combobox.html +228 -0
- package/modules/generator/tpl-field-datepicker.html +192 -0
- package/modules/generator/tpl-field-filebox.html +189 -0
- package/modules/generator/tpl-field-numberbox.html +218 -0
- package/modules/generator/tpl-field-textbox.html +255 -0
- package/modules/generator/tpl-field-timepicker.html +192 -0
- package/modules/generator/tpl-searchdesign.html +32 -0
- package/modules/generator/tpl-uniquedesign.html +25 -0
- package/modules/login/login.css +10 -2
- package/package.json +5 -3
- package/percobaan/coba-sequencer.js +16 -0
- package/src/api.js +12 -9
- package/src/apis/generator.api.js +35 -23
- package/src/apis/login.api.js +1 -0
- package/src/context.js +12 -2
- package/src/db.js +58 -32
- package/src/generator/createApiModule.js +4 -1
- package/src/generator/createIcon.js +24 -2
- package/src/generator/createLayoutCss.js +107 -0
- package/src/generator/createModuleDetilEditHtml.js +12 -1
- package/src/generator/createModuleDetilEditMjs.js +32 -28
- package/src/generator/createModuleDetilListHtml.js +14 -7
- package/src/generator/createModuleDetilListMjs.js +13 -1
- package/src/generator/createModuleHeaderEditHtml.js +13 -1
- package/src/generator/createModuleHeaderEditMjs.js +23 -2
- package/src/generator/createProgramData.js +3 -2
- package/src/generator/createTable.js +42 -38
- package/src/generator/helper.js +45 -27
- package/src/generator/templates/__rollup-module copy.ejs +90 -0
- package/src/generator/templates/__rollup-module.ejs +102 -31
- package/src/generator/templates/api-module.js.ejs +171 -32
- package/src/generator/templates/layout.css.ejs +24 -0
- package/src/generator/templates/module-ext.html.ejs +1 -1
- package/src/generator/templates/module-ext.mjs.ejs +19 -1
- package/src/generator/templates/module.ejs.ejs +8 -0
- package/src/generator/templates/module.mjs.ejs +42 -5
- package/src/generator/templates/moduleDetilEdit.html.ejs +11 -0
- package/src/generator/templates/moduleDetilEdit.mjs.ejs +135 -30
- package/src/generator/templates/moduleDetilList.html.ejs +2 -1
- package/src/generator/templates/moduleDetilList.mjs.ejs +86 -11
- package/src/generator/templates/moduleHeaderEdit.html.ejs +8 -1
- package/src/generator/templates/moduleHeaderEdit.mjs.ejs +123 -36
- package/src/generator/templates/moduleHeaderList.html.ejs +5 -1
- package/src/generator/templates/moduleHeaderList.mjs.ejs +47 -15
- package/src/generator/trygenerate.js +18 -2
- package/src/generator/worker.js +83 -72
- package/src/helper.js +12 -13
- package/src/logger.js +12 -12
- package/src/notifier.js +29 -0
- package/src/routers/generatorApi.js +9 -3
- package/src/routers/generatorPage.js +3 -1
- package/src/routers/moduleApi.js +1 -1
- package/src/routers/modulePage.js +42 -7
- package/src/sequencerdoc.js +22 -46
- package/src/sequencerline.js +16 -4
- package/src/session.js +69 -33
- package/src/startup.js +47 -10
- package/src/webapps.js +62 -18
- package/templates/_lib_debug.ejs +8 -8
- package/templates/_lib_production.ejs +2 -2
- package/templates/application.page.ejs +43 -8
- package/templates/generator.page.ejs +4 -3
- package/templates/index.page.ejs +2 -2
- package/templates/login.page.ejs +3 -3
- package/libs/fgta5js-dist/fgta5js-v1.8.3.min.js +0 -11
- package/libs/fgta5js-dist/fgta5js-v1.8.3.min.js.map +0 -1
- package/libs/webmodule/pagehelper.mjs +0 -45
- package/modules/generator/generator.png +0 -0
- /package/{libs/fgta5js-dist/fgta5js-v1.8.3.min.css → lib/fgta5js-dist/fgta5js-v1.8.5.min.css} +0 -0
- /package/{libs → lib}/fgta5js-dist/fonts/karla-italic-latin-ext.woff2 +0 -0
- /package/{libs → lib}/fgta5js-dist/fonts/karla-italic-latin.woff2 +0 -0
- /package/{libs → lib}/fgta5js-dist/fonts/karla-normal-latin-ext.woff2 +0 -0
- /package/{libs → lib}/fgta5js-dist/fonts/karla-normal-latin.woff2 +0 -0
- /package/{libs → lib}/fgta5js-dist/fonts/karla.css +0 -0
- /package/{libs → lib}/webmodule/module-footer.css +0 -0
|
@@ -10,24 +10,24 @@ const ATTR_ROWSEARCH = 'data-rowsearch'
|
|
|
10
10
|
|
|
11
11
|
// const Context = {}
|
|
12
12
|
|
|
13
|
-
const isValidName = str => /^[_a-z0-9]+$/.test(str)
|
|
13
|
+
const isValidName = str => /^[_a-z0-9]+$/.test(str);
|
|
14
14
|
|
|
15
15
|
const timestamp = () => {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
16
|
+
const now = new Date();
|
|
17
|
+
const YYYY = now.getFullYear();
|
|
18
|
+
const MM = String(now.getMonth() + 1).padStart(2, "0");
|
|
19
|
+
const DD = String(now.getDate()).padStart(2, "0");
|
|
20
|
+
const HH = String(now.getHours()).padStart(2, "0");
|
|
21
|
+
const mm = String(now.getMinutes()).padStart(2, "0");
|
|
22
|
+
const SS = String(now.getSeconds()).padStart(2, "0");
|
|
23
|
+
return `${YYYY}${MM}${DD}${HH}${mm}${SS}`;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
export default class AppGenIO {
|
|
27
27
|
Setup(config) {
|
|
28
28
|
AppGenIO_Setup(this, config)
|
|
29
29
|
}
|
|
30
|
-
|
|
30
|
+
|
|
31
31
|
|
|
32
32
|
AutoSave() {
|
|
33
33
|
AppGenIO_AutoSave(this)
|
|
@@ -42,14 +42,14 @@ export default class AppGenIO {
|
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
// cek AppGenIO_Setup untuk ovveride fungsi2 di bawah
|
|
45
|
-
AddEntity(data) {} // ini nanti di ovveride saat setup
|
|
46
|
-
startDesign(entity_id) {}
|
|
45
|
+
AddEntity(data) { } // ini nanti di ovveride saat setup
|
|
46
|
+
startDesign(entity_id) { }
|
|
47
47
|
|
|
48
48
|
|
|
49
49
|
#autoSavePaused = false
|
|
50
50
|
get autoSavePaused() { return this.#autoSavePaused }
|
|
51
51
|
pauseAutoSave(autoSavePaused) {
|
|
52
|
-
console.log(autoSavePaused? 'auto save paused' : 'auto save resume')
|
|
52
|
+
console.log(autoSavePaused ? 'auto save paused' : 'auto save resume')
|
|
53
53
|
this.#autoSavePaused = autoSavePaused
|
|
54
54
|
}
|
|
55
55
|
|
|
@@ -83,38 +83,38 @@ export default class AppGenIO {
|
|
|
83
83
|
|
|
84
84
|
function getValueFrom(datafield, query, propertyname) {
|
|
85
85
|
var el = datafield.querySelector(query)
|
|
86
|
-
if (el==null) {
|
|
86
|
+
if (el == null) {
|
|
87
87
|
return null
|
|
88
88
|
}
|
|
89
|
-
if (el[propertyname]===undefined) {
|
|
89
|
+
if (el[propertyname] === undefined) {
|
|
90
90
|
return null
|
|
91
|
-
}
|
|
91
|
+
}
|
|
92
92
|
return el[propertyname]
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
function getCheckedFrom(datafield, query) {
|
|
96
96
|
var el = datafield.querySelector(query)
|
|
97
|
-
if (el==null) {
|
|
97
|
+
if (el == null) {
|
|
98
98
|
return false
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
-
return el.checked===true ? true : false
|
|
101
|
+
return el.checked === true ? true : false
|
|
102
102
|
}
|
|
103
103
|
|
|
104
104
|
function setValueTo(value, datafield, query, propertyname) {
|
|
105
105
|
var el = datafield.querySelector(query)
|
|
106
|
-
if (el==null) {
|
|
106
|
+
if (el == null) {
|
|
107
107
|
return null
|
|
108
108
|
}
|
|
109
|
-
if (el[propertyname]===undefined) {
|
|
109
|
+
if (el[propertyname] === undefined) {
|
|
110
110
|
return null
|
|
111
|
-
}
|
|
111
|
+
}
|
|
112
112
|
el[propertyname] = value
|
|
113
113
|
}
|
|
114
114
|
|
|
115
115
|
function setCheckedTo(checked, datafield, query) {
|
|
116
116
|
var el = datafield.querySelector(query)
|
|
117
|
-
if (el==null) {
|
|
117
|
+
if (el == null) {
|
|
118
118
|
return false
|
|
119
119
|
}
|
|
120
120
|
el.checked = checked
|
|
@@ -122,7 +122,7 @@ function setCheckedTo(checked, datafield, query) {
|
|
|
122
122
|
|
|
123
123
|
function setSelectedTo(value, datafield, query) {
|
|
124
124
|
var el = datafield.querySelector(query)
|
|
125
|
-
if (el==null) {
|
|
125
|
+
if (el == null) {
|
|
126
126
|
return false
|
|
127
127
|
}
|
|
128
128
|
|
|
@@ -145,24 +145,24 @@ function AppGenIO_Setup(self, config) {
|
|
|
145
145
|
|
|
146
146
|
|
|
147
147
|
btn.save = document.getElementById('btnAppGenSave')
|
|
148
|
-
btn.save.addEventListener('click', async (evt)=>{
|
|
148
|
+
btn.save.addEventListener('click', async (evt) => {
|
|
149
149
|
|
|
150
150
|
const data = await AppGenIO_GetCurrentWorkData(self)
|
|
151
151
|
const suggestedName = data.name
|
|
152
152
|
const handle = await window.showSaveFilePicker({
|
|
153
153
|
suggestedName,
|
|
154
154
|
types: [
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
155
|
+
{
|
|
156
|
+
description: "JSON File",
|
|
157
|
+
accept: { "application/json": [".json"] },
|
|
158
|
+
},
|
|
159
159
|
],
|
|
160
160
|
});
|
|
161
161
|
|
|
162
|
-
|
|
162
|
+
|
|
163
163
|
const writable = await handle.createWritable();
|
|
164
|
-
|
|
165
|
-
|
|
164
|
+
await writable.write(JSON.stringify(data, null, 2)); // prettify JSON
|
|
165
|
+
await writable.close();
|
|
166
166
|
|
|
167
167
|
// AppGenIO_Save(self, evt)
|
|
168
168
|
})
|
|
@@ -170,23 +170,23 @@ function AppGenIO_Setup(self, config) {
|
|
|
170
170
|
|
|
171
171
|
|
|
172
172
|
btn.load = document.getElementById('btnAppGenLoad')
|
|
173
|
-
btn.load.addEventListener('click', (evt)=>{
|
|
173
|
+
btn.load.addEventListener('click', (evt) => {
|
|
174
174
|
const input = document.createElement("input");
|
|
175
175
|
input.type = "file";
|
|
176
176
|
input.accept = ".json"; // opsional: filter ekstensi
|
|
177
177
|
input.style.display = "none"; // tidak perlu ditambahkan ke dokumen
|
|
178
|
-
|
|
178
|
+
|
|
179
179
|
input.addEventListener("change", () => {
|
|
180
180
|
if (input.files.length > 0) {
|
|
181
181
|
const file = input.files[0]
|
|
182
182
|
if (!file) return;
|
|
183
|
-
|
|
183
|
+
|
|
184
184
|
const reader = new FileReader();
|
|
185
185
|
reader.onload = function (e) {
|
|
186
186
|
const content = e.target.result;
|
|
187
187
|
AppGenIO_ReadData(self, content)
|
|
188
188
|
};
|
|
189
|
-
reader.readAsText(file);
|
|
189
|
+
reader.readAsText(file);
|
|
190
190
|
}
|
|
191
191
|
});
|
|
192
192
|
|
|
@@ -207,6 +207,9 @@ function AppGenIO_updateCache(data) {
|
|
|
207
207
|
|
|
208
208
|
function AppGenIO_AutoSave(self) {
|
|
209
209
|
// autosave ke local storage per 10 detik
|
|
210
|
+
|
|
211
|
+
// AUTO SAVE tidak digunaka lagi
|
|
212
|
+
/*
|
|
210
213
|
const svr = setInterval(async ()=>{
|
|
211
214
|
try {
|
|
212
215
|
if (!self.autoSavePaused) {
|
|
@@ -218,6 +221,7 @@ function AppGenIO_AutoSave(self) {
|
|
|
218
221
|
console.log(err.message)
|
|
219
222
|
}
|
|
220
223
|
}, 10000)
|
|
224
|
+
*/
|
|
221
225
|
}
|
|
222
226
|
|
|
223
227
|
/*
|
|
@@ -265,7 +269,7 @@ async function AppGenIO_GetCurrentWorkData(self) {
|
|
|
265
269
|
uniques: {},
|
|
266
270
|
search: {},
|
|
267
271
|
}
|
|
268
|
-
|
|
272
|
+
|
|
269
273
|
try {
|
|
270
274
|
AppGenIO_GetDef(self, PROG)
|
|
271
275
|
AppGenIO_GetActions(self, PROG)
|
|
@@ -292,7 +296,7 @@ function AppGenIO_GetDef(self, PROG) {
|
|
|
292
296
|
PROG.id = obj_programid.value
|
|
293
297
|
PROG.appname = obj_appname.value.toLowerCase()
|
|
294
298
|
PROG.name = obj_programname.value.toLowerCase()
|
|
295
|
-
PROG.title = obj_programtitle.value
|
|
299
|
+
PROG.title = obj_programtitle.value
|
|
296
300
|
PROG.directory = obj_directory.value
|
|
297
301
|
PROG.description = obj_programdescription.value
|
|
298
302
|
PROG.icon = obj_icon.style.backgroundImage
|
|
@@ -323,13 +327,13 @@ function AppGenIO_GetEntities(self, PROG) {
|
|
|
323
327
|
tr.classList.remove('field-error')
|
|
324
328
|
try {
|
|
325
329
|
var entity_id = tr.getAttribute('data-entity-id')
|
|
326
|
-
let entity = AppGenIO_GetEntityData(self, entity_id)
|
|
327
|
-
|
|
330
|
+
let entity = AppGenIO_GetEntityData(self, entity_id)
|
|
331
|
+
|
|
328
332
|
if (!isValidName(entity.name)) {
|
|
329
333
|
throw new Error(`entity name '${entity.name}' tidak valid`)
|
|
330
334
|
}
|
|
331
335
|
|
|
332
|
-
if (PROG.entities[entity.name]!==undefined) {
|
|
336
|
+
if (PROG.entities[entity.name] !== undefined) {
|
|
333
337
|
// sudah ada, entiti duplikasi
|
|
334
338
|
throw new Error(`entity ${entity.name} terduplikasi`)
|
|
335
339
|
}
|
|
@@ -363,30 +367,49 @@ function AppGenIO_GetEntityData(self, entity_id) {
|
|
|
363
367
|
var elTable = editor.querySelector('div[name="designer-info"] div[name="col_table"]')
|
|
364
368
|
var elPK = editor.querySelector('div[name="designer-info"] div[name="col_pk"]')
|
|
365
369
|
var elInputDescr = editor.querySelector('div[name="designer-info"] input[name="table-descr"]')
|
|
370
|
+
var elChkSkipRegenerateTable = editor.querySelector('div[name="designer-info"] input[name="skip-regenerate-table"]')
|
|
371
|
+
|
|
372
|
+
|
|
373
|
+
var elChkFormGridLayout = editor.querySelector('div[name="designer-info"] input[name="form-grid-layout"]')
|
|
374
|
+
var elChkFormNew = editor.querySelector('div[name="designer-info"] input[name="allow-form-new"]')
|
|
375
|
+
var elChkFormEdit = editor.querySelector('div[name="designer-info"] input[name="allow-form-edit"]')
|
|
376
|
+
|
|
366
377
|
var elChkRowAdd = editor.querySelector('div[name="designer-info"] input[name="allow-row-add"]')
|
|
367
378
|
var elChkRowRemove = editor.querySelector('div[name="designer-info"] input[name="allow-row-remove"]')
|
|
379
|
+
var elChkRowEdit = editor.querySelector('div[name="designer-info"] input[name="allow-row-edit"]')
|
|
368
380
|
|
|
369
381
|
var elIdMethod = editor.querySelector('div[name="designer-info"] select[name="identifier-method"]')
|
|
370
382
|
var elIdfPrefix = editor.querySelector('div[name="designer-info"] input[name="identifier-prefix"]')
|
|
371
383
|
var elIdBlock = editor.querySelector('div[name="designer-info"] input[name="identifier-block"]')
|
|
372
384
|
var elIdLength = editor.querySelector('div[name="designer-info"] input[name="identifier-length"]')
|
|
373
385
|
|
|
386
|
+
var elBindHTitle = editor.querySelector('div[name="designer-info"] input[name="bind_head_title"]')
|
|
387
|
+
var elBindHDescr = editor.querySelector('div[name="designer-info"] input[name="bind_head_descr"]')
|
|
388
|
+
|
|
374
389
|
|
|
375
390
|
|
|
376
391
|
|
|
377
392
|
entity.name = elName.innerHTML.toLowerCase()
|
|
378
|
-
entity.isheader = entity.name=='header' ? true : false;
|
|
393
|
+
entity.isheader = entity.name == 'header' ? true : false;
|
|
379
394
|
entity.title = elTitle.innerHTML
|
|
380
395
|
entity.table = elTable.innerHTML.toLowerCase()
|
|
381
396
|
entity.pk = elPK.innerHTML.toLowerCase()
|
|
382
397
|
entity.descr = elInputDescr.value
|
|
398
|
+
entity.skipRegenerateTable = elChkSkipRegenerateTable.checked ? true : false
|
|
399
|
+
|
|
400
|
+
entity.formGridLayout = elChkFormGridLayout.checked ? true : false
|
|
401
|
+
entity.allowFormNew = elChkFormNew.checked ? true : false
|
|
402
|
+
entity.allowFormEdit = elChkFormEdit.checked ? true : false
|
|
383
403
|
entity.allowRowAdd = elChkRowAdd.checked ? true : false
|
|
384
404
|
entity.allowRowRemove = elChkRowRemove.checked ? true : false
|
|
405
|
+
entity.allowRowEdit = elChkRowEdit.checked ? true : false
|
|
406
|
+
|
|
385
407
|
entity.identifierMethod = elIdMethod.value
|
|
386
408
|
entity.identifierPrefix = elIdfPrefix.value
|
|
387
409
|
entity.identifierBlock = elIdBlock.value
|
|
388
410
|
entity.identifierLength = elIdLength.value
|
|
389
|
-
|
|
411
|
+
entity.bindHeadTitle = elBindHTitle.value
|
|
412
|
+
entity.bindHeadDescr = elBindHDescr.value
|
|
390
413
|
|
|
391
414
|
entity.Items = {}
|
|
392
415
|
|
|
@@ -399,7 +422,7 @@ function AppGenIO_GetEntityData(self, entity_id) {
|
|
|
399
422
|
|
|
400
423
|
for (let elfield of elAllFields) {
|
|
401
424
|
let field = AppGenIO_GetFieldData(self, elfield)
|
|
402
|
-
if (entity.Items[field.name]!==undefined) {
|
|
425
|
+
if (entity.Items[field.name] !== undefined) {
|
|
403
426
|
elfield.classList.add('field-error')
|
|
404
427
|
throw new Error(`fieldname '${field.name}' terduplikasi!`)
|
|
405
428
|
}
|
|
@@ -425,14 +448,14 @@ function AppGenIO_GetEntityUnique(self, editor) {
|
|
|
425
448
|
const name = tdName.innerHTML
|
|
426
449
|
const fields = tdFields.innerHTML
|
|
427
450
|
|
|
428
|
-
uniques[name] = {name, fields}
|
|
451
|
+
uniques[name] = { name, fields }
|
|
429
452
|
}
|
|
430
453
|
|
|
431
454
|
return uniques
|
|
432
455
|
}
|
|
433
456
|
|
|
434
457
|
function AppGenIO_GetEntitySearch(self, editor) {
|
|
435
|
-
console.log('get entity search')
|
|
458
|
+
// console.log('get entity search')
|
|
436
459
|
|
|
437
460
|
const search = {}
|
|
438
461
|
const tbl = editor.querySelector('table[name="tbl-search"]')
|
|
@@ -445,7 +468,7 @@ function AppGenIO_GetEntitySearch(self, editor) {
|
|
|
445
468
|
const label = tdLabel.innerHTML
|
|
446
469
|
const fields = tdFields.innerHTML
|
|
447
470
|
|
|
448
|
-
search[name] = {name, label, fields}
|
|
471
|
+
search[name] = { name, label, fields }
|
|
449
472
|
}
|
|
450
473
|
|
|
451
474
|
return search
|
|
@@ -455,7 +478,7 @@ function AppGenIO_GetEntitySearch(self, editor) {
|
|
|
455
478
|
|
|
456
479
|
function AppGenIO_GetFieldData(self, el) {
|
|
457
480
|
const field = {}
|
|
458
|
-
|
|
481
|
+
|
|
459
482
|
field.component = el.getAttribute(ATTR_COMPNAME)
|
|
460
483
|
field.data_fieldname = getValueFrom(el, 'input[name="fieldname"]', 'value')
|
|
461
484
|
field.name = field.data_fieldname.toLowerCase()
|
|
@@ -470,8 +493,15 @@ function AppGenIO_GetFieldData(self, el) {
|
|
|
470
493
|
// allownull
|
|
471
494
|
field.data_allownull = getCheckedFrom(el, 'input[name="allownull"]')
|
|
472
495
|
|
|
496
|
+
// multiline
|
|
497
|
+
field.input_multiline = getCheckedFrom(el, 'input[name="multiline"]')
|
|
498
|
+
|
|
499
|
+
|
|
500
|
+
|
|
501
|
+
|
|
502
|
+
|
|
473
503
|
// get defaul value
|
|
474
|
-
if (field.component=='Checkbox') {
|
|
504
|
+
if (field.component == 'Checkbox') {
|
|
475
505
|
var defaultChecked = getCheckedFrom(el, 'input[name="defaultvalue"]')
|
|
476
506
|
field.data_defaultvalue = defaultChecked ? 1 : 0
|
|
477
507
|
} else {
|
|
@@ -492,24 +522,32 @@ function AppGenIO_GetFieldData(self, el) {
|
|
|
492
522
|
field.input_information = getValueFrom(el, 'input[name="information"]', 'value') ?? ''
|
|
493
523
|
field.input_containercss = getValueFrom(el, 'input[name="input-containercss"]', 'value') ?? ''
|
|
494
524
|
field.input_inlinestyle = getValueFrom(el, 'input[name="input-inlinestyle"]', 'value') ?? ''
|
|
495
|
-
|
|
496
|
-
|
|
525
|
+
|
|
526
|
+
|
|
497
527
|
var sel_charcase = el.querySelector('select[name="charcasing"]')
|
|
498
|
-
if (sel_charcase!=null) {
|
|
528
|
+
if (sel_charcase != null) {
|
|
499
529
|
field.input_charcase = sel_charcase.value
|
|
500
530
|
} else {
|
|
501
531
|
field.input_charcase = 'normal'
|
|
502
532
|
}
|
|
503
533
|
|
|
504
534
|
var chk_inputdisabled = el.querySelector('input[name="disabledinform"]')
|
|
505
|
-
field.input_disabled = chk_inputdisabled.checked ? true : false
|
|
535
|
+
field.input_disabled = chk_inputdisabled.checked ? true : false
|
|
506
536
|
|
|
507
|
-
var chk_showingrid =
|
|
537
|
+
var chk_showingrid = el.querySelector('input[name="showingrid"]')
|
|
508
538
|
field.showInGrid = chk_showingrid.checked ? true : false
|
|
509
539
|
|
|
510
|
-
var chk_showinform =
|
|
540
|
+
var chk_showinform = el.querySelector('input[name="showinform"]')
|
|
511
541
|
field.showInForm = chk_showinform.checked ? true : false
|
|
512
542
|
|
|
543
|
+
// desktop position
|
|
544
|
+
field.input_dposrow = getValueFrom(el, 'input[name="input-dposrow"]', 'value') ?? ''
|
|
545
|
+
field.input_dposrowspan = getValueFrom(el, 'input[name="input-dposrowspan"]', 'value') ?? ''
|
|
546
|
+
field.input_dposcol = getValueFrom(el, 'input[name="input-dposcol"]', 'value') ?? ''
|
|
547
|
+
field.input_dposcolspan = getValueFrom(el, 'input[name="input-dposcolspan"]', 'value') ?? ''
|
|
548
|
+
field.input_dposstyle = getValueFrom(el, 'input[name="input-dposstyle"]', 'value') ?? ''
|
|
549
|
+
|
|
550
|
+
|
|
513
551
|
// grid related
|
|
514
552
|
field.grid_formatter = getValueFrom(el, 'input[name="gridformatter"]', 'value') ?? ''
|
|
515
553
|
field.grid_css = getValueFrom(el, 'input[name="gridcss"]', 'value') ?? ''
|
|
@@ -533,7 +571,7 @@ function AppGenIO_GetFieldData(self, el) {
|
|
|
533
571
|
field.Validation.hasCustomValidator = getCheckedFrom(el, 'input[name="hascustomvalidator"]')
|
|
534
572
|
field.Validation.customValidator = getValueFrom(el, 'input[name="validator"]', 'value')
|
|
535
573
|
|
|
536
|
-
|
|
574
|
+
|
|
537
575
|
|
|
538
576
|
field.Reference = {}
|
|
539
577
|
field.Reference.table = getValueFrom(el, 'input[name="ref_table"]', 'value')
|
|
@@ -544,12 +582,13 @@ function AppGenIO_GetFieldData(self, el) {
|
|
|
544
582
|
field.Reference.loaderApiModule = getValueFrom(el, 'input[name="loaderapimodule"]', 'value')
|
|
545
583
|
field.Reference.loaderApiPath = getValueFrom(el, 'input[name="loaderapipath"]', 'value')
|
|
546
584
|
|
|
547
|
-
|
|
585
|
+
|
|
548
586
|
field.Handle = {}
|
|
549
587
|
field.Handle.changed = getCheckedFrom(el, 'input[name="ishandlechanged"]')
|
|
550
588
|
field.Handle.input = getCheckedFrom(el, 'input[name="ishandleinput"]')
|
|
551
589
|
field.Handle.keydown = getCheckedFrom(el, 'input[name="ishandlekeydown"]')
|
|
552
590
|
field.Handle.checked = getCheckedFrom(el, 'input[name="ishandlechecked"]')
|
|
591
|
+
field.Handle.unchecked = getCheckedFrom(el, 'input[name="ishandleunchecked"]')
|
|
553
592
|
field.Handle.selected = getCheckedFrom(el, 'input[name="ishandleselected"]')
|
|
554
593
|
field.Handle.selecting = getCheckedFrom(el, 'input[name="ishandleselecting"]')
|
|
555
594
|
field.Handle.populating = getCheckedFrom(el, 'input[name="ishandlepopulating"]')
|
|
@@ -559,7 +598,7 @@ function AppGenIO_GetFieldData(self, el) {
|
|
|
559
598
|
if (!isValidName(field.data_fieldname)) {
|
|
560
599
|
el.classList.add('field-error')
|
|
561
600
|
throw new Error('Nama Field is not valid, gunakan huruf kecil, karakter special _ atau angka')
|
|
562
|
-
}
|
|
601
|
+
}
|
|
563
602
|
|
|
564
603
|
return field
|
|
565
604
|
}
|
|
@@ -598,7 +637,7 @@ async function AppGenIO_Load(self, data) {
|
|
|
598
637
|
const obj_programdescription = document.getElementById('obj_programdescription')
|
|
599
638
|
const obj_icon = document.getElementById('upload-icon')
|
|
600
639
|
|
|
601
|
-
obj_programid.value = data.id
|
|
640
|
+
obj_programid.value = data.id
|
|
602
641
|
obj_appname.value = data.appname
|
|
603
642
|
obj_programname.value = data.name
|
|
604
643
|
obj_programtitle.value = data.title
|
|
@@ -622,11 +661,14 @@ async function AppGenIO_Load(self, data) {
|
|
|
622
661
|
const elEntityDesign = document.getElementById('entities-design')
|
|
623
662
|
elEntityDesign.innerHTML = ''
|
|
624
663
|
|
|
625
|
-
const tbl_entity =document.getElementById('tbl_entity')
|
|
664
|
+
const tbl_entity = document.getElementById('tbl_entity')
|
|
626
665
|
const tbody = tbl_entity.querySelector('tbody')
|
|
627
666
|
var de = document.getElementById('entities-design')
|
|
628
|
-
|
|
629
|
-
|
|
667
|
+
|
|
668
|
+
let firstEntity = null
|
|
669
|
+
for (let entityname in data.entities) {
|
|
670
|
+
let entity = data.entities[entityname]
|
|
671
|
+
|
|
630
672
|
|
|
631
673
|
|
|
632
674
|
await self.AddEntity({
|
|
@@ -642,28 +684,45 @@ async function AppGenIO_Load(self, data) {
|
|
|
642
684
|
|
|
643
685
|
const btn = tbody.querySelector(`[name="col_btndesign"][${ATTR_ENTITYID}="${entity.id}"]`)
|
|
644
686
|
btn.click()
|
|
645
|
-
|
|
687
|
+
|
|
688
|
+
|
|
689
|
+
if (firstEntity == null) {
|
|
690
|
+
firstEntity = entity
|
|
691
|
+
firstEntity.btnDesign = btn
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
|
|
646
695
|
|
|
647
696
|
// isikan data entity
|
|
648
|
-
// TODO: isikan data entity
|
|
649
697
|
const editor = de.querySelector(`div[name="entity-editor"][${ATTR_ENTITYID}="${entity.id}"]`)
|
|
650
698
|
setValueTo(entity.descr, editor, 'div[name="designer-info"] input[name="table-descr"]', 'value')
|
|
651
|
-
setCheckedTo(entity.
|
|
652
|
-
|
|
699
|
+
setCheckedTo(entity.skipRegenerateTable ?? false, editor, 'div[name="designer-info"] input[name="skip-regenerate-table"]')
|
|
700
|
+
|
|
701
|
+
setCheckedTo(entity.formGridLayout ?? false, editor, 'div[name="designer-info"] input[name="form-grid-layout"]')
|
|
702
|
+
setCheckedTo(entity.allowFormNew ?? true, editor, 'div[name="designer-info"] input[name="allow-form-new"]')
|
|
703
|
+
setCheckedTo(entity.allowFormEdit ?? true, editor, 'div[name="designer-info"] input[name="allow-form-edit"]')
|
|
704
|
+
setCheckedTo(entity.allowRowAdd ?? true, editor, 'div[name="designer-info"] input[name="allow-row-add"]')
|
|
705
|
+
setCheckedTo(entity.allowRowRemove ?? true, editor, 'div[name="designer-info"] input[name="allow-row-remove"]')
|
|
706
|
+
setCheckedTo(entity.allowRowEdit ?? true, editor, 'div[name="designer-info"] input[name="allow-row-edit"]')
|
|
707
|
+
|
|
653
708
|
setValueTo(entity.identifierMethod, editor, 'div[name="designer-info"] select[name="identifier-method"]', 'value')
|
|
654
709
|
setValueTo(entity.identifierPrefix, editor, 'div[name="designer-info"] input[name="identifier-prefix"]', 'value')
|
|
655
|
-
setValueTo(entity.identifierBlock
|
|
710
|
+
setValueTo(entity.identifierBlock, editor, 'div[name="designer-info"] input[name="identifier-block"]', 'value')
|
|
656
711
|
setValueTo(entity.identifierLength, editor, 'div[name="designer-info"] input[name="identifier-length"]', 'value')
|
|
657
712
|
|
|
713
|
+
setValueTo(entity.bindHeadTitle ?? '', editor, 'div[name="designer-info"] input[name="bind_head_title"]', 'value')
|
|
714
|
+
setValueTo(entity.bindHeadDescr ?? '', editor, 'div[name="designer-info"] input[name="bind_head_descr"]', 'value')
|
|
715
|
+
|
|
716
|
+
|
|
658
717
|
// ambil drop target dari entity
|
|
659
718
|
let droptarget = elEntityDesign.querySelector(`div[name="entity-editor"][${ATTR_ENTITYID}="${entity.id}"] div[name="drop-target"]`)
|
|
660
|
-
|
|
719
|
+
|
|
661
720
|
// console.log(entity)
|
|
662
721
|
for (var item_id in entity.Items) {
|
|
663
722
|
let item = entity.Items[item_id]
|
|
664
723
|
|
|
665
724
|
var componentname = item.component
|
|
666
|
-
|
|
725
|
+
|
|
667
726
|
let comp = Components[componentname]
|
|
668
727
|
let datafield = self.addComponentToDesigner(droptarget, comp)
|
|
669
728
|
|
|
@@ -676,7 +735,7 @@ async function AppGenIO_Load(self, data) {
|
|
|
676
735
|
let uniq = entity.Uniques[uniq_name]
|
|
677
736
|
let name = uniq.name
|
|
678
737
|
let fields = uniq.fields
|
|
679
|
-
Context.addUnique({uniq_name:name, uniq_fields:fields}, entity.id)
|
|
738
|
+
Context.addUnique({ uniq_name: name, uniq_fields: fields }, entity.id)
|
|
680
739
|
}
|
|
681
740
|
|
|
682
741
|
// search
|
|
@@ -687,13 +746,21 @@ async function AppGenIO_Load(self, data) {
|
|
|
687
746
|
let fields = search.fields
|
|
688
747
|
Context.addSearch({
|
|
689
748
|
criteria_name: name,
|
|
690
|
-
criteria_label: label,
|
|
691
|
-
criteria_fields:fields
|
|
749
|
+
criteria_label: label,
|
|
750
|
+
criteria_fields: fields
|
|
692
751
|
}, entity.id)
|
|
693
752
|
}
|
|
694
|
-
|
|
753
|
+
|
|
695
754
|
}
|
|
696
755
|
|
|
756
|
+
|
|
757
|
+
// console.log(firstEntity)
|
|
758
|
+
setTimeout(() => {
|
|
759
|
+
console.log(firstEntity)
|
|
760
|
+
firstEntity.btnDesign.click()
|
|
761
|
+
}, 500)
|
|
762
|
+
|
|
763
|
+
|
|
697
764
|
}
|
|
698
765
|
|
|
699
766
|
function AppGenIO_FillDataField(self, datafield, field) {
|
|
@@ -708,7 +775,9 @@ function AppGenIO_FillDataField(self, datafield, field) {
|
|
|
708
775
|
|
|
709
776
|
setCheckedTo(field.data_allownull, datafield, 'input[name="allownull"]')
|
|
710
777
|
|
|
711
|
-
|
|
778
|
+
setCheckedTo(field.input_multiline, datafield, 'input[name="multiline"]')
|
|
779
|
+
|
|
780
|
+
if (field.component == 'Checkbox') {
|
|
712
781
|
setCheckedTo(field.data_defaultvalue, datafield, 'input[name="defaultvalue"]')
|
|
713
782
|
} else {
|
|
714
783
|
setValueTo(field.data_defaultvalue, datafield, 'input[name="defaultvalue"]', 'value')
|
|
@@ -716,7 +785,7 @@ function AppGenIO_FillDataField(self, datafield, field) {
|
|
|
716
785
|
setValueTo(field.description, datafield, 'input[name="description"]', 'value')
|
|
717
786
|
|
|
718
787
|
|
|
719
|
-
if (field.input_index===undefined) {
|
|
788
|
+
if (field.input_index === undefined) {
|
|
720
789
|
field.input_index = '0'
|
|
721
790
|
}
|
|
722
791
|
|
|
@@ -737,6 +806,13 @@ function AppGenIO_FillDataField(self, datafield, field) {
|
|
|
737
806
|
setCheckedTo(field.showInForm, datafield, 'input[name="showinform"]')
|
|
738
807
|
|
|
739
808
|
|
|
809
|
+
// desktop position
|
|
810
|
+
setValueTo(field.input_dposrow ?? 'auto', datafield, 'input[name="input-dposrow"]', 'value')
|
|
811
|
+
setValueTo(field.input_dposrowspan ?? '', datafield, 'input[name="input-dposrowspan"]', 'value')
|
|
812
|
+
setValueTo(field.input_dposcol ?? '1', datafield, 'input[name="input-dposcol"]', 'value')
|
|
813
|
+
setValueTo(field.input_dposcolspan ?? '2', datafield, 'input[name="input-dposcolspan"]', 'value')
|
|
814
|
+
setValueTo(field.input_dposstyle ?? '', datafield, 'input[name="input-dposstyle"]', 'value')
|
|
815
|
+
|
|
740
816
|
// grid related
|
|
741
817
|
setValueTo(field.grid_formatter, datafield, 'input[name="gridformatter"]', 'value')
|
|
742
818
|
setValueTo(field.grid_css, datafield, 'input[name="gridcss"]', 'value')
|
|
@@ -761,10 +837,10 @@ function AppGenIO_FillDataField(self, datafield, field) {
|
|
|
761
837
|
|
|
762
838
|
setValueTo(field.Reference.table, datafield, 'input[name="ref_table"]', 'value')
|
|
763
839
|
setValueTo(field.Reference.pk, datafield, 'input[name="ref_id"]', 'value')
|
|
764
|
-
|
|
840
|
+
|
|
765
841
|
// TODO: ini nanti kalau perlu diperbaiki disini
|
|
766
842
|
// setValueTo(field.Reference.bindingValue, datafield, 'input[name="ref_id"]', 'value')
|
|
767
|
-
|
|
843
|
+
|
|
768
844
|
setValueTo(field.Reference.bindingDisplay, datafield, 'input[name="ref_display"]', 'value')
|
|
769
845
|
setValueTo(field.Reference.bindingText, datafield, 'input[name="ref_text"]', 'value')
|
|
770
846
|
|
|
@@ -776,6 +852,7 @@ function AppGenIO_FillDataField(self, datafield, field) {
|
|
|
776
852
|
setCheckedTo(field.Handle.input, datafield, 'input[name="ishandleinput"]')
|
|
777
853
|
setCheckedTo(field.Handle.keydown, datafield, 'input[name="ishandlekeydown"]')
|
|
778
854
|
setCheckedTo(field.Handle.checked, datafield, 'input[name="ishandlechecked"]')
|
|
855
|
+
setCheckedTo(field.Handle.unchecked, datafield, 'input[name="ishandleunchecked"]')
|
|
779
856
|
setCheckedTo(field.Handle.selected, datafield, 'input[name="ishandleselected"]')
|
|
780
857
|
setCheckedTo(field.Handle.selecting, datafield, 'input[name="ishandleselecting"]')
|
|
781
858
|
setCheckedTo(field.Handle.populating, datafield, 'input[name="ishandlepopulating"]')
|