vident 0.5.1 → 0.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 +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: []
|