Skip to content

Commit 57a03bb

Browse files
authored
Merge pull request #522 from camerondubas/fix/doc-code-snippets
Fix code blocks not rendering on documentation site
2 parents fe2c335 + 37e0078 commit 57a03bb

File tree

6 files changed

+224
-59
lines changed

6 files changed

+224
-59
lines changed

ember-cli-build.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ module.exports = function (defaults) {
1313
snippetPaths: ['tests/dummy/snippets'],
1414
snippetSearchPaths: ['app', 'tests/dummy/app', 'addon'],
1515

16+
'ember-prism': {
17+
components: ['javascript', 'typescript', 'bash', 'markup'],
18+
},
19+
1620
emberCliFontAwesome: {
1721
useScss: true,
1822
},

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,13 @@
5858
"ember-cli-inject-live-reload": "^2.1.0",
5959
"ember-cli-sass": "^10.0.1",
6060
"ember-cli-terser": "^4.0.2",
61-
"ember-code-snippet": "^2.4.0",
61+
"ember-code-snippet": "^3.0.0",
6262
"ember-concurrency-ts": "^0.3.1",
6363
"ember-fn-helper-polyfill": "^1.0.2",
6464
"ember-load-initializers": "^2.1.2",
6565
"ember-modifier": "^3.2.7",
6666
"ember-page-title": "^7.0.0",
67+
"ember-prism": "^0.13.0",
6768
"ember-qunit": "^6.2.0",
6869
"ember-resolver": "^10.0.0",
6970
"ember-sinon-qunit": "^7.1.4",
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import Component from '@ember/component';
2+
import { getCodeSnippet } from 'ember-code-snippet';
3+
import { computed } from '@ember/object';
4+
5+
export default class CodeTemplateToggleComponent extends Component {
6+
tagName = '';
7+
8+
@computed('name')
9+
get snippet() {
10+
return getCodeSnippet(this.name);
11+
}
12+
13+
get language() {
14+
if (this.snippet.language === 'handlebars') {
15+
return 'markup';
16+
}
17+
18+
return this.snippet.language;
19+
}
20+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<CodeBlock @code={{this.snippet.source}} @language={{this.language}} />
Lines changed: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import Component from '@ember/component';
22
import { action } from '@ember/object';
33
import { guidFor } from '@ember/object/internals';
4-
import { cancel, schedule } from '@ember/runloop';
54

65
export default class CodeTemplateToggleComponent extends Component {
76
tagName = '';
@@ -10,40 +9,53 @@ export default class CodeTemplateToggleComponent extends Component {
109
showCode = true;
1110
_toggleTimer = null;
1211

12+
maxHeight = 0;
13+
resizeObserver;
14+
1315
didInsertElement() {
1416
super.didInsertElement(...arguments);
15-
this._toggleTimer = schedule('afterRender', null, () => {
16-
const element = document.getElementById(this.id);
17-
18-
if (!element) {
19-
return;
20-
}
21-
22-
let sectionToggles = element.querySelectorAll(
23-
'.code-template-toggle-section'
24-
);
25-
let maxHeight = Math.max.apply(
26-
null,
27-
[].map.call(sectionToggles, function (el) {
28-
return el.offsetHeight;
29-
})
30-
);
31-
32-
let toggle = element.querySelector('.code-template-toggle');
17+
const element = document.getElementById(this.id);
18+
if (!element) {
19+
return;
20+
}
3321

22+
const resizeObserver = this._createResizeObserver((maxHeight) => {
23+
const toggle = element.querySelector('.code-template-toggle');
3424
if (toggle) {
3525
toggle.style.height = `${maxHeight}px`;
3626
}
3727
});
28+
this.set('resizeObserver', resizeObserver);
29+
30+
const sectionToggles = element.querySelectorAll(
31+
'.code-template-toggle-section'
32+
);
33+
34+
sectionToggles.forEach((sectionToggle) => {
35+
resizeObserver.observe(sectionToggle);
36+
});
3837
}
3938

4039
willDestroyElement() {
4140
super.willDestroyElement(...arguments);
42-
cancel(this._toggleTimer);
41+
this.resizeObserver.disconnect();
4342
}
4443

4544
@action
4645
toggle() {
4746
this.toggleProperty('showCode');
4847
}
48+
49+
_createResizeObserver(onMaxHeightChange) {
50+
return new ResizeObserver((entries) => {
51+
const maxHeight = entries
52+
.map((entry) => entry.contentRect.height)
53+
.reduce((a, b) => Math.max(a, b));
54+
55+
if (maxHeight > this.maxHeight) {
56+
this.maxHeight = maxHeight;
57+
onMaxHeightChange && onMaxHeightChange(maxHeight);
58+
}
59+
});
60+
}
4961
}

0 commit comments

Comments
 (0)