ezframe 0.0.1 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/README.md +11 -4
  4. data/app_template/asset/image/favicon.ico +0 -0
  5. data/app_template/asset/js/ezframe.js +288 -0
  6. data/app_template/config/generic.yml +3 -0
  7. data/app_template/config/materialize.yml +5 -0
  8. data/{example/chat → app_template}/config.ru +2 -10
  9. data/app_template/pages/basic.rb +5 -0
  10. data/exe/create_table.rb +1 -0
  11. data/exe/setup.rb +15 -0
  12. data/ezframe.gemspec +3 -4
  13. data/lib/ezframe/auth.rb +15 -12
  14. data/lib/ezframe/column_set.rb +68 -28
  15. data/lib/ezframe/column_type.rb +231 -68
  16. data/lib/ezframe/config.rb +4 -0
  17. data/lib/ezframe/controller.rb +20 -10
  18. data/lib/ezframe/database.rb +10 -3
  19. data/lib/ezframe/ht.rb +167 -0
  20. data/lib/ezframe/html.rb +28 -4
  21. data/lib/ezframe/japanese_utils.rb +40 -0
  22. data/lib/ezframe/{pages.rb → loader.rb} +3 -0
  23. data/lib/ezframe/materialize.rb +55 -20
  24. data/lib/ezframe/model.rb +0 -2
  25. data/lib/ezframe/page_base.rb +18 -12
  26. data/lib/ezframe/page_kit.rb +12 -33
  27. data/lib/ezframe/template.rb +20 -15
  28. data/lib/ezframe/util.rb +5 -0
  29. data/lib/ezframe/version.rb +1 -1
  30. data/lib/ezframe.rb +5 -4
  31. metadata +27 -70
  32. data/example/auth/Gemfile +0 -8
  33. data/example/auth/asset/css/materialize.min.css +0 -13
  34. data/example/auth/asset/js/common.js +0 -200
  35. data/example/auth/asset/js/htmlgen.js +0 -79
  36. data/example/auth/columns/user.yml +0 -12
  37. data/example/auth/config/view_conf.yml +0 -3
  38. data/example/auth/config.ru +0 -26
  39. data/example/auth/pages/app.rb +0 -61
  40. data/example/auth/template/base.html +0 -12
  41. data/example/chat/Gemfile +0 -9
  42. data/example/chat/asset/css/materialize.min.css +0 -13
  43. data/example/chat/asset/js/common.js +0 -200
  44. data/example/chat/asset/js/htmlgen.js +0 -79
  45. data/example/chat/columns/belong.yml +0 -6
  46. data/example/chat/columns/channel.yml +0 -3
  47. data/example/chat/columns/talk.yml +0 -6
  48. data/example/chat/columns/user.yml +0 -12
  49. data/example/chat/config/view_conf.yml +0 -3
  50. data/example/chat/pages/app.rb +0 -59
  51. data/example/chat/template/base.html +0 -12
  52. data/example/todo/Gemfile +0 -8
  53. data/example/todo/asset/css/datatable.css +0 -54
  54. data/example/todo/asset/css/materialize.min.css +0 -13
  55. data/example/todo/asset/js/common.js +0 -135
  56. data/example/todo/asset/js/datatable.js +0 -1814
  57. data/example/todo/asset/js/htmlgen.js +0 -79
  58. data/example/todo/asset/js/init.js +0 -3
  59. data/example/todo/asset/js/materialize.min.js +0 -6
  60. data/example/todo/asset/js/mydatatable.js +0 -9
  61. data/example/todo/asset/js/mymaterialize.js +0 -22
  62. data/example/todo/columns/todo.yml +0 -9
  63. data/example/todo/config/view_conf.yml +0 -3
  64. data/example/todo/config.ru +0 -15
  65. data/example/todo/pages/app.rb +0 -93
  66. data/example/todo/template/base.html +0 -12
  67. data/exe/myrackup +0 -5
  68. data/lib/ezframe/hthash.rb +0 -116
