FS-8972 - [verto_communicator] add i18n using angular-translate and static file loader
This commit is contained in:
parent
ad72c7f56c
commit
6c197ae2f0
|
@ -120,6 +120,7 @@ module.exports = function (grunt) {
|
|||
'<%= config.app %>/**/*.html',
|
||||
'.tmp/styles/{,*/}*.css',
|
||||
'<%= config.app %>/images/{,*/}*',
|
||||
'<%= config.app %>/locales/{,*/}*',
|
||||
'.tmp/**/*.js',
|
||||
'<%= config.app %>/**/*.js'
|
||||
],
|
||||
|
@ -150,6 +151,7 @@ module.exports = function (grunt) {
|
|||
],
|
||||
routes: {
|
||||
'/partials': 'src/partials',
|
||||
'/locales': 'src/locales',
|
||||
'/config.json': 'src/config.json',
|
||||
'/contributors.txt': 'src/contributors.txt',
|
||||
'/bower_components': './bower_components',
|
||||
|
@ -309,7 +311,8 @@ module.exports = function (grunt) {
|
|||
'img/*.png',
|
||||
'images/{,*/}*.{webp}',
|
||||
'css/fonts/{,*/}*.*',
|
||||
'sounds/*.*'
|
||||
'sounds/*.*',
|
||||
'locales/*.*'
|
||||
]
|
||||
}, {
|
||||
expand: true,
|
||||
|
|
|
@ -43,7 +43,9 @@
|
|||
"jquery-json": "~2.5.1",
|
||||
"datatables": "~1.10.8",
|
||||
"angular-bootstrap": "~0.14.3",
|
||||
"bootstrap-material-design": "~0.3.0"
|
||||
"bootstrap-material-design": "~0.3.0",
|
||||
"angular-translate": "~2.10.0",
|
||||
"angular-translate-loader-static-files": "~2.10.0"
|
||||
},
|
||||
"resolutions": {
|
||||
"angular": "~1.3.15",
|
||||
|
|
|
@ -1728,6 +1728,10 @@ body:-webkit-full-screen #incall .video-footer {
|
|||
color: white;
|
||||
}
|
||||
|
||||
#settings .checkbox .checkbox-material .check {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
#settings .btn {
|
||||
color: rgba(0, 10, 66, 0.84);
|
||||
background-color: #E8E8E8;
|
||||
|
|
|
@ -97,6 +97,8 @@
|
|||
<script src="bower_components/datatables/media/js/jquery.dataTables.js"></script>
|
||||
<script src="bower_components/bootstrap-material-design/dist/js/material.js"></script>
|
||||
<script src="bower_components/bootstrap-material-design/dist/js/ripples.js"></script>
|
||||
<script src="bower_components/angular-translate/angular-translate.js"></script>
|
||||
<script src="bower_components/angular-translate-loader-static-files/angular-translate-loader-static-files.js"></script>
|
||||
<!-- endbower -->
|
||||
<!-- endbuild -->
|
||||
|
||||
|
|
|
@ -0,0 +1,143 @@
|
|||
{
|
||||
"TITLE_ACTIVE_CALL": "Oops, Active Call in Course.",
|
||||
"MESSAGE_ACTIVE_CALL_HANGUP": "It seems that you are in a call. Do you want to hang up?",
|
||||
"MESSAGE_ACTIVE_CALL_BACK": "It seems you were in a call before leaving the last time. Wanna go back to that?",
|
||||
"TITLE_INCOMING_CALL": "Incoming Call",
|
||||
"MESSAGE_INCOMING_CALL": "from ",
|
||||
"MESSAGE_NO_HANGUP_CALL": "There is no call to hangup.",
|
||||
"MESSAGE_ENTER_FILENAME": "Please, enter filename",
|
||||
"TITLE_ENABLE_VIDEO": "Would you like to activate video for this call?",
|
||||
"MESSAGE_ENABLE_VIDEO": "Video will be active during the next calls.",
|
||||
"TITLE_INSERT_BANNER": "Please insert the banner text",
|
||||
"TITLE_INSERT_CANVAS_ID": "Please insert the Canvas Id",
|
||||
"TITLE_INSERT_LAYER": "Please insert the Layer",
|
||||
"TITLE_TRANSFER": "Transfer party?",
|
||||
"MESSAGE_TRANSFER": "To what destination would you like to transfer this call?",
|
||||
"LABEL_TRANSFER": "Destination",
|
||||
"MESSAGE_DISPLAY_SETTINGS": "Can't display preview settings during a call",
|
||||
"BUTTON_END_CALL": "End Call",
|
||||
"BUTTON_CLOSE": "Close",
|
||||
"MESSAGE_PLAY": "Play",
|
||||
"MESSAGE_STOP": "Stop",
|
||||
"MESSAGE_RECORD": "Record",
|
||||
"MESSAGE_STOP_RECORD": "Stop Record",
|
||||
"MESSAGE_SNAPSHOT": "Snapshot",
|
||||
"MESSAGE_VIDEO_MODE": "Video Mode",
|
||||
"MESSAGE_MUTE_MIC": "(un)Mute Mic",
|
||||
"MESSAGE_MUTE_VIDEO": "(un)Mute Video",
|
||||
"MESSAGE_FULLSCREEN": "Toggle Fullscreen Mode",
|
||||
"MESSAGE_SCREENSHARE": "Screenshare",
|
||||
"MESSAGE_OPEN_CLOSE_CHAT": "Open/Close Chat",
|
||||
"MESSAGE_SPEAKER": "Speaker",
|
||||
"MESSAGE_POPUP": "Popup",
|
||||
"CHAT_TITLE_MEMBERS": "Members",
|
||||
"CHAT_TITLE": "Chat",
|
||||
"CHAT_NO_MEMBERS": "There are no members to show.",
|
||||
"CHAT_GENERAL": "General",
|
||||
"CHAT_TITLE_KICK": "Kick",
|
||||
"CHAT_KICK": "Kick",
|
||||
"CHAT_TITLE_VIDEO_FLOOR": "Video Floor",
|
||||
"CHAT_FLOOR": "Floor",
|
||||
"CHAT_TITLE_TRANSFER": "Transfer",
|
||||
"CHAT_TRANSFER": "Transfer",
|
||||
"CHAT_BANNER": "Banner",
|
||||
"CHAT_TITLE_SET": "Set",
|
||||
"CHAT_SET": "Set",
|
||||
"CHAT_TITLE_RESET": "Reset",
|
||||
"CHAT_RESET": "Reset",
|
||||
"CHAT_CANVAS": "Canvas",
|
||||
"CHAT_CANVAS_IN": "Canvas In",
|
||||
"CHAT_CANVAS_OUT": "Canvas Out",
|
||||
"CHAT_PREV": "Prev",
|
||||
"CHAT_NEXT": "Next",
|
||||
"CHAT_LAYER": "Layer",
|
||||
"CHAT_AUDIO_VIDEO": "Audio/Video",
|
||||
"CHAT_TITLE_MUTE_UNMUTE_MIC": "Mute/Unmute Mic",
|
||||
"CHAT_MUTE_MIC": "Mute",
|
||||
"CHAT_UNMUTE_MIC": "Unmute",
|
||||
"CHAT_TITLE_MUTE_UNMUTE_MIC": "Mute/Unmute Video",
|
||||
"CHAT_NO_MESSAGES": "There are no messages to show.",
|
||||
"CHAT_SEND_MESSAGE": "Send",
|
||||
"CHAT_TYPE_MESSAGE": "Type your message here...",
|
||||
"TITLE_CONTRIBUTORS": "Contributors",
|
||||
"MESSAGE_CONNECTION_UNTRUSTED": "This Connection is Untrusted.",
|
||||
"MESSAGE_TOGGLE_NAVIGATION": "Toggle navigation",
|
||||
"BANDWIDTH_INFO": "Bandwidth Info",
|
||||
"BANDWIDTH_INFO_INCOMING": "Incoming:",
|
||||
"BANDWIDTH_INFO_OUTGOING": "Outgoing:",
|
||||
"BANDWIDTH_INFO_VIDEO_RES": "Video Resolution:",
|
||||
"IN_CALL": "In Call:",
|
||||
"LAST_CALL": "Last Call:",
|
||||
"OPEN_NEW_WINDOW": "Open New Window",
|
||||
"CHANGE_LOGIN_INFO": "Change Login Information",
|
||||
"LOGOUT": "Logout",
|
||||
"ABOUT": "About",
|
||||
"HELP": "Help",
|
||||
"CONTRIBUTORS": "Contributors",
|
||||
"TITLE_PREVIEW_SETTINGS": "Setup your camera and microphone settings",
|
||||
"CAMERA__SETTNGS": "Camera:",
|
||||
"MIC_SETTINGS": "Microphone:",
|
||||
"SAVE": "Save",
|
||||
"LOADING": "Loading",
|
||||
"ERRORS" : "Errors",
|
||||
"CALLING_TO": "Calling to ",
|
||||
"CANCELLING": "Cancelling...",
|
||||
"DETERMINING_SPEED": "Determining your speed...",
|
||||
"CALL_HISTORY": "Call History",
|
||||
"CLEAR_CALL_HISTORY": "Clear History",
|
||||
"NO_CALL_HISTORY": "No history calls.",
|
||||
"ENTER_EXTENSION": "Enter an extension",
|
||||
"CALL_EXTENSION": "Call Extension",
|
||||
"LOGIN": "Login",
|
||||
"LOGIN_INFORMATION": "Login Information",
|
||||
"SAVE_LOGIN_INFORMATION": "Save Login Information",
|
||||
"INVALID_LOGIN_FIELDS": "Verify the fields below and try again.",
|
||||
"NAME": "Name",
|
||||
"YOUR_NAME": "Your name",
|
||||
"EMAIL": "Email",
|
||||
"YOUR_EMAIL": "Your email",
|
||||
"USER": "User",
|
||||
"PASSWORD": "Password",
|
||||
"CALLER_ID": "Caller ID",
|
||||
"HOSTNAME": "Hostname",
|
||||
"WEBSOCKET_URL": "Websocket URL",
|
||||
"SETTINGS": "Settings",
|
||||
"DEVICE_SETTINGS": "Device Settings",
|
||||
"SHARE_DEVICE": "Share device",
|
||||
"SPEAKER": "Speaker:",
|
||||
"SPEAKER_FEATURE": "Your browser doesn't seem to support this feature",
|
||||
"PREVIEW_SETTINGS": "Preview Settings",
|
||||
"REFRESH_DEVICE_LIST": "Refresh device list",
|
||||
"GENERAL_SETTINGS": "General settings:",
|
||||
"USE_VIDEO": "Use Video",
|
||||
"USE_STEREO_AUDIO": "Stereo Audio",
|
||||
"USE_STUN": "Use STUN",
|
||||
"SCALE_VIDEO": "Scale Remote Video To Match Camera Resolution",
|
||||
"ASK_BEFORE_RECOVER": "Ask before recovering call",
|
||||
"BEST_FRAME_RATE": "Best frame rate:",
|
||||
"AUDIO_SETTINGS": "Audio settings:",
|
||||
"ECHO_CANCEL": "Echo Cancellation",
|
||||
"NOISE_SUPPRESSION": "Noise Suppression",
|
||||
"HIGHPASS_FILTER": "Highpass Filter",
|
||||
"VIDEO_SETTINGS": "Video settings:",
|
||||
"REMOTE_ENCODER": "Dedicated Remote Encoder enabled.",
|
||||
"AUTO_SPEED_RES": "Automatically determine speed and resolution settings",
|
||||
"RECHECK_BANDWIDTH": "Recheck bandwidth before each outgoing call",
|
||||
"CHECK_NETWORK_SPEED": "Check Network Speed",
|
||||
"VIDEO_QUALITY": "Video quality:",
|
||||
"MAX_INCOMING_BANDWIDTH": "Max incoming bandwidth:",
|
||||
"MAX_OUTGOING_BANDWIDTH": "Max outgoing bandwidth:",
|
||||
"FACTORY_RESET": "Factory reset",
|
||||
"SAVE_DEVICE_SETTINGS": "Save Device Settings",
|
||||
"BROWSER_COMPATIBILITY": "Checking browser compatibility.",
|
||||
"REFRESH_MEDIA_DEVICES": "Refresh Media Devices.",
|
||||
"BROWSER_WITHOUT_WEBRTC": "Error: browser doesn't support WebRTC.",
|
||||
"CHECK_PERMISSION_MEDIA": "Checking media permissions",
|
||||
"CHECK_PROVISIONING_CONF": "Provisioning configuration.",
|
||||
"CHECK_LOGIN": "Checking login.",
|
||||
"CHECK_CONNECTION_SPEED": "Check Connection Speed.",
|
||||
"ERROR_PERMISSION_MEDIA": "Error: Media Permission Denied",
|
||||
"ERROR_PROVISIONING_CONF": "Error: Provision failed.",
|
||||
"PLEASE_WAIT": "Please wait..."
|
||||
}
|
||||
|
|
@ -0,0 +1,144 @@
|
|||
{
|
||||
"TITLE_ACTIVE_CALL": "Oops, Chiamata in corso.",
|
||||
"MESSAGE_ACTIVE_CALL_HANGUP": "Sembra che tu sia in conversazione. Vuoi chiudere la chiamata?",
|
||||
"MESSAGE_ACTIVE_CALL_BACK": "Sembra che eri in conversazione prima di abbandonare la sessione l'ultima volta. Vuoi tornare in quella conversazione?",
|
||||
"TITLE_INCOMING_CALL": "Chiamata in arrivo",
|
||||
"MESSAGE_INCOMING_CALL": "da ",
|
||||
"MESSAGE_NO_HANGUP_CALL": "Non ci sono chiamate da chiudere.",
|
||||
"MESSAGE_ENTER_FILENAME": "Per favore, inserisci il nome del file",
|
||||
"TITLE_ENABLE_VIDEO": "Vuoi attivare il video per questa chiamata?",
|
||||
"MESSAGE_ENABLE_VIDEO": "Il video verrà attivato a partire dalla prossima chiamata.",
|
||||
"TITLE_INSERT_BANNER": "Per favore inserisci il testo del banner",
|
||||
"TITLE_INSERT_CANVAS_ID": "Please insert the Canvas Id",
|
||||
"TITLE_INSERT_LAYER": "Please insert the Layer",
|
||||
"TITLE_TRANSFER": "Transfer party?",
|
||||
"MESSAGE_TRANSFER": "To what destination would you like to transfer this call?",
|
||||
"LABEL_TRANSFER": "Destinazione",
|
||||
"MESSAGE_DISPLAY_SETTINGS": "Non è possibile mostrare le configurazioni video durante una chiamata",
|
||||
"BUTTON_END_CALL": "Termina la chiamata",
|
||||
"BUTTON_CLOSE": "Chiudi",
|
||||
"MESSAGE_PLAY": "Riproduci",
|
||||
"MESSAGE_STOP": "Ferma",
|
||||
"MESSAGE_RECORD": "Registra",
|
||||
"MESSAGE_STOP_RECORD": "Ferma la registrazione",
|
||||
"MESSAGE_SNAPSHOT": "Snapshot",
|
||||
"MESSAGE_VIDEO_MODE": "Video Mode",
|
||||
"MESSAGE_MUTE_MIC": "(un)Mute Mic",
|
||||
"MESSAGE_MUTE_VIDEO": "(un)Mute Video",
|
||||
"MESSAGE_FULLSCREEN": "Abilita/Disabilita schermo intero",
|
||||
"MESSAGE_SCREENSHARE": "Condividi lo schermo",
|
||||
"MESSAGE_OPEN_CLOSE_CHAT": "Apri/Chiudi Chat",
|
||||
"MESSAGE_SPEAKER": "Speaker",
|
||||
"MESSAGE_POPUP": "Popup",
|
||||
"CHAT_TITLE_MEMBERS": "Membri",
|
||||
"CHAT_TITLE": "Chat",
|
||||
"CHAT_NO_MEMBERS": "Non ci sono membri da mostrare.",
|
||||
"CHAT_GENERAL": "Generale",
|
||||
"CHAT_TITLE_KICK": "Kick",
|
||||
"CHAT_KICK": "Kick",
|
||||
"CHAT_TITLE_VIDEO_FLOOR": "Video Floor",
|
||||
"CHAT_FLOOR": "Floor",
|
||||
"CHAT_TITLE_TRASFER": "Transfer",
|
||||
"CHAT_TRANSFER": "Transfer",
|
||||
"CHAT_BANNER": "Banner",
|
||||
"CHAT_TITLE_SET": "Set",
|
||||
"CHAT_SET": "Set",
|
||||
"CHAT_TITLE_RESET": "Reset",
|
||||
"CHAT_RESET": "Reset",
|
||||
"CHAT_RESET": "Reset",
|
||||
"CHAT_CANVAS": "Canvas",
|
||||
"CHAT_CANVAS_IN": "Canvas In",
|
||||
"CHAT_CANVAS_OUT": "Canvas Out",
|
||||
"CHAT_PREV": "Prev",
|
||||
"CHAT_NEXT": "Next",
|
||||
"CHAT_LAYER": "Layer",
|
||||
"CHAT_AUDIO_VIDEO": "Audio/Video",
|
||||
"CHAT_TITLE_MUTE_UNMUTE_MIC": "Mute/Unmute Mic",
|
||||
"CHAT_MUTE_MIC": "Mute",
|
||||
"CHAT_UNMUTE_MIC": "Unmute",
|
||||
"CHAT_TITLE_MUTE_UNMUTE_MIC": "Mute/Unmute Video",
|
||||
"CHAT_NO_MESSAGES": "Non ci sono messaggi da mostrare.",
|
||||
"CHAT_SEND_MESSAGE": "Invia",
|
||||
"CHAT_TYPE_MESSAGE": "Scrivi il tuo messaggio qui...",
|
||||
"TITLE_CONTRIBUTORS": "Contributori",
|
||||
"MESSAGE_CONNECTION_UNTRUSTED": "Questa connessione non è sicura.",
|
||||
"MESSAGE_TOGGLE_NAVIGATION": "Abilita/Disabilita navigazione",
|
||||
"BANDWIDTH_INFO": "Informazioni sulla larghezza di banda",
|
||||
"BANDWIDTH_INFO_INCOMING": "Ingresso:",
|
||||
"BANDWIDTH_INFO_OUTGOING": "Uscita:",
|
||||
"BANDWIDTH_INFO_VIDEO_RES": "Risoluzione Video:",
|
||||
"IN_CALL": "In chiamata: ",
|
||||
"LAST_CALL": "Ultima chiamata: ",
|
||||
"OPEN_NEW_WINDOW": "Apri Una Nuova Finestra",
|
||||
"CHANGE_LOGIN_INFO": "Cambia le informazioni di login",
|
||||
"LOGOUT": "Logout",
|
||||
"ABOUT": "About",
|
||||
"HELP": "Aiuto",
|
||||
"CONTRIBUTORS": "Contributori",
|
||||
"TITLE_PREVIEW_SETTINGS": "Configura le impostazioni della tua video camera e del tuo microfono",
|
||||
"CAMERA_SETTINGS": "Video Camera:",
|
||||
"MIC_SETTINGS": "Microfono:",
|
||||
"SAVE": "Salva",
|
||||
"LOADING": "Caricamento",
|
||||
"ERRORS" : "Errori",
|
||||
"CALLING_TO": "Chiamata verso ",
|
||||
"CANCELLING": "In annullamento",
|
||||
"DETERMINING_SPEED": "Calcolo della tua velocità...",
|
||||
"CALL_HISTORY": "Cronologia Chiamate",
|
||||
"CLEAR_CALL_HISTORY": "Rimuovi la cronologia",
|
||||
"NO_CALL_HISTORY": "Nessuna chiamata nella cronologia.",
|
||||
"ENTER_EXTENSION": "Inserisci un numero",
|
||||
"CALL_EXTENSION": "Chiama il numero",
|
||||
"LOGIN": "Login",
|
||||
"LOGIN_INFORMATION": "Informazioni di login",
|
||||
"SAVE_LOGIN_INFORMATION": "Salva le informazioni di login",
|
||||
"INVALID_LOGIN_FIELDS": "Verifica i campi e prova di nuovo.",
|
||||
"NAME": "Nome",
|
||||
"YOUR_NAME": "Il tuo nome",
|
||||
"EMAIL": "Email",
|
||||
"YOUR_EMAIL": "Il tuo indirizzo email",
|
||||
"USER": "Utente",
|
||||
"PASSWORD": "Password",
|
||||
"CALLER_ID": "Caller ID",
|
||||
"HOSTNAME": "Hostname",
|
||||
"WEBSOCKET_URL": "Websocket URL",
|
||||
"SETTINGS": "Impostazioni",
|
||||
"DEVICE_SETTINGS": "Configurazione dei dispositivi",
|
||||
"SHARE_DEVICE": "Dispositivo in condivisione",
|
||||
"SPEAKER": "Altoparlante:",
|
||||
"SPEAKER_FEATURE": "Il tuo browser sembra non supportare questa funzionalità",
|
||||
"PREVIEW_SETTINGS": "Anteprima delle configurazioni",
|
||||
"REFRESH_DEVICE_LIST": "Aggiorna la lista dei dispositivi",
|
||||
"GENERAL_SETTINGS": "Configurazioni generali:",
|
||||
"USE_VIDEO": "Abilita Video",
|
||||
"USE_STEREO_AUDIO": "Abilita Audio Stereo",
|
||||
"USE_STUN": "Abilita STUN",
|
||||
"SCALE_VIDEO": "Scala il video remoto con la risoluzione della video camera",
|
||||
"ASK_BEFORE_RECOVER": "Chiedi prima di recuperare una chiamata",
|
||||
"BEST_FRAME_RATE": "Miglior frame rate:",
|
||||
"AUDIO_SETTINGS": "Impostazioni audio:",
|
||||
"ECHO_CANCEL": "Cancellatore d'eco",
|
||||
"NOISE_SUPPRESSION": "Soppressione del rumore",
|
||||
"HIGHPASS_FILTER": "Highpass Filter",
|
||||
"VIDEO_SETTINGS": "Impostazioni video:",
|
||||
"REMOTE_ENCODER": "Abilita codificatore remoto dedicato.",
|
||||
"AUTO_SPEED_RES": "Rileva in modo automatico la velocità e le impostazioni",
|
||||
"RECHECK_BANDWIDTH": "Controlla la larghezza di banda per ogni chiamata in uscita",
|
||||
"CHECK_NETWORK_SPEED": "Controllo della velocità di rete",
|
||||
"VIDEO_QUALITY": "Qualità video:",
|
||||
"MAX_INCOMING_BANDWIDTH": "Massima larghezza di banda in ingresso:",
|
||||
"MAX_OUTGOING_BANDWIDTH": "Massima larghezza di banda in uscita:",
|
||||
"FACTORY_RESET": "Reset ai valori di default",
|
||||
"SAVE_DEVICE_SETTINGS": "Salva le impostazioni dei dispositivi",
|
||||
"BROWSER_COMPATIBILITY": "Verifica compatibilità browser.",
|
||||
"REFRESH_MEDIA_DEVICES": "Aggiornamento dei dispositivi.",
|
||||
"BROWSER_WITHOUT_WEBRTC": "Errore: il browser non supporta WebRTC.",
|
||||
"CHECK_PERMISSION_MEDIA": "Verifica permessi dispositivi",
|
||||
"CHECK_PROVISIONING_CONF": "Recupero della configurazione.",
|
||||
"CHECK_LOGIN": "Verifica del login.",
|
||||
"CHECK_CONNECTION_SPEED": "Verifica velocità connessione.",
|
||||
"ERROR_PERMISSION_MEDIA": "Errore: permesso sui dispositivi negato",
|
||||
"ERROR_PROVISIONING_CONF": "Errore: Recupero configurazione fallito.",
|
||||
"PLEASE_WAIT": "Attendere prego..."
|
||||
}
|
||||
|
|
@ -2,19 +2,19 @@
|
|||
<ul class="nav nav-tabs" role="tablist" ng-init="activePane = 'members'">
|
||||
<li role="presentation" ng-class="{'active': activePane == 'members'}">
|
||||
<a ng-click="activePane = 'members'" href="">
|
||||
Members
|
||||
{{ 'CHAT_TITLE_MEMBERS' | translate}}
|
||||
</a>
|
||||
</li>
|
||||
<li role="presentation" ng-class="{'active': activePane == 'chat'}">
|
||||
<a ng-click="activePane = 'chat'" href="">
|
||||
Chat
|
||||
{{ 'CHAT_TITLE' | translate }}
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<div class="chat-members" ng-show="activePane == 'members'">
|
||||
<div ng-show="!members.length">
|
||||
<p class="text-center text-muted">There are no members to show.</p>
|
||||
<p class="text-center text-muted">{{ 'CHAT_NO_MEMBERS' | translate }}</p>
|
||||
</div>
|
||||
|
||||
<div ng-repeat="member in members" class="chat-member-item" ng-class="{ opened: $index == openId }">
|
||||
|
@ -56,33 +56,33 @@
|
|||
<div class="admin-controls" ng-if="verto.data.confRole == 'moderator'" ng-show="$index == $parent.openId">
|
||||
<div>
|
||||
<div class="col-md-6 ctrl-section">
|
||||
<h3>General</h3>
|
||||
<h3>{{ 'CHAT_GENERAL' | translate }}</h3>
|
||||
<div class="group btn-group-justified">
|
||||
<a href="" class="btn btn-xs" ng-click="confKick(member.id)" title="Kick">
|
||||
<a href="" class="btn btn-xs" ng-click="confKick(member.id)" title="{{ 'CHAT_TITLE_KICK' | translate }}">
|
||||
<i class="mdi-fw mdi-av-not-interested"></i>
|
||||
Kick
|
||||
{{ 'CHAT_KICK' | translate }}
|
||||
</a>
|
||||
<a href="" class="btn btn-xs" ng-click="confVideoFloor(member.id)" title="Video Floor">
|
||||
<a href="" class="btn btn-xs" ng-click="confVideoFloor(member.id)" title="{{ 'CHAT_TITLE_VIDEO_FLOOR' | translate }}">
|
||||
<i class="mdi-fw mdi-action-aspect-ratio"></i>
|
||||
Floor
|
||||
{{ 'CHAT_FLOOR' | translate }}
|
||||
</a>
|
||||
<a href="" class="btn btn-xs" ng-click="confTransfer(member.id)" title="Transfer">
|
||||
<a href="" class="btn btn-xs" ng-click="confTransfer(member.id)" title="{{ 'CHAT_TITLE_TRANSFER' | translate }}">
|
||||
<i class="mdi-fw mdi-communication-call-made"></i>
|
||||
<span style="margin-left: -9px">Transfer</span>
|
||||
<span style="margin-left: -9px">{{ 'CHAT_TRANSFER' | translate }}</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 ctrl-section">
|
||||
<h3>Banner</h3>
|
||||
<h3>{{ 'CHAT_BANNER' | translate }}</h3>
|
||||
<div class="group btn-group-justified">
|
||||
<a href="" class="btn btn-xs" ng-click="confBanner(member.id)" title="Set">
|
||||
<a href="" class="btn btn-xs" ng-click="confBanner(member.id)" title="{{ 'CHAT_TITLE_SET' | translate }}">
|
||||
<i class="mdi-fw mdi-toggle-radio-button-on"></i>
|
||||
Set
|
||||
{{ 'CHAT_SET' | translate }}
|
||||
</a>
|
||||
<a href="" class="btn btn-xs" ng-click="confResetBanner(member.id)" title="Reset">
|
||||
<a href="" class="btn btn-xs" ng-click="confResetBanner(member.id)" title="{{ 'CHAT_TITLE_RESET' | translate }}">
|
||||
<i class="mdi-fw mdi-content-clear"></i>
|
||||
Reset
|
||||
{{ 'CHAT_RESET' | translate }}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -90,61 +90,61 @@
|
|||
|
||||
<div>
|
||||
<div class="col-md-6 ctrl-section" ng-if="conf.canvasCount > 1">
|
||||
<h3>Canvas</h3>
|
||||
<h3>{{ 'CHAT_CANVAS' | translate }}</h3>
|
||||
<div class="group btn-group-justified">
|
||||
<a href="" class="btn btn-xs" ng-click="confCanvasIn(member.id, 'prev')" title="Canvas In">
|
||||
<a href="" class="btn btn-xs" ng-click="confCanvasIn(member.id, 'prev')" title="{{ 'CHAT_CANVAS_IN' | translate }}">
|
||||
<i class="mdi-fw mdi-action-open-in-browser"></i>
|
||||
Prev
|
||||
{{ 'CHAT_PREV' | translate }}
|
||||
</a>
|
||||
<a href="" class="btn btn-xs" ng-click="confCanvasIn(member.id)" title="Canvas In">
|
||||
<a href="" class="btn btn-xs" ng-click="confCanvasIn(member.id)" title="{{ 'CHAT_CANVAS_IN' | translate }}">
|
||||
<i class="mdi-fw mdi-action-open-in-browser"></i>
|
||||
Id
|
||||
</a>
|
||||
<a href="" class="btn btn-xs" ng-click="confCanvasIn(member.id, 'next')" title="Canvas In">
|
||||
<a href="" class="btn btn-xs" ng-click="confCanvasIn(member.id, 'next')" title="{{ 'CHAT_CANVAS_IN' | translate }}">
|
||||
<i class="mdi-fw mdi-action-open-in-browser"></i>
|
||||
Next
|
||||
{{ 'CHAT_NEXT' | translate }}
|
||||
</a>
|
||||
</div>
|
||||
<div class="group btn-group-justified">
|
||||
<a href="" class="btn btn-xs" ng-click="confCanvasOut(member.id, 'prev')" title="Canvas Out">
|
||||
<a href="" class="btn btn-xs" ng-click="confCanvasOut(member.id, 'prev')" title="{{ 'CHAT_CANVAS_OUT' | translate }}">
|
||||
<i class="mdi-fw mdi-fw mdi-action-system-update-tv"></i>
|
||||
Prev
|
||||
{{ 'CHAT_PREV' | translate }}
|
||||
</a>
|
||||
<a href="" class="btn btn-xs" ng-click="confCanvasOut(member.id)" title="Canvas Out">
|
||||
<a href="" class="btn btn-xs" ng-click="confCanvasOut(member.id)" title="{{ 'CHAT_CANVAS_OUT' | translate }}">
|
||||
<i class="mdi-fw mdi-fw mdi-action-system-update-tv"></i>
|
||||
Id
|
||||
</a>
|
||||
<a href="" class="btn btn-xs" ng-click="confCanvasOut(member.id, 'next')" title="Canvas Out">
|
||||
<a href="" class="btn btn-xs" ng-click="confCanvasOut(member.id, 'next')" title="{{ 'CHAT_CANVAS_OUT' | translate }}">
|
||||
<i class="mdi-fw mdi-fw mdi-action-system-update-tv"></i>
|
||||
Next
|
||||
{{ 'CHAT_NEXT' | translate }}
|
||||
</a>
|
||||
</div>
|
||||
<div class="group btn-group-justified">
|
||||
<a href="" class="btn btn-xs" ng-click="confLayer(member.id, 'prev')" title="Layer">
|
||||
<a href="" class="btn btn-xs" ng-click="confLayer(member.id, 'prev')" title="{{ 'CHAT_LAYER' | translate }}">
|
||||
<i class="mdi-fw mdi-action-view-carousel"></i>
|
||||
Prev
|
||||
{{ 'CHAT_PREV' | translate }}
|
||||
</a>
|
||||
<a href="" class="btn btn-xs" ng-click="confLayer(member.id)" title="Layer">
|
||||
<a href="" class="btn btn-xs" ng-click="confLayer(member.id)" title="{{ 'CHAT_LAYER' | translate }}">
|
||||
<i class="mdi-fw mdi-action-view-carousel"></i>
|
||||
Id
|
||||
</a>
|
||||
<a href="" class="btn btn-xs" ng-click="confLayer(member.id, 'next')" title="Layer">
|
||||
<a href="" class="btn btn-xs" ng-click="confLayer(member.id, 'next')" title="{{ 'CHAT_LAYER' | translate }}">
|
||||
<i class="mdi-fw mdi-action-view-carousel"></i>
|
||||
Next
|
||||
{{ 'CHAT_NEXT' | translate }}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 ctrl-section">
|
||||
<h3>Audio/Video</h3>
|
||||
<h3>{{ 'CHAT_AUDIO_VIDEO' | translate }}</h3>
|
||||
<div class="group btn-group-justified">
|
||||
<a href="" class="btn btn-xs" ng-click="confMuteMic(member.id)" title="Mute/Unmute Mic">
|
||||
<a href="" class="btn btn-xs" ng-click="confMuteMic(member.id)" title="{{ 'CHAT_TITLE_MUTE_UNMUTE_MIC' | translate }}">
|
||||
<i class="mdi-fw" ng-class="member.status.audio.muted ? 'mdi-av-mic-off' : 'mdi-av-mic'"></i>
|
||||
{{ member.status.audio.muted ? 'Unmute' : 'Mute' }}
|
||||
{{ member.status.audio.muted ? 'CHAT_UNMUTE_MIC' : 'CHAT_MUTE_MIC' | translate }}
|
||||
</a>
|
||||
<a href="" ng-class="{ 'disabled': !member.status.video }" class="btn btn-xs" ng-click="confMuteVideo(member.id)" title="Mute/Unmute Video">
|
||||
<a href="" ng-class="{ 'disabled': !member.status.video }" class="btn btn-xs" ng-click="confMuteVideo(member.id)" title="{{ 'CHAT_TITLE_MUTE_UNMUTE_VIDEO' | translate }}">
|
||||
<i class="mdi-fw" ng-class="member.status.video.muted ? 'mdi-av-videocam-off' : 'mdi-av-videocam'"></i>
|
||||
{{ member.status.video.muted ? 'Unmute' : 'Mute' }}
|
||||
{{ member.status.video.muted ? 'CHAT_UNMUTE_MIC' : 'CHAT_MUTE_MIC' | translate }}
|
||||
</a>
|
||||
</div>
|
||||
<div class="group btn-group-justified">
|
||||
|
@ -176,7 +176,7 @@
|
|||
<div class="chat-history" ng-show="activePane == 'chat'">
|
||||
<div class="chat-messages">
|
||||
<div class="chat-message" ng-show="!messages.length">
|
||||
<p class="text-center text-muted">There are no messages to show.</p>
|
||||
<p class="text-center text-muted">{{ 'CHAT_NO_MESSAGES' | translate }}</p>
|
||||
</div>
|
||||
<div class="chat-message" ng-repeat="message in messages" title="Sent at {{ message.created_at|date }}.">
|
||||
<div class="chat-message-metadata">{{ message.from }}:</div>
|
||||
|
@ -188,9 +188,9 @@
|
|||
<div class="chat-message-input">
|
||||
<form ng-submit="send()" >
|
||||
<div class="chat-message-input-group">
|
||||
<textarea ng-model="message" ng-keydown="($event.keyCode == 13 && $event.shiftKey !== true) && send($event)" required="required" class="form-control input-sm" placeholder="Type your message here..."></textarea>
|
||||
<textarea ng-model="message" ng-keydown="($event.keyCode == 13 && $event.shiftKey !== true) && send($event)" required="required" class="form-control input-sm" placeholder="{{ 'CHAT_TYPE_MESSAGE' | translate }}"></textarea>
|
||||
<button class="btn btn-success btn-sm" type="submit">
|
||||
Send
|
||||
{{ 'CHAT_SEND_MESSAGE' | translate }}
|
||||
<span class="mdi-navigation-arrow-forward chat-message-input-group-icon-button"></span>
|
||||
</button>
|
||||
</div>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<div class="modal-header">
|
||||
<h3 class="modal-title">Contributors</h3>
|
||||
<h3 class="modal-title">{{ 'TITLE_CONTRIBUTORS' | translate}}</h3>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<ul class="contributors">
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
<div ng-show="loading">
|
||||
<h2 ng-show="cancelled" style="margin-top: 4%;" class="text-center">Cancelling...</h2>
|
||||
<h2 ng-show="cancelled" style="margin-top: 4%;" class="text-center">{{ 'CANCELLING' | translate}}</h2>
|
||||
<span ng-show="!cancelled">
|
||||
<h2 style="margin-top: 4%;" class="text-center">Determining your speed...</h2>
|
||||
<h2 style="margin-top: 4%;" class="text-center">{{ 'DETERMINING_SPEED' | translate}}</h2>
|
||||
<h4 style="margin-top: 4%;" class="text-center">
|
||||
Calling to {{ dialpadNumber }}...
|
||||
{{ 'CALLING_TO' | translate}} {{ dialpadNumber }}...
|
||||
<a class="btn btn-sm btn-raised btn-warning" ng-click="cancel()">
|
||||
Cancel<div class="ripple-container"></div>
|
||||
</a>
|
||||
|
@ -19,7 +19,7 @@
|
|||
<div class="panel-heading">
|
||||
<div class="panel-title">
|
||||
<i class="mdi-navigation-arrow-back back-icon" ng-click="viewCallsList()" ng-if="call_list"></i>
|
||||
<span ng-if="!call_list">Call History</span>
|
||||
<span ng-if="!call_list">{{ 'CALL_HISTORY' | translate}}</span>
|
||||
<span ng-if="call_list">{{ call_list[0].number }}</span>
|
||||
|
||||
<span class="pull-right pull-right-margin dropdown">
|
||||
|
@ -27,14 +27,14 @@
|
|||
<i class="mdi-navigation-more-vert"></i>
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="" ng-click="clearCallHistory()">Clear History</a></li>
|
||||
<li><a href="" ng-click="clearCallHistory()">{{ 'CLEAR_CALL_HISTORY' | translate}}</a></li>
|
||||
</ul>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<ul class="call-history">
|
||||
<div ng-if="!has_history">
|
||||
<p class="text-center text-muted">No history calls.</p>
|
||||
<p class="text-center text-muted">{{ 'NO_CALL_HISTORY' | translate}}</p>
|
||||
</div>
|
||||
|
||||
<li ng-repeat="number in history_control track by number" ng-if="!call_list">
|
||||
|
@ -72,7 +72,7 @@
|
|||
<i class="mdi-action-settings-phone"></i>
|
||||
</a>
|
||||
</span>
|
||||
<input name="dialpadnumber" type="text" class="form-control text-center" placeholder="Enter an extension" ng-model="dialpadNumber" autofocus/>
|
||||
<input name="dialpadnumber" type="text" class="form-control text-center" placeholder="{{ 'ENTER_EXTENSION' | translate}}" ng-model="dialpadNumber" autofocus/>
|
||||
<span class="input-group-btn">
|
||||
<a href="" ng-click="backspace()">
|
||||
<i class="mdi-content-backspace"></i>
|
||||
|
@ -163,7 +163,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="form-group text-center">
|
||||
<button type="submit" class="btn btn-success btn-fab" ng-click="call(dialpadNumber)" title="Call Extension">
|
||||
<button type="submit" class="btn btn-success btn-fab" ng-click="call(dialpadNumber)" title="{{ 'CALL_EXTENSION' | translate}}">
|
||||
<i class="mdi-communication-call"></i>
|
||||
</button>
|
||||
</div>
|
||||
|
|
|
@ -2,59 +2,59 @@
|
|||
<div class="col-md-4 col-xs-12 col-sm-12 centered-block">
|
||||
<div class="panel panel-default shadow-z-2">
|
||||
<div class="panel-body">
|
||||
<h3>Login</h3>
|
||||
<h3>{{ 'LOGIN' | translate}}</h3>
|
||||
|
||||
|
||||
<div ng-show="form.$submitted && form.$invalid" class="alert alert-danger">
|
||||
<p>Verify the fields bellow and try again.</p>
|
||||
<p>{{ 'INVALID_LOGIN_FIELDS' | translate }}</p>
|
||||
</div>
|
||||
|
||||
<form name="form" class="css-form" novalidate ng-init="advanced = false">
|
||||
<div class="form-group {{ (((!form.name.$pristine || form.$submitted) && !form.name.$valid) ? 'has-error': '') }}">
|
||||
<label class="control-label" for="login-name">Name</label>
|
||||
<input type="text" name="name" class="form-control" id="login-name" placeholder="Your name" required="" ng-model="verto.data.name" autofocus>
|
||||
<label class="control-label" for="login-name">{{ 'NAME' | translate}}</label>
|
||||
<input type="text" name="name" class="form-control" id="login-name" placeholder="{{ 'YOUR_NAME' | translate}}" required="" ng-model="verto.data.name" autofocus>
|
||||
</div>
|
||||
<div class="form-group {{ (((!form.email.$pristine || form.$submitted) && !form.email.$valid) ? 'has-error': '') }}">
|
||||
<label class="control-label" for="login-email">Email</label>
|
||||
<input type="email" name="email" class="form-control" id="login-email" placeholder="Your email" required="" ng-model="verto.data.email" ng-model-options="{debounce: 250}">
|
||||
<label class="control-label" for="login-email">{{ 'EMAIL' | translate }}</label>
|
||||
<input type="email" name="email" class="form-control" id="login-email" placeholder="{{ 'YOUR_EMAIL' | translate}}" required="" ng-model="verto.data.email" ng-model-options="{debounce: 250}">
|
||||
</div>
|
||||
|
||||
<div class="form-group" ng-hide="!advanced">
|
||||
<label class="control-label" for="login-user">User</label>
|
||||
<input type="text" class="form-control" id="login-user" placeholder="User" ng-model="verto.data.login">
|
||||
<label class="control-label" for="login-user">{{ 'USER' | translate}}</label>
|
||||
<input type="text" class="form-control" id="login-user" placeholder="{{ 'USER' | translate}}" ng-model="verto.data.login">
|
||||
</div>
|
||||
<div class="form-group" ng-hide="!advanced">
|
||||
<label class="control-label" for="login-password">Password</label>
|
||||
<input type="password" class="form-control" id="login-password" placeholder="Password" ng-model="verto.data.password">
|
||||
<label class="control-label" for="login-password">{{ 'PASSWORD' | translate}}</label>
|
||||
<input type="password" class="form-control" id="login-password" placeholder={{ 'PASSWORD' | translate}} ng-model="verto.data.password">
|
||||
</div>
|
||||
|
||||
<div class="form-group" ng-hide="!advanced">
|
||||
<label class="control-label" for="login-callerid">Caller ID</label>
|
||||
<input type="text" class="form-control" id="login-callerid" placeholder="Caller ID" ng-model="verto.data.callerid">
|
||||
<label class="control-label" for="login-callerid">{{ 'CALLER_ID' | translate}}</label>
|
||||
<input type="text" class="form-control" id="login-callerid" placeholder="{{ 'CALLER_ID' | translate}}" ng-model="verto.data.callerid">
|
||||
</div>
|
||||
|
||||
<div class="form-group" ng-hide="!advanced">
|
||||
<label class="control-label" for="login-hostname">Hostname</label>
|
||||
<input type="text" class="form-control" id="login-hostname" placeholder="Hostname" ng-model="verto.data.hostname">
|
||||
<label class="control-label" for="login-hostname">{{ 'HOSTNAME' | translate}}</label>
|
||||
<input type="text" class="form-control" id="login-hostname" placeholder="{{ 'HOSTNAME' | translate}}" ng-model="verto.data.hostname">
|
||||
</div>
|
||||
<div class="form-group" ng-hide="!advanced">
|
||||
<label class="control-label" for="login-wsurl">Websocket URL</label>
|
||||
<input type="text" class="form-control" id="login-wsurl" placeholder="Websocket URL" ng-model="verto.data.wsURL">
|
||||
<label class="control-label" for="login-wsurl">{{ 'WEBSOCKET_URL' | translate}}</label>
|
||||
<input type="text" class="form-control" id="login-wsurl" placeholder="{{ 'WEBSOCKET_URL' | translate}}" ng-model="verto.data.wsURL">
|
||||
</div>
|
||||
|
||||
<div class="form-group hide">
|
||||
<label for="login-login">Login</label>
|
||||
<input type="text" class="form-control" id="login-login" placeholder="Login" ng-model="verto.data.login">
|
||||
<label for="login-login">{{ 'LOGIN' | translate}}</label>
|
||||
<input type="text" class="form-control" id="login-login" placeholder="{{ 'LOGIN' | translate}}" ng-model="verto.data.login">
|
||||
</div>
|
||||
<div class="form-group hide">
|
||||
<label for="login-password">Password</label>
|
||||
<input type="text" class="form-control" id="login-password" placeholder="Password" ng-model="verto.data.password">
|
||||
<input type="text" class="form-control" id="login-password" placeholder="{{ 'PASSWORD' | translate}}" ng-model="verto.data.password">
|
||||
</div>
|
||||
|
||||
|
||||
<div class="form-group text-right">
|
||||
<div><a style="margin-top: 13px;" href="" ng-click="advanced = !advanced" class="pull-left">Settings</a></div>
|
||||
<div><button type="submit" class="btn btn-success" ng-click="(form.$valid && login())">Login</button></div>
|
||||
<div><a style="margin-top: 13px;" href="" ng-click="advanced = !advanced" class="pull-left">{{ 'SETTINGS' | translate}}</a></div>
|
||||
<div><button type="submit" class="btn btn-success" ng-click="(form.$valid && login())">{{ 'LOGIN' | translate}}</button></div>
|
||||
<div ng-if="googlelogin" class="googlelogin">
|
||||
<google-plus-signin clientid="{{src/partials/login.html}}" class="center">
|
||||
</google-plus-signin>
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
<div class="container-fluid">
|
||||
<div class="https-untrusted navbar-center" ng-show="!safeProtocol">
|
||||
<div class="https-message">
|
||||
This Connection is Untrusted.
|
||||
{{ 'MESSAGE_CONNECTION_UNTRUSTED' | translate }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
<span class="sr-only">{{ 'MESSAGE_TOGGLE_NAVIGATION' | translate }}</span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
|
@ -25,10 +25,10 @@
|
|||
<span class="caret"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu drop-net-info" role="menu" ng-click="$event.stopPropagation()">
|
||||
<li><a class="title">Bandwidth Info</a></li>
|
||||
<li><a>Outgoing: {{bandUp}} Kbps</a></li>
|
||||
<li><a>Incoming: {{bandDown}} Kbps</a></li>
|
||||
<li><a>Video Resolution: {{vidRes}}</a></li>
|
||||
<li><a class="title">{{ 'BANDWIDTH_INFO' | translate }}</a></li>
|
||||
<li><a>{{ 'BANDWIDTH_INFO_OUTGOING' | translate }} {{bandUp}} Kbps</a></li>
|
||||
<li><a>{{ 'BANDWIDTH_INFO_INCOMING' | translate }} {{bandDown}} Kbps</a></li>
|
||||
<li><a>{{ 'BANDWIDTH_INFO_VIDEO_RES' | translate }} {{vidRes}}</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
|
@ -38,7 +38,7 @@
|
|||
</li>
|
||||
<li>
|
||||
<a href="" class="incall-number" ng-show="storage.data.called_number">
|
||||
{{ storage.data.called_number && storage.data.userStatus != 'connected' ? 'Last Call: ' : 'In Call: ' }} {{ storage.data.called_number }}
|
||||
{{ storage.data.called_number && storage.data.userStatus != 'connected' ? 'LAST_CALL' : 'IN_CALL' | translate }} {{ storage.data.called_number }}
|
||||
</a>
|
||||
</li>
|
||||
<li class="navbar-item-icon" ng-show="verto.data.connected">
|
||||
|
@ -63,10 +63,10 @@
|
|||
<span class="caret"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="#/?sessid=random" target="_blank">Open New Window</a></li>
|
||||
<li><a href="" ng-click="openModal('partials/modal_logininfo.html', 'ModalLoginInformationController')">Change Login Information</a></li>
|
||||
<li><a href="#/?sessid=random" target="_blank">{{ 'OPEN_NEW_WINDOW' | translate}}</a></li>
|
||||
<li><a href="" ng-click="openModal('partials/modal_logininfo.html', 'ModalLoginInformationController')">{{ 'CHANGE_LOGIN_INFO' | translate}}</a></li>
|
||||
<!--<li><a href="#">View Device Settings</a></li>-->
|
||||
<li><a href="" ng-click="logout()">Logout</a></li>
|
||||
<li><a href="" ng-click="logout()">{{ 'LOGOUT' | translate}}</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="navbar-item-icon">
|
||||
|
@ -75,9 +75,9 @@
|
|||
<span class="caret"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li><a href="" ng-click="showAbout()">About</a></li>
|
||||
<li><a href="" ng-click="showContributors()">Contributors</a></li>
|
||||
<li><a href="https://freeswitch.org/confluence/x/MQCT" target="_blank">Help</a></li>
|
||||
<li><a href="" ng-click="showAbout()">{{ 'ABOUT' | translate}}</a></li>
|
||||
<li><a href="" ng-click="showContributors()">{{ 'CONTRIBUTORS' | translate}}</a></li>
|
||||
<li><a href="https://freeswitch.org/confluence/x/MQCT" target="_blank">{{ 'HELP' | translate}}</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
|
|
|
@ -1,35 +1,35 @@
|
|||
<div class="modal-header">
|
||||
<h3 class="modal-title">Login Information</h3>
|
||||
<h3 class="modal-title">{{ 'LOGIN_INFORMATION' | translate}}</h3>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
|
||||
<div class="form-group">
|
||||
<label for="name">Name:</label>
|
||||
<label for="name">{{ 'NAME' | translate}}</label>
|
||||
<input type="text" name="name" class="form-control" ng-model="storage.data.name" ng-value="storage.data.name"/>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="email">Email:</label>
|
||||
<label for="email">{{ 'EMAIL' | translate}}</label>
|
||||
<input type="text" name="email" class="form-control" ng-model="storage.data.email" ng-value="storage.data.email"/>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label" for="user">User</label>
|
||||
<label class="control-label" for="user">{{ 'USER' | translate}}</label>
|
||||
<input type="text" class="form-control" id="user" placeholder="User" ng-model="storage.data.login">
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label" for="password">Password</label>
|
||||
<label class="control-label" for="password">{{ 'PASSWORD' | translate}}</label>
|
||||
<input type="password" class="form-control" id="password" placeholder="Password" ng-model="verto.data.password">
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label" for="callerid">Caller ID</label>
|
||||
<label class="control-label" for="callerid">{{ 'CALLER_ID' | translate}}</label>
|
||||
<input type="text" class="form-control" id="callerid" placeholder="Caller ID" ng-model="verto.data.callerid">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<!-- <button class="btn btn-primary" ng-click="cancel()">Cancel</button> -->
|
||||
<button class="btn btn-primary" ng-click="ok()">Save Login Information</button>
|
||||
<button class="btn btn-primary" ng-click="ok()">{{ 'SAVE_LOGIN_INFORMATION' | translate}}</button>
|
||||
</div>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<div class="col-md-4 col-sm-12 col-xs-12 centered-block">
|
||||
<div class="panel panel-material-blue-900 shadow-z-2 ">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title text-center">Setup your camera and microphone settings</h3>
|
||||
<h3 class="panel-title text-center">{{ 'TITLE_PREVIEW_SETTINGS' | translate }}</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div class="preview-wrapper">
|
||||
|
@ -20,13 +20,13 @@
|
|||
</div>
|
||||
<form name="form">
|
||||
<div class="form-group col-md-5 col-sm-12 col-xs-12" ng-show="true">
|
||||
<label for="settings-camera">Camera:</label>
|
||||
<label for="settings-camera">{{ 'CAMERA_SETTINGS' | translate }}</label>
|
||||
<select name="camera" id="settings-camera" class="form-control" ng-model="storage.data.selectedVideo"
|
||||
ng-options="item.id as item.label for item in verto.data.videoDevices" ng-change="localVideo()" >
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group col-md-5 col-sm-12 col-xs-12" ng-show="true">
|
||||
<label for="settings-microphone">Microphone:</label>
|
||||
<label for="settings-microphone">{{ 'MIC_SETTINGS' | translate }}</label>
|
||||
<select name="microphone" id="settings-microphone" class="form-control" ng-model="storage.data.selectedAudio"
|
||||
ng-options="item.id as item.label for item in verto.data.audioDevices" ng-change="localVideo()">
|
||||
</select>
|
||||
|
@ -36,8 +36,8 @@
|
|||
</a>
|
||||
|
||||
<div class="form-group text-center">
|
||||
<button type="submit" class="btn btn-success" ng-click="endPreview()" title="Save">
|
||||
Save
|
||||
<button type="submit" class="btn btn-success" ng-click="endPreview()" title="{{ 'SAVE' | translate }}">
|
||||
{{ 'SAVE' | translate }}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
|
|
|
@ -3,21 +3,21 @@
|
|||
<div class="col-md-4">
|
||||
|
||||
<div class="form-group" ng-show="mydata.useVideo">
|
||||
<label for="settings-camera">Camera:</label>
|
||||
<label for="settings-camera">{{ 'CAMERA_SETTINGS' | translate }}</label>
|
||||
<select name="camera" id="settings-camera" class="form-control"
|
||||
ng-model="mydata.selectedVideo" ng-options="item.id as item.label for item in verto.data.videoDevices">
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="form-group" ng-show="mydata.useVideo">
|
||||
<label for="settings-share-device">Share device:</label>
|
||||
<label for="settings-share-device">{{ 'SHARE_DEVICE' | translate }}</label>
|
||||
<select name="share-device" id="settings-share-device" class="form-control"
|
||||
ng-model="mydata.selectedShare" ng-options="item.id as item.label for item in verto.data.shareDevices">
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="settings-microphone">Microphone:</label>
|
||||
<label for="settings-microphone">{{ 'MIC_SETTINGS' | translate}}</label>
|
||||
<select name="microphone" id="settings-microphone" class="form-control"
|
||||
ng-model="mydata.selectedAudio" ng-options="item.id as item.label for item in verto.data.audioDevices">
|
||||
</select>
|
||||
|
@ -25,9 +25,9 @@
|
|||
|
||||
<div class="form-group">
|
||||
<label for="settings-microphone">
|
||||
Speaker:
|
||||
{{ 'SPEAKER' | translate }}
|
||||
<span ng-show="!speakerFeature" class="unsupported">
|
||||
Your browser doesn't seem to support this feature
|
||||
{{ 'SPEAKER_FEATURE' | translate }}
|
||||
</span>
|
||||
</label>
|
||||
<select name="microphone" id="settings-microphone" class="form-control" ng-disabled="!speakerFeature"
|
||||
|
@ -36,67 +36,67 @@
|
|||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="settings-framerate">Best frame rate:</label>
|
||||
<label for="settings-framerate">{{ 'BEST_FRAME_RATE' | translate }}</label>
|
||||
<select name="settings-framerate" id="settings-framerate" class="form-control"
|
||||
ng-model="mydata.bestFrameRate"
|
||||
ng-options="item.id as item.label for item in verto.framerate"></select>
|
||||
</div>
|
||||
|
||||
<a class="btn btn-primary" href="" ng-click="showPreview()">Preview Settings</a>
|
||||
<a class="btn btn-primary" href="" ng-click="refreshDeviceList()">Refresh device list</a>
|
||||
<a class="btn btn-primary" href="" ng-click="showPreview()">{{ 'PREVIEW_SETTINGS' | translate }}</a>
|
||||
<a class="btn btn-primary" href="" ng-click="refreshDeviceList()">{{ 'REFRESH_DEVICE_LIST' | translate }}</a>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="form-group">
|
||||
<label for="settings-microphone">General settings:</label>
|
||||
<label for="settings-microphone">{{ 'GENERAL_SETTINGS' | translate }}</label>
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<input type="checkbox" name="use_video" value="mydata.useVideo" ng-model="mydata.useVideo">
|
||||
Use Video
|
||||
<span ng-bind="'USE_VIDEO' | translate"></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<input type="checkbox" name="use_stereo_audio" ng-value="mydata.useStereo" ng-model="mydata.useStereo">
|
||||
Stereo Audio
|
||||
<span ng-bind="'USE_STEREO_AUDIO' | translate"></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<input type="checkbox" name="use_stun" ng-value="mydata.useSTUN" ng-model="mydata.useSTUN">
|
||||
Use STUN
|
||||
<span ng-bind="'USE_STUN' | translate"></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<input type="checkbox" name="mirror_input" ng-value="mydata.mirrorInput" ng-model="mydata.mirrorInput">
|
||||
Scale Remote Video To Match Camera Resolution
|
||||
<span ng-bind="'SCALE_VIDEO' | translate"></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<input type="checkbox" name="ask_recover_call" ng-value="mydata.askRecoverCall" ng-model="mydata.askRecoverCall">
|
||||
Ask before recovering call
|
||||
<span ng-bind="'ASK_BEFORE_RECOVER' | translate"></span>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="settings-microphone">Audio settings:</label>
|
||||
<label for="settings-microphone">{{ 'AUDIO_SETTINGS' | translate }}</label>
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<input type="checkbox" name="googEchoCancellation" value="mydata.googEchoCancellation" ng-model="mydata.googEchoCancellation">
|
||||
Echo Cancellation
|
||||
<span ng-bind="'ECHO_CANCEL' | translate"></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<input type="checkbox" name="googNoiseSuppression" value="mydata.googNoiseSuppression" ng-model="mydata.googNoiseSuppression">
|
||||
Noise Suppression
|
||||
<span ng-bind="'NOISE_SUPPRESSION' | translate"></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<input type="checkbox" name="googHighpassFilter" value="mydata.googHighpassFilter" ng-model="mydata.googHighpassFilter">
|
||||
Highpass Filter
|
||||
<span ng-bind="'HIGHPASS_FILTER' | translate"></span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -106,32 +106,32 @@
|
|||
<div class="col-md-4">
|
||||
|
||||
<div class="form-group">
|
||||
<label>Video settings:</label> <br>
|
||||
<label>{{ 'VIDEO_SETTINGS' | translate }}</label> <br>
|
||||
<input type="hidden" name="use_dedenc" ng-value="mydata.useDedenc" ng-model="mydata.useDedenc">
|
||||
|
||||
|
||||
<div ng-show="mydata.useDedenc" class="dedicated_encoder">
|
||||
<p>Dedicated Remote Encoder enabled.</b>
|
||||
<p>{{ 'REMOTE_ENCODER' | translate }}</b>
|
||||
</div>
|
||||
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<input type="checkbox" ng-model="mydata.autoBand" ng-change="checkAutoBand(mydata.autoBand)">
|
||||
Automatically determine speed and resolution settings
|
||||
<span ng-bind="'AUTO_SPEED_RES' | translate"></span>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="checkbox" ng-show="mydata.autoBand">
|
||||
<label>
|
||||
<input type="checkbox" ng-model="mydata.testSpeedJoin">
|
||||
Recheck bandwidth before each outgoing call
|
||||
<span ng-bind="'RECHECK_BANDWIDTH' | translate"></span>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<a ng-show="mydata.autoBand" class="btn btn-primary" href="" ng-click="testSpeed()">Check Network Speed</a> <span ng-bind="speedMsg"></span>
|
||||
<a ng-show="mydata.autoBand" class="btn btn-primary" href="" ng-click="testSpeed()">{{ 'CHECK_NETWORK_SPEED' | translate }}</a> <span ng-bind="speedMsg"></span>
|
||||
|
||||
<div ng-show="!mydata.autoBand">
|
||||
<label for="video-quality">Video quality:</label>
|
||||
<label for="video-quality">{{ 'VIDEO_QUALITY' | translate }}</label>
|
||||
<select name="video_quality" id="video-quality" class="form-control"
|
||||
ng-disabled="mydata.autoBand"
|
||||
ng-model="mydata.vidQual"
|
||||
|
@ -140,7 +140,7 @@
|
|||
</div>
|
||||
|
||||
<div ng-show="!mydata.autoBand">
|
||||
<label for="incoming-bandwidth">Max incoming bandwidth:</label>
|
||||
<label for="incoming-bandwidth">{{ 'MAX_INCOMING_BANDWIDTH' | translate }}</label>
|
||||
<select name="incoming_bandwidth" id="incoming-bandwidth" class="form-control"
|
||||
ng-model="mydata.incomingBandwidth"
|
||||
ng-change="checkUseDedRemoteEncoder(mydata.incomingBandwidth)"
|
||||
|
@ -148,7 +148,7 @@
|
|||
</div>
|
||||
|
||||
<div ng-show="!mydata.autoBand">
|
||||
<label for="outgoing-bandwidth">Max outgoing bandwidth:</label>
|
||||
<label for="outgoing-bandwidth">{{ 'MAX_OUTGOING_BANDWIDTH' | translate }}</label>
|
||||
<select name="outgoing_bandwidth" id="outgoing-bandwidth" class="form-control"
|
||||
ng-model="mydata.outgoingBandwidth"
|
||||
ng-options="item.id as item.label for item in verto.bandwidth"></select>
|
||||
|
|
|
@ -2,14 +2,14 @@
|
|||
<div class="col-md-6 centered-block">
|
||||
<div class="card">
|
||||
<div class="card-body text-center">
|
||||
<h2>Loading</h2>
|
||||
<h2>{{ 'LOADING' | translate }}</h2>
|
||||
<div class="progress progress-striped active">
|
||||
<div class="progress-bar" ng-class="{'progress-bar-danger': interrupt_next}" style="width: {{ progress_percentage }}%"></div>
|
||||
</div>
|
||||
<div ng-bind="message"></div>
|
||||
|
||||
<div class="splash-errors" ng-if="errors.length">
|
||||
<h4>Errors</h4>
|
||||
<h4>{{ 'ERRORS' | translate }}</h4>
|
||||
<ul ng-repeat="error in errors">
|
||||
<li>{{ ::error }}</li>
|
||||
</ul>
|
||||
|
|
|
@ -2,28 +2,28 @@
|
|||
<div class="video-wrapper">
|
||||
<div class="video-hover-buttons" ng-show="verto.data.callState == 'active' && !watcher">
|
||||
<div id="moderator-tools" ng-show="verto.data.confRole == 'moderator'">
|
||||
<button tooltip-placement="bottom" tooltip-title="Play" uib-tooltip="Play"
|
||||
<button tooltip-placement="bottom" tooltip-title="{{'MESSAGE_PLAY' | translate}}" uib-tooltip="{{'MESSAGE_PLAY' | translate}}"
|
||||
class="btn btn-material-blue-900" ng-click="play()">
|
||||
<i class="mdi-av-play-circle-outline"></i>
|
||||
</button>
|
||||
<button tooltip-placement="bottom" tooltip-title="Stop" uib-tooltip="Stop"
|
||||
<button tooltip-placement="bottom" tooltip-title="{{'MESSAGE_STOP' | translate}}" uib-tooltip="{{'MESSAGE_STOP' | translate}}"
|
||||
class="btn btn-material-blue-900" ng-click="stop()">
|
||||
<i class="mdi-av-stop"></i>
|
||||
</button>
|
||||
<button tooltip-placement="bottom" tooltip-title="Record" uib-tooltip="Record"
|
||||
<button tooltip-placement="bottom" tooltip-title="{{'MESSAGE_RECORD' | translate}}" uib-tooltip="{{'MESSAGE_RECORD' | translate}}"
|
||||
class="btn btn-material-blue-900" ng-click="record()">
|
||||
<i class="mdi-toggle-radio-button-on"></i>
|
||||
</button>
|
||||
<button tooltip-placement="bottom" tooltip-title="Stop Record" uib-tooltip="Stop Record"
|
||||
<button tooltip-placement="bottom" tooltip-title="{{'MESSAGE_STOP_RECORD' | translate}}" uib-tooltip="{{'MESSAGE_STOP_RECORD' | translate}}"
|
||||
class="btn btn-material-blue-900" ng-click="stopRecord()">
|
||||
<i class="mdi-image-switch-camera"></i>
|
||||
</button>
|
||||
<button tooltip-placement="bottom" tooltip-title="Snapshot" uib-tooltip="Snapshot"
|
||||
<button tooltip-placement="bottom" tooltip-title="{{'MESSAGE_SNAPSHOT' | translate}}" uib-tooltip="{{'MESSAGE_SNAPSHOT' | translate}}"
|
||||
tooltip-lazy="false" class="btn btn-material-blue-900" ng-click="snapshot()">
|
||||
<i class="mdi-image-photo-camera"></i>
|
||||
</button>
|
||||
<div class="btn-group">
|
||||
<button tooltip-placement="bottom" tooltip-title="Video Mode" uib-tooltip="Video Mode"
|
||||
<button tooltip-placement="bottom" tooltip-title="{{'MESSAGE_VIDEO_MODE' | translate}}" uib-tooltip="{{'MESSAGE_VIDEO_MODE' | translate}}"
|
||||
type="button" class="btn btn-material-blue-900 dropdown-toggle"
|
||||
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
<i class="mdi-action-view-module"></i>
|
||||
|
@ -37,28 +37,28 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="user-tools">
|
||||
<button tooltip-placement="bottom" tooltip-title="(un)Mute Mic" uib-tooltip="(un)Mute Mic"
|
||||
<button tooltip-placement="bottom" tooltip-title="{{'MESSAGE_MUTE_MIC' | translate}}" uib-tooltip="{{'MESSAGE_MUTE_MIC' | translate}}"
|
||||
class="btn btn-material-blue-900" ng-click="muteMic(cbMuteMic)">
|
||||
<i class="" ng-class="{'mdi-av-mic': !verto.data.mutedMic, 'mdi-av-mic-off': verto.data.mutedMic}"></i>
|
||||
</button>
|
||||
<button tooltip-placement="bottom" tooltip-title="(un)Mute Video" uib-tooltip="(un)Mute Video"
|
||||
<button tooltip-placement="bottom" tooltip-title="{{'MESSAGE_MUTE_MIC' | translate}}" uib-tooltip="{{'MESSAGE_MUTE_MIC' | translate}}"
|
||||
class="btn btn-material-blue-900" ng-click="muteVideo(cbMuteVideo)" ng-if="verto.data.canVideo">
|
||||
<i class="" ng-class="{'mdi-av-videocam': !verto.data.mutedVideo, 'mdi-av-videocam-off': verto.data.mutedVideo}"></i>
|
||||
</button>
|
||||
<button tooltip-placement="bottom" tooltip-title="Toggle Fullscreen Mode" uib-tooltip="Toggle Fullscreen Mode"
|
||||
<button tooltip-placement="bottom" tooltip-title="{{'MESSAGE_FULLSCREEN' | translate}}" uib-tooltip="{{'MESSAGE_FULLSCREEN' | translate}}"
|
||||
class="btn btn-material-blue-900" ng-click="goFullscreen()">
|
||||
<i class="" ng-class="{'mdi-navigation-fullscreen': !fullscreenEnabled, 'mdi-navigation-fullscreen-exit': fullscreenEnabled}"></i>
|
||||
</button>
|
||||
<button tooltip-placement="bottom" tooltip-title="Screenshare" uib-tooltip="Screenshare"
|
||||
<button tooltip-placement="bottom" tooltip-title="{{'MESSAGE_SCREENSHARE' | translate}}" uib-tooltip="{{'MESSAGE_SCREENSHARE' | translate}}"
|
||||
class="btn btn-material-blue-900" ng-click="screenshare()">
|
||||
<i class="mdi-hardware-desktop-windows"></i>
|
||||
</button>
|
||||
<button tooltip-placement="bottom" tooltip-title="Open/Close Chat" uib-tooltip="Open/Close Chat"
|
||||
<button tooltip-placement="bottom" tooltip-title="{{'MESSAGE_OPEN_CLOSE_CHAT' | translate}}" uib-tooltip="{{'MESSAGE_OPEN_CLOSE_CHAT' | translate}}"
|
||||
class="btn btn-material-blue-900" ng-click="toggleChat()" ng-show="fullscreenEnabled">
|
||||
<i class="mdi-communication-chat"></i>
|
||||
</button>
|
||||
<div class="btn-group">
|
||||
<button tooltip-placement="bottom" tooltip-title="Speaker" uib-tooltips="Speaker" type="button" class="btn btn-material-blue-900 dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
<button tooltip-placement="bottom" tooltip-title="{{'MESSAGE_SPEAKER' | translate}}" uib-tooltips="{{'MESSAGE_SPEAKER' | translate}}" type="button" class="btn btn-material-blue-900 dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
<i class="mdi-hardware-headset"></i>
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
|
@ -69,7 +69,7 @@
|
|||
</ul>
|
||||
</div>
|
||||
<div class="btn-group" ng-show="conf.canvasCount > 1">
|
||||
<button tooltip-placement="bottom" tooltip-title="Popup" uib-tooltips="Popup" type="button" class="btn btn-material-blue-900 dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
<button tooltip-placement="bottom" tooltip-title="{{'MESSAGE_POPUP' | translate}}" uib-tooltips="{{'MESSAGE_POPUP' | translate}}" type="button" class="btn btn-material-blue-900 dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
<i class="mdi-image-filter-none"></i>
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
|
@ -96,9 +96,9 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 col-xs-6 text-right">
|
||||
<button class="btn btn-danger" ng-click="hangup()">
|
||||
<button class="btn btn-danger" ng-click="hangup()" translate>
|
||||
<i class="mdi-communication-call-end"></i>
|
||||
{{ watcher ? 'Close' : 'End Call' }}
|
||||
{{ watcher ? 'BUTTON_CLOSE' : 'BUTTON_END_CALL' }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
angular
|
||||
.module('storageService')
|
||||
.service('splashscreen', ['$rootScope', '$q', 'storage', 'config', 'verto',
|
||||
function($rootScope, $q, storage, config, verto) {
|
||||
.service('splashscreen', ['$rootScope', '$q', 'storage', 'config', 'verto', '$translate',
|
||||
function($rootScope, $q, storage, config, verto, $translate) {
|
||||
|
||||
var checkBrowser = function() {
|
||||
return $q(function(resolve, reject) {
|
||||
|
@ -12,16 +12,15 @@
|
|||
'activity': activity,
|
||||
'soft': false,
|
||||
'status': 'success',
|
||||
'message': 'Checking browser compability.'
|
||||
'message': $translate.instant('BROWSER_COMPATIBILITY')
|
||||
};
|
||||
|
||||
navigator.getUserMedia = navigator.getUserMedia ||
|
||||
navigator.webkitGetUserMedia ||
|
||||
navigator.mozGetUserMedia;
|
||||
|
||||
if (!navigator.getUserMedia) {
|
||||
result['status'] = 'error';
|
||||
result['message'] = 'Error: browser doesn\'t support WebRTC.';
|
||||
result['message'] = $translate.instant('BROWSER_WITHOUT_WEBRTC');
|
||||
reject(result);
|
||||
}
|
||||
|
||||
|
@ -37,13 +36,13 @@
|
|||
'activity': activity,
|
||||
'soft': false,
|
||||
'status': 'success',
|
||||
'message': 'Checking media permissions'
|
||||
'message': $translate.instant('CHECK_PERMISSION_MEDIA')
|
||||
};
|
||||
|
||||
verto.mediaPerm(function(status) {
|
||||
if(!status) {
|
||||
result['status'] = 'error';
|
||||
result['message'] = 'Error: Media Permission Denied';
|
||||
result['message'] = $translate.instant('ERROR_PERMISSION_MEDIA');
|
||||
verto.data.mediaPerm = false;
|
||||
reject(result);
|
||||
}
|
||||
|
@ -60,7 +59,7 @@
|
|||
'status': 'success',
|
||||
'soft': true,
|
||||
'activity': activity,
|
||||
'message': 'Refresh Media Devices.'
|
||||
'message': $translate.instant('REFRESH_MEDIA_DEVICES')
|
||||
};
|
||||
|
||||
verto.refreshDevices(function(status) {
|
||||
|
@ -79,7 +78,7 @@
|
|||
'status': 'success',
|
||||
'soft': true,
|
||||
'activity': activity,
|
||||
'message': 'Check Connection Speed.'
|
||||
'message': $translate.instant('CHECK_CONNECTION_SPEED')
|
||||
};
|
||||
|
||||
if (storage.data.autoBand && verto.data.instance) {
|
||||
|
@ -101,7 +100,7 @@
|
|||
'status': 'promise',
|
||||
'soft': true,
|
||||
'activity': activity,
|
||||
'message': 'Provisioning configuration.'
|
||||
'message': $translate.instant('CHECK_PROVISIONING_CONF')
|
||||
};
|
||||
|
||||
var configResponse = config.configure();
|
||||
|
@ -116,7 +115,7 @@
|
|||
return result;
|
||||
} else {
|
||||
result['status'] = 'error';
|
||||
result['message'] = 'Error: Provision failed.';
|
||||
result['message'] = $translate.instant('ERROR_PROVISIONING_CONF');
|
||||
return result;
|
||||
}
|
||||
});
|
||||
|
@ -134,7 +133,7 @@
|
|||
'status': 'success',
|
||||
'soft': true,
|
||||
'activity': activity,
|
||||
'message': 'Checking login.'
|
||||
'message': $translate.instant('CHECK_LOGIN'),
|
||||
};
|
||||
|
||||
if(verto.data.connecting || verto.data.connected) {
|
||||
|
@ -179,19 +178,19 @@
|
|||
];
|
||||
|
||||
var progress_message = [
|
||||
'Checking browser compability.',
|
||||
'Checking media permissions',
|
||||
'Refresh Media Devices.',
|
||||
'Provisioning configuration.',
|
||||
'Checking login.',
|
||||
'Check Connection Speed.'
|
||||
$translate.instant('BROWSER_COMPATIBILITY'),
|
||||
$translate.instant('CHECK_PERMISSION_MEDIA'),
|
||||
$translate.instant('REFRESH_MEDIA_DEVICES'),
|
||||
$translate.instant('CHECK_PROVISIONING_CONF'),
|
||||
$translate.instant('CHECK_LOGIN'),
|
||||
$translate.instant('CHECK_CONNECTION_SPEED'),
|
||||
];
|
||||
|
||||
var getProgressMessage = function(current_progress) {
|
||||
if(progress_message[current_progress] != undefined) {
|
||||
return progress_message[current_progress];
|
||||
} else {
|
||||
return 'Please wait...';
|
||||
return $translate.instant('PLEASE_WAIT');
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -17,10 +17,11 @@
|
|||
'ui.gravatar',
|
||||
'ui.bootstrap',
|
||||
'directive.g+signin',
|
||||
'pascalprecht.translate',
|
||||
]);
|
||||
|
||||
vertoApp.config(['$routeProvider', 'gravatarServiceProvider',
|
||||
function($routeProvider, gravatarServiceProvider) {
|
||||
vertoApp.config(['$routeProvider', 'gravatarServiceProvider', '$translateProvider',
|
||||
function($routeProvider, gravatarServiceProvider, $translateProvider) {
|
||||
$routeProvider.
|
||||
when('/', {
|
||||
title: 'Loading',
|
||||
|
@ -59,6 +60,21 @@
|
|||
gravatarServiceProvider.defaults = {
|
||||
default: 'mm' // Mystery man as default for missing avatars
|
||||
};
|
||||
|
||||
|
||||
$translateProvider
|
||||
.useStaticFilesLoader({
|
||||
prefix: 'locales/locale-',
|
||||
suffix: '.json'
|
||||
})
|
||||
.registerAvailableLanguageKeys(['en', 'it'], {
|
||||
'en' : 'en', 'en_GB': 'en', 'en_US': 'en',
|
||||
'it' : 'it', 'it_IT' : 'it'
|
||||
})
|
||||
.preferredLanguage('en')
|
||||
.fallbackLanguage('en')
|
||||
.determinePreferredLanguage()
|
||||
.useSanitizeValueStrategy(null);
|
||||
}
|
||||
]);
|
||||
|
||||
|
|
|
@ -5,9 +5,9 @@
|
|||
angular
|
||||
.module('vertoControllers')
|
||||
.controller('ChatController', ['$scope', '$rootScope', '$http',
|
||||
'$location', '$anchorScroll', '$timeout', 'verto', 'prompt',
|
||||
'$location', '$anchorScroll', '$timeout', 'verto', 'prompt', '$translate',
|
||||
function($scope, $rootScope, $http, $location, $anchorScroll, $timeout,
|
||||
verto, prompt) {
|
||||
verto, prompt, $translate) {
|
||||
console.debug('Executing ChatController.');
|
||||
|
||||
function scrollToChatBottom() {
|
||||
|
@ -246,7 +246,7 @@
|
|||
console.log('$scope.confBanner');
|
||||
|
||||
prompt({
|
||||
title: 'Please insert the banner text',
|
||||
title: $translate.instant('TITLE_INSERT_BANNER'),
|
||||
input: true,
|
||||
label: '',
|
||||
value: '',
|
||||
|
@ -263,7 +263,7 @@
|
|||
return;
|
||||
}
|
||||
|
||||
shortPrompt('Please insert the Canvas Id', function(canvasID) {
|
||||
shortPrompt($translate.instant('TITLE_INSERT_CANVAS_ID'), function(canvasID) {
|
||||
console.log(memberID, canvasID);
|
||||
verto.setCanvasIn(memberID, canvasID);
|
||||
});
|
||||
|
@ -276,7 +276,7 @@
|
|||
return;
|
||||
}
|
||||
|
||||
shortPrompt('Please insert the Canvas Id', function(canvasID) {
|
||||
shortPrompt($translate.instant('TITLE_INSERT_CANVAS_ID'), function(canvasID) {
|
||||
verto.setCanvasOut(memberID, canvasID);
|
||||
});
|
||||
};
|
||||
|
@ -287,7 +287,7 @@
|
|||
return;
|
||||
}
|
||||
|
||||
shortPrompt('Please insert the Layer', function(canvasID) {
|
||||
shortPrompt($translate.instant('TITLE_INSERT_LAYER'), function(canvasID) {
|
||||
verto.setLayer(memberID, canvasID);
|
||||
});
|
||||
};
|
||||
|
@ -321,10 +321,10 @@
|
|||
$scope.confTransfer = function(memberID) {
|
||||
console.log('$scope.confTransfer');
|
||||
prompt({
|
||||
title: 'Transfer party?',
|
||||
message: 'To what destination would you like to transfer this call?',
|
||||
title: $translate.instant('TITLE_TRANSFER'),
|
||||
message: $translate.instant('MESSAGE_TRANSFER'),
|
||||
input: true,
|
||||
label: 'Destination',
|
||||
label: $translate.instant('LABEL_TRANSFER'),
|
||||
value: '',
|
||||
}).then(function(exten) {
|
||||
if (exten) {
|
||||
|
|
|
@ -4,9 +4,9 @@
|
|||
angular
|
||||
.module('vertoControllers')
|
||||
.controller('InCallController', ['$rootScope', '$scope',
|
||||
'$http', '$location', '$modal', '$timeout', 'toastr', 'verto', 'storage', 'prompt', 'Fullscreen',
|
||||
'$http', '$location', '$modal', '$timeout', 'toastr', 'verto', 'storage', 'prompt', 'Fullscreen', '$translate',
|
||||
function($rootScope, $scope, $http, $location, $modal, $timeout, toastr,
|
||||
verto, storage, prompt, Fullscreen) {
|
||||
verto, storage, prompt, Fullscreen, $translate) {
|
||||
|
||||
console.debug('Executing InCallController.');
|
||||
$scope.layout = null;
|
||||
|
@ -55,8 +55,8 @@
|
|||
*/
|
||||
$scope.videoCall = function() {
|
||||
prompt({
|
||||
title: 'Would you like to activate video for this call?',
|
||||
message: 'Video will be active during the next calls.'
|
||||
title: $translate.instant('TITLE_ENABLE_VIDEO'),
|
||||
message: $translate.instant('MESSAGE_ENABLE_VIDEO')
|
||||
}).then(function() {
|
||||
storage.data.videoCall = true;
|
||||
$scope.callTemplate = 'partials/video_call.html';
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
angular
|
||||
.module('vertoControllers')
|
||||
.controller('MainController',
|
||||
function($scope, $rootScope, $location, $modal, $timeout, $q, verto, storage, CallHistory, toastr, Fullscreen, prompt, eventQueue) {
|
||||
function($scope, $rootScope, $location, $modal, $timeout, $q, verto, storage, CallHistory, toastr, Fullscreen, prompt, eventQueue, $translate) {
|
||||
|
||||
console.debug('Executing MainController.');
|
||||
|
||||
|
@ -123,8 +123,8 @@
|
|||
|
||||
if (verto.data.call) {
|
||||
prompt({
|
||||
title: 'Oops, Active Call in Course.',
|
||||
message: 'It seems that you are in a call. Do you want to hang up?'
|
||||
title: $translate.instant('TITLE_ACTIVE_CALL'),
|
||||
message: $translate.instant('MESSAGE_ACTIVE_CALL_HANGUP')
|
||||
}).then(function() {
|
||||
disconnect();
|
||||
});
|
||||
|
@ -326,8 +326,8 @@
|
|||
return $q(function(resolve, reject) {
|
||||
if (storage.data.askRecoverCall) {
|
||||
prompt({
|
||||
title: 'Oops, Active Call in Course.',
|
||||
message: 'It seems you were in a call before leaving the last time. Wanna go back to that?'
|
||||
title: $translate.instant('TITLE_ACTIVE_CALL'),
|
||||
message: $translate.instant('MESSAGE_ACTIVE_CALL_BACK')
|
||||
}).then(function() {
|
||||
console.log('redirect to incall page');
|
||||
$location.path('/incall');
|
||||
|
@ -423,8 +423,8 @@
|
|||
storage.data.mutedMic = false;
|
||||
|
||||
prompt({
|
||||
title: 'Incoming Call',
|
||||
message: 'from ' + data
|
||||
title: $translate.instant('TITLE_INCOMING_CALL'),
|
||||
message: $translate.instant('MESSAGE_INCOMING_CALL') + data
|
||||
}).then(function() {
|
||||
var call_start = new Date(storage.data.call_start);
|
||||
$rootScope.start_time = call_start;
|
||||
|
@ -450,7 +450,7 @@
|
|||
*/
|
||||
$scope.hangup = function() {
|
||||
if (!verto.data.call) {
|
||||
toastr.warning('There is no call to hangup.');
|
||||
toastr.warning($translate.instant('MESSAGE_NO_HANGUP_CALL'));
|
||||
$location.path('/dialpad');
|
||||
return;
|
||||
}
|
||||
|
@ -501,7 +501,7 @@
|
|||
};
|
||||
|
||||
$scope.play = function() {
|
||||
var file = $scope.promptInput('Please, enter filename', '', 'File',
|
||||
var file = $scope.promptInput($translate.instant('MESSAGE_ENTER_FILENAME'), '', 'File',
|
||||
function(file) {
|
||||
verto.data.conf.play(file);
|
||||
console.log('play file :', file);
|
||||
|
@ -514,7 +514,7 @@
|
|||
};
|
||||
|
||||
$scope.record = function() {
|
||||
var file = $scope.promptInput('Please, enter filename', '', 'File',
|
||||
var file = $scope.promptInput($translate.instant('MESSAGE_ENTER_FILENAME'), '', 'File',
|
||||
function(file) {
|
||||
verto.data.conf.record(file);
|
||||
console.log('recording file :', file);
|
||||
|
@ -526,7 +526,7 @@
|
|||
};
|
||||
|
||||
$scope.snapshot = function() {
|
||||
var file = $scope.promptInput('Please, enter filename', '', 'File',
|
||||
var file = $scope.promptInput($translate.instant('MESSAGE_ENTER_FILENAME'), '', 'File',
|
||||
function(file) {
|
||||
verto.data.conf.snapshot(file);
|
||||
console.log('snapshot file :', file);
|
||||
|
|
|
@ -4,9 +4,9 @@
|
|||
angular
|
||||
.module('vertoControllers')
|
||||
.controller('PreviewController', ['$rootScope', '$scope',
|
||||
'$http', '$location', '$modal', '$timeout', 'toastr', 'verto', 'storage', 'prompt', 'Fullscreen',
|
||||
'$http', '$location', '$modal', '$timeout', 'toastr', 'verto', 'storage', 'prompt', 'Fullscreen', '$translate',
|
||||
function($rootScope, $scope, $http, $location, $modal, $timeout, toastr,
|
||||
verto, storage, prompt, Fullscreen) {
|
||||
verto, storage, prompt, Fullscreen, $translate) {
|
||||
|
||||
$scope.storage = storage;
|
||||
console.debug('Executing PreviewController.');
|
||||
|
@ -87,8 +87,8 @@
|
|||
|
||||
$scope.videoCall = function() {
|
||||
prompt({
|
||||
title: 'Would you like to activate video for this call?',
|
||||
message: 'Video will be active during the next calls.'
|
||||
title: $translate.instant('TITLE_ENABLE_VIDEO'),
|
||||
message: $translate.instant('MESSAGE_ENABLE_VIDEO')
|
||||
}).then(function() {
|
||||
storage.data.videoCall = true;
|
||||
$scope.callTemplate = 'partials/video_call.html';
|
||||
|
|
|
@ -4,8 +4,8 @@
|
|||
angular
|
||||
.module('vertoControllers')
|
||||
.controller('SettingsController', ['$scope', '$http',
|
||||
'$location', '$rootScope', 'storage', 'verto',
|
||||
function($scope, $http, $location, $rootScope, storage, verto) {
|
||||
'$location', '$rootScope', 'storage', 'verto', '$translate',
|
||||
function($scope, $http, $location, $rootScope, storage, verto, $translate) {
|
||||
console.debug('Executing ModalSettingsController.');
|
||||
|
||||
$.material.init();
|
||||
|
@ -47,7 +47,7 @@
|
|||
return;
|
||||
}
|
||||
else {
|
||||
toastr.warning('Can\'t display preview settings during a call');
|
||||
toastr.warning($translate.instant('MESSAGE_DISPLAY_SETTINGS'));
|
||||
}
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue