diff --git a/addon/components/dynamic-template.hbs b/addon/components/dynamic-template.hbs new file mode 100644 index 0000000..ea7ebc8 --- /dev/null +++ b/addon/components/dynamic-template.hbs @@ -0,0 +1,7 @@ +{{#if false}} + {{!-- This is just here to tell embroider to include in + any bundle that is used in --}} + +{{/if}} + +{{component (ensure-safe-component this.component)}} \ No newline at end of file diff --git a/addon/components/dynamic-template.js b/addon/components/dynamic-template.js index 9b6f591..f423299 100644 --- a/addon/components/dynamic-template.js +++ b/addon/components/dynamic-template.js @@ -1,21 +1,14 @@ -/* eslint-disable ember/no-classic-components, ember/no-classic-classes, prettier/prettier, no-console */ - -import Component from '@ember/component'; -import GlimmerComponent from '@glimmer/component'; -import layout from '../templates/components/dynamic-template'; - -import { computed } from '@ember/object'; +import { setComponentTemplate } from '@ember/component'; import { getOwner } from '@ember/application'; import { compileTemplate } from '@ember/template-compilation'; +import { importSync } from '@embroider/macros'; +import Component from '@glimmer/component'; let templateOwnerMap = new Map(); -let templateId = 0; -export default Component.extend({ - tagName: '', - layout, - init() { - this._super(...arguments); +export default class DynamicTemplateComponent extends Component { + constructor() { + super(...arguments); let owner = getOwner(this); let templateMap = templateOwnerMap.get(owner); @@ -23,39 +16,53 @@ export default Component.extend({ templateMap = templateOwnerMap.set(owner, new Map()); } this.templateMap = templateMap; - }, + } - componentName: computed('templateString', 'componentId', function() { - let { templateMap, templateString } = this; - if (!templateString) { return null; } + get component() { + let owner = getOwner(this); - let componentName = templateMap.get(templateString); - if (componentName === undefined) { - let owner = getOwner(this); + let { templateString } = this.args; + if (!templateString) { + return null; + } + let component = this.templateMap.get(templateString); + if (component === undefined) { let compiledTemplate; try { compiledTemplate = compileTemplate(templateString); } catch (err) { console.error(err); console.error(templateString); - compiledTemplate = compileTemplate(``) + compiledTemplate = compileTemplate(``); } - let component = owner.factoryFor(`component:${this.componentId}`); + component = owner.factoryFor(`component:${this.args.componentId}`); - if(!component) { - component = class extends GlimmerComponent {}; + if (component) { + component = class extends component.class {}; } else { - component = class extends component.class {} + // if component couldn't be found the old way try importing it directly + let module; + try { + module = importSync(`/docs/${this.args.componentId}.js`); + } catch (err) { + // backing class doesn't exist so just ignore the error + } + + component = module?.default; + } + + if (!component) { + component = class extends Component {}; } - componentName = `some-prefix-${templateId++}`; + setComponentTemplate(compiledTemplate, component); - owner.register(`component:${componentName}`, component); - owner.register(`template:components/${componentName}`, compiledTemplate); + // eslint-disable-next-line ember/no-side-effects + this.templateMap.set(templateString, component); } - return componentName; - }) -}); + return component; + } +} diff --git a/addon/services/head-data.js b/addon/services/head-data.js index bfbb430..e5c3909 100644 --- a/addon/services/head-data.js +++ b/addon/services/head-data.js @@ -2,7 +2,6 @@ import HeadDataService from 'ember-meta/services/head-data'; import { computed } from '@ember/object'; import config from 'ember-get-config'; -import innertext from 'innertext'; import { getExcerpt, stripHTML } from 'ember-html-excerpt/helpers/excerpt'; @@ -24,10 +23,6 @@ export default class CustomHeadDataService extends HeadDataService { return this.currentRouteMeta?.title ?? `${this.config.name} - ${this.config.tagLine ?? 'Field Guide'}`; } - get content() { - return innertext(this.currentRouteMeta.html); - } - @computed('currentRouteMeta') get description() { let currentModel = this.currentRouteMeta; diff --git a/addon/templates/components/dynamic-template.hbs b/addon/templates/components/dynamic-template.hbs deleted file mode 100644 index 304b2c1..0000000 --- a/addon/templates/components/dynamic-template.hbs +++ /dev/null @@ -1 +0,0 @@ -{{component (ensure-safe-component (component this.componentName)) tagName=""}} \ No newline at end of file diff --git a/index.js b/index.js index 72ded25..6c935b0 100644 --- a/index.js +++ b/index.js @@ -90,9 +90,18 @@ module.exports = { subdir: 'docs', }); + let backingClasses = new Funnel( + 'docs', + { + destDir: 'docs', + include: ['**/*.js'] + } + ); + return new MergeTrees([ docs, toc, + backingClasses, ]); }, diff --git a/package.json b/package.json index 6b7045c..ba775ad 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ }, "dependencies": { "@babel/core": "^7.24.4", + "@embroider/macros": "^1.16.5", "@embroider/util": "^1.13.2", "@glimmer/component": "^1.1.2", "broccoli-funnel": "^3.0.3", @@ -47,7 +48,6 @@ "ember-meta": "^2.0.0", "ember-prism": "^0.13.0", "empress-blueprint-helpers": "^1.2.1", - "innertext": "^1.0.3", "resolve": "^1.17.0", "walk-sync": "^2.2.0" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c362b35..c64d366 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ dependencies: '@babel/core': specifier: ^7.24.4 version: 7.24.9 + '@embroider/macros': + specifier: ^1.16.5 + version: 1.16.5 '@embroider/util': specifier: ^1.13.2 version: 1.13.2(ember-source@5.8.0) @@ -56,9 +59,6 @@ dependencies: empress-blueprint-helpers: specifier: ^1.2.1 version: 1.2.1 - innertext: - specifier: ^1.0.3 - version: 1.0.3 resolve: specifier: ^1.17.0 version: 1.22.8 @@ -7666,10 +7666,6 @@ packages: whatwg-encoding: 2.0.0 dev: true - /html-entities@1.4.0: - resolution: {integrity: sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==} - dev: false - /html-tags@3.3.1: resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} engines: {node: '>=8'} @@ -7894,12 +7890,6 @@ packages: xtend: 4.0.2 dev: true - /innertext@1.0.3: - resolution: {integrity: sha512-ZC410b7IbrTrmt8bQb27xUOJgXkJu+XL6MVncb9FGyxjRIHyQqNjpSDY20zvSUttkAiYj0dait/67/sXyWvwYg==} - dependencies: - html-entities: 1.4.0 - dev: false - /inquirer@6.5.2: resolution: {integrity: sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==} engines: {node: '>=6.0.0'} diff --git a/tests/acceptance/meta-test-test.js b/tests/acceptance/meta-test-test.js index 55330ea..ec6650c 100644 --- a/tests/acceptance/meta-test-test.js +++ b/tests/acceptance/meta-test-test.js @@ -2,7 +2,7 @@ import { module, test } from 'qunit'; import { visit } from '@ember/test-helpers'; import { setupApplicationTest } from 'ember-qunit'; -import config from '../../config/environment'; +import config from 'ember-get-config'; let originalConfig;