express_admin 1.7.5 → 1.7.7
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/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
|