const ScreenShareConfig = { | |||||
view() { | |||||
const checked = ScreenShare.isOn | |||||
const onclick = ScreenShare.toggle | |||||
return m('label.styled', | |||||
m('input[type=checkbox]', {checked, onclick}), | |||||
'screen-share', | |||||
) | |||||
} | |||||
} | |||||
const ScreenShare = { | const ScreenShare = { | ||||
isOn: false, | isOn: false, | ||||
start() { | start() { | ||||
}, | }, | ||||
toggle() { | toggle() { | ||||
ScreenShare.isOn = !ScreenShare.isOn | ScreenShare.isOn = !ScreenShare.isOn | ||||
ScreenShare.start() | |||||
// ScreenShare.start() | |||||
}, | }, | ||||
view() { | view() { | ||||
const style = { | const style = { | ||||
return m('video.screen[playsinline][autoplay]', {style}) | return m('video.screen[playsinline][autoplay]', {style}) | ||||
}, | }, | ||||
} | } | ||||
addEventListener('load', () => { | |||||
Headers.push([ScreenShareConfig]) | |||||
Apps.push([ScreenShare, {key: 'screen-share-container'}]) | |||||
}) |
StreamContainer[value] = !StreamContainer[value] | StreamContainer[value] = !StreamContainer[value] | ||||
updateSelfVideo() | updateSelfVideo() | ||||
} | } | ||||
const style = { | |||||
'font-family': 'monospace', | |||||
'display': 'inline-flex', | |||||
'justify-content': 'center', | |||||
'align-items': 'center', | |||||
'padding': '0 0.5em', | |||||
} | |||||
const checked = StreamContainer[value] | const checked = StreamContainer[value] | ||||
return m('label', {style}, | |||||
return m('label.styled', | |||||
m('input[type=checkbox]', {checked, onclick}), | m('input[type=checkbox]', {checked, onclick}), | ||||
label, | label, | ||||
) | ) |
<script src="/libs/purify.min.js"></script> | <script src="/libs/purify.min.js"></script> | ||||
<script src="/pico.js" defer></script> | <script src="/pico.js" defer></script> | ||||
<script src="/apps/streams.js"></script> | <script src="/apps/streams.js"></script> | ||||
<script src="/apps/screen.js"></script> | |||||
<script src="/apps/chat.js"></script> | <script src="/apps/chat.js"></script> | ||||
<!-- <script src="/apps/volume.js"></script> --> | <!-- <script src="/apps/volume.js"></script> --> | ||||
<!-- <script src="/apps/screen.js"></script> --> | <!-- <script src="/apps/screen.js"></script> --> | ||||
grid-template-rows: auto 1fr; | grid-template-rows: auto 1fr; | ||||
overflow: hidden; | overflow: hidden; | ||||
} | } | ||||
label.styled { | |||||
font-family: monospace; | |||||
display: inline-flex; | |||||
justify-content: center; | |||||
align-items: center; | |||||
padding: 0 0.5em; | |||||
} | |||||
header { | |||||
display: grid; | |||||
grid-auto-flow: column; | |||||
justify-items: start; | |||||
margin-right: auto; | |||||
} | |||||
main { | |||||
overflow: hidden; | |||||
} | |||||
</style> | </style> | ||||
<body>PicoChat requires JS</body> | <body>PicoChat requires JS</body> | ||||
</html> | </html> |
autocomplete: 'off', | autocomplete: 'off', | ||||
value: localStorage.username, | value: localStorage.username, | ||||
} | } | ||||
const headerStyle = { | |||||
display: 'grid', | |||||
gridAutoFlow: 'column', | |||||
justifyItems: 'start', | |||||
marginRight: 'auto', | |||||
} | |||||
return [ | return [ | ||||
m('header', {style: headerStyle}, | |||||
m('header', | |||||
State.isConnected | State.isConnected | ||||
? Headers.map(h => m(...h)) | ? Headers.map(h => m(...h)) | ||||
: [ | : [ | ||||
), | ), | ||||
], | ], | ||||
), | ), | ||||
m('main', {style: {overflow: 'hidden'}}, | |||||
m('main', | |||||
State.isConnected | State.isConnected | ||||
? Apps.map(a => m(...a)) | ? Apps.map(a => m(...a)) | ||||
: [ | : [ |