mirror of
https://github.com/He4eT/elseifplayer.git
synced 2026-05-05 01:17:22 +00:00
Player: add the singleWindow option
This commit is contained in:
parent
4ebbbd36fc
commit
e72481f7dc
4 changed files with 45 additions and 18 deletions
|
|
@ -37,7 +37,9 @@ const Handlers = ({
|
||||||
setInputType,
|
setInputType,
|
||||||
setInbox
|
setInbox
|
||||||
}) => ({
|
}) => ({
|
||||||
onInit: _ => setStatus({ stage: 'ready' }),
|
onInit: _ => {
|
||||||
|
setStatus({ stage: 'ready' })
|
||||||
|
},
|
||||||
/* */
|
/* */
|
||||||
onUpdateWindows: windows => {
|
onUpdateWindows: windows => {
|
||||||
setWindows(windows)
|
setWindows(windows)
|
||||||
|
|
@ -49,8 +51,12 @@ const Handlers = ({
|
||||||
setCurrentWindowId(id)
|
setCurrentWindowId(id)
|
||||||
setInputType(type)
|
setInputType(type)
|
||||||
},
|
},
|
||||||
onUpdateContent: setInbox,
|
onUpdateContent: inbox => {
|
||||||
onDisable: _ => setInputType(null),
|
setInbox(inbox)
|
||||||
|
},
|
||||||
|
onDisable: _ => {
|
||||||
|
setInputType(null)
|
||||||
|
},
|
||||||
/* */
|
/* */
|
||||||
onFileNameRequest: (tosave, usage, _, setFileName) => {
|
onFileNameRequest: (tosave, usage, _, setFileName) => {
|
||||||
setFileName({
|
setFileName({
|
||||||
|
|
@ -66,10 +72,14 @@ const Handlers = ({
|
||||||
localStorage.setItem(`fake-fs/${filename}`, encode(content))
|
localStorage.setItem(`fake-fs/${filename}`, encode(content))
|
||||||
},
|
},
|
||||||
/* */
|
/* */
|
||||||
onExit: _ => setInputType(null)
|
onExit: _ => {
|
||||||
|
setInputType(null)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
export default function ({ vmParts: { file, engine } }) {
|
export default function ({
|
||||||
|
vmParts: { file, engine }, singleWindow
|
||||||
|
}) {
|
||||||
const [status, setStatus] = useState(INITIAL_STATUS)
|
const [status, setStatus] = useState(INITIAL_STATUS)
|
||||||
|
|
||||||
const [windows, setWindows] = useState([])
|
const [windows, setWindows] = useState([])
|
||||||
|
|
@ -123,7 +133,9 @@ export default function ({ vmParts: { file, engine } }) {
|
||||||
<section className='output'>{
|
<section className='output'>{
|
||||||
windows
|
windows
|
||||||
.sort(byTop)
|
.sort(byTop)
|
||||||
// .filter(({id}) => id === currentWindowId)
|
.filter(singleWindow
|
||||||
|
? ({id}) => id === currentWindowId
|
||||||
|
: _ => true)
|
||||||
.map(textWindow(inbox))}
|
.map(textWindow(inbox))}
|
||||||
</section>
|
</section>
|
||||||
<InputBox {...{
|
<InputBox {...{
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ const prepareVM = ({ url, setStatus, setParts }) => {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function ({ url }) {
|
export default function ({ url, singleWindow }) {
|
||||||
const [status, setStatus] = useState(INITIAL_STATUS)
|
const [status, setStatus] = useState(INITIAL_STATUS)
|
||||||
const [vmParts, setParts] = useState(null)
|
const [vmParts, setParts] = useState(null)
|
||||||
|
|
||||||
|
|
@ -47,6 +47,9 @@ export default function ({ url }) {
|
||||||
}, [url])
|
}, [url])
|
||||||
|
|
||||||
return vmParts
|
return vmParts
|
||||||
? (<Player vmParts={vmParts} />)
|
? (<Player {...{
|
||||||
|
vmParts,
|
||||||
|
singleWindow
|
||||||
|
}}/>)
|
||||||
: (<Status {...status} />)
|
: (<Status {...status} />)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
24
src/index.js
24
src/index.js
|
|
@ -21,6 +21,12 @@ function App () {
|
||||||
const themeEngine = useThemeEngine()
|
const themeEngine = useThemeEngine()
|
||||||
const [location] = useHashLocation()
|
const [location] = useHashLocation()
|
||||||
|
|
||||||
|
const playerView = (themeEngine, singleWindow) => params =>
|
||||||
|
(<PlayerView {...{
|
||||||
|
...themeEngine,
|
||||||
|
...params,
|
||||||
|
singleWindow}}/>)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Router hook={useHashLocation}>
|
<Router hook={useHashLocation}>
|
||||||
<div className={[
|
<div className={[
|
||||||
|
|
@ -37,18 +43,20 @@ function App () {
|
||||||
<Route path='/games/'>
|
<Route path='/games/'>
|
||||||
<GamesView />
|
<GamesView />
|
||||||
</Route>
|
</Route>
|
||||||
|
|
||||||
<Route path='/play/:encodedUrl'>
|
<Route path='/play/:encodedUrl'>
|
||||||
{params => <PlayerView {...{
|
{ playerView(themeEngine, false) }
|
||||||
...themeEngine,
|
</Route>
|
||||||
...params
|
<Route path='/play/:encodedUrl/focus'>
|
||||||
}} />}
|
{ playerView(themeEngine, true) }
|
||||||
|
</Route>
|
||||||
|
<Route path='/play/:encodedUrl/:theme/focus'>
|
||||||
|
{ playerView(themeEngine, true) }
|
||||||
</Route>
|
</Route>
|
||||||
<Route path='/play/:encodedUrl/:theme'>
|
<Route path='/play/:encodedUrl/:theme'>
|
||||||
{params => <PlayerView {...{
|
{ playerView(themeEngine, false) }
|
||||||
...themeEngine,
|
|
||||||
...params
|
|
||||||
}} />}
|
|
||||||
</Route>
|
</Route>
|
||||||
|
|
||||||
<Route>
|
<Route>
|
||||||
<NotFoundView />
|
<NotFoundView />
|
||||||
</Route>
|
</Route>
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,9 @@ import './PlayerView.css'
|
||||||
|
|
||||||
const decode = encodedUrl => decodeURIComponent(encodedUrl)
|
const decode = encodedUrl => decodeURIComponent(encodedUrl)
|
||||||
|
|
||||||
export default function ({ setTheme, theme, encodedUrl }) {
|
export default function ({
|
||||||
|
setTheme, theme, encodedUrl, singleWindow
|
||||||
|
}) {
|
||||||
useEffect(() => setTheme(theme), [theme])
|
useEffect(() => setTheme(theme), [theme])
|
||||||
|
|
||||||
const [targetUrl, setTargetUrl] = useState(decode(encodedUrl))
|
const [targetUrl, setTargetUrl] = useState(decode(encodedUrl))
|
||||||
|
|
@ -18,7 +20,9 @@ export default function ({ setTheme, theme, encodedUrl }) {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<main>
|
<main>
|
||||||
<UrlPlayer url={targetUrl} />
|
<UrlPlayer {...{
|
||||||
|
url: targetUrl,
|
||||||
|
singleWindow}}/>
|
||||||
</main>
|
</main>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue