UI work on conference calls, translations
This commit is contained in:
+15
-2
@@ -2575,7 +2575,7 @@ ul.tabbar li.active > a {
|
|||||||
.material-icons.big {
|
.material-icons.big {
|
||||||
font-size: 2.2rem;
|
font-size: 2.2rem;
|
||||||
}
|
}
|
||||||
.material-icons.bigger {
|
.material-icons.x-big {
|
||||||
font-size: 3rem;
|
font-size: 3rem;
|
||||||
}
|
}
|
||||||
.material-icons.huge {
|
.material-icons.huge {
|
||||||
@@ -2585,13 +2585,26 @@ ul.tabbar li.active > a {
|
|||||||
display: inline-block;
|
display: inline-block;
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
.composed-material i:nth-child(2) {
|
.composed-material .second {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
font-size: 85%;
|
font-size: 85%;
|
||||||
top: 7%;
|
top: 7%;
|
||||||
left: 39%;
|
left: 39%;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
.composed-material .second-small {
|
||||||
|
position: absolute;
|
||||||
|
font-size: 62%;
|
||||||
|
top: 14%;
|
||||||
|
left: 30%;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* White outline */
|
||||||
|
.material-icons.outline {
|
||||||
|
position: relative;
|
||||||
|
text-shadow: -1px 1px #FFF, 1px 1px #FFF, 1px -1px #FFF, -1px -1px #FFF;
|
||||||
|
}
|
||||||
|
|
||||||
#self-avatar .material-icons {
|
#self-avatar .material-icons {
|
||||||
font-size: 2.4rem;
|
font-size: 2.4rem;
|
||||||
|
|||||||
Vendored
+1
-1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+9
-2
@@ -1649,10 +1649,10 @@
|
|||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"calls_conference": {
|
"calls_conference": {
|
||||||
"translation": "",
|
"translation": "Telefonkonferenz",
|
||||||
"defaultMessage": "Conference call",
|
"defaultMessage": "Conference call",
|
||||||
"description": "Conference call label",
|
"description": "Conference call label",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"password_reset_success": {
|
"password_reset_success": {
|
||||||
@@ -1661,5 +1661,12 @@
|
|||||||
"description": "Notification message that the password was successfully reset.",
|
"description": "Notification message that the password was successfully reset.",
|
||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"join_conference": {
|
||||||
|
"translation": "",
|
||||||
|
"defaultMessage": "+ Join",
|
||||||
|
"description": "Call to action to join a conference call",
|
||||||
|
"missing": true,
|
||||||
|
"obsolete": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1661,5 +1661,12 @@
|
|||||||
"description": "Notification message that the password was successfully reset.",
|
"description": "Notification message that the password was successfully reset.",
|
||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"join_conference": {
|
||||||
|
"translation": "+ Join",
|
||||||
|
"defaultMessage": "+ Join",
|
||||||
|
"description": "Call to action to join a conference call",
|
||||||
|
"missing": false,
|
||||||
|
"obsolete": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+9
-2
@@ -1649,10 +1649,10 @@
|
|||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"calls_conference": {
|
"calls_conference": {
|
||||||
"translation": "",
|
"translation": "Conferencia",
|
||||||
"defaultMessage": "Conference call",
|
"defaultMessage": "Conference call",
|
||||||
"description": "Conference call label",
|
"description": "Conference call label",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"password_reset_success": {
|
"password_reset_success": {
|
||||||
@@ -1661,5 +1661,12 @@
|
|||||||
"description": "Notification message that the password was successfully reset.",
|
"description": "Notification message that the password was successfully reset.",
|
||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"join_conference": {
|
||||||
|
"translation": "",
|
||||||
|
"defaultMessage": "+ Join",
|
||||||
|
"description": "Call to action to join a conference call",
|
||||||
|
"missing": true,
|
||||||
|
"obsolete": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -374,6 +374,10 @@
|
|||||||
"defaultMessage": "Invalid security token",
|
"defaultMessage": "Invalid security token",
|
||||||
"description": "Error message when resetting password."
|
"description": "Error message when resetting password."
|
||||||
},
|
},
|
||||||
|
"join_conference": {
|
||||||
|
"defaultMessage": "+ Join",
|
||||||
|
"description": "Call to action to join a conference call"
|
||||||
|
},
|
||||||
"label_client": {
|
"label_client": {
|
||||||
"defaultMessage": "Client:",
|
"defaultMessage": "Client:",
|
||||||
"description": "Label for a client version"
|
"description": "Label for a client version"
|
||||||
|
|||||||
+9
-2
@@ -1649,10 +1649,10 @@
|
|||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"calls_conference": {
|
"calls_conference": {
|
||||||
"translation": "",
|
"translation": "Conférence téléphonique",
|
||||||
"defaultMessage": "Conference call",
|
"defaultMessage": "Conference call",
|
||||||
"description": "Conference call label",
|
"description": "Conference call label",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"password_reset_success": {
|
"password_reset_success": {
|
||||||
@@ -1661,5 +1661,12 @@
|
|||||||
"description": "Notification message that the password was successfully reset.",
|
"description": "Notification message that the password was successfully reset.",
|
||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"join_conference": {
|
||||||
|
"translation": "",
|
||||||
|
"defaultMessage": "+ Join",
|
||||||
|
"description": "Call to action to join a conference call",
|
||||||
|
"missing": true,
|
||||||
|
"obsolete": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+9
-2
@@ -1649,10 +1649,10 @@
|
|||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"calls_conference": {
|
"calls_conference": {
|
||||||
"translation": "",
|
"translation": "전화 회의",
|
||||||
"defaultMessage": "Conference call",
|
"defaultMessage": "Conference call",
|
||||||
"description": "Conference call label",
|
"description": "Conference call label",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"password_reset_success": {
|
"password_reset_success": {
|
||||||
@@ -1661,5 +1661,12 @@
|
|||||||
"description": "Notification message that the password was successfully reset.",
|
"description": "Notification message that the password was successfully reset.",
|
||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"join_conference": {
|
||||||
|
"translation": "",
|
||||||
|
"defaultMessage": "+ Join",
|
||||||
|
"description": "Call to action to join a conference call",
|
||||||
|
"missing": true,
|
||||||
|
"obsolete": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+9
-2
@@ -1649,10 +1649,10 @@
|
|||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"calls_conference": {
|
"calls_conference": {
|
||||||
"translation": "",
|
"translation": "Apel de conferinta",
|
||||||
"defaultMessage": "Conference call",
|
"defaultMessage": "Conference call",
|
||||||
"description": "Conference call label",
|
"description": "Conference call label",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"password_reset_success": {
|
"password_reset_success": {
|
||||||
@@ -1661,5 +1661,12 @@
|
|||||||
"description": "Notification message that the password was successfully reset.",
|
"description": "Notification message that the password was successfully reset.",
|
||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"join_conference": {
|
||||||
|
"translation": "",
|
||||||
|
"defaultMessage": "+ Join",
|
||||||
|
"description": "Call to action to join a conference call",
|
||||||
|
"missing": true,
|
||||||
|
"obsolete": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+9
-2
@@ -1649,10 +1649,10 @@
|
|||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"calls_conference": {
|
"calls_conference": {
|
||||||
"translation": "",
|
"translation": "Групповой звонок",
|
||||||
"defaultMessage": "Conference call",
|
"defaultMessage": "Conference call",
|
||||||
"description": "Conference call label",
|
"description": "Conference call label",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"password_reset_success": {
|
"password_reset_success": {
|
||||||
@@ -1661,5 +1661,12 @@
|
|||||||
"description": "Notification message that the password was successfully reset.",
|
"description": "Notification message that the password was successfully reset.",
|
||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"join_conference": {
|
||||||
|
"translation": "",
|
||||||
|
"defaultMessage": "+ Join",
|
||||||
|
"description": "Call to action to join a conference call",
|
||||||
|
"missing": true,
|
||||||
|
"obsolete": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+9
-2
@@ -1649,10 +1649,10 @@
|
|||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"calls_conference": {
|
"calls_conference": {
|
||||||
"translation": "",
|
"translation": "電話會議",
|
||||||
"defaultMessage": "Conference call",
|
"defaultMessage": "Conference call",
|
||||||
"description": "Conference call label",
|
"description": "Conference call label",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"password_reset_success": {
|
"password_reset_success": {
|
||||||
@@ -1661,5 +1661,12 @@
|
|||||||
"description": "Notification message that the password was successfully reset.",
|
"description": "Notification message that the password was successfully reset.",
|
||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"join_conference": {
|
||||||
|
"translation": "",
|
||||||
|
"defaultMessage": "+ Join",
|
||||||
|
"description": "Call to action to join a conference call",
|
||||||
|
"missing": true,
|
||||||
|
"obsolete": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+9
-2
@@ -1649,10 +1649,10 @@
|
|||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"calls_conference": {
|
"calls_conference": {
|
||||||
"translation": "",
|
"translation": "电话会议",
|
||||||
"defaultMessage": "Conference call",
|
"defaultMessage": "Conference call",
|
||||||
"description": "Conference call label",
|
"description": "Conference call label",
|
||||||
"missing": true,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
},
|
},
|
||||||
"password_reset_success": {
|
"password_reset_success": {
|
||||||
@@ -1661,5 +1661,12 @@
|
|||||||
"description": "Notification message that the password was successfully reset.",
|
"description": "Notification message that the password was successfully reset.",
|
||||||
"missing": false,
|
"missing": false,
|
||||||
"obsolete": false
|
"obsolete": false
|
||||||
|
},
|
||||||
|
"join_conference": {
|
||||||
|
"translation": "",
|
||||||
|
"defaultMessage": "+ Join",
|
||||||
|
"description": "Call to action to join a conference call",
|
||||||
|
"missing": true,
|
||||||
|
"obsolete": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,13 @@ import { secondsToTime } from '../lib/strformat.js';
|
|||||||
|
|
||||||
export default class CallMessage extends React.PureComponent {
|
export default class CallMessage extends React.PureComponent {
|
||||||
render() {
|
render() {
|
||||||
const bigIcon = this.props.vc ? 'video_call' : 'call';
|
const bigIcon = this.props.vc ?
|
||||||
|
<div className="composed-material">
|
||||||
|
<i className="material-icons gray second-small">group</i>
|
||||||
|
<i className="material-icons gray big outline">call</i>
|
||||||
|
</div>
|
||||||
|
:
|
||||||
|
<div><i className="material-icons big gray">call</i></div>;
|
||||||
const isCallDropped = ['busy', 'declined', 'disconnected', 'missed'].includes(this.props.callState);
|
const isCallDropped = ['busy', 'declined', 'disconnected', 'missed'].includes(this.props.callState);
|
||||||
const successClass = 'material-icons medium ' + (isCallDropped ? 'red' : 'green');
|
const successClass = 'material-icons medium ' + (isCallDropped ? 'red' : 'green');
|
||||||
const callIcon = this.props.incoming ?
|
const callIcon = this.props.incoming ?
|
||||||
@@ -46,7 +52,9 @@ export default class CallMessage extends React.PureComponent {
|
|||||||
<div>{title}</div>
|
<div>{title}</div>
|
||||||
<div className="duration"><i className={successClass}>{callIcon}</i> {duration}</div>
|
<div className="duration"><i className={successClass}>{callIcon}</i> {duration}</div>
|
||||||
{allowJoin ?
|
{allowJoin ?
|
||||||
<a onClick={this.props.onCallJoin}>Join</a>
|
<a onClick={this.props.onCallJoin}>
|
||||||
|
<FormattedMessage id="join_conference" defaultMessage="+ Join" description="Call to action to join a conference call" />
|
||||||
|
</a>
|
||||||
: null}
|
: null}
|
||||||
</div>
|
</div>
|
||||||
</div>;
|
</div>;
|
||||||
|
|||||||
@@ -6,7 +6,8 @@ import { secondsToTime } from '../lib/strformat.js';
|
|||||||
|
|
||||||
// Props:
|
// Props:
|
||||||
// incoming: true | false.
|
// incoming: true | false.
|
||||||
// success: true | false.
|
// callState: 'busy' | 'declined' | 'disconnected' | 'missed'.
|
||||||
|
// duration: <number> (call duration in milliseconds).
|
||||||
export default class CallStatus extends React.PureComponent {
|
export default class CallStatus extends React.PureComponent {
|
||||||
render() {
|
render() {
|
||||||
const isCallDropped = ['busy', 'declined', 'disconnected', 'missed'].includes(this.props.callState);
|
const isCallDropped = ['busy', 'declined', 'disconnected', 'missed'].includes(this.props.callState);
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ export default class InlineVideo extends React.PureComponent {
|
|||||||
{React.createElement('img', this.props)}
|
{React.createElement('img', this.props)}
|
||||||
<div className="play-control">
|
<div className="play-control">
|
||||||
{this.props.onClick ?
|
{this.props.onClick ?
|
||||||
<i className="material-icons white bigger">play_arrow</i>
|
<i className="material-icons white x-big">play_arrow</i>
|
||||||
:
|
:
|
||||||
<img src="img/broken_video.png" style={{filter: 'invert(100%)'}} width="36" height="36" />}
|
<img src="img/broken_video.png" style={{filter: 'invert(100%)'}} width="36" height="36" />}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
// Video conference carousel item.
|
// Video conference carousel item.
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import Track from 'livekit-client';
|
|
||||||
|
|
||||||
import LetterTile from './letter-tile.jsx';
|
import LetterTile from './letter-tile.jsx';
|
||||||
|
|
||||||
@@ -25,7 +24,7 @@ export default class VCCarouselItem extends React.PureComponent {
|
|||||||
this.props.micPub.audioTrack.attach(this.state.audioRef);
|
this.props.micPub.audioTrack.attach(this.state.audioRef);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
handleVideoRefChange(node) {
|
handleVideoRefChange(node) {
|
||||||
if (!node) { return; }
|
if (!node) { return; }
|
||||||
this.setState({videoRef: node});
|
this.setState({videoRef: node});
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ import React from 'react';
|
|||||||
|
|
||||||
import { Track } from 'livekit-client';
|
import { Track } from 'livekit-client';
|
||||||
|
|
||||||
import LetterTile from './letter-tile.jsx';
|
|
||||||
import VCCarouselItem from './vc-carousel-item.jsx';
|
import VCCarouselItem from './vc-carousel-item.jsx';
|
||||||
|
|
||||||
import { VC_CAROUSEL_ITEM_GAP } from '../constants.js';
|
import { VC_CAROUSEL_ITEM_GAP } from '../constants.js';
|
||||||
@@ -12,7 +11,7 @@ export default class VCCarousel extends React.Component {
|
|||||||
super(props);
|
super(props);
|
||||||
this.handlePrevClick = this.handlePrevClick.bind(this);
|
this.handlePrevClick = this.handlePrevClick.bind(this);
|
||||||
this.handleNextClick = this.handleNextClick.bind(this);
|
this.handleNextClick = this.handleNextClick.bind(this);
|
||||||
|
|
||||||
this.carouselRef = React.createRef();
|
this.carouselRef = React.createRef();
|
||||||
this.contentRef = React.createRef();
|
this.contentRef = React.createRef();
|
||||||
this.prevRef = React.createRef();
|
this.prevRef = React.createRef();
|
||||||
|
|||||||
@@ -1,16 +1,11 @@
|
|||||||
// Video conference or broadcast: local and/or peer viewports and controls.
|
// Video conference or broadcast: local and/or peer viewports and controls.
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { FormattedMessage, defineMessages, injectIntl } from 'react-intl';
|
import { FormattedMessage, injectIntl } from 'react-intl';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
connect,
|
|
||||||
LocalParticipant,
|
|
||||||
MediaDeviceFailure,
|
MediaDeviceFailure,
|
||||||
Participant,
|
|
||||||
ParticipantEvent,
|
ParticipantEvent,
|
||||||
RemoteParticipant,
|
RemoteParticipant,
|
||||||
RemoteTrack,
|
|
||||||
RemoteTrackPublication,
|
|
||||||
Room,
|
Room,
|
||||||
RoomEvent,
|
RoomEvent,
|
||||||
Track,
|
Track,
|
||||||
|
|||||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+38
-23919
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user