@@ -1,200 +0,0 @@
1
- document.addEventListener('DOMContentLoaded', function () {
2
- add_event(document)
3
- //initialize_materialize_select()
4
- var elems = document.querySelectorAll(".submit-button")
5
- if (elems) {
6
- for (var i = 0; i < elems.length; i++) {
7
- elems[i].addEventListener('click', function () {
8
- var node = this;
9
- while (node && node.nodeName != "FORM") { node = node.parentNode }
10
- node.submit();
11
- })
12
- }
13
- }
14
- })
15
-
16
- function add_event(obj) {
17
- var elems = obj.querySelectorAll('[event]')
18
- if (elems) {
19
- console.log("events=" + elems.length)
20
- for (var i = 0; i < elems.length; i++) {
21
- var elem = elems[i]
22
- var event_s = elem.getAttribute("event")
23
- var cmd = parse_event(event_s)
24
- console.log(JSON.stringify(cmd))
25
- elem.addEventListener(cmd.on, function(event) {
26
- execute_command(event, this)
27
- })
28
- }
29
- }
30
- M.AutoInit();
31
- initialize_materialize_tabs()
32
- }
33
-
34
- function parse_event(event) {
35
- var res = {}
36
- var a = event.split(":")
37
- for (var i = 0; i < a.length; i++) {
38
- if (a[i].indexOf("=") > 0) {
39
- var b = a[i].split("=")
40
- res[b[0]] = b[1]
41
- }
42
- }
43
- //console.log("current url: " + res.url)
44
- if (!res.url) {
45
- res.url = location.pathname
46
- //console.log("set url: " + res.url)
47
- }
48
- // console.log("parse_event: "+JSON.stringify(res))
49
- return res
50
- }
51
-
52
- function access_server(path, send_values, func) {
53
- console.log("access_server: " + path)
54
- if (!path) {
55
- path = location.pathname
56
- }
57
- var xhr = new XMLHttpRequest();
58
- xhr.onreadystatechange = function () {
59
- if (this.readyState == 4 && this.status == 200) {
60
- var res = this.response;
61
- console.log("access_server: res="+JSON.stringify(res))
62
- func(res)
63
- }
64
- }
65
- xhr.open("POST", path, true);
66
- xhr.setRequestHeader("Content-Type", "application/json");
67
- xhr.responseType = 'json';
68
- xhr.send(JSON.stringify(send_values));
69
- }
70
-
71
- function execute_command(event, obj) {
72
- var cmd = parse_event(obj.getAttribute("event"))
73
- console.log("execute_command: event=" + JSON.stringify(event) +
74
- ", cmd=" + JSON.stringify(cmd))
75
- //console.dir(obj)
76
- switch (cmd.cmd) {
77
- case "open":
78
- case "inject":
79
- inject(cmd, obj)
80
- break
81
- case "update_value":
82
- console.log("update_value")
83
- update_value(cmd, obj)
84
- break
85
- case "reset_value":
86
- reset_value(cmd)
87
- break
88
- default:
89
- console.log("unknown command: " + command)
90
- }
91
- }
92
-
93
- function inject(cmd, obj) {
94
- var url = cmd.url // obj.getAttribute("url")
95
- console.log("inject: url=" + url)
96
- if (cmd.get_form) {
97
- var node = obj
98
- // console.dir(node)
99
- while(node && node.nodeName !='FORM') {
100
- node = node.parentNode
101
- // console.log(node.nodeName)
102
- }
103
- form = collect_form_values(node)
104
- cmd.form = form
105
- }
106
- access_server(url, cmd, function (res) {
107
- switch(cmd.cmd) {
108
- case "inject":
109
- var selector = cmd.into
110
- console.log("inject: into=" + selector)
111
- var elem = document.querySelector(selector)
112
- if (elem) {
113
- elem.innerHTML = htmlgen(res)
114
- add_event(elem)
115
- } else {
116
- console.log("no such element: " + selector)
117
- }
118
- break
119
- case "open":
120
- console.log("open: "+JSON.stringify(cmd))
121
- location.href = cmd.goto
122
- }
123
- })
124
- }
125
-
126
- function initialize_materialize_tabs() {
127
- elems = document.querySelectorAll('.tabs');
128
- if (elems) {
129
- for (var i = 0; i < elems.length; i++) {
130
- M.Tabs.init(elems[i], { onShow: show_tab_contents })
131
- }
132
- }
133
- }
134
-
135
- function show_tab_contents(obj) {
136
- console.log("show_tab_contents: " + JSON.stringify(obj.getAttribute("event")))
137
- var event = parse_event(obj.getAttribute("event"))
138
- //console.dir(obj)
139
- var id = obj.id
140
- url ="/admin/"+id
141
- access_server(event.url, event, function(res) {
142
- var elem = document.querySelector("#"+id);
143
- elem.innerHTML = htmlgen(res)
144
- add_event(elem)
145
- })
146
- }
147
-
148
- function update_value(cmd, obj) {
149
- var url = cmd.url
150
- var input = obj.parentNode.querySelector("select")
151
- if (!input) {
152
- input = obj.parentNode.querySelector("input")
153
- }
154
- if (!input) {
155
- console.log("no input element")
156
- }
157
- //console.log("update_value: url="+url+", input.value")
158
- //console.dir(input)
159
- cmd.update_value = input.value
160
- access_server(url, cmd, function(res) {
161
- var selector = cmd.into
162
- var elem = document.querySelector(selector)
163
- if (elem) {
164
- elem.innerHTML = htmlgen(res)
165
- add_event(elem)
166
- } else {
167
- console.log("no such element: " + selector)
168
- }
169
- })
170
- }
171
-
172
- function reset_value(cmd, obj) {
173
- access_server(cmd.url, cmd, function(res) {
174
- var elem = document.querySelector(cmd.into)
175
- if (elem) {
176
- elem.innerHTML = htmlgen(res)
177
- add_event(elem)
178
- } else {
179
- console.log("no such element: " + selector)
180
- }
181
- })
182
- }
183
-
184
- function collect_form_values(obj) {
185
- // console.log("collect_form_values")
186
- var res = {};
187
- var inputs = obj.querySelectorAll("input");
188
- for (var i = 0; i < inputs.length; i++) {
189
- var elem = inputs[i]
190
- // console.dir(elem)
191
- res[elem.name] = elem.value
192
- }
193
- var selects = obj.querySelectorAll("select");
194
- for (var i = 0; i < selects.length; i++) {
195
- var elem = selects[i]
196
- // console.dir(elem)
197
- res[elem.name] = elem.value
198
- }
199
- return res
200
- }
@@ -1,79 +0,0 @@
1
- function join_attr(elem) {
2
- var attr_s = ""
3
- for (var i = 0; i < Object.keys(elem).length; i++) {
4
- var key = Object.keys(elem)[i];
5
- switch (key) {
6
- case 'child':
7
- case 'tag':
8
- case 'final':
9
- break;
10
- default:
11
- var value = elem[key];
12
- if (Array.isArray(value)) {
13
- attr_s += key + "=\"" + value.join(" ") + "\" ";
14
- } else {
15
- attr_s += key + "=\"" + value + "\" ";
16
- }
17
- }
18
- }
19
- var child = elem.child;
20
- if (child) {
21
- child = _htmlgen(child);
22
- return "<" + elem.tag + " " + attr_s + ">" + child + "</" + elem.tag + ">";
23
- } else {
24
- return "<" + elem.tag + " " + attr_s + "/>";
25
- }
26
- }
27
-
28
- function select_element(elem) {
29
- console.log("select_element")
30
- // console.dir(elem.items)
31
- outstr = ""
32
- var items = elem.items
33
- if (Array.isArray(items)) {
34
- for (var i = 0; i < items.length; i++) {
35
- var a = items[i]
36
- outstr += "<option value=\"" + a[0] + "\">" + a[1] + "</option>"
37
- }
38
- } else {
39
- keys = Object.keys(items)
40
- for (var i = 0; i < keys.length; i++) {
41
- var k = keys[i]
42
- var v = items[k]
43
- var selected = ""
44
- console.log("elem.value="+elem.value)
45
- if (elem.value && k == elem.value) {
46
- selected=" selected=selected "
47
- }
48
- outstr += "<option value=\"" + k + "\" "+selected+">" + v + "</option>"
49
- }
50
- }
51
- //console.log(outstr)
52
- delete elem.items
53
- if (!elem.name) {
54
- elem.name = elem.key
55
- }
56
- elem.child = outstr
57
- }
58
-
59
- function _htmlgen(elem) {
60
- if (Array.isArray(elem)) {
61
- var outstr = "";
62
- for (var i = 0; i < elem.length; i++) {
63
- outstr += _htmlgen(elem[i]);
64
- }
65
- return outstr;
66
- } else if ((typeof elem === 'string') || (typeof elem === 'integer')) {
67
- return elem;
68
- } else {
69
- if (elem.tag == "select") {
70
- select_element(elem)
71
- }
72
- return join_attr(elem)
73
- }
74
- }
75
-
76
- function htmlgen(elem) {
77
- var res = _htmlgen(elem)
78
- return res
79
- }
@@ -1,12 +0,0 @@
1
- - key: account
2
- type: string
3
- label: ユーザーID
4
- - key: name
5
- type: jpname
6
- label: 氏名
7
- - key: email
8
- type: email
9
- label: Eメール
10
- - key: password
11
- type: password
12
- label: パスワード
@@ -1,3 +0,0 @@
1
- default_page_class: App
2
- default_page_method: index
3
- template_file: base.html
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "logger"
4
- require "rack"
5
- require "warden"
6
- require "digest/sha2"
7
-
8
- puts "digest: "+Digest::SHA256.hexdigest("1234")
9
-
10
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "lib"))
11
- require "ezframe"
12
-
13
- failure_app = Proc.new do |env|
14
- ["401", { "Content-Type" => "text/html" }, [ Ezframe::App.new.public_login_page ]]
15
- end
16
-
17
- use Warden::Manager do |manager|
18
- manager.default_strategies :mystrategy
19
- manager.failure_app = failure_app
20
- end
21
-
22
- use Rack::Session::Pool, secret: Digest::SHA256.hexdigest(rand.to_s)
23
- use Rack::Static, urls: ["/image", "/js", "/css"], root: "asset"
24
- use Rack::ShowExceptions
25
-
26
- run Ezframe::Server
@@ -1,61 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Ezframe
4
- class App < PageBase
5
- def initialize(request=nil, model=nil)
6
- super(request, model)
7
- if @request
8
- mylog "request=#{@request.inspect}"
9
- end
10
- if @model
11
- @column_set = @model.column_sets[:user]
12
- @dataset = @column_set.dataset
13
- end
14
- @auth = true
15
- end
16
-
17
- def public_index_page
18
- hthash = { tag: "ul", child: [
19
- { tag: "li", child: { tag: "a", href: "/app/test1", child: "app1"}},
20
- { tag: "li", child: { tag: "a", href: "/app/test2", child: "app2"}},
21
- ] }
22
- common_page(title: "App Top", body: Html.convert(Materialize.convert(hthash)))
23
- end
24
-
25
- def public_test1_page
26
- common_page(title: "Secret Page", body: Html.convert(Materialize.convert({ tag: "h1", child: "test1"})))
27
- end
28
-
29
- def public_test2_page
30
- common_page(title: "Secret Page", body: Html.convert(Materialize.convert({ tag: "h1", child: "test2"})))
31
- end
32
-
33
- def public_default_page
34
- mylog "login?: #{login?}"
35
- if login?
36
- public_index_page
37
- else
38
- public_login_page
39
- end
40
- end
41
-
42
- def public_login_page
43
- flash_area=""
44
- flash_area={ tag: "div", class: %w[teal], child: flash[:auth_msg]}
45
- form = { tag: "div", class: %w[container], child:
46
- { tag: "form", action: "/app/login", method: "post", child: [
47
- { tag: "input", type: "text", name: "account", label: "User ID"},
48
- { tag: "input", type: "password", name: "password", label: "Password"},
49
- { tag: "button", type: "submit", class: %w[btn], child: "login"}
50
- ]}
51
- }
52
- common_page(title: "Login", body: Html.convert(Materialize.convert(flash_area+form)))
53
- end
54
-
55
- def public_login_post
56
- mylog "public_login_post: #{@params.inspect}, #{@json}"
57
- warden.authenticate
58
- public_index_page
59
- end
60
- end
61
- end
@@ -1,12 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang=ja>
3
- <head>
4
- <meta charset="utf8" />
5
- <title>#{title}</title>
6
- #{into_html_header}
7
- </head>
8
- <body>
9
- #{body}
10
- #{into_bottom_of_body}
11
- </body>
12
- </html>
data/example/chat/Gemfile DELETED
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source "https://rubygems.org"
4
-
5
- git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
6
-
7
- gem 'ezframe', path: "../.."
8
- gem 'warden'
9
- gem 'rack-flash3'