Skip to content

Commit d9e32a3

Browse files
committed
Implement highlight-syntax modifier
1 parent bbcd05b commit d9e32a3

File tree

2 files changed

+47
-0
lines changed

2 files changed

+47
-0
lines changed

app/modifiers/highlight-syntax.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
/* global Prism */
2+
import { modifier } from 'ember-modifier';
3+
4+
export default modifier((element, _, { selector }) => {
5+
let elements = selector ? element.querySelectorAll(selector) : [element];
6+
7+
for (let element of elements) {
8+
Prism.highlightElement(element);
9+
}
10+
});
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import { module, test } from 'qunit';
2+
import { setupRenderingTest } from 'ember-qunit';
3+
import { render } from '@ember/test-helpers';
4+
import { hbs } from 'ember-cli-htmlbars';
5+
6+
module('Modifier | highlight-syntax', function(hooks) {
7+
setupRenderingTest(hooks);
8+
9+
test('uses Prism.js to apply syntax highlighting', async function(assert) {
10+
await render(hbs`
11+
<pre class="language-rust" {{highlight-syntax}}>
12+
#[macro_use]
13+
extern crate bitflags;
14+
</pre>
15+
`);
16+
assert.dom('.token').exists();
17+
assert.dom('.keyword').exists({ count: 2 });
18+
});
19+
20+
test('accepts a `selector` argument', async function(assert) {
21+
await render(hbs`
22+
<div {{highlight-syntax selector=".b"}}>
23+
<pre class="language-rust a">
24+
#[macro_use]
25+
extern crate bitflags;
26+
</pre>
27+
<pre class="language-rust b">
28+
#[macro_use]
29+
extern crate bitflags;
30+
</pre>
31+
</div>
32+
`);
33+
assert.dom('.a .token').doesNotExist();
34+
assert.dom('.b .token').exists();
35+
assert.dom('.b .keyword').exists({ count: 2 });
36+
});
37+
});

0 commit comments

Comments
 (0)