Browse Source

Merge 68fd8e5ab7 into c86eaf1449

pull/149/merge
theurere 11 years ago
parent
commit
96fc87f161
  1. 3
      html/main.html
  2. 190
      src/i18n/messages-de.po
  3. 160
      src/styles/components/helptour.scss
  4. 1
      src/styles/main.scss
  5. 4
      static/css/main.min.css
  6. 6
      static/js/directives/directives.js
  7. 240
      static/js/directives/helptour.js
  8. 6
      static/js/directives/settings.js
  9. 100
      static/partials/helpoverlay.html
  10. 15
      static/partials/helptourend.html
  11. 16
      static/partials/helptourstart.html
  12. 9
      static/partials/settings.html

3
html/main.html

@ -4,6 +4,9 @@ @@ -4,6 +4,9 @@
<%template "head" .%>
</head>
<body spreed-webrtc>
<div id="helptour">
<helptour/>
</div>
<div id="background"></div>
<div id="loader"><div><i class="fa fa-circle-o-notch fa-spin"></i><div class="loader-message"></div></div></div>
<ui></ui>

190
src/i18n/messages-de.po

@ -8,7 +8,7 @@ msgid "" @@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Spreed WebRTC 1.0\n"
"Report-Msgid-Bugs-To: simon@struktur.de\n"
"POT-Creation-Date: 2015-07-08 11:02+0200\n"
"POT-Creation-Date: 2015-07-20 11:29+0200\n"
"PO-Revision-Date: 2015-07-08 11:02+0100\n"
"Last-Translator: Simon Eisenmann <simon@struktur.de>\n"
"Language-Team: struktur AG <opensource@struktur.de>\n"
@ -170,6 +170,167 @@ msgstr "Nochmal versuchen" @@ -170,6 +170,167 @@ msgstr "Nochmal versuchen"
msgid "Download failed."
msgstr "Fehler beim Download."
msgid "Options menu"
msgstr "Optionen"
#, python-format
msgid "Window %d of %d"
msgstr "Fenster %d von %d"
msgid ""
"On the options menu you can open the settings, activate or deactivate "
"your camera and microphone. You also can open the contact manager or the "
"chat view to open a group chat. During a call you have further options "
"like sharing your screen, sharing a file as presentation, or even a "
"YouTube Video."
msgstr ""
"Hier können Sie die Einstellungen öffnen und Ihre Kamera oder Ihr "
"Mikrophon aktivieren und dekativieren. Sie können auch den Kontaktmanager"
" oder die Chatansicht, um den Gruppenchat zu aktivieren, öffnen. Während "
"eines Calls können Sie weitere Optionen wählen wie Screensharing starten,"
" eine Präsentation hochladen oder ein YouTube-Video einzufügen."
msgid "Cancel Tour"
msgstr "Tour abbrechen"
msgid "Continue Tour"
msgstr "Tour fortsetzen"
msgid "Settings"
msgstr "Einstellungen"
msgid ""
"Complete your profile by adding your name and picture. You also can enter"
" a status message. If you want, you can change further settings like your"
" camera, video quality, or language. Confirm your settings with a click "
"on \"close\"."
msgstr ""
"Vervollständigen Sie Ihr Profil, indem Sie Ihren Namen und ein Bild "
"hinzufügen. Sie können auch eine Statusnachricht eingeben oder weitere "
"Einstellungen bearbeiten, z.B. Kamera, Videoqualität und Sprache-"
"Einstellungen. Bestätigen Sie die Änderungen mit einem Klick auf "
"“Schließen”."
msgid "Rooms"
msgstr "Räume"
msgid ""
"Create a new room or enter the name of an existing room and click on the "
"icon to enter the room. You can share the room by email, Facebook, "
"Twitter, Google+, and Xing. Your contacts can meet you without creating "
"an account. "
msgstr ""
"Erstellen Sie einen neuen Raum oder geben den Namen eines bestehenden ein"
" und klicken auf das Icon, um ihn zu betreten. Teilen Sie den Raum per "
"Mail, Facebook, Twitter, Google+ und Xing. Ihre Kontakte können Sie "
"treffen, ohne dafür ein eigenes Konto anzulegen."
msgid "Buddies"
msgstr "Buddies"
msgid ""
"A buddy is a person in the same room. Want to call or chat with them? "
"Simply hover over a buddy and start a conversation. Group calls and chats"
" are also possible. "
msgstr ""
"Ein Buddy ist eine Person im selben Raum. Möchten Sie anrufen oder "
"chatten? Fahren Sie mit Ihrer Maus über den Namen und wählen Sie aus, ob "
"Sie ihn anrufen oder anchatten wollen. Fügen Sie weitere Personen für ein"
" Gruppengespräch hinzu."
msgid "Contacts"
msgstr "Kontakte"
msgid ""
"When a buddy and you are logged in you can add him as a contact. Just "
"click on the unfilled star to send a contact request. He is in your "
"contact list when the star is filled. You can call or chat with a contact"
" even when you are in different rooms."
msgstr ""
"Sie können einen Buddy als Kontakt hinzufügen, wenn Sie beide angemeldet "
"sind. Klicken Sie einfach auf den unausgefüllten Stern, um eine "
"Kontaktanfrage zu senden. Wenn der Stern ausgefüllt ist, befindet sich "
"der Kontakt in Ihrer Kontaktliste. Telefonieren oder chatten Sie "
"miteinander, selbst wenn Sie sich in verschiedenen Räumen befinden."
msgid "Chat"
msgstr "Chat"
msgid ""
"You can chat with everyone in a room (room chat) or with a buddy. You "
"also can share a file or your location within the chat. While chatting "
"with a buddy, you can start a call from the chat window."
msgstr ""
"Chatten Sie mit anderen in einem Raum (Raumchat) oder mit einem Buddy. "
"Teilen Sie während des Gesprächs Dateien oder Ihren Standort. Wenn Sie "
"mit einem Buddy chatten, können Sie Ihn auch über das Chatfenster "
"anrufen."
msgid "Contacts Manager"
msgstr "Kontakt-Manager"
msgid ""
"With the contact manager you can manage your contacts. You can call or "
"chat with your contacts even if you are in different rooms. You also can "
"change the name of your contacts."
msgstr ""
"Ihre Kontakte können Sie auch mit dem Kontakt-Manager verwalten. Sie "
"können Ihre Kontakte vom Manger aus anrufen oder anchatten, auch wenn Sie"
" sich in unterschiedlichen Räumen aufhalten. Sie können auch die Namen "
"der Kontakte abändern."
msgid "Microphone / Camera"
msgstr "Mikrofon / Kamera"
msgid ""
"Click on the eye icon to deactivate or activate your camera. Click on the"
" microphone to mute and unmute your microphone. You can change the "
"setting before or during a call."
msgstr ""
"Klicken Sie auf das Augen-Icon, um Ihre Kamera bei einem Call zu "
"aktivieren oder zu deaktivieren. Mit einem Klick auf das Mikrofon-Icon "
"können Sie Ihr Mikrofon stumm oder laut schalten. Sie können die "
"Einstellungen vor oder während einem Call durchführen."
msgid "Start your video calls now!"
msgstr "Starten Sie jetzt mit Ihren Calls!"
msgid ""
"Go on, invite your friends and start your calls. You can restart the tour"
" anytime you want in \"Settings\"."
msgstr ""
"Laden Sie Ihre Freunde ein und starten einen Call. Sie können die Tour "
"jederzeit über die Einstllungen erneut Starten."
msgid "Exit Tour."
msgstr "Tour beenden"
msgid "Replay Tour"
msgstr "Tour wiederholen"
msgid "Welcome to Spreed WebRTC!"
msgstr "Willkommen bei Spreed WebRTC!"
msgid ""
"Spreed WebRTC is your personal online presence and virtual classroom. It "
"is complete with content library, document sharing, and P2P file sharing."
" Start your presence or training with a blink: simply select the contacts"
" you want to include."
msgstr ""
"Spreed WebRTC ist Ihre persönliche Online-Präsenz und virtueller "
"Klassenraum. Sie könner ihre Dokumente via P2P-File-Sharing mit anderen "
"teilen oder als Präsentation gemeinsam betrachten. Starten Sie sofort: "
"Wählen Sie einfach die Kontakte aus, die Sie einladen möchten."
msgid "Do you want to take a tour?"
msgstr "Möchten Sie einen Rundgang machen?"
msgid "No, thanks."
msgstr "Nein, danke."
msgid "Yes, show me Spreed WebRTC."
msgstr "Ja, zeigen Sie mir Spreed WebRTC"
msgid "Share a YouTube video"
msgstr "Ein YouTube Video teilen"
@ -179,21 +340,12 @@ msgstr "Datei als Präsentation teilen." @@ -179,21 +340,12 @@ msgstr "Datei als Präsentation teilen."
msgid "Share your screen"
msgstr "Bildschirm freigeben"
msgid "Chat"
msgstr "Chat"
msgid "Contacts"
msgstr "Kontakte"
msgid "Mute microphone"
msgstr "Mikrofon abschalten"
msgid "Turn camera off"
msgstr "Kamera abschalten"
msgid "Settings"
msgstr "Einstellungen"
msgid "Loading presentation ..."
msgstr "Präsentation wird geladen..."
@ -432,6 +584,15 @@ msgstr "Erweiterte Einstellungen anzeigen" @@ -432,6 +584,15 @@ msgstr "Erweiterte Einstellungen anzeigen"
msgid "Hide advanced settings"
msgstr "Erweiterte Einstellungen ausblenden"
msgid "Help"
msgstr "Hilfe"
msgid "Tour features"
msgstr "Tour Funktionen"
msgid "Take Tour"
msgstr "Tour starten"
msgid "Remember settings"
msgstr "Einstellungen merken"
@ -619,12 +780,12 @@ msgstr "Ihre Kontaktanfrage wurde abgelehnt." @@ -619,12 +780,12 @@ msgstr "Ihre Kontaktanfrage wurde abgelehnt."
msgid "Edit Contact"
msgstr "Kontakt bearbeiten"
msgid "Your browser does not support WebRTC. No calls possible."
msgstr "Ihr Browser unterstützt kein WebRTC. Keine Anrufe möglich."
msgid "Close this window and disconnect?"
msgstr "Fenster schließen und die Verbindung trennen?"
msgid "Contacts Manager"
msgstr "Kontakte"
msgid "Restart required to apply updates. Click ok to restart now."
msgstr ""
"Es stehen Updates zur Verfügung. Klicken Sie Ok um die Anwendung neu zu "
@ -668,9 +829,6 @@ msgstr "" @@ -668,9 +829,6 @@ msgstr ""
"Ihr Browser wird nicht unterstützt. Bitte aktualisieren Sie auf eine "
"aktuelle Version."
msgid "Your browser does not support WebRTC. No calls possible."
msgstr "Ihr Browser unterstützt kein WebRTC. Keine Anrufe möglich."
msgid "Chat with"
msgstr "Chat mit"

