custom_elements-rails 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 39d267fc030b1d1ed3a68c7d74ee8c5d00617ddd8157703d31ffa35392202422
4
- data.tar.gz: '03929ce117a70a29b1b88371b39eb241aa462dffb46361d8aa71b2196f9a9ba1'
3
+ metadata.gz: 22d257cc2e8c052814180e03810ed19525ffaae2989826a5660dc0306dfc3df2
4
+ data.tar.gz: 2661b7ce42c1a797e0d52fd8deb91922e6af03b8045a31656ec4c59c2f392dc5
5
5
  SHA512:
6
- metadata.gz: 2a636bee1c939de478ec43a50f8c51e2956500060cbdd0808aa7d3ff99b2654fb07a9baa55d271a2672e337741053cd7d348a7471aa63d79fd0150c5dc10433a
7
- data.tar.gz: f1284e5448b9d4e31c014b32da14a711ba5aa6b5682d60db812cc3d2f2a44b2702d8229b9323b6371b83f4b22a81e510c6482437513b9950faaecd7ffc09aee8
6
+ metadata.gz: c92ca66bdfd4c7a9bc5eb90bb383506716bf0efbe1ec977371695a45362578e15292bf22321381f04ba48ea4cb49699fa797b64ecf0d16f19f2d4c53316a5876
7
+ data.tar.gz: fa02fa675a3a96445063e0eb5a825c942c6e85658c587d6b70ca2ef6858c3e5eb892c11114715e42aebdee0d5418a46821054b01c2fa09e5ff827b76fdf9e77a
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
- # CustomElements::Rails
2
- Short description and motivation.
1
+ # Custom Elements with Rails
2
+
3
+ This gem provides a small helper and installation scripts to use custom elements in conjunction with `importmap-rails`.
3
4
 
4
5
  ## Usage
5
- How to use my plugin.
6
6
 
7
7
  ## Installation
8
8
  Add this line to your application's Gemfile:
@@ -11,16 +11,34 @@ Add this line to your application's Gemfile:
11
11
  gem "custom_elements-rails"
12
12
  ```
13
13
 
14
- And then execute:
14
+ Install the gem:
15
+
15
16
  ```bash
16
- $ bundle
17
+ $ bundle install
17
18
  ```
18
19
 
19
- Or install it yourself as:
20
+ Run the initial setup:
21
+
20
22
  ```bash
21
- $ gem install custom_elements-rails
23
+ $ rails custom_elements:install
24
+ ```
25
+
26
+ This will setup and add the following files:
27
+
28
+ ```
29
+ app/javascript
30
+ ├── application.js
31
+ └── custom_elements
32
+ ├── hello_element.js
33
+ └── index.js
22
34
  ```
23
35
 
36
+ You can now add the `<app-hello>` custom element in your app. No build step needed.
37
+
38
+ ## Add a custom element
39
+
40
+ TODO
41
+
24
42
  ## Contributing
25
43
  Contribution directions go here.
26
44
 
@@ -0,0 +1,18 @@
1
+ export function eagerDefineCustomElementsFrom(namespace, options = {}) {
2
+ const importmap = document.querySelector('script[type="importmap"]')
3
+ const { imports } = JSON.parse(importmap.textContent)
4
+ const regex = new RegExp(`${namespace}\/(.*?)_element`)
5
+ Object.entries(imports)
6
+ .filter(([name, _]) => name.match(regex) )
7
+ .map(([name, importPath]) => [name.match(regex)[1], importPath])
8
+ .forEach(([name, importPath]) => {
9
+ import(importPath)
10
+ .then((module) => {
11
+ customElements.define(`${options.prefix}-${name}`, module.default)
12
+ })
13
+ .catch((error) => {
14
+ console.error(`custom_elements-rails: Could not import custom element <${options.prefix}-${name}>`)
15
+ throw error
16
+ })
17
+ })
18
+ }
@@ -1,6 +1,9 @@
1
1
  module CustomElements
2
2
  module Rails
3
- class Railtie < ::Rails::Railtie
3
+ class Railtie < ::Rails::Engine
4
+ initializer "custom_elements-rails.assets.precompile" do |app|
5
+ app.config.assets.precompile += %w( custom_elements-rails.js )
6
+ end
4
7
  end
5
8
  end
6
9
  end
@@ -1,5 +1,5 @@
1
1
  module CustomElements
2
2
  module Rails
3
- VERSION = "0.1.0"
3
+ VERSION = "0.1.1"
4
4
  end
5
5
  end
@@ -0,0 +1,31 @@
1
+ add_file "app/javascript/custom_elements/index.js", <<~JS
2
+ import { eagerDefineCustomElementsFrom } from "custom_elements-rails"
3
+
4
+ eagerDefineCustomElementsFrom("custom_elements", { prefix: "app" })
5
+ JS
6
+
7
+ # add hello world element
8
+ add_file "app/javascript/custom_elements/hello_element.js", <<~JS
9
+ export default class extends HTMLElement {
10
+ constructor() {
11
+ super()
12
+ }
13
+
14
+ connectedCallback() {
15
+ console.log("hello world")
16
+ }
17
+ }
18
+ JS
19
+
20
+ # add import to application.js
21
+ append_to_file('app/javascript/application.js', 'import "custom_elements"')
22
+
23
+ # pin basic eager loading script
24
+ append_to_file('config/importmap.rb', <<~RUBY)
25
+ pin "custom_elements-rails"
26
+ RUBY
27
+
28
+ # pin custom elements folder to importmap
29
+ append_to_file('config/importmap.rb', <<~RUBY)
30
+ pin_all_from "app/javascript/custom_elements", under: "custom_elements"
31
+ RUBY
@@ -1,4 +1,7 @@
1
- # desc "Explaining what the task does"
2
- # task :custom_elements_rails do
3
- # # Task goes here
4
- # end
1
+ namespace :custom_elements do
2
+ desc "Installation"
3
+ task :install do
4
+ puts "Installing custom_elements-rails"
5
+ system "rails app:template LOCATION=#{File.expand_path('../../install/install.rb', __dir__)}"
6
+ end
7
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: custom_elements-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Niklas Häusele
@@ -16,15 +16,15 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 7.1.3.2
19
+ version: '7'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 7.1.3.2
27
- description: A simple way to use custom elements and importmaps
26
+ version: '7'
27
+ description: 'A simple way to use custom elements to your Rails app. #nobuild'
28
28
  email:
29
29
  - niklas.haeusele@hey.com
30
30
  executables: []
@@ -34,9 +34,11 @@ files:
34
34
  - MIT-LICENSE
35
35
  - README.md
36
36
  - Rakefile
37
+ - app/assets/javascript/custom_elements-rails.js
37
38
  - lib/custom_elements/rails.rb
38
39
  - lib/custom_elements/rails/railtie.rb
39
40
  - lib/custom_elements/rails/version.rb
41
+ - lib/install/install.rb
40
42
  - lib/tasks/custom_elements/rails_tasks.rake
41
43
  homepage: https://github.com/codergeek121/custom_elements-rails
42
44
  licenses:
@@ -62,5 +64,5 @@ requirements: []
62
64
  rubygems_version: 3.5.9
63
65
  signing_key:
64
66
  specification_version: 4
65
- summary: "custom elements + Rails = \U0001F389"
67
+ summary: "Custom Elements + Rails + Importmaps = \U0001F389"
66
68
  test_files: []