express_admin 1.2.1 → 1.3.0

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 (159) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/express_admin.js +2 -0
  3. data/app/assets/javascripts/express_admin/admin.js +2 -0
  4. data/app/assets/stylesheets/express_admin.css +0 -5
  5. data/app/assets/stylesheets/express_admin/components/_definition.sass +8 -0
  6. data/app/assets/stylesheets/express_admin/components/_pane.sass +2 -2
  7. data/app/assets/stylesheets/express_admin/components/_sub_menu.sass +2 -2
  8. data/app/assets/stylesheets/express_admin/components/_widget_box.sass +4 -4
  9. data/app/assets/stylesheets/express_admin/globals/_foundation_overrides.sass +2 -1
  10. data/app/assets/stylesheets/express_admin/globals/_mixins.sass +0 -2
  11. data/app/assets/stylesheets/express_admin/plugins/_select2.sass +475 -68
  12. data/app/assets/stylesheets/express_admin/plugins/_tinymce.sass +2 -0
  13. data/app/assets/stylesheets/express_admin/screen.sass +6 -1
  14. data/app/assets/stylesheets/express_admin/sections/_header.sass +1 -0
  15. data/app/assets/stylesheets/express_admin/sections/_main_content.sass +6 -2
  16. data/app/assets/stylesheets/express_admin/sections/_main_region.sass +10 -7
  17. data/app/assets/stylesheets/express_admin/sections/_page_body.sass +6 -3
  18. data/app/assets/stylesheets/express_admin/sections/_page_sidebar.sass +6 -2
  19. data/app/assets/stylesheets/express_admin/sections/_sidebar_region.sass +4 -3
  20. data/app/assets/stylesheets/express_admin/shared/_buttons.sass +0 -1
  21. data/app/assets/stylesheets/express_admin/shared/_forms.sass +14 -2
  22. data/app/assets/stylesheets/express_admin/shared/_trees.sass +7 -3
  23. data/app/assets/stylesheets/ionicons/{ionicons.css.sass → ionicons.sass} +0 -0
  24. data/app/components/express_admin/addon_sidebar_component.rb +23 -34
  25. data/app/components/express_admin/definition_list.rb +38 -0
  26. data/app/components/express_admin/definition_table.rb +51 -0
  27. data/app/components/express_admin/flash_message_component.rb +5 -11
  28. data/app/components/express_admin/layout_component.rb +2 -9
  29. data/app/components/express_admin/main_region.rb +4 -4
  30. data/app/components/express_admin/mega_menu_component.rb +40 -34
  31. data/app/components/express_admin/page_header_component.rb +8 -18
  32. data/app/components/express_admin/pane.rb +13 -10
  33. data/app/components/express_admin/setting_form.rb +23 -20
  34. data/app/components/express_admin/sidebar_region.rb +6 -4
  35. data/app/components/express_admin/smart_form.rb +21 -18
  36. data/app/components/express_admin/smart_table.rb +44 -40
  37. data/app/components/express_admin/widget_box.rb +8 -8
  38. data/app/helpers/express_admin/admin_helper.rb +1 -1
  39. data/app/views/devise/sessions/new.html.et +63 -0
  40. data/app/views/layouts/express_admin/admin.html.et +8 -9
  41. data/app/views/shared/express_admin/_navigation_bar.html.et +6 -5
  42. data/config/tinymce.yml +29 -0
  43. data/lib/core_extensions/string_promptify.rb +9 -0
  44. data/lib/express_admin.rb +1 -0
  45. data/lib/express_admin/engine.rb +11 -9
  46. data/lib/express_admin/version.rb +1 -1
  47. data/lib/generators/express_admin/install/install_generator.rb +7 -0
  48. data/lib/generators/express_admin/install/templates/views/devise/sessions/new.html.et +1 -0
  49. data/test/dummy/app/views/demo/sign_in.html.et +6 -6
  50. data/test/dummy/db/test.sqlite3 +0 -0
  51. data/test/dummy/log/test.log +11361 -0
  52. data/test/dummy/test/components/smart_form_test.rb +57 -34
  53. data/test/dummy/test/components/smart_table_test.rb +35 -35
  54. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/1EoyfDwFVtgMAOjo7HPkor8TQbVaioOFx9hildx_DTQ.cache +0 -0
  55. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/4OPIkynisipUm8vKo57HUhBMWFSHBno_IH6OdpK29IA.cache +1 -0
  56. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/4hK1AdPGHbXGkebvk-nSvhxtCdOSlMYNWvA43CvQKhI.cache +0 -0
  57. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/6c0H20s6oHf45XogeDELaojxa0PX1NmirTTWV1ClcRw.cache +0 -0
  58. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/9QvwPXfTSVmgQX6tdK9GuCn0--MZ8Z8eJJbHpUEq1p8.cache +1 -0
  59. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/BoKdGhgi5NHfGTc42p9nltpEIYj_BBUxVdv7YhpBmmA.cache +0 -0
  60. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/GJGMlSyTg1AvPCV_6PaLOTVEKbHeVKY1jhCoaKuRlxM.cache +1 -0
  61. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/H0aD5KRj-4fhORkqWcWZfKPOQfu_ggvt4OmYOl4S5mw.cache +0 -0
  62. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/IBLgVNsKBbJxN8NQnh6zTc3bC_OG-8BhtA3xCNDV6ks.cache +1 -0
  63. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Po8q4NrWy9Kymnz_HbOk-WbdGY_KuuXc6urGogTHe7U.cache +0 -0
  64. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/V1aP9G-CVtOLR5PTnHleid8WC9TSfFAT1DzAygp_5CQ.cache +1 -0
  65. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/WhePtBvZPmF1Jhdcc4glsjhxBJQo9Qw0CDgy_F8lClY.cache +0 -0
  66. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/dVokuKbK8HbOtvPIksKGBAYE8x44l372dQ0gEISqbdo.cache +0 -0
  67. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/oN1zSGeSEz4KhkAuUF_yFDsCVPkulfFjomEAjFzGdPc.cache +0 -0
  68. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/qIeSoker4TjM7JYRQTOjgRd4nN0WeHnNY1GMK7Zpe8M.cache +0 -0
  69. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/tTFLM1bjKSeg4nyH7GWbTY6JVvuYhNKFFvsOMS9h8O0.cache +0 -0
  70. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/tzX-HHF4F70o-aSB9Z_duoPxFGDv3auYnrpko9SYafU.cache +1 -0
  71. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/vMbWbI1SO5bEaiu2pRvV8NDmms_j5flYoRvCSJavhdU.cache +0 -0
  72. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ypZCDLo54Pz2ZoUxrxSEUjT5FYMAq8Ozp8OTOYDRdAE.cache +0 -0
  73. data/test/fixtures/categories.yml +8 -0
  74. data/test/test_helper.rb +34 -0
  75. data/vendor/gems/express_templates/CHANGELOG.md +12 -0
  76. data/vendor/gems/express_templates/Gemfile.lock +4 -1
  77. data/vendor/gems/express_templates/README.md +22 -41
  78. data/vendor/gems/express_templates/express_templates.gemspec +1 -0
  79. data/vendor/gems/express_templates/lib/arbre/patches.rb +50 -0
  80. data/vendor/gems/express_templates/lib/core_extensions/proc.rb +1 -0
  81. data/vendor/gems/express_templates/lib/express_templates.rb +2 -3
  82. data/vendor/gems/express_templates/lib/express_templates/compiler.rb +2 -7
  83. data/vendor/gems/express_templates/lib/express_templates/components.rb +1 -9
  84. data/vendor/gems/express_templates/lib/express_templates/components/base.rb +33 -37
  85. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/resourceful.rb +30 -18
  86. data/vendor/gems/express_templates/lib/express_templates/components/configurable.rb +41 -0
  87. data/vendor/gems/express_templates/lib/express_templates/components/form_rails_support.rb +5 -6
  88. data/vendor/gems/express_templates/lib/express_templates/components/forms.rb +0 -1
  89. data/vendor/gems/express_templates/lib/express_templates/components/forms/basic_fields.rb +3 -6
  90. data/vendor/gems/express_templates/lib/express_templates/components/forms/checkbox.rb +1 -1
  91. data/vendor/gems/express_templates/lib/express_templates/components/forms/express_form.rb +15 -25
  92. data/vendor/gems/express_templates/lib/express_templates/components/forms/form_component.rb +20 -11
  93. data/vendor/gems/express_templates/lib/express_templates/components/forms/option_support.rb +2 -2
  94. data/vendor/gems/express_templates/lib/express_templates/components/forms/radio.rb +7 -8
  95. data/vendor/gems/express_templates/lib/express_templates/components/forms/select.rb +61 -37
  96. data/vendor/gems/express_templates/lib/express_templates/components/forms/select_collection.rb +2 -8
  97. data/vendor/gems/express_templates/lib/express_templates/components/forms/submit.rb +7 -6
  98. data/vendor/gems/express_templates/lib/express_templates/components/tree_for.rb +26 -42
  99. data/vendor/gems/express_templates/lib/express_templates/version.rb +1 -1
  100. data/vendor/gems/express_templates/test/components/base_test.rb +17 -15
  101. data/vendor/gems/express_templates/test/components/capabilities/resourceful_test.rb +3 -3
  102. data/vendor/gems/express_templates/test/components/configurable_test.rb +27 -21
  103. data/vendor/gems/express_templates/test/components/forms/basic_fields_test.rb +57 -17
  104. data/vendor/gems/express_templates/test/components/forms/checkbox_test.rb +16 -22
  105. data/vendor/gems/express_templates/test/components/forms/express_form_test.rb +23 -76
  106. data/vendor/gems/express_templates/test/components/forms/radio_test.rb +31 -27
  107. data/vendor/gems/express_templates/test/components/forms/select_test.rb +46 -71
  108. data/vendor/gems/express_templates/test/components/forms/submit_test.rb +10 -5
  109. data/vendor/gems/express_templates/test/components/tree_for_test.rb +24 -52
  110. data/vendor/gems/express_templates/test/dummy/app/views/hello/show.html.et +4 -3
  111. data/vendor/gems/express_templates/test/dummy/app/views/layouts/application.html.et +1 -1
  112. data/vendor/gems/express_templates/test/dummy/log/test.log +4296 -0
  113. data/vendor/gems/express_templates/test/express_templates_test.rb +5 -1
  114. data/vendor/gems/express_templates/test/handler_test.rb +19 -17
  115. data/vendor/gems/express_templates/test/performance_test.rb +11 -7
  116. data/vendor/gems/express_templates/test/test_helper.rb +162 -1
  117. metadata +58 -47
  118. data/app/assets/stylesheets/express_admin/components/_megadropdown.sass +0 -66
  119. data/vendor/gems/express_templates/diagrams/diagram.graffle +0 -2404
  120. data/vendor/gems/express_templates/diagrams/diagram_express_templates.png +0 -0
  121. data/vendor/gems/express_templates/diagrams/diagram_haml_erb.png +0 -0
  122. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/adoptable.rb +0 -20
  123. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/building.rb +0 -14
  124. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/conditionality.rb +0 -54
  125. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/configurable.rb +0 -90
  126. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/iterating.rb +0 -75
  127. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/parenting.rb +0 -72
  128. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/rendering.rb +0 -30
  129. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/templating.rb +0 -198
  130. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/wrapping.rb +0 -84
  131. data/vendor/gems/express_templates/lib/express_templates/components/column.rb +0 -13
  132. data/vendor/gems/express_templates/lib/express_templates/components/container.rb +0 -7
  133. data/vendor/gems/express_templates/lib/express_templates/components/content_for.rb +0 -42
  134. data/vendor/gems/express_templates/lib/express_templates/components/for_each.rb +0 -30
  135. data/vendor/gems/express_templates/lib/express_templates/components/forms/form_support.rb +0 -13
  136. data/vendor/gems/express_templates/lib/express_templates/components/null_wrap.rb +0 -41
  137. data/vendor/gems/express_templates/lib/express_templates/components/row.rb +0 -28
  138. data/vendor/gems/express_templates/lib/express_templates/components/table_for.rb +0 -163
  139. data/vendor/gems/express_templates/lib/express_templates/components/unless_block.rb +0 -40
  140. data/vendor/gems/express_templates/lib/express_templates/expander.rb +0 -140
  141. data/vendor/gems/express_templates/lib/express_templates/macro.rb +0 -45
  142. data/vendor/gems/express_templates/lib/express_templates/markup.rb +0 -9
  143. data/vendor/gems/express_templates/lib/express_templates/markup/html_tag.rb +0 -62
  144. data/vendor/gems/express_templates/lib/express_templates/markup/tag.rb +0 -150
  145. data/vendor/gems/express_templates/lib/express_templates/markup/wrapper.rb +0 -94
  146. data/vendor/gems/express_templates/lib/express_templates/markup/yielder.rb +0 -21
  147. data/vendor/gems/express_templates/test/components/column_test.rb +0 -11
  148. data/vendor/gems/express_templates/test/components/conditionality_test.rb +0 -37
  149. data/vendor/gems/express_templates/test/components/container_test.rb +0 -66
  150. data/vendor/gems/express_templates/test/components/content_for_test.rb +0 -60
  151. data/vendor/gems/express_templates/test/components/iterating_test.rb +0 -127
  152. data/vendor/gems/express_templates/test/components/null_wrap_test.rb +0 -28
  153. data/vendor/gems/express_templates/test/components/row_test.rb +0 -16
  154. data/vendor/gems/express_templates/test/components/table_for_test.rb +0 -211
  155. data/vendor/gems/express_templates/test/expander_stack_test.rb +0 -41
  156. data/vendor/gems/express_templates/test/expander_test.rb +0 -99
  157. data/vendor/gems/express_templates/test/markup/tag_test.rb +0 -149
  158. data/vendor/gems/express_templates/test/markup/wrapper_test.rb +0 -42
  159. data/vendor/gems/express_templates/test/markup/yielder_test.rb +0 -9
