Browse Source

Toggle

master
Roderic Day 5 years ago
parent
commit
723e5da54f
2 changed files with 30 additions and 14 deletions
  1. +29
    -13
      apps/streams.js
  2. +1
    -1
      pico.js

+ 29
- 13
apps/streams.js View File

const VideoConfig = Object.seal({
videoOn: true,
audioOn: true,
const Toggle = {
view({attrs: {label, value}}) {
const onclick = () => {
StreamContainer[value] = !StreamContainer[value]
updateSelfVideo()
}
const style = {
'font-family': 'monospace',
'display': 'inline-flex',
'justify-content': 'center',
'align-items': 'center',
'padding': '0 0.5em',
}
const checked = StreamContainer[value]
return m('label', {style},
m('input[type=checkbox]', {checked, onclick}),
label,
)
}
}
const VideoConfig = {
get video() { get video() {
return VideoConfig.videoOn
return StreamContainer.videoOn
&& State.online.length < 10 && State.online.length < 10
&& params.get('v') !== '0' && params.get('v') !== '0'
&& {width: {ideal: 320}, facingMode: 'user', frameRate: 26} && {width: {ideal: 320}, facingMode: 'user', frameRate: 26}
}, },
get audio() { get audio() {
return VideoConfig.audioOn
return StreamContainer.audioOn
&& params.get('a') !== '0' && params.get('a') !== '0'
}, },
toggle: (property) => () => {
VideoConfig[property] = !VideoConfig[property]
updateSelfVideo()
},
view() { view() {
return [ return [
m('button', {onclick: VideoConfig.toggle('videoOn')}, 'video'),
m('button', {onclick: VideoConfig.toggle('audioOn')}, 'audio'),
m(Toggle, {label: 'video', value: 'videoOn'}),
m(Toggle, {label: 'audio', value: 'audioOn'}),
] ]
} }
})
}
const updateSelfVideo = async () => { const updateSelfVideo = async () => {
const video = document.querySelector('video.self') const video = document.querySelector('video.self')


delete track delete track
}) })


if(VideoConfig.videoOn || VideoConfig.audioOn) {
if(StreamContainer.videoOn || StreamContainer.audioOn) {
await navigator.mediaDevices await navigator.mediaDevices
.getUserMedia(VideoConfig) .getUserMedia(VideoConfig)
.then(s => s.getTracks().forEach(t => video.srcObject.addTrack(t))) .then(s => s.getTracks().forEach(t => video.srcObject.addTrack(t)))
}, },
} }
const StreamContainer = { const StreamContainer = {
videoOn: true,
audioOn: true,
view() { view() {
const dims = [ const dims = [
Math.floor((1 + Math.sqrt(4 * State.online.length - 3)) / 2), Math.floor((1 + Math.sqrt(4 * State.online.length - 3)) / 2),

+ 1
- 1
pico.js View File

return m('main', {style: mainStyle}, return m('main', {style: mainStyle},
m('header', {style: headerStyle}, m('header', {style: headerStyle},
State.isConnected ? [ State.isConnected ? [
m('button', {onclick: Base.sendLogout}, 'settings'),
m('button', {onclick: Base.sendLogout}, 'log-out'),
m(VideoConfig), m(VideoConfig),
m(ChatConfig), m(ChatConfig),
m('button', {onclick: VolumeMap.toggle}, 'volume'), m('button', {onclick: VolumeMap.toggle}, 'volume'),

Loading…
Cancel
Save