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.
@@ -6,10 +6,6 @@ require_relative "util"
6
6
 
7
7
  module Ezframe
8
8
  class PageBase
9
- # class << self
10
- # attr_accessor :auth
11
- # end
12
-
13
9
  attr_accessor :request
14
10
 
15
11
  def initialize(request = nil)
@@ -43,10 +39,8 @@ module Ezframe
43
39
  @parsed_body = parse_query_string(body)
44
40
  end
45
41
  # EzLog.info "parsed_body=#{@parsed_body.inspect}"
46
- @event = @parsed_body[:event] || {}
42
+ @event = @parsed_body[:ezevent] || {}
47
43
  @form = @event[:form]
48
-
49
- # EzLog.info "event=#{@event}"
50
44
  end
51
45
  end
52
46
 
@@ -87,7 +81,6 @@ module Ezframe
87
81
  EzLog.info "ERROR: #{e.class}:#{e.message}\n#{e.backtrace}"
88
82
  return nil
89
83
  end
90
- # json = json.recursively_symbolize_keys if json.is_a?(Hash) || json.is_a?(Array)
91
84
  return json
92
85
  end
93
86
 
@@ -1,205 +1,22 @@
1
1
  require_relative "editor_common"
2
+ require_relative "single_page_kit"
2
3
 
3
4
  module Ezframe
4
5
  # ページ遷移無しでデータを編集する仕組み
5
6
  class SinglePageEditor < PageBase
6
7
  include EditorCommon
8
+ include PageKit::Default
9
+ include PageKit::Index
10
+ include PageKit::Edit
11
+ include PageKit::Detail
12
+ include PageKit::Delete
7
13
 
8
14
  def init_vars
9
15
  super
10
16
  @sort_key = :id
11
- @event = @parsed_body[:event] if @parsed_body
17
+ @event = @parsed_body[:ezevent] if @parsed_body
12
18
  @dom_id = { create: "create-area", edit: "edit-area", index: "index-area", detail: "detail-area"}
13
19
  # @show_delete_button = nil
14
20
  end
