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.
- checksums.yaml +4 -4
- data/app/assets/javascripts/spark/_icons.js +1 -1
- data/app/assets/javascripts/spark/components/app/sidebar/_fix.js +4 -4
- data/app/assets/javascripts/spark/components/app/sidebar/_toggle.js +1 -1
- data/app/assets/javascripts/spark/components/layout/_auto-grid.js +5 -5
- data/app/assets/javascripts/spark/components/nav/_toggle.js +16 -7
- data/app/assets/javascripts/spark/components/ui/_sticky_panel.js +2 -2
- data/app/assets/javascripts/spark/components/ui/_toast.js +3 -6
- data/app/assets/javascripts/spark/shims/_dataset.js +241 -0
- data/app/assets/javascripts/spark/spark.js +18 -16
- data/app/assets/stylesheets/spark/_index.scss +0 -1
- data/app/assets/stylesheets/spark/components/_index.scss +11 -5
- data/app/assets/stylesheets/spark/components/app/_header.scss +15 -28
- data/app/assets/stylesheets/spark/components/app/_layout.scss +2 -2
- data/app/assets/stylesheets/spark/components/app/_sidebar.scss +19 -47
- data/app/assets/stylesheets/spark/components/app/sidebar/_header.scss +44 -48
- data/app/assets/stylesheets/spark/components/app/sidebar/_toggle.scss +5 -2
- data/app/assets/stylesheets/spark/components/button/_button.scss +48 -53
- data/app/assets/stylesheets/spark/components/button/_button_group.scss +10 -16
- data/app/assets/stylesheets/spark/components/button/_size.scss +17 -8
- data/app/assets/stylesheets/spark/components/icon/_badge.scss +41 -0
- data/app/assets/stylesheets/spark/{_icons.scss → components/icon/_icon.scss} +0 -0
- data/app/assets/stylesheets/spark/components/{form → input}/_switch.scss +20 -20
- data/app/assets/stylesheets/spark/components/layout/_block.scss +44 -0
- data/app/assets/stylesheets/spark/components/layout/_grid.scss +26 -29
- data/app/assets/stylesheets/spark/components/layout/_media_block.scss +76 -0
- data/app/assets/stylesheets/spark/components/layout/_page.scss +54 -0
- data/app/assets/stylesheets/spark/components/{app → messaging}/_banner.scss +3 -3
- data/app/assets/stylesheets/spark/components/messaging/_trial-notice.scss +20 -0
- data/app/assets/stylesheets/spark/components/nav/_item.scss +6 -30
- data/app/assets/stylesheets/spark/components/nav/_sidebar.scss +11 -48
- data/app/assets/stylesheets/spark/components/nav/_tabs.scss +5 -5
- data/app/assets/stylesheets/spark/components/nav/sidebar/_theme-default.scss +59 -0
- data/app/assets/stylesheets/spark/components/nav/sidebar/_theme-primary.scss +69 -0
- data/app/assets/stylesheets/spark/components/nav/tree/_group.scss +1 -6
- data/app/assets/stylesheets/spark/components/ui/_card.scss +57 -0
- data/app/assets/stylesheets/spark/components/ui/_header.scss +55 -55
- data/app/assets/stylesheets/spark/components/ui/_placeholder.scss +8 -22
- data/app/assets/stylesheets/spark/components/ui/_toolbar.scss +1 -27
- data/app/assets/stylesheets/spark/components_old/_dropdown.scss +117 -114
- data/app/assets/stylesheets/spark/components_old/_index.scss +1 -1
- data/app/assets/stylesheets/spark/components_old/header/_index.scss +0 -1
- data/app/assets/stylesheets/spark/components_old/header/_search.scss +2 -0
- data/app/assets/stylesheets/spark/core/_vars.scss +6 -3
- data/app/components/spark/badge.html.slim +4 -0
- data/app/components/spark/badge.rb +15 -0
- data/app/components/spark/banner.html.slim +7 -0
- data/app/components/spark/banner.rb +28 -0
- data/app/components/spark/button.html.slim +9 -0
- data/app/components/spark/button.rb +68 -0
- data/app/components/spark/button/group.html.slim +4 -0
- data/app/components/spark/button/group.rb +22 -0
- data/app/components/spark/card.html.slim +7 -0
- data/app/components/spark/card.rb +13 -0
- data/app/components/spark/checklist.html.slim +14 -0
- data/app/components/spark/checklist.rb +49 -0
- data/app/components/spark/checklist/container.html.slim +14 -0
- data/app/components/spark/checklist/container.rb +51 -0
- data/app/components/spark/checklist/item.html.slim +9 -0
- data/app/components/spark/checklist/item.rb +24 -0
- data/app/components/spark/checklist/trigger.html.slim +6 -0
- data/app/components/spark/checklist/trigger.rb +13 -0
- data/app/components/spark/component/base.rb +27 -0
- data/app/components/spark/embed/wistia_media.html.slim +11 -0
- data/app/components/spark/embed/wistia_media.rb +22 -0
- data/app/components/spark/embed/wistia_media_component.rb +22 -36
- data/app/components/spark/grid.html.slim +4 -0
- data/app/components/spark/grid.rb +31 -0
- data/app/components/spark/grid/column.html.slim +1 -0
- data/app/components/spark/grid/column.rb +34 -0
- data/app/components/spark/icon.html.slim +1 -0
- data/app/components/spark/icon.rb +34 -0
- data/app/components/spark/icon/placeholder.html.slim +20 -0
- data/app/components/spark/icon/placeholder.rb +139 -0
- data/app/components/spark/input/base.html.slim +1 -0
- data/app/components/spark/input/base.rb +17 -0
- data/app/components/spark/input/checkbox.html.slim +2 -0
- data/app/components/spark/input/checkbox.rb +14 -0
- data/app/components/spark/input/label.html.slim +4 -0
- data/app/components/spark/input/label.rb +13 -0
- data/app/components/spark/input/switch.html.slim +5 -0
- data/app/components/spark/input/switch.rb +24 -0
- data/app/components/spark/layout/block.html.slim +13 -0
- data/app/components/spark/layout/block.rb +62 -0
- data/app/components/spark/layout/media_block.html.slim +11 -0
- data/app/components/spark/layout/media_block.rb +29 -0
- data/app/components/spark/layout/page.html.slim +15 -0
- data/app/components/spark/layout/page.rb +37 -0
- data/app/components/spark/nav/group.html.slim +5 -0
- data/app/components/spark/nav/group.rb +31 -0
- data/app/components/spark/nav/item.html.slim +12 -0
- data/app/components/spark/nav/item.rb +36 -0
- data/app/components/spark/nav/sidebar.html.slim +14 -0
- data/app/components/spark/nav/sidebar.rb +60 -0
- data/app/components/spark/nav/tab_panels.html.slim +6 -0
- data/app/components/spark/nav/tab_panels.rb +42 -0
- data/app/components/spark/nav/tabs.html.slim +8 -0
- data/app/components/spark/nav/tabs.rb +36 -0
- data/app/components/spark/nav/toggle.html.slim +9 -0
- data/app/components/spark/nav/toggle.rb +20 -0
- data/app/components/spark/nav/tree.html.slim +9 -0
- data/app/components/spark/nav/tree.rb +53 -0
- data/app/components/spark/nav/tree/group.html.slim +9 -0
- data/app/components/spark/nav/tree/group.rb +26 -0
- data/app/components/spark/sticky_panel.html.slim +2 -0
- data/app/components/spark/sticky_panel.rb +12 -0
- data/app/components/spark/toolbar.html.slim +7 -0
- data/app/components/spark/toolbar.rb +14 -0
- data/app/components/spark/tooltip.html.slim +3 -0
- data/app/components/spark/tooltip.rb +13 -0
- data/app/components/spark/trial_notice.html.slim +3 -0
- data/app/components/spark/trial_notice.rb +35 -0
- data/app/components/spark/widget_card.html.slim +5 -0
- data/app/components/spark/widget_card.rb +12 -0
- data/app/helpers/spark/application_helper.rb +9 -0
- data/lib/fleetio_spark.rb +6 -6
- data/lib/fleetio_spark/version.rb +1 -1
- data/public/code-1.0.0.rc.1.js +2 -0
- data/public/code-1.0.0.rc.1.js.gz +0 -0
- data/public/code-1.0.0.rc.1.js.map +1 -0
- data/public/spark-1.0.0.rc.1.css +1 -0
- data/public/spark-1.0.0.rc.1.css.gz +0 -0
- data/public/spark-1.0.0.rc.1.js +2 -0
- data/public/spark-1.0.0.rc.1.js.gz +0 -0
- data/public/spark-1.0.0.rc.1.js.map +1 -0
- metadata +110 -75
- data/app/assets/stylesheets/spark/components/layout/_base.scss +0 -0
- data/app/assets/stylesheets/spark/components/layout/_header.scss +0 -55
- data/app/assets/stylesheets/spark/components/page/_header.scss +0 -9
- data/app/assets/stylesheets/spark/components/page/_main.scss +0 -62
- data/app/assets/stylesheets/spark/components_old/header/_trial-status.scss +0 -61
- data/app/components/spark/app/banner_component.rb +0 -32
- data/app/components/spark/app/content_component.rb +0 -32
- data/app/components/spark/app/header_component.rb +0 -59
- data/app/components/spark/app/layout_component.rb +0 -92
- data/app/components/spark/app/modal_component.rb +0 -5
- data/app/components/spark/app/sidebar/header_component.rb +0 -39
- data/app/components/spark/app/sidebar_component.rb +0 -20
- data/app/components/spark/button/add_component.rb +0 -9
- data/app/components/spark/button/base_component.rb +0 -39
- data/app/components/spark/button/cancel_component.rb +0 -8
- data/app/components/spark/button/danger_component.rb +0 -8
- data/app/components/spark/button/group_component.rb +0 -24
- data/app/components/spark/button/icon_component.rb +0 -14
- data/app/components/spark/button/primary_component.rb +0 -8
- data/app/components/spark/button/text_component.rb +0 -8
- data/app/components/spark/form/checkbox_component.rb +0 -16
- data/app/components/spark/form/input_component.rb +0 -9
- data/app/components/spark/form/label_component.rb +0 -12
- data/app/components/spark/form/switch_component.rb +0 -32
- data/app/components/spark/layout/base_component.rb +0 -2
- data/app/components/spark/layout/grid/column_component.rb +0 -32
- data/app/components/spark/layout/grid_component.rb +0 -37
- data/app/components/spark/layout/header_component.rb +0 -26
- data/app/components/spark/layout/page_component.rb +0 -31
- data/app/components/spark/nav/breadcrumbs_component.rb +0 -2
- data/app/components/spark/nav/group_component.rb +0 -36
- data/app/components/spark/nav/item_component.rb +0 -44
- data/app/components/spark/nav/pills_component.rb +0 -28
- data/app/components/spark/nav/sidebar_component.rb +0 -59
- data/app/components/spark/nav/tab_panels/panel_component.rb +0 -37
- data/app/components/spark/nav/tab_panels/tab_component.rb +0 -13
- data/app/components/spark/nav/tab_panels_component.rb +0 -28
- data/app/components/spark/nav/tabs_component.rb +0 -59
- data/app/components/spark/nav/toggle_component.rb +0 -28
- data/app/components/spark/nav/tree/group_component.rb +0 -35
- data/app/components/spark/nav/tree_component.rb +0 -56
- data/app/components/spark/page/layout_component.rb +0 -32
- data/app/components/spark/page/main_component.rb +0 -39
- data/app/components/spark/ui/card_component.rb +0 -16
- data/app/components/spark/ui/checklist/container_component.rb +0 -56
- data/app/components/spark/ui/checklist/item_component.rb +0 -37
- data/app/components/spark/ui/checklist_trigger_component.rb +0 -20
- data/app/components/spark/ui/icon/_icon.html.erb +0 -0
- data/app/components/spark/ui/icon_component.rb +0 -30
- data/app/components/spark/ui/placeholder_component.rb +0 -105
- data/app/components/spark/ui/sticky_panel_component.rb +0 -9
- data/app/components/spark/ui/toolbar_component.rb +0 -17
- data/app/components/spark/ui/tooltip_component.rb +0 -13
- data/app/components/spark/ui/widget_card_component.rb +0 -13
- data/lib/fleetio_spark/component.rb +0 -36
- data/public/code-0.2.48.js +0 -2
- data/public/code-0.2.48.js.gz +0 -0
- data/public/code-0.2.48.js.map +0 -1
- data/public/spark-0.2.48.css +0 -1
- data/public/spark-0.2.48.css.gz +0 -0
- data/public/spark-0.2.48.js +0 -2
- data/public/spark-0.2.48.js.gz +0 -0
- 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,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,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,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,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)
|