ui_bibz 3.0.0.beta4 → 3.0.0.beta9

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5300f28d5fdd1d204c7adfed1207777aa8f83c67fb32203e6001dfdb2f9a3002
4
- data.tar.gz: a4affc8a269893054ce90c95cba723d1218f7d499b96d622863805508401829d
3
+ metadata.gz: c8d466ecd1eb2df599e88385a30722ff0c1431632835d9b857f1281fa65a588d
4
+ data.tar.gz: 8db65e1c63a6c60460c7514226c29a42eb4b7664a68764356375464ac3532623
5
5
  SHA512:
6
- metadata.gz: d9cb54b958e0d5aa9c2b40f563bc928f849929aca5699e68fed6ad3f0fef3196b55a55e3ab5c016333c1ad0a6c5459de17937073e41110dbeccb750f9741c632
7
- data.tar.gz: 7812ada57679fdac3aea525df95e72fa6b4a3cdde631cfacb2d3a21b646999fac8dae7c16c8d560664c75fb5bda317e35a9415edb7cf614ed39bd52c54846f04
6
+ metadata.gz: 5964c0dfe3a5302d8a5bcb5554da38ee0d7bfc59672b83a72b2ecef238e14c384a627f784c06d237a36a8067f4f63246eb772d367f26259a11af53071949b7f7
7
+ data.tar.gz: dc8f4393860f273950ed96efcdcb5bc57d38c3053636da293d2087323e9a57cafeecbaaaf80c8db32c1682b89b339f544191faed9bc67e459ec38ffb49f29d79
@@ -0,0 +1,13 @@
1
+ name: Dependencies Checker
2
+
3
+ on: pull_request
4
+
5
+ jobs:
6
+ audit:
7
+ runs-on: ubuntu-latest
8
+ steps:
9
+ - uses: actions/checkout@v2
10
+ - name: 'Bundler Audit'
11
+ uses: andrewmcodes/bundler-audit-action@main
12
+ env:
13
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
data/.rubocop.yml CHANGED
@@ -1,4 +1,5 @@
1
1
  require:
2
+ - rubocop-ast
2
3
  - rubocop-performance
3
4
  - rubocop-rails
4
5
  - rubocop-minitest
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ui_bibz (3.0.0.beta4)
4
+ ui_bibz (3.0.0.beta9)
5
5
  will-paginate-i18n
6
6
  will_paginate (~> 3.3.0)
7
7
  will_paginate-bootstrap4
@@ -64,14 +64,14 @@ GEM
64
64
  minitest (~> 5.1)
65
65
  tzinfo (~> 1.1)
66
66
  zeitwerk (~> 2.2, >= 2.2.2)
67
- ast (2.4.1)
67
+ ast (2.4.2)
68
68
  awesome_print (1.8.0)
69
69
  builder (3.2.4)
70
70
  byebug (11.1.3)
71
71
  childprocess (4.0.0)
72
- concurrent-ruby (1.1.7)
72
+ concurrent-ruby (1.1.8)
73
73
  crass (1.0.6)
74
- docile (1.3.4)
74
+ docile (1.3.5)
75
75
  erubi (1.10.0)
76
76
  erubis (2.7.0)
77
77
  factory_bot (4.11.1)
@@ -95,14 +95,14 @@ 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)
102
102
  rails-dom-testing (>= 1, < 3)
103
103
  railties (>= 4.2.0)
104
104
  thor (>= 0.14, < 2.0)
105
- loofah (2.8.0)
105
+ loofah (2.9.0)
106
106
  crass (~> 1.0.2)
107
107
  nokogiri (>= 1.5.9)
108
108
  mail (2.7.1)
@@ -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.0)
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)
@@ -167,9 +167,9 @@ GEM
167
167
  rubocop-ast (>= 1.2.0, < 2.0)
168
168
  ruby-progressbar (~> 1.7)
169
169
  unicode-display_width (>= 1.4.0, < 3.0)
170
- rubocop-ast (1.4.0)
170
+ rubocop-ast (1.4.1)
171
171
  parser (>= 2.7.1.5)
172
- rubocop-minitest (0.10.2)
172
+ rubocop-minitest (0.10.3)
173
173
  rubocop (>= 0.87, < 2.0)
174
174
  rubocop-performance (1.9.2)
175
175
  rubocop (>= 0.90.0, < 2.0)
@@ -179,13 +179,13 @@ GEM
179
179
  rack (>= 1.1)
180
180
  rubocop (>= 0.90.0, < 2.0)
181
181
  ruby-progressbar (1.11.0)
