card-mod-bootstrap 0.16.0 → 0.18.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: 65c3edd6e18e607b53c39c1a815386fb26af21c2d628dd93dd8b870742610525
4
- data.tar.gz: 503036793a7ba7e553f34682bc522713f9c440fe01a9abde020c0d2889aebb85
3
+ metadata.gz: 78ca197a8d574b5edc4af65d19a6856010a88ab9f3c1e53c5685c5025f02cd80
4
+ data.tar.gz: 618f483444d3af1e8f231ef2d6da8f80490bcbe014a6f476c71102faad993367
5
5
  SHA512:
6
- metadata.gz: b738342bfbb3a06fe1ec7296a0412dbc5882e0281fee6013e016a2cd370010fd66b34243c2ac28cb06f66c3db65198ccf721b2d44d35f5fa94aa7a9182656b02
7
- data.tar.gz: d93b189158a69ebebd467716eea64eda38209f75fe599b42e5e4a2ce94b860afd5d1b8ff30a084d60eb6fae120716f288fda2c6a192b29bd1fbfe78ac5d4d4fd
6
+ metadata.gz: 2806022fa05cab04f58f07cc8e363b6c897fa8657a28778681a08b1519a21a2c87677317adf6cb66c3a85881da6991ea3277231967ac4d9bf28675ba79a155ed
7
+ data.tar.gz: 77ab703b2e9049d72a1dc7580102e6e86d92ce85b79a1d5c06bb3710d6c35dbbef89b8ee2347e1a2e137bca73a89892c3201b5c0ab4bf694f4c992933a9441a9
@@ -13,25 +13,9 @@ $.extend decko,
13
13
  if elem.length == 0
14
14
  return
15
15
  else if elem.length > 1
16
- decko.initSelect2($(single_el)) for single_el in elem
16
+ initSingleSelect2($(single_el)) for single_el in elem
17
17
  else
18
- opts = {
19
- dropdownAutoWidth: "true",
20
- # containerCssClass: ":all:",
21
- width: "auto",
22
- dropdownParent: elem.parent()
23
- }
24
-
25
- elem.attr "id", decko.uniqSelect2Id(elem.attr("id"))
26
-
27
- if elem.hasClass("tags")
28
- opts.tags = "true"
29
- if elem.data("placeholder")
30
- opts.placeholder = elem.data("placeholder")
31
- if elem.data("minimum-results-for-search")?
32
- opts.minimumResultsForSearch = elem.data("minimum-results-for-search")
33
-
34
- elem.select2(opts)
18
+ initSingleSelect2 elem
35
19
 
36
20
  uniqSelect2Id: (id) ->
37
21
  return id unless $("[data-select2-id=" + id + "]").length > 0
@@ -64,3 +48,39 @@ $.fn.extend
64
48
  @select2 "destroy"
65
49
  @removeAttr "data-select2-id"
66
50
  @find("option").removeAttr "data-select2-id"
51
+
52
+
53
+ initSingleSelect2 = (elem) ->
54
+ opts = {
55
+ dropdownAutoWidth: "true",
56
+ # containerCssClass: ":all:",
57
+ width: "auto",
58
+ dropdownParent: elem.parent()
59
+ }
60
+
61
+ elem.attr "id", decko.uniqSelect2Id(elem.attr("id"))
62
+
63
+ if elem.hasClass("tags")
64
+ opts.tags = "true"
65
+ if elem.data("placeholder")
66
+ opts.placeholder = elem.data("placeholder")
67
+ if elem.data("minimum-results-for-search")?
68
+ opts.minimumResultsForSearch = elem.data("minimum-results-for-search")
69
+ if elem.data("options-card")
70
+ opts.ajax =
71
+ delay: 200
72
+ cache: true
73
+ url: decko.path elem.data("options-card")
74
+ processResults: (data) -> results: data
75
+ data: (params) ->
76
+ term: params.term
77
+ format: "json"
78
+ view: elem.data("options-view") || "name_match"
79
+ slot: { items: { view: elem.data("options-item-view") || "select2_option" } }
80
+ opts.templateResult = (data) ->
81
+ if data.html
82
+ $(data.html)
83
+ else
84
+ data.text
85
+
86
+ elem.select2(opts)
@@ -16,3 +16,7 @@
16
16
  .dropdown-menu {
17
17
  z-index: 1005;
18
18
  }
