ultimate_turbo_modal 1.4.1 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/Gemfile.lock +1 -1
- data/README.md +7 -0
- data/lib/phlex/deferred_render_with_main_content.rb +2 -2
- data/lib/ultimate_turbo_modal/base.rb +39 -35
- data/lib/ultimate_turbo_modal/configuration.rb +4 -1
- data/lib/ultimate_turbo_modal/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 19886fb7dd818b59f8aad64fa2c917783e690d63797761b63dd2ef4422ef119a
|
4
|
+
data.tar.gz: a1c5449b028638a5b7d39b2ea7707accf037d402fc1361ffc8d075b28181bde4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8395f4d9a00f83fffcdb0293a967867b52a00e74ad3716bab49b5923f8c541e9a953246f3196abc434ddccc0daa3c8868caf78c6d915154b978ead3900628bc2
|
7
|
+
data.tar.gz: 17f6c1e20e67e8447fc41f3cbe708d4a2899acf9fcdfbd8ea753960c8daeb2789c572acbc9ee107b6524472ac2e78c1cb77d4b3b18cafa7911028c9336b801e4
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
## [1.6.0] - 2023-12-25
|
2
|
+
|
3
|
+
- Support for Ruby 3.3
|
4
|
+
|
5
|
+
## [1.5.0] - 2023-11-28
|
6
|
+
|
7
|
+
- Allow whitelisting out-of-modal CSS selectors to not dismiss modal when clicked
|
8
|
+
|
1
9
|
## [1.4.1] - 2023-11-26
|
2
10
|
|
3
11
|
- Make Tailwind transition smoother on pages with multiple z-index
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -26,6 +26,7 @@ It currently ships in a two flavors: Tailwind CSS, and regular, vanilla CSS. It
|
|
26
26
|
- Support for long, scrollable modals
|
27
27
|
- Properly locks the background page when scrolling a long modal
|
28
28
|
- Click outside the modal to dismiss
|
29
|
+
- Option to whitelist CSS selectors that won't dismiss the modal when clicked outside the modal (ie: datepicker)
|
29
30
|
- Keyboard control; ESC to dismiss
|
30
31
|
- Automatic (or not) close button
|
31
32
|
|
@@ -70,6 +71,7 @@ UltimateTurboModal.configure do |config|
|
|
70
71
|
config.header = true
|
71
72
|
config.header_divider = true
|
72
73
|
config.footer_divider = true
|
74
|
+
config.allowed_click_outside_selector = nil
|
73
75
|
end
|
74
76
|
```
|
75
77
|
|
@@ -173,6 +175,11 @@ Whether to display a divider below the header.
|
|
173
175
|
|
174
176
|
Whether to display a divider above the footer. The divider will not appear if no footer was specified.
|
175
177
|
|
178
|
+
### `allowed_click_outside_selector`, default: `nil`
|
179
|
+
|
180
|
+
A string of CSS selectors that can be clicked outside of the modal without dismissing the modal. Useful for elements
|
181
|
+
such as datepickers.
|
182
|
+
|
176
183
|
### Example usage with options
|
177
184
|
|
178
185
|
```erb
|
@@ -2,37 +2,40 @@
|
|
2
2
|
|
3
3
|
class UltimateTurboModal::Base < Phlex::HTML
|
4
4
|
prepend Phlex::DeferredRenderWithMainContent
|
5
|
-
# @param
|
5
|
+
# @param advance [Boolean] Whether to update the browser history when opening and closing the modal
|
6
|
+
# @param allowed_click_outside_selector [String] CSS selectors for elements that are allowed to be clicked outside of the modal without dismissing the modal
|
6
7
|
# @param close_button [Boolean] Whether to show a close button
|
7
|
-
# @param close_button_sr_label [String] Close button label for screen readers
|
8
8
|
# @param close_button_data_action [String] `data-action` attribute for the close button
|
9
|
-
# @param
|
10
|
-
# @param header_divider [Boolean] Whether to show a divider between the header and the main content
|
9
|
+
# @param close_button_sr_label [String] Close button label for screen readers
|
11
10
|
# @param footer_divider [Boolean] Whether to show a divider between the main content and the footer
|
12
|
-
# @param
|
11
|
+
# @param header_divider [Boolean] Whether to show a divider between the header and the main content
|
12
|
+
# @param padding [Boolean] Whether to add padding around the modal content
|
13
13
|
# @param request [ActionDispatch::Request] The current Rails request object
|
14
|
+
# @param title [String] The title of the modal
|
14
15
|
def initialize(
|
15
|
-
|
16
|
+
advance: UltimateTurboModal.configuration.advance,
|
17
|
+
allowed_click_outside_selector: UltimateTurboModal.configuration.allowed_click_outside_selector,
|
16
18
|
close_button: UltimateTurboModal.configuration.close_button,
|
17
|
-
close_button_sr_label: "Close modal",
|
18
19
|
close_button_data_action: "modal#hideModal",
|
19
|
-
|
20
|
+
close_button_sr_label: "Close modal",
|
21
|
+
footer_divider: UltimateTurboModal.configuration.footer_divider,
|
20
22
|
header: UltimateTurboModal.configuration.header,
|
21
23
|
header_divider: UltimateTurboModal.configuration.header_divider,
|
22
|
-
|
23
|
-
|
24
|
+
padding: UltimateTurboModal.configuration.padding,
|
25
|
+
request: nil, title: nil
|
24
26
|
)
|
25
|
-
@padding = padding
|
26
|
-
@close_button = close_button
|
27
|
-
@close_button_sr_label = close_button_sr_label
|
28
|
-
@close_button_data_action = close_button_data_action
|
29
27
|
@advance = !!advance
|
30
28
|
@advance_url = advance if advance.present? && advance.is_a?(String)
|
31
|
-
@
|
29
|
+
@allowed_click_outside_selector = allowed_click_outside_selector
|
30
|
+
@close_button = close_button
|
31
|
+
@close_button_data_action = close_button_data_action
|
32
|
+
@close_button_sr_label = close_button_sr_label
|
33
|
+
@footer_divider = footer_divider
|
32
34
|
@header = header
|
33
35
|
@header_divider = header_divider
|
34
|
-
@
|
36
|
+
@padding = padding
|
35
37
|
@request = request
|
38
|
+
@title = title
|
36
39
|
|
37
40
|
unless self.class.include?(Turbo::FramesHelper)
|
38
41
|
self.class.include Turbo::FramesHelper
|
@@ -67,7 +70,7 @@ class UltimateTurboModal::Base < Phlex::HTML
|
|
67
70
|
|
68
71
|
private
|
69
72
|
|
70
|
-
attr_accessor :request
|
73
|
+
attr_accessor :request, :allowed_click_outside_selector
|
71
74
|
|
72
75
|
def padding? = !!@padding
|
73
76
|
|
@@ -81,7 +84,7 @@ class UltimateTurboModal::Base < Phlex::HTML
|
|
81
84
|
|
82
85
|
def footer? = @footer.present?
|
83
86
|
|
84
|
-
def header_divider? = !!@header_divider && (@title_block || title?)
|
87
|
+
def header_divider? = !!@header_divider && (@title_block.present? || title?)
|
85
88
|
|
86
89
|
def footer_divider? = !!@footer_divider && footer?
|
87
90
|
|
@@ -104,26 +107,26 @@ class UltimateTurboModal::Base < Phlex::HTML
|
|
104
107
|
|
105
108
|
## HTML components
|
106
109
|
|
107
|
-
def modal(&)
|
110
|
+
def modal(&block)
|
108
111
|
outer_divs do
|
109
112
|
div_content do
|
110
113
|
div_header
|
111
|
-
div_main(&)
|
114
|
+
div_main(&block)
|
112
115
|
div_footer if footer?
|
113
116
|
end
|
114
117
|
end
|
115
118
|
end
|
116
119
|
|
117
|
-
def outer_divs(&)
|
120
|
+
def outer_divs(&block)
|
118
121
|
div_dialog do
|
119
122
|
div_overlay
|
120
123
|
div_outer do
|
121
|
-
div_inner(&)
|
124
|
+
div_inner(&block)
|
122
125
|
end
|
123
126
|
end
|
124
127
|
end
|
125
128
|
|
126
|
-
def div_dialog(&)
|
129
|
+
def div_dialog(&block)
|
127
130
|
div(id: "modal-container",
|
128
131
|
class: self.class::DIV_DIALOG_CLASSES,
|
129
132
|
role: "dialog",
|
@@ -135,6 +138,7 @@ class UltimateTurboModal::Base < Phlex::HTML
|
|
135
138
|
controller: "modal",
|
136
139
|
modal_target: "container",
|
137
140
|
modal_advance_url_value: advance_url,
|
141
|
+
modal_allowed_click_outside_selector_value: allowed_click_outside_selector,
|
138
142
|
action: "turbo:submit-end->modal#submitEnd keyup@window->modal#closeWithKeyboard click@window->modal#outsideModalClicked click->modal#outsideModalClicked",
|
139
143
|
transition_enter: "ease-out duration-100",
|
140
144
|
transition_enter_start: "opacity-0",
|
@@ -148,30 +152,30 @@ class UltimateTurboModal::Base < Phlex::HTML
|
|
148
152
|
close_button: close_button?.to_s,
|
149
153
|
header_divider: header_divider?.to_s,
|
150
154
|
footer_divider: footer_divider?.to_s
|
151
|
-
}, &)
|
155
|
+
}, &block)
|
152
156
|
end
|
153
157
|
|
154
158
|
def div_overlay
|
155
159
|
div(id: "modal-overlay", class: self.class::DIV_OVERLAY_CLASSES)
|
156
160
|
end
|
157
161
|
|
158
|
-
def div_outer(&)
|
159
|
-
div(id: "modal-outer", class: self.class::DIV_OUTER_CLASSES, &)
|
162
|
+
def div_outer(&block)
|
163
|
+
div(id: "modal-outer", class: self.class::DIV_OUTER_CLASSES, &block)
|
160
164
|
end
|
161
165
|
|
162
|
-
def div_inner(&)
|
163
|
-
div(id: "modal-inner", class: self.class::DIV_INNER_CLASSES, &)
|
166
|
+
def div_inner(&block)
|
167
|
+
div(id: "modal-inner", class: self.class::DIV_INNER_CLASSES, &block)
|
164
168
|
end
|
165
169
|
|
166
|
-
def div_content(&)
|
167
|
-
div(id: "modal-content", class: self.class::DIV_CONTENT_CLASSES, data: {modal_target: "content"}, &)
|
170
|
+
def div_content(&block)
|
171
|
+
div(id: "modal-content", class: self.class::DIV_CONTENT_CLASSES, data: {modal_target: "content"}, &block)
|
168
172
|
end
|
169
173
|
|
170
|
-
def div_main(&)
|
171
|
-
div(id: "modal-main", class: self.class::DIV_MAIN_CLASSES, &)
|
174
|
+
def div_main(&block)
|
175
|
+
div(id: "modal-main", class: self.class::DIV_MAIN_CLASSES, &block)
|
172
176
|
end
|
173
177
|
|
174
|
-
def div_header(&)
|
178
|
+
def div_header(&block)
|
175
179
|
div(id: "modal-header", class: self.class::DIV_HEADER_CLASSES) do
|
176
180
|
div_title
|
177
181
|
button_close
|
@@ -203,13 +207,13 @@ class UltimateTurboModal::Base < Phlex::HTML
|
|
203
207
|
end
|
204
208
|
end
|
205
209
|
|
206
|
-
def close_button_tag(&)
|
210
|
+
def close_button_tag(&block)
|
207
211
|
button(type: "button",
|
208
212
|
aria: {label: "close"},
|
209
213
|
class: self.class::CLOSE_BUTTON_TAG_CLASSES,
|
210
214
|
data: {
|
211
215
|
action: @close_button_data_action
|
212
|
-
}, &)
|
216
|
+
}, &block)
|
213
217
|
end
|
214
218
|
|
215
219
|
def icon_close
|
@@ -11,10 +11,12 @@ module UltimateTurboModal
|
|
11
11
|
end
|
12
12
|
|
13
13
|
delegate :flavor, :flavor=, :close_button, :close_button=,
|
14
|
-
:advance, :advance=, :padding, :padding=,
|
14
|
+
:advance, :advance=, :padding, :padding=,
|
15
|
+
:allowed_click_outside_selector, :allowed_click_outside_selector=, to: :configuration
|
15
16
|
|
16
17
|
class Configuration
|
17
18
|
attr_reader :flavor, :close_button, :advance, :padding, :header, :header_divider, :footer_divider
|
19
|
+
attr_accessor :allowed_click_outside_selector
|
18
20
|
|
19
21
|
def initialize
|
20
22
|
@flavor = :tailwind
|
@@ -24,6 +26,7 @@ module UltimateTurboModal
|
|
24
26
|
@header = true
|
25
27
|
@header_divider = true
|
26
28
|
@footer_divider = true
|
29
|
+
@allowed_click_outside_selector = []
|
27
30
|
end
|
28
31
|
|
29
32
|
def flavor=(flavor)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ultimate_turbo_modal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Carl Mercier
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-12-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: phlex-rails
|