engine2 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Gemfile +2 -0
- data/Rakefile +138 -0
- data/conf/message.yaml +93 -0
- data/conf/message_pl.yaml +93 -0
- data/engine2.gemspec +34 -0
- data/lib/engine2.rb +34 -0
- data/lib/engine2/action.rb +217 -0
- data/lib/engine2/core.rb +572 -0
- data/lib/engine2/handler.rb +134 -0
- data/lib/engine2/meta.rb +969 -0
- data/lib/engine2/meta/decode_meta.rb +110 -0
- data/lib/engine2/meta/delete_meta.rb +73 -0
- data/lib/engine2/meta/form_meta.rb +144 -0
- data/lib/engine2/meta/infra_meta.rb +292 -0
- data/lib/engine2/meta/link_meta.rb +133 -0
- data/lib/engine2/meta/list_meta.rb +284 -0
- data/lib/engine2/meta/save_meta.rb +63 -0
- data/lib/engine2/meta/view_meta.rb +22 -0
- data/lib/engine2/model.rb +390 -0
- data/lib/engine2/models/Files.rb +38 -0
- data/lib/engine2/models/UserInfo.rb +24 -0
- data/lib/engine2/post_bootstrap.rb +83 -0
- data/lib/engine2/pre_bootstrap.rb +27 -0
- data/lib/engine2/scheme.rb +202 -0
- data/lib/engine2/templates.rb +229 -0
- data/lib/engine2/type_info.rb +342 -0
- data/lib/engine2/version.rb +9 -0
- data/public/assets/javascripts.js +13 -0
- data/public/assets/styles.css +4 -0
- data/public/css/angular-motion.css +1022 -0
- data/public/css/angular-ui-tree.min.css +1 -0
- data/public/css/app.css +196 -0
- data/public/css/bootstrap-additions.css +1560 -0
- data/public/css/bootstrap.min.css +11 -0
- data/public/css/font-awesome.min.css +4 -0
- data/public/favicon.ico +0 -0
- data/public/fonts/FontAwesome.otf +0 -0
- data/public/fonts/fontawesome-webfont.eot +0 -0
- data/public/fonts/fontawesome-webfont.svg +655 -0
- 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 +288 -0
- 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-dark.gif +0 -0
- data/public/img/ajax-loader-light.gif +0 -0
- data/public/img/ajax-loader.gif +0 -0
- data/public/js/angular-animate.js +4115 -0
- data/public/js/angular-cookies.js +322 -0
- data/public/js/angular-local-storage.js +455 -0
- data/public/js/angular-route.js +1022 -0
- data/public/js/angular-sanitize.js +717 -0
- data/public/js/angular-strap.js +4339 -0
- data/public/js/angular-strap.tpl.js +43 -0
- data/public/js/angular-ui-tree.js +1569 -0
- data/public/js/angular.js +30714 -0
- data/public/js/i18n/angular-locale_pl.js +115 -0
- data/public/js/lodash.custom.min.js +97 -0
- data/public/js/ng-file-upload-shim.min.js +2 -0
- data/public/js/ng-file-upload.min.js +3 -0
- data/views/app.coffee +3 -0
- data/views/engine2.coffee +557 -0
- data/views/engine2actions.coffee +849 -0
- data/views/engine2templates.coffee +0 -0
- data/views/fields/blob.slim +22 -0
- data/views/fields/bs_select.slim +10 -0
- data/views/fields/bsselect_picker.slim +18 -0
- data/views/fields/bsselect_picker_opt.slim +22 -0
- data/views/fields/checkbox.slim +11 -0
- data/views/fields/checkbox_buttons.slim +6 -0
- data/views/fields/checkbox_buttons_opt.slim +8 -0
- data/views/fields/currency.slim +10 -0
- data/views/fields/date.slim +21 -0
- data/views/fields/date_range.slim +44 -0
- data/views/fields/date_time.slim +42 -0
- data/views/fields/datetime.slim +42 -0
- data/views/fields/decimal.slim +11 -0
- data/views/fields/decimal_date.slim +22 -0
- data/views/fields/decimal_time.slim +26 -0
- data/views/fields/email.slim +13 -0
- data/views/fields/file_store.slim +61 -0
- data/views/fields/input_text.slim +14 -0
- data/views/fields/integer.slim +11 -0
- data/views/fields/list_bsselect.slim +18 -0
- data/views/fields/list_bsselect_opt.slim +21 -0
- data/views/fields/list_buttons.slim +3 -0
- data/views/fields/list_buttons_opt.slim +5 -0
- data/views/fields/list_select.slim +11 -0
- data/views/fields/list_select_opt.slim +15 -0
- data/views/fields/password.slim +14 -0
- data/views/fields/radio_checkbox.slim +10 -0
- data/views/fields/scaffold.slim +2 -0
- data/views/fields/scaffold_picker.slim +20 -0
- data/views/fields/select_picker.slim +12 -0
- data/views/fields/select_picker_opt.slim +16 -0
- data/views/fields/text_area.slim +10 -0
- data/views/fields/time.slim +22 -0
- data/views/fields/typeahead_picker.slim +25 -0
- data/views/index.slim +44 -0
- data/views/infra/index.slim +5 -0
- data/views/infra/inspect.slim +81 -0
- data/views/modals/close_m.slim +15 -0
- data/views/modals/confirm_m.slim +19 -0
- data/views/modals/empty_m.slim +12 -0
- data/views/modals/menu_m.slim +13 -0
- data/views/modals/yes_no_m.slim +19 -0
- data/views/panels/menu_m.slim +9 -0
- data/views/scaffold/confirm.slim +3 -0
- data/views/scaffold/fields.slim +10 -0
- data/views/scaffold/form.slim +11 -0
- data/views/scaffold/list.slim +42 -0
- data/views/scaffold/message.slim +3 -0
- data/views/scaffold/search.slim +20 -0
- data/views/scaffold/view.slim +18 -0
- data/views/search_fields/bsmselect_picker.slim +25 -0
- data/views/search_fields/bsselect_picker.slim +24 -0
- data/views/search_fields/checkbox.slim +11 -0
- data/views/search_fields/checkbox2.slim +14 -0
- data/views/search_fields/checkbox_buttons.slim +10 -0
- data/views/search_fields/date_range.slim +46 -0
- data/views/search_fields/decimal_date_range.slim +47 -0
- data/views/search_fields/input_text.slim +18 -0
- data/views/search_fields/integer.slim +18 -0
- data/views/search_fields/integer_range.slim +27 -0
- data/views/search_fields/list_bsmselect.slim +24 -0
- data/views/search_fields/list_bsselect.slim +22 -0
- data/views/search_fields/list_buttons.slim +8 -0
- data/views/search_fields/list_select.slim +17 -0
- data/views/search_fields/scaffold_picker.slim +19 -0
- data/views/search_fields/select_picker.slim +17 -0
- data/views/search_fields/typeahead_picker.slim +25 -0
- metadata +327 -0
@@ -0,0 +1,24 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
module Engine2
|
4
|
+
class UserInfo < Sequel::Model(DUMMYDB)
|
5
|
+
extend MemoryModel
|
6
|
+
set_natural_key :name
|
7
|
+
|
8
|
+
type_info do
|
9
|
+
string_field :name, 10
|
10
|
+
required :name, LOCS[:user_required]
|
11
|
+
string_field :password, 20
|
12
|
+
required :password, LOCS[:password_required]
|
13
|
+
password :password
|
14
|
+
end
|
15
|
+
|
16
|
+
def after_validation
|
17
|
+
@values[:password] = nil
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_hash
|
21
|
+
{name: @values[:name]}
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
module Sequel
|
4
|
+
module SequelFixes
|
5
|
+
def self.fix_aliased_expression ds
|
6
|
+
ds.get_opts[:select].map do |sel|
|
7
|
+
case sel
|
8
|
+
when Sequel::SQL::QualifiedIdentifier
|
9
|
+
sel.column
|
10
|
+
when Sequel::SQL::AliasedExpression
|
11
|
+
Sequel::SQL::Identifier.new sel.aliaz
|
12
|
+
else
|
13
|
+
sel # symbol ?
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
module EmulateOffsetWithRowNumber
|
20
|
+
def select_sql
|
21
|
+
return super unless emulate_offset_with_row_number?
|
22
|
+
offset = @opts[:offset]
|
23
|
+
order = @opts[:order]
|
24
|
+
if require_offset_order?
|
25
|
+
order ||= default_offset_order
|
26
|
+
if order.nil? || order.empty?
|
27
|
+
raise(Error, "#{db.database_type} requires an order be provided if using an offset")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
# columns = clone(:append_sql=>'', :placeholder_literal_null=>true).columns
|
31
|
+
columns = SequelFixes.fix_aliased_expression(clone(:append_sql=>'', :placeholder_literal_null=>true))
|
32
|
+
dsa1 = dataset_alias(1)
|
33
|
+
rn = row_number_column
|
34
|
+
sql = @opts[:append_sql] || ''
|
35
|
+
subselect_sql_append(sql, unlimited.
|
36
|
+
unordered.
|
37
|
+
select_append{ROW_NUMBER{}.over(:order=>order).as(rn)}.
|
38
|
+
from_self(:alias=>dsa1).
|
39
|
+
select(*columns).
|
40
|
+
limit(@opts[:limit]).
|
41
|
+
where(SQL::Identifier.new(rn) > offset).
|
42
|
+
order(rn))
|
43
|
+
sql
|
44
|
+
end
|
45
|
+
|
46
|
+
def default_offset_order
|
47
|
+
model.primary_keys_qualified
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
module Oracle::DatasetMethods
|
52
|
+
def select_sql
|
53
|
+
return super if @opts[:sql]
|
54
|
+
if o = @opts[:offset]
|
55
|
+
# columns = clone(:append_sql=>String.new, :placeholder_literal_null=>true).columns
|
56
|
+
columns = SequelFixes.fix_aliased_expression(clone(:append_sql=>String.new, :placeholder_literal_null=>true))
|
57
|
+
dsa1 = dataset_alias(1)
|
58
|
+
rn = row_number_column
|
59
|
+
limit = @opts[:limit]
|
60
|
+
ds = unlimited.
|
61
|
+
from_self(:alias=>dsa1).
|
62
|
+
select_append(ROW_NUMBER_EXPRESSION.as(rn)).
|
63
|
+
from_self(:alias=>dsa1).
|
64
|
+
select(*columns).
|
65
|
+
where(SQL::Identifier.new(rn) > o)
|
66
|
+
ds = ds.where(SQL::Identifier.new(rn) <= Sequel.+(o, limit)) if limit
|
67
|
+
sql = @opts[:append_sql] || String.new
|
68
|
+
subselect_sql_append(sql, ds)
|
69
|
+
sql
|
70
|
+
elsif limit = @opts[:limit]
|
71
|
+
ds = clone(:limit=>nil)
|
72
|
+
# Lock doesn't work in subselects, so don't use a subselect when locking.
|
73
|
+
# Don't use a subselect if custom SQL is used, as it breaks somethings.
|
74
|
+
ds = ds.from_self unless @opts[:lock]
|
75
|
+
sql = @opts[:append_sql] || String.new
|
76
|
+
subselect_sql_append(sql, ds.where(SQL::ComplexExpression.new(:<=, ROW_NUMBER_EXPRESSION, limit)))
|
77
|
+
sql
|
78
|
+
else
|
79
|
+
super
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end if defined? Oracle
|
83
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
module Sequel
|
4
|
+
class JDBC::Database
|
5
|
+
def metadata_schema_and_table(table, opts)
|
6
|
+
im = input_identifier_meth(opts[:dataset])
|
7
|
+
schema, table = schema_and_table(table)
|
8
|
+
schema ||= default_schema
|
9
|
+
schema ||= opts[:schema]
|
10
|
+
schema = im.call(schema) if schema
|
11
|
+
table = im.call(table)
|
12
|
+
[schema, table]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
module JDBC::AS400::DatabaseMethods
|
17
|
+
IDENTITY_VAL_LOCAL ||= "SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1".freeze
|
18
|
+
def last_insert_id(conn, opts=OPTS)
|
19
|
+
statement(conn) do |stmt|
|
20
|
+
sql = IDENTITY_VAL_LOCAL
|
21
|
+
rs = log_yield(sql){stmt.executeQuery(sql)}
|
22
|
+
rs.next
|
23
|
+
rs.getInt(1)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end if defined?(JDBC::AS400)
|
27
|
+
end if defined? JRUBY_VERSION
|
@@ -0,0 +1,202 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
module Engine2
|
4
|
+
class Schemes
|
5
|
+
CRUD ||= {create: true, view: true, modify: true, delete: true}.freeze # bulk_delete: true
|
6
|
+
VIEW ||= {view: true}.freeze
|
7
|
+
LINK ||= {star_to_many_link: true, view: true, star_to_many_unlink: true}.freeze # star_to_many_bulk_unlink: true
|
8
|
+
|
9
|
+
attr_reader :schemes, :builtin
|
10
|
+
def initialize
|
11
|
+
@builtin = {}
|
12
|
+
@schemes = {}
|
13
|
+
end
|
14
|
+
|
15
|
+
def define_scheme name, &blk
|
16
|
+
schemes = Engine2::core_loading ? @builtin : @schemes
|
17
|
+
raise "Scheme '#{name}' already defined" if schemes[name]
|
18
|
+
schemes[name] = blk
|
19
|
+
end
|
20
|
+
|
21
|
+
def clear
|
22
|
+
@schemes = {}
|
23
|
+
end
|
24
|
+
|
25
|
+
def [] name
|
26
|
+
scheme = @schemes[name]
|
27
|
+
raise E2Error.new("Scheme #{name} not found") unless scheme
|
28
|
+
scheme
|
29
|
+
end
|
30
|
+
|
31
|
+
def merge!
|
32
|
+
@schemes.merge!(@builtin){|n| raise E2Error.new("Scheme collision: #{n}")}
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
SCHEMES ||= Schemes.new
|
37
|
+
SCHEMES.builtin.clear
|
38
|
+
SCHEMES.instance_eval do
|
39
|
+
|
40
|
+
define_scheme :view do |name = :view|
|
41
|
+
define_action name, ViewMeta
|
42
|
+
end
|
43
|
+
|
44
|
+
define_scheme :create do |name = :create|
|
45
|
+
define_action name, CreateMeta do
|
46
|
+
define_action :approve, InsertMeta
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
define_scheme :modify do |name = :modify|
|
51
|
+
define_action name, ModifyMeta do
|
52
|
+
define_action :approve, UpdateMeta
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
define_scheme :delete do
|
57
|
+
define_action :confirm_delete, ConfirmMeta do
|
58
|
+
self.*.response message: LOCS[:delete_question]
|
59
|
+
self.*.panel_title LOCS[:confirm_delete_title]
|
60
|
+
define_action :delete, DeleteMeta
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
define_scheme :bulk_delete do
|
65
|
+
define_action :confirm_bulk_delete, ConfirmMeta do
|
66
|
+
self.*.response message: LOCS[:delete_question]
|
67
|
+
self.*.panel_title LOCS[:confirm_bulk_delete_title]
|
68
|
+
define_action :bulk_delete, BulkDeleteMeta
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
define_scheme :default do |name, model, options|
|
73
|
+
options ||= Schemes::CRUD
|
74
|
+
define_action name, ListMeta, model: model do
|
75
|
+
options.each{|k, v| run_scheme(k) if v}
|
76
|
+
|
77
|
+
define_action_bundle :form, :create, :modify if options[:create] && options[:modify]
|
78
|
+
# define_action_bundle :decode, :decode_entry, :decode_list, :typahead
|
79
|
+
|
80
|
+
# if ?
|
81
|
+
define_action :decode_entry, DecodeEntryMeta
|
82
|
+
define_action :decode_list, DecodeListMeta
|
83
|
+
define_action :typeahead, TypeAheadMeta
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
#
|
88
|
+
# Many to One
|
89
|
+
#
|
90
|
+
define_scheme :many_to_one do
|
91
|
+
define_action :list, ManyToOneListMeta do
|
92
|
+
run_scheme :view
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
define_scheme :decode do |model, assoc_name, options = {scaffold: true}|
|
97
|
+
assoc = model.association_reflections[assoc_name]
|
98
|
+
::Kernel::raise E2Error.new("Association '#{assoc_name}' not found for model '#{model}'") unless assoc
|
99
|
+
|
100
|
+
if self.*.assets[:model] != model && self.*.is_a?(ListMeta)
|
101
|
+
# verify relations ?
|
102
|
+
mdl = assoc[:model]
|
103
|
+
info = mdl.type_info[assoc[:keys].first]
|
104
|
+
options = info[:decode][:search]
|
105
|
+
end
|
106
|
+
|
107
|
+
define_action :"#{assoc_name}!" do
|
108
|
+
# iterate over options like in :default ?
|
109
|
+
define_action :list, DecodeListMeta, assoc: assoc if options[:list]
|
110
|
+
define_action :typeahead, TypeAheadMeta, assoc: assoc if options[:typeahead]
|
111
|
+
define_action :decode, DecodeEntryMeta, assoc: assoc do
|
112
|
+
run_scheme :many_to_one
|
113
|
+
end if options[:scaffold]
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
#
|
118
|
+
# * to Many
|
119
|
+
#
|
120
|
+
define_scheme :star_to_many_unlink do
|
121
|
+
define_action :confirm_unlink, ConfirmMeta do
|
122
|
+
self.*.response message: LOCS[:unlink_question]
|
123
|
+
self.*.panel_title LOCS[:confirm_unlink_title]
|
124
|
+
define_action :unlink, StarToManyUnlinkMeta
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
define_scheme :star_to_many_bulk_unlink do
|
129
|
+
define_action :confirm_bulk_unlink, ConfirmMeta do
|
130
|
+
self.*.response message: LOCS[:unlink_question]
|
131
|
+
self.*.panel_title LOCS[:confirm_bulk_unlink_title]
|
132
|
+
define_action :bulk_unlink, StarToManyBulkUnlinkMeta
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
define_scheme :star_to_many_link do
|
137
|
+
define_action :link_list, StarToManyLinkListMeta do
|
138
|
+
run_scheme :view
|
139
|
+
define_action :link, StarToManyLinkMeta
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
define_scheme :star_to_many do |act, assoc, model|
|
144
|
+
options = assoc[:options] || Schemes::LINK
|
145
|
+
define_action act, StarToManyListMeta, model: model, assoc: assoc do
|
146
|
+
options.each{|k, v| run_scheme(k) if v}
|
147
|
+
|
148
|
+
define_action_bundle :form, :create, :modify if options[:create] && options[:modify]
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
#
|
153
|
+
# arbitrary files per form
|
154
|
+
#
|
155
|
+
define_scheme :file_store do |model, field|
|
156
|
+
define_action :"#{field}_file_store!", FileStoreMeta do
|
157
|
+
self.*.model = model
|
158
|
+
self.*.field = field
|
159
|
+
define_action :download, DownloadFileStoreMeta
|
160
|
+
define_action :upload, UploadFileStoreMeta
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
#
|
165
|
+
# blob field in source table
|
166
|
+
#
|
167
|
+
define_scheme :blob_store do |model, field|
|
168
|
+
define_action :"#{field}_blob_store!", BlobStoreMeta do
|
169
|
+
self.*.model = model
|
170
|
+
self.*.field = field # model.type_info[field][:field]
|
171
|
+
define_action :download, DownloadBlobStoreMeta
|
172
|
+
define_action :upload, UploadBlobStoreMeta
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
#
|
177
|
+
# blob field in foreign (one to one) table
|
178
|
+
#
|
179
|
+
define_scheme :foreign_blob_store do |model, field|
|
180
|
+
define_action :"#{field}_blob_store!", ForeignBlobStoreMeta do
|
181
|
+
self.*.model = model
|
182
|
+
self.*.field = field # model.type_info[field][:field]
|
183
|
+
define_action :download, DownloadForeignBlobStoreMeta
|
184
|
+
define_action :upload, UploadBlobStoreMeta
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
define_scheme :star_to_many_field do |assoc, field|
|
189
|
+
define_action :"#{field}!", StarToManyFieldMeta, assoc: assoc do
|
190
|
+
run_scheme :view
|
191
|
+
define_action :confirm_unlink, ConfirmMeta do
|
192
|
+
self.*.response message: LOCS[:unlink_question]
|
193
|
+
define_action :unlink, StarToManyFieldUnlinkMeta
|
194
|
+
end
|
195
|
+
define_action :link_list, StarToManyFieldLinkListMeta do
|
196
|
+
run_scheme :view
|
197
|
+
end
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
end
|
202
|
+
end
|
@@ -0,0 +1,229 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
module Engine2
|
4
|
+
BS_ANIMATION ||= "am-flip-x" # "am-fade"
|
5
|
+
|
6
|
+
class Templates
|
7
|
+
class << self
|
8
|
+
def default_template
|
9
|
+
{template: "fields/input_text"}
|
10
|
+
end
|
11
|
+
|
12
|
+
def text_area cols, rows
|
13
|
+
{template: "fields/text_area", cols: cols, rows: rows}
|
14
|
+
end
|
15
|
+
|
16
|
+
def input_text length
|
17
|
+
{template: "fields/input_text", length: length}
|
18
|
+
end
|
19
|
+
|
20
|
+
def text
|
21
|
+
{template: "fields/text"}
|
22
|
+
end
|
23
|
+
|
24
|
+
def password length
|
25
|
+
{template: "fields/password", length: length}
|
26
|
+
end
|
27
|
+
|
28
|
+
def file_store
|
29
|
+
{template: "fields/file_store"}
|
30
|
+
end
|
31
|
+
|
32
|
+
def blob
|
33
|
+
{template: "fields/blob"}
|
34
|
+
end
|
35
|
+
|
36
|
+
def integer
|
37
|
+
{template: "fields/integer"}
|
38
|
+
end
|
39
|
+
|
40
|
+
def decimal
|
41
|
+
{template: "fields/integer"}
|
42
|
+
end
|
43
|
+
|
44
|
+
def decimal_date
|
45
|
+
{template: "fields/decimal_date", animation: BS_ANIMATION}
|
46
|
+
end
|
47
|
+
|
48
|
+
def decimal_time
|
49
|
+
{template: "fields/decimal_time", animation: BS_ANIMATION}
|
50
|
+
end
|
51
|
+
|
52
|
+
def date_picker
|
53
|
+
{template: "fields/date", animation: BS_ANIMATION}
|
54
|
+
end
|
55
|
+
|
56
|
+
def time_picker
|
57
|
+
{template: "fields/time", animation: BS_ANIMATION}
|
58
|
+
end
|
59
|
+
|
60
|
+
def datetime_picker
|
61
|
+
{template: "fields/datetime", animation: BS_ANIMATION}
|
62
|
+
end
|
63
|
+
|
64
|
+
def list_select length, options = {}
|
65
|
+
options.merge({
|
66
|
+
template: options[:optional] ? "fields/list_select_opt" : "fields/list_select",
|
67
|
+
length: length
|
68
|
+
})
|
69
|
+
end
|
70
|
+
|
71
|
+
def list_bsselect length, options = {}
|
72
|
+
options.merge({
|
73
|
+
template: options[:optional] ? "fields/list_bsselect_opt" : "fields/list_bsselect",
|
74
|
+
length: length,
|
75
|
+
animation: BS_ANIMATION
|
76
|
+
})
|
77
|
+
end
|
78
|
+
|
79
|
+
def list_buttons options = {}
|
80
|
+
options.merge({
|
81
|
+
template: options[:optional] ? "fields/list_buttons_opt" : "fields/list_buttons"
|
82
|
+
})
|
83
|
+
end
|
84
|
+
|
85
|
+
def select_picker options = {}
|
86
|
+
options.merge({
|
87
|
+
template: options[:optional] ? "fields/select_picker_opt" : "fields/select_picker"
|
88
|
+
})
|
89
|
+
end
|
90
|
+
|
91
|
+
def bsselect_picker options = {}
|
92
|
+
options.merge({
|
93
|
+
template: options[:optional] ? "fields/bsselect_picker_opt" : "fields/bsselect_picker",
|
94
|
+
animation: BS_ANIMATION
|
95
|
+
})
|
96
|
+
end
|
97
|
+
|
98
|
+
# def bs_select_picker(options)
|
99
|
+
# {
|
100
|
+
# resource: options[:resource],
|
101
|
+
# template: "fields/bs_select"
|
102
|
+
# }
|
103
|
+
# end
|
104
|
+
|
105
|
+
def scaffold_picker options = {}
|
106
|
+
options.merge({
|
107
|
+
template: 'fields/scaffold_picker'
|
108
|
+
})
|
109
|
+
end
|
110
|
+
|
111
|
+
def typeahead_picker
|
112
|
+
{template: "fields/typeahead_picker", animation: BS_ANIMATION}
|
113
|
+
end
|
114
|
+
|
115
|
+
def email length
|
116
|
+
{template: "fields/email", length: length}
|
117
|
+
end
|
118
|
+
|
119
|
+
def date_range
|
120
|
+
{template: "fields/date_range", animation: BS_ANIMATION}
|
121
|
+
end
|
122
|
+
|
123
|
+
def date_time
|
124
|
+
{template: "fields/date_time", animation: BS_ANIMATION}
|
125
|
+
end
|
126
|
+
|
127
|
+
def currency
|
128
|
+
{template: "fields/currency"}
|
129
|
+
end
|
130
|
+
|
131
|
+
def checkbox
|
132
|
+
{template: "fields/checkbox"}
|
133
|
+
end
|
134
|
+
|
135
|
+
def checkbox_buttons options = {}
|
136
|
+
options.merge({
|
137
|
+
template: options[:optional] ? "fields/checkbox_buttons_opt" : "fields/checkbox_buttons"
|
138
|
+
})
|
139
|
+
end
|
140
|
+
|
141
|
+
def radio_checkbox
|
142
|
+
{template: "fields/radio_checkbox"}
|
143
|
+
end
|
144
|
+
|
145
|
+
def scaffold
|
146
|
+
{template: "fields/scaffold"}
|
147
|
+
end
|
148
|
+
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
class SearchTemplates
|
153
|
+
class << self
|
154
|
+
def input_text
|
155
|
+
{template: "search_fields/input_text"}
|
156
|
+
end
|
157
|
+
|
158
|
+
def date_range options = {}
|
159
|
+
options.merge({
|
160
|
+
template: "search_fields/date_range",
|
161
|
+
animation: BS_ANIMATION
|
162
|
+
})
|
163
|
+
end
|
164
|
+
|
165
|
+
def integer_range
|
166
|
+
{template: "search_fields/integer_range"}
|
167
|
+
end
|
168
|
+
|
169
|
+
def integer
|
170
|
+
{template: "search_fields/integer"}
|
171
|
+
end
|
172
|
+
|
173
|
+
def select_picker options = {}
|
174
|
+
options.merge({
|
175
|
+
template: "search_fields/select_picker"
|
176
|
+
})
|
177
|
+
end
|
178
|
+
|
179
|
+
def bsselect_picker options = {}
|
180
|
+
options.merge({
|
181
|
+
template: options[:multiple] ? "search_fields/bsmselect_picker" : "search_fields/bsselect_picker",
|
182
|
+
animation: BS_ANIMATION
|
183
|
+
})
|
184
|
+
end
|
185
|
+
|
186
|
+
def scaffold_picker options = {}
|
187
|
+
options.merge({
|
188
|
+
# template: options[:multiple] ? "search_fields/scaffold_picker" : "search_fields/scaffold_picker"
|
189
|
+
template: "search_fields/scaffold_picker"
|
190
|
+
})
|
191
|
+
end
|
192
|
+
|
193
|
+
def typeahead_picker
|
194
|
+
{template: "search_fields/typeahead_picker", animation: BS_ANIMATION}
|
195
|
+
end
|
196
|
+
|
197
|
+
# def checkbox_search true_v = "1", false_v = "0"
|
198
|
+
# {
|
199
|
+
# template: "search_fields/checkbox2",
|
200
|
+
# true_value: true_v,
|
201
|
+
# false_value: false_v
|
202
|
+
# }
|
203
|
+
# end
|
204
|
+
|
205
|
+
def checkbox_buttons
|
206
|
+
{template: 'search_fields/checkbox_buttons'}
|
207
|
+
end
|
208
|
+
|
209
|
+
def list_select
|
210
|
+
{template: "search_fields/list_select"}
|
211
|
+
end
|
212
|
+
|
213
|
+
def list_bsselect options = {}
|
214
|
+
options.merge({
|
215
|
+
template: options[:multiple] ? "search_fields/list_bsmselect" : "search_fields/list_bsselect",
|
216
|
+
animation: BS_ANIMATION
|
217
|
+
})
|
218
|
+
end
|
219
|
+
|
220
|
+
def list_buttons
|
221
|
+
{template: "search_fields/list_buttons"}
|
222
|
+
end
|
223
|
+
|
224
|
+
def decimal_date
|
225
|
+
{template: "search_fields/decimal_date_range", animation: BS_ANIMATION}
|
226
|
+
end
|
227
|
+
end
|
228
|
+
end
|
229
|
+
end
|