ezframe 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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
+ })