card-mod-tabs 0.14.2 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4d2d4b228071c8c41c6c24b19721edbf5646fb7466da6ebf8488f44f0c0d0749
4
- data.tar.gz: 606875c29b94286b3371b746a7699af77f651a21e1bdbd87ca96f3332df28bf3
3
+ metadata.gz: 30774695c9b5e4171245c9f4b855d25e3cd20c39f89a234a2e06742e711d63cb
4
+ data.tar.gz: 9fe40a0aa26794c46de1efcee44e4a92b005143edbd6bea286b1e293b881a12f
5
5
  SHA512:
6
- metadata.gz: 821327b6de74e5fb1b679713a354432e8d289a2e47fbfe12b877cf2430efdf61120321abc55ed367741bbc6ae14295ea29835e581c5f0e66535a8f939202869a
7
- data.tar.gz: 63449a861f19ed117e24bd7960253665f9c8be13863fd0a7d1e3cc7f5ea1d67a52cb891b72b7f1175d815d87e885135f48751ab11bf6a18c3ebffc5d076bfe12
6
+ metadata.gz: 8a1415f9a6febb005505f1cf192640b6a863b21d71f35dd498847245a659aeb2e368b1b13b37ace53722a65a0812723a91aec73c1dd898222a86bd9b509ef622
7
+ data.tar.gz: 54c7453f247d7ed6ea0f01193a4f686f98adf6ae77454e1f26ba337deab9e60fc6cb76a0c4171b67e2dad720685c3f5153dec29bba027103134e9383dace9efb
data/README.md ADDED
File without changes
@@ -0,0 +1,10 @@
1
+ $(window).ready ->
2
+ $('body').on 'show.bs.tab', 'a.load[data-bs-toggle="tab"][data-url]', (e) ->
3
+ tab_id = $(e.target).attr('href')
4
+ url = $(e.target).data('url')
5
+ $(e.target).removeClass('load')
6
+ $.ajax
7
+ url: url
8
+ success: (html) ->
9
+ $(tab_id).append(html)
10
+ decko.contentLoaded($(tab_id), $(this))
@@ -0,0 +1,2 @@
1
+ // tab.js.coffee
2
+ (function(){$(window).ready(function(){return $("body").on("show.bs.tab",'a.load[data-bs-toggle="tab"][data-url]',function(t){var a,r;return a=$(t.target).attr("href"),r=$(t.target).data("url"),$(t.target).removeClass("load"),$.ajax({url:r,success:function(t){return $(a).append(t),decko.contentLoaded($(a),$(this))}})})})}).call(this);
data/lib/card/tab.rb CHANGED
@@ -68,13 +68,13 @@ class Card
68
68
  link_to label, button_attrib.merge(
69
69
  path: "##{tab_id}",
70
70
  role: "tab",
71
- "data-toggle" => "tab",
71
+ "data-bs-toggle" => "tab",
72
72
  "data-tab-name" => name
73
73
  )
74
74
  end
75
75
 
76
76
  def tab_id
77
- @tab_id ||= "#{unique_id}-#{name.to_name.safe_key}"
77
+ @tab_id ||= "tab-#{unique_id}-#{name.to_name.safe_key}"
78
78
  end
79
79
 
80
80
  def active?
@@ -0,0 +1,5 @@
1
+ %span.tab-badge.clearfix{ class: klass }
2
+ %span.badge-label<
3
+ = label
4
+ %span.badge-count.badge.bg-secondary{ class: "bg-#{color}" }<
5
+ = number_with_delimiter count
data/set/abstract/tabs.rb CHANGED
@@ -3,7 +3,7 @@ include_set Abstract::BsBadge
3
3
  format :html do
4
4
  view :tabs, cache: :never do
5
5
  tabs tab_map, default_tab, load: :lazy do
6
- _render! "#{default_tab}_tab"
6
+ _render! tab_map.dig(default_tab, :view)
7
7
  end
8
8
  end
9
9
 
@@ -11,16 +11,6 @@ format :html do
11
11
  @tab_map ||= generate_tab_map
12
12
  end
13
13
 
14
- def generate_tab_map
15
- options = tab_options
16
- tab_list.each_with_object({}) do |codename, hash|
17
- hash[codename] = {
18
- view: "#{codename}_tab",
19
- title: tab_title(codename, options[codename])
20
- }
21
- end
22
- end
23
-
24
14
  def tab_list
25
15
  []
26
16
  end
@@ -29,95 +19,69 @@ format :html do
29
19
  {}
30
20
  end
31
21
 
32
- def one_line_tab?
33
- false
34
- end
35
-
36
22
  def default_tab
37
23
  tab_from_params || tab_map.keys.first
38
24
  end
39
25
 
