vident 0.5.1 → 0.6.0
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 +48 -0
- data/Gemfile +1 -0
- data/lib/vident/root_component/base.rb +15 -17
- data/lib/vident/root_component/using_better_html.rb +39 -0
- data/lib/vident/root_component/using_phlex_html.rb +3 -0
- data/lib/vident/root_component/using_view_component.rb +19 -13
- data/lib/vident/version.rb +1 -1
- data/lib/vident.rb +1 -0
- metadata +9 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e4d88cce5b38bd6e4c19016a7bad835cd25b8e4453284fc5795d039e7b48d145
|
4
|
+
data.tar.gz: f63eca71787e977e9204336b16f8cd32e3fa5c73ee88977ff3befdd8a5f8a33a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3845320ed4eef3e3b3919ef970e93e9ed2c09332ccf14db2224b1d98402b43471e6a543690249fb42a64b52a50f35314f05844f460c702af60c5cc8cf0bc083a
|
7
|
+
data.tar.gz: d167a0e66951777bbde64f657d97e68804ca15bc6890604e0d4015d27a4ee4b17a252574f5e0dcd5cc9f9864929f20bc24ad5689f98e1c853b7cb4da36c293a7
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
|
2
|
+
# Change Log
|
3
|
+
All notable changes to this project will be documented in this file.
|
4
|
+
|
5
|
+
The format is based on [Keep a Changelog](http://keepachangelog.com/)
|
6
|
+
and this project adheres to [Semantic Versioning](http://semver.org/).
|
7
|
+
|
8
|
+
## [Unreleased]
|
9
|
+
|
10
|
+
### Added
|
11
|
+
|
12
|
+
### Changed
|
13
|
+
|
14
|
+
### Fixed
|
15
|
+
|
16
|
+
## [0.6.0] - 2023-02-20
|
17
|
+
|
18
|
+
### Added
|
19
|
+
|
20
|
+
- Experimental support for `better_html` in the root components (the stimulus attributes are generated with `html_attributes`)
|
21
|
+
|
22
|
+
|
23
|
+
|
24
|
+
## [0.5.1] - 2023-02-17
|
25
|
+
|
26
|
+
### Added
|
27
|
+
|
28
|
+
- N/A
|
29
|
+
|
30
|
+
### Changed
|
31
|
+
|
32
|
+
- N/A
|
33
|
+
|
34
|
+
### Fixed
|
35
|
+
|
36
|
+
- Typed attributes was not always using custom coercion methods if they were defined
|
37
|
+
|
38
|
+
### Removed
|
39
|
+
|
40
|
+
- N/A
|
41
|
+
|
42
|
+
### Deprecated
|
43
|
+
|
44
|
+
- N/A
|
45
|
+
|
46
|
+
### Security
|
47
|
+
|
48
|
+
- N/A
|
data/Gemfile
CHANGED
@@ -68,23 +68,21 @@ module Vident
|
|
68
68
|
|
69
69
|
# Helpers for generating the Stimulus data-* attributes directly
|
70
70
|
|
71
|
-
# Return the HTML `data-controller` attribute
|
72
|
-
def with_controllers
|
73
|
-
"data-controller
|
71
|
+
# Return the HTML `data-controller` attribute for the given controllers
|
72
|
+
def with_controllers(*controllers_to_set)
|
73
|
+
"data-controller=\"#{controller_list(controllers_to_set)}\"".html_safe
|
74
74
|
end
|
75
75
|
|
76
|
-
# Return the HTML `data-target` attribute
|
76
|
+
# Return the HTML `data-target` attribute for the given targets
|
77
77
|
def as_targets(*targets)
|
78
|
-
build_target_data_attributes(parse_targets(targets))
|
79
|
-
|
80
|
-
.join(" ")
|
81
|
-
.html_safe
|
78
|
+
attrs = build_target_data_attributes(parse_targets(targets))
|
79
|
+
attrs.map { |dt, n| "data-#{dt}=\"#{n}\"" }.join(" ").html_safe
|
82
80
|
end
|
83
81
|
alias_method :as_target, :as_targets
|
84
82
|
|
85
|
-
# Return the HTML `data-action` attribute
|
86
|
-
def with_actions(*
|
87
|
-
"data-action='#{parse_actions(
|
83
|
+
# Return the HTML `data-action` attribute for the given actions
|
84
|
+
def with_actions(*actions_to_set)
|
85
|
+
"data-action='#{parse_actions(actions_to_set).join(" ")}'".html_safe
|
88
86
|
end
|
89
87
|
alias_method :with_action, :with_actions
|
90
88
|
|
@@ -101,14 +99,14 @@ module Vident
|
|
101
99
|
end
|
102
100
|
|
103
101
|
# A complete list of Stimulus controllers for this component
|
104
|
-
def controller_list
|
105
|
-
|
102
|
+
def controller_list(controllers_to_set)
|
103
|
+
controllers_to_set&.map { |c| stimulize_path(c) }&.join(" ")
|
106
104
|
end
|
107
105
|
|
108
106
|
# Complete list of actions ready to be use in the data-action attribute
|
109
|
-
def action_list
|
110
|
-
return nil unless
|
111
|
-
parse_actions(
|
107
|
+
def action_list(actions_to_parse)
|
108
|
+
return nil unless actions_to_parse&.size&.positive?
|
109
|
+
parse_actions(actions_to_parse).join(" ")
|
112
110
|
end
|
113
111
|
|
114
112
|
# Complete list of targets ready to be use in the data attributes
|
@@ -124,7 +122,7 @@ module Vident
|
|
124
122
|
|
125
123
|
# stimulus "data-*" attributes map for this component
|
126
124
|
def tag_data_attributes
|
127
|
-
{controller: controller_list, action: action_list}
|
125
|
+
{controller: controller_list(@controllers), action: action_list(@actions)}
|
128
126
|
.merge!(target_list)
|
129
127
|
.merge!(named_classes_list)
|
130
128
|
.merge!(data_map_attributes)
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
if Gem.loaded_specs.has_key? "better_html"
|
4
|
+
require "better_html"
|
5
|
+
require "cgi/util"
|
6
|
+
|
7
|
+
module Vident
|
8
|
+
module RootComponent
|
9
|
+
module UsingBetterHTML
|
10
|
+
# Return the HTML `data-controller` attribute for the given controllers
|
11
|
+
def with_controllers(*controllers_to_set)
|
12
|
+
helpers.html_attributes("data-controller" => controller_list(controllers_to_set)&.html_safe)
|
13
|
+
end
|
14
|
+
|
15
|
+
# Return the HTML `data-target` attribute for the given targets
|
16
|
+
def as_targets(*targets)
|
17
|
+
attrs = build_target_data_attributes(parse_targets(targets))
|
18
|
+
helpers.html_attributes(attrs.transform_keys! { |k| "data-#{k}" })
|
19
|
+
end
|
20
|
+
|
21
|
+
# Return the HTML `data-action` attribute for the given actions
|
22
|
+
def with_actions(*actions_to_set)
|
23
|
+
actions_str = action_list(actions_to_set)
|
24
|
+
actions_str.present? ? helpers.html_attributes("data-action" => actions_str) : nil
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
# Complete list of actions ready to be use in the data-action attribute
|
30
|
+
def action_list(actions_to_parse)
|
31
|
+
return nil unless actions_to_parse&.size&.positive?
|
32
|
+
# `html_attributes` will escape '->' thus breaking the stimulus action, so we need to do our own escaping
|
33
|
+
actions_str_raw = parse_actions(actions_to_parse).join(" ")
|
34
|
+
CGI.escapeHTML(actions_str_raw).gsub("->", "->").html_safe
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -7,6 +7,9 @@ if Gem.loaded_specs.has_key? "phlex"
|
|
7
7
|
module RootComponent
|
8
8
|
class UsingPhlexHTML < Phlex::HTML
|
9
9
|
include Base
|
10
|
+
if Gem.loaded_specs.has_key? "better_html"
|
11
|
+
include UsingBetterHTML
|
12
|
+
end
|
10
13
|
|
11
14
|
VALID_TAGS = Set[*(Phlex::HTML::VOID_ELEMENTS.keys + Phlex::HTML::STANDARD_ELEMENTS.keys)].freeze
|
12
15
|
|
@@ -7,6 +7,9 @@ if Gem.loaded_specs.has_key? "view_component"
|
|
7
7
|
module RootComponent
|
8
8
|
class UsingViewComponent < ::ViewComponent::Base
|
9
9
|
include Base
|
10
|
+
if Gem.loaded_specs.has_key? "better_html"
|
11
|
+
include UsingBetterHTML
|
12
|
+
end
|
10
13
|
|
11
14
|
SELF_CLOSING_TAGS = Set[:area, :base, :br, :col, :embed, :hr, :img, :input, :link, :meta, :param, :source, :track, :wbr].freeze
|
12
15
|
|
@@ -19,25 +22,28 @@ if Gem.loaded_specs.has_key? "view_component"
|
|
19
22
|
end
|
20
23
|
|
21
24
|
def call
|
22
|
-
# Capture inner block content
|
23
|
-
# It's important that we capture the block content before generating the tag options.
|
24
|
-
# This is because the content could contain calls to `s.data_map`.
|
25
|
-
# These calls add key-value pairs to the internal data_map, which can then be translated into
|
26
|
-
# the correct `data-*` attrs by the tag options.
|
27
|
-
generated = content
|
28
|
-
|
29
25
|
# Generate outer tag options and render
|
30
|
-
tag_type =
|
31
|
-
options =
|
32
|
-
data_attrs = tag_data_attributes
|
33
|
-
options[:data] = options[:data].present? ? data_attrs.merge(options[:data]) : data_attrs
|
34
|
-
options = options.merge(id: @id) if @id
|
26
|
+
tag_type = content_tag_type
|
27
|
+
options = content_tag_options
|
35
28
|
if SELF_CLOSING_TAGS.include?(tag_type)
|
36
29
|
view_context.tag(tag_type, options)
|
37
30
|
else
|
38
|
-
view_context.content_tag(tag_type,
|
31
|
+
view_context.content_tag(tag_type, content, options)
|
39
32
|
end
|
40
33
|
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def content_tag_options
|
38
|
+
options = @html_options&.dup || {}
|
39
|
+
data_attrs = tag_data_attributes
|
40
|
+
options[:data] = options[:data].present? ? data_attrs.merge(options[:data]) : data_attrs
|
41
|
+
options.merge(id: @id) if @id
|
42
|
+
end
|
43
|
+
|
44
|
+
def content_tag_type
|
45
|
+
@element_tag.presence || :div
|
46
|
+
end
|
41
47
|
end
|
42
48
|
end
|
43
49
|
end
|
data/lib/vident/version.rb
CHANGED
data/lib/vident.rb
CHANGED
@@ -26,6 +26,7 @@ end
|
|
26
26
|
|
27
27
|
require_relative "vident/stable_id"
|
28
28
|
require_relative "vident/root_component/base"
|
29
|
+
require_relative "vident/root_component/using_better_html"
|
29
30
|
require_relative "vident/root_component/using_phlex_html"
|
30
31
|
require_relative "vident/root_component/using_view_component"
|
31
32
|
require_relative "vident/base"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vident
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen Ierodiaconou
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-02-
|
11
|
+
date: 2023-02-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -31,8 +31,9 @@ dependencies:
|
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '8'
|
33
33
|
description: Vident makes using Stimulus with your `ViewComponent` or `Phlex` view
|
34
|
-
components as easy as writing Ruby.
|
35
|
-
|
34
|
+
components as easy as writing Ruby. Vident is the base of your design system implementation,
|
35
|
+
which provides helpers for working with Stimulus. For component libraries with ViewComponent
|
36
|
+
or Phlex.
|
36
37
|
email:
|
37
38
|
- stevegeek@gmail.com
|
38
39
|
executables: []
|
@@ -40,6 +41,7 @@ extensions: []
|
|
40
41
|
extra_rdoc_files: []
|
41
42
|
files:
|
42
43
|
- ".standard.yml"
|
44
|
+
- CHANGELOG.md
|
43
45
|
- CODE_OF_CONDUCT.md
|
44
46
|
- Gemfile
|
45
47
|
- LICENSE.txt
|
@@ -57,6 +59,7 @@ files:
|
|
57
59
|
- lib/vident/component.rb
|
58
60
|
- lib/vident/railtie.rb
|
59
61
|
- lib/vident/root_component/base.rb
|
62
|
+
- lib/vident/root_component/using_better_html.rb
|
60
63
|
- lib/vident/root_component/using_phlex_html.rb
|
61
64
|
- lib/vident/root_component/using_view_component.rb
|
62
65
|
- lib/vident/stable_id.rb
|
@@ -90,6 +93,6 @@ requirements: []
|
|
90
93
|
rubygems_version: 3.3.26
|
91
94
|
signing_key:
|
92
95
|
specification_version: 4
|
93
|
-
summary: Vident is
|
94
|
-
|
96
|
+
summary: Vident is the base of your design system implementation, which provides helpers
|
97
|
+
for working with Stimulus. For component libraries with ViewComponent or Phlex.
|
95
98
|
test_files: []
|