182
- ruby_parser (3.15.0)
182
+ ruby_parser (3.15.1)
183
183
  sexp_processor (~> 4.9)
184
- sexp_processor (4.15.1)
184
+ sexp_processor (4.15.2)
185
185
  simple_form (5.0.3)
186
186
  actionpack (>= 5.0)
187
187
  activemodel (>= 5.0)
188
- simplecov (0.21.1)
188
+ simplecov (0.21.2)
189
189
  docile (~> 1.1)
190
190
  simplecov-html (~> 0.11)
191
191
  simplecov_json_formatter (~> 0.1)
@@ -200,7 +200,7 @@ GEM
200
200
  sprockets (>= 3.0.0)
201
201
  sqlite3 (1.4.2)
202
202
  temple (0.8.2)
203
- thor (1.0.1)
203
+ thor (1.1.0)
204
204
  thread_safe (0.3.6)
205
205
  tilt (2.0.10)
206
206
  tzinfo (1.2.9)
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.beta4'
15
+ VERSION = '3.0.0.beta9'
16
16
  AUTHORS = ['Thooams'].freeze
17
17
  end
@@ -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
@@ -45,19 +45,17 @@ module UiBibz::Ui::Core::Forms::Files
45
45
 
46
46
  # Render html tag
47
47
  def pre_render
48
- content_tag :div, html_options do
49
- concat file_field_tag content, class: 'form-file-input', multiple: options[:multiple], disabled: disabled?
50
- concat label_text_and_button
51
- end
48
+ file_field_tag content, html_options
52
49
  end
53
50
 
54
51
  private
55
52
 
56
- def label_text_and_button
57
- label_tag label_name, class: 'form-file-label' do
58
- concat content_tag(:span, format_value(options[:input_text] || options[:value]), class: 'form-file-text')
59
- concat content_tag(:span, options[:button_text] || 'Browse', class: 'form-file-button')
60
- end
53
+ def component_html_options
54
+ super.merge({
55
+ multiple: options[:multiple],
56
+ disabled: disabled?,
57
+ value: format_value(options[:input_text] || options[:value])
58
+ })
61
59
  end
62
60
 
63
61
  def format_value(value)
@@ -70,12 +68,8 @@ module UiBibz::Ui::Core::Forms::Files
70
68
  value.to_s
71
69
  end
72
70
 
73
- def label_name
74
- html_options[:id] || content
75
- end
76
-
77
71
  def component_html_classes
78
- super << 'form-file'
72
+ super << 'form-control'
79
73
  end
80
74
  end
81
75
  end
@@ -163,7 +163,7 @@ module UiBibz::Ui::Core::Navigations
163
163
  end
164
164
 
165
165
  def navbar_toggle_button_html
166
- content_tag :button, '☰', class: 'navbar-toggler hidden-sm-up', type: :button, data: { "bs-toggle": 'collapse', target: "##{id}" }
166
+ content_tag :button, '☰', class: 'navbar-toggler hidden-sm-up', type: :button, data: { "bs-toggle": 'collapse', "bs-target": "##{id}" }
167
167
  end
168
168
 
169
169
  def expand_size
@@ -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
@@ -202,7 +202,7 @@ test1</textarea></div></form>"
202
202
  f.input :name_fr, as: :ui_file_field
203
203
  end
204
204
 
205
- 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 ui_file_field optional user_name_fr\"><label class=\"control-label ui_file_field optional\" for=\"user_name_fr\">Name fr</label><div class=\"ui_file_field optional form-file\"><input type=\"file\" name=\"user[name_fr]\" id=\"user_name_fr\" class=\"form-file-input\" /><label class=\"form-file-label\" for=\"user_name_fr\"><span class=\"form-file-text\">test1</span><span class=\"form-file-button\">Browse</span></label></div></div></form>"
205
+ 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 ui_file_field optional user_name_fr\"><label class=\"control-label ui_file_field optional\" for=\"user_name_fr\">Name fr</label><input type=\"file\" name=\"user[name_fr]\" id=\"user_name_fr\" value=\"test1\" class=\"ui_file_field optional form-control\" /></div></form>"
206
206
 
207
207
  assert_equal expected, actual
208
208
  end
@@ -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
@@ -5,7 +5,7 @@ require 'test_helper'
5
5
  class FileFieldTest < ActionView::TestCase
6
6
  test 'file_field' do
7
7
  actual = UiBibz::Ui::Core::Forms::Files::FileField.new('test').render