19
+
20
+ .select2-dropdown a {
21
+ text-decoration: none !important;
22
+ }
data/config/admin.yml ADDED
@@ -0,0 +1,5 @@
1
+ cardtypes:
2
+ styling:
3
+ - bootswatch_skin
4
+ views:
5
+ - carousel
@@ -12,7 +12,7 @@ const i=this._directionToOrder(t),n=Ce.findOne(ai,this._element),s=this._getItem
12
12
  // decko_popover.js.coffee
13
13
  (function(){$(window).ready(function(){return $("body").on("show.bs.popover","._card-menu-popover",function(){return $(this).closest(".card-menu._show-on-hover").removeClass("_show-on-hover").addClass("_show-on-hover-disabled")}),$("body").on("hide.bs.popover","._card-menu-popover",function(){return $(this).closest(".card-menu._show-on-hover-disabled").removeClass("_show-on-hover-disabled").addClass("_show-on-hover")})}),decko.slot.ready(function(o){return o.find('[data-tooltip="true"]').tooltip(),o.find('[data-bs-toggle="popover"]').popover({html:!0})})}).call(this);
14
14
  // script_load_select2.js.coffee
15
- (function(){$.fn.select2.defaults.set("theme","bootstrap-5"),decko.slot.ready(function(e){return e.find("select:not(._no-select2):not(._no-select2-init)").each(function(){return decko.initSelect2($(this))})}),decko.slot.destroy(function(e){return e.find("select:not(._no-select2)").each(function(){return $(this).deInitSelect2()})}),$.extend(decko,{initSelect2:function(e){var t,n,i,c,o;if(0!==e.length){if(e.length>1){for(c=[],t=0,n=e.length;t<n;t++)o=e[t],c.push(decko.initSelect2($(o)));return c}return i={dropdownAutoWidth:"true",width:"auto",dropdownParent:e.parent()},e.attr("id",decko.uniqSelect2Id(e.attr("id"))),e.hasClass("tags")&&(i.tags="true"),e.data("placeholder")&&(i.placeholder=e.data("placeholder")),null!=e.data("minimum-results-for-search")&&(i.minimumResultsForSearch=e.data("minimum-results-for-search")),e.select2(i)}},uniqSelect2Id:function(e){return $("[data-select2-id="+e+"]").length>0?decko.uniqSelect2Id(e+"1"):e}}),$(window).ready(function(){return $("body").on("select2:select","._go-to-selected",function(){var e;if(""!==(e=$(this).val()))return window.location=decko.path(escape(e))}),$("body").on("select2:select","._submit-on-select",function(e){return $(e.target).closest("form").submit()})}),$.fn.extend({cloneSelect2:function(e,t){var n,i;return(i=this.is("select")?this:this.find("select")).deInitSelect2(),n=this.clone(e,t),decko.initSelect2(i),n.is("select")?decko.initSelect2(n):decko.initSelect2(n.find("select")),n},deInitSelect2:function(){if(this.attr("data-select2-id"))return this.select2("destroy"),this.removeAttr("data-select2-id"),this.find("option").removeAttr("data-select2-id")}})}).call(this);
15
+ (function(){var t;$.fn.select2.defaults.set("theme","bootstrap-5"),decko.slot.ready(function(t){return t.find("select:not(._no-select2):not(._no-select2-init)").each(function(){return decko.initSelect2($(this))})}),decko.slot.destroy(function(t){return t.find("select:not(._no-select2)").each(function(){return $(this).deInitSelect2()})}),$.extend(decko,{initSelect2:function(e){var n,i,o,c;if(0!==e.length){if(e.length>1){for(o=[],n=0,i=e.length;n<i;n++)c=e[n],o.push(t($(c)));return o}return t(e)}},uniqSelect2Id:function(t){return $("[data-select2-id="+t+"]").length>0?decko.uniqSelect2Id(t+"1"):t}}),$(window).ready(function(){return $("body").on("select2:select","._go-to-selected",function(){var t;if(""!==(t=$(this).val()))return window.location=decko.path(escape(t))}),$("body").on("select2:select","._submit-on-select",function(t){return $(t.target).closest("form").submit()})}),$.fn.extend({cloneSelect2:function(t,e){var n,i;return(i=this.is("select")?this:this.find("select")).deInitSelect2(),n=this.clone(t,e),decko.initSelect2(i),n.is("select")?decko.initSelect2(n):decko.initSelect2(n.find("select")),n},deInitSelect2:function(){if(this.attr("data-select2-id"))return this.select2("destroy"),this.removeAttr("data-select2-id"),this.find("option").removeAttr("data-select2-id")}}),t=function(t){var e;return e={dropdownAutoWidth:"true",width:"auto",dropdownParent:t.parent()},t.attr("id",decko.uniqSelect2Id(t.attr("id"))),t.hasClass("tags")&&(e.tags="true"),t.data("placeholder")&&(e.placeholder=t.data("placeholder")),null!=t.data("minimum-results-for-search")&&(e.minimumResultsForSearch=t.data("minimum-results-for-search")),t.data("options-card")&&(e.ajax={delay:200,cache:!0,url:decko.path(t.data("options-card")),processResults:function(t){return{results:t}},data:function(e){return{term:e.term,format:"json",view:t.data("options-view")||"name_match",slot:{items:{view:t.data("options-item-view")||"select2_option"}}}}},e.templateResult=function(t){return t.html?$(t.html):t.text}),t.select2(e)}}).call(this);
16
16
  // bootstrap-colorpicker.min.js
