diff --git a/components/REPL/REPLHistory.tsx b/components/REPL/REPLHistory.tsx index 1daeb8a..36b67f6 100644 --- a/components/REPL/REPLHistory.tsx +++ b/components/REPL/REPLHistory.tsx @@ -1,4 +1,5 @@ import { NextPage } from "next"; +import Link from "next/link"; import { MutableRefObject } from "react"; import styles from "../../styles/REPL/REPLHistory.module.css"; @@ -10,8 +11,39 @@ interface REPLHistoryParams { const REPLHistory: NextPage = ({history, inputRef}) => { const focusInput = () => {if (inputRef.current) inputRef.current.focus();}; + const parseLine = (line: string) => { + if (line === "") return "\u00A0"; + + let idxStart = line.indexOf("#{"); + let idxSep = line.indexOf("|", idxStart); + let idxEnd = line.indexOf("}", idxSep); + if (idxStart === -1 || idxSep === -1 || idxEnd === -1) return line; + + const result = [] + + while (idxStart !== -1 && idxSep !== -1 && idxEnd !== -1) { + const linkText = line.substring(idxStart+2, idxSep); + const linkHref = line.substring(idxSep+1, idxEnd); + + result.push(line.substring(0, idxStart)); + result.push({linkText}); + + + line = line.substring(idxEnd+1) + idxStart = line.indexOf("#{"); + idxSep = line.indexOf("|", idxStart); + idxEnd = line.indexOf("}", idxSep); + } + result.push(line.substring(idxEnd+1)) + return result + } + return
- { history.map((value, idx) =>
{value === "" ? "\u00A0" : value}
) } + { history.map((value, idx) => { + return
+ {parseLine(value)} +
} + )}
; }; diff --git a/lib/commands/definitions.ts b/lib/commands/definitions.ts index 38444d9..0b787f2 100644 --- a/lib/commands/definitions.ts +++ b/lib/commands/definitions.ts @@ -180,7 +180,7 @@ const project: Command = { const exitCmd: Command = { name: "exit", - desc: "Tries to close this tab. Mostly fails because of restrictions.", + desc: "Tries to close this tab.", execute: () => { if (typeof window !== undefined) { window.opener = null; @@ -189,8 +189,8 @@ const exitCmd: Command = { } return [ "If you can read this, closing the window did not work.", - "This is because of restriction in JavaScript.", - "Read more here: https://developer.mozilla.org/en-US/docs/Web/API/Window/close" + "This is most likely because of a restriction in JavaScript.", + "#{Read more here|https://developer.mozilla.org/en-US/docs/Web/API/Window/close}." ] } } diff --git a/styles/REPL/REPLHistory.module.css b/styles/REPL/REPLHistory.module.css index 5367ac8..3e9f8b5 100644 --- a/styles/REPL/REPLHistory.module.css +++ b/styles/REPL/REPLHistory.module.css @@ -12,4 +12,21 @@ font-family: inherit; display: block; margin: 0; +} + +.line a:link, .line a:visited, .line a:hover, .line a:active { + color: inherit; + text-decoration: underline; +} + +.line a::after { + content: "⤤"; + color: var(--repl-color); + font-size: 80%; + text-decoration: none; +} + +.line .cmd { + cursor: pointer; + text-decoration: underline; } \ No newline at end of file