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.
Files changed (177) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/express_admin/components/command_button.js.coffee +25 -0
  3. data/app/assets/stylesheets/express_admin/components/_command_button.sass +6 -1
  4. data/app/assets/stylesheets/express_admin/globals/_variables.sass +2 -0
  5. data/app/assets/stylesheets/express_admin/plugins/_select2.sass +3 -0
  6. data/app/assets/stylesheets/express_admin/screen.sass +0 -2
  7. data/app/assets/stylesheets/express_admin/shared/_tables.sass +2 -0
  8. data/app/components/express_admin/command_button.rb +9 -3
  9. data/app/components/express_admin/definition_table.rb +1 -1
  10. data/app/components/express_admin/smart_table.rb +6 -0
  11. data/app/views/layouts/devise.html.erb +19 -0
  12. data/config/initializers/postgresql_trigram.rb +13 -0
  13. data/db/migrate/20150928044202_install_trigram.rb +18 -0
  14. data/lib/express_admin/engine.rb +4 -2
  15. data/lib/express_admin/search.rb +51 -0
  16. data/lib/express_admin/standard_actions.rb +18 -5
  17. data/lib/express_admin/version.rb +1 -1
  18. data/test/dummy/db/test.sqlite3 +0 -0
  19. data/test/dummy/test/components/command_button_test.rb +2 -2
  20. metadata +22 -160
  21. data/app/assets/stylesheets/express_admin/shared/_buttons.sass +0 -3
  22. data/app/assets/stylesheets/express_admin/shared/_tabs.sass +0 -25
  23. data/vendor/gems/express_templates/CHANGELOG.md +0 -12
  24. data/vendor/gems/express_templates/Gemfile +0 -16
  25. data/vendor/gems/express_templates/LICENSE +0 -21
  26. data/vendor/gems/express_templates/README.md +0 -133
  27. data/vendor/gems/express_templates/Rakefile +0 -32
  28. data/vendor/gems/express_templates/express_templates.gemspec +0 -32
  29. data/vendor/gems/express_templates/lib/arbre/patches.rb +0 -76
  30. data/vendor/gems/express_templates/lib/core_extensions/proc.rb +0 -103
  31. data/vendor/gems/express_templates/lib/core_extensions/string.rb +0 -25
  32. data/vendor/gems/express_templates/lib/express_templates/compiler.rb +0 -22
  33. data/vendor/gems/express_templates/lib/express_templates/components/all.rb +0 -28
  34. data/vendor/gems/express_templates/lib/express_templates/components/base.rb +0 -156
  35. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/resourceful.rb +0 -213
  36. data/vendor/gems/express_templates/lib/express_templates/components/configurable.rb +0 -181
  37. data/vendor/gems/express_templates/lib/express_templates/components/container.rb +0 -45
  38. data/vendor/gems/express_templates/lib/express_templates/components/forms/basic_fields.rb +0 -52
  39. data/vendor/gems/express_templates/lib/express_templates/components/forms/checkbox.rb +0 -37
  40. data/vendor/gems/express_templates/lib/express_templates/components/forms/express_form.rb +0 -48
  41. data/vendor/gems/express_templates/lib/express_templates/components/forms/form_component.rb +0 -88
  42. data/vendor/gems/express_templates/lib/express_templates/components/forms/option_support.rb +0 -69
  43. data/vendor/gems/express_templates/lib/express_templates/components/forms/radio.rb +0 -65
  44. data/vendor/gems/express_templates/lib/express_templates/components/forms/select.rb +0 -126
  45. data/vendor/gems/express_templates/lib/express_templates/components/forms/select_collection.rb +0 -45
  46. data/vendor/gems/express_templates/lib/express_templates/components/forms/submit.rb +0 -30
  47. data/vendor/gems/express_templates/lib/express_templates/components/forms.rb +0 -16
  48. data/vendor/gems/express_templates/lib/express_templates/components/tree_for.rb +0 -88
  49. data/vendor/gems/express_templates/lib/express_templates/components.rb +0 -11
  50. data/vendor/gems/express_templates/lib/express_templates/indenter.rb +0 -47
  51. data/vendor/gems/express_templates/lib/express_templates/interpolator.rb +0 -36
  52. data/vendor/gems/express_templates/lib/express_templates/renderer.rb +0 -9
  53. data/vendor/gems/express_templates/lib/express_templates/template/handler.rb +0 -32
  54. data/vendor/gems/express_templates/lib/express_templates/version.rb +0 -3
  55. data/vendor/gems/express_templates/lib/express_templates.rb +0 -18
  56. data/vendor/gems/express_templates/lib/tasks/express_templates.rake +0 -4
  57. data/vendor/gems/express_templates/test/compiler_test.rb +0 -9
  58. data/vendor/gems/express_templates/test/components/base_test.rb +0 -67
  59. data/vendor/gems/express_templates/test/components/capabilities/resourceful_test.rb +0 -63
  60. data/vendor/gems/express_templates/test/components/configurable_test.rb +0 -140
  61. data/vendor/gems/express_templates/test/components/forms/basic_fields_test.rb +0 -158
  62. data/vendor/gems/express_templates/test/components/forms/checkbox_test.rb +0 -51
  63. data/vendor/gems/express_templates/test/components/forms/express_form_test.rb +0 -62
  64. data/vendor/gems/express_templates/test/components/forms/radio_test.rb +0 -112
  65. data/vendor/gems/express_templates/test/components/forms/select_test.rb +0 -129
  66. data/vendor/gems/express_templates/test/components/forms/submit_test.rb +0 -36
  67. data/vendor/gems/express_templates/test/components/tree_for_test.rb +0 -70
  68. data/vendor/gems/express_templates/test/core_extensions/proc_test.rb +0 -90
  69. data/vendor/gems/express_templates/test/core_extensions/string_test.rb +0 -20
  70. data/vendor/gems/express_templates/test/dummy/Rakefile +0 -6
  71. data/vendor/gems/express_templates/test/dummy/app/assets/javascripts/application.js +0 -13
  72. data/vendor/gems/express_templates/test/dummy/app/assets/stylesheets/application.css +0 -15
  73. data/vendor/gems/express_templates/test/dummy/app/controllers/application_controller.rb +0 -5
  74. data/vendor/gems/express_templates/test/dummy/app/controllers/hello_controller.rb +0 -5
  75. data/vendor/gems/express_templates/test/dummy/app/helpers/application_helper.rb +0 -2
  76. data/vendor/gems/express_templates/test/dummy/app/views/hello/show.html.et +0 -6
  77. data/vendor/gems/express_templates/test/dummy/app/views/layouts/application.html.et +0 -15
  78. data/vendor/gems/express_templates/test/dummy/bin/bundle +0 -3
  79. data/vendor/gems/express_templates/test/dummy/bin/rails +0 -4
  80. data/vendor/gems/express_templates/test/dummy/bin/rake +0 -4
  81. data/vendor/gems/express_templates/test/dummy/config/application.rb +0 -26
  82. data/vendor/gems/express_templates/test/dummy/config/boot.rb +0 -5
  83. data/vendor/gems/express_templates/test/dummy/config/environment.rb +0 -5
  84. data/vendor/gems/express_templates/test/dummy/config/environments/development.rb +0 -37
  85. data/vendor/gems/express_templates/test/dummy/config/environments/production.rb +0 -82
  86. data/vendor/gems/express_templates/test/dummy/config/environments/test.rb +0 -40
  87. data/vendor/gems/express_templates/test/dummy/config/initializers/assets.rb +0 -8
  88. data/vendor/gems/express_templates/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
  89. data/vendor/gems/express_templates/test/dummy/config/initializers/cookies_serializer.rb +0 -3
  90. data/vendor/gems/express_templates/test/dummy/config/initializers/filter_parameter_logging.rb +0 -4
  91. data/vendor/gems/express_templates/test/dummy/config/initializers/inflections.rb +0 -16
  92. data/vendor/gems/express_templates/test/dummy/config/initializers/mime_types.rb +0 -4
  93. data/vendor/gems/express_templates/test/dummy/config/initializers/session_store.rb +0 -3
  94. data/vendor/gems/express_templates/test/dummy/config/initializers/wrap_parameters.rb +0 -14
  95. data/vendor/gems/express_templates/test/dummy/config/locales/en.yml +0 -23
  96. data/vendor/gems/express_templates/test/dummy/config/routes.rb +0 -4
  97. data/vendor/gems/express_templates/test/dummy/config/secrets.yml +0 -22
  98. data/vendor/gems/express_templates/test/dummy/config.ru +0 -4
  99. data/vendor/gems/express_templates/test/dummy/public/404.html +0 -67
  100. data/vendor/gems/express_templates/test/dummy/public/422.html +0 -67
  101. data/vendor/gems/express_templates/test/dummy/public/500.html +0 -66
  102. data/vendor/gems/express_templates/test/dummy/public/favicon.ico +0 -0
  103. data/vendor/gems/express_templates/test/dummy/test/controllers/hello_controller_test.rb +0 -14
  104. data/vendor/gems/express_templates/test/dummy/test/helpers/hello_helper_test.rb +0 -4
  105. data/vendor/gems/express_templates/test/express_templates_test.rb +0 -23
  106. data/vendor/gems/express_templates/test/handler_test.rb +0 -148
  107. data/vendor/gems/express_templates/test/indenter_test.rb +0 -27
  108. data/vendor/gems/express_templates/test/interpolator_test.rb +0 -80
  109. data/vendor/gems/express_templates/test/performance_test.rb +0 -97
  110. data/vendor/gems/express_templates/test/test_helper.rb +0 -178
  111. data/vendor/gems/foundation_apps_styles/Gemfile +0 -4
  112. data/vendor/gems/foundation_apps_styles/LICENSE.txt +0 -21
  113. data/vendor/gems/foundation_apps_styles/README.md +0 -41
  114. data/vendor/gems/foundation_apps_styles/Rakefile +0 -13
  115. data/vendor/gems/foundation_apps_styles/bin/console +0 -14
  116. data/vendor/gems/foundation_apps_styles/bin/setup +0 -7
  117. data/vendor/gems/foundation_apps_styles/foundation_apps_styles.gemspec +0 -24
  118. data/vendor/gems/foundation_apps_styles/lib/foundation_apps_styles/version.rb +0 -3
  119. data/vendor/gems/foundation_apps_styles/lib/foundation_apps_styles.rb +0 -6
  120. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/account.svg +0 -44
  121. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/action.svg +0 -38
  122. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/ban.svg +0 -17
  123. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/bell.svg +0 -22
  124. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/bookmark.svg +0 -14
  125. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/cart.svg +0 -35
  126. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/chevron.svg +0 -28
  127. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/circle-check.svg +0 -25
  128. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/circle-x.svg +0 -25
  129. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/cog.svg +0 -17
  130. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/comment-square.svg +0 -14
  131. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/dashboard.svg +0 -38
  132. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/document.svg +0 -28
  133. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/envelope.svg +0 -44
  134. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/flag.svg +0 -24
  135. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/home.svg +0 -28
  136. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/lock.svg +0 -55
  137. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/magnifying-glass.svg +0 -26
  138. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/person.svg +0 -62
  139. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/reload.svg +0 -19
  140. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/share-boxed.svg +0 -17
  141. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/star.svg +0 -14
  142. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/thumb.svg +0 -38
  143. data/vendor/gems/foundation_apps_styles/vendor/assets/iconic/zoom.svg +0 -56
  144. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/_global.scss +0 -131
  145. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/_includes.scss +0 -33
  146. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/_settings.scss +0 -614
  147. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_accordion.scss +0 -72
  148. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_action-sheet.scss +0 -265
  149. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_block-list.scss +0 -360
  150. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_button-group.scss +0 -197
  151. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_button.scss +0 -205
  152. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_card.scss +0 -93
  153. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_extras.scss +0 -54
  154. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_forms.scss +0 -460
  155. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_grid.scss +0 -422
  156. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_iconic.scss +0 -95
  157. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_label.scss +0 -134
  158. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_list.scss +0 -19
  159. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_menu-bar.scss +0 -382
  160. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_modal.scss +0 -129
  161. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_motion.scss +0 -525
  162. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_notification.scss +0 -207
  163. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_off-canvas.scss +0 -169
  164. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_panel.scss +0 -134
  165. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_popup.scss +0 -68
  166. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_switch.scss +0 -134
  167. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_tabs.scss +0 -100
  168. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_title-bar.scss +0 -135
  169. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_typography.scss +0 -345
  170. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/components/_utilities.scss +0 -160
  171. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/foundation-apps.css +0 -6146
  172. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/foundation.scss +0 -50
  173. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/helpers/_breakpoints.scss +0 -154
  174. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/helpers/_functions.scss +0 -343
  175. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/helpers/_images.scss +0 -19
  176. data/vendor/gems/foundation_apps_styles/vendor/assets/stylesheets/helpers/_mixins.scss +0 -123
  177. 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
@@ -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,3 +0,0 @@
1
- module ExpressTemplates
2
- VERSION = "0.11.3"
3
- 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
@@ -1,4 +0,0 @@
1
- # desc "Explaining what the task does"
2
- # task :express_templates do
3
- # # Task goes here
4
- # end
@@ -1,9 +0,0 @@
1
- require 'test_helper'
2
-
3
- class CompilerTest < ActiveSupport::TestCase
4
- test ".compile returns a string" do
5
- source = "h1"
6
- result = ExpressTemplates.compile(source)
7
- assert_kind_of String, result
8
- end
9
- end