@agung_dhewe/webapps 1.1.2 → 1.2.3
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 +45 -38
- package/src/generator/helper.js +45 -27
- package/src/generator/templates/__rollup-module.ejs +1 -1
- 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 +32 -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 +39 -6
- 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
|
@@ -4,7 +4,7 @@ import * as Extender from './generator-ext.mjs'
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
const CurrentState = {}
|
|
7
|
-
const Crsl =
|
|
7
|
+
const Crsl = Context.Crsl
|
|
8
8
|
const CurrentSectionId = Context.Sections.generatorEdit
|
|
9
9
|
const CurrentSection = Crsl.Items[CurrentSectionId]
|
|
10
10
|
|
|
@@ -22,16 +22,16 @@ export const Section = CurrentSection
|
|
|
22
22
|
export async function init(self, args) {
|
|
23
23
|
console.log('initializing generatorEdit ...')
|
|
24
24
|
|
|
25
|
-
CurrentSection.addEventListener($fgta5.Section.EVT_BACKBUTTONCLICK, async (evt)=>{
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
CurrentSection.addEventListener($fgta5.Section.EVT_BACKBUTTONCLICK, async (evt) => {
|
|
26
|
+
backToList(self, evt)
|
|
27
|
+
})
|
|
28
28
|
|
|
29
29
|
|
|
30
|
-
btn_new.addEventListener('click', (evt)=>{ btn_new_click(self, evt)})
|
|
31
|
-
btn_save.addEventListener('click', (evt)=>{ btn_save_click(self, evt)})
|
|
32
|
-
btn_generate.addEventListener('click', (evt)=>{ btn_generate_click(self, evt) })
|
|
30
|
+
btn_new.addEventListener('click', (evt) => { btn_new_click(self, evt) })
|
|
31
|
+
btn_save.addEventListener('click', (evt) => { btn_save_click(self, evt) })
|
|
32
|
+
btn_generate.addEventListener('click', (evt) => { btn_generate_click(self, evt) })
|
|
33
33
|
|
|
34
|
-
obj_appname.addEventListener('change', (evt)=>{ obj_appname_change(self, evt) })
|
|
34
|
+
obj_appname.addEventListener('change', (evt) => { obj_appname_change(self, evt) })
|
|
35
35
|
|
|
36
36
|
await ui.Init(Context)
|
|
37
37
|
|
|
@@ -45,13 +45,16 @@ export async function openSelectedData(self, params) {
|
|
|
45
45
|
let mask = $fgta5.Modal.createMask()
|
|
46
46
|
try {
|
|
47
47
|
const id = params.keyvalue
|
|
48
|
-
|
|
48
|
+
|
|
49
49
|
console.log(params)
|
|
50
50
|
const result = await openData(self, id)
|
|
51
51
|
const data = result.generator_data
|
|
52
52
|
|
|
53
53
|
data.id = result.generator_id
|
|
54
|
-
|
|
54
|
+
|
|
55
|
+
const el_title = document.getElementById('application-title')
|
|
56
|
+
el_title.innerHTML = `Generator: ${data.title}`
|
|
57
|
+
|
|
55
58
|
ui.load(data)
|
|
56
59
|
} catch (err) {
|
|
57
60
|
throw err
|
|
@@ -63,11 +66,14 @@ export async function openSelectedData(self, params) {
|
|
|
63
66
|
|
|
64
67
|
|
|
65
68
|
export function keyboardAction(self, actionName) {
|
|
66
|
-
if (actionName=='save') {
|
|
69
|
+
if (actionName == 'save') {
|
|
67
70
|
btn_save.click()
|
|
68
|
-
} else if (actionName=='escape') {
|
|
71
|
+
} else if (actionName == 'escape') {
|
|
69
72
|
const listSection = Crsl.Items[Context.Sections.generatorList]
|
|
70
|
-
listSection.show({direction:1})
|
|
73
|
+
listSection.show({ direction: 1 })
|
|
74
|
+
|
|
75
|
+
const el_title = document.getElementById('application-title')
|
|
76
|
+
el_title.innerHTML = `Generator`
|
|
71
77
|
}
|
|
72
78
|
}
|
|
73
79
|
|
|
@@ -88,6 +94,8 @@ async function backToList(self, evt) {
|
|
|
88
94
|
let goback = true
|
|
89
95
|
if (goback) {
|
|
90
96
|
evt.detail.fn_ShowNextSection()
|
|
97
|
+
const el_title = document.getElementById('application-title')
|
|
98
|
+
el_title.innerHTML = `Generator`
|
|
91
99
|
}
|
|
92
100
|
}
|
|
93
101
|
|
|
@@ -96,11 +104,11 @@ async function obj_appname_change(self, evt) {
|
|
|
96
104
|
const el = evt.target
|
|
97
105
|
const value = el.value
|
|
98
106
|
|
|
99
|
-
if (Context.appsUrls[value]===undefined) {
|
|
107
|
+
if (Context.appsUrls[value] === undefined) {
|
|
100
108
|
const resp = await $fgta5.MessageBox.error(`nama apps '${value}' tidak teregister di daftar apps`)
|
|
101
109
|
return
|
|
102
110
|
}
|
|
103
|
-
|
|
111
|
+
|
|
104
112
|
// console.log(Context.appsUrls[value].directory)
|
|
105
113
|
obj_directory.value = Context.appsUrls[value].directory
|
|
106
114
|
}
|
|
@@ -108,17 +116,17 @@ async function obj_appname_change(self, evt) {
|
|
|
108
116
|
|
|
109
117
|
async function btn_new_click(self, evt) {
|
|
110
118
|
console.log('btn_new_click')
|
|
111
|
-
const sourceSection = evt.target.getAttribute('data-sectionsource')
|
|
119
|
+
const sourceSection = evt.target.getAttribute('data-sectionsource')
|
|
112
120
|
const generatorList = self.Modules.generatorList
|
|
113
121
|
const listsecid = generatorList.Section.Id
|
|
114
|
-
const fromListSection = sourceSection===listsecid
|
|
122
|
+
const fromListSection = sourceSection === listsecid
|
|
115
123
|
if (fromListSection) {
|
|
116
124
|
// btn new di klik dari list
|
|
117
125
|
await CurrentSection.show()
|
|
118
126
|
|
|
119
127
|
// cek id, jika tidak kosong, perlu di-reset
|
|
120
128
|
const id = document.getElementById('obj_programid')
|
|
121
|
-
if (id!='') {
|
|
129
|
+
if (id != '') {
|
|
122
130
|
await ui.reset()
|
|
123
131
|
await ui.NewData()
|
|
124
132
|
ui.updateCache()
|
|
@@ -126,19 +134,19 @@ async function btn_new_click(self, evt) {
|
|
|
126
134
|
|
|
127
135
|
} else {
|
|
128
136
|
const resp = await $fgta5.MessageBox.confirm('apakah anda yakin akan membuat data baru?')
|
|
129
|
-
if (resp=='ok') {
|
|
137
|
+
if (resp == 'ok') {
|
|
130
138
|
await ui.reset()
|
|
131
139
|
await ui.NewData()
|
|
132
140
|
ui.updateCache()
|
|
133
141
|
}
|
|
134
|
-
}
|
|
135
|
-
|
|
142
|
+
}
|
|
143
|
+
|
|
136
144
|
}
|
|
137
145
|
|
|
138
146
|
async function btn_save_click(self, evt) {
|
|
139
147
|
console.log('btn_save_click')
|
|
140
148
|
const data = await ui.getCurrentData()
|
|
141
|
-
|
|
149
|
+
|
|
142
150
|
let mask = $fgta5.Modal.createMask()
|
|
143
151
|
try {
|
|
144
152
|
const result = await Save(self, data)
|
|
@@ -155,15 +163,15 @@ async function btn_save_click(self, evt) {
|
|
|
155
163
|
}
|
|
156
164
|
|
|
157
165
|
|
|
158
|
-
async function btn_generate_click(self, evt)
|
|
166
|
+
async function btn_generate_click(self, evt) {
|
|
159
167
|
console.log('btn_generate_click')
|
|
160
168
|
const data = await ui.getCurrentData()
|
|
161
|
-
|
|
169
|
+
|
|
162
170
|
let mask = $fgta5.Modal.createMask()
|
|
163
171
|
btn_generate.disabled = true
|
|
164
172
|
ui.pauseAutoSave(true)
|
|
165
173
|
try {
|
|
166
|
-
if (data.id=='') {
|
|
174
|
+
if (data.id == '') {
|
|
167
175
|
throw new Error('save dahulu sebelum generate')
|
|
168
176
|
}
|
|
169
177
|
const result = await Generate(self, data, mask)
|
|
@@ -185,32 +193,32 @@ async function btn_generate_click(self, evt) {
|
|
|
185
193
|
async function Save(self, data) {
|
|
186
194
|
const url = `/${Context.moduleName}/save`
|
|
187
195
|
try {
|
|
188
|
-
const result = await Module.apiCall(url, { data })
|
|
189
|
-
return result
|
|
196
|
+
const result = await Module.apiCall(url, { data })
|
|
197
|
+
return result
|
|
190
198
|
} catch (err) {
|
|
191
|
-
throw err
|
|
192
|
-
}
|
|
199
|
+
throw err
|
|
200
|
+
}
|
|
193
201
|
}
|
|
194
202
|
|
|
195
203
|
async function Generate(self, data, mask) {
|
|
196
|
-
return new Promise(async (resolve, reject)=>{
|
|
204
|
+
return new Promise(async (resolve, reject) => {
|
|
197
205
|
const jobId = Date.now()
|
|
198
206
|
const clientId = `${Context.notifierId}-${jobId}`
|
|
199
207
|
const notifierSocket = Context.notifierSocket
|
|
200
|
-
|
|
201
|
-
|
|
208
|
+
const ws = new WebSocket(`${notifierSocket}/?clientId=${clientId}`);
|
|
209
|
+
|
|
202
210
|
ws.onmessage = (event) => {
|
|
203
211
|
const data = JSON.parse(event.data);
|
|
204
212
|
if (data.status === 'done') {
|
|
205
213
|
ws.close();
|
|
206
214
|
resolve(data);
|
|
207
|
-
} else if (data.status=='error') {
|
|
215
|
+
} else if (data.status == 'error') {
|
|
208
216
|
ws.close();
|
|
209
217
|
reject(new Error(data.info.message))
|
|
210
|
-
} else if (data.status=='message') {
|
|
218
|
+
} else if (data.status == 'message') {
|
|
211
219
|
console.log(data)
|
|
212
220
|
mask.setText(data.info.message)
|
|
213
|
-
} else if (data.status==='timeout') {
|
|
221
|
+
} else if (data.status === 'timeout') {
|
|
214
222
|
ws.close();
|
|
215
223
|
reject(new Error('generate timeout'));
|
|
216
224
|
}
|
|
@@ -11,6 +11,9 @@ const tbl = new $fgta5.Gridview('generatorList-tbl')
|
|
|
11
11
|
const pnl_search = document.getElementById('generatorList-pnl_search')
|
|
12
12
|
const btn_gridload = new $fgta5.ActionButton('generatorList-btn_gridload')
|
|
13
13
|
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
14
17
|
export const Section = CurrentSection
|
|
15
18
|
export const SearchParams = {}
|
|
16
19
|
|
|
@@ -50,6 +53,30 @@ export async function init(self, args) {
|
|
|
50
53
|
} else {
|
|
51
54
|
console.warn(`'initSearchParams' tidak diimplementasikan di extender`)
|
|
52
55
|
}
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
// keyboard listener in search parameter
|
|
59
|
+
const el_txt_appname = document.getElementById('generatorList-txt_appname')
|
|
60
|
+
const el_txt_searchtext = document.getElementById('generatorList-txt_searchtext')
|
|
61
|
+
const el_btn_search = document.getElementById('generatorList-btn_gridload')
|
|
62
|
+
|
|
63
|
+
el_txt_appname.addEventListener('keydown', evt=>{
|
|
64
|
+
if (evt.key=='Enter') {
|
|
65
|
+
el_txt_searchtext.focus()
|
|
66
|
+
evt.stopPropagation()
|
|
67
|
+
evt.preventDefault()
|
|
68
|
+
}
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
el_txt_searchtext.addEventListener('keydown', evt=>{
|
|
72
|
+
if (evt.key=='Enter') {
|
|
73
|
+
el_btn_search.click()
|
|
74
|
+
el_txt_searchtext.blur()
|
|
75
|
+
evt.stopPropagation()
|
|
76
|
+
evt.preventDefault()
|
|
77
|
+
}
|
|
78
|
+
})
|
|
79
|
+
|
|
53
80
|
|
|
54
81
|
} catch (err) {
|
|
55
82
|
throw err
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
<!-- DESIGNER INFO -->
|
|
2
|
+
<div name="designer-info" class="designer-info">
|
|
3
|
+
<div name="col_title" data-tag="content">
|
|
4
|
+
{title}
|
|
5
|
+
</div>
|
|
6
|
+
|
|
7
|
+
<div data-tag="label" style="margin-top: 8px">Name</div>
|
|
8
|
+
<div data-tag="content" name="col_name" style="margin-top: 8px">{name}</div>
|
|
9
|
+
|
|
10
|
+
<div data-tag="label" style="margin-top: 15px">Table</div>
|
|
11
|
+
<div data-tag="content" name="col_table" style="margin-top: 15px">{table}</div>
|
|
12
|
+
|
|
13
|
+
<div data-tag="label" style="margin-top: 5px">PK</div>
|
|
14
|
+
<div data-tag="content" name="col_pk" style="margin-top: 5px">{pk}</div>
|
|
15
|
+
|
|
16
|
+
<div data-tag="label" style="margin-top: 10px">Table Desc</div>
|
|
17
|
+
<div data-tag="content" style="border: 0; margin-top: 10px">
|
|
18
|
+
<input name="table-descr" type="text" style="padding: 3px 0 3px 3px; width: 100%; background-color: #fcffd1; border-width: 0 0 1px 0">
|
|
19
|
+
</div>
|
|
20
|
+
|
|
21
|
+
<div data-tag="label"> </div>
|
|
22
|
+
<div data-tag="content" style="border: 0; margin-top: 5px; display: flex; gap: 20px">
|
|
23
|
+
<label style="font-weight: normal;">
|
|
24
|
+
<input type="checkbox" name="skip-regenerate-table">
|
|
25
|
+
Skip Regenerate Table
|
|
26
|
+
</label>
|
|
27
|
+
</div>
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
<div data-tag="label" style="margin-top: 15px" data-bindhead>bind h.title</div>
|
|
32
|
+
<div data-tag="content" style="border: 0; margin-top: 15px" data-bindhead>
|
|
33
|
+
<input name="bind_head_title" type="text" style="padding: 3px 0 3px 3px; width: 300px;">
|
|
34
|
+
</div>
|
|
35
|
+
|
|
36
|
+
<div data-tag="label" style="margin-top: 15px" data-bindhead>bind h.descr</div>
|
|
37
|
+
<div data-tag="content" style="border: 0; margin-top: 15px" data-bindhead>
|
|
38
|
+
<input name="bind_head_descr" type="text" style="padding: 3px 0 3px 3px; width: 300px;">
|
|
39
|
+
</div>
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
<div data-tag="label" style="margin-top: 15px">Form</div>
|
|
43
|
+
<div data-tag="content" style="border: 0; margin-top: 15px; display: flex; gap: 20px">
|
|
44
|
+
<label>
|
|
45
|
+
<input type="checkbox" name="form-grid-layout">
|
|
46
|
+
Grid Layout
|
|
47
|
+
</label>
|
|
48
|
+
<label data-entity-header>
|
|
49
|
+
<input type="checkbox" name="allow-form-new">
|
|
50
|
+
Allow New Data
|
|
51
|
+
</label>
|
|
52
|
+
<label data-entity-header>
|
|
53
|
+
<input type="checkbox" name="allow-form-edit">
|
|
54
|
+
Allow Edit Data
|
|
55
|
+
</label>
|
|
56
|
+
</div>
|
|
57
|
+
|
|
58
|
+
<div data-tag="label" style="margin-top: 15px" data-control>Data Control</div>
|
|
59
|
+
<div data-tag="content" style="border: 0; margin-top: 15px; display: flex; gap: 20px" data-control>
|
|
60
|
+
<label>
|
|
61
|
+
<input type="checkbox" name="allow-row-add">
|
|
62
|
+
Allow Add Row
|
|
63
|
+
</label>
|
|
64
|
+
<label>
|
|
65
|
+
<input type="checkbox" name="allow-row-remove">
|
|
66
|
+
Allow Remove Row
|
|
67
|
+
</label>
|
|
68
|
+
<label>
|
|
69
|
+
<input type="checkbox" name="allow-row-edit">
|
|
70
|
+
Allow Edit Row
|
|
71
|
+
</label>
|
|
72
|
+
</div>
|
|
73
|
+
|
|
74
|
+
<div data-tag="label" style="margin-top: 15px" data-autoid>Row Identifier</div>
|
|
75
|
+
<div data-tag="content" style="border: 0; margin-top: 15px; display: flex; gap: 20px" data-autoid>
|
|
76
|
+
<div>
|
|
77
|
+
<select name="identifier-method">
|
|
78
|
+
<option value="manual" selected>Manual</option>
|
|
79
|
+
<option value="auto-by-default">Auto By Default (Numeric Only)</option>
|
|
80
|
+
<option value="auto-always">Auto Always (Numeric Only)</option>
|
|
81
|
+
<option value="auto-yearly">Auto Yearly (for Document) </option>
|
|
82
|
+
<option value="auto-monthly">Auto Monthly (for Document)</option>
|
|
83
|
+
<option value="auto-yearly-short">Auto Yearly (short, for entity)</option>
|
|
84
|
+
<option value="auto-custom">Auto Custom Sequencer</option>
|
|
85
|
+
</select>
|
|
86
|
+
|
|
87
|
+
<label style="margin-left: 40px; margin-right: 5px;">Prefix (doc_id)</label>
|
|
88
|
+
<input name="identifier-prefix" type="text" style="width: 40px; padding: 3px 0 3px 3px;" maxlength="4">
|
|
89
|
+
|
|
90
|
+
<label style="margin-left: 15px; margin-right: 5px;">Block</label>
|
|
91
|
+
<input name="identifier-block" type="text" style="width: 30px; padding: 3px 0 3px 3px;" value="3">
|
|
92
|
+
|
|
93
|
+
<label style="margin-left: 15px; margin-right: 5px;">Length</label>
|
|
94
|
+
<input name="identifier-length" type="number" style="width: 30px; padding: 3px 0 3px 3px;" value="6">
|
|
95
|
+
</div>
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
</div>
|
|
99
|
+
|
|
100
|
+
</div>
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
<!-- CHECKBOX -->
|
|
2
|
+
<div name="design-data-field" class="design-data-field" data-template="checkbox">
|
|
3
|
+
<div name="component-type" data-detil data-fieldtitle>
|
|
4
|
+
<div style="display: flex; justify-content: left; align-items: center; gap: 5px;" field-handle-bar class="field-handle-bar">
|
|
5
|
+
<div name="icon-pk" class="design-data-field-icon-pk"></div>
|
|
6
|
+
<div name="icon" class="design-data-field-icon">
|
|
7
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><path d="M3 8h42v32H3z" style="fill:#fff;stroke:#000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round"/><path d="m12 24.5 8 9.5 16-19" style="fill:none;stroke:#000;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none"/></svg>
|
|
8
|
+
</div>
|
|
9
|
+
<div name="title">
|
|
10
|
+
Checkbox
|
|
11
|
+
</div>
|
|
12
|
+
<div class="field-remove-button">
|
|
13
|
+
</div>
|
|
14
|
+
</div>
|
|
15
|
+
</div>
|
|
16
|
+
<div data-detil data-fieldform>
|
|
17
|
+
<!-- 1 2 3 4 5 6 -->
|
|
18
|
+
<label>Field name</label><div>
|
|
19
|
+
<input type="text" name="fieldname"></div>
|
|
20
|
+
|
|
21
|
+
<label>Type</label>
|
|
22
|
+
<div>
|
|
23
|
+
<select name="datatype">
|
|
24
|
+
<option value="boolean" selected>boolean</option>
|
|
25
|
+
</select>
|
|
26
|
+
</div>
|
|
27
|
+
|
|
28
|
+
<div></div>
|
|
29
|
+
<div></div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
<label>Default Value</label>
|
|
34
|
+
<div>
|
|
35
|
+
<label>
|
|
36
|
+
<input name="defaultvalue" type="checkbox" value="1">
|
|
37
|
+
Checked
|
|
38
|
+
</label>
|
|
39
|
+
</div>
|
|
40
|
+
<div></div>
|
|
41
|
+
<div></div>
|
|
42
|
+
<div>
|
|
43
|
+
<input name="allownull" type="checkbox" value="1" style="transform: translateY(2px); visibility: hidden;" disabled> <!-- AllowNull-->
|
|
44
|
+
</div>
|
|
45
|
+
<div>
|
|
46
|
+
<input type="text" style="visibility: hidden;">
|
|
47
|
+
</div>
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
<label>Description</label>
|
|
51
|
+
<div style="grid-column: span 5;"><input type="text" name="description"></div>
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
<div>
|
|
57
|
+
<input type="text" style="visibility: hidden;"> <!-- agar tinggi baris tidak terlihat sempet, karena di baris ini hanya checkbox-->
|
|
58
|
+
</div>
|
|
59
|
+
<div style="grid-column: span 5; display: flex; align-items: center;">
|
|
60
|
+
<label>
|
|
61
|
+
<input type="checkbox" name="showingrid" style="transform: translateY(2px);" checked >
|
|
62
|
+
Show in GridView
|
|
63
|
+
</label>
|
|
64
|
+
<label style="margin-left: 40px">
|
|
65
|
+
<input type="checkbox" name="showinform" style="transform: translateY(2px);" checked>
|
|
66
|
+
Show in Form
|
|
67
|
+
</label>
|
|
68
|
+
<label style="margin-left: 20px">
|
|
69
|
+
<input type="checkbox" name="disabledinform" style="transform: translateY(2px);">
|
|
70
|
+
Disabled
|
|
71
|
+
</label>
|
|
72
|
+
</div>
|
|
73
|
+
<div style="display: block; height: 1rem; grid-column: span 6;"></div>
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
<label>Object Name</label>
|
|
77
|
+
<input type="text" name="objectname">
|
|
78
|
+
<div style="grid-column: span 4;"></div>
|
|
79
|
+
|
|
80
|
+
<label>D.Position</label>
|
|
81
|
+
<div style="grid-column: span 5; display: flex; column-gap: 10px; align-items: center;">
|
|
82
|
+
<label style="transform: translateY(-1px); margin-left: 20px">Row</label>
|
|
83
|
+
<input type="text" name="input-dposrow" style="width: 30px" value="auto">
|
|
84
|
+
|
|
85
|
+
<label style="transform: translateY(-1px);">Span</label>
|
|
86
|
+
<input type="text" name="input-dposrowspan" style="width: 30px">
|
|
87
|
+
|
|
88
|
+
<label style="transform: translateY(-1px); margin-left: 50px">Col</label>
|
|
89
|
+
<input type="text" name="input-dposcol" style="width: 30px" value="1">
|
|
90
|
+
|
|
91
|
+
<label style="transform: translateY(-1px);">Span</label>
|
|
92
|
+
<input type="text" name="input-dposcolspan" style="width: 30px" value="2">
|
|
93
|
+
|
|
94
|
+
<label style="transform: translateY(-1px); margin-left: 50px">Style</label>
|
|
95
|
+
<input type="text" name="input-dposstyle" style="width: 100%">
|
|
96
|
+
</div>
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
<label>Text</label>
|
|
101
|
+
<input type="text" name="labeltext">
|
|
102
|
+
<label>Caption</label>
|
|
103
|
+
<div style="grid-column: span 3;">
|
|
104
|
+
<input type="text" name="caption">
|
|
105
|
+
</div>
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
<label>Information</label>
|
|
109
|
+
<div style="grid-column: span 5;">
|
|
110
|
+
<input name="information" type="text" >
|
|
111
|
+
</div>
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
<label>Container CSS</label>
|
|
115
|
+
<input type="text" name="input-containercss">
|
|
116
|
+
|
|
117
|
+
<label>InLine Style</label>
|
|
118
|
+
<div style="grid-column: span 3;">
|
|
119
|
+
<input type="text" name="input-inlinestyle">
|
|
120
|
+
</div>
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
<div style="display: block; height: 1rem; grid-column: span 6;"></div>
|
|
125
|
+
<label>Grid</label>
|
|
126
|
+
<div style="grid-column: span 5;" name="validation">
|
|
127
|
+
|
|
128
|
+
<label style="grid-column: span 2; transform: translateY(5px); ">Formatter</label>
|
|
129
|
+
<input name="gridformatter" type="text" value="checkmark(value)">
|
|
130
|
+
|
|
131
|
+
<label style="grid-column: span 2; transform: translateY(5px); ">CSS</label>
|
|
132
|
+
<input name="gridcss" type="text">
|
|
133
|
+
|
|
134
|
+
<label style="grid-column: span 2; transform: translateY(5px); ">Inline Style</label>
|
|
135
|
+
<input name="gridinlinestyle" type="text" value='text-align:center'>
|
|
136
|
+
|
|
137
|
+
<label style="grid-column: span 2; transform: translateY(5px); ">Index</label>
|
|
138
|
+
<div style="display: flex">
|
|
139
|
+
<input type="text" name="index" value="0" style="width: 50px">
|
|
140
|
+
<label style="margin-left: 20px">
|
|
141
|
+
<input name="gridsorting" type="checkbox" value="1" style="transform: translateY(2px);" >
|
|
142
|
+
Sorting
|
|
143
|
+
</label>
|
|
144
|
+
</div>
|
|
145
|
+
|
|
146
|
+
</div>
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
<div style="display: block; height: 1rem; grid-column: span 6;"></div>
|
|
151
|
+
<label>Validation</label>
|
|
152
|
+
<div style="grid-column: span 5;" name="validation">
|
|
153
|
+
<div name="defaultinvalidmessage" style="grid-column: span 2;">Default Invalid Message</div>
|
|
154
|
+
<input type="text" name="msg_invalid_default" placeholder="invalid message">
|
|
155
|
+
|
|
156
|
+
<label style="grid-column: span 2;">
|
|
157
|
+
<input name="hascustomvalidator" type="checkbox" value="1" style="transform: translateY(2px);" >
|
|
158
|
+
Custom Validator
|
|
159
|
+
</label>
|
|
160
|
+
<input name="validator" type="text" >
|
|
161
|
+
|
|
162
|
+
</div>
|
|
163
|
+
|
|
164
|
+
<div style="display: block; height: 1rem; grid-column: span 6;"></div>
|
|
165
|
+
<label name="validation" style="transform: translateY(10px);">Handle Event</label>
|
|
166
|
+
<div style="grid-column: span 5; padding-left: 10px; display: flex; gap: 30px; flex-wrap: wrap;" >
|
|
167
|
+
|
|
168
|
+
<label>
|
|
169
|
+
<input name="ishandlechanged" type="checkbox" value="1" style="transform: translateY(2px);" >
|
|
170
|
+
Changed
|
|
171
|
+
</label>
|
|
172
|
+
|
|
173
|
+
<label>
|
|
174
|
+
<input name="ishandlechecked" type="checkbox" value="1" style="transform: translateY(2px);" >
|
|
175
|
+
Checked
|
|
176
|
+
</label>
|
|
177
|
+
|
|
178
|
+
<label>
|
|
179
|
+
<input name="ishandleunchecked" type="checkbox" value="1" style="transform: translateY(2px);">
|
|
180
|
+
UnChecked
|
|
181
|
+
</label>
|
|
182
|
+
|
|
183
|
+
</div>
|
|
184
|
+
|
|
185
|
+
</div>
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
<div name="component-summary" data-summary style="display: none;" draggable="true" field-handle-bar class="field-handle-bar">
|
|
190
|
+
<div name="icon-pk" class="design-data-field-icon-pk"></div>
|
|
191
|
+
<div name="icon" class="design-data-field-icon">
|
|
192
|
+
</div>
|
|
193
|
+
<div name="title">
|
|
194
|
+
<input type="text" name="fieldname-summary" placeholder="checkbox field name">
|
|
195
|
+
</div>
|
|
196
|
+
<div class="field-remove-button">
|
|
197
|
+
</div>
|
|
198
|
+
</div>
|
|
199
|
+
|
|
200
|
+
</div>
|