ui_bibz 3.0.0.beta6 → 3.0.0.beta11

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: ab074570076dac77f62df00073048e54f4bf3d935a7d3d2c13438000ffdb8506
4
- data.tar.gz: 91005c842ed00077ecc28ea4fadf1a8d766af041e2c59b573a9a5fbf93b57d46
3
+ metadata.gz: 5109c403d8f9d306f2f973b619ef117bd7e3df4bb036358e47744058fc553718
4
+ data.tar.gz: 3e1af30e67ffb1c68ae033110241da17a457aa7e1b0ebc797ca521f8d3d54991
5
5
  SHA512:
6
- metadata.gz: c52c51c4e4075e0ad2bcaa0445aa0201b188e961d96c7a46126626f501115fd11bc1c81877be36456c272e2d427592056a51f98844f39809b4315100dbe1624a
7
- data.tar.gz: 13033afe527ecfb013e00a4772920d41b0ee3880fa795e5ef09c6934f4c51d5fb634240394a243c681091d573ac84ae0691341589cc6a3132881e5018ec9ac0f
6
+ metadata.gz: e0bf93e9f8098b12c510c9aa3280506b893d54c6a05dad6338c4e5198ac23b9d27725403497db8171fbc7eb7e0b40358cdacc4238d1311ad2d0e02b19f6afc2b
7
+ data.tar.gz: dcb82ceeed6c63c19ecf35b95014ccf78f12a702507598a6b29e1ea5665d7767e8d0224630cc2eadf46f1699e7d6917533e391d02cd82b3452bdffabfb417557
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ui_bibz (3.0.0.beta6)
4
+ ui_bibz (3.0.0.beta11)
5
5
  will-paginate-i18n
6
6
  will_paginate (~> 3.3.0)
7
7
  will_paginate-bootstrap4
@@ -95,7 +95,7 @@ GEM
95
95
  haml (>= 4.0, < 6)
96
96
  nokogiri (>= 1.6.0)
97
97
  ruby_parser (~> 3.5)
98
- i18n (1.8.7)
98
+ i18n (1.8.8)
99
99
  concurrent-ruby (~> 1.0)
100
100
  iniparse (1.5.0)
101
101
  jquery-rails (4.4.0)
@@ -114,7 +114,7 @@ GEM
114
114
  mini_mime (1.0.2)
115
115
  mini_portile2 (2.5.0)
116
116
  minitest (5.14.3)
117
- nio4r (2.5.4)
117
+ nio4r (2.5.5)
118
118
  nokogiri (1.11.1)
119
119
  mini_portile2 (~> 2.5.0)
120
120
  racc (~> 1.4)
@@ -158,7 +158,7 @@ GEM
158
158
  rake (13.0.3)
159
159
  regexp_parser (2.0.3)
160
160
  rexml (3.2.4)
161
- rubocop (1.8.1)
161
+ rubocop (1.9.1)
162
162
  parallel (~> 1.10)
163
163
  parser (>= 3.0.0.0)
164
164
  rainbow (>= 2.2.2, < 4.0)
@@ -182,9 +182,9 @@ GEM
182
182
  ruby_parser (3.15.1)
183
183
  sexp_processor (~> 4.9)
184
184
  sexp_processor (4.15.2)
185
- simple_form (5.0.3)
186
- actionpack (>= 5.0)
187
- activemodel (>= 5.0)
185
+ simple_form (5.1.0)
186
+ actionpack (>= 5.2)
187
+ activemodel (>= 5.2)
188
188
  simplecov (0.21.2)
189
189
  docile (~> 1.1)
190
190
  simplecov-html (~> 0.11)
data/lib/ui_bibz.rb CHANGED
@@ -180,9 +180,11 @@ module UiBibz
180
180
  module Notifications
181
181
  autoload :Alert, 'ui_bibz/ui/core/notifications/alert'
182
182
  autoload :Badge, 'ui_bibz/ui/core/notifications/badge'
183
+ autoload :Popover, 'ui_bibz/ui/core/notifications/popover'
183
184
  autoload :ProgressBar, 'ui_bibz/ui/core/notifications/progress_bar'
184
185
  autoload :Spinner, 'ui_bibz/ui/core/notifications/spinner'
185
186
  autoload :Toast, 'ui_bibz/ui/core/notifications/toast'
187
+ autoload :Tooltip, 'ui_bibz/ui/core/notifications/tooltip'
186
188
  end
187
189
 
188
190
  module Windows
data/lib/ui_bibz/infos.rb CHANGED
@@ -7,11 +7,11 @@ module UiBibz
7
7
  DESCRIPTION = "A Rails Interface Framework using Bootstrap #{BOOTSTRAP_VERSION}."
8
8
  SUMMARY = "Ui Bibz is an Ui Framework that allows you to build an interface very quickly and simply using Bootstrap #{BOOTSTRAP_VERSION}."
9
9
  LICENSE = 'MIT'
10
- FONTAWESOME_VERSION = '5.15.1'
10
+ FONTAWESOME_VERSION = '5.15.2'
11
11
  HOMEPAGE = 'https://hummel.link/ui-bibz/'
12
12
  REPO = 'git+https://github.com/thooams/ui_bibz.git'
13
13
  EMAIL = 'thomas@hummel.link'
14
14
  AUTHOR = 'Thooams [Thomas HUMMEL]'
15
- VERSION = '3.0.0.beta6'
15
+ VERSION = '3.0.0.beta11'
16
16
  AUTHORS = ['Thooams'].freeze
17
17
  end
@@ -68,6 +68,7 @@ module UiBibz::Ui::Core::Forms::Choices
68
68
  def checkbox_html_options