15
-
16
- def public_default_get
17
- @id = get_id
18
- # if @id
19
- # return public_detail_post
20
- # else
21
- div = [ Ht.div(id: @dom_id[:create], child: make_index_top), Ht.div(id: @dom_id[:index], child: make_index_table) ]
22
- layout = index_layout(center: Ht.form(child: div))
23
- return show_base_template(title: Message[:index_page_title], body: Html.convert(layout))
24
- # end
25
- end
26
-
27
- def make_index_top
28
- make_create_button("on=click:url=#{make_base_url}/create")
29
- end
30
-
31
- def public_default_post
32
- return { inject: "##{@dom_id[:index]}", body: Html.convert(make_index_table) }
33
- end
34
-
35
- # 新規データ登録
36
- def public_create_post
37
- @form = @event[:form]
38
- EzLog.debug("public_create_post: event=#{@event}")
39
- if @event[:cancel]
40
- return { inject: "##{@dom_id[:create]}", body: Html.convert(make_index_top) }
41
- elsif !@form
42
- return { inject: "##{@dom_id[:create]}", body: Html.convert(make_edit_form(:create)) }
43
- else
44
- # 値の保存
45
- @column_set.clear
46
- form_values = @form
47
- form_values.update(@env["url_params"])
48
- # @column_set.values = form_values
49
- @column_set[:id].value = @id = @column_set.create(form_values)
50
- return { redirect: make_base_url(@id) }
51
- # return public_default_post
52
- end
53
- end
54
-
55
- # データ編集受信
56
- def public_edit_post
57
- @id = get_id
58
- unless @event[:form]
59
- data = @column_set.set_from_db(@id)
60
- return show_message_page("no data", "data is not defined: #{@id}") unless data
61
- # フォームの表示
62
- form = make_edit_form
63
- found_a = Ht.search(form, tag: "input")
64
- found_a.each { |h| h.add_class("#{@class_snake}-edit-box") if h[:size] }
65
- return { inject: "##{@dom_id[:detail]}", body: Html.convert(form) }
66
- else
67
- if @event[:cancel]
68
- data = @column_set.set_from_db(@id)
69
- return act_after_cancel
70
- else
71
- # 値を保存
72
- @column_set.update(@id, @event[:form])
73
- end
74
- return act_after_edit
75
- end
76
- end
77
-
78
- # データ詳細表示
79
- def public_detail_post
80
- @id ||= get_id
81
- data = @column_set.set_from_db(@id)
82
- target_keys = @detail_keys || @column_set.keys.select { |key| !@column_set[key].attribute[:no_view] }
83
- line_a = []
84
- target_keys.each do |key|
85
- column = @column_set[key]
86
- v = make_detail_line(column)
87
- line_a.push(v) if v
88
- end
89
- table = Ht.div(line_a)
90
- collection = Materialize::Collection.new
91
- # 詳細表示用のblockを追加
92
- collection.push(Ht.div(id: @dom_id[:detail], child: [button_for_detail_box(data), table]))
93
- return { inject: "##{@dom_id[:detail]}", body: Html.convert(collection.to_h) }
94
- end
95
-
96
- def public_delete_post
97
- @id = get_id
98
- dataset = DB.dataset(@column_set.name)
99
- DB.delete(dataset, @id)
100
- return public_default_post
101
- end
102
-
103
- # 詳細表示欄の一行を生成
104
- def make_detail_line(column)
105
- view = column.view
106
- if view
107
- view = Ht.pre(view) if view.strip.index("\n")
108
- return Ht.p([Ht.small(column.label), view])
109
- end
110
- return nil
111
- end
112
-
113
- def act_after_edit
114
- return [public_default_post, public_detail_post]
115
- end
116
-
117
- def act_after_cancel
118
- return public_detail_post
119
- end
120
-
121
- # 一覧表の生成
122
- def make_index_table
123
- list = list_for_index
124
- target_keys = @index_keys
125
- unless target_keys
126
- target_keys = @column_set.keys.select {|k| !@column_set[k].no_view?}
127
- end
128
- labels = @table_labels
129
- unless labels
130
- labels = target_keys.map {|k| @column_set[k].label(force: true) || " "}
131
- end
132
- # 項目名欄の生成
133
- thead = Ht.thead(Ht.tr(labels.map {|label| Ht.th(label||" ")}))
134
-
135
- tr_a = list.map do |data|
136
- view_a = make_index_line(target_keys, data)
137
- td_a = view_a.map {|view| Ht.td(view)}
138
- Ht.tr(id: "tr-#{@class_snake}-#{data[:id]}", child: td_a, event: "on=click:url=#{make_base_url(data[:id])}/detail")
139
- end
140
- tbody = Ht.tbody(tr_a)
141
- return [
142
- Ht.table(id: "enable_datatable_#{@class_snake}", child: [thead, tbody], ezload: "command=enable_datatable:target=#enable_datatable_#{@class_snake}"),
143
- Ht.div(id: @dom_id[:detail], child: ""),
144
- ]
145
- end
146
-
147
- # 一覧表示の1行を生成
148
- def make_index_line(target_keys, data)
149
- @column_set.clear
150
- @column_set.values = data
151
- return target_keys.map { |key| make_index_column(key) }
152
- end
153
-
154
- # 一覧表示の1カラムを生成
155
- def make_index_column(key)
156
- column = @column_set[key.to_sym]
157
- # if @with_label
158
- # child = [Ht.small(column.label), column.view(force: true)]
159
- # return Ht.p(id: "edit-#{@class_snake}-#{@column_set[:id].value}-column-#{column.key}", child: child)
160
- # else
161
- return column.view(force: true)
162
- # end
163
- end
164
-
165
- # 一覧ページ用のデータリスト生成
166
- def list_for_index
167
- return @column_set.dataset.where(deleted_at: nil).order(@sort_key).all
168
- end
169
-
170
- # 一覧ページ用ボタン
171
- def button_for_index_line(data)
172
- Ht.button(class: %w[btn right], event: "on=click:url=#{make_base_url(data[:id])}/edit", child: [Ht.icon("edit"), Message[:edit_button_label]])
173
- end
174
-
175
- # 詳細ページ用ボタン
176
- def button_for_detail_box(data)
177
- buttons = [Ht.button(class: %w[btn right], event: "on=click:url=#{make_base_url(data[:id])}/edit", child: [Ht.icon("edit"), Message[:edit_button_label]]) ]
178
- if @show_delete_button
179
- buttons.push(make_delete_button)
180
- end
181
- return Ht.div(class: %w[button-box], child: buttons)
182
- end
183
-
184
- # 編集フォームの生成
185
- def make_edit_form(command = :edit)
186
- @id ||= get_id
187
- target_keys = @edit_keys || @column_set.keys
188
- list = target_keys.map do |colkey|
189
- column = @column_set[colkey.to_sym]
190
- unless column
191
- EzLog.error("undefined column entry: #{colkey}")
192
- next
193
- end
194
- form = column.form
195
- Ht.p(class: %w[form-line], child: [Ht.small(column.label), form]) if form
196
- end
197
- send_button = Ht.button(id: "#{@class_snake}-#{command}-finish-button", class: %w[btn], child: [Ht.icon("check"), Message[:edit_finish_button_label]], event: "on=click:url=#{make_base_url(@id)}/#{command}:with=form")
198
- cancel_button = make_cancel_button("on=click:url=#{make_base_url(@id)}/#{command}:cancel=true:with=form")
199
- list.push(Ht.p(class: %w[edit-finish-buttons], child: [send_button, cancel_button]))
200
- return Ht.form(list)
201
- end
202
-
203
-
204
21
  end