8
- expected = "<div class=\"form-file\"><input type=\"file\" name=\"test\" id=\"test\" class=\"form-file-input\" /><label class=\"form-file-label\" for=\"test\"><span class=\"form-file-text\"></span><span class=\"form-file-button\">Browse</span></label></div>"
8
+ expected = "<input type=\"file\" name=\"test\" id=\"test\" value=\"\" class=\"form-control\" />"
9
9
 
10
10
  assert_equal expected, actual
11
11
  end
@@ -4,14 +4,14 @@ require 'test_helper'
4
4
  class NavbarTest < ActionView::TestCase
5
5
  test 'Navbar' do
6
6
  actual = UiBibz::Ui::Core::Navigations::Navbar.new
7
- expected = "<nav class=\"navbar navbar-light navbar-expand-lg\"><div class=\"container\"><button class=\"navbar-toggler hidden-sm-up\" type=\"button\" data-bs-toggle=\"collapse\" data-target=\"##{actual.id}\">☰</button><div class=\"navbar-collapse collapse\" id=\"#{actual.id}\"></div></div></nav>"
7
+ expected = "<nav class=\"navbar navbar-light navbar-expand-lg\"><div class=\"container\"><button class=\"navbar-toggler hidden-sm-up\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"##{actual.id}\">☰</button><div class=\"navbar-collapse collapse\" id=\"#{actual.id}\"></div></div></nav>"
8
8
 
9
9
  assert_equal expected, actual.render
10
10
  end
11
11
 
12
12
  test 'Navbar with options' do
13
13
  actual = UiBibz::Ui::Core::Navigations::Navbar.new(title: 'Brand', expand_size: :xs, status: :primary, position: :top, brand_position: :right)
14
- expected = "<nav class=\"bg-primary navbar navbar-light fixed-top navbar-expand-xs\"><div class=\"container\"><button class=\"navbar-toggler hidden-sm-up\" type=\"button\" data-bs-toggle=\"collapse\" data-target=\"##{actual.id}\">☰</button><span class=\"navbar-brand\">Brand</span><div class=\"navbar-collapse collapse\" id=\"#{actual.id}\"></div></div></nav>"
14
+ expected = "<nav class=\"bg-primary navbar navbar-light fixed-top navbar-expand-xs\"><div class=\"container\"><button class=\"navbar-toggler hidden-sm-up\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"##{actual.id}\">☰</button><span class=\"navbar-brand\">Brand</span><div class=\"navbar-collapse collapse\" id=\"#{actual.id}\"></div></div></nav>"
15
15
 
16
16
  assert_equal expected, actual.render
17
17
  end
@@ -30,7 +30,7 @@ class NavbarTest < ActionView::TestCase
30
30
  end
31
31
  nb.text 'test'
32
32
  end
33
- expected = "<nav class=\"navbar navbar-light navbar-expand-lg\"><div class=\"container\"><span class=\"navbar-brand\">Brand</span><button class=\"navbar-toggler hidden-sm-up\" type=\"button\" data-bs-toggle=\"collapse\" data-target=\"##{actual.id}\">☰</button><div class=\"navbar-collapse collapse\" id=\"#{actual.id}\"><ul class=\"navbar-nav\"><li class=\"nav-item\"><a href=\"#Home\" class=\"active nav-link\">Home</a></li><li class=\"nav-item\"><a href=\"#profile\" class=\"nav-link\">Profile</a></li><li class=\"nav-item\"><a href=\"#messages\" class=\"nav-link\">Messages</a></li></ul><form type=\"form_tag\" position=\"right\" class=\"d-flex\" action=\"#\" accept-charset=\"UTF-8\" method=\"post\"><button class=\"btn-secondary btn\">Search</button></form><span class=\"navbar-text\">test</span></div></div></nav>"
33
+ expected = "<nav class=\"navbar navbar-light navbar-expand-lg\"><div class=\"container\"><span class=\"navbar-brand\">Brand</span><button class=\"navbar-toggler hidden-sm-up\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"##{actual.id}\">☰</button><div class=\"navbar-collapse collapse\" id=\"#{actual.id}\"><ul class=\"navbar-nav\"><li class=\"nav-item\"><a href=\"#Home\" class=\"active nav-link\">Home</a></li><li class=\"nav-item\"><a href=\"#profile\" class=\"nav-link\">Profile</a></li><li class=\"nav-item\"><a href=\"#messages\" class=\"nav-link\">Messages</a></li></ul><form type=\"form_tag\" position=\"right\" class=\"d-flex\" action=\"#\" accept-charset=\"UTF-8\" method=\"post\"><button class=\"btn-secondary btn\">Search</button></form><span class=\"navbar-text\">test</span></div></div></nav>"
34
34
 