17
17
  /*!
18
18
  * Bootstrap Colorpicker v2.5.2
@@ -20,7 +20,7 @@ class CustomizableSkin < Cardio::Migration::Transform
20
20
  end
21
21
 
22
22
  def create_or_update
23
- Card.exists?(@skin_name) ? update_skin : create_skin
23
+ Card.exist?(@skin_name) ? update_skin : create_skin
24
24
  end
25
25
 
26
26
  private
@@ -9,7 +9,7 @@ class RemoveCustomizedBootswatchSkins < Cardio::Migration::Transform
9
9
  end
10
10
 
11
11
  def convert_bootswatch_skins
12
- Card.search(type_id: ::Card::CustomizedBootswatchSkinID) do |card|
12
+ Card.search(type: :customized_bootswatch_skin) do |card|
13
13
  update_args = { type_id: Card::BootswatchSkinID, skip: :asset_input_changed }
14
14
  parent = find_parent(card.name)
15
15
  if parent && parent.id != card.id
@@ -33,7 +33,7 @@ class Skin
33
33
  end
34
34
 
35
35
  def create_or_update
36
- Card.exists?(@skin_name) ? update_skin : create_skin
36
+ Card.exist?(@skin_name) ? update_skin : create_skin
37
37
  end
38
38
 
39
39
  def create_skin
@@ -12,7 +12,7 @@ class Card
12
12
  @items = []
13
13
  instance_exec(&block)
14
14
 
15
- @html.div class: "carousel slide", id: id, "data-ride" => "carousel" do
15
+ @html.div class: "carousel slide", id: id, "data-bs-ride" => "true" do
16
16
  indicators
17
17
  items
18
18
  control_prev
@@ -25,7 +25,7 @@ class Card
25
25
  end
26
26
 
27
27
  def items
28
- @html.div class: "carousel-inner", role: "listbox" do
28
+ @html.div class: "carousel-inner" do
29
29
  @items.each_with_index do |item, index|
30
30
  carousel_item item, carousel_item_opts(index)
31
31
  end
@@ -46,31 +46,35 @@ class Card
46
46
  end
47
47
 
48
48
  def control_prev
49
- @html.a class: "carousel-control-prev", href: "##{@id}", role: "button",
50
- "data-slide" => "prev" do
51
- @html.span class: "carousel-control-prev-icon", "aria-hidden" => "true"
52
- @html.span "Previous", class: "sr-only"
53
- end
49
+ control_button :prev, "Previous"
54
50
  end
55
51
 
56
52
  def control_next
57
- @html.a class: "carousel-control-next", href: "##{@id}", role: "button",
58
- "data-slide": "next" do
59
- @html.span class: "carousel-control-next-icon", "aria-hidden" => "true"
60
- @html.span "Next", class: "sr-only"
53
+ control_button :next, "Next"
54
+ end
55
+
56
+ def control_button direction, description
57
+ @html.button class: "carousel-control-#{direction}",
58
+ "data-bs-target": "##{@id}", type: "button" do
59
+ @html.span class: "carousel-control-#{direction}-icon",
60
+ "aria-hidden": "true" do
61
+ ""
62
+ end
63
+ @html.span description, class: "visually-hidden"
61
64
  end
62
65
  end
63
66
 
64
67
  def indicators
65
- @html.ol class: "carousel-indicators" do
68
+ @html.div class: "carousel-indicators" do
66
69
  @items.size.times { |i| indicator i }
67
70
  end
68
71
  end
69
72
 
70
73
  def indicator index
71
- html_opts = { "data-slide-to" => index, "data-bs-target": "##{@id}" }
74
+ html_opts = { "data-bs-slide-to": index, "data-bs-target": "##{@id}",
75
+ type: "button", "aria-label": "Slide #{index + 1}" }
72
76
  add_class html_opts, "active" if index == @active_item_index
73
- @html.li html_opts
77
+ @html.button html_opts
74
78
  end
75
79
  end
76
80
  end
@@ -1,4 +1,4 @@
1
- %span.labeled-badge{ class: klass, title: title }
1
+ %span.labeled-badge{ class: klass, title: title, "data-bs-toggle": "tooltip", "data-bs-placement": "bottom" }
2
2
  %label
3
3
  = label
4
4
  %span.badge{ class: "bg-#{color}" }
@@ -13,6 +13,6 @@ format :html do
13
13
  if count.try(:zero?) && !opts[:zero_ok]
14
14
  opts[:klass] = [opts[:klass], "disabled-o"].compact.join " "
15
15
  end
16
- opts[:color] ||= "secondary"
16
+ opts[:color] ||= "light"
17
17
  end
18
18
  end
@@ -85,6 +85,17 @@ basket[:icons] = {
85
85
  format :html do
86
86
  view :icons, template: :haml
87
87
 
88
+ # Generates an HTML tag for an icon with optional parameters.
89
+ #
90
+ # @param [String] icon_key The key representing the desired icon.
91
+ # @param [Hash] opts The options for the icon tag.
92
+ # @option opts [String] :class Additional CSS classes for the icon tag.
93
+ # @option opts [String] :style Additional inline styles for the icon tag.
94
+ #
95
+ # @return [String] The HTML code for the icon tag.
96
+ #
97
+ # @example
98
+ # icon_tag(:heart, class: 'favorite-icon', style: 'color: red')
88
99
  def icon_tag icon_key, opts={}
89
100
  return "" unless icon_key.present?
90
101
 
@@ -119,6 +130,7 @@ format :html do
119
130
  end
120
131
 
121
132
  def universal_icon_tag library, icon, opts={}
133
+ add_class opts, "notranslate"
122
134
  with_icon_tag_opts(opts) do |tag_opts|
123
135
  send "#{library}_icon_tag", icon, tag_opts
124
136
  end
@@ -40,6 +40,9 @@ format :html do
40
40
  end
41
41
  end
42
42
 
43
+ # Generates HTML markup for a breadcrumb trail.
44
+ # @param items [list]: A list of items representing the breadcrumb trail.
45
+ # @return [String] HTML markup for the breadcrumb trail.
43
46
  def breadcrumb items
44
47
  wrap_with :ol, class: "breadcrumb" do
45
48
  items.map do |item|
@@ -50,7 +50,7 @@ end
50
50
  def item_names _args={}
51
51
  (PRE_VARIABLES_CARD_NAMES + variables_card_names +
52
52
  POST_VARIABLES_CARD_NAMES + stylesheets_card_names).compact.map do |n|
53
- Card.fetch_name(n)
53
+ Codename.name n
54
54
  end.compact
55
55
  end
56
56
 
@@ -81,11 +81,11 @@ def editable_item_cards
81
81
  end
82
82
 
83
83
  def variables_card_names
84
- %i[colors variables].map { |s| Card.fetch_name name, s }
84
+ %i[colors variables].map { |s| [name, s].cardname }
85
85
  end
86
86
 
87
87
  def stylesheets_card_names
88
- [Card.fetch_name(name, :stylesheets)]
88
+ [[name, :stylesheets].cardname]
89
89
  end
90
90
 
91
91
  def content_from_theme field
@@ -63,11 +63,11 @@ def virtual?
63
63
  new?
64
64
  end
65
65
 
66
- def ok_to_create
66
+ def ok_to_create?
67
67
  left.parent? && super
68
68
  end
69
69
 
70
- def ok_to_update
70
+ def ok_to_update?
71
71
  left.parent? && super
72
72
  end
73
73
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: card-mod-bootstrap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.16.0
4
+ version: 0.18.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: 2023-11-18 00:00:00.000000000 Z
13
+ date: 2024-10-31 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: card
@@ -18,70 +18,70 @@ dependencies:
18
18
  requirements:
19
19
  - - '='
20
20
  - !ruby/object:Gem::Version
21
- version: 1.106.0
21
+ version: 1.108.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.106.0
28
+ version: 1.108.0
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: card-mod-edit
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
33
  - - '='
34
34
  - !ruby/object:Gem::Version
35
- version: 0.16.0
35
+ version: 0.18.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.16.0
42
+ version: 0.18.0
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: card-mod-bar_and_box
45
45
  requirement: !ruby/object:Gem::Requirement
46
46
  requirements:
47
47
  - - '='
48
48
  - !ruby/object:Gem::Version
49
- version: 0.16.0
49
+ version: 0.18.0
50
50
  type: :runtime
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
54
  - - '='
55
55
  - !ruby/object:Gem::Version
56
- version: 0.16.0
56
+ version: 0.18.0
57
57
  - !ruby/object:Gem::Dependency
58
58
  name: card-mod-style
59
59
  requirement: !ruby/object:Gem::Requirement
60
60
  requirements:
61
61
  - - '='
62
62
  - !ruby/object:Gem::Version
63
- version: 0.16.0
63
+ version: 0.18.0
64
64
  type: :runtime
65
65
  prerelease: false
66
66
  version_requirements: !ruby/object:Gem::Requirement
67
67
  requirements:
68
68
  - - '='
69
69
  - !ruby/object:Gem::Version
70
- version: 0.16.0
70
+ version: 0.18.0
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: card-mod-script
73
73
  requirement: !ruby/object:Gem::Requirement
74
74
  requirements:
75
75
  - - '='
76
76
  - !ruby/object:Gem::Version
77
- version: 0.16.0
77
+ version: 0.18.0
78
78
  type: :runtime
79
79
  prerelease: false
80
80
  version_requirements: !ruby/object:Gem::Requirement
81
81
  requirements:
82
82
  - - '='
83
83
  - !ruby/object:Gem::Version
84
- version: 0.16.0
84
+ version: 0.18.0
85
85
  description: ''
86
86
  email:
87
87
  - info@decko.org
@@ -102,6 +102,7 @@ files:
102
102
  - assets/style/font_awesome.css
103
103
  - assets/style/manifest.yml
104
104
  - assets/style/material_icons.css
105
+ - config/admin.yml
105
106
  - config/locales/de.yml
106
107
  - config/locales/en.yml
107
108
  - data/files/cerulean_skin_image/image-icon.png
@@ -3935,7 +3936,7 @@ files:
3935
3936
  - vendor/select2/tests/vendor/qunit-1.23.1.js
3936
3937
  homepage: https://decko.org
3937
3938
  licenses:
3938
- - GPL-3.0
3939
+ - GPL-3.0-or-later
3939
3940
  metadata:
3940
3941
  source_code_uri: https://github.com/decko-commons/decko
3941
3942
  homepage_uri: https://decko.org
@@ -3952,14 +3953,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
3952
3953
  requirements:
3953
3954
  - - ">="
3954
3955
  - !ruby/object:Gem::Version
3955
- version: '2.5'
3956
+ version: '3.0'
3956
3957
  required_rubygems_version: !ruby/object:Gem::Requirement
3957
3958
  requirements:
3958
3959
  - - ">="
3959
3960
  - !ruby/object:Gem::Version
3960
3961
  version: '0'
3961
3962
  requirements: []
3962
- rubygems_version: 3.4.10
3963
+ rubygems_version: 3.5.7
3963
3964
  signing_key:
3964
3965
  specification_version: 4
3965
3966
  summary: Bootstrap