Merge pull request #1258 from cmgustavo/feature/01-remove-peerjs
Feature: remove peerjs
This commit is contained in:
commit
a0c7d2cb66
19 changed files with 47 additions and 2960 deletions
|
|
@ -83,7 +83,6 @@ module.exports = function(grunt) {
|
||||||
'js/shell.js', // shell must be loaded before moment due to the way moment loads in a commonjs env
|
'js/shell.js', // shell must be loaded before moment due to the way moment loads in a commonjs env
|
||||||
'lib/moment/min/moment.min.js',
|
'lib/moment/min/moment.min.js',
|
||||||
'lib/qrcode-generator/js/qrcode.js',
|
'lib/qrcode-generator/js/qrcode.js',
|
||||||
'lib/peer.js',
|
|
||||||
'lib/bitcore.js',
|
'lib/bitcore.js',
|
||||||
'lib/crypto-js/rollups/sha256.js',
|
'lib/crypto-js/rollups/sha256.js',
|
||||||
'lib/crypto-js/rollups/pbkdf2.js',
|
'lib/crypto-js/rollups/pbkdf2.js',
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,6 @@
|
||||||
"angular-foundation": "*",
|
"angular-foundation": "*",
|
||||||
"angular-route": "~1.2.14",
|
"angular-route": "~1.2.14",
|
||||||
"angular-qrcode": "~3.1.0",
|
"angular-qrcode": "~3.1.0",
|
||||||
"peerjs": "=0.3.8",
|
|
||||||
"angular-mocks": "~1.2.14",
|
"angular-mocks": "~1.2.14",
|
||||||
"mocha": "~1.18.2",
|
"mocha": "~1.18.2",
|
||||||
"chai": "~1.9.1",
|
"chai": "~1.9.1",
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,6 @@ var defaultConfig = {
|
||||||
updateFrequencySeconds: 60 * 60
|
updateFrequencySeconds: 60 * 60
|
||||||
},
|
},
|
||||||
|
|
||||||
disableVideo: true,
|
|
||||||
verbose: 1,
|
verbose: 1,
|
||||||
};
|
};
|
||||||
if (typeof module !== 'undefined')
|
if (typeof module !== 'undefined')
|
||||||
|
|
|
||||||
|
|
@ -205,23 +205,6 @@ a:hover {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sidebar ul.copayer-list {
|
|
||||||
list-style-type: none;
|
|
||||||
padding:0; margin:0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar ul.copayer-list li {
|
|
||||||
margin-top: 15px;
|
|
||||||
font-weight: 100;
|
|
||||||
font-size: 12px;
|
|
||||||
color: #C9C9C9;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar ul.copayer-list img {
|
|
||||||
width: 30px;
|
|
||||||
height: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.button.small.side-bar {
|
.button.small.side-bar {
|
||||||
padding: 0rem 0.4rem;
|
padding: 0rem 0.4rem;
|
||||||
}
|
}
|
||||||
|
|
@ -954,7 +937,15 @@ button, .button, p {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.video-box {
|
.copay-box-small {
|
||||||
|
width: 40px;
|
||||||
|
text-align: center;
|
||||||
|
margin-right: 10px;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.copay-box {
|
||||||
width: 70px;
|
width: 70px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin-right: 20px;
|
margin-right: 20px;
|
||||||
|
|
@ -962,11 +953,6 @@ button, .button, p {
|
||||||
float: left;
|
float: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
.video-small {
|
|
||||||
width: 50px;
|
|
||||||
height: 50px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.icon-input {
|
.icon-input {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 11px;
|
top: 11px;
|
||||||
|
|
|
||||||
|
|
@ -26,4 +26,15 @@ angular.module('copayApp.controllers').controller('CopayersController',
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Cached list of copayers
|
||||||
|
$scope.copayers = $rootScope.wallet.getRegisteredPeerIds();
|
||||||
|
|
||||||
|
$scope.copayersList = function() {
|
||||||
|
return $rootScope.wallet.getRegisteredPeerIds();
|
||||||
|
}
|
||||||
|
|
||||||
|
$scope.isBackupReady = function(copayer) {
|
||||||
|
return $rootScope.wallet.publicKeyRing.isBackupReady(copayer.copayerId);
|
||||||
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,6 @@ angular.module('copayApp.controllers').controller('CreateController',
|
||||||
controllerUtils.redirIfLogged();
|
controllerUtils.redirIfLogged();
|
||||||
|
|
||||||
$rootScope.fromSetup = true;
|
$rootScope.fromSetup = true;
|
||||||
$rootScope.videoInfo = {};
|
|
||||||
$scope.loading = false;
|
$scope.loading = false;
|
||||||
$scope.walletPassword = $rootScope.walletPassword;
|
$scope.walletPassword = $rootScope.walletPassword;
|
||||||
$scope.isMobile = !!window.cordova;
|
$scope.isMobile = !!window.cordova;
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,6 @@ angular.module('copayApp.controllers').controller('SettingsController', function
|
||||||
$scope.insightHost = config.blockchain.host;
|
$scope.insightHost = config.blockchain.host;
|
||||||
$scope.insightPort = config.blockchain.port;
|
$scope.insightPort = config.blockchain.port;
|
||||||
$scope.insightSecure = config.blockchain.schema === 'https';
|
$scope.insightSecure = config.blockchain.schema === 'https';
|
||||||
$scope.disableVideo = typeof config.disableVideo === undefined ? true : config.disableVideo;
|
|
||||||
$scope.forceNetwork = config.forceNetwork;
|
$scope.forceNetwork = config.forceNetwork;
|
||||||
|
|
||||||
$scope.unitOpts = [{
|
$scope.unitOpts = [{
|
||||||
|
|
@ -85,7 +84,6 @@ angular.module('copayApp.controllers').controller('SettingsController', function
|
||||||
schema: $scope.insightSecure ? 'https' : 'http',
|
schema: $scope.insightSecure ? 'https' : 'http',
|
||||||
},
|
},
|
||||||
network: network,
|
network: network,
|
||||||
disableVideo: $scope.disableVideo,
|
|
||||||
unitName: $scope.selectedUnit.shortName,
|
unitName: $scope.selectedUnit.shortName,
|
||||||
unitToSatoshi: $scope.selectedUnit.value,
|
unitToSatoshi: $scope.selectedUnit.value,
|
||||||
unitDecimals: $scope.selectedUnit.decimals,
|
unitDecimals: $scope.selectedUnit.decimals,
|
||||||
|
|
|
||||||
|
|
@ -1,46 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
angular.module('copayApp.controllers').controller('VideoController',
|
|
||||||
function($scope, $rootScope, $sce) {
|
|
||||||
|
|
||||||
$rootScope.videoInfo = {};
|
|
||||||
|
|
||||||
// Cached list of copayers
|
|
||||||
$scope.copayers = $rootScope.wallet.getRegisteredPeerIds();
|
|
||||||
|
|
||||||
$scope.copayersList = function() {
|
|
||||||
return $rootScope.wallet.getRegisteredPeerIds();
|
|
||||||
}
|
|
||||||
|
|
||||||
$scope.hasVideo = function(copayer) {
|
|
||||||
return $rootScope.videoInfo[copayer.peerId];
|
|
||||||
}
|
|
||||||
|
|
||||||
$scope.isConnected = function(copayer) {
|
|
||||||
return $rootScope.wallet.getOnlinePeerIDs().indexOf(copayer.peerId) != -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
$scope.isBackupReady = function(copayer) {
|
|
||||||
return $rootScope.wallet.publicKeyRing.isBackupReady(copayer.copayerId);
|
|
||||||
}
|
|
||||||
|
|
||||||
$scope.getVideoURL = function(copayer) {
|
|
||||||
if (config.disableVideo) return;
|
|
||||||
|
|
||||||
var vi = $scope.videoInfo[copayer.peerId];
|
|
||||||
if (!vi) return;
|
|
||||||
|
|
||||||
if ($scope.isConnected(copayer)) {
|
|
||||||
// peer disconnected, remove his video
|
|
||||||
delete $rootScope.videoInfo[copayer.peerId];
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var encoded = vi.url;
|
|
||||||
var url = decodeURI(encoded);
|
|
||||||
var trusted = $sce.trustAsResourceUrl(url);
|
|
||||||
return trusted;
|
|
||||||
};
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
@ -109,20 +109,6 @@ angular.module('copayApp.directives')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.directive('avatar', function($rootScope, controllerUtils) {
|
|
||||||
return {
|
|
||||||
link: function(scope, element, attrs) {
|
|
||||||
var peer = JSON.parse(attrs.peer)
|
|
||||||
var peerId = peer.peerId;
|
|
||||||
var nick = peer.nick;
|
|
||||||
element.addClass('video-small');
|
|
||||||
var muted = controllerUtils.getVideoMutedStatus(peerId);
|
|
||||||
if (true || muted) { // mute everyone for now
|
|
||||||
element.attr("muted", true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.directive('contact', function() {
|
.directive('contact', function() {
|
||||||
return {
|
return {
|
||||||
restrict: 'E',
|
restrict: 'E',
|
||||||
|
|
|
||||||
|
|
@ -455,28 +455,12 @@ Wallet.prototype.netStart = function(callback) {
|
||||||
self.emit('ready', net.getPeer());
|
self.emit('ready', net.getPeer());
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
self.emit('publicKeyRingUpdated', true);
|
self.emit('publicKeyRingUpdated', true);
|
||||||
//self.scheduleConnect();
|
|
||||||
// no connection logic for now
|
// no connection logic for now
|
||||||
self.emit('txProposalsUpdated');
|
self.emit('txProposalsUpdated');
|
||||||
}, 10);
|
}, 10);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// not being used now
|
|
||||||
Wallet.prototype.scheduleConnect = function() {
|
|
||||||
var self = this;
|
|
||||||
if (self.network.isOnline()) {
|
|
||||||
self.connectToAll();
|
|
||||||
self.currentDelay = self.currentDelay * 2 || self.reconnectDelay;
|
|
||||||
setTimeout(self.scheduleConnect.bind(self), self.currentDelay);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Wallet.prototype.getOnlinePeerIDs = function() {
|
|
||||||
return this.network.getOnlinePeerIDs();
|
|
||||||
};
|
|
||||||
|
|
||||||
Wallet.prototype.getRegisteredCopayerIds = function() {
|
Wallet.prototype.getRegisteredCopayerIds = function() {
|
||||||
var l = this.publicKeyRing.registeredCopayers();
|
var l = this.publicKeyRing.registeredCopayers();
|
||||||
var copayers = [];
|
var copayers = [];
|
||||||
|
|
|
||||||
|
|
@ -2,17 +2,8 @@
|
||||||
var bitcore = require('bitcore');
|
var bitcore = require('bitcore');
|
||||||
|
|
||||||
angular.module('copayApp.services')
|
angular.module('copayApp.services')
|
||||||
.factory('controllerUtils', function($rootScope, $sce, $location, notification, $timeout, video, uriHandler, rateService) {
|
.factory('controllerUtils', function($rootScope, $sce, $location, notification, $timeout, uriHandler, rateService) {
|
||||||
var root = {};
|
var root = {};
|
||||||
root.getVideoMutedStatus = function(copayer) {
|
|
||||||
if (!$rootScope.videoInfo) return;
|
|
||||||
|
|
||||||
var vi = $rootScope.videoInfo[copayer]
|
|
||||||
if (!vi) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
return vi.muted;
|
|
||||||
};
|
|
||||||
|
|
||||||
root.redirIfLogged = function() {
|
root.redirIfLogged = function() {
|
||||||
if ($rootScope.wallet) {
|
if ($rootScope.wallet) {
|
||||||
|
|
@ -27,7 +18,6 @@ angular.module('copayApp.services')
|
||||||
$rootScope.wallet = null;
|
$rootScope.wallet = null;
|
||||||
delete $rootScope['wallet'];
|
delete $rootScope['wallet'];
|
||||||
|
|
||||||
video.close();
|
|
||||||
// Clear rootScope
|
// Clear rootScope
|
||||||
for (var i in $rootScope) {
|
for (var i in $rootScope) {
|
||||||
if (i.charAt(0) != '$') {
|
if (i.charAt(0) != '$') {
|
||||||
|
|
@ -102,18 +92,6 @@ angular.module('copayApp.services')
|
||||||
root.installStartupHandlers(w, $scope);
|
root.installStartupHandlers(w, $scope);
|
||||||
root.updateGlobalAddresses();
|
root.updateGlobalAddresses();
|
||||||
|
|
||||||
var handlePeerVideo = function(err, peerID, url) {
|
|
||||||
if (err) {
|
|
||||||
delete $rootScope.videoInfo[peerID];
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
$rootScope.videoInfo[peerID] = {
|
|
||||||
url: encodeURI(url),
|
|
||||||
muted: peerID === w.network.peerId
|
|
||||||
};
|
|
||||||
$rootScope.$digest();
|
|
||||||
};
|
|
||||||
|
|
||||||
notification.enableHtml5Mode(); // for chrome: if support, enable it
|
notification.enableHtml5Mode(); // for chrome: if support, enable it
|
||||||
|
|
||||||
w.on('corrupt', function(peerId) {
|
w.on('corrupt', function(peerId) {
|
||||||
|
|
@ -128,8 +106,6 @@ angular.module('copayApp.services')
|
||||||
} else {
|
} else {
|
||||||
$location.path('receive');
|
$location.path('receive');
|
||||||
}
|
}
|
||||||
if (!config.disableVideo)
|
|
||||||
video.setOwnPeer(myPeerID, w, handlePeerVideo);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
w.on('publicKeyRingUpdated', function(dontDigest) {
|
w.on('publicKeyRingUpdated', function(dontDigest) {
|
||||||
|
|
@ -172,9 +148,6 @@ angular.module('copayApp.services')
|
||||||
root.onErrorDigest(null, msg);
|
root.onErrorDigest(null, msg);
|
||||||
});
|
});
|
||||||
w.on('connect', function(peerID) {
|
w.on('connect', function(peerID) {
|
||||||
if (peerID && !config.disableVideo) {
|
|
||||||
video.callPeer(peerID, handlePeerVideo);
|
|
||||||
}
|
|
||||||
$rootScope.$digest();
|
$rootScope.$digest();
|
||||||
});
|
});
|
||||||
w.on('close', root.onErrorDigest);
|
w.on('close', root.onErrorDigest);
|
||||||
|
|
|
||||||
|
|
@ -1,92 +0,0 @@
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var Video = function() {
|
|
||||||
navigator.getUserMedia = navigator.getUserMedia ||
|
|
||||||
navigator.webkitGetUserMedia ||
|
|
||||||
navigator.mozGetUserMedia;
|
|
||||||
|
|
||||||
this.mediaConnections = {};
|
|
||||||
this.localStream = null;
|
|
||||||
};
|
|
||||||
|
|
||||||
Video.prototype.setOwnPeer = function(peer, wallet, cb) {
|
|
||||||
var self = this;
|
|
||||||
|
|
||||||
var VWIDTH = 320;
|
|
||||||
var VHEIGHT = 320;
|
|
||||||
var constraints = {
|
|
||||||
audio: true,
|
|
||||||
video: {
|
|
||||||
mandatory: {
|
|
||||||
maxWidth: VWIDTH,
|
|
||||||
maxHeight: VHEIGHT,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
navigator.getUserMedia(constraints, function(stream) {
|
|
||||||
// This is called when user accepts using webcam
|
|
||||||
self.localStream = stream;
|
|
||||||
var online = wallet.getOnlinePeerIDs();
|
|
||||||
for (var i = 0; i < online.length; i++) {
|
|
||||||
var o = online[i];
|
|
||||||
if (o !== peer.id) {
|
|
||||||
self.callPeer(o, cb);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
cb(null, peer.id, URL.createObjectURL(stream));
|
|
||||||
}, function() {
|
|
||||||
cb(new Error('Failed to access the webcam and microphone.'));
|
|
||||||
});
|
|
||||||
|
|
||||||
// Receiving a call
|
|
||||||
peer.on('call', function(mediaConnection) {
|
|
||||||
if (self.localStream) {
|
|
||||||
mediaConnection.answer(self.localStream);
|
|
||||||
} else {
|
|
||||||
mediaConnection.answer();
|
|
||||||
}
|
|
||||||
self._addCall(mediaConnection, cb);
|
|
||||||
});
|
|
||||||
this.peer = peer;
|
|
||||||
};
|
|
||||||
|
|
||||||
Video.prototype.callPeer = function(peerID, cb) {
|
|
||||||
if (this.localStream) {
|
|
||||||
var mediaConnection = this.peer.call(peerID, this.localStream);
|
|
||||||
this._addCall(mediaConnection, cb);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
Video.prototype._addCall = function(mediaConnection, cb) {
|
|
||||||
var self = this;
|
|
||||||
var peerID = mediaConnection.peer;
|
|
||||||
|
|
||||||
// Wait for stream on the call, then set peer video display
|
|
||||||
mediaConnection.on('stream', function(stream) {
|
|
||||||
cb(null, peerID, URL.createObjectURL(stream));
|
|
||||||
});
|
|
||||||
|
|
||||||
mediaConnection.on('close', function() {
|
|
||||||
cb(true, peerID, null); // ask to stop video streaming in UI
|
|
||||||
});
|
|
||||||
mediaConnection.on('error', function(e) {
|
|
||||||
cb(e, peerID, null);
|
|
||||||
});
|
|
||||||
this.mediaConnections[peerID] = mediaConnection;
|
|
||||||
}
|
|
||||||
|
|
||||||
Video.prototype.close = function() {
|
|
||||||
if (this.localStream) {
|
|
||||||
this.localStream.stop();
|
|
||||||
this.localStream.mozSrcObject = null;
|
|
||||||
this.localStream.src = "";
|
|
||||||
this.localStream.src = null;
|
|
||||||
this.localStream = null;
|
|
||||||
}
|
|
||||||
for (var i = 0; this.mediaConnections.length; i++) {
|
|
||||||
this.mediaConnections[i].close();
|
|
||||||
}
|
|
||||||
this.mediaConnections = {};
|
|
||||||
};
|
|
||||||
|
|
||||||
angular.module('copayApp.services').value('video', new Video());
|
|
||||||
|
|
@ -28,7 +28,6 @@ module.exports = function(config) {
|
||||||
'lib/angular-route/angular-route.min.js',
|
'lib/angular-route/angular-route.min.js',
|
||||||
'lib/angular-foundation/mm-foundation.min.js',
|
'lib/angular-foundation/mm-foundation.min.js',
|
||||||
'lib/angular-foundation/mm-foundation-tpls.min.js',
|
'lib/angular-foundation/mm-foundation-tpls.min.js',
|
||||||
'lib/peerjs/peer.js',
|
|
||||||
'lib/bitcore.js',
|
'lib/bitcore.js',
|
||||||
'lib/crypto-js/rollups/sha256.js',
|
'lib/crypto-js/rollups/sha256.js',
|
||||||
'lib/crypto-js/rollups/pbkdf2.js',
|
'lib/crypto-js/rollups/pbkdf2.js',
|
||||||
|
|
|
||||||
2657
lib/peer.js
2657
lib/peer.js
File diff suppressed because it is too large
Load diff
|
|
@ -116,12 +116,7 @@ describe("Unit: isMobile Service", function() {
|
||||||
isMobile.any().should.equal(true);
|
isMobile.any().should.equal(true);
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
describe("Unit: video service", function() {
|
|
||||||
beforeEach(angular.mock.module('copayApp.services'));
|
|
||||||
it('should contain a video service', inject(function(video) {
|
|
||||||
should.exist(video);
|
|
||||||
}));
|
|
||||||
});
|
|
||||||
describe("Unit: uriHandler service", function() {
|
describe("Unit: uriHandler service", function() {
|
||||||
beforeEach(angular.mock.module('copayApp.services'));
|
beforeEach(angular.mock.module('copayApp.services'));
|
||||||
it('should contain a uriHandler service', inject(function(uriHandler) {
|
it('should contain a uriHandler service', inject(function(uriHandler) {
|
||||||
|
|
|
||||||
|
|
@ -51,10 +51,10 @@
|
||||||
|
|
||||||
<div class="box-setup-copayers p20">
|
<div class="box-setup-copayers p20">
|
||||||
<div class="oh">
|
<div class="oh">
|
||||||
<div ng-include="'views/includes/video.html'"></div>
|
<div ng-include="'views/includes/copayer.html'"></div>
|
||||||
<div ng-if="!$root.wallet.publicKeyRing.isComplete()">
|
<div ng-if="!$root.wallet.publicKeyRing.isComplete()">
|
||||||
<img
|
<img
|
||||||
class="waiting br100 no-video"
|
class="waiting br100"
|
||||||
ng-if="!hasVideo(copayer)"
|
ng-if="!hasVideo(copayer)"
|
||||||
src="./img/satoshi.gif"
|
src="./img/satoshi.gif"
|
||||||
alt="Waiting Copayer"
|
alt="Waiting Copayer"
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,9 @@
|
||||||
<div ng-controller="VideoController">
|
<div ng-controller="CopayersController">
|
||||||
<div class="video-box" ng-repeat="copayer in copayersList()">
|
<div class="copay-box" ng-repeat="copayer in copayersList()">
|
||||||
<video
|
|
||||||
ng-if="hasVideo(copayer)"
|
|
||||||
peer="{{copayer}}" avatar autoplay
|
|
||||||
ng-class="true || isConnected(copayer) ? 'online' : 'offline'"
|
|
||||||
ng-src="{{getVideoURL(copayer)}}"></video>
|
|
||||||
|
|
||||||
<img
|
<img
|
||||||
class="br100 no-video"
|
class="br100 online"
|
||||||
ng-if="!hasVideo(copayer)"
|
|
||||||
ng-class="true || isConnected(copayer) ? 'online' : 'offline'"
|
|
||||||
src="./img/satoshi.gif"
|
src="./img/satoshi.gif"
|
||||||
alt="{{copayer}}"
|
alt="{{copayer.peerId}}"
|
||||||
width="70">
|
width="70">
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|
@ -1,55 +1,22 @@
|
||||||
<div ng-controller="VideoController" class="copayers">
|
<div ng-controller="CopayersController" class="copayers">
|
||||||
<div>
|
<h3>
|
||||||
<h3>
|
<i class="fi-torsos-all size-21 m20r"></i>
|
||||||
<i class="fi-torsos-all size-21 m20r"></i>
|
Copayers
|
||||||
Copayers
|
<small class="m15l">
|
||||||
<small class="m15l">
|
{{$root.wallet.requiredCopayers}} of {{$root.wallet.totalCopayers}}
|
||||||
{{$root.wallet.requiredCopayers}} of {{$root.wallet.totalCopayers}}
|
</small>
|
||||||
</small>
|
</h3>
|
||||||
</h3>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
<div class="copay-box-small" ng-repeat="copayer in copayers">
|
||||||
|
<img
|
||||||
|
class="br100 online"
|
||||||
|
src="./img/satoshi.gif"
|
||||||
|
alt="{{copayer.peerId}}"
|
||||||
|
width="30">
|
||||||
|
|
||||||
<ul class="copayer-list" ng-repeat="copayer in copayers">
|
<div class="ellipsis" tooltip-placement="top" tooltip="{{copayer.nick}}">
|
||||||
<li class="ellipsis">
|
<small class="text-gray" ng-show="copayer.index == 0">Me</small>
|
||||||
<video
|
<small class="text-gray" ng-show="copayer.index > 0">{{copayer.nick}}</small>
|
||||||
ng-if="hasVideo(copayer)"
|
</div>
|
||||||
peer="{{copayer}}" avatar autoplay
|
|
||||||
ng-class="isConnected(copayer) ? 'online' : 'offline'"
|
|
||||||
ng-src="{{getVideoURL(copayer)}}"></video>
|
|
||||||
|
|
||||||
<img
|
|
||||||
class="br100 oh no-video m20r"
|
|
||||||
ng-if="!hasVideo(copayer)"
|
|
||||||
ng-class="isConnected(copayer) ? 'online' : 'offline'"
|
|
||||||
src="./img/satoshi.gif"
|
|
||||||
alt="{{copayer}}"
|
|
||||||
width="70">
|
|
||||||
|
|
||||||
<span ng-show="copayer.index == 0">Me</span>
|
|
||||||
<span ng-show="copayer.index > 0">{{copayer.nick}}</span>
|
|
||||||
<span class="btn-copy" clip-copy="copayer.peerId"></span>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<div class="copayer-list-small-height" ng-repeat="copayer in copayers">
|
|
||||||
<span class="left" class="has-tip" tooltip-placement="top" tooltip="{{copayer.nick}}">
|
|
||||||
<video
|
|
||||||
ng-if="hasVideo(copayer)"
|
|
||||||
peer="{{copayer}}" avatar autoplay
|
|
||||||
ng-class="isConnected(copayer) ? 'online' : 'offline'"
|
|
||||||
ng-src="{{getVideoURL(copayer)}}"></video>
|
|
||||||
|
|
||||||
<img
|
|
||||||
class="br100 oh no-video m20r"
|
|
||||||
ng-if="!hasVideo(copayer)"
|
|
||||||
ng-class="isConnected(copayer) ? 'online' : 'offline'"
|
|
||||||
src="./img/satoshi.gif"
|
|
||||||
alt="{{copayer}}"
|
|
||||||
width="70">
|
|
||||||
|
|
||||||
<!-- <span ng-show="copayer.index == 0">Me</span>
|
|
||||||
<span ng-show="copayer.index > 0">{{copayer.nick}}</span>
|
|
||||||
<span class="btn-copy" clip-copy="copayer.peerId"></span> -->
|
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -31,11 +31,6 @@
|
||||||
<select class="form-control" ng-model="selectedAlternative" ng-options="alternative.name for alternative in alternativeOpts" required>
|
<select class="form-control" ng-model="selectedAlternative" ng-options="alternative.name for alternative in alternativeOpts" required>
|
||||||
</select>
|
</select>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
<fieldset>
|
|
||||||
<legend>Videoconferencing</legend>
|
|
||||||
<input id="disableVideo-opt" type="checkbox" ng-model="disableVideo" class="form-control">
|
|
||||||
<label for="disableVideo-opt">Disable videoconferencing (for slow networks)</label>
|
|
||||||
</fieldset>
|
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend>Insight API server</legend>
|
<legend>Insight API server</legend>
|
||||||
<label for="insight-host">Host</label>
|
<label for="insight-host">Host</label>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue