Skip to content
This repository was archived by the owner on Sep 3, 2025. It is now read-only.
6 changes: 6 additions & 0 deletions pages/demo.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import React from 'react'
import EpisodePageWrapper from 'src/components/EpisodePageWrapper'

const Demo = () => <EpisodePageWrapper episodeNumber={0} demo />

export default Demo
9 changes: 9 additions & 0 deletions scripts/lib/initialExpressionContainers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -358,6 +358,15 @@ export const vibe = initializeExpressionContainer([
}
])

export const lbkw = initializeExpressionContainer([
{
shorthandFunc: 'add'
},
{
shorthandNumber: 2
}
])

export const kfwf = initializeExpressionContainer([
{
shorthandFunc: 'add'
Expand Down
16 changes: 14 additions & 2 deletions scripts/lib/runnerConfigs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -875,6 +875,11 @@ export const lizi: ExpressionRunnerShorthandConfig = {
initialExpressionContainer: initialExpressionContainers.vibe
}

export const gnwm: ExpressionRunnerShorthandConfig = {
runner: 'simple',
initialExpressionContainer: initialExpressionContainers.lbkw
}

export const mcug: ExpressionRunnerShorthandConfig = {
runner: 'playButtonOnly',
initialExpressionContainer: initialExpressionContainers.vibe
Expand Down Expand Up @@ -967,8 +972,7 @@ export const pgxb: ExpressionRunnerShorthandConfig = {
initialExpressionContainers: [
initialExpressionContainers.bmar,
initialExpressionContainers.ilbg
],
variableSize: 'md'
]
}

export const ednv: ExpressionRunnerShorthandConfig = {
Expand Down Expand Up @@ -1330,6 +1334,14 @@ export const plde: ExpressionRunnerShorthandConfig = {
variableSize: 'md'
}

export const rjzw: ExpressionRunnerShorthandConfig = {
runner: 'playButtonOnly',
initialExpressionContainer: initialExpressionContainers.uqth,
showPriorities: true,
variableSize: 'md',
skipToTheEnd: false
}

export const jsvg: ExpressionRunnerShorthandConfig = {
runner: 'playButtonOnly',
initialExpressionContainer: initialExpressionContainers.uqth,
Expand Down
8 changes: 8 additions & 0 deletions src/components/DemoCardList.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import React from 'react'
import DemoJp from 'src/contents/demo.jp'
import DemoEn from 'src/contents/demo.en'
import locale from 'src/lib/locale'

const DemoCardList = () => (locale === 'en' ? <DemoEn /> : <DemoJp />)

export default DemoCardList
8 changes: 6 additions & 2 deletions src/components/EpisodeCardList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,12 @@ export type EpisodeCardListType = readonly EpisodeCardType[]
const EpisodeCardList = ({
cards,
notFound,
demo,
underConstruction
}: {
cards: EpisodeCardListType
notFound: boolean
demo: boolean
underConstruction?: boolean
}) => {
const { episodeNumber } = useContext(EpisodeContext)
Expand All @@ -46,7 +48,7 @@ const EpisodeCardList = ({
return (
<>
<EpisodePageInitialRenderWarning />
<EpisodeHero />
<EpisodeHero demo={demo} notFound={notFound} />
<>
{underConstruction && (
<CardWrapper
Expand Down Expand Up @@ -118,6 +120,7 @@ const EpisodeCardList = ({
)}
{shareVisible &&
!notFound &&
!demo &&
cards.length - 1 === lastVisibleCardIndex && (
<div
css={css`
Expand Down Expand Up @@ -172,7 +175,8 @@ const EpisodeCardList = ({
}

EpisodeCardList.defaultProps = {
notFound: false
notFound: false,
demo: false
}

export default EpisodeCardList
41 changes: 31 additions & 10 deletions src/components/EpisodeHero.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,13 @@ const commonTitleClasses = css`
text-align: center;
`

const EpisodeHero = () => {
const EpisodeHero = ({
demo,
notFound
}: {
demo: boolean
notFound: boolean
}) => {
const { episodeTitle, episodeNumber } = useContext(EpisodeContext)
return (
<header
Expand All @@ -33,7 +39,7 @@ const EpisodeHero = () => {
`}
>
<>
{episodeTitle ? (
{episodeTitle || demo || notFound ? (
<>
<h3
css={[
Expand Down Expand Up @@ -72,7 +78,13 @@ const EpisodeHero = () => {
`
]}
>
{episodeTitle}
{notFound ? (
<H args={{ name: 'pageNotFound' }} />
) : demo ? (
<H args={{ name: 'demoTitle' }} />
) : (
episodeTitle
)}
</h1>
</>
) : (
Expand All @@ -99,17 +111,26 @@ const EpisodeHero = () => {
</>
<EmojiSeparator
size="lg"
nodes={episodeEmojis[episodeNumber as keyof typeof episodeEmojis].map(
emoji =>
emoji === '🔲' ? (
<CustomEmoji type="mathBox" />
) : (
<Emoji>{emoji}</Emoji>
)
nodes={(demo
? ['🍱', '▶️', '🔲']
: notFound
? ['❓', '😭', '❓']
: episodeEmojis[episodeNumber as keyof typeof episodeEmojis]
).map(emoji =>
emoji === '🔲' ? (
<CustomEmoji type="mathBox" />
) : (
<Emoji>{emoji}</Emoji>
)
)}
/>
</header>
)
}

EpisodeHero.defaultProps = {
demo: false,
notFound: false
}

export default EpisodeHero
31 changes: 24 additions & 7 deletions src/components/EpisodePage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ import Page from 'src/components/Page'
import TocModal from 'src/components/TocModal'
import episodeEmojis from 'src/lib/episodeEmojis'
import NotFoundCardList from 'src/components/NotFoundCardList'
import { ogUrl } from 'src/lib/meta'
import DemoCardList from 'src/components/DemoCardList'
import { ogUrl, demoUrl } from 'src/lib/meta'
import locale from 'src/lib/locale'

export interface EpisodePageProps {
Expand All @@ -21,6 +22,7 @@ export interface EpisodePageProps {
episodeTitleString?: React.ReactNode
episodeNumber: number
notFound: boolean
demo: boolean
contentName: ContentProps['name']
}

Expand All @@ -30,6 +32,7 @@ const EpisodePage = ({
episodeTitleString,
episodeNumber,
notFound,
demo,
contentName
}: EpisodePageProps) => {
const title = `${
Expand All @@ -42,17 +45,18 @@ const EpisodePage = ({
const [modalVisible, setModalVisible] = useState(false)
const hideModal = () => setModalVisible(false)
const showModal = () => setModalVisible(true)
const url = demo ? demoUrl : ogUrl(episodeNumber)
return (
<Page>
<Head>
<title key="title">{title}</title>
<meta property="og:title" content={title} />
<meta property="og:site_name" content={lessonTitle} />
<meta property="og:url" content={ogUrl(episodeNumber)} />
<link rel="canonical" href={ogUrl(episodeNumber)} />
<meta property="og:url" content={url} />
<link rel="canonical" href={url} />
</Head>
{modalVisible && <TocModal hideModal={hideModal} />}
{!notFound ? (
{!notFound && !demo ? (
<EpisodePageHeader
showModal={showModal}
episodeNumber={episodeNumber}
Expand All @@ -73,23 +77,36 @@ const EpisodePage = ({
showModal
}}
>
{notFound ? <NotFoundCardList /> : <Content name={contentName} />}
{notFound ? (
<NotFoundCardList />
) : demo ? (
<DemoCardList />
) : (
<Content name={contentName} />
)}
</EpisodeContext.Provider>
</Container>
{!notFound && (
{!notFound && !demo ? (
<EpisodePageHeader
showModal={showModal}
episodeNumber={episodeNumber}
isBottom
/>
) : (
<div
css={css`
padding: ${spaces(3)} 0;
`}
></div>
)}
<EpisodePageFooter />
</Page>
)
}

EpisodePage.defaultProps = {
notFound: false
notFound: false,
demo: false
}

export default EpisodePage
8 changes: 6 additions & 2 deletions src/components/EpisodePageWrapper.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,13 @@ import H from 'src/components/H'
interface EpisodePageWrapperProps {
episodeNumber: number
notFound: boolean
demo: boolean
}

const EpisodePageWrapper = ({
episodeNumber,
notFound
notFound,
demo
}: EpisodePageWrapperProps) => (
<GlobalContextSetter episodeNumber={episodeNumber}>
<EpisodePage
Expand All @@ -29,12 +31,14 @@ const EpisodePageWrapper = ({
}
episodeNumber={episodeNumber}
contentName={`${episodeNumber}` as EpisodePageProps['contentName']}
demo={demo}
/>
</GlobalContextSetter>
)

EpisodePageWrapper.defaultProps = {
notFound: false
notFound: false,
demo: false
}

export default EpisodePageWrapper
10 changes: 8 additions & 2 deletions src/components/ExpressionRunnerControls.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
/** @jsx jsx */
import { css, jsx } from '@emotion/core'
import H from 'src/components/H'
import { colors, spaces } from 'src/lib/theme'
import { colors, spaces, fontSizes } from 'src/lib/theme'
import Emoji from 'src/components/Emoji'
import { ExpressionRunnerProps } from 'src/types/ExpressionRunnerTypes'
import ExpressionRunnerButton from 'src/components/ExpressionRunnerButton'
import locale from 'src/lib/locale'

interface ExpressionRunnerControlsProps {
canStepForward: boolean
Expand Down Expand Up @@ -62,7 +63,7 @@ const ExpressionRunnerControls = ({
skipToTheEnd,
convert
}: ExpressionRunnerControlsProps) => {
const centerButtonWidth = convert ? 60 : 44
const centerButtonWidth = convert ? 66 : 44
const sideButtonsWidth = (100 - centerButtonWidth) / 2 - 2
return (
<div
Expand Down Expand Up @@ -122,6 +123,11 @@ const ExpressionRunnerControls = ({
!canStepForward &&
css`
background: ${colors('pink50')};
`,
convert &&
locale === 'en' &&
css`
font-size: ${fontSizes(0.75)};
`
]}
>
Expand Down
12 changes: 10 additions & 2 deletions src/components/ExpressionRunnerExplanation.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -65,14 +65,22 @@ const Explanation = ({
switch (state) {
case 'default': {
if (locale === 'en') {
return <></>
return <>Next!</>
} else {
return <>次に進みます!</>
}
}
case 'active': {
if (locale === 'en') {
return <>…</>
return (
<>
Look at the pair of{' '}
<InlinePrioritiesLabel revert>
{activePriority}
</InlinePrioritiesLabel>
’s
</>
)
} else {
return (
<>
Expand Down
4 changes: 2 additions & 2 deletions src/components/ExpressionRunnerPrecomputed.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ const ExpressionRunnerPrecomputed = ({
horizontalPadding={0}
>
{explanationsVisible && (
<ExpressionRunnerCaptionWrapper>
<ExpressionRunnerCaptionWrapper t8d>
<ExpressionRunnerExplanation
isPlaying={isPlaying}
expressionContainer={expressionContainers[currentIndex]}
Expand All @@ -198,7 +198,7 @@ const ExpressionRunnerPrecomputed = ({
</ExpressionRunnerCaptionWrapper>
)}
{children && !explanationsVisible && !isPlaying && (
<ExpressionRunnerCaptionWrapper>
<ExpressionRunnerCaptionWrapper t8d>
{children}
</ExpressionRunnerCaptionWrapper>
)}
Expand Down
Loading