160
src/styles/components/helptour.scss

@ -0,0 +1,160 @@ @@ -0,0 +1,160 @@
/*
* Spreed WebRTC.
* Copyright (C) 2013-2014 struktur AG
*
* This file is part of Spreed WebRTC.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
$darken-tour-opacity: .4;
.helptour {
.tourControl {
text-align: center;
hr {
margin: 10px 0;
}
}
.in {
display: block;
}
.slideInfo {
float: right;
}
.popover {
opacity: .95;
}
.twoThirdsLeft {
&.popover > .arrow {
left: 75%;
}
}
.oneThirdLeft {
&.popover > .arrow {
left: 25%;
}
}
.roomPane {
left: 10px;
top: 97px;
.arrow {
left: 10%;
}
}
.buddyListPane {
left: initial;
right: 280px;
top: 70px;
.arrow {
top: 20%;
}
}
.chatPane {
left: initial;
right: 540px;
top: 70px;
.arrow {
top: 20%;
}
}
.settingsPane {
left: initial;
right: 540px;
top: 200px;
.arrow {
top: 20%;
}
}
.optionsPane {
float: right;
margin-right: 20px;
position: relative;
top: 71px;
}
.welcomePane {
margin: 0 auto;
position: relative;
top: 150px;
.btn {
margin-top: 10px;
}
}
}
.helptourShowRoomPane {
// scss-lint:disable IdSelector
#bar,
#buddylist {
opacity: $darken-tour-opacity;
}
.overlaybar {
background: $componentfg2;
}
}
.helptourShowSettingsPane {
// scss-lint:disable IdSelector
#roombar {
opacity: $darken-tour-opacity;
}
}
.helptourShowOptionsPane,
.helptourShowChatPane {
// scss-lint:disable IdSelector
#roombar,
#buddylist {
opacity: $darken-tour-opacity;
}
}
.helptourShowBuddyListPane {
// scss-lint:disable IdSelector
#bar,
#roombar {
opacity: $darken-tour-opacity;
}
}
.helptourShowWelcomePane {
// scss-lint:disable IdSelector
#bar,
#roombar,
#buddylist {
opacity: $darken-tour-opacity;
}
}

1
src/styles/main.scss

@ -52,5 +52,6 @@ @@ -52,5 +52,6 @@
@import 'components/contactsmanager';
@import 'components/presentation';
@import 'components/youtubevideo';
@import 'components/helptour';
@import 'shame';

4
static/css/main.min.css vendored

File diff suppressed because one or more lines are too long

6
static/js/directives/directives.js

@ -49,7 +49,8 @@ define([ @@ -49,7 +49,8 @@ define([
'directives/title',
'directives/welcome',
'directives/menu',
'directives/ui'], function(_, onEnter, onEscape, statusMessage, buddyList, buddyPictureCapture, buddyPictureUpload, settings, chat, audioVideo, usability, audioLevel, fileInfo, screenshare, roomBar, socialShare, page, contactRequest, defaultDialog, pdfcanvas, odfcanvas, presentation, youtubevideo, bfi, title, welcome, menu, ui) {
'directives/ui',
'directives/helptour'], function(_, onEnter, onEscape, statusMessage, buddyList, buddyPictureCapture, buddyPictureUpload, settings, chat, audioVideo, usability, audioLevel, fileInfo, screenshare, roomBar, socialShare, page, contactRequest, defaultDialog, pdfcanvas, odfcanvas, presentation, youtubevideo, bfi, title, welcome, menu, ui, helptour) {
var directives = {
onEnter: onEnter,
@ -78,7 +79,8 @@ define([ @@ -78,7 +79,8 @@ define([
title: title,
welcome: welcome,
menu: menu,
ui: ui
ui: ui,
helptour: helptour
};
var initialize = function(angModule) {

240
static/js/directives/helptour.js

@ -0,0 +1,240 @@ @@ -0,0 +1,240 @@
/*
* Spreed WebRTC.
* Copyright (C) 2013-2014 struktur AG
*
* This file is part of Spreed WebRTC.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
"use strict";
define(['jquery', 'angular', 'text!partials/helpoverlay.html', 'text!partials/helptourstart.html', 'text!partials/helptourend.html'], function($, angular, template, templatehelptourstart, templatehelptourend) {
//helptour
return [function() {
var controller = ['$scope', '$timeout', '$modal', '$rootScope', function($scope, $timeout, $modal, $rootScope) {
var isToggled = false;
var displayTime = 12000;
var shown = localStorage.getItem('mediastream-helptour');
var menus = {};
var backupLayout = null;
var tourLayout = {
buddylist: true,
buddylistAutoHide: false,
chat: false,
chatMaximized: false,
main: null,
presentation: false,
roombar: false,
screenshare: false,
settings: false
};
var tourLayoutShowRoomPane = {
buddylist: true,
buddylistAutoHide: false,
chat: false,
chatMaximized: false,
main: null,
presentation: false,
roombar: true,
screenshare: false,
settings: false
};
var tourLayoutShowBuddyListPane = {
buddylist: true,
buddylistAutoHide: false,
chat: false,
chatMaximized: false,
main: null,
presentation: false,
roombar: false,
screenshare: false,
settings: false
};
var tourLayoutShowChatPane = {
buddylist: true,
buddylistAutoHide: false,
chat: true,
chatMaximized: false,
main: null,
presentation: false,
roombar: false,
screenshare: false,
settings: false
};
var tourLayoutShowSettingsPane = {
buddylist: false,
buddylistAutoHide: false,
chat: false,
chatMaximized: false,
main: null,
presentation: false,
roombar: false,
screenshare: false,
settings: true
};
var tourLayoutShowOptionsPane = {
buddylist: false,
buddylistAutoHide: false,
chat: false,
chatMaximized: false,
main: null,
presentation: false,
roombar: false,
screenshare: false,
settings: false
};
var tourLayoutShowWelcomePane = {
buddylist: true,
buddylistAutoHide: false,
chat: false,
chatMaximized: false,
main: null,
presentation: false,
roombar: false,
screenshare: false,
settings: false
};
var initRoomLayout = function() {
$scope.layout = angular.extend($scope.layout, tourLayout);
};
menus.toggleRoom = function() {
$scope.layout = angular.extend($scope.layout, tourLayoutShowRoomPane);
};
menus.toggleChat = function() {
$scope.layout = angular.extend($scope.layout, tourLayoutShowChatPane);
};
menus.toggleSettings = function() {
$scope.layout = angular.extend($scope.layout, tourLayoutShowSettingsPane);
};
menus.toggleOptions = function() {
$scope.layout = angular.extend($scope.layout, tourLayoutShowOptionsPane);
};
menus.toggleCSS = function(css) {
$('body').toggleClass(css);
};
var toggleTargetMenu = function() {
var menu = $($scope.steps[$scope.currentIndex]).data('menu');
var css = $($scope.steps[$scope.currentIndex]).data('css');
if (menu) {
isToggled = !isToggled;
if(!isToggled) {
initRoomLayout();
} else {
menus[menu]();
}
}
if (css) {
menus.toggleCSS(css);
}
};
var outStep = function() {
toggleTargetMenu();
$($scope.steps[$scope.currentIndex]).removeClass('in');
};
var inStep = function(i) {
$scope.currentIndex = i;
toggleTargetMenu();
$($scope.steps[$scope.currentIndex]).addClass('in');
};
var startTour = function() {
if ($scope.currentIndex === $scope.steps.length - 1 && isToggled) {
outStep();
$scope.currentIndex = 0;
}
inStep(0);
};
var initTour = function() {
backupLayout = angular.extend({}, $scope.layout);
initRoomLayout();
startTour();
};
var reset = function() {
if (isToggled) {
outStep();
}
$scope.currentIndex = null;
$scope.layout = angular.extend($scope.layout, backupLayout);
isToggled = false;
};
var introTourSlide = function() {
var controller = ['$scope', '$modalInstance', function(scope, $modalInstance) {
scope.goTour = function() {
$modalInstance.dismiss();
initTour();
};
}];
$modal.open({
template: templatehelptourstart,
controller: controller,
size: 'md'
});
};
$scope.endTourSlide = function() {
outStep();
var controller = ['$scope', '$modalInstance', function(scope, $modalInstance) {
scope.goTour = function() {
$modalInstance.dismiss();
startTour();
};
scope.endTour = function() {
$modalInstance.dismiss();
reset();
};
}];
$modal.open({
template: templatehelptourend,
controller: controller,
size: 'md'
});
};
$scope.currentIndex = null;
$scope.stepBackward = function() {
outStep();
inStep($scope.currentIndex - 1);
};
$scope.stepForward = function() {
outStep();
inStep($scope.currentIndex + 1);
};
$scope.exitTour = function() {
reset();
};
$scope.$on('showHelpTourStart', function() {
introTourSlide();
});
$rootScope.$on("rooms.ready", function(event, room) {
if (!shown) {
introTourSlide();
localStorage.setItem('mediastream-helptour', 1);
}
});
}];
var link = function($scope, $elem, $attrs) {
$scope.steps = $elem.find('.tourSteps .popover');
};
return {
restrict: 'E',
scope: true,
replace: true,
template: template,
controller: controller,
link: link
};
}];
});

6
static/js/directives/settings.js

@ -55,7 +55,7 @@ define(['jquery', 'underscore', 'text!partials/settings.html'], function($, _, t @@ -55,7 +55,7 @@ define(['jquery', 'underscore', 'text!partials/settings.html'], function($, _, t
return ["$compile", "mediaStream", function($compile, mediaStream) {
var controller = ['$scope', 'desktopNotify', 'mediaSources', 'safeApply', 'availableLanguages', 'translation', 'localStorage', 'userSettingsData', 'constraints', 'appData', '$timeout', function($scope, desktopNotify, mediaSources, safeApply, availableLanguages, translation, localStorage, userSettingsData, constraints, appData, $timeout) {
var controller = ['$scope', 'desktopNotify', 'mediaSources', 'safeApply', 'availableLanguages', 'translation', 'localStorage', 'userSettingsData', 'constraints', 'appData', '$timeout', '$rootScope', function($scope, desktopNotify, mediaSources, safeApply, availableLanguages, translation, localStorage, userSettingsData, constraints, appData, $timeout, $rootScope) {
$scope.layout.settings = false;
$scope.showAdvancedSettings = true;
@ -85,6 +85,10 @@ define(['jquery', 'underscore', 'text!partials/settings.html'], function($, _, t @@ -85,6 +85,10 @@ define(['jquery', 'underscore', 'text!partials/settings.html'], function($, _, t
}
});
$scope.takeTour = function() {
$rootScope.$broadcast('showHelpTourStart');
};
$scope.saveSettings = function() {
var form = $scope.settingsform;
if (form.$valid && form.$dirty) {

100
static/partials/helpoverlay.html

@ -0,0 +1,100 @@ @@ -0,0 +1,100 @@
<div class="helptour">
<div class="tourSteps">
<div class="popover bottom optionsPane oneThirdLeft" data-menu="toggleOptions" data-css="helptourShowOptionsPane">
<div class="arrow"></div>
<h3 class="popover-title">{{_('Options menu')}}<span class="slideInfo">{{_('Window %d of %d', currentIndex + 1, steps.length)}}</h3>
<div class="popover-content">
{{_('On the options menu you can open the settings, activate or deactivate your camera and microphone. You also can open the contact manager or the chat view to open a group chat. During a call you have further options like sharing your screen, sharing a file as presentation, or even a YouTube Video.')}}
<div class="tourControl">
<hr>
<button class="btn btn-default" ng-click="exitTour()">{{_('Cancel Tour')}}</button>
<button class="btn btn-primary" ng-click="stepForward()" ng-disabled="currentIndex === steps.length - 1">{{_('Continue Tour')}}</button>
</div>
</div>
</div>
<div class="popover left settingsPane" data-menu="toggleSettings" data-css="helptourShowSettingsPane">
<div class="arrow"></div>
<h3 class="popover-title">{{_('Settings')}}<span class="slideInfo">{{_('Window %d of %d', currentIndex + 1, steps.length)}}</h3>
<div class="popover-content">
{{_('Complete your profile by adding your name and picture. You also can enter a status message. If you want, you can change further settings like your camera, video quality, or language. Confirm your settings with a click on "close".')}}
<div class="tourControl">
<hr>
<button class="btn btn-default" ng-click="exitTour()">{{_('Cancel Tour')}}</button>
<button class="btn btn-primary" ng-click="stepForward()" ng-disabled="currentIndex === steps.length - 1">{{_('Continue Tour')}}</button>
</div>
</div>
</div>
<div class="popover bottom roomPane" data-menu="toggleRoom" data-css="helptourShowRoomPane">
<div class="arrow"></div>
<h3 class="popover-title">{{_('Rooms')}}<span class="slideInfo">{{_('Window %d of %d', currentIndex + 1, steps.length)}}</span></h3>
<div class="popover-content">
{{_('Create a new room or enter the name of an existing room and click on the icon to enter the room. You can share the room by email, Facebook, Twitter, Google+, and Xing. Your contacts can meet you without creating an account. ')}}
<div class="tourControl">
<hr>
<button class="btn btn-default" ng-click="exitTour()">{{_('Cancel Tour')}}</button>
<button class="btn btn-primary" ng-click="stepForward()" ng-disabled="currentIndex === steps.length - 1">{{_('Continue Tour')}}</button>
</div>
</div>
</div>
<div class="popover left buddyListPane" data-css="helptourShowBuddyListPane">
<div class="arrow"></div>
<h3 class="popover-title">{{_('Buddies')}}<span class="slideInfo">{{_('Window %d of %d', currentIndex + 1, steps.length)}}</h3>
<div class="popover-content">
{{_('A buddy is a person in the same room. Want to call or chat with them? Simply hover over a buddy and start a conversation. Group calls and chats are also possible. ')}}
<div class="tourControl">
<hr>
<button class="btn btn-default" ng-click="exitTour()">{{_('Cancel Tour')}}</button>
<button class="btn btn-primary" ng-click="stepForward()" ng-disabled="currentIndex === steps.length - 1">{{_('Continue Tour')}}</button>
</div>
</div>
</div>
<div class="popover left buddyListPane" data-css="helptourShowBuddyListPane">
<div class="arrow"></div>
<h3 class="popover-title">{{_('Contacts')}}<span class="slideInfo">{{_('Window %d of %d', currentIndex + 1, steps.length)}}</h3>
<div class="popover-content">
{{_('When a buddy and you are logged in you can add him as a contact. Just click on the unfilled star to send a contact request. He is in your contact list when the star is filled. You can call or chat with a contact even when you are in different rooms.')}}
<div class="tourControl">
<hr>
<button class="btn btn-default" ng-click="exitTour()">{{_('Cancel Tour')}}</button>
<button class="btn btn-primary" ng-click="stepForward()" ng-disabled="currentIndex === steps.length - 1">{{_('Continue Tour')}}</button>
</div>
</div>
</div>
<div class="popover left chatPane" data-menu="toggleChat" data-css="helptourShowChatPane">
<div class="arrow"></div>
<h3 class="popover-title">{{_('Chat')}}<span class="slideInfo">{{_('Window %d of %d', currentIndex + 1, steps.length)}}</h3>
<div class="popover-content">
{{_('You can chat with everyone in a room (room chat) or with a buddy. You also can share a file or your location within the chat. While chatting with a buddy, you can start a call from the chat window.')}}
<div class="tourControl">
<hr>
<button class="btn btn-default" ng-click="exitTour()">{{_('Cancel Tour')}}</button>
<button class="btn btn-primary" ng-click="stepForward()" ng-disabled="currentIndex === steps.length - 1">{{_('Continue Tour')}}</button>
</div>
</div>
</div>
<div class="popover bottom optionsPane" data-menu="toggleOptions" data-css="helptourShowOptionsPane">
<div class="arrow"></div>
<h3 class="popover-title">{{_('Contacts Manager')}}<span class="slideInfo">{{_('Window %d of %d', currentIndex + 1, steps.length)}}</h3>
<div class="popover-content">
{{_('With the contact manager you can manage your contacts. You can call or chat with your contacts even if you are in different rooms. You also can change the name of your contacts.')}}
<div class="tourControl">
<hr>
<button class="btn btn-default" ng-click="exitTour()">{{_('Cancel Tour')}}</button>
<button class="btn btn-primary" ng-click="stepForward()" ng-disabled="currentIndex === steps.length - 1">{{_('Continue Tour')}}</button>
</div>
</div>
</div>
<div class="popover bottom optionsPane twoThirdsLeft" data-menu="toggleOptions" data-css="helptourShowOptionsPane">
<div class="arrow"></div>
<h3 class="popover-title">{{_('Microphone / Camera')}}<span class="slideInfo">{{_('Window %d of %d', currentIndex + 1, steps.length)}}</h3>
<div class="popover-content">
{{_('Click on the eye icon to deactivate or activate your camera. Click on the microphone to mute and unmute your microphone. You can change the setting before or during a call.')}}
<div class="tourControl">
<hr>
<button class="btn btn-default" ng-click="exitTour()">{{_('Cancel Tour')}}</button>
<button class="btn btn-primary" ng-click="endTourSlide()">{{_('Continue Tour')}}</button>
</div>
</div>
</div>
</div>
</div>

15
static/partials/helptourend.html

@ -0,0 +1,15 @@ @@ -0,0 +1,15 @@
<div>
<div class="modal-header">
<button type="button" class="close" ng-click="$close()">×</button>
<h3 class="modal-title">{{_('Start your video calls now!')}}</h3>
</div>
<div class="modal-body">
<p>{{_('Go on, invite your friends and start your calls. You can restart the tour anytime you want in "Settings".')}}</p>
</div>
<div class="modal-footer">
<div class="pull-right">
<button class="btn btn-default" ng-click="endTour()">{{_('Exit Tour.')}}</button>
<button class="btn btn-primary" ng-click="goTour()">{{_('Replay Tour')}}</button>
</div>
</div>
</div>

16
static/partials/helptourstart.html

@ -0,0 +1,16 @@ @@ -0,0 +1,16 @@
<div>
<div class="modal-header">
<button type="button" class="close" ng-click="$close()">×</button>
<h3 class="modal-title">{{_('Welcome to Spreed WebRTC!')}}</h3>
</div>
<div class="modal-body">
<p>{{_('Spreed WebRTC is your personal online presence and virtual classroom. It is complete with content library, document sharing, and P2P file sharing. Start your presence or training with a blink: simply select the contacts you want to include.')}}</p>
<p>{{_('Do you want to take a tour?')}}</p>
</div>
<div class="modal-footer">
<div class="pull-right">
<button class="btn btn-default" ng-click="$dismiss()">{{_('No, thanks.')}}</button>
<button class="btn btn-primary" ng-click="goTour()">{{_('Yes, show me Spreed WebRTC.')}}</button>
</div>
</div>
</div>

9
static/partials/settings.html

@ -274,6 +274,15 @@ @@ -274,6 +274,15 @@
<a ng-click="showAdvancedSettings = !showAdvancedSettings"><span ng-show="showAdvancedSettings">{{_('Show advanced settings')}}</span><span ng-hide="showAdvancedSettings">{{_('Hide advanced settings')}}</span></a>
</div>
</div>
<settings-help>
<legend>{{_('Help')}}</legend>
<div class="form-group">
<label class="col-xs-4 control-label">{{_('Tour features')}}</label>
<div class="col-xs-8">
<button class="btn btn-primary" ng-click="takeTour()">{{_('Take Tour')}}</button>
</div>
</div>
</settings-help>
<hr/>

Loading…
Cancel
Save