40
- def tab_from_params
41
- return unless Env.params[:tab]
42
- Env.params[:tab].to_sym
43
- end
44
-
45
- def tab_wrap
46
- bs_layout do
47
- row 12 do
48
- col output(yield), class: "padding-top-10"
49
- end
50
- end
51
- end
52
-
53
- def tab_url tab
54
- path tab: tab
26
+ def tab_badge count, label, opts={}
27
+ haml :tab_badge, badge_haml_opts(count, label, opts)
55
28
  end
56
29
 
57
- def tab_title fieldcode, opts={}
30
+ def tab_title label, opts
58
31
  opts ||= {}
59
- parts = tab_title_parts fieldcode, opts
60
- info = tab_title_info parts[:icon], parts[:count]
61
- wrapped_tab_title parts[:label], info
32
+ label = tab_badge opts[:count], label, opts if opts[:count]
33
+ wrap_with(:div, class: "tab-title") { label }
62
34
  end
63
35
 
64
- def tab_title_info icon, count
65
- if count
66
- tab_count_badge count, icon
67
- else
68
- icon || tab_space
36
+ private
37
+
38
+ def generate_tab_map
39
+ options = tab_options
40
+ tab_list.each_with_object({}) do |tab_key, hash|
41
+ hash[tab_key] = {
42
+ view: (options.dig(tab_key, :view) || "#{tab_key}_tab"),
43
+ title: tab_title_from_map(tab_key, options[tab_key])
44
+ }
69
45
  end
70
46
  end
71
47
 
72
- def tab_space
73
- one_line_tab? ? :nil : "&nbsp;"
48
+ def tab_from_params
49
+ Env.params[:tab]&.to_sym
74
50
  end
75
51
 
76
- def tab_count_badge count, icon_tag
77
- klass = nil
78
- if count.is_a? Card
79
- klass = css_classes count.safe_set_keys
80
- count = count.try(:cached_count) || count.count
81
- end
82
- tab_badge count, icon_tag, klass: klass
52
+ def tab_url tab
53
+ path tab: tab
83
54
  end
84
55
 
85
- def tab_title_parts fieldcode, opts
86
- %i[count icon label].each_with_object({}) do |part, hash|
87
- hash[part] = opts.key?(part) ? opts[part] : send("tab_title_#{part}", fieldcode)
56
+ def tab_title_from_map tab_key, opts
57
+ opts ||= {}
58
+ if Codename.exists? tab_key
59
+ tab_title_from_fieldcode tab_key, opts
60
+ else
61
+ label = opts[:label] || tab_key
62
+ tab_title label, opts
88
63
  end
89
64
  end
90
65
 
91
- def tab_title_count fieldcode
66
+ def tab_title_from_fieldcode fieldcode, opts={}
92
67
  field_card = card.fetch fieldcode, new: {}
93
- field_card if field_card.respond_to? :count
94
- end
95
68
 
96
- def tab_title_icon fieldcode
97
- tab_icon_tag fieldcode
98
- end
69
+ %i[label count klass].each do |part|
70
+ opts[part] = send("tab_title_#{part}", field_card) unless opts.key? part
71
+ end
99
72
 
100
- def tab_title_label fieldcode
101
- fieldcode.cardname.vary :plural
73
+ tab_title opts[:label], opts
102
74
  end
103
75
 
104
- def wrapped_tab_title label, info=nil
105
- wrap_with :div, class: "tab-title text-center #{'one-line-tab' if one_line_tab?}" do
106
- [wrapped_tab_title_info(info),
107
- wrap_with(:span, label, class: "count-label")].compact
108
- end
76
+ def tab_title_klass field_card
77
+ css_classes field_card.safe_set_keys
109
78
  end
110
79
 
111
- def wrapped_tab_title_info info
112
- info ||= tab_space
113
- return unless info
114
-
115
- klass = css_classes "count-number", "clearfix"
116
- wrap_with :span, info, class: klass
80
+ def tab_title_count field_card
81
+ field_card.try(:cached_count) || field_card.try(:count)
117
82
  end
118
83
 
119
- # TODO: handle mapped icon tagging in decko
120
- def tab_icon_tag key
121
- try :mapped_icon_tag, key
84
+ def tab_title_label field_card
85
+ field_card.name.right_name.vary :plural
122
86
  end
123
87
  end
@@ -1,5 +1,5 @@
1
1
  .tabbable.tab-panel{ panel_attr.merge(role: "tabpanel") }
2
- %ul{ class: "nav nav-#{tab_type}", role: "tablist" }
2
+ %ul{ class: "#{classy('nav')} nav-#{tab_type}", role: "tablist" }
3
3
  - tab_objects.each do |tab|
4
4
  = tab.tab_button
5
5
  .tab-content
data/set/all/tabs.rb CHANGED
@@ -16,13 +16,13 @@ format :html do
16
16
  #
