Changes the configuration of translation module to retrieve the resources synchronous. Removes the default values.

This commit is contained in:
hristoterezov 2015-02-26 17:35:35 +02:00
parent 9123923818
commit af682f8727
16 changed files with 17339 additions and 17495 deletions

View File

@ -19,7 +19,7 @@
<script src="libs/popover.js?v=1"></script><!-- bootstrap tooltip lib -->
<script src="libs/toastr.js?v=1"></script><!-- notifications lib -->
<script src="interface_config.js?v=5"></script>
<script src="libs/app.bundle.js?v=23"></script>
<script src="libs/app.bundle.js?v=24"></script>
<script src="analytics.js?v=1"></script><!-- google analytics plugin -->
<link rel="stylesheet" href="css/font.css?v=6"/>
<link rel="stylesheet" href="css/toastr.css?v=1">

View File

@ -175,6 +175,10 @@
"yourPassword": "your password",
"Back": "Back",
"serviceUnavailable": "Service unavailable",
"gracefulShutdown": "Our service is currently down for maintenance. Please try again later."
"gracefulShutdown": "Our service is currently down for maintenance. Please try again later.",
"Yes": "Yes",
"reservationError": "Reservation system error",
"reservationErrorMsg": "Error code: __code__, message: __msg__"
}
}

File diff suppressed because it is too large Load Diff

View File

@ -317,10 +317,8 @@ RTCUtils.prototype.errorCallback = function (error) {
function (error) {
console.error('failed to obtain audio/video stream - stop',
error);
APP.UI.messageHandler.showError("dialog.error", "Error",
"dialog.failedpermissions",
"Failed to obtain permissions to use the local microphone " +
"and/or camera.");
APP.UI.messageHandler.showError("dialog.error",
"dialog.failedpermissions");
}
);
}

View File