@@ -1,84 +0,0 @@
1
- module ExpressTemplates
2
- module Components
3
- module Capabilities
4
-
5
- # Add the ability for a component template to wrap or decorate a fragment
6
- # with another fragment.
7
- #
8
- # The insertion point for the inner fragment is marked with <tt>_yield</tt>
9
- #
10
- # Example:
11
- #
12
- # class MenuComponent < ExpressTemplates::Components::Base
13
- #
14
- # fragments :menu_item, -> { li { menu_link(item) } },
15
- # :menu_wrapper, -> { ul { _yield } }
16
- #
17
- # for_each -> { menu_items }
18
- #
19
- # wrap_with :menu_wrapper
20
- #
21
- # end
22
- #
23
- # Note this example also uses Capabilities::Iterating.
24
- #
25
- # Provides:
26
- #
27
- # * Wrapping::ClassMethods
28
- #
29
- module Wrapping
30
- def self.included(base)
31
- base.class_eval do
32
- extend ClassMethods
33
- include InstanceMethods
34
- end
35
- end
36
-
37
- module InstanceMethods
38
- def compile
39
- lookup :markup
40
- end
41
- end
42
-
43
- module ClassMethods
44
-
45
- # Enclose whatever the component would already generate
46
- # inside the specified fragment wherever we encounter _yield
47
- def wrap_with(fragment, dont_wrap_if: false )
48
- wrapper_name(fragment)
49
- wrapper_src = _lookup(fragment).source
50
- inner_src = _lookup(:markup).source_body
51
- wrapped_src = wrapper_src.gsub!(/\W_yield\W/, inner_src)
52
-
53
- fragment_src = if dont_wrap_if
54
- %Q(-> {
55
- unless_block(Proc.from_source(#{dont_wrap_if.source.inspect}), alt: Proc.from_source(%q(-> {#{inner_src}}))) {
56
- #{Proc.from_source(wrapped_src).source_body}
57
- }
58
- })
59
- else
60
- wrapped_src
61
- end
62
-
63
- _store :markup, Proc.from_source(fragment_src)
64
-
65
- end
66
-
67
- def wrapper_name(name = nil)
68
- if name.nil?
69
- @wrapper_name || :markup
70
- else
71
- @wrapper_name = name
72
- end
73
- end
74
-
75
- def _yield(*args)
76
- "{{_yield}}"
77
- end
78
-
79
- end
80
-
81
- end
82
- end
83
- end
84
- end
@@ -1,13 +0,0 @@
1
- module ExpressTemplates
2
- module Components
3
- class Column < Container
4
- include Capabilities::Configurable
5
-
6
- emits -> {
7
- div.column(my[:id]) {
8
- _yield
9
- }
10
- }
11
- end
12
- end
13
- end
@@ -1,7 +0,0 @@
1
- module ExpressTemplates
2
- module Components
3
- class Container < Base
4
- include Capabilities::Parenting
5
- end
6
- end
7
- end
@@ -1,42 +0,0 @@
1
- module ExpressTemplates
2
- module Components
3
- # Provide a wrapper for the content_for helper which
4
- # accepts a block of express template code.
5
- #
6
- # Example:
7
- #
8
- # ```ruby
9
- # content_for(:header) {
10
- # h1 "Title"
11
- # }
12
- # ```
13
- # Or:
14
- # ```ruby
15
- # content_for(:page_title), "People"
16
- # ```
17
- class ContentFor < Container
18
- include Capabilities::Configurable
19
- def compile
20
- children_markup = compile_children
21
- content_label = @args[0]
22
- result = %Q|\ncontent_for(:#{content_label}|
23
- if children_markup.empty?
24
- if @args[1].kind_of?(String)
25
- children_markup = @args[1]
26
- # append children as argument
27
- result << %Q|, "#{children_markup}".html_safe).to_s|
28
- else
29
- # no markup specified - must be referencing the content
30
- result << ").to_s"
31
- end
32
- else
33
- # append children in block form
34
- result << %Q|) {
35
- (#{children_markup.gsub(/^\s+/, '')}).html_safe
36
- }.to_s|
37
- end
38
- result
39
- end
40
- end
41
- end
42
- end
@@ -1,30 +0,0 @@
1
- module ExpressTemplates
2
- module Components
3
- class ForEach < Components::Container
4
- attr :collection, :member
5
-
6
- def initialize(*args)
7
- iterator = args.shift
8
- options = args.first.kind_of?(Hash) ? args.shift : {}
9
- expander = args.shift
10
- @collection, @member = nil, (options[:as]||"item")
11
- if iterator.kind_of?(Symbol)
12
- @collection = iterator.to_s
13
- @member = collection.sub(/^@/, '').singularize
14
- elsif iterator.kind_of?(Proc)
15
- @collection = "(#{iterator.source}.call)"
16
- elsif iterator.kind_of?(String)
17
- @collection = "(#{iterator}.call)"
18
- else
19
- raise "ForEach unknown iterator: #{iterator}"
20
- end
21
- end
22
-
23
-
24
- def compile
25
- %Q((#{@collection}.each_with_index.map do |#{@member}, #{@member}_index|#{compile_children}\nend).join)
26
- end
27
-
28
- end
29
- end
30
- end
@@ -1,13 +0,0 @@
1
- module ExpressTemplates
2
- module Components
3
- module Forms
4
- module FormSupport
5
-
6
- def form_action
7
- @config[:action] || "{{@#{resource_name}.try(:persisted?) ? #{resource_path(ivar: true)} : #{collection_path}}}"
8
- end
9
-
10
- end
11
- end
12
- end
13
- end
@@ -1,41 +0,0 @@
1
- module ExpressTemplates
2
- module Components
3
- # NullWrap is useful for creating a node in the component tree that does
4
- # not produce any markup. It can be used in a template fragment to
5
- # wrap bare text or string content where such would not normally be possible.
6
- #
7
- # Example:
8
- #
9
- # ```ruby
10
- # div {
11
- # some_component
12
- # null_wrap {
13
- # "Some text"
14
- # }
15
- # other_component
16
- # }
17
- # ```
18
- #
19
- # Otherwise you can use it to hold already-complied code meant for
20
- # evaluation in the view that needs to be protected from being compiled
21
- # again. This use is largely internal to express_templates. It is not
22
- # expected that users of this library would need this.
23
- #
24
- # Example:
25
- #
26
- # ```ruby
27
- # null_wrap("(@collection.map do |member| \"<li>#{member.name}</li>\").join")
28
- # ```
29
- #
30
- class NullWrap < Components::Container
31
- def initialize(*args)
32
- @already_compiled_stuff = args.shift if args.first.is_a?(String)
33
- super(*args)
34
- end
35
-
36
- def compile
37
- @already_compiled_stuff || compile_children
38
- end
39
- end
40
- end
41
- end
@@ -1,28 +0,0 @@
1
- module ExpressTemplates
2
- module Components
3
- # A Row is a Container implemented as a div with
4
- # a CSS class "row"
5
- #
6
- # An optional dom ID may be specified as a symbol.
7
- #
8
- # Example:
9
- #
10
- # row(:main) {
11
- # p "Some content"
12
- # }
13
- #
14
- # This will render as:
15
- #
16
- # <div id="main" class="row"><p>Some content</p></div>
17
- #
18
- class Row < Container
19
- include Capabilities::Configurable
20
-
21
- emits -> {
22
- div.row(my[:id]) {
23
- _yield
24
- }
25
- }
26
- end
27
- end
28
- end
@@ -1,163 +0,0 @@
1
- module ExpressTemplates
2
- module Components
3
- # Create an html table from a collection of data.
4
- #
5
- # Typically this will be a collection of models
6
- # of the same type. Each member of the collection must
7
- # respond to the column names provided.
8
- #
9
- # Example:
10
- #
11
- # ````ruby
12
- # table_for(:people) do |t|
13
- # t.column :name
14
- # t.column :email
15
- # t.column :phone
16
- # t.column :hourly_rate, header: "Rate",
17
- # formatter: -> (amount) {'$%0.2f' % amount rescue 'N/A'}
18
- # end
19
- # ````
20
- #
21
- # This assumes that a @people variable will exist in the
22
- # view and that it will be a collection whose members respond to
23
- # :name, :email, :phone, :hourly_rate
24
- #
25
- # This will result in markup like the following:
26
- #
27
- # <table id="people">
28
- # <thead>
29
- # <tr>
30
- # <th class="name">Name</th>
31
- # <th class="email">Email</th>
32
- # <th class="phone">Phone</th>
33
- # <th class="hourly_rate">Rate</th>
34
- # </tr>
35
- # </thead>
36
- # <tbody>
37
- # <tr id="person-1">
38
- # <td class="name">Steven Talcott Smith</td>
39
- # <td class="email">steve@aelogica.com</td>
40
- # <td class="phone">415-555-1212</td>
41
- # <td class="hourly_rate">$250.00</td>
42
- # </tr>
43
- # </tbody>
44
- # </table>
45
- #
46
- # Note that column options include :formatter and :header.
47
- #
48
- # :formatter may be a stabby lambda which is passed the value to be formatted.
49
- #
50
- # :header may be either a string
51
- #
52
- class TableFor < Base
53
- include Capabilities::Configurable
54
- include Capabilities::Building
55
-
56
- def initialize(*args)
57
- super(*args)
58
- _process_args!(args) # from Configurable
59
- yield(self) if block_given?
60
- end
61
-
62
- attr :columns
63
-
64
- def column(name, options = {})
65
- @columns ||= []
66
- @columns << Column.new(name, options)
67
- end
68
-
69
- emits -> {
70
- table(my[:id]) {
71
- thead {
72
- tr {
73
- columns.each do |column|
74
- th.send(column.name) {
75
- column.title
76
- }
77
- end
78
- }
79
- }
80
- tbody {
81
- for_each("@#{my[:id]}".to_sym) {
82
-
83
- tr(id: "#{my[:id].to_s.singularize}-{{#{my[:id].to_s.singularize}.id}}",
84
- class: my[:id].to_s.singularize) {
85
-
86
- columns.each do |column|
87
- if(column.has_actions?)
88
- td(class: column.name) {
89
- column.show_actions(my[:id].to_s)
90
- }
91
- else
92
- td(class: column.name) {
93
- column.format(my[:id].to_s.singularize)
94
- }
95
- end
96
- end
97
- }
98
- }
99
- }
100
- }
101
- }
102
-
103
- def wrap_for_stack_trace(body)
104
- "ExpressTemplates::Components::TableFor.render_in(self) {\n#{body}\n}"
105
- end
106
-
107
- def compile
108
- wrap_for_stack_trace(lookup(:markup))
109
- end
110
-
111
- class Column
112
- attr :name, :options
113
- def initialize(name, options = {})
114
- @name = name
115
- @options = options
116
- @formatter = options[:formatter]
117
- @header = options[:header]
118
- @actions = options[:actions] || []
119
- end
120
-
121
- def has_actions?
122
- @actions.any?
123
- end
124
-
125
- def format(item_name)
126
- if @formatter.nil?
127
- "\#\{#{item_name}.#{name}\}"
128
- elsif @formatter.kind_of?(Proc)
129
- "\#\{(#{@formatter.source}).call(#{item_name}.#{name})\}"
130
- end
131
- end
132
-
133
- def show_actions(item_name)
134
- action_links = StringIO.new
135
- @actions.each do |action|
136
- action_name = action.to_s
137
- if action_name.eql?('edit')
138
- action_links.puts "<a href='/#{item_name}/{{#{item_name.singularize}.id}}/edit'>Edit</a>"
139
- elsif action_name.eql?('delete')
140
- action_links.puts "<a href='/#{item_name}/{{#{item_name.singularize}.id}}' data-method='delete' data-confirm='Are you sure?'>Delete</a>"
141
- elsif action_name.eql?('show')
142
- action_links.puts "<a href='/#{item_name}/{{#{item_name.singularize}.id}}'>Show</a>"
143
- end
144
- end
145
- action_links.string
146
- end
147
-
148
- def title
149
- case
150
- when @header.nil?
151
- @name.to_s.try(:titleize)
152
- when @header.kind_of?(String)
153
- @header
154
- when @header.kind_of?(Proc)
155
- "{{(#{@header.source}).call(#{@name})}}"
156
- end
157
- end
158
- end
159
-
160
- end
161
-
162
- end
163
- end
@@ -1,40 +0,0 @@
1
- module ExpressTemplates
2
- module Components
3
- class UnlessBlock < Components::Container
4
-
5
- attr :conditional
6
-
7
- def initialize(*args)
8
- @conditional = args.shift
9
- @alt = args.shift[:alt] if args.first.kind_of?(Hash)
10
- parent = args.shift
11
- if @conditional.kind_of?(Symbol)
12
- @conditional = @conditional.to_s
13
- elsif @conditional.kind_of?(Proc)
14
- @conditional = "(#{@conditional.source}.call)"
15
- elsif iterator.kind_of?(String)
16
- @conditional = "(#{@conditional}.call)"
17
- else
18
- raise "UnlessBlock unknown conditional: #{@conditional.inspect}"
19
- end
20
-
21
- if @alt.kind_of?(Proc)
22
- @alt = _compile_fragment @alt
23
- elsif @alt.nil?
24
- @alt = "''"
25
- end
26
- end
27
-
28
- def compile
29
- s = unless @alt
30
- %Q((unless #{@conditional}#{compile_children}\nend))
31
- else
32
- %Q((unless #{@conditional}#{compile_children}\nelse #{@alt}\nend))
33
- end
34
- puts s if ENV['DEBUG'].eql?('true')
35
- s
36
- end
37
-
38
- end
39
- end
40
- end