fleetio_spark 0.2.48 → 1.0.0.rc.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -0,0 +1,13 @@
|
|
1
|
+
div *tag_attrs
|
2
|
+
- if items.present? || @content.present?
|
3
|
+
.spark-layout-block-items
|
4
|
+
- if @content.present?
|
5
|
+
.spark-layout-block-item = @content
|
6
|
+
- items.each do |item|
|
7
|
+
.spark-layout-block-item *item.tag_attrs
|
8
|
+
= item.yield
|
9
|
+
- if actions.present?
|
10
|
+
.spark-layout-block-actions
|
11
|
+
- actions.each do |action|
|
12
|
+
.spark-layout-block-action *action.tag_attrs
|
13
|
+
= action.yield
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module Spark
|
2
|
+
module Layout
|
3
|
+
class Block < Spark::Component::Base
|
4
|
+
GUTTER = %i[small base medium large xl].freeze
|
5
|
+
SPACER_SIZE = %i[base].freeze
|
6
|
+
|
7
|
+
attribute gutter: :small, action_gutter: :small
|
8
|
+
|
9
|
+
validates_attr :gutter, choices: GUTTER
|
10
|
+
validates_attr :action_gutter, choices: GUTTER
|
11
|
+
|
12
|
+
element :item, multiple: true do
|
13
|
+
attribute :expand
|
14
|
+
|
15
|
+
def initialize(*)
|
16
|
+
super
|
17
|
+
|
18
|
+
classname.add("expand") if @expand
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
element :spacer do
|
23
|
+
attribute :size
|
24
|
+
validates_attr :size, choices: SPACER_SIZE
|
25
|
+
|
26
|
+
def initialize(*)
|
27
|
+
super
|
28
|
+
|
29
|
+
# This is an attempt to determine if a spacer should be added to the list of items, or actions.
|
30
|
+
# If no actions have been added yet, add the spacer to the items.
|
31
|
+
if _parent.actions.empty?
|
32
|
+
_parent.items << self
|
33
|
+
else
|
34
|
+
_parent.actions << self
|
35
|
+
end
|
36
|
+
|
37
|
+
classname.add('block-spacer')
|
38
|
+
classname.add("size-#{@size}")
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
element :action, multiple: true do
|
43
|
+
attribute :expand
|
44
|
+
|
45
|
+
def initialize(*)
|
46
|
+
super
|
47
|
+
|
48
|
+
classname.add(:expand) if @expand
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def initialize(*)
|
53
|
+
super
|
54
|
+
|
55
|
+
classname.base = "spark-layout-block"
|
56
|
+
classname.add("gutter-#{@gutter}") if @gutter
|
57
|
+
classname.add("action-gutter-#{@action_gutter}") if @action_gutter
|
58
|
+
tag_attrs.add(role: @role)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
div *tag_attrs
|
2
|
+
.spark-media-block-image *image.tag_attrs
|
3
|
+
= image.yield
|
4
|
+
- if title || body
|
5
|
+
.spark-media-block-content
|
6
|
+
- if title
|
7
|
+
.spark-media-block-title *title.tag_attrs
|
8
|
+
= title.yield
|
9
|
+
- if body
|
10
|
+
.spark-media-block-body *body.tag_attrs
|
11
|
+
= body.yield
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Spark
|
2
|
+
module Layout
|
3
|
+
class MediaBlock < Spark::Component::Base
|
4
|
+
LAYOUT = %i[default reverse]
|
5
|
+
ALIGN = %i[top middle bottom]
|
6
|
+
GUTTER = %i[small base medium large xl].freeze
|
7
|
+
|
8
|
+
attribute :align, :gutter, :expand, layout: :default
|
9
|
+
|
10
|
+
element :image
|
11
|
+
element :title
|
12
|
+
element :body
|
13
|
+
|
14
|
+
validates_attr :layout, choices: LAYOUT
|
15
|
+
validates_attr :align, choices: ALIGN, allow_nil: true
|
16
|
+
validates_attr :gutter, choices: GUTTER, allow_nil: true
|
17
|
+
|
18
|
+
def initialize(*)
|
19
|
+
super
|
20
|
+
|
21
|
+
classname.add("spark-media-block")
|
22
|
+
classname.add("layout-#{@layout}") if @layout
|
23
|
+
classname.add("align-#{@align}") if @align
|
24
|
+
classname.add("gutter-#{@gutter}") if @gutter
|
25
|
+
classname.add("expand") if @expand
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
div *tag_attrs
|
2
|
+
- if headers.present?
|
3
|
+
.spark-page-header
|
4
|
+
- headers.each do |header|
|
5
|
+
div *header.tag_attrs = header.yield
|
6
|
+
.spark-page-wrapper
|
7
|
+
- if sidebar.present?
|
8
|
+
.spark-page-sidebar = sidebar.yield
|
9
|
+
- if main.present?
|
10
|
+
.spark-page-main
|
11
|
+
- if main.headers.present?
|
12
|
+
.spark-page-main-header
|
13
|
+
- main.headers.each do |header|
|
14
|
+
div *header.tag_attrs = header.yield
|
15
|
+
= main.yield
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Spark
|
2
|
+
module Layout
|
3
|
+
class Page < Spark::Component::Base
|
4
|
+
|
5
|
+
element :header, multiple: true do
|
6
|
+
attribute layout: :padded
|
7
|
+
validates_attr :layout, choices: [:padded, :flush]
|
8
|
+
|
9
|
+
def initialize(*)
|
10
|
+
super
|
11
|
+
classname.add("spark-page-header-block")
|
12
|
+
classname.add("layout-#{@layout}")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
element :sidebar
|
17
|
+
element :main do
|
18
|
+
element :header, multiple: true do
|
19
|
+
def initialize(*)
|
20
|
+
super
|
21
|
+
classname.add("spark-page-main-header-block")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def initialize(*)
|
26
|
+
super
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def initialize(*)
|
31
|
+
super
|
32
|
+
|
33
|
+
classname.add("spark-page")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Spark
|
2
|
+
module Nav
|
3
|
+
class Group < Spark::Component::Base
|
4
|
+
attribute role: 'group', item_role: 'menuitem'
|
5
|
+
|
6
|
+
element :item, multiple: true, component: Spark::Nav::Item
|
7
|
+
|
8
|
+
def initialize(*)
|
9
|
+
super
|
10
|
+
|
11
|
+
classname.add("active") if active?
|
12
|
+
end
|
13
|
+
|
14
|
+
def new?
|
15
|
+
items.any?(&:new?)
|
16
|
+
end
|
17
|
+
|
18
|
+
def beta?
|
19
|
+
items.any?(&:beta?)
|
20
|
+
end
|
21
|
+
|
22
|
+
def active_item
|
23
|
+
items.find(&:active?)
|
24
|
+
end
|
25
|
+
|
26
|
+
def active?
|
27
|
+
items.any?(&:active?)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
a *tag_attrs
|
2
|
+
= render(Spark::Icon, name: @icon, size: @icon_size, class: "nav-item-icon") if @icon
|
3
|
+
span.nav-item-content
|
4
|
+
span.nav-item-text = @text || content
|
5
|
+
- if label
|
6
|
+
= render(Spark::Badge, class: "nav-item-status", text: label, outline: true, color: (new? ? :yellow : :teal))
|
7
|
+
/span class="nav-item-label #{label}" = label.upcase
|
8
|
+
- if @detail
|
9
|
+
span.nav-item-detail = @detail
|
10
|
+
- if @badge
|
11
|
+
= render(Spark::Badge, text: @badge)
|
12
|
+
= content if @text
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Spark
|
2
|
+
module Nav
|
3
|
+
class Item < Spark::Component::Base
|
4
|
+
attribute :text, :icon, :detail, :badge, :active, :beta, :new, :href, :role, :id, :tabindex, :target, icon_size: :small
|
5
|
+
|
6
|
+
def initialize(*)
|
7
|
+
super
|
8
|
+
|
9
|
+
@href = @href || "#"
|
10
|
+
tag_attrs.add attr_hash(:href, :target, :tabindex, :role)
|
11
|
+
classname.base = "nav-item"
|
12
|
+
classname.add(:active) if active?
|
13
|
+
end
|
14
|
+
|
15
|
+
def label
|
16
|
+
if new?
|
17
|
+
"new"
|
18
|
+
elsif @beta
|
19
|
+
"beta"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def new?
|
24
|
+
if @new.is_a?(String)
|
25
|
+
30.days.ago <= Time.zone.parse( @new )
|
26
|
+
else
|
27
|
+
@new
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def active?
|
32
|
+
@href != "#" && @active || @view_context && @view_context.current_page?(@href)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
nav *tag_attrs
|
2
|
+
= render(Spark::Nav::Toggle, target: selector(:data, :nav_id), class: classname.join_base(:toggle), text: sidebar_button_text) if @toggle
|
3
|
+
.spark-nav-sidebar-wrapper
|
4
|
+
- unless header.blank?
|
5
|
+
.spark-nav-sidebar-header *header.tag_attrs
|
6
|
+
= header.yield
|
7
|
+
.spark-nav-sidebar-main
|
8
|
+
- groups.each do |group|
|
9
|
+
- if group.attribute(:title)
|
10
|
+
h4.spark-nav-sidebar-title = group.attribute(:title)
|
11
|
+
= group.yield
|
12
|
+
- unless footer.blank?
|
13
|
+
.spark-nav-sidebar-footer *footer.tag_attrs
|
14
|
+
= footer.yield
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Spark
|
2
|
+
module Nav
|
3
|
+
class Sidebar < Spark::Component::Base
|
4
|
+
THEME = %i[default primary]
|
5
|
+
attribute :label, toggle: true
|
6
|
+
attribute theme: :default
|
7
|
+
validates_attr :label, presence: true
|
8
|
+
validates_attr :theme, choices: THEME
|
9
|
+
|
10
|
+
element :header
|
11
|
+
element :footer
|
12
|
+
element :group, component: Spark::Nav::Group, multiple: true do
|
13
|
+
attribute :title
|
14
|
+
end
|
15
|
+
|
16
|
+
element :tree, component: Spark::Nav::Tree, multiple: true do
|
17
|
+
attribute :title
|
18
|
+
|
19
|
+
def initialize(*)
|
20
|
+
super
|
21
|
+
# Add self to items to ensure groups are rendered
|
22
|
+
# in the correct order as items enumerate
|
23
|
+
_parent.groups << self
|
24
|
+
classname.add("spark-nav-group")
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def initialize(*)
|
29
|
+
super
|
30
|
+
|
31
|
+
classname.base = "spark-nav-sidebar"
|
32
|
+
classname.add("theme-#{@theme}")
|
33
|
+
data.add(nav_id: unique_id)
|
34
|
+
|
35
|
+
if root_sidebar?
|
36
|
+
data.add(scroll: true)
|
37
|
+
@label ||= "Main Sidebar"
|
38
|
+
@toggle = false
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def root_sidebar?
|
45
|
+
@id && @id.to_sym == :sidebar
|
46
|
+
end
|
47
|
+
|
48
|
+
# Tries to find the text for the active nav item, otherwise shows sidebar label text
|
49
|
+
def sidebar_button_text
|
50
|
+
# Find any navs which have active items
|
51
|
+
active_nav = groups.find { |group|
|
52
|
+
group.active_item
|
53
|
+
}
|
54
|
+
|
55
|
+
# Use the active item text or the label for the sidebar
|
56
|
+
active_nav&.active_item&.attribute_text || @label
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Spark
|
2
|
+
module Nav
|
3
|
+
class TabPanels < Nav::Tabs
|
4
|
+
element :item, multiple: true, component: Spark::Nav::Item do
|
5
|
+
element :panel
|
6
|
+
|
7
|
+
def initialize(*)
|
8
|
+
super
|
9
|
+
|
10
|
+
tag_attrs.add(role: :tab, id: "tab-#{tab_id}")
|
11
|
+
data.add(anchor: @href, add_class: :active)
|
12
|
+
aria.add(controls: "panel-#{tab_id}", selected: !!@active)
|
13
|
+
|
14
|
+
# Set to active if this is the first tab
|
15
|
+
classname.add(:active) if _parent.items.empty?
|
16
|
+
end
|
17
|
+
|
18
|
+
def tab_id
|
19
|
+
@tab_id ||= unique_id
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
end
|
24
|
+
|
25
|
+
def initialize(*)
|
26
|
+
super
|
27
|
+
@nav_group_attrs.add(role: "tablist")
|
28
|
+
end
|
29
|
+
|
30
|
+
def active_item_text
|
31
|
+
items.first.attribute(:text)
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def item_group(options={}, &block)
|
37
|
+
options.merge!({ role: "tablist" })
|
38
|
+
super(options, &block)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
- unless items.empty?
|
2
|
+
nav *tag_attrs
|
3
|
+
- if @theme == :tabs
|
4
|
+
= render(Spark::Nav::Toggle, target: selector(:data, :nav_id), class: "spark-nav-tabs-toggle", text: active_item_text)
|
5
|
+
div class="nav-#{@theme}-wrapper"
|
6
|
+
ul.spark-nav-group *@nav_group_attrs
|
7
|
+
- items.each do |item|
|
8
|
+
li class="nav-item-wrapper" = item.yield
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Spark
|
2
|
+
module Nav
|
3
|
+
class Tabs < Spark::Component::Base
|
4
|
+
LAYOUT = %i[flush padded]
|
5
|
+
THEME = %i[tabs pills]
|
6
|
+
|
7
|
+
attribute :label, role: "navigation", layout: :flush
|
8
|
+
attribute theme: :tabs
|
9
|
+
|
10
|
+
validates_attr :label, presence: true
|
11
|
+
validates_attr :layout, choices: LAYOUT
|
12
|
+
validates_attr :theme, choices: THEME
|
13
|
+
|
14
|
+
element :item, multiple: true, component: Spark::Nav::Item
|
15
|
+
|
16
|
+
def initialize(*)
|
17
|
+
super
|
18
|
+
|
19
|
+
classname.base = "spark-nav-#{@theme}"
|
20
|
+
classname.add %(layout-#{@layout})
|
21
|
+
data.add nav_id: unique_id
|
22
|
+
@nav_group_attrs = TagAttr.new
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def active_item_text
|
28
|
+
if active_item = items.find(&:active?)
|
29
|
+
active_item.attribute(:text)
|
30
|
+
else
|
31
|
+
"Menu"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|