engine2 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (145) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +2 -0
  3. data/Rakefile +138 -0
  4. data/conf/message.yaml +93 -0
  5. data/conf/message_pl.yaml +93 -0
  6. data/engine2.gemspec +34 -0
  7. data/lib/engine2.rb +34 -0
  8. data/lib/engine2/action.rb +217 -0
  9. data/lib/engine2/core.rb +572 -0
  10. data/lib/engine2/handler.rb +134 -0
  11. data/lib/engine2/meta.rb +969 -0
  12. data/lib/engine2/meta/decode_meta.rb +110 -0
  13. data/lib/engine2/meta/delete_meta.rb +73 -0
  14. data/lib/engine2/meta/form_meta.rb +144 -0
  15. data/lib/engine2/meta/infra_meta.rb +292 -0
  16. data/lib/engine2/meta/link_meta.rb +133 -0
  17. data/lib/engine2/meta/list_meta.rb +284 -0
  18. data/lib/engine2/meta/save_meta.rb +63 -0
  19. data/lib/engine2/meta/view_meta.rb +22 -0
  20. data/lib/engine2/model.rb +390 -0
  21. data/lib/engine2/models/Files.rb +38 -0
  22. data/lib/engine2/models/UserInfo.rb +24 -0
  23. data/lib/engine2/post_bootstrap.rb +83 -0
  24. data/lib/engine2/pre_bootstrap.rb +27 -0
  25. data/lib/engine2/scheme.rb +202 -0
  26. data/lib/engine2/templates.rb +229 -0
  27. data/lib/engine2/type_info.rb +342 -0
  28. data/lib/engine2/version.rb +9 -0
  29. data/public/assets/javascripts.js +13 -0
  30. data/public/assets/styles.css +4 -0
  31. data/public/css/angular-motion.css +1022 -0
  32. data/public/css/angular-ui-tree.min.css +1 -0
  33. data/public/css/app.css +196 -0
  34. data/public/css/bootstrap-additions.css +1560 -0
  35. data/public/css/bootstrap.min.css +11 -0
  36. data/public/css/font-awesome.min.css +4 -0
  37. data/public/favicon.ico +0 -0
  38. data/public/fonts/FontAwesome.otf +0 -0
  39. data/public/fonts/fontawesome-webfont.eot +0 -0
  40. data/public/fonts/fontawesome-webfont.svg +655 -0
  41. data/public/fonts/fontawesome-webfont.ttf +0 -0
  42. data/public/fonts/fontawesome-webfont.woff +0 -0
  43. data/public/fonts/fontawesome-webfont.woff2 +0 -0
  44. data/public/fonts/glyphicons-halflings-regular.eot +0 -0
  45. data/public/fonts/glyphicons-halflings-regular.svg +288 -0
  46. data/public/fonts/glyphicons-halflings-regular.ttf +0 -0
  47. data/public/fonts/glyphicons-halflings-regular.woff +0 -0
  48. data/public/fonts/glyphicons-halflings-regular.woff2 +0 -0
  49. data/public/images/file.png +0 -0
  50. data/public/images/folder-closed.png +0 -0
  51. data/public/images/folder.png +0 -0
  52. data/public/images/node-closed-2.png +0 -0
  53. data/public/images/node-closed-light.png +0 -0
  54. data/public/images/node-closed.png +0 -0
  55. data/public/images/node-opened-2.png +0 -0
  56. data/public/images/node-opened-light.png +0 -0
  57. data/public/images/node-opened.png +0 -0
  58. data/public/img/ajax-loader-dark.gif +0 -0
  59. data/public/img/ajax-loader-light.gif +0 -0
  60. data/public/img/ajax-loader.gif +0 -0
  61. data/public/js/angular-animate.js +4115 -0
  62. data/public/js/angular-cookies.js +322 -0
  63. data/public/js/angular-local-storage.js +455 -0
  64. data/public/js/angular-route.js +1022 -0
  65. data/public/js/angular-sanitize.js +717 -0
  66. data/public/js/angular-strap.js +4339 -0
  67. data/public/js/angular-strap.tpl.js +43 -0
  68. data/public/js/angular-ui-tree.js +1569 -0
  69. data/public/js/angular.js +30714 -0
  70. data/public/js/i18n/angular-locale_pl.js +115 -0
  71. data/public/js/lodash.custom.min.js +97 -0
  72. data/public/js/ng-file-upload-shim.min.js +2 -0
  73. data/public/js/ng-file-upload.min.js +3 -0
  74. data/views/app.coffee +3 -0
  75. data/views/engine2.coffee +557 -0
  76. data/views/engine2actions.coffee +849 -0
  77. data/views/engine2templates.coffee +0 -0
  78. data/views/fields/blob.slim +22 -0
  79. data/views/fields/bs_select.slim +10 -0
  80. data/views/fields/bsselect_picker.slim +18 -0
  81. data/views/fields/bsselect_picker_opt.slim +22 -0
  82. data/views/fields/checkbox.slim +11 -0
  83. data/views/fields/checkbox_buttons.slim +6 -0
  84. data/views/fields/checkbox_buttons_opt.slim +8 -0
  85. data/views/fields/currency.slim +10 -0
  86. data/views/fields/date.slim +21 -0
  87. data/views/fields/date_range.slim +44 -0
  88. data/views/fields/date_time.slim +42 -0
  89. data/views/fields/datetime.slim +42 -0
  90. data/views/fields/decimal.slim +11 -0
  91. data/views/fields/decimal_date.slim +22 -0
  92. data/views/fields/decimal_time.slim +26 -0
  93. data/views/fields/email.slim +13 -0
  94. data/views/fields/file_store.slim +61 -0
  95. data/views/fields/input_text.slim +14 -0
  96. data/views/fields/integer.slim +11 -0
  97. data/views/fields/list_bsselect.slim +18 -0
  98. data/views/fields/list_bsselect_opt.slim +21 -0
  99. data/views/fields/list_buttons.slim +3 -0
  100. data/views/fields/list_buttons_opt.slim +5 -0
  101. data/views/fields/list_select.slim +11 -0
  102. data/views/fields/list_select_opt.slim +15 -0
  103. data/views/fields/password.slim +14 -0
  104. data/views/fields/radio_checkbox.slim +10 -0
  105. data/views/fields/scaffold.slim +2 -0
  106. data/views/fields/scaffold_picker.slim +20 -0
  107. data/views/fields/select_picker.slim +12 -0
  108. data/views/fields/select_picker_opt.slim +16 -0
  109. data/views/fields/text_area.slim +10 -0
  110. data/views/fields/time.slim +22 -0
  111. data/views/fields/typeahead_picker.slim +25 -0
  112. data/views/index.slim +44 -0
  113. data/views/infra/index.slim +5 -0
  114. data/views/infra/inspect.slim +81 -0
  115. data/views/modals/close_m.slim +15 -0
  116. data/views/modals/confirm_m.slim +19 -0
  117. data/views/modals/empty_m.slim +12 -0
  118. data/views/modals/menu_m.slim +13 -0
  119. data/views/modals/yes_no_m.slim +19 -0
  120. data/views/panels/menu_m.slim +9 -0
  121. data/views/scaffold/confirm.slim +3 -0
  122. data/views/scaffold/fields.slim +10 -0
  123. data/views/scaffold/form.slim +11 -0
  124. data/views/scaffold/list.slim +42 -0
  125. data/views/scaffold/message.slim +3 -0
  126. data/views/scaffold/search.slim +20 -0
  127. data/views/scaffold/view.slim +18 -0
  128. data/views/search_fields/bsmselect_picker.slim +25 -0
  129. data/views/search_fields/bsselect_picker.slim +24 -0
  130. data/views/search_fields/checkbox.slim +11 -0
  131. data/views/search_fields/checkbox2.slim +14 -0
  132. data/views/search_fields/checkbox_buttons.slim +10 -0
  133. data/views/search_fields/date_range.slim +46 -0
  134. data/views/search_fields/decimal_date_range.slim +47 -0
  135. data/views/search_fields/input_text.slim +18 -0
  136. data/views/search_fields/integer.slim +18 -0
  137. data/views/search_fields/integer_range.slim +27 -0
  138. data/views/search_fields/list_bsmselect.slim +24 -0
  139. data/views/search_fields/list_bsselect.slim +22 -0
  140. data/views/search_fields/list_buttons.slim +8 -0
  141. data/views/search_fields/list_select.slim +17 -0
  142. data/views/search_fields/scaffold_picker.slim +19 -0
  143. data/views/search_fields/select_picker.slim +17 -0
  144. data/views/search_fields/typeahead_picker.slim +25 -0
  145. 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