Skip to content

Commit 274719d

Browse files
authored
Remove ember-prism, use primsjs in docs (#940)
* Remove `ember-prism` * Fix tests * Fix tests
1 parent 92f4532 commit 274719d

File tree

11 files changed

+2496
-2393
lines changed

11 files changed

+2496
-2393
lines changed

docs/app/app.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,20 @@ import Application from '@ember/application';
22
import Resolver from 'ember-resolver';
33
import loadInitializers from 'ember-load-initializers';
44
import config from 'docs/config/environment';
5+
// @ts-expect-error no types shipped from prismjs
6+
import Prism from 'prismjs';
7+
import 'prismjs/plugins/normalize-whitespace/prism-normalize-whitespace';
8+
import 'prismjs/components/prism-css';
9+
import 'prismjs/components/prism-scss';
10+
import 'prismjs/components/prism-javascript';
11+
import 'prismjs/components/prism-handlebars';
12+
import 'prismjs/components/prism-markup-templating';
13+
// @ts-expect-error no types shipped from prismjs-glimmer
14+
import { setup } from 'prismjs-glimmer';
15+
16+
import 'prismjs/themes/prism.css';
17+
18+
setup(Prism);
519

620
export default class App extends Application {
721
modulePrefix = config.modulePrefix;

docs/app/components/code-block.hbs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<pre
2+
class="{{this.languageClass}} {{if @showLineNumbers "line-numbers"}}"
3+
data-start={{@start}}
4+
>
5+
{{~! ~}}
6+
<CodeInline
7+
...attributes
8+
@code={{@code}}
9+
@language={{@language}}
10+
/>
11+
{{~! ~}}
12+
</pre>

docs/app/components/code-block.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import Component from '@glimmer/component';
2+
3+
interface CodeBlockSignature {
4+
Element: HTMLElement;
5+
Args: {
6+
code: string;
7+
language?: string;
8+
showLineNumbers?: boolean;
9+
start?: string;
10+
};
11+
}
12+
13+
export default class CodeBlock extends Component<CodeBlockSignature> {
14+
get language() {
15+
return this.args.language ?? 'markup';
16+
}
17+
18+
get languageClass() {
19+
return `language-${this.language}`;
20+
}
21+
}
22+
23+
declare module '@glint/environment-ember-loose/registry' {
24+
export default interface Registry {
25+
CodeBlock: typeof CodeBlock;
26+
}
27+
}

docs/app/templates/components/code-example.hbs renamed to docs/app/components/code-example.hbs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@
1818
</nav>
1919
{{#if (and @hbs (eq this.activeTab 'hbs'))}}
2020
{{#let (get-code-snippet @hbs) as |snippet|}}
21-
<CodeBlock @language="markup" @code={{snippet.source}} />
21+
<CodeBlock @language="handlebars" @code={{snippet.source}} />
2222
{{/let}}
2323
{{/if}}
2424
{{#if @hbs2}}
2525
{{#let (get-code-snippet @hbs2) as |snippet|}}
26-
<CodeBlock @language="markup" @code={{snippet.source}} />
26+
<CodeBlock @language="handlebars" @code={{snippet.source}} />
2727
{{/let}}
2828
{{/if}}
2929
{{#if (and @js (eq this.activeTab 'js'))}}

docs/app/components/code-inline.hbs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<code
2+
...attributes
3+
class="{{this.languageClass}}"
4+
{{this.setPrismCode}}
5+
>
6+
{{~! ~}}{{this.prismCode}}{{~! ~}}
7+
</code>

docs/app/components/code-inline.ts

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import Component from '@glimmer/component';
2+
import { modifier } from 'ember-modifier';
3+
import { htmlSafe, type SafeString } from '@ember/template';
4+
import { tracked } from '@glimmer/tracking';
5+
import { assert } from '@ember/debug';
6+
7+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
8+
declare const Prism: any;
9+
10+
interface CodeInlineSignature {
11+
Element: HTMLElement;
12+
Args: {
13+
code: string;
14+
language?: string;
15+
};
16+
}
17+
18+
export default class CodeInline extends Component<CodeInlineSignature> {
19+
@tracked prismCode: string | SafeString = '';
20+
21+
get code() {
22+
const code = this.args.code;
23+
24+
assert(
25+
"ember-prism's <CodeBlock/> and <CodeInline/> components require a `code` parameter to be passed in.",
26+
code !== undefined,
27+
);
28+
if (Prism?.plugins?.NormalizeWhitespace) {
29+
return Prism.plugins.NormalizeWhitespace.normalize(code);
30+
}
31+
32+
return code;
33+
}
34+
35+
get language() {
36+
return this.args.language ?? 'markup';
37+
}
38+
39+
get languageClass() {
40+
return `language-${this.language}`;
41+
}
42+
43+
setPrismCode = modifier((element: Element) => {
44+
const code = this.code;
45+
const language = this.language;
46+
const grammar = Prism.languages[language];
47+
48+
if (code && language && grammar) {
49+
this.prismCode = htmlSafe(Prism.highlight(code, grammar, language));
50+
} else {
51+
this.prismCode = '';
52+
}
53+
54+
// Force plugin initialization, required for Prism.highlight usage.
55+
// See https://github.com/PrismJS/prism/issues/1234
56+
Prism.hooks.run('complete', {
57+
code,
58+
element,
59+
});
60+
});
61+
}
62+
63+
declare module '@glint/environment-ember-loose/registry' {
64+
export default interface Registry {
65+
CodeInline: typeof CodeInline;
66+
}
67+
}

docs/ember-cli-build.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,6 @@ module.exports = function (defaults) {
77
let app = new EmberApp(defaults, {
88
'ember-cli-babel': { enableTypeScriptTransform: true },
99
snippetPaths: ['app/components/snippets', 'app/templates/snippets'],
10-
'ember-prism': {
11-
components: ['scss', 'javascript', 'handlebars', 'markup-templating'], //needs to be an array, or undefined.
12-
},
1310
prember: {
1411
urls: crawl,
1512
},

docs/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,6 @@
9393
"ember-load-initializers": "^2.1.2",
9494
"ember-modifier": "^4.2.0",
9595
"ember-page-title": "^8.2.3",
96-
"ember-prism": "^1.0.0",
9796
"ember-qunit": "^8.1.0",
9897
"ember-resolver": "^12.0.1",
9998
"ember-source": "~5.11.0",
@@ -109,6 +108,8 @@
109108
"loader.js": "^4.7.0",
110109
"prember": "~2.1.0",
111110
"prember-crawler": "^1.0.0",
111+
"prismjs": "^1.29.0",
112+
"prismjs-glimmer": "^1.1.1",
112113
"prettier": "^3.3.3",
113114
"prettier-plugin-ember-template-tag": "^2.0.2",
114115
"qunit": "^2.22.0",
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { module, test } from 'qunit';
2+
import { setupRenderingTest } from 'docs/tests/helpers';
3+
import { render } from '@ember/test-helpers';
4+
import { hbs } from 'ember-cli-htmlbars';
5+
6+
module('Integration | Component | code-block', function (hooks) {
7+
setupRenderingTest(hooks);
8+
9+
test('it renders', async function (assert) {
10+
// Set any properties with this.set('myProperty', 'value');
11+
// Handle any actions with this.set('myAction', function(val) { ... });
12+
13+
await render(
14+
hbs`<CodeBlock @language="js" @code="console.log('hello');" />`,
15+
);
16+
17+
assert.dom().hasText("console.log('hello');");
18+
});
19+
});
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { module, test } from 'qunit';
2+
import { setupRenderingTest } from 'docs/tests/helpers';
3+
import { render } from '@ember/test-helpers';
4+
import { hbs } from 'ember-cli-htmlbars';
5+
6+
module('Integration | Component | code-inline', function (hooks) {
7+
setupRenderingTest(hooks);
8+
9+
test('it renders', async function (assert) {
10+
// Set any properties with this.set('myProperty', 'value');
11+
// Handle any actions with this.set('myAction', function(val) { ... });
12+
13+
await render(
14+
hbs`<CodeInline @language="js" @code="console.log('hello');" />`,
15+
);
16+
17+
assert.dom().hasText("console.log('hello');");
18+
});
19+
});

0 commit comments

Comments
 (0)