fleetio_spark 0.2.48 → 1.0.0.rc.1

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 (189) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/spark/_icons.js +1 -1
  3. data/app/assets/javascripts/spark/components/app/sidebar/_fix.js +4 -4
  4. data/app/assets/javascripts/spark/components/app/sidebar/_toggle.js +1 -1
  5. data/app/assets/javascripts/spark/components/layout/_auto-grid.js +5 -5
  6. data/app/assets/javascripts/spark/components/nav/_toggle.js +16 -7
  7. data/app/assets/javascripts/spark/components/ui/_sticky_panel.js +2 -2
  8. data/app/assets/javascripts/spark/components/ui/_toast.js +3 -6
  9. data/app/assets/javascripts/spark/shims/_dataset.js +241 -0
  10. data/app/assets/javascripts/spark/spark.js +18 -16
  11. data/app/assets/stylesheets/spark/_index.scss +0 -1
  12. data/app/assets/stylesheets/spark/components/_index.scss +11 -5
  13. data/app/assets/stylesheets/spark/components/app/_header.scss +15 -28
  14. data/app/assets/stylesheets/spark/components/app/_layout.scss +2 -2
  15. data/app/assets/stylesheets/spark/components/app/_sidebar.scss +19 -47
  16. data/app/assets/stylesheets/spark/components/app/sidebar/_header.scss +44 -48
  17. data/app/assets/stylesheets/spark/components/app/sidebar/_toggle.scss +5 -2
  18. data/app/assets/stylesheets/spark/components/button/_button.scss +48 -53
  19. data/app/assets/stylesheets/spark/components/button/_button_group.scss +10 -16
  20. data/app/assets/stylesheets/spark/components/button/_size.scss +17 -8
  21. data/app/assets/stylesheets/spark/components/icon/_badge.scss +41 -0
  22. data/app/assets/stylesheets/spark/{_icons.scss → components/icon/_icon.scss} +0 -0
  23. data/app/assets/stylesheets/spark/components/{form → input}/_switch.scss +20 -20
  24. data/app/assets/stylesheets/spark/components/layout/_block.scss +44 -0
  25. data/app/assets/stylesheets/spark/components/layout/_grid.scss +26 -29
  26. data/app/assets/stylesheets/spark/components/layout/_media_block.scss +76 -0
  27. data/app/assets/stylesheets/spark/components/layout/_page.scss +54 -0
  28. data/app/assets/stylesheets/spark/components/{app → messaging}/_banner.scss +3 -3
  29. data/app/assets/stylesheets/spark/components/messaging/_trial-notice.scss +20 -0
  30. data/app/assets/stylesheets/spark/components/nav/_item.scss +6 -30
  31. data/app/assets/stylesheets/spark/components/nav/_sidebar.scss +11 -48
  32. data/app/assets/stylesheets/spark/components/nav/_tabs.scss +5 -5
  33. data/app/assets/stylesheets/spark/components/nav/sidebar/_theme-default.scss +59 -0
  34. data/app/assets/stylesheets/spark/components/nav/sidebar/_theme-primary.scss +69 -0
  35. data/app/assets/stylesheets/spark/components/nav/tree/_group.scss +1 -6
  36. data/app/assets/stylesheets/spark/components/ui/_card.scss +57 -0
  37. data/app/assets/stylesheets/spark/components/ui/_header.scss +55 -55
  38. data/app/assets/stylesheets/spark/components/ui/_placeholder.scss +8 -22
  39. data/app/assets/stylesheets/spark/components/ui/_toolbar.scss +1 -27
  40. data/app/assets/stylesheets/spark/components_old/_dropdown.scss +117 -114
  41. data/app/assets/stylesheets/spark/components_old/_index.scss +1 -1
  42. data/app/assets/stylesheets/spark/components_old/header/_index.scss +0 -1
  43. data/app/assets/stylesheets/spark/components_old/header/_search.scss +2 -0
  44. data/app/assets/stylesheets/spark/core/_vars.scss +6 -3
  45. data/app/components/spark/badge.html.slim +4 -0
  46. data/app/components/spark/badge.rb +15 -0
  47. data/app/components/spark/banner.html.slim +7 -0
  48. data/app/components/spark/banner.rb +28 -0
  49. data/app/components/spark/button.html.slim +9 -0
  50. data/app/components/spark/button.rb +68 -0
  51. data/app/components/spark/button/group.html.slim +4 -0
  52. data/app/components/spark/button/group.rb +22 -0
  53. data/app/components/spark/card.html.slim +7 -0
  54. data/app/components/spark/card.rb +13 -0
  55. data/app/components/spark/checklist.html.slim +14 -0
  56. data/app/components/spark/checklist.rb +49 -0
  57. data/app/components/spark/checklist/container.html.slim +14 -0
  58. data/app/components/spark/checklist/container.rb +51 -0
  59. data/app/components/spark/checklist/item.html.slim +9 -0
  60. data/app/components/spark/checklist/item.rb +24 -0
  61. data/app/components/spark/checklist/trigger.html.slim +6 -0
  62. data/app/components/spark/checklist/trigger.rb +13 -0
  63. data/app/components/spark/component/base.rb +27 -0
  64. data/app/components/spark/embed/wistia_media.html.slim +11 -0
  65. data/app/components/spark/embed/wistia_media.rb +22 -0
  66. data/app/components/spark/embed/wistia_media_component.rb +22 -36
  67. data/app/components/spark/grid.html.slim +4 -0
  68. data/app/components/spark/grid.rb +31 -0
  69. data/app/components/spark/grid/column.html.slim +1 -0
  70. data/app/components/spark/grid/column.rb +34 -0
  71. data/app/components/spark/icon.html.slim +1 -0
  72. data/app/components/spark/icon.rb +34 -0
  73. data/app/components/spark/icon/placeholder.html.slim +20 -0
  74. data/app/components/spark/icon/placeholder.rb +139 -0
  75. data/app/components/spark/input/base.html.slim +1 -0
  76. data/app/components/spark/input/base.rb +17 -0
  77. data/app/components/spark/input/checkbox.html.slim +2 -0
  78. data/app/components/spark/input/checkbox.rb +14 -0
  79. data/app/components/spark/input/label.html.slim +4 -0
  80. data/app/components/spark/input/label.rb +13 -0
  81. data/app/components/spark/input/switch.html.slim +5 -0
  82. data/app/components/spark/input/switch.rb +24 -0
  83. data/app/components/spark/layout/block.html.slim +13 -0
  84. data/app/components/spark/layout/block.rb +62 -0
  85. data/app/components/spark/layout/media_block.html.slim +11 -0
  86. data/app/components/spark/layout/media_block.rb +29 -0
  87. data/app/components/spark/layout/page.html.slim +15 -0
  88. data/app/components/spark/layout/page.rb +37 -0
  89. data/app/components/spark/nav/group.html.slim +5 -0
  90. data/app/components/spark/nav/group.rb +31 -0
  91. data/app/components/spark/nav/item.html.slim +12 -0
  92. data/app/components/spark/nav/item.rb +36 -0
  93. data/app/components/spark/nav/sidebar.html.slim +14 -0
  94. data/app/components/spark/nav/sidebar.rb +60 -0
  95. data/app/components/spark/nav/tab_panels.html.slim +6 -0
  96. data/app/components/spark/nav/tab_panels.rb +42 -0
  97. data/app/components/spark/nav/tabs.html.slim +8 -0
  98. data/app/components/spark/nav/tabs.rb +36 -0
  99. data/app/components/spark/nav/toggle.html.slim +9 -0
  100. data/app/components/spark/nav/toggle.rb +20 -0
  101. data/app/components/spark/nav/tree.html.slim +9 -0
  102. data/app/components/spark/nav/tree.rb +53 -0
  103. data/app/components/spark/nav/tree/group.html.slim +9 -0
  104. data/app/components/spark/nav/tree/group.rb +26 -0
  105. data/app/components/spark/sticky_panel.html.slim +2 -0
  106. data/app/components/spark/sticky_panel.rb +12 -0
  107. data/app/components/spark/toolbar.html.slim +7 -0
  108. data/app/components/spark/toolbar.rb +14 -0
  109. data/app/components/spark/tooltip.html.slim +3 -0
  110. data/app/components/spark/tooltip.rb +13 -0
  111. data/app/components/spark/trial_notice.html.slim +3 -0
  112. data/app/components/spark/trial_notice.rb +35 -0
  113. data/app/components/spark/widget_card.html.slim +5 -0
  114. data/app/components/spark/widget_card.rb +12 -0
  115. data/app/helpers/spark/application_helper.rb +9 -0
  116. data/lib/fleetio_spark.rb +6 -6
  117. data/lib/fleetio_spark/version.rb +1 -1
  118. data/public/code-1.0.0.rc.1.js +2 -0
  119. data/public/code-1.0.0.rc.1.js.gz +0 -0
  120. data/public/code-1.0.0.rc.1.js.map +1 -0
  121. data/public/spark-1.0.0.rc.1.css +1 -0
  122. data/public/spark-1.0.0.rc.1.css.gz +0 -0
  123. data/public/spark-1.0.0.rc.1.js +2 -0
  124. data/public/spark-1.0.0.rc.1.js.gz +0 -0
  125. data/public/spark-1.0.0.rc.1.js.map +1 -0
  126. metadata +110 -75
  127. data/app/assets/stylesheets/spark/components/layout/_base.scss +0 -0
  128. data/app/assets/stylesheets/spark/components/layout/_header.scss +0 -55
  129. data/app/assets/stylesheets/spark/components/page/_header.scss +0 -9
  130. data/app/assets/stylesheets/spark/components/page/_main.scss +0 -62
  131. data/app/assets/stylesheets/spark/components_old/header/_trial-status.scss +0 -61
  132. data/app/components/spark/app/banner_component.rb +0 -32
  133. data/app/components/spark/app/content_component.rb +0 -32
  134. data/app/components/spark/app/header_component.rb +0 -59
  135. data/app/components/spark/app/layout_component.rb +0 -92
  136. data/app/components/spark/app/modal_component.rb +0 -5
  137. data/app/components/spark/app/sidebar/header_component.rb +0 -39
  138. data/app/components/spark/app/sidebar_component.rb +0 -20
  139. data/app/components/spark/button/add_component.rb +0 -9
  140. data/app/components/spark/button/base_component.rb +0 -39
  141. data/app/components/spark/button/cancel_component.rb +0 -8
  142. data/app/components/spark/button/danger_component.rb +0 -8
  143. data/app/components/spark/button/group_component.rb +0 -24
  144. data/app/components/spark/button/icon_component.rb +0 -14
  145. data/app/components/spark/button/primary_component.rb +0 -8
  146. data/app/components/spark/button/text_component.rb +0 -8
  147. data/app/components/spark/form/checkbox_component.rb +0 -16
  148. data/app/components/spark/form/input_component.rb +0 -9
  149. data/app/components/spark/form/label_component.rb +0 -12
  150. data/app/components/spark/form/switch_component.rb +0 -32
  151. data/app/components/spark/layout/base_component.rb +0 -2
  152. data/app/components/spark/layout/grid/column_component.rb +0 -32
  153. data/app/components/spark/layout/grid_component.rb +0 -37
  154. data/app/components/spark/layout/header_component.rb +0 -26
  155. data/app/components/spark/layout/page_component.rb +0 -31
  156. data/app/components/spark/nav/breadcrumbs_component.rb +0 -2
  157. data/app/components/spark/nav/group_component.rb +0 -36
  158. data/app/components/spark/nav/item_component.rb +0 -44
  159. data/app/components/spark/nav/pills_component.rb +0 -28
  160. data/app/components/spark/nav/sidebar_component.rb +0 -59
  161. data/app/components/spark/nav/tab_panels/panel_component.rb +0 -37
  162. data/app/components/spark/nav/tab_panels/tab_component.rb +0 -13
  163. data/app/components/spark/nav/tab_panels_component.rb +0 -28
  164. data/app/components/spark/nav/tabs_component.rb +0 -59
  165. data/app/components/spark/nav/toggle_component.rb +0 -28
  166. data/app/components/spark/nav/tree/group_component.rb +0 -35
  167. data/app/components/spark/nav/tree_component.rb +0 -56
  168. data/app/components/spark/page/layout_component.rb +0 -32
  169. data/app/components/spark/page/main_component.rb +0 -39
  170. data/app/components/spark/ui/card_component.rb +0 -16
  171. data/app/components/spark/ui/checklist/container_component.rb +0 -56
  172. data/app/components/spark/ui/checklist/item_component.rb +0 -37
  173. data/app/components/spark/ui/checklist_trigger_component.rb +0 -20
  174. data/app/components/spark/ui/icon/_icon.html.erb +0 -0
  175. data/app/components/spark/ui/icon_component.rb +0 -30
  176. data/app/components/spark/ui/placeholder_component.rb +0 -105
  177. data/app/components/spark/ui/sticky_panel_component.rb +0 -9
  178. data/app/components/spark/ui/toolbar_component.rb +0 -17
  179. data/app/components/spark/ui/tooltip_component.rb +0 -13
  180. data/app/components/spark/ui/widget_card_component.rb +0 -13
  181. data/lib/fleetio_spark/component.rb +0 -36
  182. data/public/code-0.2.48.js +0 -2
  183. data/public/code-0.2.48.js.gz +0 -0
  184. data/public/code-0.2.48.js.map +0 -1
  185. data/public/spark-0.2.48.css +0 -1
  186. data/public/spark-0.2.48.css.gz +0 -0
  187. data/public/spark-0.2.48.js +0 -2
  188. data/public/spark-0.2.48.js.gz +0 -0
  189. data/public/spark-0.2.48.js.map +0 -1