35
35
  assert_equal expected, actual.render
36
36
  end
@@ -43,7 +43,7 @@ class NavbarTest < ActionView::TestCase
43
43
  end
44
44
  end
45
45
  expected =
46
- "<nav class=\"bg-dark navbar navbar-dark navbar-expand-lg\"><div class=\"container\"><span class=\"navbar-brand\"><img src=\"/images/ruby-white\" /></span><button class=\"navbar-toggler hidden-sm-up\" type=\"button\" data-bs-toggle=\"collapse\" data-target=\"##{actual.id}\">☰</button><div class=\"navbar-collapse collapse\" id=\"#{actual.id}\"><ul class=\"navbar-nav\"><li class=\"nav-item\"><a href=\"#link\" class=\"nav-link\">Link</a></li></ul></div></div></nav>"
46
+ "<nav class=\"bg-dark navbar navbar-dark navbar-expand-lg\"><div class=\"container\"><span class=\"navbar-brand\"><img src=\"/images/ruby-white\" /></span><button class=\"navbar-toggler hidden-sm-up\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"##{actual.id}\">☰</button><div class=\"navbar-collapse collapse\" id=\"#{actual.id}\"><ul class=\"navbar-nav\"><li class=\"nav-item\"><a href=\"#link\" class=\"nav-link\">Link</a></li></ul></div></div></nav>"
47
47
 
48
48
  assert_equal expected, actual.render
49
49
  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
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.beta4
4
+ version: 3.0.0.beta9
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-08 00:00:00.000000000 Z
11
+ date: 2021-02-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -249,6 +249,7 @@ extra_rdoc_files: []
249
249
  files:
250
250
  - ".github/FUNDING.yml"
251
251
  - ".github/workflows/ci.yml"
252
+ - ".github/workflows/dependencies-checker.yml"
252
253
  - ".github/workflows/linter.yml"
253
254
  - ".gitignore"
254
255
  - ".gitlab-ci.yml"
@@ -410,9 +411,11 @@ files:
410
411
  - lib/ui_bibz/ui/core/notifications/components/bar.rb
411
412
  - lib/ui_bibz/ui/core/notifications/components/toast_body.rb
412
413
  - lib/ui_bibz/ui/core/notifications/components/toast_header.rb
414
+ - lib/ui_bibz/ui/core/notifications/popover.rb
413
415
  - lib/ui_bibz/ui/core/notifications/progress_bar.rb
414
416
  - lib/ui_bibz/ui/core/notifications/spinner.rb
415
417
  - lib/ui_bibz/ui/core/notifications/toast.rb
418
+ - lib/ui_bibz/ui/core/notifications/tooltip.rb
416
419
  - lib/ui_bibz/ui/core/windows/components/modal_body.rb
417
420
  - lib/ui_bibz/ui/core/windows/components/modal_footer.rb
418
421
  - lib/ui_bibz/ui/core/windows/components/modal_header.rb
@@ -563,9 +566,11 @@ files:
563
566
  - test/ui/core/navigations/toolbar_test.rb
564
567
  - test/ui/core/notifications/alert_test.rb
565
568
  - test/ui/core/notifications/badge_test.rb
569
+ - test/ui/core/notifications/popover_test.rb
566
570
  - test/ui/core/notifications/progress_bar_test.rb
567
571
  - test/ui/core/notifications/spinner_test.rb
568
572
  - test/ui/core/notifications/toast_test.rb
573
+ - test/ui/core/notifications/tooltip_test.rb
569
574
  - test/ui/core/windows/modal_test.rb
570
575
  - test/ui/utils/breakdown_class_name_generator_test.rb
571
576
  - test/ui/ux/containers/panel_test.rb
@@ -773,9 +778,11 @@ test_files:
773
778
  - test/ui/core/navigations/toolbar_test.rb
774
779
  - test/ui/core/notifications/alert_test.rb
775
780
  - test/ui/core/notifications/badge_test.rb
781
+ - test/ui/core/notifications/popover_test.rb
776
782
  - test/ui/core/notifications/progress_bar_test.rb
777
783
  - test/ui/core/notifications/spinner_test.rb
778
784
  - test/ui/core/notifications/toast_test.rb
785
+ - test/ui/core/notifications/tooltip_test.rb
779
786
  - test/ui/core/windows/modal_test.rb
780
787
  - test/ui/utils/breakdown_class_name_generator_test.rb
781
788
  - test/ui/ux/containers/panel_test.rb