205
22
  end
@@ -0,0 +1,199 @@
1
+ module Ezframe
2
+ module PageKit
3
+ module Default
4
+ def public_default_get
5
+ @id = get_id
6
+ div = [Ht.div(id: @dom_id[:create], child: make_index_top), Ht.div(id: @dom_id[:index], child: "", ezload: "url=#{make_base_url}")]
7
+ layout = index_layout(center: make_form(make_base_url, div))
8
+ return show_base_template(title: Message[:index_page_title], body: Html.convert(layout))
9
+ end
10
+
11
+ def public_default_post
12
+ return { inject: "##{@dom_id[:index]}", body: Html.convert(make_index_table), set_url: make_base_url }
13
+ end
14
+ end
15
+
16
+ module Index
17
+ def make_index_top
18
+ make_create_button("on=click:url=#{make_base_url}/create")
19
+ end
20
+
21
+ # 一覧表の生成
22
+ def make_index_table
23
+ list = list_for_index
24
+ target_keys = @index_keys
25
+ unless target_keys
26
+ target_keys = @column_set.keys.select { |k| !@column_set[k].no_view? }
27
+ end
28
+ labels = @table_labels
29
+ unless labels
30
+ labels = target_keys.map { |k| @column_set[k].label(force: true) || " " }
31
+ end
32
+ # 項目名欄の生成
33
+ thead = Ht.thead(Ht.tr(labels.map { |label| Ht.th(label || " ") }))
34
+
35
+ tr_a = list.map do |data|
36
+ view_a = make_index_line(target_keys, data)
37
+ td_a = view_a.map { |view| Ht.td(view) }
38
+ Ht.tr(id: "tr-#{@class_snake}-#{data[:id]}", child: td_a, ezevent: "on=click:url=#{make_base_url(data[:id])}/detail")
39
+ end
40
+ tbody = Ht.tbody(tr_a)
41
+ return [
42
+ Ht.table(id: "enable_datatable_#{@class_snake}", child: [thead, tbody], ezload: "command=enable_datatable:target=#enable_datatable_#{@class_snake}"),
43
+ Ht.div(id: @dom_id[:detail], child: ""),
44
+ ]
45
+ end
46
+
47
+ # 一覧表示の1行を生成
48
+ def make_index_line(target_keys, data)
49
+ @column_set.clear
50
+ @column_set.values = data
51
+ return target_keys.map { |key| make_index_column(key) }
52
+ end
53
+
54
+ # 一覧表示の1カラムを生成
55
+ def make_index_column(key)
56
+ column = @column_set[key.to_sym]
57
+ return column.view(force: true)
58
+ end
59
+
60
+ # 一覧ページ用のデータリスト生成
61
+ def list_for_index
62
+ return @column_set.dataset.where(deleted_at: nil).order(@sort_key).all
63
+ end
64
+
65
+ # 一覧ページ用ボタン
66
+ def button_for_index_line(data)
67
+ return Ht.button(class: %w[btn right], ezevent: "on=click:url=#{make_base_url(data[:id])}/edit", child: [Ht.icon("edit"), Message[:edit_button_label]])
68
+ end
69
+ end
70
+
71
+ module Edit
72
+ # 新規データ登録
73
+ def public_create_post
74
+ @form = @event[:form]
75
+ EzLog.debug("public_create_post: event=#{@event}")
76
+ if @event[:cancel]
77
+ return { inject: "##{@dom_id[:create]}", body: Html.convert(make_index_top) }
78
+ elsif !@form
79
+ return { inject: "##{@dom_id[:create]}", body: Html.convert(make_edit_form(:create)) }
80
+ else
81
+ # 値の保存
82
+ @column_set.clear
83
+ form_values = @form
84
+ form_values.update(@env["url_params"])
85
+ # @column_set.values = form_values
86
+ @column_set[:id].value = @id = @column_set.create(form_values)
87
+ return { redirect: make_base_url(@id) }
88
+ # return public_default_post
89
+ end
90
+ end
91
+
92
+ # データ編集受信
93
+ def public_edit_post
94
+ @id = get_id
95
+ validation = @column_set.validate(@form)
96
+ if @event[:branch] == "single_validate"
97
+ EzLog.debug("public_edit_post: single validate:event=#{@event}, form=#{@form}")
98
+ return single_validation(validation, @event[:target_key])
99
+ end
100
+ unless @event[:form]
101
+ data = @column_set.set_from_db(@id)
102
+ return show_message_page("no data", "data is not defined: #{@id}") unless data
103
+ # フォームの表示
104
+ form = make_edit_form
105
+ found_a = Ht.search(form, tag: "input")
106
+ found_a.each { |h| h.add_class("#{@class_snake}-edit-box") if h[:size] }
107
+ return { inject: "##{@dom_id[:detail]}", body: Html.convert(form) }
108
+ else
109
+ if @event[:cancel]
110
+ data = @column_set.set_from_db(@id)
111
+ return act_after_cancel
112
+ else
113
+ # 値を保存
114
+ @column_set.update(@id, @event[:form])
115
+ end
116
+ return act_after_edit
117
+ end
118
+ end
119
+
120
+ # 編集フォームの生成
121
+ def make_edit_form(command = :edit)
122
+ @id ||= get_id
123
+ target_keys = @edit_keys || @column_set.keys
124
+ list = target_keys.map do |colkey|
125
+ column = @column_set[colkey.to_sym]
126
+ unless column
127
+ EzLog.error("undefined column entry: #{colkey}")
128
+ next
129
+ end
130
+ form = column.form
131
+ Ht.p(class: %w[form-line], child: [Ht.small(column.label), form]) if form
132
+ end
133
+ send_button = Ht.button(id: "#{@class_snake}-#{command}-finish-button", class: %w[btn], child: [Ht.icon("check"), Message[:edit_finish_button_label]], ezevent: "on=click:url=#{make_base_url(@id)}/#{command}:with=form")
134
+ cancel_button = make_cancel_button("on=click:url=#{make_base_url(@id)}/#{command}:cancel=true:with=form")
135
+ list.push(Ht.p(class: %w[edit-finish-buttons], child: [send_button, cancel_button]))
136
+ return make_form("#{make_base_url}/edit", list)
137
+ end
138
+
139
+ # 編集完了後の表示
140
+ def act_after_edit
141
+ return [public_default_post, public_detail_post]
142
+ end
143
+
144
+ # キャンセル時の表示
145
+ def act_after_cancel
146
+ return public_detail_post
147
+ end
148
+ end
149
+
150
+ # 詳細表示ページ生成キット
151
+ module Detail
152
+ # データ詳細表示
153
+ def public_detail_post
154
+ @id ||= get_id
155
+ data = @column_set.set_from_db(@id)
156
+ target_keys = @detail_keys || @column_set.keys.select { |key| !@column_set[key].attribute[:no_view] }
157
+ line_a = []
158
+ target_keys.each do |key|
159
+ column = @column_set[key]
160
+ v = make_detail_line(column)
161
+ line_a.push(v) if v
162
+ end
163
+ table = Ht.div(line_a)
164
+ collection = Materialize::Collection.new
165
+ # 詳細表示用のblockを追加
166
+ collection.push(Ht.div(id: @dom_id[:detail], child: [button_for_detail_box(data), table]))
167
+ return { inject: "##{@dom_id[:detail]}", body: Html.convert(collection.to_h) }
168
+ end
169
+
170
+ # 詳細ページ用ボタン
171
+ # 詳細表示欄の一行を生成
172
+ def make_detail_line(column)
173
+ view = column.view
174
+ if view
175
+ view = Ht.pre(view) if view.strip.index("\n")
176
+ return Ht.p([Ht.small(column.label), view])
177
+ end
178
+ return nil
179
+ end
180
+
181
+ def button_for_detail_box(data)
182
+ buttons = [Ht.button(class: %w[btn right], ezevent: "on=click:url=#{make_base_url(data[:id])}/edit", child: [Ht.icon("edit"), Message[:edit_button_label]])]
183
+ if @show_delete_button
184
+ buttons.push(make_delete_button)
185
+ end
186
+ return Ht.div(class: %w[button-box], child: buttons)
187
+ end
188
+ end
189
+
190
+ module Delete
191
+ def public_delete_post
192
+ @id = get_id
193
+ dataset = DB.dataset(@column_set.name)
194
+ DB.delete(dataset, @id)
195
+ return public_default_post
196
+ end
197
+ end
198
+ end
199
+ end
@@ -1,3 +1,5 @@
1
+ require_relative "sub_page_kit"
2
+
1
3
  module Ezframe
