Skip to content

Commit 7ad1136

Browse files
committed
Replace ember-prism with highlight.js
highlight.js is easier to integrate with the app (via ember-auto-import) and doesn't require us to use any global variables etc. The remaining two `<pre>` usages got a `.terminal` CSS class in this commit to avoid styling conflicts.
1 parent 5728a99 commit 7ad1136

File tree

9 files changed

+77
-112
lines changed

9 files changed

+77
-112
lines changed

app/components/rendered-html.module.css

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,23 @@
1515
}
1616

1717
pre {
18-
overflow-x: auto;
18+
code {
19+
display: block;
20+
overflow-x: auto;
21+
padding: 1em;
22+
background-color: #f6f8fa;
23+
font-size: 85%;
24+
border-radius: 6px;
25+
}
1926
}
2027

2128
p {
2229
code {
23-
background-color: #fff;
24-
padding: 0 2px;
30+
background-color: #f6f8fa;
31+
border-radius: 6px;
32+
font-size: 85%;
33+
margin: 0;
34+
padding: .2em .4em;
2535
}
2636
}
2737

app/components/settings/api-tokens.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@
9797
its value again. For use on the command line you can save it to <code>~/.cargo/credentials</code>
9898
with:
9999

100-
<pre>cargo login {{token.token}}</pre>
100+
<pre class="terminal">cargo login {{token.token}}</pre>
101101
</div>
102102
</div>
103103
{{/if}}

app/modifiers/highlight-syntax.js

Lines changed: 46 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,55 @@
1-
/* global Prism */
21
import { modifier } from 'ember-modifier';
2+
import hljs from 'highlight.js/lib/core';
3+
import 'highlight.js/styles/github.css';
4+
import bash from 'highlight.js/lib/languages/bash';
5+
import c from 'highlight.js/lib/languages/c';
6+
import cpp from 'highlight.js/lib/languages/cpp';
7+
import csharp from 'highlight.js/lib/languages/csharp';
8+
import glsl from 'highlight.js/lib/languages/glsl';
9+
import go from 'highlight.js/lib/languages/go';
10+
import ini from 'highlight.js/lib/languages/ini';
11+
import javascript from 'highlight.js/lib/languages/javascript';
12+
import json from 'highlight.js/lib/languages/json';
13+
import protobuf from 'highlight.js/lib/languages/protobuf';
14+
import ruby from 'highlight.js/lib/languages/ruby';
15+
import rust from 'highlight.js/lib/languages/rust';
16+
import scss from 'highlight.js/lib/languages/scss';
17+
import sql from 'highlight.js/lib/languages/sql';
18+
import xml from 'highlight.js/lib/languages/xml';
19+
import yaml from 'highlight.js/lib/languages/yaml';
320

4-
Prism.plugins.NormalizeWhitespace.setDefaults({
5-
'left-trim': false,
6-
'right-trim': true,
7-
'remove-initial-line-feed': true,
8-
});
21+
hljs.registerLanguage('bash', bash);
22+
hljs.registerLanguage('c', c);
23+
hljs.registerLanguage('cpp', cpp);
24+
hljs.registerLanguage('csharp', csharp);
25+
hljs.registerLanguage('glsl', glsl);
26+
hljs.registerLanguage('go', go);
27+
hljs.registerLanguage('ini', ini);
28+
hljs.registerLanguage('javascript', javascript);
29+
hljs.registerLanguage('json', json);
30+
hljs.registerLanguage('protobuf', protobuf);
31+
hljs.registerLanguage('ruby', ruby);
32+
hljs.registerLanguage('rust', rust);
33+
hljs.registerLanguage('scss', scss);
34+
hljs.registerLanguage('sql', sql);
35+
hljs.registerLanguage('xml', xml);
36+
hljs.registerLanguage('yaml', yaml);
37+
38+
// these aliases are registered for compatibility with the Prism.js language names
39+
// that we used before.
40+
hljs.registerAliases('clike', { languageName: 'c' });
41+
hljs.registerAliases('markup', { languageName: 'xml' });
942

1043
export default modifier((element, _, { selector }) => {
1144
let elements = selector ? element.querySelectorAll(selector) : [element];
1245

1346
for (let element of elements) {
14-
Prism.highlightElement(element);
47+
// if the code block has no allowed language tag we use `no-highlight` to avoid highlighting
48+
let hasLanguageClass = [...element.classList].some(it => /^language-.+/.test(it));
49+
if (!hasLanguageClass) {
50+
element.classList.add('no-highlight');
51+
}
52+
53+
hljs.highlightElement(element);
1554
}
1655
});

