Skip to content

Commit 51968c3

Browse files
committed
support different filepatterns
1 parent 8a3fa4f commit 51968c3

File tree

5 files changed

+24
-3
lines changed

5 files changed

+24
-3
lines changed

Gemfile

+1
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,4 @@ gem "puma"
1010
gem "debug", ">= 1.0.0"
1111
gem "capybara"
1212
gem "selenium-webdriver"
13+
gem "sqlite3", "~> 1.4"

app/assets/javascript/custom_elements-rails.js

+7-3
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
export function eagerDefineCustomElementsFrom(namespace, options = {}) {
2+
const pathToElementName = (path) => {
3+
const parts = path.split('/').map(p => p.replace(/_/g, '-'));
4+
return `${options.prefix}-${parts.slice(0, -1).join('--')}${parts.length > 1 ? '--' : ''}${parts.at(-1)}`;
5+
}
26
const importmap = document.querySelector('script[type="importmap"]')
37
const { imports } = JSON.parse(importmap.textContent)
4-
const regex = new RegExp(`${namespace}\/(.*?)[_-]element`)
8+
const regex = new RegExp(`${namespace}/(.*?)[-_]element`)
59
Object.entries(imports)
610
.filter(([name, _]) => name.match(regex) )
7-
.map(([name, importPath]) => [name.match(regex)[1].replace('_', '-'), importPath])
11+
.map(([name, importPath]) => { return [pathToElementName(name.match(regex)[1]), importPath] })
812
.forEach(([name, importPath]) => {
913
import(importPath)
1014
.then((module) => {
11-
customElements.define(`${options.prefix}-${name}`, module.default)
15+
customElements.define(name, module.default)
1216
})
1317
.catch((error) => {
1418
console.error(`custom_elements-rails: Could not import custom element <${options.prefix}-${name}>`)

test/custom_elements/integration_test.rb

+6
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,10 @@ class CustomElements::IntegrationTest < ApplicationSystemTestCase
1818

1919
assert_text "connectedCallback(): some-name-element.js"
2020
end
21+
22+
test "namespace/demo_element.js connects" do
23+
visit elements_path
24+
25+
assert_text "connectedCallback(): demo_element.js"
26+
end
2127
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
export default class extends HTMLElement {
2+
constructor() {
3+
super()
4+
}
5+
6+
connectedCallback() {
7+
this.textContent = "connectedCallback(): demo_element.js"
8+
}
9+
}

test/dummy/app/views/elements/show.html.erb

+1
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@
33
<app-hello></app-hello>
44
<app-foo-bar></app-foo-bar>
55
<app-some-name></app-some-name>
6+
<app-namespace--demo></app-namespace--demo>

0 commit comments

Comments
 (0)