@@ -92,7 +92,10 @@ $elevation-ambient-map: (
92
92
  6: "0px 10px 48px 10px"
93
93
  );
94
94
 
95
- $card-shadow: 0px 1px 2px -2px rgba(0,0,0,0.1),
96
- 0px 1px 2px 0px rgba(0,0,0,0.04),
97
- 0px 2px 5px 0px rgba(0,0,0,0.06),
95
+ $card-shadow: 0px 1px 2px -2px rgba(0,0,0,0.1),
96
+ 0px 1px 2px 0px rgba(0,0,0,0.04),
97
+ 0px 2px 5px 0px rgba(0,0,0,0.06),
98
98
  0px 0px 0px 1px rgba(0,0,0,0.03);
99
+
100
+ // Gutters
101
+ $gutter-sizes : ['base', $pad-base], ['small', $pad-sm], ['medium', $pad-md], ['large', $pad-lg], ['xl', $pad-xl];
@@ -0,0 +1,4 @@
1
+ - classname.add("color-#{@color}")
2
+ - classname.add(@outline ? :outline : :fill)
3
+ span *tag_attrs
4
+ = @text
@@ -0,0 +1,15 @@
1
+ module Spark
2
+ class Badge < Spark::Component::Base
3
+ COLOR = %i[red yellow green teal blue purple gray].freeze
4
+ attribute :text, :outline, color: :gray
5
+
6
+ validates_attr :text, presence: true
7
+ validates_attr :color, choices: COLOR
8
+
9
+ def initialize(*)
10
+ super
11
+
12
+ classname.add("spark-badge")
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,7 @@
1
+ header *tag_attrs
2
+ .app-banner-content
3
+ = render(Spark::Icon, name: theme_icon, class: "app-banner-icon")
4
+ .app-banner-message = @message || content
5
+ - if @href
6
+ .app-banner-action
7
+ = link_to(@action_text, @href, class: "app-banner-action-item", target: @target)
@@ -0,0 +1,28 @@
1
+ module Spark
2
+ class Banner < Spark::Component::Base
3
+ THEME = %i[message alert admin].freeze
4
+
5
+ attribute :message, :href, :icon, :target
6
+ attribute action_text: "Learn more", theme: "message"
7
+
8
+ validates_attr :theme, choices: THEME
9
+
10
+ def initialize(*)
11
+ super
12
+
13
+ tag_attrs.add(role: "banner")
14
+ classname.add("app-banner", "theme-#{@theme}")
15
+ end
16
+
17
+ def to_partial_path
18
+ end
19
+
20
+ def theme_icon
21
+ case @theme.to_sym
22
+ when :message then "message-text"
23
+ when :alert then "message-alert"
24
+ when :admin then "admin-user"
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,9 @@
1
+ - if @href
2
+ = link_to(@href, tag_attrs)
3
+ = render(Spark::Icon, name: @icon) if @icon
4
+ span.spark-button-label = @text || @content
5
+ - else
6
+ button *tag_attrs.add(type: @type)
7
+ = render(Spark::Icon, name: @icon) if @icon
8
+ - unless @theme == :icon
9
+ span.spark-button-label = @text || @content
@@ -0,0 +1,68 @@
1
+ module Spark
2
+ class Button < Spark::Component::Base
3
+
4
+ COLORS = %i[blue green yellow red purple]
5
+ SIZES = %i[xs small base medium large]
6
+ THEME = %i[add default danger icon primary text]
7
+ TYPE = %i[button submit reset]
8
+
9
+ attribute :text, :color, :size, :icon, :href, :hidden,
10
+ :value, :disabled, :name, :target, type: :button, theme: :default
11
+
12
+ validates_attr :size, choices: SIZES, allow_nil: true
13
+ validates_attr :color, choices: COLORS, allow_nil: true
14
+ validates_attr :theme, choices: THEME
15
+ validates_attr :type, choices: TYPE
16
+ validates_attr :text, presence: true, if: -> { @content.nil? }
17
+
18
+ # Icon button validation
19
+ validates_attr :icon, presence: true, if: -> { @type == :icon }
20
+
21
+ def initialize(*)
22
+ super
23
+ tag_attrs.add attr_hash(:value, :disabled, :name, :target)
24
+
25
+ if (@href && (data[:remote] || data[:method]))
26
+ tag_attrs.add rel: "nofollow"
27
+ end
28
+
29
+ aria.add attr_hash(:hidden)
30
+
31
+ tag_attrs.add(type: :button)
32
+ set_button_type unless @theme == :default
33
+ classname.base = "spark-button"
34
+ classname.add("size-#{@size}") if @size
35
+ classname.add("color-#{@color}") if @color
36
+ end
37
+
38
+ private
39
+
40
+ def set_button_type
41
+ send(:"#{@theme}_button")
42
+ end
43
+
44
+ def primary_button
45
+ classname.add("theme-primary")
46
+ end
47
+
48
+ def danger_button
49
+ primary_button
50
+ @color = :red
51
+ end
52
+
53
+ def icon_button
54
+ aria.add label: @text
55
+ classname.add("theme-icon-only")
56
+ end
57
+
58
+ def add_button
59
+ primary_button
60
+ @color = 'green'
61
+ @icon ||= 'plus'
62
+ end
63
+
64
+ def text_button
65
+ classname.add("theme-text")
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,4 @@
1
+ - unless buttons.empty?
2
+ div *tag_attrs
3
+ - buttons.each do |button|
4
+ = button.yield
@@ -0,0 +1,22 @@
1
+ module Spark
2
+ class Button
3
+ class Group < Spark::Component::Base
4
+
5
+ COLORS = Spark::Button::COLORS
6
+ SIZES = Spark::Button::SIZES
7
+
8
+ attribute :color, :size, role: "group"
9
+
10
+ validates_attr :color, choices: COLORS, allow_nil: true
11
+ validates_attr :size, choices: SIZES, allow_nil: true
12
+
13
+ element :button, multiple: true, component: Spark::Button
14
+
15
+ def initialize(*)
16
+ super
17
+
18
+ classname.base = "spark-button-group"
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,7 @@
1
+ div *tag_attrs
2
+ - if header
3
+ - header.classname.add("spark-card-header")
4
+ = header.yield
5
+ - if body
6
+ .spark-card-content
7
+ = body.yield
@@ -0,0 +1,13 @@
1
+ module Spark
2
+ class Card < Spark::Component::Base
3
+
4
+ element :header, component: Spark::Layout::Block
5
+
6
+ element :body
7
+
8
+ def initialize(*)
9
+ super
10
+ classname.add("spark-card")
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ - classname.add('completed') if complete?
2
+ - classname.add('collapsed') if can_collapse?
3
+ div *tag_attrs
4
+ - if complete?
5
+ = complete_content.yield if complete_content.present?
6
+ - else
7
+ - sort_items.each do |item|
8
+ = item.yield
9
+
10
+ - if can_collapse?
11
+ .item-collapser
12
+ / these can use translated text/i18n later from a new attribute
13
+ = render(Spark::Button, text: "View full list", class: 'view-list', data: { toggle_class: button_toggle})
14
+ = render(Spark::Button, text: "Collapse list", class: 'collapse-list', data: { toggle_class: button_toggle})
@@ -0,0 +1,49 @@
1
+ module Spark
2
+ class Checklist < Spark::Component::Base
3
+ attribute :collapse_after
4
+
5
+ validates_attr :collapse_after, numericality: { only_integer: true }, allow_blank: true
6
+
7
+ element :item, multiple: true, component: Spark::Checklist::Item
8
+ element :complete_content
9
+
10
+ def initialize(*)
11
+ super
12
+ data.add checklist_id: unique_id
13
+
14
+ classname.base = 'spark-checklist-container'
15
+ end
16
+
17
+ def sort_items
18
+ items.sort_by! { |item| item.attribute_completed ? 1 : 0 }
19
+ add_collapse_item_class if @collapse_after
20
+ items
21
+ end
22
+
23
+ private
24
+
25
+ def complete?
26
+ completed_items.length == items.length
27
+ end
28
+
29
+ def completed_items
30
+ @completed_items ||= items.select do |item|
31
+ item.attribute_completed == true
32
+ end
33
+ end
34
+
35
+ def can_collapse?
36
+ @collapse_after && @collapse_after < items.length
37
+ end
38
+
39
+ def add_collapse_item_class
40
+ items.slice(@collapse_after, items.size).each do |item|
41
+ item.classname.add("collapse-item")
42
+ end
43
+ end
44
+
45
+ def button_toggle
46
+ %(collapsed; #{selector(:data, :checklist_id)})
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,14 @@
1
+ - classname.add('completed') if complete?
2
+ - classname.add('collapsed') if can_collapse?
3
+ div *tag_attrs
4
+ - if complete?
5
+ = complete_content.yield if complete_content.present?
6
+ - else
7
+ - sort_items.each do |item|
8
+ = item.yield
9
+
10
+ - if can_collapse?
11
+ .item-collapser
12
+ / these can use translated text/i18n later from a new attribute
13
+ = render(Spark::Button, text: "View full list", class: 'view-list', data: { toggle_class: button_toggle})
14
+ = render(Spark::Button, text: "Collapse list", class: 'collapse-list', data: { toggle_class: button_toggle})
@@ -0,0 +1,51 @@
1
+ module Spark
2
+ class Checklist
3
+ class Container < Spark::Component::Base
4
+ attribute :collapse_after
5
+
6
+ validates_attr :collapse_after, numericality: { only_integer: true }, allow_blank: true
7
+
8
+ element :item, multiple: true, component: Spark::Checklist::Item
9
+ element :complete_content
10
+
11
+ def initialize(*)
12
+ super
13
+ data.add checklist_id: unique_id
14
+
15
+ classname.base = 'spark-checklist-container'
16
+ end
17
+
18
+ def sort_items
19
+ items.sort_by! { |item| item.attribute_completed ? 1 : 0 }
20
+ add_collapse_item_class if @collapse_after
21
+ items
22
+ end
23
+
24
+ private
25
+
26
+ def complete?
27
+ completed_items.length == items.length
28
+ end
29
+
30
+ def completed_items
31
+ @completed_items ||= items.select do |item|
32
+ item.attribute_completed == true
33
+ end
34
+ end
35
+
36
+ def can_collapse?
37
+ @collapse_after && @collapse_after < items.length
38
+ end
39
+
40
+ def add_collapse_item_class
41
+ items.slice(@collapse_after, items.size).each do |item|
42
+ item.classname.add("collapse-item")
43
+ end
44
+ end
45
+
46
+ def button_toggle
47
+ %(collapsed; #{selector(:data, :checklist_id)})
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,9 @@
1
+ div *tag_attrs
2
+ - if @icon
3
+ = render(Spark::Icon, name: @icon, class: "spark-checklist-item-icon #{complete_class}")
4
+ .spark-checklist-item-content class=complete_class
5
+ = @text
6
+ - unless @completed
7
+ .spark-checklist-item-action
8
+ a href="#{@href}" target="#{@target}" = @action_text
9
+
@@ -0,0 +1,24 @@
1
+ module Spark
2
+ class Checklist
3
+ class Item < Spark::Component::Base
4
+ attribute :href, :target, :icon, :action_text, :text, completed: false
5
+
6
+ validates_attr :href, presence: true
7
+ validates_attr :icon, presence: true
8
+ validates_attr :action_text, presence: true
9
+ validates_attr :text, presence: true
10
+ validates_attr :completed, inclusion: [true, false]
11
+
12
+ def initialize(*)
13
+ super
14
+
15
+ classname.base = 'spark-checklist-item'
16
+ tag_attrs.add(rel: 'noopener noreferrer') if @target == "_blank"
17
+ end
18
+
19
+ def complete_class
20
+ 'complete' if @completed
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,6 @@
1
+ div *tag_attrs
2
+ .checklist-trigger-icon-wrapper
3
+ = render(Spark::Icon, name: @icon, class: "checklist-trigger-icon", size: :small)
4
+ .checklist-trigger-content
5
+ .checklist-trigger-title = @title
6
+ .checklist-trigger-subtitle = @subtitle
@@ -0,0 +1,13 @@
1
+ module Spark
2
+ class Checklist
3
+ class Trigger < Spark::Component::Base
4
+ attribute :title, :subtitle, icon: :checklist, role: "button"
5
+
6
+ def initialize(*)
7
+ super
8
+
9
+ classname.base = "checklist-trigger"
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,27 @@
1
+ module Spark
2
+ module Component
3
+ class Base < ActionView::Component::Base
4
+ include Spark::Component
5
+
6
+ def selector(root, sub = nil, val: nil)
7
+ sub = sub.to_s.dasherize if sub
8
+ val ||= case root
9
+ when :data, :aria then
10
+ tag_attrs[root][sub]
11
+ else
12
+ tag_attrs[root]
13
+ end
14
+
15
+ %([#{[root, sub].compact.join('-').dasherize}="#{val}"])
16
+ end
17
+
18
+ def unique_id(prefix = :id)
19
+ "#{prefix}-#{SecureRandom.hex(10)}"
20
+ end
21
+
22
+ def to_s
23
+ self.yield
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,11 @@
1
+ div *tag_attrs
2
+ script src="https://fast.wistia.com/assets/external/E-v1.js"
3
+ div class="wistia_embed wistia_async_#{@video_id} popover=true seo=false popoverContent=link popoverAnimation=none" style="height:100%;width:100%"
4
+ div.wistia-embed-background style="background-image: url('#{@background_image_url}')"
5
+ .wistia-thumbnail-cover
6
+ .wistia-thumbnail-container
7
+ div
8
+ p.title = @title unless @title.blank?
9
+ p.subtitle = @subtitle unless @subtitle.blank?
10
+ .wistia-thumbnail-play
11
+ = render(Spark::Icon, name: 'play', size: :large)