vident-phlex 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 5b3f57652bc326a7ed139dfa36ac6753eeb925a76c895d4a08f05a22e463a846
4
+ data.tar.gz: 9f221a164fe0ef827595c73aa51339a6b2ca556d6127bedcbefd7e9f2ee6ce6d
5
+ SHA512:
6
+ metadata.gz: 3d19da664b01409b656e45ae400a1ca7622c8c3653db62347888d887ffc0d014723a7175e8d40a9363c2009f165512713abc3bb2cec94ad5dab3026d7c2fed7c
7
+ data.tar.gz: 0aee2eaaa771af432cc1330715c52591be9269e3b9a96339c17c7ad62c09333e7b501c77de40d84286ee1ea3c004b86cd5a5b0c764577674e21807f1def1cc01
data/README.md ADDED
@@ -0,0 +1,28 @@
1
+ # Vident::Phlex
2
+ Short description and motivation.
3
+
4
+ ## Usage
5
+ How to use my plugin.
6
+
7
+ ## Installation
8
+ Add this line to your application's Gemfile:
9
+
10
+ ```ruby
11
+ gem "vident-phlex"
12
+ ```
13
+
14
+ And then execute:
15
+ ```bash
16
+ $ bundle
17
+ ```
18
+
19
+ Or install it yourself as:
20
+ ```bash
21
+ $ gem install vident-phlex
22
+ ```
23
+
24
+ ## Contributing
25
+ Contribution directions go here.
26
+
27
+ ## License
28
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ require "bundler/setup"
2
+
3
+ APP_RAKEFILE = File.expand_path("test/dummy/Rakefile", __dir__)
4
+ load "rails/tasks/engine.rake"
5
+
6
+ load "rails/tasks/statistics.rake"
7
+
8
+ require "bundler/gem_tasks"
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :vident_phlex do
3
+ # # Task goes here
4
+ # end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Vident
4
+ module Phlex
5
+ class Engine < ::Rails::Engine
6
+ lib_path = File.expand_path("../../../../lib/", __FILE__)
7
+ config.autoload_paths << lib_path
8
+ config.eager_load_paths << lib_path
9
+
10
+ config.before_initialize do
11
+ Rails.autoloaders.each do |autoloader|
12
+ autoloader.inflector.inflect(
13
+ "html" => "HTML",
14
+ "version" => "VERSION"
15
+ )
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Vident
4
+ module Phlex
5
+ class HTML < ::Phlex::HTML
6
+ include ::Vident::Component
7
+
8
+ class << self
9
+ # Phlex uses a DSL to define the document, and those methods could easily clash with our attribute
10
+ # accessors. Therefore in Phlex components we do not create attribute accessors, and instead use instance
11
+ # variables directly.
12
+ def attribute(name, **options)
13
+ options[:delegates] = false
14
+ super
15
+ end
16
+ end
17
+
18
+ # Helper to create the main element
19
+ def parent_element(**options)
20
+ @parent_element ||= RootComponent.new(**parent_element_attributes(options))
21
+ end
22
+ alias_method :root, :parent_element
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Vident
4
+ module Phlex
5
+ class RootComponent < ::Phlex::HTML
6
+ include ::Vident::RootComponent
7
+
8
+ if Gem.loaded_specs.has_key? "better_html"
9
+ begin
10
+ include ::Vident::BetterHtml::RootComponent
11
+ rescue
12
+ raise "if `better_html`` is being used you must install `vident-better_html"
13
+ end
14
+ end
15
+
16
+ STANDARD_ELEMENTS = [:a, :abbr, :address, :article, :aside, :b, :bdi, :bdo, :blockquote, :body, :button, :caption, :cite, :code, :colgroup, :data, :datalist, :dd, :del, :details, :dfn, :dialog, :div, :dl, :dt, :em, :fieldset, :figcaption, :figure, :footer, :form, :g, :h1, :h2, :h3, :h4, :h5, :h6, :head, :header, :hgroup, :html, :i, :iframe, :ins, :kbd, :label, :legend, :li, :main, :map, :mark, :menuitem, :meter, :nav, :noscript, :object, :ol, :optgroup, :option, :output, :p, :path, :picture, :pre, :progress, :q, :rp, :rt, :ruby, :s, :samp, :script, :section, :select, :slot, :small, :span, :strong, :style, :sub, :summary, :sup, :svg, :table, :tbody, :td, :template_tag, :textarea, :tfoot, :th, :thead, :time, :title, :tr, :u, :ul, :video, :wbr].freeze
17
+ VOID_ELEMENTS = [:area, :br, :embed, :hr, :img, :input, :link, :meta, :param, :source, :track, :col].freeze
18
+
19
+ VALID_TAGS = Set[*(STANDARD_ELEMENTS + VOID_ELEMENTS)].freeze
20
+
21
+ # Create a tag for a target with a block containing content
22
+ def target_tag(tag_name, targets, **options, &block)
23
+ parsed = parse_targets(Array.wrap(targets))
24
+ options[:data] ||= {}
25
+ options[:data].merge!(build_target_data_attributes(parsed))
26
+ generate_tag(tag_name, **options, &block)
27
+ end
28
+
29
+ # Build a tag with the attributes determined by this components properties and stimulus
30
+ # data attributes.
31
+ def template(&block)
32
+ # Generate tag options and render
33
+ tag_type = @element_tag.presence&.to_sym || :div
34
+ raise ArgumentError, "Unsupported HTML tag name #{tag_type}" unless VALID_TAGS.include?(tag_type)
35
+ options = @html_options&.dup || {}
36
+ data_attrs = tag_data_attributes
37
+ data_attrs = options[:data].present? ? data_attrs.merge(options[:data]) : data_attrs
38
+ options = options.merge(id: @id) if @id
39
+ options.except!(:data)
40
+ options.merge!(data_attrs.transform_keys { |k| "data-#{k}" })
41
+ generate_tag(tag_type, **options, &block)
42
+ end
43
+
44
+ private
45
+
46
+ def generate_tag(tag_type, **options, &block)
47
+ send((tag_type == :template) ? :template_tag : tag_type, **options, &block)
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,5 @@
1
+ module Vident
2
+ module Phlex
3
+ VERSION = "0.1.0"
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ require "vident/phlex/version"
2
+ require "vident/phlex/engine"
3
+
4
+ module Vident
5
+ module Phlex
6
+ end
7
+ end
metadata ADDED
@@ -0,0 +1,134 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vident-phlex
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Stephen Ierodiaconou
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-04-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '7'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '8'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '7'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '8'
33
+ - !ruby/object:Gem::Dependency
34
+ name: vident
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: 0.8.0
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '1'
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: 0.8.0
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '1'
53
+ - !ruby/object:Gem::Dependency
54
+ name: phlex
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: 1.5.0
60
+ - - "<"
61
+ - !ruby/object:Gem::Version
62
+ version: '2'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: 1.5.0
70
+ - - "<"
71
+ - !ruby/object:Gem::Version
72
+ version: '2'
73
+ - !ruby/object:Gem::Dependency
74
+ name: phlex-rails
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: 0.8.1
80
+ - - "<"
81
+ - !ruby/object:Gem::Version
82
+ version: '1'
83
+ type: :runtime
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: 0.8.1
90
+ - - "<"
91
+ - !ruby/object:Gem::Version
92
+ version: '1'
93
+ description: Vident with Phlex
94
+ email:
95
+ - stevegeek@gmail.com
96
+ executables: []
97
+ extensions: []
98
+ extra_rdoc_files: []
99
+ files:
100
+ - README.md
101
+ - Rakefile
102
+ - lib/tasks/vident/phlex_tasks.rake
103
+ - lib/vident/phlex.rb
104
+ - lib/vident/phlex/engine.rb
105
+ - lib/vident/phlex/html.rb
106
+ - lib/vident/phlex/root_component.rb
107
+ - lib/vident/phlex/version.rb
108
+ homepage: https://github.com/stevegeek/vident-phlex
109
+ licenses:
110
+ - MIT
111
+ metadata:
112
+ homepage_uri: https://github.com/stevegeek/vident-phlex
113
+ source_code_uri: https://github.com/stevegeek/vident-phlex
114
+ changelog_uri: https://github.com/stevegeek/vident-phlex/blob/main/CHANGELOG.md
115
+ post_install_message:
116
+ rdoc_options: []
117
+ require_paths:
118
+ - lib
119
+ required_ruby_version: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ required_rubygems_version: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ version: '0'
129
+ requirements: []
130
+ rubygems_version: 3.4.6
131
+ signing_key:
132
+ specification_version: 4
133
+ summary: Vident with Phlex
134
+ test_files: []