69
69
  {
70
70
  disabled: disabled?,
71
+ checked: options[:state] == :active,
71
72
  indeterminate: options[:indeterminate],
72
73
  "data-action": options[:action],
73
74
  class: UiBibz::Utils::Screwdriver.join_classes('form-check-input', input_status)
@@ -116,5 +116,7 @@ module UiBibz::Ui::Core::Forms::Choices
116
116
  def input_id
117
117
  @input_id ||= @options[:id] || generate_id('choice')
118
118
  end
119
+
120
+ def state; end
119
121
  end
120
122
  end
@@ -65,7 +65,8 @@ module UiBibz::Ui::Core::Forms::Choices
65
65
 
66
66
  def checkbox_html_options
67
67
  {
68
- disabled: options[:state] == :disabled,
68
+ disabled: disabled?,
69
+ checked: options[:state] == :active,
69
70
  "data-action": options[:action],
70
71
  class: UiBibz::Utils::Screwdriver.join_classes('form-check-input', input_status)
71
72
  }
@@ -73,12 +73,12 @@ module UiBibz::Ui::Core::Forms::Dropdowns
73
73
  end
74
74
 
75
75
  def button_html
76
- content_tag :button, button_content, class: join_classes('btn', button_status, size)
76
+ content_tag :button, button_content, (options[:html_button] || {}).merge(class: join_classes('btn', button_status, size, options[:html_button].try(:[], :class)))
77
77
  end
78
78
 
79
79
  def split_html
80
- content_tag :button, split_content, class: split_classes, type: 'button',
81
- 'data-bs-toggle' => 'dropdown', 'aria-haspopup' => true, 'aria-expanded' => false
80
+ content_tag :button, split_content, (options[:html_split] || {}).merge(class: split_classes, type: 'button',
81
+ 'data-bs-toggle' => 'dropdown', 'aria-haspopup' => true, 'aria-expanded' => false)
82
82
  end
83
83
 
84
84
  def split_content
@@ -86,7 +86,7 @@ module UiBibz::Ui::Core::Forms::Dropdowns
86
86
  end
87
87
 
88
88
  def split_classes
89
- join_classes('btn', button_status, size, 'dropdown-toggle', 'dropdown-toggle-split')
89
+ join_classes('btn', button_status, size, 'dropdown-toggle', 'dropdown-toggle-split', options[:split_html].try(:[], :class))
90
90
  end
91
91
 
92
92
  def src_only
@@ -0,0 +1,89 @@
1
+ # frozen_string_literal: true
2
+
3
+ module UiBibz::Ui::Core::Notifications
4
+ # Create a popover
5
+ #
6
+ # This element is an extend of UiBibz::Ui::Core::Component.
7
+ #
8
+ # ==== Attributes
9
+ #
10
+ # * +content+ - Content of element
11
+ # * +options+ - Options of element
12
+ # * +html_options+ - Html Options of element
13
+ #
14
+ # ==== Options
15
+ #
16
+ # You can add HTML attributes using the +html_options+.
17
+ # You can pass arguments in options attribute:
18
+ #
19
+ # ==== Signatures
20
+ #
21
+ # UiBibz::Ui::Core::Notifications::Popover.new(content, options = nil, html_options = nil)
22
+ #
23
+ # UiBibz::Ui::Core::Notifications::Popover.new(options = nil, html_options = nil) do
24
+ # content
25
+ # end
26
+ #
27
+ # ==== Examples
28
+ #
29
+ # UiBibz::Ui::Core::Notifications::Popover.new(class: 'my-toast').tap |t|
30
+ # t.header "My header toast", glyph: 'eye', time: 'now'
31
+ # t.body "My body toast"
32
+ # end
33
+ #
34
+ # ==== Helper
35
+ #
36
+ # popover = UiBibz::Ui::Core::Notifications::Popover.new(position: :left) do
37
+ # My content
38
+ # end
39
+ # ui_glyph("diamond", popover: popover)
40
+ #
41
+ # # or
42
+ #
43
+ # ui_glyph("diamond", {popover: true}, { title: "My content" })
44
+ #
45
+ # # or
46
+ #
47
+ # ui_glyph("diamond", popover: { title: "My content", position: :right})
48
+ #
49
+ class Popover < UiBibz::Ui::Core::Component
50
+ # Note that for security reasons the sanitize, sanitizeFn, and allowList
51
+ # options cannot be supplied using data attributes.
52
+ # https://getbootstrap.com/docs/5.0/components/popovers/#options
53
+ DATA_ATTRIBUTES = %i[animation container delay html selector
54
+ template title trigger offset fallbackPlacement
55
+ boundary customClass popperConfig].freeze
56
+
57
+ # See UiBibz::Ui::Core::Component.initialize
58
+ def initialize(content = nil, options = nil, html_options = nil, &block)
59
+ super
60
+ @content = @options[:content] if content.is_a?(Hash) && block.nil?
61
+ end
62
+
63
+ # Render html tag
64
+ def render
65
+ base_attributes.merge(data_attributes)
66
+ end
67
+
68
+ private
69
+
70
+ def base_attributes
71
+ {
72
+ 'data-bs-toggle' => 'popover',
73
+ 'data-bs-content' => @content.html_safe
74
+ }.tap do |h|
75
+ h['data-bs-placement'] = options[:position] || options[:placement] if (options[:position] || options[:placement]).present?
76
+ end
77
+ end
78
+
79
+ def data_attributes
80
+ DATA_ATTRIBUTES.map do |data_attribute|
81
+ options[data_attribute].to_s.blank? ? nil : { "data-bs-#{data_attribute}" => data_attribute_value(data_attribute) }
82
+ end.compact.reduce(&:merge) || {}
83
+ end
84
+
85
+ def data_attribute_value(data_attribute)
86
+ options[data_attribute].is_a?(String) ? options[data_attribute].html_safe : options[data_attribute]
87
+ end
88
+ end
89
+ end
@@ -25,20 +25,20 @@ module UiBibz::Ui::Core::Notifications
25
25
  #
26
26
  # ==== Signatures
27
27
  #
28
- # UiBibz::Ui::Core::Toast.new(content, options = nil, html_options = nil)
28
+ # UiBibz::Ui::Core::Notifications::Toast.new(content, options = nil, html_options = nil)
29
29
  #
30
- # UiBibz::Ui::Core::Toast.new(options = nil, html_options = nil) do
30
+ # UiBibz::Ui::Core::Notifications::Toast.new(options = nil, html_options = nil) do
31
31
  # content
32
32
  # end
33
33
  #
34
34
  # ==== Examples
35
35
  #
36
- # UiBibz::Ui::Core::Toast.new(class: 'my-toast').tap |t|
36
+ # UiBibz::Ui::Core::Notifications::Toast.new(class: 'my-toast').tap |t|
37
37
  # t.header "My header toast", glyph: 'eye', time: 'now'
38
38
  # t.body "My body toast"
39
39
  # end
40
40
  #
41
- # UiBibz::Ui::Core::Toast.new(class: 'my-toast').tap |t|
41
+ # UiBibz::Ui::Core::Notifications::Toast.new(class: 'my-toast').tap |t|
42
42
  # t.header glyph: 'eye', time: 'now' do
43
43
  # My header toast
44
44
  # end
@@ -0,0 +1,89 @@
1
+ # frozen_string_literal: true
2
+
3
+ module UiBibz::Ui::Core::Notifications
4
+ # Create a tooltip
5
+ #
6
+ # This element is an extend of UiBibz::Ui::Core::Component.
7
+ #
8
+ # ==== Attributes
9
+ #
10
+ # * +content+ - Content of element
11
+ # * +options+ - Options of element
12
+ # * +html_options+ - Html Options of element
13
+ #
14
+ # ==== Options
15
+ #
16
+ # You can add HTML attributes using the +html_options+.
17
+ # You can pass arguments in options attribute:
18
+ #
19
+ # ==== Signatures
20
+ #
21
+ # UiBibz::Ui::Core::Notifications::Tooltip.new(content, options = nil, html_options = nil)
22
+ #
23
+ # UiBibz::Ui::Core::Notifications::Tooltip.new(options = nil, html_options = nil) do
24
+ # content
25
+ # end
26
+ #
27
+ # ==== Examples
28
+ #
29
+ # UiBibz::Ui::Core::Notifications::Tooltip.new("My content")
30
+ #
31
+ # # or
32
+ #
33
+ # UiBibz::Ui::Core::Notifications::Tooltip.new(position: :right) do
34
+ # content
35
+ # end
36
+ #
37
+ # ==== Helper
38
+ #
39
+ # tooltip = UiBibz::Ui::Core::Notifications::Tooltip.new("My content", position: :left)
40
+ # ui_glyph("diamond", tooltip: tooltip)
41
+ #
42
+ # # or
43
+ #
44
+ # ui_glyph("diamond", {tooltip: true}, { title: "My content" })
45
+ #
46
+ # # or
47
+ #
48
+ # ui_glyph("diamond", tooltip: { title: "My content", position: :right})
49
+ #
50
+ class Tooltip < UiBibz::Ui::Core::Component
51
+ # Note that for security reasons the sanitize, sanitizeFn, and allowList
52
+ # options cannot be supplied using data attributes.
53
+ # https://getbootstrap.com/docs/5.0/components/tooltips/#options
54
+ DATA_ATTRIBUTES = %i[animation container delay html selector template trigger
55
+ fallbackPlacement boundary].freeze
56
+
57
+ # See UiBibz::Ui::Core::Component.initialize
58
+ def initialize(content = nil, options = nil, html_options = nil, &block)
59
+ super
60
+ @content = @options[:title] if content.is_a?(Hash) && block.nil?
61
+ end
62
+
63
+ # Render html tag
64
+ def render
65
+ base_attributes.merge(data_attributes)
66
+ end
67
+
68
+ private
69
+
70
+ def base_attributes
71
+ {
72
+ 'data-bs-toggle' => 'tooltip',
73
+ 'data-bs-title' => @content.html_safe
74
+ }.tap do |h|
75
+ h['data-bs-placement'] = options[:position] || options[:placement] if (options[:position] || options[:placement]).present?
76
+ end
77
+ end
78
+
79
+ def data_attributes
80
+ DATA_ATTRIBUTES.map do |data_attribute|
81
+ options[data_attribute].to_s.blank? ? nil : { "data-bs-#{data_attribute}" => data_attribute_value(data_attribute) }
82
+ end.compact.reduce(&:merge) || {}
83
+ end
84
+
85
+ def data_attribute_value(data_attribute)
86
+ options[data_attribute].is_a?(String) ? options[data_attribute].html_safe : options[data_attribute]
87
+ end
88
+ end
89
+ end
@@ -1,34 +1,70 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PopoverExtension
4
- TOOLTIP_METHODS = %i[animation container delay html placement selector template title trigger
5
- offset fallback_placement boundary sanitize white_list santitize_fn].freeze
6
-
7
- POPOVER_METHODS = %i[animation container delay html placement selector template title
8
- trigger offset fallback_placement boundary sanitize white_list sanitize_fn].freeze
9
-
4
+ # Add popover to a component
5
+ #
6
+ # By tooltip object
7
+ #
8
+ # popover = UiBibz::Ui::Core::Notifications::Popover.new("My Popover")
9
+ # UiBibz::Ui::Core::Component.new("My content", popover: popover)
10
+ #
11
+ # By Hash
12
+ #
13
+ # UiBibz::Ui::Core::Component.new("My content", popover: { content: "My Popover" })
14
+ #
15
+ # By String
16
+ #
17
+ # UiBibz::Ui::Core::Component.new("My content", popover: "My Popover")
18
+ #
10
19
  def popover_data_html
11
- if options[:popover].present?
12
- add_html_data 'bs-toggle', value: 'popover'
13
- add_html_data 'bs-content', value: (options[:popover].is_a?(String) ? options[:popover] : options[:popover][:content])
14
- end
20
+ return if options[:popover].nil?
15
21
 
16
- return unless options[:popover].is_a?(Hash)
17
-
18
- POPOVER_METHODS.each { |mth| add_html_data(mth, value: options[:popover].try(:[], mth)) unless options[:popover].try(:[], mth).nil? }
19
- add_html_data 'bs-placement', value: options[:popover].try(:[], :position) unless options[:popover].try(:[], :position).nil?
22
+ html_options.update(generate_popover.render)
20
23
  end
21
24
 
25
+ # Add tooltip to a component
26
+ #
27
+ # By tooltip object
28
+ #
29
+ # tooltip = UiBibz::Ui::Core::Notifications::Tooltip.new("My tooltip")
30
+ # UiBibz::Ui::Core::Component.new("My content", tooltip: tooltip)
31
+ #
32
+ # By Boolean
33
+ #
34
+ # UiBibz::Ui::Core::Component.new("My content", tooltip: true)
35
+ # # or
36
+ # UiBibz::Ui::Core::Component.new("My content", {tooltip: true}, { title: 'My tooltip' })
37
+ #
38
+ # By Hash
39
+ #
40
+ # UiBibz::Ui::Core::Component.new("My content", tooltip: { title: 'My tooltip' })
41
+ #
22
42
  def tooltip_data_html
23
43
  return if options[:tooltip].nil?
24
44
 
25
- add_html_data 'bs-toggle', value: 'tooltip'
45
+ html_options.update(generate_tooltip.render)
46
+ end
47
+
48
+ private
49
+
50
+ def generate_tooltip
51
+ case options[:tooltip].class.name
52
+ when 'UiBibz::Ui::Core::Notifications::Tooltip'
53
+ options[:tooltip]
54
+ when 'TrueClass'
55
+ tooltip_content = html_options.delete(:title) || (sanitize_text(content) if options[:text] == false)
56
+ UiBibz::Ui::Core::Notifications::Tooltip.new(tooltip_content)
57
+ else
58
+ UiBibz::Ui::Core::Notifications::Tooltip.new(options[:tooltip])
59
+ end
60
+ end
26
61
 
27
- if options[:tooltip].is_a?(Hash)
28
- TOOLTIP_METHODS.each { |mth| add_html_data(mth, value: options[:tooltip].try(:[], mth)) unless options[:tooltip].try(:[], mth).nil? }
29
- add_html_data 'bs-placement', value: options[:tooltip].try(:[], :position) unless options[:tooltip].try(:[], :position).nil?
62
+ def generate_popover
63
+ case options[:popover].class.name
64
+ when 'UiBibz::Ui::Core::Notifications::Popover'
65
+ options[:popover]
30
66
  else
31
- add_html_data :title, value: options[:tooltip] == true ? sanitize_text(content) : options[:tooltip]
67
+ UiBibz::Ui::Core::Notifications::Popover.new(options[:popover])
32
68
  end
33
69
  end
34
70
  end
@@ -35,7 +35,7 @@ module UiBibz::Ui::Ux::Tables
35
35
 
36
36
  return if default_actions? != true && @actions.raw_list.empty?
37
37
 
38
- UiBibz::Ui::Core::Forms::Dropdowns::Dropdown.new(dropdown_action_name, { position: :right, size: :sm, glyph: actions_glyph }, { class: 'dropdown-action' }).tap do |d|
38
+ UiBibz::Ui::Core::Forms::Dropdowns::Dropdown.new(dropdown_action_name, { size: :sm, glyph: actions_glyph }, { class: 'dropdown-action' }).tap do |d|
39
39
  actions_links(record).each do |l|
40
40
  d.html l.to_s.html_safe
41
41
  end
@@ -42,7 +42,8 @@ module UiBibz::Ui::Ux::Tables
42
42
  # * +size+
43
43
  # (+:sm+)
44
44
  # * +responsive+ - Boolean
45
- # * +reflow+ - Boolean
45
+ # * +breakpoint+
46
+ # (+:sm+, +:md+, +:lg+, +:xl+, +:xxl+)
46
47
  #
47
48
  # ==== Signatures
48
49
  #
@@ -118,7 +119,7 @@ module UiBibz::Ui::Ux::Tables
118
119
 
119
120
  # Render html tag
120
121
  def pre_render
121
- table_html
122
+ options[:responsive] ? content_tag(:div, table_html, class: responsive) : table_html
122
123
  end
123
124
 
124
125
  # Store must be generated by *table_search_pagination* method
@@ -184,7 +185,7 @@ module UiBibz::Ui::Ux::Tables
184
185
  private
185
186
 
186
187
  def component_html_classes
187
- ['table', striped, bordered, hoverable, size, responsive, reflow]
188
+ ['table', striped, bordered, hoverable, size]
188
189
  end
189
190
 
190
191
  def status
@@ -208,11 +209,7 @@ module UiBibz::Ui::Ux::Tables
208
209
  end
209
210
 
210
211
  def responsive
211
- 'table-responsive' unless @options[:responsive].nil?
212
- end
213
-
214
- def reflow
215
- 'table-reflow' unless @options[:reflow].nil?
212
+ ['table-responsive', @options[:breakpoint]].compact.join('-') unless @options[:responsive].nil?
216
213
  end
217
214
  end
218
215
  end
@@ -32,7 +32,8 @@ module UiBibz::Ui::Ux::Tables
32
32
  # * +size+
33
33
  # (+sm+)
34
34
  # * +responsive+ - Boolean
35
- # * +reflow+ - Boolean
35
+ # * +breakpoint+
36
+ # (+:sm+, +:md+, +:lg+, +:xl+, +:xxl+)
36
37
  #
37
38
  #
38
39
  # ==== Signatures
@@ -21,6 +21,16 @@ class SimpleFormTest < ActionView::TestCase
21
21
  @user = @users.first
22
22
  end
23
23
 
24
+ test 'simple form input' do
25
+ actual = simple_form_for @user do |f|
26
+ f.input :name_fr
27
+ end
28
+
29
+ expected = "<form class=\"simple_form edit_user\" id=\"edit_user_1\" action=\"/users/1\" accept-charset=\"UTF-8\" method=\"post\"><input type=\"hidden\" name=\"_method\" value=\"patch\" /><div class=\"form-group string optional user_name_fr\"><label class=\"control-label string optional\" for=\"user_name_fr\">Name fr</label><input class=\"form-control string optional\" type=\"text\" value=\"test1\" name=\"user[name_fr]\" id=\"user_name_fr\" /></div></form>"
30
+
31
+ assert_equal expected, actual
32
+ end
33
+
24
34
  test 'auto complete field input in simple form' do
25
35
  actual = simple_form_for @user do |f|
26
36
  f.input :name_fr, as: :ui_auto_complete_field, collection: @users, label_method: :name_fr
@@ -90,22 +90,22 @@ class ButtonTest < ActionView::TestCase
90
90
  end
91
91
 
92
92
  test 'button with complex popover' do
93
- actual = ui_button('My Button', popover: { content: 'My popover', position: :left })
94
- expected = '<button data-bs-toggle="popover" data-bs-content="My popover" data-bs-placement="left" class="btn-secondary btn">My Button</button>'
93
+ actual = ui_button('My Button', popover: { content: 'My popover', position: :left, html: true })
94
+ expected = "<button data-bs-toggle=\"popover\" data-bs-content=\"My popover\" data-bs-placement=\"left\" data-bs-html=\"true\" class=\"btn-secondary btn\">My Button</button>"
95
95
 
96
96
  assert_equal expected, actual
97
97
  end
98
98
 
99
99
  test 'button with simple tooltip' do
100
100
  actual = ui_button('My Button', { tooltip: 'My Button' }, { title: 'My tooltip' })
101
- expected = '<button title="My tooltip" data-bs-toggle="tooltip" data-title="My Button" class="btn-secondary btn">My Button</button>'
101
+ expected = '<button title="My tooltip" data-bs-toggle="tooltip" data-bs-title="My Button" class="btn-secondary btn">My Button</button>'
102
102
 
103
103
  assert_equal expected, actual
104
104
  end
105
105
 
106
106
  test 'button with complex tooltip' do
107
107
  actual = ui_button('My Button', tooltip: { title: 'My tooltip', position: :left })
108
- expected = '<button data-bs-toggle="tooltip" data-title="My tooltip" data-bs-placement="left" class="btn-secondary btn">My Button</button>'
108
+ expected = '<button data-bs-toggle="tooltip" data-bs-title="My tooltip" data-bs-placement="left" class="btn-secondary btn">My Button</button>'
109
109
 
110
110
  assert_equal expected, actual
111
111
  end
@@ -11,7 +11,7 @@ class ChoiceGroupTest < ActionView::TestCase
11
11
  bc.choice 'Checkbox 2', state: :active
12
12
  end
13
13
 
14
- expected = "<div data-toggle=\"buttons\" class=\"btn-group button-choice btn-group-toggle\"><input type=\"checkbox\" autocomplete=\"off\" class=\"btn-check\" id=\"#{actual.items.first.input_options[:id]}\" /><label class=\"btn-secondary btn\" for=\"#{actual.items.first.input_options[:id]}\">Checkbox 1</label><input type=\"checkbox\" autocomplete=\"off\" class=\"btn-check\" checked=\"checked\" id=\"#{actual.items.last.input_options[:id]}\" /><label class=\"active btn-secondary btn\" aria-pressed=\"true\" for=\"#{actual.items.last.input_options[:id]}\">Checkbox 2</label></div>"
14
+ expected = "<div data-toggle=\"buttons\" class=\"btn-group button-choice btn-group-toggle\"><input type=\"checkbox\" autocomplete=\"off\" class=\"btn-check\" id=\"#{actual.items.first.input_options[:id]}\" /><label class=\"btn-secondary btn\" for=\"#{actual.items.first.input_options[:id]}\">Checkbox 1</label><input type=\"checkbox\" autocomplete=\"off\" class=\"btn-check\" checked=\"checked\" id=\"#{actual.items.last.input_options[:id]}\" /><label class=\"btn-secondary btn\" aria-pressed=\"true\" for=\"#{actual.items.last.input_options[:id]}\">Checkbox 2</label></div>"
15
15
 
16
16
  assert_equal expected, actual.render
17
17
  end
@@ -22,7 +22,7 @@ class ChoiceGroupTest < ActionView::TestCase
22
22
  bc.choice 'Radio 2', state: :active
23
23
  end
24
24
 
25
- expected = "<div data-toggle=\"buttons\" class=\"btn-group button-choice btn-group-toggle\"><input type=\"radio\" autocomplete=\"off\" class=\"btn-check\" name=\"#{actual.items.first.input_options[:name]}\" id=\"#{actual.items.first.input_options[:id]}\" /><label class=\"btn-secondary btn\" for=\"#{actual.items.first.input_options[:id]}\">Radio 1</label><input type=\"radio\" autocomplete=\"off\" class=\"btn-check\" checked=\"checked\" name=\"#{actual.items.last.input_options[:name]}\" id=\"#{actual.items.last.input_options[:id]}\" /><label class=\"active btn-secondary btn\" aria-pressed=\"true\" for=\"#{actual.items.last.input_options[:id]}\">Radio 2</label></div>"
25
+ expected = "<div data-toggle=\"buttons\" class=\"btn-group button-choice btn-group-toggle\"><input type=\"radio\" autocomplete=\"off\" class=\"btn-check\" name=\"#{actual.items.first.input_options[:name]}\" id=\"#{actual.items.first.input_options[:id]}\" /><label class=\"btn-secondary btn\" for=\"#{actual.items.first.input_options[:id]}\">Radio 1</label><input type=\"radio\" autocomplete=\"off\" class=\"btn-check\" checked=\"checked\" name=\"#{actual.items.last.input_options[:name]}\" id=\"#{actual.items.last.input_options[:id]}\" /><label class=\"btn-secondary btn\" aria-pressed=\"true\" for=\"#{actual.items.last.input_options[:id]}\">Radio 2</label></div>"
26
26
 
27
27
  assert_equal expected, actual.render
28
28
  end
@@ -32,7 +32,7 @@ class ChoiceGroupTest < ActionView::TestCase
32
32
  bc.choice 'Radio 1', glyph: 'diamond', status: :primary
33
33
  bc.choice 'Radio 2', state: :active
34
34
  end
35
- expected = "<div data-toggle=\"buttons\" class=\"btn-group btn-group-lg button-choice btn-group-toggle\"><input type=\"radio\" autocomplete=\"off\" class=\"btn-check\" name=\"#{actual.items.first.input_options[:name]}\" id=\"#{actual.items.first.input_options[:id]}\" /><label class=\"btn-outline-primary btn btn-lg\" for=\"#{actual.items.first.input_options[:id]}\"><i class=\"glyph fas fa-diamond\"></i> Radio 1</label><input type=\"radio\" autocomplete=\"off\" class=\"btn-check\" checked=\"checked\" name=\"#{actual.items.last.input_options[:name]}\" id=\"#{actual.items.last.input_options[:id]}\" /><label class=\"active btn-outline-secondary btn btn-lg\" aria-pressed=\"true\" for=\"#{actual.items.last.input_options[:id]}\">Radio 2</label></div>"
35
+ expected = "<div data-toggle=\"buttons\" class=\"btn-group btn-group-lg button-choice btn-group-toggle\"><input type=\"radio\" autocomplete=\"off\" class=\"btn-check\" name=\"#{actual.items.first.input_options[:name]}\" id=\"#{actual.items.first.input_options[:id]}\" /><label class=\"btn-outline-primary btn btn-lg\" for=\"#{actual.items.first.input_options[:id]}\"><i class=\"glyph fas fa-diamond\"></i> Radio 1</label><input type=\"radio\" autocomplete=\"off\" class=\"btn-check\" checked=\"checked\" name=\"#{actual.items.last.input_options[:name]}\" id=\"#{actual.items.last.input_options[:id]}\" /><label class=\"btn-outline-secondary btn btn-lg\" aria-pressed=\"true\" for=\"#{actual.items.last.input_options[:id]}\">Radio 2</label></div>"
36
36
 
37
37
  assert_equal expected, actual.render
38
38
  end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+ class PopoverTest < ActionView::TestCase
5
+ setup do
6
+ @parameters = { animation: true, container: "body", position: :left,
7
+ delay: 10, html: true, selector: false, template: "<b>",
8
+ trigger: "hover focus", fallbackPlacement: %w[top right],
9
+ boundary: 'clippingParents', title: "My title", offset: 2,
10
+ customClass: "test", popperConfig: "Mystring" }
11
+ end
12
+
13
+ test 'popover by hash' do
14
+ actual = UiBibz::Ui::Core::Notifications::Popover.new(@parameters.merge(content: "My Content")).render
15
+ expected = { "data-bs-toggle" => "popover", "data-bs-content" => "My Content", "data-bs-placement" => :left, "data-bs-animation" => true, "data-bs-container" => "body", "data-bs-delay" => 10, "data-bs-html" => true, "data-bs-selector" => false, "data-bs-template" => "<b>", "data-bs-title" => "My title", "data-bs-trigger" => "hover focus", "data-bs-offset" => 2, "data-bs-fallbackPlacement" => %w[top right], "data-bs-boundary" => "clippingParents", "data-bs-customClass" => "test", "data-bs-popperConfig" => "Mystring" }
16
+
17
+ assert_equal expected, actual
18
+ end
19
+
20
+ test 'popover with content and options' do
21
+ actual = UiBibz::Ui::Core::Notifications::Popover.new("My Content", @parameters).render
22
+
23
+ expected = { "data-bs-toggle" => "popover", "data-bs-content" => "My Content", "data-bs-placement" => :left, "data-bs-animation" => true, "data-bs-container" => "body", "data-bs-delay" => 10, "data-bs-html" => true, "data-bs-selector" => false, "data-bs-template" => "<b>", "data-bs-title" => "My title", "data-bs-trigger" => "hover focus", "data-bs-offset" => 2, "data-bs-fallbackPlacement" => %w[top right], "data-bs-boundary" => "clippingParents", "data-bs-customClass" => "test", "data-bs-popperConfig" => "Mystring" }
24
+
25
+ assert_equal expected, actual
26
+ end
27
+
28
+ test 'popover with block and options' do
29
+ actual = UiBibz::Ui::Core::Notifications::Popover.new(@parameters) do
30
+ "My Content"
31
+ end.render
32
+
33
+ expected = { "data-bs-toggle" => "popover", "data-bs-content" => "My Content", "data-bs-placement" => :left, "data-bs-animation" => true, "data-bs-container" => "body", "data-bs-delay" => 10, "data-bs-html" => true, "data-bs-selector" => false, "data-bs-template" => "<b>", "data-bs-title" => "My title", "data-bs-trigger" => "hover focus", "data-bs-offset" => 2, "data-bs-fallbackPlacement" => %w[top right], "data-bs-boundary" => "clippingParents", "data-bs-customClass" => "test", "data-bs-popperConfig" => "Mystring" }
34
+
35
+ assert_equal expected, actual
36
+ end
37
+
38
+ test 'glyph with popover object' do
39
+ popover = UiBibz::Ui::Core::Notifications::Popover.new(@parameters.merge(content: "My Content"))
40
+ actual = UiBibz::Ui::Core::Icons::Glyph.new("diamond", popover: popover).render
41
+ expected = "<i data-bs-toggle=\"popover\" data-bs-content=\"My Content\" data-bs-placement=\"left\" data-bs-animation=\"true\" data-bs-container=\"body\" data-bs-delay=\"10\" data-bs-html=\"true\" data-bs-selector=\"false\" data-bs-template=\"<b>\" data-bs-title=\"My title\" data-bs-trigger=\"hover focus\" data-bs-offset=\"2\" data-bs-fallbackPlacement=\"top right\" data-bs-boundary=\"clippingParents\" data-bs-customClass=\"test\" data-bs-popperConfig=\"Mystring\" class=\"glyph fas fa-diamond\"></i>"
42
+
43
+ assert_equal expected, actual
44
+ end
45
+
46
+ test 'glyph with popover hash' do
47
+ actual = UiBibz::Ui::Core::Icons::Glyph.new("diamond", popover: @parameters.merge(content: "My Content")).render
48
+ expected = "<i data-bs-toggle=\"popover\" data-bs-content=\"My Content\" data-bs-placement=\"left\" data-bs-animation=\"true\" data-bs-container=\"body\" data-bs-delay=\"10\" data-bs-html=\"true\" data-bs-selector=\"false\" data-bs-template=\"<b>\" data-bs-title=\"My title\" data-bs-trigger=\"hover focus\" data-bs-offset=\"2\" data-bs-fallbackPlacement=\"top right\" data-bs-boundary=\"clippingParents\" data-bs-customClass=\"test\" data-bs-popperConfig=\"Mystring\" class=\"glyph fas fa-diamond\"></i>"
49
+
50
+ assert_equal expected, actual
51
+ end
52
+
53
+ test 'glyph with popover String' do
54
+ actual = UiBibz::Ui::Core::Icons::Glyph.new("diamond", popover: "My Content").render
55
+ expected = "<i data-bs-toggle=\"popover\" data-bs-content=\"My Content\" class=\"glyph fas fa-diamond\"></i>"
56
+
57
+ assert_equal expected, actual
58
+ end
59
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+ class TooltipTest < ActionView::TestCase
5
+ setup do
6
+ @parameters = { animation: true, container: "body", position: :left,
7
+ delay: 10, html: true, selector: false, template: "<b>",
8
+ trigger: "hover focus", fallbackPlacement: %w[top right],
9
+ boundary: 'clippingParents' }
10
+ end
11
+
12
+ test 'tooltip by hash' do
13
+ actual = UiBibz::Ui::Core::Notifications::Tooltip.new(@parameters.merge(title: "My Title")).render
14
+ expected = { "data-bs-toggle" => "tooltip", "data-bs-title" => "My Title", "data-bs-placement" => :left, "data-bs-animation" => true, "data-bs-container" => "body", "data-bs-delay" => 10, "data-bs-html" => true, "data-bs-selector" => false, "data-bs-template" => "<b>", "data-bs-trigger" => "hover focus", "data-bs-fallbackPlacement" => %w[top right], "data-bs-boundary" => "clippingParents" }
15
+
16
+ assert_equal expected, actual
17
+ end
18
+
19
+ test 'tooltip with content and options' do
20
+ actual = UiBibz::Ui::Core::Notifications::Tooltip.new("My Title", @parameters).render
21
+
22
+ expected = { "data-bs-toggle" => "tooltip", "data-bs-title" => "My Title", "data-bs-placement" => :left, "data-bs-animation" => true, "data-bs-container" => "body", "data-bs-delay" => 10, "data-bs-html" => true, "data-bs-selector" => false, "data-bs-template" => "<b>", "data-bs-trigger" => "hover focus", "data-bs-fallbackPlacement" => %w[top right], "data-bs-boundary" => "clippingParents" }
23
+
24
+ assert_equal expected, actual
25
+ end
26
+
27
+ test 'tooltip with block and options' do
28
+ actual = UiBibz::Ui::Core::Notifications::Tooltip.new(@parameters) do
29
+ "My Title"
30
+ end.render
31
+
32
+ expected = { "data-bs-toggle" => "tooltip", "data-bs-title" => "My Title", "data-bs-placement" => :left, "data-bs-animation" => true, "data-bs-container" => "body", "data-bs-delay" => 10, "data-bs-html" => true, "data-bs-selector" => false, "data-bs-template" => "<b>", "data-bs-trigger" => "hover focus", "data-bs-fallbackPlacement" => %w[top right], "data-bs-boundary" => "clippingParents" }
33
+
34
+ assert_equal expected, actual
35
+ end
36
+
37
+ test 'glyph with tooltip object' do
38
+ tooltip = UiBibz::Ui::Core::Notifications::Tooltip.new(@parameters.merge(title: "My Title"))
39
+ actual = UiBibz::Ui::Core::Icons::Glyph.new("diamond", tooltip: tooltip).render
40
+ expected = "<i data-bs-toggle=\"tooltip\" data-bs-title=\"My Title\" data-bs-placement=\"left\" data-bs-animation=\"true\" data-bs-container=\"body\" data-bs-delay=\"10\" data-bs-html=\"true\" data-bs-selector=\"false\" data-bs-template=\"<b>\" data-bs-trigger=\"hover focus\" data-bs-fallbackPlacement=\"top right\" data-bs-boundary=\"clippingParents\" class=\"glyph fas fa-diamond\"></i>"
41
+
42
+ assert_equal expected, actual
43
+ end
44
+
45
+ test 'glyph with tooltip hash' do
46
+ actual = UiBibz::Ui::Core::Icons::Glyph.new("diamond", tooltip: @parameters.merge(title: "My Title")).render
47
+ expected = "<i data-bs-toggle=\"tooltip\" data-bs-title=\"My Title\" data-bs-placement=\"left\" data-bs-animation=\"true\" data-bs-container=\"body\" data-bs-delay=\"10\" data-bs-html=\"true\" data-bs-selector=\"false\" data-bs-template=\"<b>\" data-bs-trigger=\"hover focus\" data-bs-fallbackPlacement=\"top right\" data-bs-boundary=\"clippingParents\" class=\"glyph fas fa-diamond\"></i>"
48
+
49
+ assert_equal expected, actual
50
+ end
51
+
52
+ test 'glyph with tooltip boolean' do
53
+ actual = UiBibz::Ui::Core::Icons::Glyph.new("diamond", { tooltip: true }, { title: "My Title" }).render
54
+ expected = "<i data-bs-toggle=\"tooltip\" data-bs-title=\"My Title\" class=\"glyph fas fa-diamond\"></i>"
55
+
56
+ assert_equal expected, actual
57
+ end
58
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+ require 'ui_bibz/ui/ux/tables/components/store'
5
+ require 'ui_bibz/ui/ux/tables/extensions/paginable'
6
+ require 'ui_bibz/ui/ux/tables/extensions/searchable'
7
+ require 'ui_bibz/ui/ux/tables/extensions/sortable'
8
+ require 'ui_bibz/ui/ux/tables/extensions/actionable'
9
+
10
+ class TableCardTest < ActionView::TestCase
11
+ setup do
12
+ create_list(:user, 25)
13
+ params = ActionController::Parameters.new({
14
+ controller: 'users',
15
+ action: 'index',
16
+ sort: 'users.name_fr',
17
+ direction: 'asc',
18
+ search: 'Name fr',
19
+ per_page: 2,
20
+ page: 1,
21
+ only_path: true
22
+ })
23
+ @users = User.table_search_pagination(params, session)
24
+ @store = UiBibz::Ui::Ux::Tables::Store.new @users
25
+ end
26
+
27
+ test 'table card visual options' do
28
+ table_card = UiBibz::Ui::Ux::Tables::TableCard.new(store: @users, table_options: { striped: true, status: :inverse, responsive: true, bordered: true, size: :sm, hoverable: true, breakpoint: :sm }).render
29
+ actual_table_classes = Nokogiri::HTML(table_card).xpath('//table')[0].attributes['class'].value
30
+ div_classes = Nokogiri::HTML(table_card).xpath('//div').css('.table-responsive-sm')[0].attributes['class'].value
31
+ table_classes = 'table-inverse table table-striped table-bordered table-hoverable table-sm'
32
+ actual_div_classes = 'table-responsive-sm'
33
+
34
+ assert_equal table_classes, actual_table_classes
35
+ assert_equal div_classes, actual_div_classes
36
+ end
37
+ end
@@ -195,11 +195,14 @@ class TableTest < ActionView::TestCase
195
195
  end
196
196
 
197
197
  test 'table visual options' do
198
- table = UiBibz::Ui::Ux::Tables::Table.new(store: @users, striped: true, status: :inverse, responsive: true, bordered: true, size: :sm, hoverable: true, reflow: true).render
199
- actual = Nokogiri::HTML(table).xpath('//table')[0].attributes['class'].value
200
- expected = 'table-inverse table table-striped table-bordered table-hoverable table-sm table-responsive table-reflow'
201
-
202
- assert_equal expected, actual
198
+ table = UiBibz::Ui::Ux::Tables::Table.new(store: @users, striped: true, status: :inverse, responsive: true, bordered: true, size: :sm, hoverable: true, breakpoint: :sm).render
199
+ div_classes = Nokogiri::HTML(table).xpath('//div')[0].attributes['class'].value
200
+ actual_table_classes = Nokogiri::HTML(table).xpath('//table')[0].attributes['class'].value
201
+ table_classes = 'table-inverse table table-striped table-bordered table-hoverable table-sm'
202
+ actual_div_classes = 'table-responsive-sm'
203
+
204
+ assert_equal table_classes, actual_table_classes
205
+ assert_equal div_classes, actual_div_classes
203
206
  end
204
207
 
205
208
  test 'table thead visual options' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ui_bibz
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0.beta6
4
+ version: 3.0.0.beta11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thooams [Thomas HUMMEL]
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-01-25 00:00:00.000000000 Z
11
+ date: 2021-02-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -411,9 +411,11 @@ files:
411
411
  - lib/ui_bibz/ui/core/notifications/components/bar.rb
412
412
  - lib/ui_bibz/ui/core/notifications/components/toast_body.rb
413
413
  - lib/ui_bibz/ui/core/notifications/components/toast_header.rb
414
+ - lib/ui_bibz/ui/core/notifications/popover.rb
414
415
  - lib/ui_bibz/ui/core/notifications/progress_bar.rb
415
416
  - lib/ui_bibz/ui/core/notifications/spinner.rb
416
417
  - lib/ui_bibz/ui/core/notifications/toast.rb
418
+ - lib/ui_bibz/ui/core/notifications/tooltip.rb
417
419
  - lib/ui_bibz/ui/core/windows/components/modal_body.rb
418
420
  - lib/ui_bibz/ui/core/windows/components/modal_footer.rb
419
421
  - lib/ui_bibz/ui/core/windows/components/modal_header.rb
@@ -564,12 +566,15 @@ files:
564
566
  - test/ui/core/navigations/toolbar_test.rb
565
567
  - test/ui/core/notifications/alert_test.rb
566
568
  - test/ui/core/notifications/badge_test.rb
569
+ - test/ui/core/notifications/popover_test.rb
567
570
  - test/ui/core/notifications/progress_bar_test.rb
568
571
  - test/ui/core/notifications/spinner_test.rb
569
572
  - test/ui/core/notifications/toast_test.rb
573
+ - test/ui/core/notifications/tooltip_test.rb
570
574
  - test/ui/core/windows/modal_test.rb
571
575
  - test/ui/utils/breakdown_class_name_generator_test.rb
572
576
  - test/ui/ux/containers/panel_test.rb
577
+ - test/ui/ux/tables/table_card_test.rb
573
578
  - test/ui/ux/tables/table_test.rb
574
579
  - test/ui_bibz_test.rb
575
580
  - ui_bibz.gemspec
@@ -774,11 +779,14 @@ test_files:
774
779
  - test/ui/core/navigations/toolbar_test.rb
775
780
  - test/ui/core/notifications/alert_test.rb
776
781
  - test/ui/core/notifications/badge_test.rb
782
+ - test/ui/core/notifications/popover_test.rb
777
783
  - test/ui/core/notifications/progress_bar_test.rb
778
784
  - test/ui/core/notifications/spinner_test.rb
779
785
  - test/ui/core/notifications/toast_test.rb
786
+ - test/ui/core/notifications/tooltip_test.rb
780
787
  - test/ui/core/windows/modal_test.rb
781
788
  - test/ui/utils/breakdown_class_name_generator_test.rb
782
789
  - test/ui/ux/containers/panel_test.rb
790
+ - test/ui/ux/tables/table_card_test.rb
783
791
  - test/ui/ux/tables/table_test.rb
784
792
  - test/ui_bibz_test.rb