express_admin 1.7.5 → 1.7.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/express_admin/components/command_button.js.coffee +25 -0
- data/app/assets/stylesheets/express_admin/components/_command_button.sass +6 -1
- data/app/assets/stylesheets/express_admin/globals/_variables.sass +2 -0
- data/app/assets/stylesheets/express_admin/plugins/_select2.sass +3 -0
- data/app/assets/stylesheets/express_admin/screen.sass +0 -2
- data/app/assets/stylesheets/express_admin/shared/_tables.sass +2 -0
- data/app/components/express_admin/command_button.rb +9 -3
- data/app/components/express_admin/definition_table.rb +1 -1
- data/app/components/express_admin/smart_table.rb +6 -0
- data/app/views/layouts/devise.html.erb +19 -0
- data/config/initializers/postgresql_trigram.rb +13 -0
- data/db/migrate/20150928044202_install_trigram.rb +18 -0
- data/lib/express_admin/engine.rb +4 -2
- data/lib/express_admin/search.rb +51 -0
- data/lib/express_admin/standard_actions.rb +18 -5
- data/lib/express_admin/version.rb +1 -1
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/test/components/command_button_test.rb +2 -2
- metadata +22 -160
- data/app/assets/stylesheets/express_admin/shared/_buttons.sass +0 -3
- data/app/assets/stylesheets/express_admin/shared/_tabs.sass +0 -25
- data/vendor/gems/express_templates/CHANGELOG.md +0 -12
- data/vendor/gems/express_templates/Gemfile +0 -16
- data/vendor/gems/express_templates/LICENSE +0 -21
- data/vendor/gems/express_templates/README.md +0 -133
- data/vendor/gems/express_templates/Rakefile +0 -32
- data/vendor/gems/express_templates/express_templates.gemspec +0 -32
- data/vendor/gems/express_templates/lib/arbre/patches.rb +0 -76
- data/vendor/gems/express_templates/lib/core_extensions/proc.rb +0 -103
- data/vendor/gems/express_templates/lib/core_extensions/string.rb +0 -25
- data/vendor/gems/express_templates/lib/express_templates/compiler.rb +0 -22
- data/vendor/gems/express_templates/lib/express_templates/components/all.rb +0 -28
- data/vendor/gems/express_templates/lib/express_templates/components/base.rb +0 -156
- data/vendor/gems/express_templates/lib/express_templates/components/capabilities/resourceful.rb +0 -213
- data/vendor/gems/express_templates/lib/express_templates/components/configurable.rb +0 -181
- data/vendor/gems/express_templates/lib/express_templates/components/container.rb +0 -45
- data/vendor/gems/express_templates/lib/express_templates/components/forms/basic_fields.rb +0 -52
- data/vendor/gems/express_templates/lib/express_templates/components/forms/checkbox.rb +0 -37
- data/vendor/gems/express_templates/lib/express_templates/components/forms/express_form.rb +0 -48
- data/vendor/gems/express_templates/lib/express_templates/components/forms/form_component.rb +0 -88
- data/vendor/gems/express_templates/lib/express_templates/components/forms/option_support.rb +0 -69
- data/vendor/gems/express_templates/lib/express_templates/components/forms/radio.rb +0 -65
- data/vendor/gems/express_templates/lib/express_templates/components/forms/select.rb +0 -126
- data/vendor/gems/express_templates/lib/express_templates/components/forms/select_collection.rb +0 -45
- data/vendor/gems/express_templates/lib/express_templates/components/forms/submit.rb +0 -30
- data/vendor/gems/express_templates/lib/express_templates/components/forms.rb +0 -16
- data/vendor/gems/express_templates/lib/express_templates/components/tree_for.rb +0 -88
- data/vendor/gems/express_templates/lib/express_templates/components.rb +0 -11
- data/vendor/gems/express_templates/lib/express_templates/indenter.rb +0 -47
- data/vendor/gems/express_templates/lib/express_templates/interpolator.rb +0 -36
- data/vendor/gems/express_templates/lib/express_templates/renderer.rb +0 -9
- data/vendor/gems/express_templates/lib/express_templates/template/handler.rb +0 -32
- data/vendor/gems/express_templates/lib/express_templates/version.rb +0 -3
- data/vendor/gems/express_templates/lib/express_templates.rb +0 -18
- data/vendor/gems/express_templates/lib/tasks/express_templates.rake +0 -4
- data/vendor/gems/express_templates/test/compiler_test.rb +0 -9
- data/vendor/gems/express_templates/test/components/base_test.rb +0 -67
- data/vendor/gems/express_templates/test/components/capabilities/resourceful_test.rb +0 -63
- data/vendor/gems/express_templates/test/components/configurable_test.rb +0 -140
- data/vendor/gems/express_templates/test/components/forms/basic_fields_test.rb +0 -158
- data/vendor/gems/express_templates/test/components/forms/checkbox_test.rb +0 -51
- data/vendor/gems/express_templates/test/components/forms/express_form_test.rb +0 -62
- data/vendor/gems/express_templates/test/components/forms/radio_test.rb +0 -112
- data/vendor/gems/express_templates/test/components/forms/select_test.rb +0 -129
- data/vendor/gems/express_templates/test/components/forms/submit_test.rb +0 -36
- data/vendor/gems/express_templates/test/components/tree_for_test.rb +0 -70
- data/vendor/gems/express_templates/test/core_extensions/proc_test.rb +0 -90
- data/vendor/gems/express_templates/test/core_extensions/string_test.rb +0 -20
- data/vendor/gems/express_templates/test/dummy/Rakefile +0 -6
- data/vendor/gems/express_templates/test/dummy/app/assets/javascripts/application.js +0 -13
- data/vendor/gems/express_templates/test/dummy/app/assets/stylesheets/application.css +0 -15
- data/vendor/gems/express_templates/test/dummy/app/controllers/application_controller.rb +0 -5
- data/vendor/gems/express_templates/test/dummy/app/controllers/hello_controller.rb +0 -5
- data/vendor/gems/express_templates/test/dummy/app/helpers/application_helper.rb +0 -2
- data/vendor/gems/express_templates/test/dummy/app/views/hello/show.html.et +0 -6
- data/vendor/gems/express_templates/test/dummy/app/views/layouts/application.html.et +0 -15
- data/vendor/gems/express_templates/test/dummy/bin/bundle +0 -3
- data/vendor/gems/express_templates/test/dummy/bin/rails +0 -4
- data/vendor/gems/express_templates/test/dummy/bin/rake +0 -4
- data/vendor/gems/express_templates/test/dummy/config/application.rb +0 -26
- data/vendor/gems/express_templates/test/dummy/config/boot.rb +0 -5
- data/vendor/gems/express_templates/test/dummy/config/environment.rb +0 -5
- data/vendor/gems/express_templates/test/dummy/config/environments/development.rb +0 -37
- data/vendor/gems/express_templates/test/dummy/config/environments/production.rb +0 -82
- data/vendor/gems/express_templates/test/dummy/config/environments/test.rb +0 -40
- data/vendor/gems/express_templates/test/dummy/config/initializers/assets.rb +0 -8
- data/vendor/gems/express_templates/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
- data/vendor/gems/express_templates/test/dummy/config/initializers/cookies_serializer.rb +0 -3
- data/vendor/gems/express_templates/test/dummy/config/initializers/filter_parameter_logging.rb +0 -4
- data/vendor/gems/express_templates/test/dummy/config/initializers/inflections.rb +0 -16
- data/vendor/gems/express_templates/test/dummy/config/initializers/mime_types.rb +0 -4
- data/vendor/gems/express_templates/test/dummy/config/initializers/session_store.rb +0 -3
- data/vendor/gems/express_templates/test/dummy/config/initializers/wrap_parameters.rb +0 -14
- data/vendor/gems/express_templates/test/dummy/config/locales/en.yml +0 -23
- data/vendor/gems/express_templates/test/dummy/config/routes.rb +0 -4
- data/vendor/gems/express_templates/test/dummy/config/secrets.yml +0 -22
- data/vendor/gems/express_templates/test/dummy/config.ru +0 -4
- data/vendor/gems/express_templates/test/dummy/public/404.html +0 -67
- data/vendor/gems/express_templates/test/dummy/public/422.html +0 -67
- data/vendor/gems/express_templates/test/dummy/public/500.html +0 -66
- data/vendor/gems/express_templates/test/dummy/public/favicon.ico +0 -0
- data/vendor/gems/express_templates/test/dummy/test/controllers/hello_controller_test.rb +0 -14
- data/vendor/gems/express_templates/test/dummy/test/helpers/hello_helper_test.rb +0 -4
- data/vendor/gems/express_templates/test/express_templates_test.rb +0 -23
- data/vendor/gems/express_templates/test/handler_test.rb +0 -148
- data/vendor/gems/express_templates/test/indenter_test.rb +0 -27
- data/vendor/gems/express_templates/test/interpolator_test.rb +0 -80
- data/vendor/gems/express_templates/test/performance_test.rb +0 -97
- data/vendor/gems/express_templates/test/test_helper.rb +0 -178
- data/vendor/gems/foundation_apps_styles/Gemfile +0 -4
- data/vendor/gems/foundation_apps_styles/LICENSE.txt +0 -21
- data/vendor/gems/foundation_apps_styles/README.md +0 -41
- data/vendor/gems/foundation_apps_styles/Rakefile +0 -13
- data/vendor/gems/foundation_apps_styles/bin/console +0 -14
- data/vendor/gems/foundation_apps_styles/bin/setup +0 -7
- data/vendor/gems/foundation_apps_styles/foundation_apps_styles.gemspec +0 -24
- data/vendor/gems/foundation_apps_styles/lib/foundation_apps_styles/version.rb +0 -3
- data/vendor/gems/foundation_apps_styles/lib/foundation_apps_styles.rb +0 -6
- data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/account.svg +0 -44
- data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/action.svg +0 -38
- data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/ban.svg +0 -17
- data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/bell.svg +0 -22
- data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/bookmark.svg +0 -14
- data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/cart.svg +0 -35
- data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/chevron.svg +0 -28
- data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/circle-check.svg +0 -25
- data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/circle-x.svg +0 -25
- data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/cog.svg +0 -17
- data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/comment-square.svg +0 -14
- data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/dashboard.svg +0 -38
- data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/document.svg +0 -28
- data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/envelope.svg +0 -44
- data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/flag.svg +0 -24
- data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/home.svg +0 -28
- data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/lock.svg +0 -55
- data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/magnifying-glass.svg +0 -26
- data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/person.svg +0 -62
- data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/reload.svg +0 -19
- data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/share-boxed.svg +0 -17
- data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/star.svg +0 -14
- data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/thumb.svg +0 -38
- data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/zoom.svg +0 -56
- data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/_global.scss +0 -131
- data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/_includes.scss +0 -33
- data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/_settings.scss +0 -614
- data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_accordion.scss +0 -72
- data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_action-sheet.scss +0 -265
- data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_block-list.scss +0 -360
- data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_button-group.scss +0 -197
- data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_button.scss +0 -205
- data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_card.scss +0 -93
- data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_extras.scss +0 -54
- data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_forms.scss +0 -460
- data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_grid.scss +0 -422
- data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_iconic.scss +0 -95
- data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_label.scss +0 -134
- data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_list.scss +0 -19
- data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_menu-bar.scss +0 -382
- data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_modal.scss +0 -129
- data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_motion.scss +0 -525
- data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_notification.scss +0 -207
- data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_off-canvas.scss +0 -169
- data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_panel.scss +0 -134
- data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_popup.scss +0 -68
- data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_switch.scss +0 -134
- data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_tabs.scss +0 -100
- data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_title-bar.scss +0 -135
- data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_typography.scss +0 -345
- data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_utilities.scss +0 -160
- data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/foundation-apps.css +0 -6146
- data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/foundation.scss +0 -50
- data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/helpers/_breakpoints.scss +0 -154
- data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/helpers/_functions.scss +0 -343
- data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/helpers/_images.scss +0 -19
- data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/helpers/_mixins.scss +0 -123
- data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/vendor/_normalize.scss +0 -424
@@ -1,69 +0,0 @@
|
|
1
|
-
module ExpressTemplates
|
2
|
-
module Components
|
3
|
-
module Forms
|
4
|
-
# Provides a form component with knowledge of any association
|
5
|
-
# on the field and an means of loading the collection for supplying
|
6
|
-
# options to the user.
|
7
|
-
module OptionSupport
|
8
|
-
|
9
|
-
def has_many_through_association
|
10
|
-
if resource_class.respond_to?(:reflect_on_association)
|
11
|
-
reflection = resource_class.reflect_on_association(field_name.to_sym)
|
12
|
-
return reflection if reflection && reflection.macro.eql?(:has_many) && reflection.options.keys.include?(:through)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
# Reflect on any association and return it if the association type
|
17
|
-
# is :belongs_to. Returns false if the association is not :belongs_to.
|
18
|
-
# Returns nil if there was a problem reflecting.
|
19
|
-
def belongs_to_association
|
20
|
-
if resource_class.respond_to?(:reflect_on_association)
|
21
|
-
# assumes the belongs_to association uses <name>_id
|
22
|
-
reflection = resource_class.reflect_on_association(field_name.gsub(/_id$/, '').to_sym)
|
23
|
-
if reflection && reflection.macro.eql?(:belongs_to)
|
24
|
-
return reflection
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
# Provide ActiveRecord code to load the associated collection as
|
30
|
-
# options for display.
|
31
|
-
def related_collection
|
32
|
-
reflection = belongs_to_association || has_many_through_association
|
33
|
-
if reflection && !reflection.polymorphic?
|
34
|
-
if cols.detect {|column| column.name.eql?('name') }
|
35
|
-
reflection.klass.select(option_value_method.to_sym, option_name_method.to_sym).order(option_name_method.to_sym)
|
36
|
-
else
|
37
|
-
reflection.klass.all.sort_by(&option_name_method.to_sym)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
protected
|
43
|
-
|
44
|
-
def option_value_method
|
45
|
-
:id
|
46
|
-
end
|
47
|
-
|
48
|
-
def cols
|
49
|
-
@cols ||= (belongs_to_association||has_many_through_association).klass.columns
|
50
|
-
end
|
51
|
-
|
52
|
-
def option_name_method
|
53
|
-
@option_name_method ||=
|
54
|
-
if cols.detect {|column| column.name.eql?('name') } ||
|
55
|
-
resource_class.instance_methods.include?(:name)
|
56
|
-
:name
|
57
|
-
else
|
58
|
-
if string_col = cols.detect {|column| column.type.eql?(:string) }
|
59
|
-
string_col.name.to_sym
|
60
|
-
else
|
61
|
-
:id
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
@@ -1,65 +0,0 @@
|
|
1
|
-
module ExpressTemplates
|
2
|
-
module Components
|
3
|
-
module Forms
|
4
|
-
class Radio < FormComponent
|
5
|
-
include OptionSupport
|
6
|
-
|
7
|
-
has_option :options, 'Supplies a list of options for the radio tag'
|
8
|
-
has_option :label_wrapper_class, 'Specify a class for labels which wrap each radio option.'
|
9
|
-
|
10
|
-
contains -> {
|
11
|
-
label_tag(label_name, label_text)
|
12
|
-
if option_values_specified?
|
13
|
-
generate_options_from_specified_values
|
14
|
-
else
|
15
|
-
use_options_from_collection_radio_buttons_helper
|
16
|
-
end
|
17
|
-
}
|
18
|
-
|
19
|
-
def use_options_from_collection_radio_buttons_helper
|
20
|
-
collection_radio_buttons(resource_name, field_name.to_sym, collection_from_association,
|
21
|
-
option_value_method, option_name_method,
|
22
|
-
input_attributes) do |b|
|
23
|
-
b.label(class: "radio") {
|
24
|
-
b.radio_button + b.text
|
25
|
-
}
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def option_values_specified?
|
30
|
-
[Array, Hash].include?(option_collection.class)
|
31
|
-
end
|
32
|
-
|
33
|
-
def option_collection
|
34
|
-
config[:options]
|
35
|
-
end
|
36
|
-
|
37
|
-
def generate_options_from_specified_values
|
38
|
-
case
|
39
|
-
when option_collection.kind_of?(Array)
|
40
|
-
option_collection.each_with_index do |option, index|
|
41
|
-
label(class: config[:label_wrapper_class]) {
|
42
|
-
radio_button(resource_name, field_name.to_sym, option, class: 'radio')
|
43
|
-
current_arbre_element.add_child option
|
44
|
-
}
|
45
|
-
end
|
46
|
-
when option_collection.kind_of?(Hash)
|
47
|
-
option_collection.each_pair do |key, value|
|
48
|
-
label(class: config[:label_wrapper_class]) {
|
49
|
-
radio_button(resource_name, field_name.to_sym, key, class: 'radio')
|
50
|
-
current_arbre_element.add_child value
|
51
|
-
}
|
52
|
-
end
|
53
|
-
else
|
54
|
-
raise "Radio collection should be Array or Hash: #{option_collection.inspect}"
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
def collection_from_association
|
59
|
-
related_collection or raise "No association collection for: #{resource_name}.#{field_name}"
|
60
|
-
end
|
61
|
-
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
@@ -1,126 +0,0 @@
|
|
1
|
-
module ExpressTemplates
|
2
|
-
module Components
|
3
|
-
module Forms
|
4
|
-
# Provides a form Select component based on the Rails *select_tag* helper.
|
5
|
-
#
|
6
|
-
# The :options may be specified as an Array or Hash which will be
|
7
|
-
# supplied to the *options_for_select* helper.
|
8
|
-
#
|
9
|
-
# If the :options are omitted, the component attempts to check
|
10
|
-
# whether the field is an association. If an association exists,
|
11
|
-
# the options will be generated using *options_from_collection_for_select*
|
12
|
-
# with the assumption that :id and :name are the value and name fields
|
13
|
-
# on the collection. If no association exists, we use all the existing
|
14
|
-
# unique values for the field on the collection to which the resource belongs
|
15
|
-
# as the list of possible values for the select.
|
16
|
-
class Select < FormComponent
|
17
|
-
include OptionSupport
|
18
|
-
|
19
|
-
has_option :options, 'Select options. Can be Array, Hash, or Proc.'
|
20
|
-
has_option :selected, 'The currently selected value; Used when options are supplied. Otherwise the value is taken from the resource.'
|
21
|
-
has_option :include_blank, 'Whether or not to include a blank option.', default: true
|
22
|
-
has_option :select2, 'Use select2 enhanced select box.', default: true
|
23
|
-
|
24
|
-
contains -> {
|
25
|
-
label_tag(label_name, label_text)
|
26
|
-
select_tag(*select_tag_args)
|
27
|
-
}
|
28
|
-
|
29
|
-
def select_tag_args
|
30
|
-
[field_name_attribute, select_options, select_helper_options]
|
31
|
-
end
|
32
|
-
|
33
|
-
def select_options_supplied?
|
34
|
-
[Array, Hash, Proc].include?(config[:options].class)
|
35
|
-
end
|
36
|
-
|
37
|
-
def use_supplied_options
|
38
|
-
opts = config[:options]
|
39
|
-
if opts.respond_to?(:call) # can be a proc
|
40
|
-
opts.call(resource)
|
41
|
-
else
|
42
|
-
opts
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def generate_options_from_field_values
|
47
|
-
resource.class.distinct(field_name.to_sym).pluck(field_name.to_sym)
|
48
|
-
end
|
49
|
-
|
50
|
-
def normalize_for_helper(supplied_options)
|
51
|
-
supplied_options.map do |opt|
|
52
|
-
[opt.respond_to?(:name) ? opt.name : opt.to_s,
|
53
|
-
opt.respond_to?(:id) ? opt.id : opt.to_s]
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
def selected_value
|
58
|
-
config[:selected]||resource.send(field_name)
|
59
|
-
end
|
60
|
-
|
61
|
-
def options_from_supplied_or_field_values
|
62
|
-
if select_options_supplied?
|
63
|
-
supplied_options = use_supplied_options
|
64
|
-
if supplied_options.respond_to?(:map)
|
65
|
-
helpers.options_for_select(
|
66
|
-
normalize_for_helper(supplied_options),
|
67
|
-
selected_value)
|
68
|
-
else
|
69
|
-
supplied_options
|
70
|
-
end
|
71
|
-
else
|
72
|
-
generate_options_from_field_values
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
def options_from_belongs_to
|
77
|
-
if belongs_to_association.polymorphic?
|
78
|
-
helpers.options_for_select([[]]) # we can't really handle polymorhic yet
|
79
|
-
else
|
80
|
-
helpers.options_from_collection_for_select(related_collection, :id, option_name_method, resource.send(field_name))
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
def options_from_has_many_through
|
85
|
-
helpers.options_from_collection_for_select(related_collection, :id, option_name_method, resource.send(field_name).map(&:id))
|
86
|
-
end
|
87
|
-
|
88
|
-
def simple_options_with_selection
|
89
|
-
helpers.options_for_select(options_from_supplied_or_field_values, selected_value)
|
90
|
-
end
|
91
|
-
|
92
|
-
# Returns the options which will be supplied to the select_tag helper.
|
93
|
-
def select_options
|
94
|
-
if belongs_to_association && !select_options_supplied?
|
95
|
-
options_from_belongs_to
|
96
|
-
elsif has_many_through_association
|
97
|
-
options_from_has_many_through
|
98
|
-
else
|
99
|
-
simple_options_with_selection
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
def field_name_attribute
|
104
|
-
if has_many_through_association
|
105
|
-
"#{resource_name.singularize}[#{field_name.singularize}_ids]"
|
106
|
-
else
|
107
|
-
super
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
def select_helper_options
|
112
|
-
add_select2_class( input_attributes.merge(include_blank: !!config[:include_blank]) )
|
113
|
-
end
|
114
|
-
|
115
|
-
protected
|
116
|
-
|
117
|
-
def add_select2_class(helper_options)
|
118
|
-
classes = (helper_options[:class]||'').split(' ')
|
119
|
-
classes << 'select2' if config[:select2] === true
|
120
|
-
helper_options.merge(:class => classes.join(' '))
|
121
|
-
end
|
122
|
-
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
126
|
-
end
|
data/vendor/gems/express_templates/lib/express_templates/components/forms/select_collection.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
module ExpressTemplates
|
2
|
-
module Components
|
3
|
-
module Forms
|
4
|
-
# Provides a form Select component based on the Rails *collection_select* helper.
|
5
|
-
class SelectCollection < Select
|
6
|
-
|
7
|
-
has_option :multiple, "Allow multiple selections.", default: true
|
8
|
-
|
9
|
-
contains -> {
|
10
|
-
label_tag(label_name, label_text)
|
11
|
-
|
12
|
-
# need this because the collection_select helper does not provide
|
13
|
-
# the hidden_field_tag trick (see rails api docs for select)
|
14
|
-
hidden_field_tag(multi_field_name, '')
|
15
|
-
collection_select(*collection_select_tag_args)
|
16
|
-
}
|
17
|
-
|
18
|
-
def collection_select_tag_args
|
19
|
-
[ resource_name,
|
20
|
-
multi_field_name,
|
21
|
-
related_collection, :id, :name,
|
22
|
-
field_options,
|
23
|
-
html_options ]
|
24
|
-
end
|
25
|
-
|
26
|
-
def field_options
|
27
|
-
{include_blank: !!input_attributes.delete(:include_blank)}
|
28
|
-
end
|
29
|
-
|
30
|
-
def html_options
|
31
|
-
input_attributes.reject {|k,v| k.eql?(:include_blank)}.merge(multiple: config[:multiple])
|
32
|
-
end
|
33
|
-
|
34
|
-
def multi_field_name
|
35
|
-
if has_many_through_association
|
36
|
-
"#{field_name.singularize}_ids"
|
37
|
-
else
|
38
|
-
raise "Only use select_collection for has_many :through. #{field_name} is not has_many :through"
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
module ExpressTemplates
|
2
|
-
module Components
|
3
|
-
module Forms
|
4
|
-
class Submit < FormComponent
|
5
|
-
|
6
|
-
has_option :button_class, 'The css class of the input button.'
|
7
|
-
has_option :value, 'The value of the submit tag. Text show in button.',
|
8
|
-
default: 'Save'
|
9
|
-
|
10
|
-
contains -> {
|
11
|
-
submit_tag(value, input_attributes)
|
12
|
-
}
|
13
|
-
|
14
|
-
before_build(exclusive: true) {
|
15
|
-
add_class(config[:wrapper_class])
|
16
|
-
remove_class('submit')
|
17
|
-
}
|
18
|
-
|
19
|
-
def resource_name
|
20
|
-
parent_form ? super : nil
|
21
|
-
end
|
22
|
-
|
23
|
-
def value
|
24
|
-
config[:value]
|
25
|
-
end
|
26
|
-
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
module ExpressTemplates
|
2
|
-
module Components
|
3
|
-
module Forms
|
4
|
-
end
|
5
|
-
end
|
6
|
-
end
|
7
|
-
|
8
|
-
require 'express_templates/components/forms/express_form'
|
9
|
-
require 'express_templates/components/forms/form_component'
|
10
|
-
require 'express_templates/components/forms/option_support'
|
11
|
-
require 'express_templates/components/forms/submit'
|
12
|
-
require 'express_templates/components/forms/select'
|
13
|
-
require 'express_templates/components/forms/select_collection'
|
14
|
-
require 'express_templates/components/forms/radio'
|
15
|
-
require 'express_templates/components/forms/checkbox'
|
16
|
-
require 'express_templates/components/forms/basic_fields'
|
@@ -1,88 +0,0 @@
|
|
1
|
-
module ExpressTemplates
|
2
|
-
module Components
|
3
|
-
module Presenters
|
4
|
-
#
|
5
|
-
# Create an html <tt>table</tt> or <tt>ol</tt> (ordered list) for
|
6
|
-
# a model object representing a tree of similar objects.
|
7
|
-
#
|
8
|
-
# The objects must respond to <tt>:children</tt>.
|
9
|
-
#
|
10
|
-
# The block is passed a NodeBuilder which may accept field names.
|
11
|
-
#
|
12
|
-
# Example:
|
13
|
-
#
|
14
|
-
# ```ruby
|
15
|
-
# tree_for(:roles) { |role|
|
16
|
-
# role.name
|
17
|
-
# }
|
18
|
-
# ```
|
19
|
-
#
|
20
|
-
# If the view has an @roles variable with a Role having children,
|
21
|
-
# this will turn into markup such as the following:
|
22
|
-
#
|
23
|
-
# <ul id="roles" class="roles tree">
|
24
|
-
# <li>SuperAdmin
|
25
|
-
# <ul>
|
26
|
-
# <li>Admin
|
27
|
-
# <ul>
|
28
|
-
# <li>Publisher
|
29
|
-
# <ul>
|
30
|
-
# <li>Author</li>
|
31
|
-
# </ul>
|
32
|
-
# </li>
|
33
|
-
# <li>Auditor</li>
|
34
|
-
# </ul>
|
35
|
-
# </li>
|
36
|
-
# </ul>
|
37
|
-
# </li>
|
38
|
-
# </ul>
|
39
|
-
#
|
40
|
-
|
41
|
-
class TreeFor < Configurable
|
42
|
-
|
43
|
-
tag :ul
|
44
|
-
|
45
|
-
has_attributes :class => 'tree'
|
46
|
-
has_option :root, "Root of the tree. Defaults to collection with the same as the id.", type: :proc
|
47
|
-
|
48
|
-
contains -> (&customize_block) {
|
49
|
-
@customize_block = customize_block
|
50
|
-
list_items(root_node)
|
51
|
-
}
|
52
|
-
|
53
|
-
before_build -> {
|
54
|
-
add_class config[:id]
|
55
|
-
}
|
56
|
-
|
57
|
-
def root_node
|
58
|
-
if config[:root] && config[:root].respond_to?(:call)
|
59
|
-
config[:root].call
|
60
|
-
else
|
61
|
-
send(config[:id])
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
def list_items(nodes)
|
66
|
-
nodes.each do |node|
|
67
|
-
list_item(node)
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
def list_item(node)
|
72
|
-
li {
|
73
|
-
if @customize_block
|
74
|
-
@customize_block.call(node)
|
75
|
-
else
|
76
|
-
text_node "#{node.name}#{"\n" if node.children.any?}"
|
77
|
-
end
|
78
|
-
if node.children.any?
|
79
|
-
ul {
|
80
|
-
list_items(node.children)
|
81
|
-
}
|
82
|
-
end
|
83
|
-
}
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
@@ -1,11 +0,0 @@
|
|
1
|
-
module ExpressTemplates
|
2
|
-
module Components
|
3
|
-
end
|
4
|
-
end
|
5
|
-
|
6
|
-
require 'express_templates/components/base'
|
7
|
-
require 'express_templates/components/configurable'
|
8
|
-
require 'express_templates/components/container'
|
9
|
-
require 'express_templates/components/tree_for'
|
10
|
-
require 'express_templates/components/forms'
|
11
|
-
require 'express_templates/components/all'
|
@@ -1,47 +0,0 @@
|
|
1
|
-
module ExpressTemplates
|
2
|
-
|
3
|
-
# Tracks current indent level scoped to the current thread.
|
4
|
-
#
|
5
|
-
# May be used to track multiple indents simultaneously through
|
6
|
-
# namespacing.
|
7
|
-
class Indenter
|
8
|
-
|
9
|
-
DEFAULT = 2
|
10
|
-
WHITESPACE = " "*DEFAULT
|
11
|
-
|
12
|
-
# Returns whitespace for the named indenter or yields to a block
|
13
|
-
# for the named indentor.
|
14
|
-
#
|
15
|
-
# The block is passed the current whitespace indent.
|
16
|
-
#
|
17
|
-
# For convenience an optional second parameter is passed to the block
|
18
|
-
# containing a newline at the beginning of the indent.
|
19
|
-
def self.for name
|
20
|
-
if block_given?
|
21
|
-
current_indenters[name] += 1
|
22
|
-
begin
|
23
|
-
indent = WHITESPACE * current_indenters[name]
|
24
|
-
yield indent, "\n#{indent}"
|
25
|
-
ensure
|
26
|
-
if current_indenters[name].eql?(-1)
|
27
|
-
# if we have long-lived threads for some reason
|
28
|
-
# we want to clean up after ourselves
|
29
|
-
current_indenters.delete(name)
|
30
|
-
else
|
31
|
-
current_indenters[name] -= 1
|
32
|
-
end
|
33
|
-
end
|
34
|
-
else
|
35
|
-
return WHITESPACE * current_indenters[name]
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
private
|
40
|
-
# For thread safety, scope indentation to the current thread
|
41
|
-
def self.current_indenters
|
42
|
-
Thread.current[:indenters] ||= Hash.new {|hsh, key| hsh[key] = -1 }
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
46
|
-
|
47
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
require 'parslet'
|
2
|
-
|
3
|
-
module ExpressTemplates
|
4
|
-
class Interpolator < Parslet::Parser
|
5
|
-
rule(:lbrace) { str('{{') }
|
6
|
-
rule(:rbrace) { str('}}') }
|
7
|
-
rule(:delim) { lbrace | rbrace }
|
8
|
-
rule(:lpart) { (lbrace.absnt? >> any).repeat.as(:lpart) }
|
9
|
-
rule(:rpart) { (rbrace.absnt? >> any).repeat.as(:rpart) }
|
10
|
-
rule(:expression) { (text_with_interpolations).as(:expression) }
|
11
|
-
rule(:interpolation) { (lbrace>>expression>>rbrace).as(:interpolation) }
|
12
|
-
rule(:text) { (delim.absnt? >> any).repeat(1) }
|
13
|
-
rule(:text_with_interpolations) { (text.as(:text) | interpolation).repeat }
|
14
|
-
root(:text_with_interpolations)
|
15
|
-
|
16
|
-
def self.transform(s)
|
17
|
-
begin
|
18
|
-
Transformer.new.apply(new.parse(s)).flatten.join
|
19
|
-
rescue Parslet::ParseFailed => failure
|
20
|
-
puts s
|
21
|
-
puts failure.cause.ascii_tree
|
22
|
-
raise failure
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
class Transformer < Parslet::Transform
|
28
|
-
rule(:interpolation => simple(:expression)) {
|
29
|
-
'#{'+expression+'}'
|
30
|
-
}
|
31
|
-
rule(:expression => sequence(:exp)) do
|
32
|
-
exp.map(&:to_s).join.gsub('\\"', '"')
|
33
|
-
end
|
34
|
-
rule(:text => simple(:s)) { s.to_s }
|
35
|
-
end
|
36
|
-
end
|
@@ -1,9 +0,0 @@
|
|
1
|
-
module ExpressTemplates
|
2
|
-
module Renderer
|
3
|
-
# render accepts source or block, evaluates the resulting string of ruby in the context provided
|
4
|
-
def render context=nil, template_or_src=nil, &block
|
5
|
-
compiled_template = compile(template_or_src, &block)
|
6
|
-
context.instance_eval compiled_template
|
7
|
-
end
|
8
|
-
end
|
9
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
require 'ripper'
|
2
|
-
|
3
|
-
module ExpressTemplates
|
4
|
-
module Template
|
5
|
-
class Handler
|
6
|
-
def self.call(template)
|
7
|
-
new.call(template)
|
8
|
-
end
|
9
|
-
|
10
|
-
def call(template)
|
11
|
-
# call ripper stuff method
|
12
|
-
|
13
|
-
# returns a string to be eval'd
|
14
|
-
source = "(#{ExpressTemplates.compile(template)}).html_safe"
|
15
|
-
warn_contains_logic(source) if ENV['NO_TEMPLATE_WARN'].nil? # pass the source code
|
16
|
-
source
|
17
|
-
end
|
18
|
-
|
19
|
-
def warn_contains_logic(compiled_template)
|
20
|
-
keywords = %w(if until unless case for do loop while) # array of conditional keywords
|
21
|
-
tokens = []
|
22
|
-
if Ripper.lex(compiled_template).select do |element| # since it outputs an array [[line, col], type, token]
|
23
|
-
element[1]==:on_kw # type must match ':on_kw' type (type is keyword)
|
24
|
-
end.each { |match| tokens.push(match) if keywords.include? match[2] } # check if token is in given /keyword/ array, then push to new array match
|
25
|
-
tokens.each do |first|
|
26
|
-
warn "PAGE TEMPLATE INCLUDES #{first[2]} STATEMENT AT LINE #{first[0][0]}: #{first}\n#{compiled_template}" # warn on first occurence of conditional logic
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
module ExpressTemplates
|
2
|
-
require 'arbre'
|
3
|
-
require 'arbre/patches'
|
4
|
-
require 'core_extensions/proc'
|
5
|
-
require 'core_extensions/string'
|
6
|
-
require 'express_templates/indenter'
|
7
|
-
require 'express_templates/components'
|
8
|
-
require 'express_templates/template/handler'
|
9
|
-
require 'express_templates/renderer'
|
10
|
-
require 'express_templates/compiler'
|
11
|
-
require 'express_templates/interpolator'
|
12
|
-
extend Renderer
|
13
|
-
extend Compiler
|
14
|
-
if defined?(Rails)
|
15
|
-
::ActionView::Template.register_template_handler :et, ExpressTemplates::Template::Handler
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|