2
4
  # 各顧客に関連づいた情報の編集を一般化したクラス
3
5
  class SubEditor < PageBase
@@ -7,7 +9,7 @@ module Ezframe
7
9
  super
8
10
  @sort_key = :id
9
11
  # @parent_key = :customer
10
- @event = @parsed_body[:event] if @parsed_body
12
+ @event = @parsed_body[:ezevent] if @parsed_body
11
13
  # @use_detail_box = true
12
14
  end
13
15
 
@@ -19,204 +21,5 @@ module Ezframe
19
21
  end
20
22
  return params[@parent_key.to_sym]
21
23
  end
22
-
23
- def public_default_post
24
- return { inject: "##{@class_snake}_tab", body: Html.convert(make_index_page) }
25
- end
26
-
27
- # 新規データ登録
28
- def public_create_post
29
- @form = @event[:form]
30
- # EzLog.debug("public_create_post: form=#{@form}")
31
- unless @form
32
- { inject: "##{@class_snake}-create-area", body: Html.convert(make_edit_form(:create)) }
33
- else
34
- # 値の保存
35
- @column_set.clear
36
- form_values = @form
37
- form_values.update(@env["url_params"])
38
- # @column_set.values = form_values
39
- @column_set[:id].value = @id = @column_set.create(form_values)
40
- # return { redirect: "#{make_base_url}/#{@id}" }
41
- return public_default_post
42
- end
43
- end
44
-
45
- # データ編集受信
46
- def public_edit_post
47
- @id ||= get_id
48
- unless @event[:form]
49
- data = @column_set.set_from_db(@id)
50
- # データが空ならエラーページ
51
- return { inject: "##{edit_inject_element}", body: "データがありません: #{@id}"} unless data
52
- # フォームの表示
53
- form = make_edit_form
54
- found_a = Ht.search(form, tag: "input")
55
- found_a.each { |h| h.add_class("#{@class_snake}-edit-box") if h[:size] }
56
- return { inject: "##{edit_inject_element}", body: Html.convert(form) }
57
- else
58
- if @event[:cancel]
59
- data = @column_set.set_from_db(@id)
60
- return act_after_cancel
61
- else
62
- # 値を保存
63
- @column_set.update(@id, @event[:form])
64
- end
65
- return act_after_edit
66
- end
67
- end
68
-
69
- # データ詳細表示
70
- def public_detail_post
71
- @id = get_id
72
- data = @column_set.set_from_db(@id)
73
- target_keys = @show_keys || @column_set.keys.select { |key| !@column_set[key].attribute[:no_view] }
74
- line_a = []
75
- target_keys.each do |key|
76
- column = @column_set[key]
77
- v = make_detail_line(column)
78
- line_a.push(v) if v
79
- end
80
- table = Ht.div(line_a)
81
- collection = Materialize::Collection.new
82
- # 詳細表示用のblockを追加
83
- collection.push(Ht.div(class: "detail-box", child: [button_for_detail_box(data), table]))
84
- return { inject: "##{edit_inject_element}", body: Html.convert(collection.to_h) }
85
- end
86
-
87
- # 削除ボタン押下時の処理
88
- def public_delete_post
89
- @id = get_id
90
- dataset = DB.dataset(@column_set.name)
91
- DB.delete(dataset, @id)
92
- return public_default_post
93
- end
94
-
95
- # 詳細表示欄の一行を生成
96
- def make_detail_line(column)
97
- view = column.view
98
- if view
99
- view = Ht.pre(view) if view.index("\n")
100
- return Ht.p([Ht.small(column.label), view])
101
- end
102
- return nil
103
- end
104
-
105
- def edit_inject_element
106
- return "#{@class_snake}_show"
107
- end
108
-
109
- def act_after_edit
110
- return [public_default_post, public_detail_post]
111
- # return { inject: edit_inject_element, body: Html.convert(make_index_line(@column_set.get_hash(:value))) }
112
- end
113
-
114
- def act_after_cancel
115
- return public_detail_post
116
- end
117
-
118
- # 一覧表の生成
119
- def make_index_page
120
- list = list_for_index
121
- target_keys = @index_keys
122
- unless target_keys
123
- target_keys = @column_set.keys.select {|k| !@column_set[k].no_view?}
124
- end
125
- # 項目名欄の生成
126
- if @table_labels
127
- thead = Ht.thead(Ht.tr(@table_labels.map {|label| Ht.th(label)}))
128
- else
129
- thead = Ht.thead(Ht.tr(target_keys.map {|key|
130
- if @column_set[key].respond_to?(:label)
131
- Ht.th(@column_set[key].label(force: true))
132
- else
133
- nil
134
- end
135
- })).compact
136
- end
137
-
138
- tr_a = list.map do |data|
139
- view_a = make_index_line(target_keys, data)
140
- td_a = view_a.map {|view| Ht.td(view)}
141
- Ht.tr(id: "tr-#{@class_snake}-#{data[:id]}", child: td_a, event: "on=click:url=#{make_base_url(data[:id])}/detail")
142
- end
143
- tbody = Ht.tbody(tr_a)
144
- return [
145
- area_for_create,
146
- Ht.table(id: "enable_datatable_#{@class_snake}", child: [thead, tbody], ezload: "command=enable_datatable:target=#enable_datatable_#{@class_snake}"),
147
- Ht.div(id: edit_inject_element),
148
- ]
149
- end
150
-
151
- # 一覧表示の1行を生成
152
- def make_index_line(target_keys, data)
153
- @column_set.clear
154
- @column_set.set_values(data, from_db: true)
155
- return target_keys.map { |key| make_index_column(key) }
156
- end
157
-
158
- # 一覧表示の1カラムを生成
159
- def make_index_column(key)
160
- column = @column_set[key.to_sym]
161
- return column.view(force: true)
162
- end
163
-
164
- # 一覧ページ用のデータリスト生成
165
- def list_for_index
166
- return @column_set.dataset.where(@parent_key.to_sym => get_parent_id, deleted_at: nil).order(@sort_key).all
167
- end
168
-
169
- # 一覧ページ用ボタン
170
- def button_for_index_line(data)
171
- Ht.button(class: %w[btn right], event: "on=click:url=#{make_base_url(data[:id])}/edit", child: [Ht.icon("edit"), Message[:edit_button_label]])
172
- end
173
-
174
- # 詳細ページ用ボタン
175
- def button_for_detail_box(data)
176
- buttons = [Ht.button(class: %w[btn right], event: "on=click:url=#{make_base_url(data[:id])}/edit", child: [Ht.icon("edit"), Message[:edit_button_label]]) ]
177
- if @show_delete_button
178
- buttons.push(make_delete_button)
179
- end
180
- return Ht.div(class: %w[button-box], child: buttons)
181
- end
182
-
183
- #--------------------------------------------------------------------------------------------------------
184
- # 新規データ追加欄
185
- def area_for_create(extra_buttons = nil)
186
- create_button = make_create_button
187
- create_button[:event] = "on=click:url=#{make_base_url}/create"
188
- return Ht.div(id: "#{@class_snake}-create-area", child: [ create_button, extra_buttons ].compact)
189
- end
190
-
191
- # 編集フォームの生成
192
- def make_edit_form(command = :edit)
193
- # @id ||= get_id
194
- if command == :edit && !@id
195
- EzLog.error "make_edit_form: @id is not defined"
196
- end
197
- target_keys = @edit_keys || @column_set.keys
198
- list = target_keys.map do |colkey|
199
- column = @column_set[colkey.to_sym]
200
- unless column
201
- EzLog.error("undefined column entry: #{colkey}")
202
- next
203
- end
204
- make_edit_line(column)
205
- end.compact
206
- event = "on=click:url=#{make_base_url(@id)}/#{command}:with=form"
207
- send_button = Ht.button(id: "#{@class_snake}-#{command}-finish-button", class: %w[btn], child: [Ht.icon("check"), Message[:edit_finish_button_label]], event: event)
208
- cancel_button = make_cancel_button("on=click:url=#{make_base_url(@id)}/#{command}:cancel=true:with=form")
209
- list.push(Ht.p(class: %w[edit-finish-buttons], child: [send_button, cancel_button]))
210
- return Ht.form(list)
211
- end
212
-
213
- def make_edit_line(column)
214
- form = column.form
215
- if form
216
- return Ht.p(class: %w[form-line], child: [ Ht.small(column.label), form ])
217
- else
218
- return nil
219
- end
220
- end
221
24
  end
222
25
  end