17
17
  # @param active_name [String] label of the tab that should be active at the
18
18
  #
19
- # @param [Hash] args options
19
+ # @param args [Hash] options
20
20
  # @option args [String] :tab_type ('tabs') use pills or tabs
21
21
  # @option args [Hash] :panel_attr html args used for the panel div
22
22
  # @option args [Hash] :pane_attr html args used for the pane div
23
23
  # @option args [Hash] :load. `:lazy` for lazy-loading tabs
24
24
  #
25
- # @param [Block] block content of the active tab (for lazy-loading)
25
+ # @param block [Block] content of the active tab (for lazy-loading)
26
26
  # beginning (default is the first)
27
27
  #
28
28
  # @return [HTML] bootstrap tabs element with all content preloaded
@@ -37,4 +37,55 @@ format :html do
37
37
  )
38
38
  haml :tab_panel, args
39
39
  end
40
+
41
+ view :tabs do
42
+ construct_tabs "tabs"
43
+ end
44
+
45
+ def construct_tabs tab_type
46
+ tabs = { active: {}, paths: {} }
47
+ voo.items[:view] ||= :content
48
+ card.each_item_name_with_options(_render_raw) do |name, options|
49
+ construct_tab tabs, name, options
50
+ end
51
+ tabs tabs[:paths], tabs[:active][:name], tab_type: tab_type, load: :lazy do
52
+ tabs[:active][:content]
53
+ end
54
+ end
55
+
56
+ def construct_tab tabs, name, explicit_options
57
+ tab_options = item_view_options explicit_options
58
+ tabs[:paths][name] = {
59
+ title: nest(name, view: :title, title: tab_options[:title]),
60
+ path: nest_path(name, tab_options).html_safe
61
+ }
62
+ return unless tabs[:active].empty?
63
+
64
+ tabs[:active] = { name: name, content: nest(name, tab_options) }
65
+ end
66
+
67
+ # def tab_title title, name
68
+ # return name unless title
69
+ # name.to_name.title title, @context_names
70
+ # end
71
+
72
+ view :pills do
73
+ construct_tabs "pills"
74
+ end
75
+
76
+ view :tabs_static do
77
+ construct_static_tabs "tabs"
78
+ end
79
+
80
+ view :pills_static do
81
+ construct_static_tabs "pills"
82
+ end
83
+
84
+ def construct_static_tabs tab_type
85
+ tabs = {}
86
+ card.item_cards.each do |item|
87
+ tabs[item.name] = nest item, item_view_options(args)
88
+ end
89
+ tabs tabs, nil, tab_type: tab_type
90
+ end
40
91
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: card-mod-tabs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.2
4
+ version: 0.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ethan McCutchen
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2022-01-08 00:00:00.000000000 Z
13
+ date: 2023-01-04 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: card
@@ -18,28 +18,28 @@ dependencies:
18
18
  requirements:
19
19
  - - '='
20
20
  - !ruby/object:Gem::Version
21
- version: 1.104.2
21
+ version: 1.105.0
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
26
  - - '='
27
27
  - !ruby/object:Gem::Version
28
- version: 1.104.2
28
+ version: 1.105.0
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: card-mod-bootstrap
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
33
  - - '='
34
34
  - !ruby/object:Gem::Version
35
- version: 0.14.2
35
+ version: 0.15.0
36
36
  type: :runtime
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
40
  - - '='
41
41
  - !ruby/object:Gem::Version
42
- version: 0.14.2
42
+ version: 0.15.0
43
43
  description: ''
44
44
  email:
45
45
  - info@decko.org
@@ -47,8 +47,12 @@ executables: []
47
47
  extensions: []
48
48
  extra_rdoc_files: []
49
49
  files:
50
+ - README.md
51
+ - assets/script/tab.js.coffee
52
+ - data/files/mod_tabs_script_asset_output/file.js
50
53
  - lib/card/lazy_tab.rb
51
54
  - lib/card/tab.rb
55
+ - set/abstract/tab_badge.haml
52
56
  - set/abstract/tabs.rb
53
57
  - set/all/tabs.rb
54
58
  - set/all/tabs/tab_panel.haml
@@ -62,6 +66,7 @@ metadata:
62
66
  wiki_uri: https://decko.org
63
67
  documentation_url: http://docs.decko.org/
64
68
  card-mod: tabs
69
+ card-mod-group: gem-defaults
65
70
  post_install_message:
66
71
  rdoc_options: []
67
72
  require_paths:
@@ -77,7 +82,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
77
82
  - !ruby/object:Gem::Version
78
83
  version: '0'
79
84
  requirements: []
80
- rubygems_version: 3.2.15
85
+ rubygems_version: 3.3.11
81
86
  signing_key:
82
87
  specification_version: 4
83
88
  summary: tabs