engine2 1.0.3 → 1.0.4
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 +4 -4
- data/Rakefile +3 -117
- data/{views → app}/app.coffee +0 -0
- data/{public/css → app}/app.css +203 -196
- data/{views → app}/engine2.coffee +111 -60
- data/{views → app}/engine2actions.coffee +47 -28
- data/bower.json +13 -0
- data/conf/message.yaml +2 -1
- data/conf/message_pl.yaml +2 -1
- data/config.coffee +62 -0
- data/engine2.gemspec +2 -5
- data/lib/engine2.rb +1 -1
- data/lib/engine2/action.rb +9 -24
- data/lib/engine2/core.rb +9 -8
- data/lib/engine2/handler.rb +1 -5
- data/lib/engine2/meta.rb +61 -24
- data/lib/engine2/meta/array_meta.rb +82 -0
- data/lib/engine2/meta/decode_meta.rb +1 -1
- data/lib/engine2/meta/infra_meta.rb +21 -26
- data/lib/engine2/meta/list_meta.rb +2 -3
- data/lib/engine2/model.rb +5 -5
- data/lib/engine2/pre_bootstrap.rb +9 -1
- data/lib/engine2/scheme.rb +4 -0
- data/lib/engine2/type_info.rb +8 -1
- data/lib/engine2/version.rb +1 -1
- data/package.json +38 -0
- data/public/img/ajax-loader.gif +0 -0
- data/views/fields/blob.slim +4 -5
- data/views/fields/bs_select.slim +2 -2
- data/views/fields/bsselect_picker.slim +1 -2
- data/views/fields/bsselect_picker_opt.slim +1 -2
- data/views/fields/checkbox.slim +1 -1
- data/views/fields/checkbox_buttons.slim +1 -1
- data/views/fields/checkbox_buttons_opt.slim +1 -1
- data/views/fields/currency.slim +2 -2
- data/views/fields/date.slim +0 -1
- data/views/fields/date_range.slim +0 -1
- data/views/fields/date_time.slim +0 -1
- data/views/fields/datetime.slim +0 -2
- data/views/fields/decimal.slim +0 -1
- data/views/fields/decimal_date.slim +0 -1
- data/views/fields/decimal_time.slim +0 -1
- data/views/fields/email.slim +1 -2
- data/views/fields/file_store.slim +1 -1
- data/views/fields/input_text.slim +1 -2
- data/views/fields/integer.slim +1 -1
- data/views/fields/list_bsselect.slim +1 -2
- data/views/fields/list_bsselect_opt.slim +2 -3
- data/views/fields/list_buttons.slim +1 -1
- data/views/fields/list_buttons_opt.slim +1 -1
- data/views/fields/list_select.slim +1 -2
- data/views/fields/list_select_opt.slim +2 -3
- data/views/fields/password.slim +1 -2
- data/views/fields/radio_checkbox.slim +1 -1
- data/views/fields/scaffold.slim +1 -1
- data/views/fields/scaffold_picker.slim +1 -2
- data/views/fields/select_picker.slim +1 -2
- data/views/fields/select_picker_opt.slim +1 -2
- data/views/fields/text_area.slim +0 -1
- data/views/fields/time.slim +0 -1
- data/views/fields/typeahead_picker.slim +1 -2
- data/views/index.slim +4 -8
- data/views/scaffold/fields.slim +4 -4
- data/views/scaffold/form.slim +1 -7
- data/views/scaffold/form_collapse.slim +19 -0
- data/views/scaffold/form_tabs.slim +9 -0
- data/views/scaffold/list.slim +1 -12
- data/views/scaffold/search.slim +2 -9
- data/views/scaffold/search_collapse.slim +26 -0
- data/views/scaffold/search_tabs.slim +15 -0
- data/views/scaffold/view.slim +5 -15
- data/views/scaffold/view_collapse.slim +22 -0
- data/views/scaffold/view_tabs.slim +11 -0
- data/views/search_fields/bsmselect_picker.slim +1 -2
- data/views/search_fields/bsselect_picker.slim +1 -2
- data/views/search_fields/checkbox.slim +3 -3
- data/views/search_fields/checkbox2.slim +5 -5
- data/views/search_fields/checkbox_buttons.slim +2 -2
- data/views/search_fields/date_range.slim +0 -2
- data/views/search_fields/decimal_date_range.slim +5 -5
- data/views/search_fields/input_text.slim +2 -2
- data/views/search_fields/integer.slim +1 -1
- data/views/search_fields/integer_range.slim +2 -2
- data/views/search_fields/list_bsmselect.slim +1 -1
- data/views/search_fields/list_bsselect.slim +0 -1
- data/views/search_fields/list_buttons.slim +2 -2
- data/views/search_fields/list_select.slim +1 -2
- data/views/search_fields/scaffold_picker.slim +1 -2
- data/views/search_fields/select_picker.slim +1 -2
- data/views/search_fields/typeahead_picker.slim +1 -2
- metadata +29 -103
- data/public/assets/javascripts.js +0 -13
- data/public/assets/styles.css +0 -4
- data/public/css/angular-motion.css +0 -1022
- data/public/css/angular-ui-tree.min.css +0 -1
- data/public/css/bootstrap-additions.css +0 -1560
- data/public/css/bootstrap.min.css +0 -11
- data/public/css/font-awesome.min.css +0 -4
- data/public/fonts/FontAwesome.otf +0 -0
- data/public/fonts/fontawesome-webfont.eot +0 -0
- data/public/fonts/fontawesome-webfont.svg +0 -655
- data/public/fonts/fontawesome-webfont.ttf +0 -0
- data/public/fonts/fontawesome-webfont.woff +0 -0
- data/public/fonts/fontawesome-webfont.woff2 +0 -0
- data/public/fonts/glyphicons-halflings-regular.eot +0 -0
- data/public/fonts/glyphicons-halflings-regular.svg +0 -288
- data/public/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/public/fonts/glyphicons-halflings-regular.woff +0 -0
- data/public/fonts/glyphicons-halflings-regular.woff2 +0 -0
- data/public/images/file.png +0 -0
- data/public/images/folder-closed.png +0 -0
- data/public/images/folder.png +0 -0
- data/public/images/node-closed-2.png +0 -0
- data/public/images/node-closed-light.png +0 -0
- data/public/images/node-closed.png +0 -0
- data/public/images/node-opened-2.png +0 -0
- data/public/images/node-opened-light.png +0 -0
- data/public/images/node-opened.png +0 -0
- data/public/img/ajax-loader-light.gif +0 -0
- data/public/js/angular-animate.js +0 -4147
- data/public/js/angular-cookies.js +0 -322
- data/public/js/angular-local-storage.js +0 -455
- data/public/js/angular-route.js +0 -1025
- data/public/js/angular-sanitize.js +0 -717
- data/public/js/angular-strap.js +0 -4339
- data/public/js/angular-strap.tpl.js +0 -43
- data/public/js/angular-ui-tree.js +0 -1569
- data/public/js/angular.js +0 -30868
- data/public/js/i18n/angular-locale_pl.js +0 -115
- data/public/js/lodash.custom.min.js +0 -99
- data/public/js/ng-file-upload-shim.min.js +0 -2
- data/public/js/ng-file-upload.min.js +0 -3
- data/views/engine2templates.coffee +0 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
3
|
+
module Engine2
|
|
4
|
+
class ArrayListMeta < Meta
|
|
5
|
+
meta_type :list
|
|
6
|
+
include MetaListSupport
|
|
7
|
+
|
|
8
|
+
(DefaultFilters ||= {}).merge!(
|
|
9
|
+
exact: lambda{|entries, name, value, type_info, hash|
|
|
10
|
+
entries.select{|e|e[name] == value}
|
|
11
|
+
},
|
|
12
|
+
string: lambda{|entries, name, value, type_info, hash|
|
|
13
|
+
entries.select{|e|e[name].to_s[value]}
|
|
14
|
+
},
|
|
15
|
+
boolean: lambda{|*args| DefaultFilters[:exact].(*args)},
|
|
16
|
+
integer: lambda{|entries, name, value, type_info, hash|
|
|
17
|
+
if value.is_a? Hash
|
|
18
|
+
from, to = value[:from], value[:to]
|
|
19
|
+
if from && to
|
|
20
|
+
entries.select{|e|e[name] >= from.to_i && e[name] <= to.to_i}
|
|
21
|
+
else
|
|
22
|
+
entries.select{|e| from ? e[name] >= from.to_i : e[name] <= to.to_i}
|
|
23
|
+
end
|
|
24
|
+
elsif value.is_a? Integer
|
|
25
|
+
entries.select{|e|e[name] == value.to_i}
|
|
26
|
+
else
|
|
27
|
+
nil
|
|
28
|
+
end
|
|
29
|
+
}
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
def data_source handler
|
|
33
|
+
[]
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def invoke handler
|
|
37
|
+
params = handler.params
|
|
38
|
+
# if params[:initial] || params[:refresh]
|
|
39
|
+
entries = data_source(handler)
|
|
40
|
+
|
|
41
|
+
per_page = lookup(:config, :per_page)
|
|
42
|
+
page = params[:page].to_i
|
|
43
|
+
handler.permit page >= 0 && page < 1000
|
|
44
|
+
|
|
45
|
+
if order_str = params[:order]
|
|
46
|
+
order = order_str.to_sym
|
|
47
|
+
handler.permit lookup(:info, order, :sort)
|
|
48
|
+
entries = entries.sort_by{|e|e[order].to_s}
|
|
49
|
+
entries = entries.reverse if params[:asc] == "true"
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
if search = params[:search]
|
|
53
|
+
entries = list_search(entries, handler, search)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
{entries: entries.drop(page).take(per_page), count: entries.size}
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def list_search entries, handler, search
|
|
60
|
+
hash = JSON.parse(search, symbolize_names: true) rescue handler.halt_forbidden
|
|
61
|
+
model = assets[:model]
|
|
62
|
+
sfields = lookup(:search_fields)
|
|
63
|
+
handler.permit sfields
|
|
64
|
+
hash.each_pair do |name, value|
|
|
65
|
+
handler.permit sfields.include?(name)
|
|
66
|
+
|
|
67
|
+
type_info = get_type_info(name)
|
|
68
|
+
entries = if filter = (@filters && @filters[name]) || (dynamic? && (static.filters && static.filters[name]))
|
|
69
|
+
filter.(entries, hash, handler)
|
|
70
|
+
elsif filter = DefaultFilters[type_info[:otype]]
|
|
71
|
+
filter.(entries, name, value, type_info, hash)
|
|
72
|
+
else
|
|
73
|
+
raise E2Error.new("Filter not found for field '#{name}' in model '#{model}'") unless filter
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
handler.permit entries
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
entries
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -18,7 +18,7 @@ module Engine2
|
|
|
18
18
|
|
|
19
19
|
@meta_type = :infra
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
define_invoke do |handler|
|
|
22
22
|
user = handler.user
|
|
23
23
|
{user: user ? user.to_hash : nil}
|
|
24
24
|
end
|
|
@@ -41,40 +41,35 @@ module Engine2
|
|
|
41
41
|
extend MetaPanelSupport, MetaMenuSupport
|
|
42
42
|
modal_action
|
|
43
43
|
panel_template 'infra/inspect'
|
|
44
|
-
panel_title "Inspect"
|
|
44
|
+
panel_title "#{:wrench.icon} Inspect"
|
|
45
45
|
panel_class "modal-huge"
|
|
46
|
+
panel[:backdrop] = true
|
|
46
47
|
menu(:panel_menu).option :cancel, icon: "remove"
|
|
47
|
-
|
|
48
|
-
# def invoke handler;{};end
|
|
49
48
|
end
|
|
50
49
|
define_action :inspect do
|
|
51
50
|
self.* do
|
|
52
51
|
@meta_type = :inspect
|
|
53
52
|
end
|
|
54
53
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
{models: Sequel::DATABASES.map{|db| {name: db.uri, models: db.models.keys} }}
|
|
58
|
-
end
|
|
54
|
+
define_action_invoke :models do |handler|
|
|
55
|
+
{models: Sequel::DATABASES.map{|db| {name: db.uri, models: db.models.keys} }}
|
|
59
56
|
end
|
|
60
57
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
{
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
type_info: model.type_info
|
|
75
|
-
}
|
|
58
|
+
define_action_invoke :model_info do |handler|
|
|
59
|
+
db_name = handler.params[:db]
|
|
60
|
+
handler.permit db = Sequel::DATABASES.find{|d|d.uri == db_name || (d.uri && d.uri.start_with?(db_name))}
|
|
61
|
+
handler.permit model = db.models[handler.params[:model].to_sym]
|
|
62
|
+
{
|
|
63
|
+
model!: {
|
|
64
|
+
info: {
|
|
65
|
+
name: model.to_s,
|
|
66
|
+
table: model.table_name
|
|
67
|
+
},
|
|
68
|
+
assoc: model.association_reflections,
|
|
69
|
+
schema: model.db_schema,
|
|
70
|
+
type_info: model.type_info
|
|
76
71
|
}
|
|
77
|
-
|
|
72
|
+
}
|
|
78
73
|
end
|
|
79
74
|
end
|
|
80
75
|
end
|
|
@@ -189,7 +184,7 @@ module Engine2
|
|
|
189
184
|
|
|
190
185
|
inf = model.type_info[field]
|
|
191
186
|
assoc = model.association_reflections[inf[:assoc_name]]
|
|
192
|
-
blob_model =
|
|
187
|
+
blob_model = assoc.associated_class
|
|
193
188
|
|
|
194
189
|
rec = model.naked.select(assoc[:key]).where(model.primary_keys_hash(split_keys(id))).first
|
|
195
190
|
handler.permit rec
|
|
@@ -208,7 +203,7 @@ module Engine2
|
|
|
208
203
|
model = action.parent.*.model
|
|
209
204
|
inf = model.type_info[action.parent.*.field]
|
|
210
205
|
assoc = model.association_reflections[inf[:assoc_name]]
|
|
211
|
-
blob_model =
|
|
206
|
+
blob_model = assoc.associated_class
|
|
212
207
|
handler.permit id = handler.params[:id]
|
|
213
208
|
rec = model.naked.select(assoc[:key]).where(model.primary_keys_hash(split_keys(id))).first
|
|
214
209
|
handler.permit rec
|
|
@@ -48,8 +48,7 @@ module Engine2
|
|
|
48
48
|
if keys.length == 1
|
|
49
49
|
query.where(name => value)
|
|
50
50
|
else
|
|
51
|
-
query.where(keys.map{|k| hash[k]}.transpose.map{|vals| Hash[keys.zip(vals)]}.inject{|q, c| q | c
|
|
52
|
-
})
|
|
51
|
+
query.where(keys.map{|k| hash[k]}.transpose.map{|vals| Hash[keys.zip(vals)]}.inject{|q, c| q | c})
|
|
53
52
|
end
|
|
54
53
|
when :list_select
|
|
55
54
|
query.where(name => value) # decode in sql query ?
|
|
@@ -123,7 +122,7 @@ module Engine2
|
|
|
123
122
|
name = model.type_info[name] ? name.qualify(model.table_name) : Sequel.expr(name)
|
|
124
123
|
filter.(query, name, value, type_info, hash)
|
|
125
124
|
else
|
|
126
|
-
raise E2Error.new("Filter not found for field #{name} in model #{model}") unless filter
|
|
125
|
+
raise E2Error.new("Filter not found for field '#{name}' in model '#{model}'") unless filter
|
|
127
126
|
end
|
|
128
127
|
|
|
129
128
|
handler.permit query
|
data/lib/engine2/model.rb
CHANGED
|
@@ -46,7 +46,7 @@ module Engine2
|
|
|
46
46
|
@model.primary_keys.each{|pk| (schema[pk]||={})[:primary_key] = true} if @model.primary_key
|
|
47
47
|
|
|
48
48
|
schema.each_pair do |name, db_info|
|
|
49
|
-
@info[name] = {
|
|
49
|
+
@info[name] = {}
|
|
50
50
|
|
|
51
51
|
case db_info[:type]
|
|
52
52
|
when :integer
|
|
@@ -119,7 +119,7 @@ module Engine2
|
|
|
119
119
|
|
|
120
120
|
def verify_associations
|
|
121
121
|
one_to_many_associations.each do |name, assoc|
|
|
122
|
-
other =
|
|
122
|
+
other = assoc.associated_class
|
|
123
123
|
other_type_info = other.type_info
|
|
124
124
|
if other_keys = assoc[:keys]
|
|
125
125
|
other_keys.each do |key|
|
|
@@ -307,7 +307,7 @@ module Engine2
|
|
|
307
307
|
foreign_blob_store: lambda{|record, field, info|
|
|
308
308
|
if value = record.values[field] # attachment info
|
|
309
309
|
assoc = record.model.association_reflections[info[:assoc_name]]
|
|
310
|
-
blob_model =
|
|
310
|
+
blob_model = assoc.associated_class
|
|
311
311
|
file_fields = {info[:bytes_field] => :$data, info[:name_field] => :$name_field, info[:mime_field] => :$mime_field}
|
|
312
312
|
upload = info[:store][:upload]
|
|
313
313
|
file_data = {data: Sequel.blob(open("#{upload}/#{value[:rackname]}", "rb"){|f|f.read}), name_field: value[:name], mime_field: value[:mime]}
|
|
@@ -331,7 +331,7 @@ module Engine2
|
|
|
331
331
|
value = record.values[field]
|
|
332
332
|
if value && value.is_a?(Hash)
|
|
333
333
|
assoc = record.model.association_reflections[info[:assoc_name]]
|
|
334
|
-
other_model =
|
|
334
|
+
other_model = assoc.associated_class
|
|
335
335
|
unlinked = value[:unlinked]
|
|
336
336
|
linked = value[:linked]
|
|
337
337
|
parent_key = record.primary_key_values
|
|
@@ -383,7 +383,7 @@ module Engine2
|
|
|
383
383
|
assoc = record.model.association_reflections[info[:assoc_name]]
|
|
384
384
|
key = record.model.naked.select(assoc[:key]).where(record.model.primary_keys_hash(record.primary_key_values)).first
|
|
385
385
|
if key
|
|
386
|
-
blob_model =
|
|
386
|
+
blob_model = assoc.associated_class
|
|
387
387
|
blob_model.where(blob_model.primary_key => key[assoc[:key]]).delete
|
|
388
388
|
end
|
|
389
389
|
}
|
|
@@ -24,4 +24,12 @@ module Sequel
|
|
|
24
24
|
end
|
|
25
25
|
end
|
|
26
26
|
end if defined?(JDBC::AS400)
|
|
27
|
-
|
|
27
|
+
|
|
28
|
+
module SchemaCaching
|
|
29
|
+
def load_schema_cache(file)
|
|
30
|
+
@schemas = Marshal.load(File.read(file, mode: 'rb'))
|
|
31
|
+
nil
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end if defined? JRUBY_VERSION
|
data/lib/engine2/scheme.rb
CHANGED
data/lib/engine2/type_info.rb
CHANGED
|
@@ -19,6 +19,7 @@ module Engine2
|
|
|
19
19
|
|
|
20
20
|
info.merge!({
|
|
21
21
|
name: field,
|
|
22
|
+
otype: type,
|
|
22
23
|
type: type,
|
|
23
24
|
validations: {}
|
|
24
25
|
})
|
|
@@ -67,6 +68,11 @@ module Engine2
|
|
|
67
68
|
end
|
|
68
69
|
end
|
|
69
70
|
|
|
71
|
+
def boolean_field field
|
|
72
|
+
define_field field, :boolean do |info|
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
70
76
|
def date_field field, format, model_format
|
|
71
77
|
define_field field, :date do |info|
|
|
72
78
|
info[:format] = format
|
|
@@ -247,9 +253,10 @@ module Engine2
|
|
|
247
253
|
end
|
|
248
254
|
end
|
|
249
255
|
|
|
250
|
-
def currency field
|
|
256
|
+
def currency field, symbol = LOCS[:currency_symbol]
|
|
251
257
|
modify_field field do |info|
|
|
252
258
|
info[:type] = :currency
|
|
259
|
+
info[:symbol] = symbol
|
|
253
260
|
info[:validations][:currency] = true
|
|
254
261
|
end
|
|
255
262
|
end
|
data/lib/engine2/version.rb
CHANGED
data/package.json
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "engine2",
|
|
3
|
+
"description": "engine2",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"postinstall": "bower install",
|
|
7
|
+
"dev": "brunch w",
|
|
8
|
+
"build": "brunch build --production"
|
|
9
|
+
},
|
|
10
|
+
"dependencies": {
|
|
11
|
+
"angular": "^1.5.8",
|
|
12
|
+
"angular-animate": "^1.5.8",
|
|
13
|
+
"angular-cookies": "^1.5.8",
|
|
14
|
+
"angular-local-storage": "0.1.5",
|
|
15
|
+
"angular-motion": "^0.4.0",
|
|
16
|
+
"angular-route": "^1.5.8",
|
|
17
|
+
"angular-sanitize": "^1.5.8",
|
|
18
|
+
"angular-ui-tree": "2.22.1",
|
|
19
|
+
"bootstrap": "^3.3.0",
|
|
20
|
+
"bootstrap-additions": "0.3.1",
|
|
21
|
+
"font-awesome": "~4.7.0",
|
|
22
|
+
"lodash": "~4.17.0",
|
|
23
|
+
"ng-file-upload": "12.2.12"
|
|
24
|
+
},
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"auto-reload-brunch": "^2.7.1",
|
|
27
|
+
"bower": "~1.8.0",
|
|
28
|
+
"brunch": "^2.9.1",
|
|
29
|
+
"clean-css-brunch": "^2.0.0",
|
|
30
|
+
"coffee-script-brunch": "^2.1.0",
|
|
31
|
+
"copycat-brunch": "^1.1.0",
|
|
32
|
+
"css-brunch": "^2.6.1",
|
|
33
|
+
"javascript-brunch": "^2.0.0",
|
|
34
|
+
"ng-annotate-brunch": "^1.7.2",
|
|
35
|
+
"replacement-brunch": "^2.0.4",
|
|
36
|
+
"uglify-js-brunch": "^2.0.1"
|
|
37
|
+
}
|
|
38
|
+
}
|
data/public/img/ajax-loader.gif
CHANGED
|
Binary file
|
data/views/fields/blob.slim
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
e2-action action="[f + '_blob_store!']"
|
|
2
2
|
.col-lg-11
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
]
|
|
3
|
+
input [
|
|
4
|
+
type="hidden"
|
|
5
|
+
ng-model="action.record[f]"
|
|
6
|
+
]
|
|
8
7
|
|
|
9
8
|
div
|
|
10
9
|
.progress.progress-striped
|
data/views/fields/bs_select.slim
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
select [
|
|
3
3
|
ng-model="action.record[f]"
|
|
4
4
|
bs-options="v.id as v.value for v in values"
|
|
5
|
-
select-resource="
|
|
5
|
+
select-resource="info.render.resource"
|
|
6
6
|
bs-select=""
|
|
7
|
-
ng-disabled="
|
|
7
|
+
ng-disabled="info.disabled"
|
|
8
8
|
class="form-control input-sm"
|
|
9
9
|
e2-field=""
|
|
10
10
|
]
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
e2-action action="[
|
|
1
|
+
e2-action action="[info.assoc, 'list']"
|
|
2
2
|
.col-lg-7.col-md-8.col-sm-12
|
|
3
3
|
button.btn.btn-default.btn-sm [
|
|
4
4
|
type="button"
|
|
5
|
-
ng-init="info = action.meta.info[f]"
|
|
6
5
|
ng-model="action.selected"
|
|
7
6
|
bs-options="v.id as v.value for v in action.values"
|
|
8
7
|
ng-change="action.change()"
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
e2-action action="[
|
|
1
|
+
e2-action action="[info.assoc, 'list']"
|
|
2
2
|
.col-lg-7.col-md-12.col-sm-12
|
|
3
3
|
.input-group.input-group-sm
|
|
4
4
|
button.btn.btn-default.btn-sm [
|
|
5
5
|
type="button"
|
|
6
|
-
ng-init="info = action.meta.info[f]"
|
|
7
6
|
ng-model="action.selected"
|
|
8
7
|
bs-options="v.id as v.value for v in action.values"
|
|
9
8
|
ng-change="action.change()"
|
data/views/fields/checkbox.slim
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
.col-lg-1
|
|
2
2
|
.checkbox
|
|
3
3
|
input [
|
|
4
|
-
ng-init="
|
|
4
|
+
ng-init="action.record[f] = action.record[f] || info.render.false_value"
|
|
5
5
|
type="checkbox"
|
|
6
6
|
ng-model="action.record[f]"
|
|
7
7
|
ng-true-value="{{::info.render.true_value}}"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
.col-lg-12
|
|
2
|
-
.btn-group.btn-group-sm ng-init="
|
|
2
|
+
.btn-group.btn-group-sm ng-init="(action.record[f] === undefined) && (action.record[f] = info.render.false_value)" ng-model="action.record[f]" e2-field=""
|
|
3
3
|
a.btn.btn-default ng-class="action.record[f] === info.render.true_value && 'active'" ng-click="action.record[f] = info.render.true_value" ng-disabled="info.disabled"
|
|
4
4
|
span.glyphicon.glyphicon-check
|
|
5
5
|
a.btn.btn-default ng-class="action.record[f] === info.render.false_value && 'active'" ng-click="action.record[f] = info.render.false_value" ng-disabled="info.disabled"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
.col-lg-12
|
|
2
|
-
.btn-group.btn-group-sm ng-
|
|
2
|
+
.btn-group.btn-group-sm ng-model="action.record[f]" e2-field=""
|
|
3
3
|
a.btn.btn-default ng-class="action.record[f] === info.render.true_value && 'active'" ng-click="action.record[f] = info.render.true_value" ng-disabled="info.disabled"
|
|
4
4
|
span.glyphicon.glyphicon-check
|
|
5
5
|
a.btn.btn-default ng-class="action.record[f] === info.render.false_value && 'active'" ng-click="action.record[f] = info.render.false_value" ng-disabled="info.disabled"
|
data/views/fields/currency.slim
CHANGED
data/views/fields/date.slim
CHANGED