ezframe 0.3.0 → 0.4.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5ab67d7d24a058acd24e2df411c31371b3470d5f448950b226bb6a0073690625
4
- data.tar.gz: 9a244d5b2c0265c38cdff614b086a56d29ef0570cc4eb4ae38136d1d34709a76
3
+ metadata.gz: dda752b637e89872dec11e1949353922cab172fc7931d22f32188afb713c39ec
4
+ data.tar.gz: 579e00d496d8692c205023e49961befcbcf79b4d879765e1c36bcf326ea74b54
5
5
  SHA512:
6
- metadata.gz: 0544756cb9b1ff1db515424425bbe2cc0682f6671c51e5e14d4dc1464bdb73f486d5b5cafc471d2e1da8e1a12a19178c8728fb6f6bc3d5ceceaa58c1fd445b9c
7
- data.tar.gz: b823cb688787f08e492bc9b2fc2f517bef2e417d64c099f041a4174042ee39e2e5bb6fbb52a0978f9e79a95ef30c9e09eb4780407434f576cb3b06c4b27427cb
6
+ metadata.gz: 449ab7af3d8d6cd3b8d0b81a80358e27746fb6dc065ece3dd101bcb6731299bf4a5f438234830016606aa1db89c91414fbe6d164a16627d40c98ead8d84a7a40
7
+ data.tar.gz: 41a9b647f6cc4ec6e37f4febd61e109e9719760f59f6981920b0a3d7b2eb23a893feda34f15055a2677a9ae1dbcc4eab9740a433fea5c09ac963506cbf8a8b21
@@ -1,31 +1,216 @@
1
+ // 2020年05月25日(月) 6
2
+ var extra_event_funcs = []
3
+ var event_commands = {
4
+ /*
5
+ switch_hide: function(event) {
6
+ console.log("switch")
7
+ var a = event.between
8
+ for(var i = 0; i<a.length; i++) {
9
+ switch_hide(a[i])
10
+ }
11
+ },*/
12
+ set_validation: function(event, form_dom) {
13
+ console.log("set_validation")
14
+ var inputs = collect_all_input_elements(form_dom)
15
+ for(var i = 0; i < inputs.length; i++) {
16
+ var elem = inputs[i]
17
+ var send_with = "input";
18
+ var on = "change"
19
+ var target_key = elem.name
20
+ var ezvalid = elem.getAttribute("ezvalid")
21
+ if (ezvalid) {
22
+ ezvalid = parse_one_event(ezvalid)
23
+ if (ezvalid.with) { send_with = ezvalid.with }
24
+ if (ezvalid.on) { on = ezvalid.on }
25
+ if (ezvalid.target_key) { target_key = ezvalid.target_key }
26
+ }
27
+ var ev_s = "on=" + on + ":branch=single_validate:target_key=" + target_key + ":with=" + send_with + ":url=" + event.validate_url
28
+ console.log("set_validation: ev_s="+ev_s)
29
+ elem.setAttribute("ezevent", ev_s)
30
+ elem.addEventListener(on, function(ev) {
31
+ execute_event(ev.srcElement)
32
+ })
33
+ }
34
+ },
35
+ redirect: function(event) {
36
+ console.log("redirect:" + event.url)
37
+ location.href = event.url
38
+ },
39
+ /*
40
+ toggle_hide: function(event) {
41
+ console.log("toggle_hide: target=", event.target)
42
+ for(var i=0; i < event.target.length; i++) {
43
+ var elem = document.querySelector(event.target[i])
44
+ if (elem) {
45
+ var list = elem.classList
46
+ if (list.contains("hide")) {
47
+ elem.classList.remove("hide")
48
+ } else {
49
+ elem.classList.add("hide")
50
+ }
51
+ }
52
+ }
53
+ }
54
+ */
55
+ }
56
+
57
+ // サーバからのレスポンスを処理する関数
58
+ var response_funcs = {
59
+ inject: function(res, obj) {
60
+ var elem
61
+ console.log("inject: " + res.inject + ", body=" + res.body)
62
+ if (res.inject == "this") {
63
+ elem = obj
64
+ } else {
65
+ elem = document.querySelector(res.inject)
66
+ }
67
+ if (elem) {
68
+ elem.innerHTML = (res.body || "")
69
+ add_event(elem)
70
+ exec_ezload(elem)
71
+ } else {
72
+ console.log("inject: no such element: " + res.inject)
73
+ }
74
+ },
75
+ set_value: function(res, obj) {
76
+ var elem
77
+ console.log("set_value: " + res.set_value + ", value=", res.value)
78
+ if (res.set_value == "this") {
79
+ elem = obj
80
+ } else {
81
+ elem = document.querySelector(res.set_value)
82
+ }
83
+ if (elem) {
84
+ if (res.set_value.indexOf("select") > 0) {
85
+ elem.selectedIndex = res.value
86
+ } else {
87
+ elem.value = res.value
88
+ }
89
+ } else {
90
+ console.log("set_value: no such element: " + res.set_value)
91
+ }
92
+ },
93
+ reset_error: function(res, obj) {
94
+ console.log("reset_error: " + res.reset_error)
95
+ var elems = document.querySelectorAll(res.reset_error)
96
+ if (elems) {
97
+ for(var i=0; i < elems.length; i++) {
98
+ elem = elems[i]
99
+ elem.innerHTML = ""
100
+ elem.classList.add("hide")
101
+ }
102
+ }
103
+ },
104
+ set_error: function(res, obj) {
105
+ var elem;
106
+ console.log("set_error: " + res.set_error + ", value=", res.value)
107
+ elem = document.querySelector(res.set_error)
108
+ if (elem) {
109
+ elem.innerHTML = res.value
110
+ if (!res.value || res.value.length == 0) {
111
+ elem.classList.add("hide")
112
+ } else {
113
+ elem.classList.remove("hide")
114
+ }
115
+ } else {
116
+ console.log("set_error: no such element: " + res.set_error)
117
+ }
118
+ },
119
+ add_class: function(res, obj) {
120
+ var elem;
121
+ console.log("add_class: " + res.add_class + ", value=", res.value)
122
+ if (res.add_class == "this") {
123
+ elem = obj
124
+ } else {
125
+ elem = document.querySelector(res.add_class)
126
+ }
127
+ if (elem) {
128
+ elem.classList.add(res.value)
129
+ }
130
+ },
131
+ remove_class: function(res, obj) {
132
+ var elem;
133
+ console.log("remove_class: " + res.remove_class + ", value=", res.value)
134
+ if (res.remove_class == "this") {
135
+ elem = obj
136
+ } else {
137
+ elem = document.querySelector(res.remove_class)
138
+ }
139
+ if (elem) {
140
+ elem.classList.remove(res.value)
141
+ }
142
+ }
143
+ }
144
+
145
+ // register events included in a object
1
146
  function add_event(obj) {
2
- var elems = obj.querySelectorAll('[event]')
147
+ var elems = obj.querySelectorAll('[ezevent]')
148
+ if (elems) {
149
+ console.log("add_event: events=" + elems.length)
150
+ for (var i = 0; i < elems.length; i++) {
151
+ var elem = elems[i]
152
+ var event_s = elem.getAttribute("ezevent")
153
+ var event_a = parse_event(event_s)
154
+ if (event_a.length > 1) {
155
+ console.log("inculde multi events: "+event_a.length)
156
+ console.dir(event_a)
157
+ }
158
+ for(var j = 0; j < event_a.length; j++) {
159
+ var event = event_a[j]
160
+ if (event.on == "load") {
161
+ if (!elem.event_done) {
162
+ console.log("load: "+event_s)
163
+ execute_event(elem, "ezevent")
164
+ elem.event_done = 1
165
+ }
166
+ } else {
167
+ elem.addEventListener(event.on, function (ev) {
168
+ execute_event(this, "ezevent", ev)
169
+ })
170
+ }
171
+ }
172
+ }
173
+ }
174
+ // execute extra event functions
175
+ for(var i=0; i < extra_event_funcs.length; i++) {
176
+ extra_event_funcs[i](obj)
177
+ }
178
+ }
179
+
180
+ function exec_ezload(obj) {
181
+ var elems = obj.querySelectorAll('[ezload]')
3
182
  if (elems) {
4
- console.log("events=" + elems.length)
183
+ console.log("ezload: events=" + elems.length)
5
184
  for (var i = 0; i < elems.length; i++) {
6
185
  var elem = elems[i]
7
- var event_s = elem.getAttribute("event")
8
- // console.log(event_s)
9
- var event = parse_event(event_s)
10
- if (event.on == "load" && !elem.event_done) {
11
- console.log("load: "+event_s)
12
- execute_event(elem)
186
+ if (!elem.event_done) {
187
+ execute_event(elem, "ezload")
13
188
  elem.event_done = 1
14
- } else {
15
- elem.addEventListener(event.on, function () {
16
- execute_event(this)
17
- })
18
189
  }
19
190
  }
20
191
  }
21
- register_switch_event(obj)
22
- register_hover_button(obj)
23
- initialize_materialize()
24
- var elems = document.querySelectorAll('.dropdown-trigger')
25
- var instances = M.Dropdown.init(elems, {})
26
192
  }
27
193
 
194
+ // parse attrite named event
28
195
  function parse_event(event) {
196
+ var event_a;
197
+ if (!event) { return [] }
198
+ if (event.indexOf(";;") > -1) {
199
+ event_a = event.split(";;")
200
+ } else {
201
+ event_a = [ event ]
202
+ }
203
+ console.log("parse_event:"+event_a.length) // event_a="+JSON.stringify(event_a))
204
+ // console.dir(event_a)
205
+ var parsed_event_a = []
206
+ for(var i = 0; i < event_a.length; i++) {
207
+ var ev = event_a[i]
208
+ parsed_event_a.push(parse_one_event(ev))
209
+ }
210
+ return parsed_event_a
211
+ }
212
+
213
+ function parse_one_event(event) {
29
214
  var ev = {}
30
215
  var a = event.split(":")
31
216
  for (var i = 0; i < a.length; i++) {
@@ -48,86 +233,51 @@ function parse_event(event) {
48
233
  }
49
234
  }
50
235
  }
236
+ // console.log("parse_one_event: ")
237
+ // console.dir(ev)
51
238
  return ev
52
239
  }