app/styles/application.module.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ a {
6565
}
6666
}
6767

68-
pre {
68+
pre:global(.terminal) {
6969
background: var(--main-color);
7070
color: white;
7171
padding: 20px;

app/templates/error.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<h1>Something Went Wrong!</h1>
22
<h5 data-test-error-message>{{this.model.message}}</h5>
3-
<pre>
3+
<pre class="terminal">
44
{{this.model.stack}}
55
</pre>

ember-cli-build.js

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,6 @@ module.exports = function (defaults) {
88
let env = EmberApp.env();
99
let isProd = env === 'production';
1010

11-
const highlightedLanguages = [
12-
'bash',
13-
'c',
14-
'clike',
15-
'glsl',
16-
'go',
17-
'ini',
18-
'javascript',
19-
'json',
20-
'markup',
21-
'protobuf',
22-
'ruby',
23-
'rust',
24-
'scss',
25-
'sql',
26-
'toml',
27-
'yaml',
28-
];
29-
3011
let app = new EmberApp(defaults, {
3112
autoImport: {
3213
webpack: {
@@ -43,10 +24,6 @@ module.exports = function (defaults) {
4324
'ember-fetch': {
4425
preferNative: true,
4526
},
46-
'ember-prism': {
47-
theme: 'twilight',
48-
components: highlightedLanguages,
49-
},
5027

5128
cssModules: {
5229
extension: 'module.css',

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
"copy-text-to-clipboard": "3.0.1",
4444
"date-fns": "2.23.0",
4545
"fastboot-app-server": "3.0.0",
46+
"highlight.js": "11.2.0",
4647
"morgan": "1.10.0",
4748
"pretty-bytes": "5.6.0",
4849
"semver": "7.3.5",
@@ -94,7 +95,6 @@
9495
"ember-load-initializers": "2.1.2",
9596
"ember-modifier": "2.1.2",
9697
"ember-page-title": "6.2.2",
97-
"ember-prism": "0.9.1",
9898
"ember-qunit": "5.1.4",
9999
"ember-resolver": "8.0.2",
100100
"ember-router-scroll": "4.1.1",

tests/modifiers/highlight-syntax-test.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,9 @@ module('Modifier | highlight-syntax', function (hooks) {
1515
extern crate bitflags;
1616
</pre>
1717
`);
18-
assert.dom('.token').exists();
19-
assert.dom('.keyword').exists({ count: 2 });
18+
19+
assert.dom('.hljs-meta').exists();
20+
assert.dom('.hljs-keyword').exists({ count: 2 });
2021
});
2122

2223
test('accepts a `selector` argument', async function (assert) {
@@ -32,8 +33,8 @@ extern crate bitflags;
3233
</pre>
3334
</div>
3435
`);
35-
assert.dom('.a .token').doesNotExist();
36-
assert.dom('.b .token').exists();
37-
assert.dom('.b .keyword').exists({ count: 2 });
36+
assert.dom('.a .hljs-meta').doesNotExist();
37+
assert.dom('.b .hljs-meta').exists();
38+
assert.dom('.b .hljs-keyword').exists({ count: 2 });
3839
});
3940
});

yarn.lock

Lines changed: 8 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -1150,7 +1150,7 @@
11501150
ember-cli-babel "^7.22.1"
11511151
ember-compatibility-helpers "^1.1.1"
11521152

1153-
"@ember/[email protected]", "@ember/render-modifiers@^1.0.2":
1153+
11541154
version "1.0.2"
11551155
resolved "https://registry.yarnpkg.com/@ember/render-modifiers/-/render-modifiers-1.0.2.tgz#2e87c48db49d922ce4850d707215caaac60d8444"
11561156
integrity sha512-6tEnHl5+62NTSAG2mwhGMFPhUrJQjoVqV+slsn+rlTknm2Zik+iwxBQEbwaiQOU1FUYxkS8RWcieovRNMR8inQ==
@@ -4295,26 +4295,6 @@ broccoli-funnel-reducer@^1.0.0:
42954295
resolved "https://registry.yarnpkg.com/broccoli-funnel-reducer/-/broccoli-funnel-reducer-1.0.0.tgz#11365b2a785aec9b17972a36df87eef24c5cc0ea"
42964296
integrity sha1-ETZbKnha7JsXlyo234fu8kxcwOo=
42974297

4298-
broccoli-funnel@^1.0.1:
4299-
version "1.2.0"
4300-
resolved "https://registry.yarnpkg.com/broccoli-funnel/-/broccoli-funnel-1.2.0.tgz#cddc3afc5ff1685a8023488fff74ce6fb5a51296"
4301-
integrity sha1-zdw6/F/xaFqAI0iP/3TOb7WlEpY=
4302-
dependencies:
4303-
array-equal "^1.0.0"
4304-
blank-object "^1.0.1"
4305-
broccoli-plugin "^1.3.0"
4306-
debug "^2.2.0"
4307-
exists-sync "0.0.4"
4308-
fast-ordered-set "^1.0.0"
4309-
fs-tree-diff "^0.5.3"
4310-
heimdalljs "^0.2.0"
4311-
minimatch "^3.0.0"
4312-
mkdirp "^0.5.0"
4313-
path-posix "^1.0.0"
4314-
rimraf "^2.4.3"
4315-
symlink-or-copy "^1.0.0"
4316-
walk-sync "^0.3.1"
4317-
43184298
broccoli-funnel@^2.0.0, broccoli-funnel@^2.0.1, broccoli-funnel@^2.0.2:
43194299
version "2.0.2"
43204300
resolved "https://registry.yarnpkg.com/broccoli-funnel/-/broccoli-funnel-2.0.2.tgz#0edf629569bc10bd02cc525f74b9a38e71366a75"
@@ -4363,20 +4343,6 @@ broccoli-kitchen-sink-helpers@^0.3.1:
43634343
glob "^5.0.10"
43644344
mkdirp "^0.5.1"
43654345

4366-
broccoli-merge-trees@^1.1.1:
4367-
version "1.2.4"
4368-
resolved "https://registry.yarnpkg.com/broccoli-merge-trees/-/broccoli-merge-trees-1.2.4.tgz#a001519bb5067f06589d91afa2942445a2d0fdb5"
4369-
integrity sha1-oAFRm7UGfwZYnZGvopQkRaLQ/bU=
4370-
dependencies:
4371-
broccoli-plugin "^1.3.0"
4372-
can-symlink "^1.0.0"
4373-
fast-ordered-set "^1.0.2"
4374-
fs-tree-diff "^0.5.4"
4375-
heimdalljs "^0.2.1"
4376-
heimdalljs-logger "^0.1.7"
4377-
rimraf "^2.4.3"
4378-
symlink-or-copy "^1.0.0"
4379-
43804346
broccoli-merge-trees@^2.0.0:
43814347
version "2.0.1"
43824348
resolved "https://registry.yarnpkg.com/broccoli-merge-trees/-/broccoli-merge-trees-2.0.1.tgz#14d4b7fc1a90318c12b16f843e6ba2693808100c"
@@ -6576,18 +6542,6 @@ [email protected]:
65766542
lodash-es "^4.17.11"
65776543
miragejs "^0.1.31"
65786544

6579-
ember-cli-node-assets@^0.2.2:
6580-
version "0.2.2"
6581-
resolved "https://registry.yarnpkg.com/ember-cli-node-assets/-/ember-cli-node-assets-0.2.2.tgz#d2d55626e7cc6619f882d7fe55751f9266022708"
6582-
integrity sha1-0tVWJufMZhn4gtf+VXUfkmYCJwg=
6583-
dependencies:
6584-
broccoli-funnel "^1.0.1"
6585-
broccoli-merge-trees "^1.1.1"
6586-
broccoli-source "^1.1.0"
6587-
debug "^2.2.0"
6588-
lodash "^4.5.1"
6589-
resolve "^1.1.7"
6590-
65916545
ember-cli-normalize-entity-name@^1.0.0:
65926546
version "1.0.0"
65936547
resolved "https://registry.yarnpkg.com/ember-cli-normalize-entity-name/-/ember-cli-normalize-entity-name-1.0.0.tgz#0b14f7bcbc599aa117b5fddc81e4fd03c4bad5b7"
@@ -7095,17 +7049,6 @@ [email protected]:
70957049
dependencies:
70967050
ember-cli-babel "^7.23.1"
70977051

7098-
7099-
version "0.9.1"
7100-
resolved "https://registry.yarnpkg.com/ember-prism/-/ember-prism-0.9.1.tgz#0d8a993cfe86dc446212cd40fcaaef247c9ba0d6"
7101-
integrity sha512-zeCjlQVlaIiO2EAkS8JLHTXMPCopNEvZsFNuA8BiemXjGJs5rKcSv+UYr4jm4oS4ISTwyUORmP4oLPkA3ZY+YA==
7102-
dependencies:
7103-
"@ember/render-modifiers" "^1.0.2"
7104-
ember-cli-babel "^7.22.1"
7105-
ember-cli-htmlbars "^5.3.1"
7106-
ember-cli-node-assets "^0.2.2"
7107-
prismjs "^1.22.0"
7108-
71097052
71107053
version "5.1.4"
71117054
resolved "https://registry.yarnpkg.com/ember-qunit/-/ember-qunit-5.1.4.tgz#bc69f963a0f5409ce33bee1e4d8146b1407147bf"
@@ -7819,11 +7762,6 @@ execa@^5.0.0:
78197762
signal-exit "^3.0.3"
78207763
strip-final-newline "^2.0.0"
78217764

7822-
7823-
version "0.0.4"
7824-
resolved "https://registry.yarnpkg.com/exists-sync/-/exists-sync-0.0.4.tgz#9744c2c428cc03b01060db454d4b12f0ef3c8879"
7825-
integrity sha1-l0TCxCjMA7AQYNtFTUsS8O88iHk=
7826-
78277765
exit@^0.1.2:
78287766
version "0.1.2"
78297767
resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
@@ -7985,7 +7923,7 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6:
79857923
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
79867924
integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
79877925

7988-
fast-ordered-set@^1.0.0, fast-ordered-set@^1.0.2:
7926+
fast-ordered-set@^1.0.0:
79897927
version "1.0.3"
79907928
resolved "https://registry.yarnpkg.com/fast-ordered-set/-/fast-ordered-set-1.0.3.tgz#3fbb36634f7be79e4f7edbdb4a357dee25d184eb"
79917929
integrity sha1-P7s2Y097555PftvbSjV97iXRhOs=
@@ -9017,6 +8955,11 @@ heimdalljs@^0.3.0:
90178955
dependencies:
90188956
rsvp "~3.2.1"
90198957

8958+
8959+
version "11.2.0"
8960+
resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-11.2.0.tgz#a7e3b8c1fdc4f0538b93b2dc2ddd53a40c6ab0f0"
8961+
integrity sha512-JOySjtOEcyG8s4MLR2MNbLUyaXqUunmSnL2kdV/KuGJOmHZuAR5xC54Ko7goAXBWNhf09Vy3B+U7vR62UZ/0iw==
8962+
90208963
hmac-drbg@^1.0.1:
90218964
version "1.0.1"
90228965
resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
@@ -10483,7 +10426,7 @@ lodash.values@^4.3.0:
1048310426
resolved "https://registry.yarnpkg.com/lodash.values/-/lodash.values-4.3.0.tgz#a3a6c2b0ebecc5c2cba1c17e6e620fe81b53d347"
1048410427
integrity sha1-o6bCsOvsxcLLocF+bmIP6BtT00c=
1048510428

10486-
lodash@^4.17.10, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.5.1, lodash@^4.7.0:
10429+
lodash@^4.17.10, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.7.0:
1048710430
version "4.17.21"
1048810431
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
1048910432
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
@@ -12254,11 +12197,6 @@ printf@^0.6.1:
1225412197
resolved "https://registry.yarnpkg.com/printf/-/printf-0.6.1.tgz#b9afa3d3b55b7f2e8b1715272479fc756ed88650"
1225512198
integrity sha512-is0ctgGdPJ5951KulgfzvHGwJtZ5ck8l042vRkV6jrkpBzTmb/lueTqguWHy2JfVA+RY6gFVlaZgUS0j7S/dsw==
1225612199

12257-
prismjs@^1.22.0:
12258-
version "1.24.1"
12259-
resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.24.1.tgz#c4d7895c4d6500289482fa8936d9cdd192684036"
12260-
integrity sha512-mNPsedLuk90RVJioIky8ANZEwYm5w9LcvCXrxHlwf4fNVSn8jEipMybMkWUyyF0JhnC+C4VcOVSBuHRKs1L5Ow==
12261-
1226212200
private@^0.1.6, private@^0.1.8:
1226312201
version "0.1.8"
1226412202
resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"

0 commit comments

Comments
 (0)