web_components_rails 2.1.2 → 2.2.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 +5 -5
- data/lib/web_components_rails/html_import_processor.rb +72 -18
- data/lib/web_components_rails/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 6f52ec4b08fcca1e496159e385dee89b3b65e191c4004f1dff6366df870d9f8f
|
4
|
+
data.tar.gz: d9aa536fc574386e5316a0e601a163809c8d8e4286583361b51a376d1e5548d4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9fad69eb81f98d615b601c29da13dacbd97a62119203f1d0c23b020a6e38593f5762e7163c2646ec532ea0267dfd711214523c3bede432e2ae64fb1240ab340b
|
7
|
+
data.tar.gz: 4c826159637070c3c8c9dd94f230953541a15f506c68a7fe8fce56e2d8dcf659b8296032a521c3f09c1f18788c87054690cd563142a1cc2c9f418aca525e3d09
|
@@ -6,7 +6,56 @@ require 'securerandom'
|
|
6
6
|
# https://github.com/rails/sprockets/blob/3.x/lib/sprockets/directive_processor.rb
|
7
7
|
class WebComponentsRails::HTMLImportProcessor
|
8
8
|
|
9
|
-
VERSION = '
|
9
|
+
VERSION = '10'
|
10
|
+
XML_SAVE_OPTIONS = {
|
11
|
+
save_with: ::Nokogiri::XML::Node::SaveOptions::DEFAULT_XML | ::Nokogiri::XML::Node::SaveOptions::NO_EMPTY_TAGS
|
12
|
+
}
|
13
|
+
|
14
|
+
# URI attributes are determined by using the attributes list at https://html.spec.whatwg.org/#attributes-3
|
15
|
+
# and looking for attributes that specify "Valid URL" as their values
|
16
|
+
URI_ATTRIBUTES = %w(
|
17
|
+
action
|
18
|
+
cite
|
19
|
+
data
|
20
|
+
formaction
|
21
|
+
href
|
22
|
+
itemid
|
23
|
+
manifest
|
24
|
+
ping
|
25
|
+
poster
|
26
|
+
src
|
27
|
+
).freeze
|
28
|
+
|
29
|
+
# URI attributes are determined by using the attributes list at https://html.spec.whatwg.org/#attributes-3
|
30
|
+
# and looking for attributes that specify "Boolean attribute" as their values
|
31
|
+
BOOLEAN_ATTRIBUTES = %w(
|
32
|
+
allowfullscreen
|
33
|
+
allowpaymentrequest
|
34
|
+
allowusermedia
|
35
|
+
async
|
36
|
+
autofocus
|
37
|
+
autoplay
|
38
|
+
checked
|
39
|
+
controls
|
40
|
+
default
|
41
|
+
defer
|
42
|
+
disabled
|
43
|
+
formnovalidate
|
44
|
+
hidden
|
45
|
+
ismap
|
46
|
+
itemscope
|
47
|
+
loop
|
48
|
+
multiple
|
49
|
+
muted
|
50
|
+
nomodule
|
51
|
+
novalidate
|
52
|
+
open
|
53
|
+
playsinline
|
54
|
+
readonly
|
55
|
+
required
|
56
|
+
reversed
|
57
|
+
selected
|
58
|
+
).freeze
|
10
59
|
|
11
60
|
def self.instance
|
12
61
|
@instance ||= new
|
@@ -21,25 +70,30 @@ class WebComponentsRails::HTMLImportProcessor
|
|
21
70
|
end
|
22
71
|
|
23
72
|
def self.doc_to_html(doc)
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
%
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
73
|
+
doc_html = doc.to_html(encoding: 'UTF-8')
|
74
|
+
|
75
|
+
uri_regex = Regexp.union(URI_ATTRIBUTES)
|
76
|
+
square_brackets_regex = Regexp.new("(#{uri_regex})=\"%5B%5B(.+?)%5D%5D\"", 'i')
|
77
|
+
curly_braces_regex = Regexp.new("(#{uri_regex})=\"%7B%7B(.+?)%7D%7D\"", 'i')
|
78
|
+
|
79
|
+
selectors = (URI_ATTRIBUTES + BOOLEAN_ATTRIBUTES).map { |attribute| "*[#{attribute}]"}
|
80
|
+
doc.css(selectors.join(',')).each do |node|
|
81
|
+
# Nokogiri only writes out valid HTML so this outputs some nodes that would not be valid HTML
|
82
|
+
# (e.g. nodes with boolean attributes that have values, or nodes that have unescaped URI attributes)
|
83
|
+
# as both HTML and XML, and uses swap out the HTML for XML in the complete document HTML.
|
84
|
+
pattern = node.to_html
|
85
|
+
replacement = node.to_xml(XML_SAVE_OPTIONS)
|
86
|
+
|
87
|
+
# Nokogiri/Nokogumbo are hard-coded to URI-escape certain attributes (src, href, action, and a[name]),
|
88
|
+
# so we have to put in placeholders, and fix the values in the HTML string output afterwards
|
89
|
+
# This doesn't work so well with framework-specific syntax (eg. <foo src="{{bar}}">)
|
90
|
+
replacement.gsub!(square_brackets_regex, '\1="[[\2]]"')
|
91
|
+
replacement.gsub!(curly_braces_regex, '\1="{{\2}}"')
|
92
|
+
|
93
|
+
doc_html.gsub!(pattern, replacement)
|
40
94
|
end
|
41
95
|
|
42
|
-
|
96
|
+
doc_html
|
43
97
|
end
|
44
98
|
|
45
99
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: web_components_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jon Botelho
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-01-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogumbo
|
@@ -119,7 +119,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
119
119
|
version: '0'
|
120
120
|
requirements: []
|
121
121
|
rubyforge_project:
|
122
|
-
rubygems_version: 2.4
|
122
|
+
rubygems_version: 2.7.4
|
123
123
|
signing_key:
|
124
124
|
specification_version: 4
|
125
125
|
summary: Web components utils for rails
|