53
240
 
54
- function execute_event(obj) {
55
- console.log("execute_event")
56
- // console.dir(obj)
57
- var event_s = obj.getAttribute("event")
58
- var event = parse_event(event_s)
59
- switch(event.command) {
60
- case "switch":
61
- var a = event.between
62
- for(var i = 0; i < a.length; i++) {
63
- switch_hide(a[i])
64
- }
65
- return
66
- case "set_global":
67
- for(key in event) {
68
- if ([ "command", "on", "url" ].indexOf(key) >= 0) { continue }
69
- window.ez_global[key] = event[key]
70
- }
71
- // console.log("set_global:" + JSON.stringify(window.ezframe))
72
- return
73
- case "redirect":
74
- console.log("redirect:" + event.url)
75
- location.href = event.url
76
- return
77
- case "enable_datatable":
78
- enable_datatable(event)
79
- return
80
- }
81
- with_attr(event, obj)
82
- post_values(event, obj)
83
- }
84
-
85
- function enable_datatable(event) {
86
- // $("#enable_datatable").DataTable();
87
- console.log("enable_datatable: target="+event.target)
88
- // console.log($(tevent.arget))
89
- var list_size = event.size || 5
90
- $(event.target).DataTable({
91
- lengthChange: false,
92
- displayLength: parseInt(list_size),
93
- columnDefs: [{ targets: '_all', className: 'ellipsis' }],
94
- language: {
95
- "decimal": ".",
96
- "thousands": ",",
97
- "sProcessing": "処理中...",
98
- "sLengthMenu": "_MENU_ 件表示",
99
- "sZeroRecords": "データはありません。",
100
- "sInfo": " _TOTAL_ 件中 _START_ から _END_ まで表示",
101
- "sInfoEmpty": " 0 件中 0 から 0 まで表示",
102
- "sInfoFiltered": "(全 _MAX_ 件より抽出)",
103
- "sInfoPostFix": "",
104
- "sSearch": "検索:",
105
- "sUrl": "",
106
- "oPaginate": {
107
- "sFirst": "<< 先頭",
108
- "sPrevious": "< 前",
109
- "sNext": "次 > ",
110
- "sLast": "最終 >>"
111
- }
241
+ function execute_event(obj, attr_key = "ezevent", ev = null) {
242
+ var event_s = obj.getAttribute(attr_key)
243
+ console.log("execute_event: "+attr_key+", event="+event_s+", ev="+JSON.stringify(ev))
244
+ var event_a = parse_event(event_s)
245
+ for(var i = 0; i < event_a.length; i++) {
246
+ var event = event_a[i]
247
+ func = event_commands[event.command]
248
+ if (func) {
249
+ func(event, obj)
250
+ }
251
+ with_attr(event, obj)
252
+ if (event.url) {
253
+ post_values(event, obj)
112
254
  }
113
- })
255
+ }
114
256
  }
115
257
 
116
258
  function with_attr(event, obj) {
117
- if (!event.with) {
118
- return null
119
- }
120
- var with_s = event.with
121
- if (event.with == "form") {
122
- var node = obj
123
- while (node && node.nodeName != 'FORM') {
124
- node = node.parentNode
125
- }
126
- form = collect_form_values(node)
127
- event.form = form
259
+ switch (event.with) {
260
+ case "form":
261
+ var node = obj
262
+ while (node && node.nodeName != 'FORM') {
263
+ node = node.parentNode
264
+ }
265
+ form = collect_form_values(node)
266
+ event.form = form
267
+ break
268
+ case "input":
269
+ event.form = {}
270
+ event.form[obj.name] = obj.value
271
+ break
272
+ default:
273
+ var node = document.querySelector(event.with)
274
+ form = collect_form_values(node)
275
+ event.form = form
276
+ break
128
277
  }
129
278
  }
130
279
 
280
+ // サーバーにJSONをPOST
131
281
  function post_values(event, obj) {
132
282
  var xhr = new XMLHttpRequest()
133
283
  xhr.onreadystatechange = function () {
@@ -140,62 +290,55 @@ function post_values(event, obj) {
140
290
  xhr.open("POST", event.url, true)
141
291
  xhr.setRequestHeader("Content-Type", "application/json")
142
292
  xhr.responseType = 'json'
143
- send_values = { event: event }
144
- if (window.ezframe) {
145
- send_values.global = window.ezframe
146
- }
293
+ send_values = { ezevent: event }
147
294
  xhr.send(JSON.stringify(send_values))
148
295
  }
149
296
 
297
+ // サーバーからの返信を処理
150
298
  function manage_response(res, event, obj) {
151
299
  var elem
152
- console.log("manage_response: res="+JSON.stringify(res)+", event=" + JSON.stringify(event) +
153
- ", obj=" + JSON.stringify(obj))
300
+ // console.log("manage_response: res="+JSON.stringify(res)+", event=" + JSON.stringify(event) +
301
+ // ", obj=" + JSON.stringify(obj))
154
302
  if (!res) { return }
155
303
  if (Array.isArray(res)) {
156
304
  for(var i = 0; i < res.length; i++) {
157
- exec_one_response(res[i])
305
+ manage_one_response(res[i], obj)
158
306
  }
159
307
  } else {
160
- exec_one_response(res)
308
+ manage_one_response(res, obj)
161
309
  }
162
310
  }
163
311
 
164
- function exec_one_response(res) {
165
- if (res.inject) {
166
- console.log("inject: " + res.inject)
167
- elem = document.querySelector(res.inject)
168
- if (elem) {
169
- elem.innerHTML = res.body.replace(/<br>/g, "\n")
170
- add_event(elem)
171
- } else {
172
- console.log("no such element: "+res.inject)
173
- }
174
- }
312
+ // サーバーからの返信を1件処理
313
+ function manage_one_response(res, obj) {
175
314
  if (res.redirect) {
176
315
  console.log("redirect:" + res.redirect)
177
316
  location.href = res.redirect
178
- return
317
+ return
179
318
  }
180
- if (res.reset) {
181
- elem = document.querySelector(res.reset)
182
- if (event.reset == "form") {
183
- while (node && node.nodeName != 'FORM') {
184
- node = node.parentNode
185
- }
186
- node.reset();
319
+ // サーバーからの戻り値のハッシュのキーにresponse_funcsのキーに一致するものがあったら、実行する。
320
+ for (var key in response_funcs) {
321
+ if (res[key]) {
322
+ response_funcs[key](res, obj)
187
323
  }
188
324
  }
189
325
  }
190
326
 
191
- function collect_form_values(obj) {
192
- var res = {};
327
+ // 全ての入力要素を集める
328
+ function collect_all_input_elements(obj) {
193
329
  var inputs = Array.from(obj.querySelectorAll("input"));
194
330
  var selects = Array.from(obj.querySelectorAll("select"));
195
331
  var textareas = Array.from(obj.querySelectorAll("textarea"));
196
- // console.dir(inputs)
197
332
  inputs = inputs.concat(selects)
198
333
  inputs = inputs.concat(textareas)
334
+ return inputs
335
+ }
336
+
337
+ // 入力フォームの値を集収
338
+ function collect_form_values(obj) {
339
+ if (!obj) {return}
340
+ var res = {};
341
+ var inputs = collect_all_input_elements(obj)
199
342
  for (var i = 0; i < inputs.length; i++) {
200
343
  var elem = inputs[i]
201
344
  if (!elem.name) { continue }
@@ -205,7 +348,6 @@ function collect_form_values(obj) {
205
348
  }
206
349
  var cur_value = res[elem.name]
207
350
  var elem_value = elem.value
208
- elem_value = elem_value.replace(/\n/g, '<br>')
209
351
  if (cur_value) {
210
352
  if (Array.isArray(cur_value)) {
211
353
  cur_value.push(elem_value)
@@ -239,49 +381,7 @@ function switch_hide(button) {
239
381
  }
240
382
  }
241
383
 
242
- function register_switch_event(elem) {
243
- var boxes = elem.querySelectorAll(".switch-box")
244
- for(var i = 0; i < boxes.length; i++) {
245
- var box = boxes[i]
246
- var buttons = box.querySelectorAll(".switch-button")
247
- for(var j = 0; j < buttons.length; j++) {
248
- var button = buttons[j]
249
- button.addEventListener('click', function() { switch_hide(this) })
250
- }
251
- }
252
- }
253
-
254
- function register_hover_button(obj) {
255
- var elems = obj.querySelectorAll(".hover-button")
256
- for(var i = 0; i < elems.length; i++) {
257
- var node = elems[i]
258
- while(node && !node.classList.contains("hover-button-box") ) { node = node.parentNode }
259
- //var parent = elems[i].parentNode.parentNode
260
- node.addEventListener('mouseenter', function() {
261
- console.log("show button")
262
- var btns = this.querySelectorAll(".hover-button")
263
- for (var j = 0; j < btns.length; j++) {
264
- btns[j].classList.remove("hide")
265
- }
266
- })
267
- node.addEventListener('mouseleave', function() {
268
- console.log("hide button")
269
- var btns = this.querySelectorAll(".hover-button")
270
- for (var j = 0; j < btns.length; j++) {
271
- btns[j].classList.add("hide")
272
- }
273
- })
274
- }
275
- }
276
-
277
-
278
384
  document.addEventListener('DOMContentLoaded', function () {
279
- if (!window.ez_global) { window.ez_global = {} }
280
- add_event(document)
281
- })
282
-
283
- /*
284
- $(document).ready(function () {
285
385
  add_event(document)
286
- })
287
- */
386
+ exec_ezload(document)
387
+ })