ultimate_turbo_modal 1.1.1 → 1.1.2
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 +4 -4
- data/CHANGELOG.md +7 -1
- data/Gemfile.lock +1 -1
- data/README.md +36 -5
- data/lib/ultimate_turbo_modal/base.rb +15 -26
- data/lib/ultimate_turbo_modal/configuration.rb +50 -0
- data/lib/ultimate_turbo_modal/version.rb +1 -1
- data/lib/ultimate_turbo_modal.rb +1 -10
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: af46e6d6c899d0fcf8054272b157d5e0f286e183e9c0b15c4e3b883df629d4f4
|
4
|
+
data.tar.gz: 91a99b9b60ea2892b2c030027d073218b4d751dd155a0bb84420bc6e60db628e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ccff10a4c4fee7a554c58632d9850507be533877333b0b8caadf2966fbc5244719f828fdb4507674668129c6bfebee1e7cb3e7a7fae5fc1b8238eae8fb5ea637
|
7
|
+
data.tar.gz: d636a2425ce101e4339cec01573e6a29aea861f36328bf4e6a8cd3513ccfe9a5979b4fa424fa69320a809ff94f80f4e28d3f39bbc7f6f6d6426217191fe9ea4c
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -6,7 +6,7 @@ UTMR aims to be the be-all and end-all of Turbo Modals. I believe it is the best
|
|
6
6
|
|
7
7
|
Under the hood, it uses [Stimulus](https://stimulus.hotwired.dev), [Turbo](https://turbo.hotwired.dev/), [el-transition](https://github.com/mmccall10/el-transition), and optionally [Idiomorph](https://github.com/bigskysoftware/idiomorph).
|
8
8
|
|
9
|
-
It currently ships in a two flavors: Tailwind CSS, and regular, vanilla CSS. It is easy to create your own to suit your needs
|
9
|
+
It currently ships in a two flavors: Tailwind CSS, and regular, vanilla CSS. It is easy to create your own variant to suit your needs. See `lib/ultimate_turbo_modal/flavors/vanilla.rb` for an example code.
|
10
10
|
|
11
11
|
|
12
12
|
|
@@ -34,7 +34,7 @@ It currently ships in a two flavors: Tailwind CSS, and regular, vanilla CSS. It
|
|
34
34
|
|
35
35
|
## Demo
|
36
36
|
|
37
|
-
A demo application can be found at https://github.com/cmer/ultimate_turbo_modal-demo. A video demo can be seen here: [https://youtu.be/
|
37
|
+
A demo application can be found at https://github.com/cmer/ultimate_turbo_modal-demo. A video demo can be seen here: [https://youtu.be/BVRDXLN1I78](https://youtu.be/BVRDXLN1I78).
|
38
38
|
|
39
39
|
|
40
40
|
|
@@ -59,10 +59,15 @@ A demo application can be found at https://github.com/cmer/ultimate_turbo_modal-
|
|
59
59
|
<%= turbo_frame_tag "modal" %>
|
60
60
|
``````
|
61
61
|
|
62
|
-
4. Set your desired flavor at `app/config/initializers/
|
62
|
+
4. Set your desired flavor and default configuration at `app/config/initializers/ultimate_turbo_modal.rb`.
|
63
63
|
|
64
64
|
```ruby
|
65
|
-
UltimateTurboModal.
|
65
|
+
UltimateTurboModal.configure do |config|
|
66
|
+
config.flavor = :tailwind
|
67
|
+
config.padding = true
|
68
|
+
config.advance = true
|
69
|
+
config.close_button = true
|
70
|
+
end
|
66
71
|
```
|
67
72
|
|
68
73
|
5. Register the Stimulus controller in `app/javascript/controllers/index.js` adding the following lines at the end.
|
@@ -72,7 +77,33 @@ import setupUltimateTurboModal from "ultimate_turbo_modal";
|
|
72
77
|
setupUltimateTurboModal(application);
|
73
78
|
```
|
74
79
|
|
75
|
-
6.
|
80
|
+
6. If using the Tailwind flavor, add the following to `tailwind.config.js`:
|
81
|
+
|
82
|
+
```
|
83
|
+
// For npm/yarn
|
84
|
+
const { getUltimateTurboModalPath } = require('ultimate_turbo_modal/gemPath');
|
85
|
+
|
86
|
+
// If using Importmaps, use the following instead:
|
87
|
+
// const { execSync } = require('child_process');
|
88
|
+
//
|
89
|
+
// function getUltimateTurboModalPath() {
|
90
|
+
// const path = execSync('bundle show ultimate_turbo_modal').toString().trim();
|
91
|
+
// return `${path}/**/*.{erb,html,rb}`;
|
92
|
+
//}
|
93
|
+
```
|
94
|
+
|
95
|
+
and then in the `content` section, add `getUltimateTurboModalPath()` as follow:
|
96
|
+
|
97
|
+
```
|
98
|
+
content: [
|
99
|
+
'./public/*.html',
|
100
|
+
'./app/helpers/**/*.rb',
|
101
|
+
'./app/javascript/**/*.js',
|
102
|
+
'./app/views/**/*.{erb,haml,html,slim,rb}',
|
103
|
+
getUltimateTurboModalPath()
|
104
|
+
```
|
105
|
+
|
106
|
+
7. Optionally (but recommended), configure UTMR to use Idiomorph. See below for details.
|
76
107
|
|
77
108
|
|
78
109
|
|
@@ -1,29 +1,28 @@
|
|
1
1
|
class UltimateTurboModal::Base < Phlex::HTML
|
2
|
-
INCLUDES = %w[
|
3
|
-
Turbo::FramesHelper
|
4
|
-
Turbo::StreamsHelper
|
5
|
-
Phlex::Rails::Helpers::ContentTag
|
6
|
-
Phlex::Rails::Helpers::Routes
|
7
|
-
Phlex::Rails::Helpers::Tag
|
8
|
-
].freeze
|
9
|
-
|
10
2
|
# @param padding [Boolean] Whether to add padding around the modal content
|
11
3
|
# @param close_button [Boolean] Whether to show a close button.
|
12
4
|
# @param advance [Boolean] Whether to update the browser history when opening and closing the modal
|
13
5
|
# @param advance_url [String] Override the URL to use when advancing the history
|
14
6
|
# @param request [ActionDispatch::Request] The current Rails request object
|
15
|
-
def initialize(
|
7
|
+
def initialize(
|
8
|
+
padding: UltimateTurboModal.configuration.padding,
|
9
|
+
close_button: UltimateTurboModal.configuration.close_button,
|
10
|
+
advance: UltimateTurboModal.configuration.advance,
|
11
|
+
request: nil
|
12
|
+
)
|
16
13
|
@padding = padding
|
17
14
|
@close_button = close_button
|
18
|
-
@advance = advance
|
19
|
-
@advance_url = advance if advance && advance.is_a?(String)
|
15
|
+
@advance = !!advance
|
16
|
+
@advance_url = advance if advance.present? && advance.is_a?(String)
|
20
17
|
@request = request
|
21
18
|
|
22
|
-
self.class.include
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
19
|
+
unless self.class.include?(Turbo::FramesHelper)
|
20
|
+
self.class.include Turbo::FramesHelper
|
21
|
+
self.class.include Turbo::StreamsHelper
|
22
|
+
self.class.include Phlex::Rails::Helpers::ContentTag
|
23
|
+
self.class.include Phlex::Rails::Helpers::Routes
|
24
|
+
self.class.include Phlex::Rails::Helpers::Tag
|
25
|
+
end
|
27
26
|
end
|
28
27
|
|
29
28
|
def template(&)
|
@@ -71,16 +70,6 @@ class UltimateTurboModal::Base < Phlex::HTML
|
|
71
70
|
@advance_url || request.original_url
|
72
71
|
end
|
73
72
|
|
74
|
-
def method_missing(method, *, &block)
|
75
|
-
INCLUDES.each { |mod| include_if_defined(mod) }
|
76
|
-
|
77
|
-
if self.class.method_defined?(method)
|
78
|
-
send(method, *, &block)
|
79
|
-
else
|
80
|
-
super
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
73
|
def include_if_defined(mod_str)
|
85
74
|
if defined?(mod.constantize) && !self.class.included_modules.include?(mod.constantize)
|
86
75
|
self.class.include mod.constantize
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module UltimateTurboModal
|
2
|
+
class << self
|
3
|
+
attr_accessor :configuration
|
4
|
+
end
|
5
|
+
|
6
|
+
def self.configure
|
7
|
+
self.configuration ||= Configuration.new
|
8
|
+
yield(configuration) if block_given?
|
9
|
+
end
|
10
|
+
|
11
|
+
delegate :flavor, :flavor=, :close_button, :close_button=,
|
12
|
+
:advance, :advance=, :padding, :padding=, to: :configuration
|
13
|
+
|
14
|
+
class Configuration
|
15
|
+
attr_reader :flavor, :close_button, :advance, :padding
|
16
|
+
|
17
|
+
def initialize
|
18
|
+
@flavor = :tailwind
|
19
|
+
@close_button = true
|
20
|
+
@advance = true
|
21
|
+
@padding = true
|
22
|
+
end
|
23
|
+
|
24
|
+
def flavor=(flavor)
|
25
|
+
raise ArgumentError.new("Flavor must be a symbol.") unless flavor.is_a?(Symbol) || flavor.is_a?(String)
|
26
|
+
@flavor = flavor.to_sym
|
27
|
+
end
|
28
|
+
|
29
|
+
def close_button=(close_button)
|
30
|
+
raise ArgumentError.new("Close button must be a boolean.") unless [true, false].include?(close_button)
|
31
|
+
@close_button = close_button
|
32
|
+
end
|
33
|
+
|
34
|
+
def advance=(advance)
|
35
|
+
raise ArgumentError.new("Advance must be a boolean.") unless [true, false].include?(advance)
|
36
|
+
@advance = advance
|
37
|
+
end
|
38
|
+
|
39
|
+
def padding=(padding)
|
40
|
+
if [true, false].include?(padding) || padding.is_a?(String)
|
41
|
+
@padding = padding
|
42
|
+
else
|
43
|
+
raise ArgumentError.new("Padding must be a boolean or a String.")
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# Make sure the configuration object is set up when the gem is loaded.
|
50
|
+
UltimateTurboModal.configure
|
data/lib/ultimate_turbo_modal.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative "ultimate_turbo_modal/version"
|
4
|
+
require "ultimate_turbo_modal/configuration"
|
4
5
|
require "ultimate_turbo_modal/railtie"
|
5
6
|
require "ultimate_turbo_modal/base"
|
6
7
|
Dir[File.join(__dir__, "ultimate_turbo_modal/flavors", "*.rb")].sort.each do |file|
|
@@ -10,8 +11,6 @@ end
|
|
10
11
|
module UltimateTurboModal
|
11
12
|
extend self
|
12
13
|
|
13
|
-
DEFAULT_FLAVOR = :tailwind
|
14
|
-
|
15
14
|
def new(**)
|
16
15
|
modal_class.new(**)
|
17
16
|
end
|
@@ -20,13 +19,5 @@ module UltimateTurboModal
|
|
20
19
|
"UltimateTurboModal::Flavors::#{flavor.to_s.classify}".constantize
|
21
20
|
end
|
22
21
|
|
23
|
-
def flavor=(flavor)
|
24
|
-
@flavor = flavor
|
25
|
-
end
|
26
|
-
|
27
|
-
def flavor
|
28
|
-
defined?(@flavor) ? @flavor&.to_sym : DEFAULT_FLAVOR
|
29
|
-
end
|
30
|
-
|
31
22
|
class Error < StandardError; end
|
32
23
|
end
|
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.1.
|
4
|
+
version: 1.1.2
|
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-
|
11
|
+
date: 2023-11-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: phlex-rails
|
@@ -92,6 +92,7 @@ files:
|
|
92
92
|
- Rakefile
|
93
93
|
- lib/ultimate_turbo_modal.rb
|
94
94
|
- lib/ultimate_turbo_modal/base.rb
|
95
|
+
- lib/ultimate_turbo_modal/configuration.rb
|
95
96
|
- lib/ultimate_turbo_modal/flavors/tailwind.rb
|
96
97
|
- lib/ultimate_turbo_modal/flavors/vanilla.rb
|
97
98
|
- lib/ultimate_turbo_modal/helpers/controller_helper.rb
|