phlex 1.0.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of phlex might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e074c926f013d613e2523b41c8dd604758d087c64d377b50a343c651b0164c0d
4
- data.tar.gz: 56019e811dff06ef053adfeb20160fe29c247ee2e2f37848eba1580d240c41fd
3
+ metadata.gz: 1e06bb8d47be22009079c466771304f5e8cd413be8de6e3fb57eb0b64cc84037
4
+ data.tar.gz: 45a39c4ea77541549ce3e913875a3400c5abf247c5f9c72fa4d9002b7ea1186c
5
5
  SHA512:
6
- metadata.gz: 24489ae7f67415aa23ce258d6a121fe37418ce32e543888410b730821feeafd5fda6f164dd6f390f9dd4a0ec7a8a92ae5c50deb53376f95f987203ad4da2acf2
7
- data.tar.gz: 1ddfa0b6dff09c597cec5f77f521faf89344981e4f3ddd3237722d94cb4d4faeec0d385a7ef4a0a18acec770d7f22811ac489ae94dfdfc3fc92fbf1cbb676f20
6
+ metadata.gz: cb771c7f3ff0d11e513f3c7e70d6783dc7a7f40b19611f961c56b39ef22412479a55333d5a3432ee5564a8f102377122f4a43529a107adffbc82da17dfc4bdc0
7
+ data.tar.gz: 8e2671c58f64d9da93581e2c5bdab188eea8f5f468d0327ae50a264d7c3297c8f8dbeadae0c59f8cce05e2f3446d178ce8d2c0a18eb82bf5e922ded811a1fd2b
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 3.3.0
data/README.md CHANGED
@@ -14,6 +14,12 @@ If you run into any trouble, please [start a discussion](https://github.com/joel
14
14
 
15
15
  Everyone interacting in Phlex codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/joeldrapper/phlex/blob/main/CODE_OF_CONDUCT.md).
16
16
 
17
+ ### Who uses Phlex?
18
+
19
+ - [Clearscope](https://www.clearscope.io)
20
+
21
+ *If you can share that your company uses Phlex in production, please open a PR to list it here.*
22
+
17
23
  ### Sponsorship 💖
18
24
 
19
25
  Maintaining a library is a lot of work. If your company benefits from this work or is likely to benefit from it in the future, please consider [sponsorship](https://github.com/sponsors/joeldrapper). Phlex is actively developed and maintained by **[Joel Drapper](https://github.com/sponsors/joeldrapper)**.
@@ -25,3 +31,14 @@ If you’ve found a potential security issue, please email [security@phlex.fun](
25
31
  ### Thanks 🙏
26
32
 
27
33
  Thanks [Logology](https://www.logology.co) for sponsoring our logo.
34
+
35
+ ### Prior Art 🎨
36
+
37
+ - [markaby](https://github.com/markaby/markaby)
38
+ - [erector](https://github.com/erector/erector)
39
+ - [papercraft](https://github.com/digital-fabric/papercraft)
40
+ - [matestack](https://github.com/matestack/matestack-ui-core)
41
+ - [arbre](https://github.com/activeadmin/arbre)
42
+ - [tubby](https://github.com/judofyr/tubby)
43
+ - [hoshi](https://github.com/pete/hoshi)
44
+ - [hyperstack](https://github.com/hyperstack-org/hyperstack)
data/lib/phlex/html.rb CHANGED
@@ -134,12 +134,12 @@ module Phlex
134
134
  end
135
135
 
136
136
  def call(buffer = +"", view_context: nil, parent: nil, &block)
137
- return buffer unless render?
138
-
139
137
  @_target = buffer
140
138
  @_view_context = view_context
141
139
  @_parent = parent
142
140
 
141
+ return buffer unless render?
142
+
143
143
  around_template do
144
144
  if block_given?
145
145
  template do |*args|
@@ -154,7 +154,7 @@ module Phlex
154
154
  end
155
155
  end
156
156
 
157
- self.class.rendered_at_least_once ||= true
157
+ self.class.rendered_at_least_once = true
158
158
 
159
159
  buffer
160
160
  end
@@ -224,8 +224,9 @@ module Phlex
224
224
  end
225
225
 
226
226
  def unsafe_raw(content = nil, &block)
227
- @_target << (content || instance_exec(&block))
228
- nil
227
+ return nil unless content
228
+
229
+ @_target << content
229
230
  end
230
231
 
231
232
  def capture(&block)
@@ -316,10 +317,6 @@ module Phlex
316
317
  end
317
318
 
318
319
  private def _attributes(**attributes)
319
- if attributes[:href]&.start_with?(/\s*javascript/)
320
- attributes[:href] = attributes[:href].sub(/^\s*(javascript:)+/, "")
321
- end
322
-
323
320
  buffer = +""
324
321
  _build_attributes(attributes, buffer: buffer)
325
322
 
@@ -340,8 +337,11 @@ module Phlex
340
337
  else k.to_s
341
338
  end
342
339
 
340
+ lower_name = name.downcase
341
+ next if lower_name == "href" && v.start_with?(/\s*javascript:/i)
342
+
343
343
  # Detect unsafe attribute names. Attribute names are considered unsafe if they match an event attribute or include unsafe characters.
344
- if HTML::EVENT_ATTRIBUTES[name] || name.match?(/[<>&"']/)
344
+ if HTML::EVENT_ATTRIBUTES[lower_name] || name.match?(/[<>&"']/)
345
345
  raise ArgumentError, "Unsafe attribute name detected: #{k}."
346
346
  end
347
347
 
@@ -353,7 +353,14 @@ module Phlex
353
353
  when Symbol
354
354
  buffer << " " << name << '="' << ERB::Util.html_escape(v.name) << '"'
355
355
  when Hash
356
- _build_attributes(v.transform_keys { "#{k}-#{_1.name.tr('_', '-')}" }, buffer: buffer)
356
+ _build_attributes(
357
+ v.transform_keys { |subkey|
358
+ case subkey
359
+ when Symbol then"#{k}-#{subkey.name.tr('_', '-')}"
360
+ else "#{k}-#{subkey}"
361
+ end
362
+ }, buffer: buffer
363
+ )
357
364
  else
358
365
  buffer << " " << name << '="' << ERB::Util.html_escape(v.to_s) << '"'
359
366
  end
data/lib/phlex/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Phlex
4
- VERSION = "1.0.0"
4
+ VERSION = "1.1.1"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: phlex
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joel Drapper
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-12-08 00:00:00.000000000 Z
11
+ date: 2024-03-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: zeitwerk
@@ -33,6 +33,7 @@ extra_rdoc_files: []
33
33
  files:
34
34
  - ".editorconfig"
35
35
  - ".rubocop.yml"
36
+ - ".ruby-version"
36
37
  - CODE_OF_CONDUCT.md
37
38
  - CONTRIBUTING.md
38
39
  - Gemfile
@@ -85,7 +86,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
85
86
  - !ruby/object:Gem::Version
86
87
  version: '0'
87
88
  requirements: []
88
- rubygems_version: 3.3.25
89
+ rubygems_version: 3.5.6
89
90
  signing_key:
90
91
  specification_version: 4
91
92
  summary: A framework for building views in Ruby.