Skip to content

Commit a125218

Browse files
committed
TCA-352 - fix text formatting for code blocks
1 parent 3acfee6 commit a125218

File tree

3 files changed

+31
-7
lines changed

3 files changed

+31
-7
lines changed

client/src/components/layouts/prism-night.css

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
*/
77

88
.dark-palette code[class*='language-'],
9-
.dark-palette pre[class*='language-'] {
9+
.dark-palette code[class*='language-'],
10+
pre[class*='language-'].dark-palette {
1011
color: var(--secondary-color);
1112
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
1213
font-size: 1em;
@@ -28,11 +29,13 @@
2829
text-shadow: none;
2930
}
3031

32+
pre[class*='language-'].dark-palette code[class*='language-'],
3133
.dark-palette pre[class*='language-'] code[class*='language-'] {
3234
color: var(--quaternary-color);
3335
}
3436

3537
/* Code blocks */
38+
pre[class*='language-'].dark-palette,
3639
.dark-palette pre[class*='language-'] {
3740
padding: 1em;
3841
margin: 0.5em 0;
@@ -47,12 +50,15 @@ padding in night mode */
4750
}
4851

4952
.dark-palette :not(pre) > code[class*='language-'],
53+
pre[class*='language-'].dark-palette,
5054
.dark-palette pre[class*='language-'] {
5155
background: var(--primary-background);
5256
}
5357

5458
.dark-palette pre[class*='language-']::selection,
59+
pre[class*='language-'].dark-palette::selection,
5560
.dark-palette pre[class*='language-'] ::selection,
61+
pre[class*='language-'].dark-palette ::selection,
5662
.dark-palette code[class*='language-']::selection,
5763
.dark-palette code[class*='language-'] ::selection {
5864
background: var(--selection-color);

client/src/templates/Challenges/components/prism-formatted.tsx

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,37 @@ import React, { useRef, useEffect } from 'react';
44
interface PrismFormattedProps {
55
className?: string;
66
text: string;
7+
lineNumbers?: boolean;
8+
darkTheme?: boolean;
79
}
810

9-
function PrismFormatted({ className, text }: PrismFormattedProps): JSX.Element {
11+
/**
12+
* Add css formatting classes to the <pre> elements based on showLineNumbers and darkTheme params
13+
* @param container
14+
* @param showLineNumbers
15+
* @param darkTheme
16+
*/
17+
const addFormattingClassesForPres = (container: HTMLElement, showLineNumbers = true, darkTheme = true) => {
18+
const codeBlocks: HTMLElement[] = [].slice.call(container.querySelectorAll('[class*="language-"]'));
19+
// we want to formatt the <pre> element, not the <code>, get parent if current element is not PRE
20+
const preElements: HTMLPreElement[] = codeBlocks.map(c => (c.nodeName === 'PRE' ? c : c.parentElement) as HTMLPreElement);
21+
22+
for(const pre of preElements) {
23+
pre.classList.toggle('line-numbers', showLineNumbers);
24+
pre.classList.toggle('dark-palette', darkTheme);
25+
}
26+
}
27+
28+
function PrismFormatted({ className, text, ...props }: PrismFormattedProps): JSX.Element {
1029
const instructionsRef = useRef<HTMLDivElement>(null);
1130

1231
useEffect(() => {
1332
// Just in case 'current' has not been created, though it should have been.
1433
if (instructionsRef.current) {
34+
addFormattingClassesForPres(instructionsRef.current, props.lineNumbers, props.darkTheme);
1535
Prism.highlightAllUnder(instructionsRef.current);
1636
}
17-
}, []);
37+
}, [props.darkTheme, props.lineNumbers]);
1838

1939
return (
2040
<div

client/src/templates/Challenges/video/Show.tsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@ class ShowVideo extends Component<ShowVideoProps, ShowVideoState> {
202202
const blockNameTitle = `${t(
203203
`intro:${superBlock}.blocks.${block}.title`
204204
)} - ${title}`;
205+
205206
return (
206207
<Hotkeys
207208
executeChallenge={() => this.handleSubmit(solution)}
@@ -245,10 +246,7 @@ class ShowVideo extends Component<ShowVideoProps, ShowVideoState> {
245246
className='video-description'
246247
>
247248
<ChallengeDescription description={description} />
248-
<PrismFormatted
249-
className={'dark-palette line-numbers'}
250-
text={text}
251-
/>
249+
<PrismFormatted text={text} />
252250
<Spacer />
253251
<ObserveKeys>
254252
<div className='video-quiz-options'>

0 commit comments

Comments
 (0)