@ -137,16 +137,18 @@ function registerListeners() {
APP.xmpp.addListener(XMPPEvents.DISPOSE_CONFERENCE, onDisposeConference);
APP.xmpp.addListener(XMPPEvents.GRACEFUL_SHUTDOWN, function () {
messageHandler.openMessageDialog(
'dialog.serviceUnavailable', 'Service unavailable',
'dialog.gracefulShutdown',
'Our service is currently down for maintenance.' +
' Please try again later.'
'dialog.serviceUnavailable',
'dialog.gracefulShutdown'
);
});
APP.xmpp.addListener(XMPPEvents.RESERVATION_ERROR, function (code, msg) {
var title = APP.translation.generateTranslatonHTML(
"dialog.reservationError");
var message = APP.translation.generateTranslatonHTML(
"dialog.reservationErrorMsg", {code: code, msg: msg});
messageHandler.openDialog(
'Reservation system error',
'Error code: ' + code + ', message: ' + msg,
title,
message,
true, {},
function (event, value, message, formVals)
{
@ -155,14 +157,15 @@ function registerListeners() {
);
});
APP.xmpp.addListener(XMPPEvents.KICKED, function () {
messageHandler.openMessageDialog("dialog.sessTerminated", "Session Terminated",
"dialog.kickMessage", "Ouch! You have been kicked out of the meet!");
messageHandler.openMessageDialog("dialog.sessTerminated",
"dialog.kickMessage");
});
APP.xmpp.addListener(XMPPEvents.MUC_DESTROYED, function (reason) {
//FIXME: use Session Terminated from translation, but
// 'reason' text comes from XMPP packet and is not translated
var title = APP.translation.generateTranslatonHTML("dialog.sessTerminated");
messageHandler.openDialog(
"Session Terminated", reason, true, {},
title, reason, true, {},
function (event, value, message, formVals)
{
return false;
@ -170,9 +173,8 @@ function registerListeners() {
);
});
APP.xmpp.addListener(XMPPEvents.BRIDGE_DOWN, function () {
messageHandler.showError("dialog.error","Error",
"dialog.bridgeUnavailable",
"Jitsi Videobridge is currently unavailable. Please try again later!");
messageHandler.showError("dialog.error",
"dialog.bridgeUnavailable");
});
APP.xmpp.addListener(XMPPEvents.USER_ID_CHANGED, function (from, id) {
Avatar.setUserAvatar(from, id);
@ -417,9 +419,9 @@ function onMucLeft(jid) {
console.log('left.muc', jid);
var displayName = $('#participant_' + Strophe.getResourceFromJid(jid) +
'>.displayname').html();
messageHandler.notify(displayName,'notify.somebody', "Somebody",
messageHandler.notify(displayName,'notify.somebody',
'disconnected',
'notify.disconnected', "disconnected");
'notify.disconnected');
// Need to call this with a slight delay, otherwise the element couldn't be
// found for some reason.
// XXX(gp) it works fine without the timeout for me (with Chrome 38).
@ -450,8 +452,7 @@ function onLocalRoleChange(jid, info, pres, isModerator)
if (isModerator) {
Authentication.closeAuthenticationWindow();
messageHandler.notify(null, "notify.me",
'Me', 'connected', "notify.moderator",
'Moderator rights granted !');
'connected', "notify.moderator");
}
}
@ -475,7 +476,7 @@ function onPasswordReqiured(callback) {
Toolbar.lockLockButton();
var message = '<h2 data-i18n="dialog.passwordRequired">';
message += APP.translation.translateString(
"dialog.passwordRequired", null, "Password required");
"dialog.passwordRequired");
message += '</h2>' +
'<input id="lockKey" type="text" placeholder="password" autofocus>';
@ -498,9 +499,9 @@ function onPasswordReqiured(callback) {
);
}
function onMucEntered(jid, id, displayName) {
messageHandler.notify(displayName,'notify.somebody', "Somebody",
messageHandler.notify(displayName,'notify.somebody',
'connected',
'notify.connected', "connected");
'notify.connected');
// Add Peer's container
VideoLayout.ensurePeerContainerExists(jid,id);
@ -516,9 +517,7 @@ function onMucRoleChanged(role, displayName) {
if (role === 'moderator') {
var messageKey, messageOptions = {};
var lDisplayName = displayName;
if (!lDisplayName) {
lDisplayName = 'Somebody';
if (!displayName) {
messageKey = "notify.grantedToUnknown";
}
else
@ -527,9 +526,8 @@ function onMucRoleChanged(role, displayName) {
messageOptions = {to: displayName};
}
messageHandler.notify(
displayName,'notify.somebody', "Somebody",
displayName,'notify.somebody',
'connected', messageKey,
'Moderator rights granted to ' + lDisplayName + '!',
messageOptions);
}
}
@ -641,7 +639,7 @@ UI.showLoginPopup = function(callback)
console.log('password is required');
var message = '<h2 data-i18n="dialog.passwordRequired">';
message += APP.translation.translateString(
"dialog.passwordRequired", null, "Password required");
"dialog.passwordRequired");
message += '</h2>' +
'<input id="passwordrequired.username" type="text" ' +
'placeholder="user@domain.net" autofocus>' +

View File

@ -16,16 +16,11 @@ var Authentication = {
// extract room name from 'room@muc.server.net'
var room = roomName.substr(0, roomName.indexOf('@'));
var title = APP.translation.generateTranslatonHTML("dialog.Stop",
"Stop");
var defMsg = 'Authentication is required to create room:<br/><b>' +
room +
'</b></br> You can either authenticate to create the room or ' +
'just wait for someone else to do so.';
var title = APP.translation.generateTranslatonHTML("dialog.Stop");
var msg = APP.translation.generateTranslatonHTML("dialog.AuthMsg",
defMsg, {room: room});
{room: room});
var button = APP.translation.generateTranslatonHTML(
"dialog.Authenticate", "Authenticate");
"dialog.Authenticate");
var buttons = {};
buttons.authenticate = {title: button, value: "authNow"};

View File

@ -34,8 +34,9 @@ var Prezi = {
var myprezi = APP.xmpp.getPrezi();
if (myprezi) {
messageHandler.openTwoButtonDialog("dialog.removePreziTitle",
"Remove Prezi", "dialog.removePreziMsg",
"Are you sure you would like to remove your Prezi?",
null,
"dialog.removePreziMsg",
null,
false,
"dialog.Remove",
function(e,v,m,f) {
@ -47,9 +48,8 @@ var Prezi = {
}
else if (preziPlayer != null) {
messageHandler.openTwoButtonDialog("dialog.sharePreziTitle",
"Share a Prezi", "dialog.sharePreziMsg",
"Another participant is already sharing a Prezi." +
"This conference allows only one Prezi at a time.",
null, "dialog.sharePreziMsg",
null,
false,
"dialog.Ok",
function(e,v,m,f) {
@ -59,20 +59,20 @@ var Prezi = {
}
else {
var html = APP.translation.generateTranslatonHTML(
"dialog.sharePreziTitle", "Share a Prezi");
"dialog.sharePreziTitle");
var cancelButton = APP.translation.generateTranslatonHTML(
"dialog.Cancel", "Cancel");
"dialog.Cancel");
var shareButton = APP.translation.generateTranslatonHTML(
"dialog.Share", "Share");
"dialog.Share");
var backButton = APP.translation.generateTranslatonHTML(
"dialog.Back", "Back");
"dialog.Back");
var buttons = {};
var buttons1 = {};
buttons1.button1 = buttons.button1 = {title: cancelButton, value: false};
buttons.button2 = {title: shareButton, value: true};
buttons1.button2 = {title: backButton, value: true};
var linkError = APP.translation.generateTranslatonHTML(
"dialog.preziLinkError", "Please provide a correct prezi link.")
"dialog.preziLinkError");
var openPreziState = {
state0: {
html: '<h2>' + html + '</h2>' +

View File

@ -27,6 +27,7 @@ var SettingsMenu = {
init: function () {
$("#updateSettings").before(generateLanguagesSelectBox());
APP.translation.translateElement($("#languages_selectbox"));
$('#settingsmenu>input').keyup(function(event){
if(event.keyCode === 13) {//enter
SettingsMenu.update();

View File

@ -66,10 +66,12 @@ var buttonHandlers =
"toolbar_button_logout": function () {
// Ask for confirmation
messageHandler.openTwoButtonDialog(
"dialog.logoutTitle", "Logout",
"dialog.logoutTitle",
null,
"dialog.logoutQuestion",
"Are you sure you want to logout and stop the conference ?",
false, "Yes",
null,
false,
"dialog.Yes",
function (evt, yes) {
if (yes) {
APP.xmpp.logout(function (url) {
@ -97,11 +99,11 @@ function hangup() {
}
var title = APP.translation.generateTranslatonHTML(
"dialog.sessTerminated", "Session Terminated");
"dialog.sessTerminated");
var msg = APP.translation.generateTranslatonHTML(
"dialog.hungUp","You hung up the call");
"dialog.hungUp");
var button = APP.translation.generateTranslatonHTML(
"dialog.joinAgain", "Join again");
"dialog.joinAgain");
var buttons = {};
buttons.joinAgain = {title: button, value: true};
@ -125,7 +127,7 @@ function hangup() {
function toggleRecording() {
APP.xmpp.toggleRecording(function (callback) {
var msg = APP.translation.generateTranslatonHTML(
"dialog.recordingToken", "Enter recording token");
"dialog.recordingToken");
APP.UI.messageHandler.openTwoButtonDialog(null, null, null,
'<h2>' + msg + '</h2>' +
'<input id="recordingToken" type="text" ' +
@ -172,16 +174,13 @@ function lockRoom(lock) {
}
}, function (err) {
console.warn('setting password failed', err);
messageHandler.showError("dialog.lockTitle", 'Lock failed',
"dialog.lockMessage",
'Failed to lock conference.',
err);
messageHandler.showError("dialog.lockTitle",
"dialog.lockMessage");
Toolbar.setSharedKey('');
}, function () {
console.warn('room passwords not supported');
messageHandler.showError("dialog.warning", 'Warning',
"dialog.passwordNotSupported",
'Room passwords are currently not supported.');
messageHandler.showError("dialog.warning",
"dialog.passwordNotSupported");
Toolbar.setSharedKey('');
});
};
@ -233,7 +232,7 @@ function callSipButtonClicked()
= config.defaultSipNumber ? config.defaultSipNumber : '';
var sipMsg = APP.translation.generateTranslatonHTML(
"dialog.sipMsg", "Enter SIP number");
"dialog.sipMsg");
messageHandler.openTwoButtonDialog(null, null, null,
'<h2>' + sipMsg + '</h2>' +
'<input id="sipNumber" type="text"' +
@ -318,10 +317,7 @@ var Toolbar = (function (my) {
}, url);
if (!authenticationWindow) {
messageHandler.openMessageDialog(
null, null, "dialog.popupError",
"Your browser is blocking popup windows from this site." +
" Please enable popups in your browser security settings" +
" and try again.");
null, "dialog.popupError");
}
});
}
@ -359,26 +355,16 @@ var Toolbar = (function (my) {
// Only the focus is able to set a shared key.
if (!APP.xmpp.isModerator()) {
if (sharedKey) {
messageHandler.openMessageDialog(null, null,
"dialog.passwordError",
"This conversation is currently protected by" +
" a password. Only the owner of the conference" +
" could set a password.",
false,
"Password");
messageHandler.openMessageDialog(null,
"dialog.passwordError");
} else {
messageHandler.openMessageDialog(null, null, "dialog.passwordError2",
"This conversation isn't currently protected by" +
" a password. Only the owner of the conference" +
" could set a password.",
false,
"Password");
messageHandler.openMessageDialog(null, "dialog.passwordError2");
}
} else {
if (sharedKey) {
messageHandler.openTwoButtonDialog(null, null,
"dialog.passwordCheck",
"Are you sure you would like to remove your password?",
null,
false,
"dialog.Remove",
function (e, v) {
@ -389,9 +375,9 @@ var Toolbar = (function (my) {
});
} else {
var msg = APP.translation.generateTranslatonHTML(
"dialog.passwordMsg", "Set a password to lock your room");
"dialog.passwordMsg");
var yourPassword = APP.translation.translateString(
"dialog.yourPassword", null, "your password");
"dialog.yourPassword");
messageHandler.openTwoButtonDialog(null, null, null,
'<h2>' + msg + '</h2>' +
'<input id="lockKey" type="text"' +
@ -427,7 +413,7 @@ var Toolbar = (function (my) {
inviteLink = encodeURI(roomUrl);
}
messageHandler.openTwoButtonDialog("dialog.shareLink",
"Share this link with everyone you want to invite", null,
null, null,
'<input id="inviteLinkRef" type="text" value="' +
inviteLink + '" onclick="this.select();" readonly>',
false,
@ -455,15 +441,14 @@ var Toolbar = (function (my) {
*/
my.openSettingsDialog = function () {
var settings1 = APP.translation.generateTranslatonHTML(
"dialog.settings1", "Configure your conference");
"dialog.settings1");
var settings2 = APP.translation.generateTranslatonHTML(
"dialog.settings2", "Participants join muted");
"dialog.settings2");
var settings3 = APP.translation.generateTranslatonHTML(
"dialog.settings3", "Require nicknames<br/><br/>" +
"Set a password to lock your room:");
"dialog.settings3");
var yourPassword = APP.translation.translateString(
"dialog.yourPassword", null, "your password");
"dialog.yourPassword");
messageHandler.openTwoButtonDialog(null,
'<h2>' + settings1 + '</h2>' +

View File

@ -7,16 +7,13 @@ var messageHandler = (function(my) {
* @param titleString the title of the message
* @param messageString the text of the message
*/
my.openMessageDialog = function(titleKey, titleString,
messageKey, messageString) {
my.openMessageDialog = function(titleKey, messageKey) {
var title = null;
if(titleKey)
{
title = APP.translation.generateTranslatonHTML(titleKey,
titleString);
title = APP.translation.generateTranslatonHTML(titleKey);
}
var message = APP.translation.generateTranslatonHTML(messageKey,
messageString);
var message = APP.translation.generateTranslatonHTML(messageKey);
$.prompt(message,
{
title: title,
@ -43,16 +40,15 @@ var messageHandler = (function(my) {
var leftButton = APP.translation.generateTranslatonHTML(leftButtonKey);
var buttons = {};
buttons.button1 = {title: leftButton, value: true};
var cancelButton = APP.translation.generateTranslatonHTML("dialog.Cancel",
"Cancel");
var cancelButton = APP.translation.generateTranslatonHTML("dialog.Cancel");
buttons.button2 = {title: cancelButton, value: false};
var message = msgString, title = titleString;
if(titleKey)
{
title = APP.translation.generateTranslatonHTML(titleKey, titleString);
title = APP.translation.generateTranslatonHTML(titleKey);
}
if(msgKey) {
message = APP.translation.generateTranslatonHTML(msgKey, msgString);
message = APP.translation.generateTranslatonHTML(msgKey);
}
$.prompt(message, {
title: title,
@ -152,9 +148,8 @@ var messageHandler = (function(my) {
* @param msgString the text of the message
* @param error the error that is being reported
*/
my.openReportDialog = function(titleKey, titleString, msgKey,
msgString, error) {
my.openMessageDialog(titleKey, titleString, msgKey, msgString);
my.openReportDialog = function(titleKey, msgKey, error) {
my.openMessageDialog(titleKey, msgKey);
console.log(error);
//FIXME send the error to the server
};
@ -164,22 +159,20 @@ var messageHandler = (function(my) {
* @param title the title of the message
* @param message the text of the messafe
*/
my.showError = function(titleKey, title, msgKey, message) {
my.showError = function(titleKey, msgKey) {
if(!titleKey) {
title = "Oops!";
titleKey = "dialog.oops";
}
if(!msgKey)
{
message = "There was some kind of error";
msgKey = "dialog.defaultError";
}
messageHandler.openMessageDialog(titleKey, title, msgKey, message);
messageHandler.openMessageDialog(titleKey, msgKey);
};
my.notify = function(displayName, displayNameKey, displayNameDefault,
cls, messageKey, messageDefault, messageArguments) {
my.notify = function(displayName, displayNameKey,
cls, messageKey, messageArguments) {
var displayNameSpan = '<span class="nickname" ';
if(displayName)
{
@ -188,22 +181,17 @@ var messageHandler = (function(my) {
else
{
displayNameSpan += "data-i18n='" + displayNameKey +
"'>" + APP.translation.translateString(displayNameKey, null,
{defaultValue: displayNameDefault});
"'>" + APP.translation.translateString(displayNameKey);
}
displayNameSpan += "</span>";
var lMessageArguments = messageArguments;
if(!messageArguments)
lMessageArguments = {};
lMessageArguments.defaultValue = messageDefault;
toastr.info(
displayNameSpan + '<br>' +
'<span class=' + cls + ' data-i18n="' + messageKey + '"' +
(messageArguments?
" i18n-options='" + JSON.stringify(messageArguments) + "'"
: "") + ">" +
APP.translation.translateString(messageKey, null,
lMessageArguments) +
APP.translation.translateString(messageKey,
messageArguments) +
'</span>');
};

View File

@ -92,9 +92,8 @@ function isUpdateRequired(minVersion, extVersion)
catch (e)
{
console.error("Failed to parse extension version", e);
APP.UI.messageHandler.showError("dialog.error", 'Error',
"dialod.detectext",
'Error when trying to detect desktopsharing extension.');
APP.UI.messageHandler.showError("dialog.error",
"dialog.detectext");
return true;
}
}
@ -175,9 +174,8 @@ function obtainScreenFromExtension(streamCallback, failCallback) {
function (arg) {
console.log("Failed to install the extension", arg);
failCallback(arg);
APP.UI.messageHandler.showError("dialog.error", 'Error',
"dialog.failtoinstall",
'Failed to install desktop sharing extension');
APP.UI.messageHandler.showError("dialog.error",
"dialog.failtoinstall");
}
);
}

View File

@ -2,8 +2,6 @@ var i18n = require("i18next-client");
var languages = require("../../service/translation/languages");
var Settings = require("../settings/Settings");
var DEFAULT_LANG = languages.EN;
var initialized = false;
var waitingForInit = [];
i18n.addPostProcessor("resolveAppName", function(value, key, options) {
return value.replace("__app__", interfaceConfig.APP_NAME);
@ -27,13 +25,12 @@ var defaultOptions = {
fallbackOnEmpty: true,
useDataAttrOptions: true,
app: interfaceConfig.APP_NAME,
getAsync: true,
getAsync: false,
customLoad: function(lng, ns, options, done) {
var resPath = "lang/__ns__-__lng__.json";
if(lng === languages.EN)
resPath = "lang/__ns__.json";
var url = i18n.functions.applyReplacement(resPath, { lng: lng, ns: ns });
initialized = false;
i18n.functions.ajax({
url: url,
success: function(data, status, xhr) {
@ -67,14 +64,7 @@ var defaultOptions = {
function initCompleted(t)
{
initialized = true;
$("[data-i18n]").i18n();
for(var i = 0; i < waitingForInit.length; i++)
{
var obj = waitingForInit[i];
obj.callback(i18n.t(obj.key));
}
waitingForInit = [];
}
function checkForParameter() {
@ -92,7 +82,6 @@ function checkForParameter() {
module.exports = {
init: function (lang) {
initialized = false;
var options = defaultOptions;
@ -113,21 +102,10 @@ module.exports = {
i18n.init(options, initCompleted);
},
translateString: function (key, cb, options) {
if(!cb)
translateString: function (key, options) {
return i18n.t(key, options);
if(initialized)
{
cb(i18n.t(key, options));
}
else
{
waitingForInit.push({"callback": cb, "key": key});
}
},
setLanguage: function (lang) {
initialized = false;
if(!lang)
lang = DEFAULT_LANG;
i18n.setLng(lang, defaultOptions, initCompleted);
@ -138,20 +116,14 @@ module.exports = {
translateElement: function (selector) {
selector.i18n();
},
generateTranslatonHTML: function (key, defaultString, options) {
generateTranslatonHTML: function (key, options) {
var str = "<span data-i18n=\"" + key + "\"";
if(options)
{
str += " data-i18n-options=\"" + JSON.stringify(options) + "\"";
}
str += ">";
if(!options)
options = {};
if(defaultString)
{
options.defaultValue = defaultString;
}
str += this.translateString(key, null, options);
str += this.translateString(key, options);
str += "</span>";
return str;

View File

@ -1226,9 +1226,8 @@ JingleSession.onJingleFatalError = function (session, error)
{
this.service.sessionTerminated = true;
this.connection.emuc.doLeave();
APP.UI.messageHandler.showError("dialog.sorry", "Sorry",
"dialog.internalError",
"Internal application error[setRemoteDescription]");
APP.UI.messageHandler.showError("dialog.sorry",
"dialog.internalError");
}
JingleSession.prototype.setLocalDescription = function () {

View File

@ -324,9 +324,7 @@ var Moderator = {
if (!invalidSession) {
APP.UI.messageHandler.notify(
null, "notify.focus",
'Conference focus', 'disconnected', "notify.focusFail",
focusComponent + " not available - retry in " +
retrySec + " sec",
'disconnected', "notify.focusFail",
{component: focusComponent, ms: retrySec});
}
// Reset response timeout

View File

@ -285,26 +285,18 @@ module.exports = function(XMPP, eventEmitter) {
// We're either missing Jicofo/Prosody config for anonymous
// domains or something is wrong.
// XMPP.promptLogin();
APP.UI.messageHandler.openReportDialog(null, null,
"dialog.joinError",
'Oops ! We couldn`t join the conference.' +
' There might be some problem with security' +
' configuration. Please contact service' +
' administrator.', pres);
APP.UI.messageHandler.openReportDialog(null,
"dialog.joinError", pres);
} else {
console.warn('onPresError ', pres);
APP.UI.messageHandler.openReportDialog(null, null,
APP.UI.messageHandler.openReportDialog(null,
"dialog.connectError",
'Oops! Something went wrong and we couldn`t ' +
'connect to the conference.',
pres);
}
} else {
console.warn('onPresError ', pres);
APP.UI.messageHandler.openReportDialog(null, null,
APP.UI.messageHandler.openReportDialog(null,
"dialog.connectError",
'Oops! Something went wrong and we couldn`t ' +
'connect to the conference.',
pres);
}
return true;

View File

@ -252,8 +252,8 @@ var XMPP = {
} else {
// We are done immediately
console.error("No conference handler");
APP.UI.messageHandler.showError("dialog.error", 'Error',
"dialog.unableToSwitch", 'Unable to switch video stream.');
APP.UI.messageHandler.showError("dialog.error",
"dialog.unableToSwitch");
callback();
}
},
@ -315,9 +315,7 @@ var XMPP = {
function (error) {
console.log('mute SLD error');
APP.UI.messageHandler.showError("dialog.error",
'Error', "dialog.SLDFailure",
'Oops! Something went wrong and we failed to ' +
'mute! (SLD Failure)');
"dialog.SLDFailure");
}
);
},
@ -329,10 +327,8 @@ var XMPP = {
},
function (error) {
console.log('muteVideo SRD error');
APP.UI.messageHandler.showError("dialog.error", 'Error',
"dialog.SRDFailure",
'Oops! Something went wrong and we failed to stop video!' +
'(SRD Failure)');
APP.UI.messageHandler.showError("dialog.error",
"dialog.SRDFailure");
}
);