ability to explode words

This commit is contained in:
lingdocs 2022-07-27 00:00:44 -05:00
parent 4da16037aa
commit 735bb8d6fd
2 changed files with 60 additions and 35 deletions

View File

@ -3,6 +3,7 @@
"version": "0.1.0", "version": "0.1.0",
"license": "MIT", "license": "MIT",
"author": "lingdocs.com", "author": "lingdocs.com",
"homepage": "https://dictionary.lingdocs.com",
"private": true, "private": true,
"dependencies": { "dependencies": {
"@fortawesome/fontawesome-free": "^5.15.2", "@fortawesome/fontawesome-free": "^5.15.2",

View File

@ -46,6 +46,7 @@ function IsolatedEntry({ state, dictionary, isolateEntry }: {
dictionary: DictionaryAPI, dictionary: DictionaryAPI,
isolateEntry: (ts: number) => void, isolateEntry: (ts: number) => void,
}) { }) {
const [exploded, setExploded] = useState<boolean>(false);
const [editing, setEditing] = useState<boolean>(false); const [editing, setEditing] = useState<boolean>(false);
const [comment, setComment] = useState<string>(""); const [comment, setComment] = useState<string>("");
const [editSubmitted, setEditSubmitted] = useState<boolean>(false); const [editSubmitted, setEditSubmitted] = useState<boolean>(false);
@ -103,6 +104,27 @@ function IsolatedEntry({ state, dictionary, isolateEntry }: {
return false; return false;
} }
})(); })();
function DisplayVPExplorer(props: {
entry: T.DictionaryEntry,
complement: T.DictionaryEntry | undefined,
}) {
try {
return <VPExplorer
verb={{
// TODO: CLEAN THIS UP!
// @ts-ignore
entry: props.entry,
complement: props.complement,
}}
opts={textOptions}
entryFeeder={entryFeeder}
handleLinkClick={isolateEntry}
/>
} catch (e) {
console.error("error rendering VPExplorer", e);
return null;
}
}
return <div className="width-limiter"> return <div className="width-limiter">
<Helmet> <Helmet>
<title>{entry.p} - LingDocs Pashto Dictionary</title> <title>{entry.p} - LingDocs Pashto Dictionary</title>
@ -111,37 +133,42 @@ function IsolatedEntry({ state, dictionary, isolateEntry }: {
<div className="col-8"> <div className="col-8">
<Entry <Entry
nonClickable nonClickable
entry={entry} entry={exploded ? explodeEntry(entry) : entry}
textOptions={textOptions} textOptions={textOptions}
isolateEntry={isolateEntry} isolateEntry={isolateEntry}
/> />
</div> </div>
{state.user && <div className="col-4">
<div className="col-4"> <div className="d-flex flex-row justify-content-end">
<div className="d-flex flex-row justify-content-end"> <div
{state.user.level === "editor" && <> className="clickable mr-3"
<div className="clickable mr-3" onClick={() => navigator.clipboard.writeText(entry.ts.toString())}> onClick={() => setExploded(os => !os)}
<i className="fas fa-tag"></i> >
<i className={`fas fa-${exploded ? "compress" : "expand"}-alt`} />
</div>
{state.user && <>
(state.user.level === "editor" && <>
<div className="clickable mr-3" onClick={() => navigator.clipboard.writeText(entry.ts.toString())}>
<i className="fas fa-tag"></i>
</div>
<div className="clickable mr-3" onClick={() => navigator.clipboard.writeText(JSON.stringify(entry))}>
<i className="fas fa-code"></i>
</div>
<Link to={`/edit?id=${entry.ts}`} className="plain-link">
<div
className="clickable mr-3"
data-testid="finalEditEntryButton"
>
<i className="fa fa-gavel" />
</div> </div>
<div className="clickable mr-3" onClick={() => navigator.clipboard.writeText(JSON.stringify(entry))}> </Link>
<i className="fas fa-code"></i> </>)
</div>
<Link to={`/edit?id=${entry.ts}`} className="plain-link">
<div
className="clickable mr-3"
data-testid="finalEditEntryButton"
>
<i className="fa fa-gavel"></i>
</div>
</Link>
</>
}
<div <div
className="clickable mr-3" className="clickable mr-3"
data-testid="editEntryButton" data-testid="editEntryButton"
onClick={() => setEditing(!editing)} onClick={() => setEditing(os => !os)}
> >
<i className="fa fa-pen"></i> <i className="fa fa-pen" />
</div> </div>
{wordlistEnabled(state.user) && <div {wordlistEnabled(state.user) && <div
className="clickable" className="clickable"
@ -153,9 +180,9 @@ function IsolatedEntry({ state, dictionary, isolateEntry }: {
> >
<i className={`fa${wordlistWord ? "s" : "r"} fa-star fa-lg`}/> <i className={`fa${wordlistWord ? "s" : "r"} fa-star fa-lg`}/>
</div>} </div>}
</div> </>}
</div> </div>
} </div>
</div> </div>
{wordlistWord && <> {wordlistWord && <>
{hasAttachment(wordlistWord, "audio") && <AudioPlayButton word={wordlistWord} />} {hasAttachment(wordlistWord, "audio") && <AudioPlayButton word={wordlistWord} />}
@ -207,17 +234,7 @@ function IsolatedEntry({ state, dictionary, isolateEntry }: {
</div>} </div>}
</>} </>}
{tp.isVerbEntry({ entry, complement }) && <div className="pb-4"> {tp.isVerbEntry({ entry, complement }) && <div className="pb-4">
<VPExplorer <DisplayVPExplorer entry={entry} complement={complement} />
verb={{
// TODO: CLEAN THIS UP!
// @ts-ignore
entry,
complement,
}}
opts={textOptions}
entryFeeder={entryFeeder}
handleLinkClick={isolateEntry}
/>
</div>} </div>}
{relatedEntries && <> {relatedEntries && <>
@ -257,4 +274,11 @@ function IsolatedEntry({ state, dictionary, isolateEntry }: {
</div>; </div>;
} }
function explodeEntry(entry: T.DictionaryEntry): T.DictionaryEntry {
return {
...entry,
p: entry.p.split("").join(" "),
};
}
export default IsolatedEntry; export default IsolatedEntry;