Small fixes and code refactoring

This commit is contained in:
RainLoop Team 2015-02-16 01:55:59 +04:00
parent e6c712862d
commit 1a85330770
67 changed files with 413 additions and 181 deletions

View file

@ -138,7 +138,17 @@
return sResult; return sResult;
}; };
HtmlEditor.prototype.modeToggle = function (bPlain) /**
* @param {boolean=} bWrapIsHtml = false
* @param {boolean=} bClearSignatureSigns = false
* @return {string}
*/
HtmlEditor.prototype.getDataWithHtmlMark = function (bWrapIsHtml, bClearSignatureSigns)
{
return (this.isHtml() ? ':HTML:' : '') + this.getData(bWrapIsHtml, bClearSignatureSigns);
};
HtmlEditor.prototype.modeToggle = function (bPlain, bResize)
{ {
if (this.editor) if (this.editor)
{ {
@ -159,7 +169,22 @@
} }
} catch(e) {} } catch(e) {}
this.resize(); if (bResize)
{
this.resize();
}
}
};
HtmlEditor.prototype.setHtmlOrPlain = function (sText, bFocus)
{
if (':HTML:' === sText.substr(0, 6))
{
this.setHtml(sText.substr(6), bFocus);
}
else
{
this.setPlain(sText, bFocus);
} }
}; };
@ -205,7 +230,7 @@
HtmlEditor.prototype.init = function () HtmlEditor.prototype.init = function ()
{ {
if (this.$element && this.$element[0]) if (this.$element && this.$element[0] && !this.editor)
{ {
var var
self = this, self = this,
@ -332,6 +357,16 @@
} }
}; };
HtmlEditor.prototype.setReadOnly = function (bValue)
{
if (this.editor)
{
try {
this.editor.setReadOnly(!!bValue);
} catch (e) {}
}
};
HtmlEditor.prototype.clear = function (bFocus) HtmlEditor.prototype.clear = function (bFocus)
{ {
this.setHtml('', bFocus); this.setHtml('', bFocus);

View file

@ -548,6 +548,7 @@
*/ */
Utils.delegateRun = function (oObject, sMethodName, aParameters, nDelay) Utils.delegateRun = function (oObject, sMethodName, aParameters, nDelay)
{ {
// window.console.log('->' + sMethodName); // TODO
if (oObject && oObject[sMethodName]) if (oObject && oObject[sMethodName])
{ {
nDelay = Utils.pInt(nDelay); nDelay = Utils.pInt(nDelay);

23
dev/External/ko.js vendored
View file

@ -656,9 +656,9 @@
fAllBindings = fAllBindingsAccessor(), fAllBindings = fAllBindingsAccessor(),
fAutoCompleteSource = fAllBindings['autoCompleteSource'] || null, fAutoCompleteSource = fAllBindings['autoCompleteSource'] || null,
fFocusCallback = function (bValue) { fFocusCallback = function (bValue) {
if (fValue && fValue.focusTrigger) if (fValue && fValue.focused)
{ {
fValue.focusTrigger(bValue); fValue.focused(!!bValue);
} }
} }
; ;
@ -693,14 +693,20 @@
fValue(oEvent.target.value); fValue(oEvent.target.value);
}, this) }, this)
}); });
if (fValue && fValue.focused && fValue.focused.subscribe)
{
fValue.focused.subscribe(function (bValue) {
$oEl.inputosaurus(!!bValue ? 'focus' : 'blur');
});
}
}, },
'update': function (oElement, fValueAccessor, fAllBindingsAccessor) { 'update': function (oElement, fValueAccessor) {
var var
$oEl = $(oElement), $oEl = $(oElement),
fAllValueFunc = fAllBindingsAccessor(), fValue = fValueAccessor(),
fEmailsTagsFilter = fAllValueFunc['emailsTagsFilter'] || null, sValue = ko.unwrap(fValue)
sValue = ko.unwrap(fValueAccessor())
; ;
if ($oEl.data('EmailsTagsValue') !== sValue) if ($oEl.data('EmailsTagsValue') !== sValue)
@ -709,11 +715,6 @@
$oEl.data('EmailsTagsValue', sValue); $oEl.data('EmailsTagsValue', sValue);
$oEl.inputosaurus('refresh'); $oEl.inputosaurus('refresh');
} }
if (fEmailsTagsFilter && ko.unwrap(fEmailsTagsFilter))
{
$oEl.inputosaurus('focus');
}
} }
}; };

View file

@ -170,11 +170,20 @@
Globals.popupVisibilityNames.push(this.viewModelName); Globals.popupVisibilityNames.push(this.viewModelName);
oViewModel.viewModelDom.css('z-index', 3000 + Globals.popupVisibilityNames().length + 10); oViewModel.viewModelDom.css('z-index', 3000 + Globals.popupVisibilityNames().length + 10);
Utils.delegateRun(this, 'onFocus', [], 500); // Utils.delegateRun(this, 'onShow'); // moved to showScreenPopup function (for parameters)
if (this.onShowTrigger)
{
this.onShowTrigger(!this.onShowTrigger());
}
Utils.delegateRun(this, 'onShowWithDelay', [], 500);
} }
else else
{ {
Utils.delegateRun(this, 'onHide'); Utils.delegateRun(this, 'onHide');
Utils.delegateRun(this, 'onHideWithDelay', [], 500);
if (this.onHideTrigger) if (this.onHideTrigger)
{ {
this.onHideTrigger(!this.onHideTrigger()); this.onHideTrigger(!this.onHideTrigger());
@ -251,11 +260,8 @@
if (ViewModelClassToShow.__vm && ViewModelClassToShow.__dom) if (ViewModelClassToShow.__vm && ViewModelClassToShow.__dom)
{ {
ViewModelClassToShow.__vm.modalVisibility(true); ViewModelClassToShow.__vm.modalVisibility(true);
Utils.delegateRun(ViewModelClassToShow.__vm, 'onShow', aParameters || []); Utils.delegateRun(ViewModelClassToShow.__vm, 'onShow', aParameters || []);
if (ViewModelClassToShow.__vm.onShowTrigger)
{
ViewModelClassToShow.__vm.onShowTrigger(!ViewModelClassToShow.__vm.onShowTrigger());
}
_.each(ViewModelClassToShow.__names, function (sName) { _.each(ViewModelClassToShow.__names, function (sName) {
Plugins.runHook('view-model-on-show', [sName, ViewModelClassToShow.__vm, aParameters || []]); Plugins.runHook('view-model-on-show', [sName, ViewModelClassToShow.__vm, aParameters || []]);
@ -325,6 +331,7 @@
if (self.oCurrentScreen) if (self.oCurrentScreen)
{ {
Utils.delegateRun(self.oCurrentScreen, 'onHide'); Utils.delegateRun(self.oCurrentScreen, 'onHide');
Utils.delegateRun(self.oCurrentScreen, 'onHideWithDelay', [], 500);
if (self.oCurrentScreen.onHideTrigger) if (self.oCurrentScreen.onHideTrigger)
{ {
@ -340,7 +347,9 @@
{ {
ViewModelClass.__dom.hide(); ViewModelClass.__dom.hide();
ViewModelClass.__vm.viewModelVisibility(false); ViewModelClass.__vm.viewModelVisibility(false);
Utils.delegateRun(ViewModelClass.__vm, 'onHide'); Utils.delegateRun(ViewModelClass.__vm, 'onHide');
Utils.delegateRun(ViewModelClass.__vm, 'onHideWithDelay', [], 500);
if (ViewModelClass.__vm.onHideTrigger) if (ViewModelClass.__vm.onHideTrigger)
{ {
@ -382,7 +391,7 @@
ViewModelClass.__vm.onShowTrigger(!ViewModelClass.__vm.onShowTrigger()); ViewModelClass.__vm.onShowTrigger(!ViewModelClass.__vm.onShowTrigger());
} }
Utils.delegateRun(ViewModelClass.__vm, 'onFocus', [], 200); Utils.delegateRun(ViewModelClass.__vm, 'onShowWithDelay', [], 200);
_.each(ViewModelClass.__names, function (sName) { _.each(ViewModelClass.__names, function (sName) {
Plugins.runHook('view-model-on-show', [sName, ViewModelClass.__vm]); Plugins.runHook('view-model-on-show', [sName, ViewModelClass.__vm]);

View file

@ -133,7 +133,7 @@
{ {
self.oCurrentSubScreen.viewModelDom.show(); self.oCurrentSubScreen.viewModelDom.show();
Utils.delegateRun(self.oCurrentSubScreen, 'onShow'); Utils.delegateRun(self.oCurrentSubScreen, 'onShow');
Utils.delegateRun(self.oCurrentSubScreen, 'onFocus', [], 200); Utils.delegateRun(self.oCurrentSubScreen, 'onShowWithDelay', [], 200);
_.each(self.menu(), function (oItem) { _.each(self.menu(), function (oItem) {
oItem.selected(oSettingsScreen && oSettingsScreen.__rlSettingsData && oItem.route === oSettingsScreen.__rlSettingsData.Route); oItem.selected(oSettingsScreen && oSettingsScreen.__rlSettingsData && oItem.route === oSettingsScreen.__rlSettingsData.Route);

View file

@ -24,15 +24,60 @@
this.secreting = ko.observable(false); this.secreting = ko.observable(false);
this.viewUser = ko.observable(''); this.viewUser = ko.observable('');
this.viewEnable = ko.observable(false);
this.viewEnable.subs = true;
this.twoFactorStatus = ko.observable(false); this.twoFactorStatus = ko.observable(false);
this.twoFactorTested = ko.observable(false);
this.viewSecret = ko.observable(''); this.viewSecret = ko.observable('');
this.viewBackupCodes = ko.observable(''); this.viewBackupCodes = ko.observable('');
this.viewUrl = ko.observable(''); this.viewUrl = ko.observable('');
this.bFirst = true; this.viewEnable_ = ko.observable(false);
this.viewEnable = ko.computed({
'owner': this,
'read': this.viewEnable_,
'write': function (bValue) {
var self = this;
bValue = !!bValue;
if (bValue && this.twoFactorTested())
{
this.viewEnable_(bValue);
Remote.enableTwoFactor(function (sResult, oData) {
if (Enums.StorageResultType.Success !== sResult || !oData || !oData.Result)
{
self.viewEnable_(false);
}
}, true);
}
else
{
if (!bValue)
{
this.viewEnable_(bValue);
}
Remote.enableTwoFactor(function (sResult, oData) {
if (Enums.StorageResultType.Success !== sResult || !oData || !oData.Result)
{
self.viewEnable_(false);
}
}, false);
}
}
});
this.viewTwoFactorEnableTooltip = ko.computed(function () {
Translator.trigger();
return this.twoFactorTested() || this.viewEnable_() ? '' :
Translator.i18n('SETTINGS_SECURITY/TWO_FACTOR_SECRET_TEST_BEFORE_DESC');
}, this);
this.viewTwoFactorStatus = ko.computed(function () { this.viewTwoFactorStatus = ko.computed(function () {
Translator.trigger(); Translator.trigger();
@ -43,14 +88,18 @@
); );
}, this); }, this);
this.twoFactorAllowedEnable = ko.computed(function () {
return this.viewEnable() || this.twoFactorTested();
}, this);
this.onResult = _.bind(this.onResult, this); this.onResult = _.bind(this.onResult, this);
this.onSecretResult = _.bind(this.onSecretResult, this); this.onShowSecretResult = _.bind(this.onShowSecretResult, this);
} }
SecurityUserSettings.prototype.showSecret = function () SecurityUserSettings.prototype.showSecret = function ()
{ {
this.secreting(true); this.secreting(true);
Remote.showTwoFactorSecret(this.onSecretResult); Remote.showTwoFactorSecret(this.onShowSecretResult);
}; };
SecurityUserSettings.prototype.hideSecret = function () SecurityUserSettings.prototype.hideSecret = function ()
@ -68,7 +117,7 @@
SecurityUserSettings.prototype.testTwoFactor = function () SecurityUserSettings.prototype.testTwoFactor = function ()
{ {
require('Knoin/Knoin').showScreenPopup(require('View/Popup/TwoFactorTest')); require('Knoin/Knoin').showScreenPopup(require('View/Popup/TwoFactorTest'), [this.twoFactorTested]);
}; };
SecurityUserSettings.prototype.clearTwoFactor = function () SecurityUserSettings.prototype.clearTwoFactor = function ()
@ -77,6 +126,8 @@
this.viewBackupCodes(''); this.viewBackupCodes('');
this.viewUrl(''); this.viewUrl('');
this.twoFactorTested(false);
this.clearing(true); this.clearing(true);
Remote.clearTwoFactor(this.onResult); Remote.clearTwoFactor(this.onResult);
}; };
@ -96,8 +147,9 @@
if (Enums.StorageResultType.Success === sResult && oData && oData.Result) if (Enums.StorageResultType.Success === sResult && oData && oData.Result)
{ {
this.viewUser(Utils.pString(oData.Result.User)); this.viewUser(Utils.pString(oData.Result.User));
this.viewEnable(!!oData.Result.Enable); this.viewEnable_(!!oData.Result.Enable);
this.twoFactorStatus(!!oData.Result.IsSet); this.twoFactorStatus(!!oData.Result.IsSet);
this.twoFactorTested(!!oData.Result.Tested);
this.viewSecret(Utils.pString(oData.Result.Secret)); this.viewSecret(Utils.pString(oData.Result.Secret));
this.viewBackupCodes(Utils.pString(oData.Result.BackupCodes).replace(/[\s]+/g, ' ')); this.viewBackupCodes(Utils.pString(oData.Result.BackupCodes).replace(/[\s]+/g, ' '));
@ -106,36 +158,17 @@
else else
{ {
this.viewUser(''); this.viewUser('');
this.viewEnable(false); this.viewEnable_(false);
this.twoFactorStatus(false); this.twoFactorStatus(false);
this.twoFactorTested(false);
this.viewSecret(''); this.viewSecret('');
this.viewBackupCodes(''); this.viewBackupCodes('');
this.viewUrl(''); this.viewUrl('');
} }
if (this.bFirst)
{
this.bFirst = false;
var self = this;
this.viewEnable.subscribe(function (bValue) {
if (this.viewEnable.subs)
{
Remote.enableTwoFactor(function (sResult, oData) {
if (Enums.StorageResultType.Success !== sResult || !oData || !oData.Result)
{
self.viewEnable.subs = false;
self.viewEnable(false);
self.viewEnable.subs = true;
}
}, bValue);
}
}, this);
}
}; };
SecurityUserSettings.prototype.onSecretResult = function (sResult, oData) SecurityUserSettings.prototype.onShowSecretResult = function (sResult, oData)
{ {
this.secreting(false); this.secreting(false);

View file

@ -23,7 +23,7 @@
this.buzz = null; this.buzz = null;
this.enableSoundNotification = ko.observable(true); this.enableSoundNotification = ko.observable(false);
this.soundNotificationIsSupported = ko.observable(false); this.soundNotificationIsSupported = ko.observable(false);
this.allowDesktopNotification = ko.observable(false); this.allowDesktopNotification = ko.observable(false);

View file

@ -108,7 +108,8 @@ html.rl-started-trigger.no-mobile .b-login-content .loginFormWrapper {
&.csstransitions .modal.fade { &.csstransitions .modal.fade {
.transition(all 200ms ease-out); .transition(all 200ms ease-out);
transform: scale(0.95); /*transform: scale(0.95);*/
transform: translateY(-20px);
&.in { &.in {
transform: none; transform: none;

View file

@ -303,6 +303,10 @@ html.no-rgba .modal {
top: 0; top: 0;
} }
.modal-backdrop {
.g-ui-user-select-none();
}
.modal.loginContent .modal-body, .modal.loginAdminContent .modal-body { .modal.loginContent .modal-body, .modal.loginAdminContent .modal-body {
background-color: transparent !important; background-color: transparent !important;
} }

View file

@ -154,7 +154,7 @@
margin-left: -2px; margin-left: -2px;
} }
&.white { &.white, &.icon-white {
border-color: #fff; border-color: #fff;
border-top-color: #999; border-top-color: #999;

View file

@ -6,6 +6,7 @@
var var
_ = require('_'), _ = require('_'),
Enums = require('Common/Enums'),
Globals = require('Common/Globals'), Globals = require('Common/Globals'),
kn = require('Knoin/Knoin'), kn = require('Knoin/Knoin'),
@ -37,6 +38,39 @@
return '#/' + sRoute; return '#/' + sRoute;
}; };
MenuSettingsAdminView.prototype.onBuild = function (oDom)
{
key('up, down', _.throttle(function (event, handler) {
var
sH = '',
iIndex = -1,
bUp = handler && 'up' === handler.shortcut,
$items = $('.b-admin-menu .e-item', oDom)
;
if (event && $items.length)
{
iIndex = $items.index($items.filter('.selected'));
if (bUp && iIndex > 0)
{
iIndex--;
}
else if (!bUp && iIndex < $items.length - 1)
{
iIndex++;
}
sH = $items.eq(iIndex).attr('href');
if (sH)
{
kn.setHash(sH, false, true);
}
}
}, 200));
};
module.exports = MenuSettingsAdminView; module.exports = MenuSettingsAdminView;
}()); }());

View file

@ -116,7 +116,7 @@
} }
}; };
AccountPopupView.prototype.onFocus = function () AccountPopupView.prototype.onShowWithDelay = function ()
{ {
this.emailFocus(true); this.emailFocus(true);
}; };

View file

@ -124,7 +124,7 @@
} }
}; };
ActivatePopupView.prototype.onFocus = function () ActivatePopupView.prototype.onShowWithDelay = function ()
{ {
if (!this.activateProcess()) if (!this.activateProcess())
{ {

View file

@ -100,7 +100,7 @@
this.clearPopup(); this.clearPopup();
}; };
AddOpenPgpKeyPopupView.prototype.onFocus = function () AddOpenPgpKeyPopupView.prototype.onShowWithDelay = function ()
{ {
this.key.focus(true); this.key.focus(true);
}; };

View file

@ -148,7 +148,7 @@
this.clearPopup(); this.clearPopup();
}; };
AdvancedSearchPopupView.prototype.onFocus = function () AdvancedSearchPopupView.prototype.onShowWithDelay = function ()
{ {
this.fromFocus(true); this.fromFocus(true);
}; };

View file

@ -106,7 +106,7 @@
this.bFocusYesOnShow = Utils.isUnd(bFocusYesOnShow) ? true : !!bFocusYesOnShow; this.bFocusYesOnShow = Utils.isUnd(bFocusYesOnShow) ? true : !!bFocusYesOnShow;
}; };
AskPopupView.prototype.onFocus = function () AskPopupView.prototype.onShowWithDelay = function ()
{ {
if (this.bFocusYesOnShow) if (this.bFocusYesOnShow)
{ {

View file

@ -80,6 +80,8 @@
this.bFromDraft = false; this.bFromDraft = false;
this.sReferences = ''; this.sReferences = '';
this.sLastFocusedField = 'to';
this.resizerTrigger = _.bind(this.resizerTrigger, this); this.resizerTrigger = _.bind(this.resizerTrigger, this);
this.allowContacts = !!AppStore.contactsIsAllowed(); this.allowContacts = !!AppStore.contactsIsAllowed();
@ -93,10 +95,28 @@
this.identitiesDropdownTrigger = ko.observable(false); this.identitiesDropdownTrigger = ko.observable(false);
this.to = ko.observable(''); this.to = ko.observable('');
this.to.focusTrigger = ko.observable(false); this.to.focused = ko.observable(false);
this.cc = ko.observable(''); this.cc = ko.observable('');
this.cc.focused = ko.observable(false);
this.bcc = ko.observable(''); this.bcc = ko.observable('');
this.bcc.focused = ko.observable(false);
this.replyTo = ko.observable(''); this.replyTo = ko.observable('');
this.replyTo.focused = ko.observable(false);
ko.computed(function () {
switch (true)
{
case this.to.focused():
this.sLastFocusedField = 'to';
break;
case this.cc.focused():
this.sLastFocusedField = 'cc';
break;
case this.bcc.focused():
this.sLastFocusedField = 'bcc';
break;
}
}, this).extend({'notify': 'always'});
this.subject = ko.observable(''); this.subject = ko.observable('');
this.isHtml = ko.observable(false); this.isHtml = ko.observable(false);
@ -411,8 +431,13 @@
{ {
this.skipCommand(); this.skipCommand();
var self = this;
window.console.log(this.sLastFocusedField);
_.delay(function () { _.delay(function () {
kn.showScreenPopup(require('View/Popup/Contacts'), [true]); kn.showScreenPopup(require('View/Popup/Contacts'),
[true, self.sLastFocusedField]);
}, 200); }, 200);
} }
@ -1233,11 +1258,11 @@
this.resizerTrigger(); this.resizerTrigger();
}; };
ComposePopupView.prototype.onFocus = function () ComposePopupView.prototype.onShowWithDelay = function ()
{ {
if ('' === this.to()) if ('' === this.to())
{ {
this.to.focusTrigger(!this.to.focusTrigger()); this.to.focused(true);
} }
else if (this.oEditor) else if (this.oEditor)
{ {

View file

@ -198,12 +198,12 @@
}, this)); }, this));
}; };
ComposeOpenPgpPopupView.prototype.onHide = function () ComposeOpenPgpPopupView.prototype.onHideWithDelay = function ()
{ {
this.clearPopup(); this.clearPopup();
}; };
ComposeOpenPgpPopupView.prototype.onFocus = function () ComposeOpenPgpPopupView.prototype.onShowWithDelay = function ()
{ {
if (this.sign()) if (this.sign())
{ {

View file

@ -50,6 +50,7 @@
; ;
this.bBackToCompose = false; this.bBackToCompose = false;
this.sLastComposeFocusedField = '';
this.allowContactsSync = Data.allowContactsSync; this.allowContactsSync = Data.allowContactsSync;
this.enableContactsSync = Data.enableContactsSync; this.enableContactsSync = Data.enableContactsSync;
@ -236,7 +237,15 @@
}); });
this.newMessageCommand = Utils.createCommand(this, function () { this.newMessageCommand = Utils.createCommand(this, function () {
var aC = this.contactsCheckedOrSelected(), aE = []; var
aE = [],
aC = this.contactsCheckedOrSelected(),
aToEmails = null,
aCcEmails = null,
aBccEmails = null,
aReplyToEmails = null
;
if (Utils.isNonEmptyArray(aC)) if (Utils.isNonEmptyArray(aC))
{ {
aE = _.map(aC, function (oItem) { aE = _.map(aC, function (oItem) {
@ -265,8 +274,25 @@
kn.hideScreenPopup(require('View/Popup/Contacts')); kn.hideScreenPopup(require('View/Popup/Contacts'));
switch (self.sLastComposeFocusedField)
{
default:
case 'to':
aToEmails = aE;
break;
case 'cc':
aCcEmails = aE;
break;
case 'bcc':
aBccEmails = aE;
break;
}
self.sLastComposeFocusedField = '';
_.delay(function () { _.delay(function () {
kn.showScreenPopup(require('View/Popup/Compose'), [Enums.ComposeType.Empty, null, aE]); kn.showScreenPopup(require('View/Popup/Compose'),
[Enums.ComposeType.Empty, null, aToEmails, aCcEmails, aBccEmails]);
}, 200); }, 200);
} }
@ -721,9 +747,10 @@
this.initUploader(); this.initUploader();
}; };
ContactsPopupView.prototype.onShow = function (bBackToCompose) ContactsPopupView.prototype.onShow = function (bBackToCompose, sLastComposeFocusedField)
{ {
this.bBackToCompose = Utils.isUnd(bBackToCompose) ? false : !!bBackToCompose; this.bBackToCompose = Utils.isUnd(bBackToCompose) ? false : !!bBackToCompose;
this.sLastComposeFocusedField = Utils.isUnd(sLastComposeFocusedField) ? '' : sLastComposeFocusedField;
kn.routeOff(); kn.routeOff();
this.reloadContactList(true); this.reloadContactList(true);
@ -732,6 +759,7 @@
ContactsPopupView.prototype.onHide = function () ContactsPopupView.prototype.onHide = function ()
{ {
kn.routeOn(); kn.routeOn();
this.currentContact(null); this.currentContact(null);
this.emptySelection(true); this.emptySelection(true);
this.search(''); this.search('');
@ -740,6 +768,8 @@
Utils.delegateRunOnDestroy(this.contacts()); Utils.delegateRunOnDestroy(this.contacts());
this.contacts([]); this.contacts([]);
this.sLastComposeFocusedField = '';
if (this.bBackToCompose) if (this.bBackToCompose)
{ {
this.bBackToCompose = false; this.bBackToCompose = false;

View file

@ -410,7 +410,7 @@
} }
}; };
DomainPopupView.prototype.onFocus = function () DomainPopupView.prototype.onShowWithDelay = function ()
{ {
if ('' === this.name()) if ('' === this.name())
{ {

View file

@ -184,7 +184,7 @@
} }
}; };
FilterPopupView.prototype.onFocus = function () FilterPopupView.prototype.onShowWithDelay = function ()
{ {
if (this.isNew() && this.filter()) if (this.isNew() && this.filter())
{ {

View file

@ -123,7 +123,7 @@
this.clearPopup(); this.clearPopup();
}; };
FolderCreateView.prototype.onFocus = function () FolderCreateView.prototype.onShowWithDelay = function ()
{ {
this.folderName.focused(true); this.folderName.focused(true);
}; };

View file

@ -164,6 +164,31 @@
} }
}; };
IdentityPopupView.prototype.populateSignatureFromEditor = function ()
{
if (this.editor)
{
this.signature(this.editor.getDataWithHtmlMark());
}
};
IdentityPopupView.prototype.editorSetSignature = function (sSignature)
{
if (!this.editor && this.signatureDom())
{
var self = this;
this.editor = new HtmlEditor(self.signatureDom(), function () {
self.populateSignatureFromEditor();
}, function () {
self.editor.setHtmlOrPlain(sSignature);
});
}
else
{
this.editor.setHtmlOrPlain(sSignature);
}
};
/** /**
* @param {?IdentityModel} oIdentity * @param {?IdentityModel} oIdentity
*/ */
@ -189,60 +214,23 @@
{ {
this.id = Utils.fakeMd5(); this.id = Utils.fakeMd5();
} }
this.editorSetSignature(this.signature());
}; };
IdentityPopupView.prototype.onHide = function () IdentityPopupView.prototype.onShowWithDelay = function ()
{ {
this.clearPopup();
};
IdentityPopupView.prototype.setSignature = function (sSignature)
{
if (this.editor)
{
if (':HTML:' === sSignature.substr(0, 6))
{
this.editor.setHtml(sSignature.substr(6), false);
}
else
{
this.editor.setPlain(sSignature, false);
}
}
};
IdentityPopupView.prototype.populateSignatureFromEditor = function ()
{
if (this.editor)
{
this.signature(
(this.editor.isHtml() ? ':HTML:' : '') + this.editor.getData()
);
}
};
IdentityPopupView.prototype.onFocus = function ()
{
if (!this.editor && this.signatureDom())
{
var self = this;
this.editor = new HtmlEditor(self.signatureDom(), function () {
self.populateSignatureFromEditor();
}, function () {
self.setSignature(self.signature());
});
}
else
{
this.setSignature(this.signature());
}
if (!this.owner()) if (!this.owner())
{ {
this.email.focused(true); this.email.focused(true);
} }
}; };
IdentityPopupView.prototype.onHideWithDelay = function ()
{
this.clearPopup();
};
module.exports = IdentityPopupView; module.exports = IdentityPopupView;
}()); }());

View file

@ -104,7 +104,7 @@
this.clearPopup(); this.clearPopup();
}; };
NewOpenPgpKeyPopupView.prototype.onFocus = function () NewOpenPgpKeyPopupView.prototype.onShowWithDelay = function ()
{ {
this.email.focus(true); this.email.focus(true);
}; };

View file

@ -115,22 +115,8 @@
if (this.editor) if (this.editor)
{ {
this.setBody(''); this.editor.setPlain('', false);
} this.editor.setReadOnly(true);
};
TemplatePopupView.prototype.setBody = function (sBody)
{
if (this.editor)
{
if (':HTML:' === sBody.substr(0, 6))
{
this.editor.setHtml(sBody.substr(6), false);
}
else
{
this.editor.setPlain(sBody, false);
}
} }
}; };
@ -138,9 +124,7 @@
{ {
if (this.editor) if (this.editor)
{ {
this.body( this.body(this.editor.getDataWithHtmlMark());
(this.editor.isHtml() ? ':HTML:' : '') + this.editor.getData()
);
} }
}; };
@ -152,12 +136,12 @@
this.editor = new HtmlEditor(self.signatureDom(), function () { this.editor = new HtmlEditor(self.signatureDom(), function () {
self.populateBodyFromEditor(); self.populateBodyFromEditor();
}, function () { }, function () {
self.setBody(sBody); self.editor.setHtmlOrPlain(sBody);
}); });
} }
else else
{ {
this.setBody(sBody); this.editor.setHtmlOrPlain(sBody);
} }
}; };
@ -212,7 +196,7 @@
} }
}; };
TemplatePopupView.prototype.onFocus = function () TemplatePopupView.prototype.onShowWithDelay = function ()
{ {
this.name.focus(true); this.name.focus(true);
}; };

View file

@ -30,6 +30,8 @@
this.code.focused = ko.observable(false); this.code.focused = ko.observable(false);
this.code.status = ko.observable(null); this.code.status = ko.observable(null);
this.koTestedTrigger = null;
this.testing = ko.observable(false); this.testing = ko.observable(false);
// commands // commands
@ -41,6 +43,11 @@
self.testing(false); self.testing(false);
self.code.status(Enums.StorageResultType.Success === sResult && oData && oData.Result ? true : false); self.code.status(Enums.StorageResultType.Success === sResult && oData && oData.Result ? true : false);
if (self.koTestedTrigger && self.code.status())
{
self.koTestedTrigger(true);
}
}, this.code()); }, this.code());
}, function () { }, function () {
@ -59,14 +66,18 @@
this.code.focused(false); this.code.focused(false);
this.code.status(null); this.code.status(null);
this.testing(false); this.testing(false);
this.koTestedTrigger = null;
}; };
TwoFactorTestPopupView.prototype.onShow = function () TwoFactorTestPopupView.prototype.onShow = function (koTestedTrigger)
{ {
this.clearPopup(); this.clearPopup();
this.koTestedTrigger = koTestedTrigger;
}; };
TwoFactorTestPopupView.prototype.onFocus = function () TwoFactorTestPopupView.prototype.onShowWithDelay = function ()
{ {
this.code.focused(true); this.code.focused(true);
}; };

View file

@ -252,10 +252,19 @@
this.selector.scrollToTop(); this.selector.scrollToTop();
}, this); }, this);
Data.messageListEndFolder.subscribe(function (sFolder) {
var oMessage = Data.message();
if (oMessage && sFolder && sFolder !== oMessage.folderFullNameRaw)
{
Data.message(null);
}
}, this);
SettingsStore.layout.subscribe(function (mValue) { SettingsStore.layout.subscribe(function (mValue) {
this.selector.autoSelect(Enums.Layout.NoPreview !== mValue); this.selector.autoSelect(Enums.Layout.NoPreview !== mValue);
}, this); }, this);
SettingsStore.layout.valueHasMutated(); SettingsStore.layout.valueHasMutated();
Events Events

View file

@ -5,7 +5,9 @@
var var
_ = require('_'), _ = require('_'),
key = require('key'),
Enums = require('Common/Enums'),
Globals = require('Common/Globals'), Globals = require('Common/Globals'),
Links = require('Common/Links'), Links = require('Common/Links'),
@ -35,6 +37,44 @@
kn.extendAsViewModel(['View/User/Settings/Menu', 'View/App/Settings/Menu', 'SettingsMenuViewModel'], MenuSettingsUserView); kn.extendAsViewModel(['View/User/Settings/Menu', 'View/App/Settings/Menu', 'SettingsMenuViewModel'], MenuSettingsUserView);
_.extend(MenuSettingsUserView.prototype, AbstractView.prototype); _.extend(MenuSettingsUserView.prototype, AbstractView.prototype);
MenuSettingsUserView.prototype.onBuild = function (oDom)
{
// var self = this;
// key('esc', Enums.KeyState.Settings, function () {
// self.backToMailBoxClick();
// });
key('up, down', Enums.KeyState.Settings, _.throttle(function (event, handler) {
var
sH = '',
iIndex = -1,
bUp = handler && 'up' === handler.shortcut,
$items = $('.b-settings-menu .e-item', oDom)
;
if (event && $items.length)
{
iIndex = $items.index($items.filter('.selected'));
if (bUp && iIndex > 0)
{
iIndex--;
}
else if (!bUp && iIndex < $items.length - 1)
{
iIndex++;
}
sH = $items.eq(iIndex).attr('href');
if (sH)
{
kn.setHash(sH, false, true);
}
}
}, 200));
};
MenuSettingsUserView.prototype.link = function (sRoute) MenuSettingsUserView.prototype.link = function (sRoute)
{ {
return Links.settings(sRoute); return Links.settings(sRoute);

View file

@ -5,9 +5,7 @@
var var
_ = require('_'), _ = require('_'),
key = require('key'),
Enums = require('Common/Enums'),
Links = require('Common/Links'), Links = require('Common/Links'),
Data = require('Storage/User/Data'), Data = require('Storage/User/Data'),
@ -31,14 +29,6 @@
kn.extendAsViewModel(['View/User/Settings/Pane', 'View/App/Settings/Pane', 'SettingsPaneViewModel'], PaneSettingsUserView); kn.extendAsViewModel(['View/User/Settings/Pane', 'View/App/Settings/Pane', 'SettingsPaneViewModel'], PaneSettingsUserView);
_.extend(PaneSettingsUserView.prototype, AbstractView.prototype); _.extend(PaneSettingsUserView.prototype, AbstractView.prototype);
PaneSettingsUserView.prototype.onBuild = function ()
{
var self = this;
key('esc', Enums.KeyState.Settings, function () {
self.backToMailBoxClick();
});
};
PaneSettingsUserView.prototype.onShow = function () PaneSettingsUserView.prototype.onShow = function ()
{ {
Data.message(null); Data.message(null);

View file

@ -420,6 +420,7 @@ gulp.task('ckeditor', ['ckeditor:copy-plugins'], function () {
return gulp.src('rainloop/v/' + cfg.devVersion + '/static/ckeditor/*.js') return gulp.src('rainloop/v/' + cfg.devVersion + '/static/ckeditor/*.js')
.pipe(stripbom()) .pipe(stripbom())
// .pipe(replace("\u200B", "\\u200B")) // .pipe(replace("\u200B", "\\u200B"))
.pipe(replace('console.log("Detecting changes using MutationObservers")', 'true'))
.pipe(header("\uFEFF")) // BOM .pipe(header("\uFEFF")) // BOM
.pipe(gulp.dest('rainloop/v/' + cfg.devVersion + '/static/ckeditor')); .pipe(gulp.dest('rainloop/v/' + cfg.devVersion + '/static/ckeditor'));
}); });

View file

@ -2,7 +2,7 @@
"name": "RainLoop", "name": "RainLoop",
"title": "RainLoop Webmail", "title": "RainLoop Webmail",
"version": "1.8.1", "version": "1.8.1",
"release": "258", "release": "259",
"description": "Simple, modern & fast web-based email client", "description": "Simple, modern & fast web-based email client",
"homepage": "http://rainloop.net", "homepage": "http://rainloop.net",
"main": "gulpfile.js", "main": "gulpfile.js",

View file

@ -1288,6 +1288,7 @@ class Actions
'AllowAppendMessage' => (bool) $oConfig->Get('labs', 'allow_message_append', false), 'AllowAppendMessage' => (bool) $oConfig->Get('labs', 'allow_message_append', false),
'MaterialDesign' => (bool) $oConfig->Get('labs', 'use_material_design', true), 'MaterialDesign' => (bool) $oConfig->Get('labs', 'use_material_design', true),
'PremType' => $this->PremType(), 'PremType' => $this->PremType(),
'Admin' => array(),
'Capa' => array(), 'Capa' => array(),
'Plugins' => array() 'Plugins' => array()
); );
@ -6420,10 +6421,10 @@ class Actions
$aData = $this->getTwoFactorInfo($oAccount); $aData = $this->getTwoFactorInfo($oAccount);
$sSecret = !empty($aData['Secret']) ? $aData['Secret'] : ''; $sSecret = !empty($aData['Secret']) ? $aData['Secret'] : '';
$this->Logger()->WriteDump(array( // $this->Logger()->WriteDump(array(
$sCode, $sSecret, $aData, // $sCode, $sSecret, $aData,
$this->TwoFactorAuthProvider()->VerifyCode($sSecret, $sCode) // $this->TwoFactorAuthProvider()->VerifyCode($sSecret, $sCode)
)); // ));
\sleep(1); \sleep(1);
return $this->DefaultResponse(__FUNCTION__, return $this->DefaultResponse(__FUNCTION__,

View file

@ -14,7 +14,12 @@
</div> </div>
<div class="span6 rl-desc"> <div class="span6 rl-desc">
<h1 style="margin-bottom: 0;">RainLoop</h1> <h1 style="margin-bottom: 0;">RainLoop</h1>
<h4 style="margin-top: 0;"><span data-bind="text: version"></span></h4> <h4 style="margin-top: 0;">
<span data-bind="text: version"></span>
<span data-bind="visible: 'stable' !== coreType()" style="padding-left: 3px; color: red; font-weight: normal">
(<span data-bind="text: coreType"></span> channel)
</span>
</h4>
<h4 style="color: #aaa; font-weight: normal;">Simple, modern & fast web-based email client</h4> <h4 style="color: #aaa; font-weight: normal;">Simple, modern & fast web-based email client</h4>
<h5 style="font-weight: normal; margin-top: 40px;"> <h5 style="font-weight: normal; margin-top: 40px;">
<div data-bind="visible: 'error' === statusType()"> <div data-bind="visible: 'error' === statusType()">
@ -27,9 +32,6 @@
&nbsp;&nbsp; &nbsp;&nbsp;
New New
<b data-bind="text: coreRemoteVersion"></b> <b data-bind="text: coreRemoteVersion"></b>
<span data-bind="visible: 'stable' !== coreType()" style="color:red">
(<span data-bind="text: coreType"></span>)
</span>
version is available. version is available.
<span data-bind="visible: '' !== coreRemoteRelease()"> <span data-bind="visible: '' !== coreRemoteRelease()">
(<span data-bind="text: coreRemoteRelease"></span>) (<span data-bind="text: coreRemoteRelease"></span>)

View file

@ -106,7 +106,7 @@
</label> </label>
</div> </div>
<div class="e-cell e-value"> <div class="e-cell e-value">
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" data-bind="emailsTags: to, emailsTagsFilter: to.focusTrigger, autoCompleteSource: emailsSource" /> <input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" data-bind="emailsTags: to, emailsTagsFocus: to.focused, autoCompleteSource: emailsSource" />
<span class="help-block error-desc" data-bind="visible: emptyToError"> <span class="help-block error-desc" data-bind="visible: emptyToError">
<span class="i18n" data-i18n-text="COMPOSE/EMPTY_TO_ERROR_DESC"></span> <span class="i18n" data-i18n-text="COMPOSE/EMPTY_TO_ERROR_DESC"></span>
</span> </span>

View file

@ -1,7 +1,7 @@
<div class="popups"> <div class="popups">
<div class="modal hide b-identity-content g-ui-user-select-none" data-bind="modal: modalVisibility"> <div class="modal hide b-identity-content" data-bind="modal: modalVisibility">
<div> <div>
<div class="modal-header"> <div class="modal-header g-ui-user-select-none">
<button type="button" class="close" data-bind="command: cancelCommand">&times;</button> <button type="button" class="close" data-bind="command: cancelCommand">&times;</button>
<h3> <h3>
<span data-bind="visible: !edit()" class="i18n" data-i18n-text="POPUPS_IDENTITY/TITLE_ADD_IDENTITY"></span> <span data-bind="visible: !edit()" class="i18n" data-i18n-text="POPUPS_IDENTITY/TITLE_ADD_IDENTITY"></span>
@ -9,7 +9,7 @@
</h3> </h3>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<div class="form-horizontal"> <div class="form-horizontal g-ui-user-select-none">
<div class="alert" data-bind="visible: '' !== submitError()"> <div class="alert" data-bind="visible: '' !== submitError()">
<button type="button" class="close" data-bind="click: function () { submitError('') }">&times;</button> <button type="button" class="close" data-bind="click: function () { submitError('') }">&times;</button>
<span data-bind="text: submitError"></span> <span data-bind="text: submitError"></span>
@ -66,8 +66,10 @@
</span> </span>
</div> </div>
</div> </div>
<hr /> </div>
<div class="control-group"> <hr />
<div class="form-horizontal">
<div class="control-group g-ui-user-select-none">
<div class="controls"> <div class="controls">
<div data-bind="component: { <div data-bind="component: {
name: 'Checkbox', name: 'Checkbox',

View file

@ -1,7 +1,7 @@
<div class="popups"> <div class="popups">
<div class="modal hide b-template-add-content g-ui-user-select-none" data-bind="modal: modalVisibility"> <div class="modal hide b-template-add-content" data-bind="modal: modalVisibility">
<div> <div>
<div class="modal-header"> <div class="modal-header g-ui-user-select-none">
<button type="button" class="close" data-bind="command: cancelCommand">&times;</button> <button type="button" class="close" data-bind="command: cancelCommand">&times;</button>
<h3> <h3>
<span data-bind="visible: '' === id()" class="i18n" data-i18n-text="POPUPS_ADD_TEMPLATE/TITLE_ADD_TEMPLATE"></span> <span data-bind="visible: '' === id()" class="i18n" data-i18n-text="POPUPS_ADD_TEMPLATE/TITLE_ADD_TEMPLATE"></span>
@ -9,7 +9,7 @@
</h3> </h3>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<div class="form-horizontal"> <div class="form-horizontal g-ui-user-select-none">
<div class="alert" data-bind="visible: '' !== submitError()"> <div class="alert" data-bind="visible: '' !== submitError()">
<button type="button" class="close" data-bind="click: function () { submitError('') }">&times;</button> <button type="button" class="close" data-bind="click: function () { submitError('') }">&times;</button>
<span data-bind="text: submitError"></span> <span data-bind="text: submitError"></span>
@ -22,7 +22,9 @@
data-bind="textInput: name, onEnter: addTemplateCommand, hasfocus: name.focus" /> data-bind="textInput: name, onEnter: addTemplateCommand, hasfocus: name.focus" />
</div> </div>
</div> </div>
<hr /> </div>
<hr />
<div class="form-horizontal">
<div class="control-group" data-bind="css: {'error': body.error}"> <div class="control-group" data-bind="css: {'error': body.error}">
<div class="e-template-place" data-bind="initDom: signatureDom"></div> <div class="e-template-place" data-bind="initDom: signatureDom"></div>
</div> </div>

View file

@ -1,5 +1,5 @@
<div class="b-settings b-settins-right"> <div class="b-settings b-settins-right">
<div class="b-toolbar"> <div class="b-toolbar" style="padding-left: 0">
<div class="btn-toolbar"> <div class="btn-toolbar">
<a class="btn button-back" data-bind="click: backToMailBoxClick"> <a class="btn button-back" data-bind="click: backToMailBoxClick">
<i class="icon-left"></i> <i class="icon-left"></i>

View file

@ -3,12 +3,13 @@
<div class="legend"> <div class="legend">
<span class="i18n" data-i18n-text="SETTINGS_SECURITY/LEGEND_TWO_FACTOR_AUTH"></span> <span class="i18n" data-i18n-text="SETTINGS_SECURITY/LEGEND_TWO_FACTOR_AUTH"></span>
</div> </div>
<div class="control-group"> <div class="control-group" data-bind="visible: twoFactorStatus">
<div class="controls"> <div class="controls" style="display: inline-block" data-bind="tooltip: viewTwoFactorEnableTooltip">
<div data-bind="component: { <div data-bind="component: {
name: 'Checkbox', name: 'Checkbox',
params: { params: {
label: 'SETTINGS_SECURITY/LABEL_ENABLE_TWO_FACTOR', label: 'SETTINGS_SECURITY/LABEL_ENABLE_TWO_FACTOR',
enable: twoFactorAllowedEnable,
value: viewEnable value: viewEnable
} }
}"></div> }"></div>
@ -29,8 +30,7 @@
&nbsp;&nbsp; &nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_SECURITY/BUTTON_CLEAR"></span> <span class="i18n" data-i18n-text="SETTINGS_SECURITY/BUTTON_CLEAR"></span>
</a> </a>
<span data-bind="visible: twoFactorStatus">&nbsp;&nbsp;</span> <a class="btn" data-bind="click: createTwoFactor, visible: !twoFactorStatus()">
<a class="btn" data-bind="click: createTwoFactor">
<i class="icon-ok" data-bind="css: {'icon-ok': !processing(), 'icon-spinner animated': processing()}" ></i> <i class="icon-ok" data-bind="css: {'icon-ok': !processing(), 'icon-spinner animated': processing()}" ></i>
&nbsp;&nbsp; &nbsp;&nbsp;
<span class="i18n" data-i18n-text="SETTINGS_SECURITY/BUTTON_CREATE"></span> <span class="i18n" data-i18n-text="SETTINGS_SECURITY/BUTTON_CREATE"></span>

View file

@ -450,6 +450,7 @@ TWO_FACTOR_SECRET_CONFIGURED_DESC = "Configured"
TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Not configured" TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Not configured"
TWO_FACTOR_SECRET_DESC = "Import this info into your Google Authenticator client (or other TOTP client) using the provided QR code below or by entering the code manually." TWO_FACTOR_SECRET_DESC = "Import this info into your Google Authenticator client (or other TOTP client) using the provided QR code below or by entering the code manually."
TWO_FACTOR_BACKUP_CODES_DESC = "If you can't receive codes via Google Authenticator, you can use backup codes to sign in. After youve used a backup code to sign in, it will become inactive." TWO_FACTOR_BACKUP_CODES_DESC = "If you can't receive codes via Google Authenticator, you can use backup codes to sign in. After youve used a backup code to sign in, it will become inactive."
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "You can't change this setting before test."
[SETTINGS_GENERAL] [SETTINGS_GENERAL]
LEGEND_GENERAL = "Общи" LEGEND_GENERAL = "Общи"

View file

@ -450,6 +450,7 @@ TWO_FACTOR_SECRET_CONFIGURED_DESC = "Konfiguriert"
TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Nicht konfiguriert" TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Nicht konfiguriert"
TWO_FACTOR_SECRET_DESC = "Importieren Sie diese Informationen in Ihren Google Authenticator-Client (oder andere TOTP-Clienten) mit Hilfe des mitgelieferten QR-Code unten oder durch manuelle Eingabe des Codes." TWO_FACTOR_SECRET_DESC = "Importieren Sie diese Informationen in Ihren Google Authenticator-Client (oder andere TOTP-Clienten) mit Hilfe des mitgelieferten QR-Code unten oder durch manuelle Eingabe des Codes."
TWO_FACTOR_BACKUP_CODES_DESC = "Wenn Sie keine Codes via Google Authenticator erhalten können, können Sie Backup-Codes für die Anmeldung verwenden. Nachdem Sie einen Backup-Code verwendet haben, um sich anzumelden, wird dieser inaktiv." TWO_FACTOR_BACKUP_CODES_DESC = "Wenn Sie keine Codes via Google Authenticator erhalten können, können Sie Backup-Codes für die Anmeldung verwenden. Nachdem Sie einen Backup-Code verwendet haben, um sich anzumelden, wird dieser inaktiv."
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "You can't change this setting before test."
[SETTINGS_GENERAL] [SETTINGS_GENERAL]
LEGEND_GENERAL = "Allgemein" LEGEND_GENERAL = "Allgemein"

View file

@ -435,13 +435,13 @@ LABEL_SIGNATURE = "Signature"
LABEL_ADD_SIGNATURE_TO_ALL = "Add your signature to all the outgoing messages" LABEL_ADD_SIGNATURE_TO_ALL = "Add your signature to all the outgoing messages"
[SETTINGS_SECURITY] [SETTINGS_SECURITY]
LEGEND_TWO_FACTOR_AUTH = "2-Step Verification" LEGEND_TWO_FACTOR_AUTH = "2-Step Verification (TOTP)"
LABEL_ENABLE_TWO_FACTOR = "Enable 2-Step verification" LABEL_ENABLE_TWO_FACTOR = "Enable 2-Step verification"
LABEL_TWO_FACTOR_USER = "User" LABEL_TWO_FACTOR_USER = "User"
LABEL_TWO_FACTOR_STATUS = "Status" LABEL_TWO_FACTOR_STATUS = "Status"
LABEL_TWO_FACTOR_SECRET = "Secret" LABEL_TWO_FACTOR_SECRET = "Secret"
LABEL_TWO_FACTOR_BACKUP_CODES = "Backup codes" LABEL_TWO_FACTOR_BACKUP_CODES = "Backup codes"
BUTTON_CREATE = "Create New Secret" BUTTON_CREATE = "Create a secret"
BUTTON_CLEAR = "Clear" BUTTON_CLEAR = "Clear"
BUTTON_TEST = "Test" BUTTON_TEST = "Test"
BUTTON_SHOW_SECRET = "Show Secret" BUTTON_SHOW_SECRET = "Show Secret"
@ -449,7 +449,8 @@ BUTTON_HIDE_SECRET = "Hide Secret"
TWO_FACTOR_SECRET_CONFIGURED_DESC = "Configured" TWO_FACTOR_SECRET_CONFIGURED_DESC = "Configured"
TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Not configured" TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Not configured"
TWO_FACTOR_SECRET_DESC = "Import this info into your Google Authenticator client (or other TOTP client) using the provided QR code below or by entering the code manually." TWO_FACTOR_SECRET_DESC = "Import this info into your Google Authenticator client (or other TOTP client) using the provided QR code below or by entering the code manually."
TWO_FACTOR_BACKUP_CODES_DESC = "If you can't receive codes via Google Authenticator, you can use backup codes to sign in. After youve used a backup code to sign in, it will become inactive." TWO_FACTOR_BACKUP_CODES_DESC = "If you can't receive codes via Google Authenticator (or other TOTP client), you can use backup codes to sign in. After youve used a backup code to sign in, it will become inactive."
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "You can't change this setting before test."
[SETTINGS_GENERAL] [SETTINGS_GENERAL]
LEGEND_GENERAL = "General" LEGEND_GENERAL = "General"

View file

@ -450,6 +450,7 @@ TWO_FACTOR_SECRET_CONFIGURED_DESC = "Configurado"
TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "No configurado" TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "No configurado"
TWO_FACTOR_SECRET_DESC = "Importar esta información en su cliente Google Authenticator (u otro cliente TOTP) utilizando el código QR se indica debajo o introduciendo el código manualmente." TWO_FACTOR_SECRET_DESC = "Importar esta información en su cliente Google Authenticator (u otro cliente TOTP) utilizando el código QR se indica debajo o introduciendo el código manualmente."
TWO_FACTOR_BACKUP_CODES_DESC = "Si usted no puede recibir los códigos a través de Google Authenticator, puede utilizar códigos de copia de seguridad para firmar pulg Después de que usted ha utilizado un código de copia de seguridad para iniciar sesión, se convertirá en inactiva." TWO_FACTOR_BACKUP_CODES_DESC = "Si usted no puede recibir los códigos a través de Google Authenticator, puede utilizar códigos de copia de seguridad para firmar pulg Después de que usted ha utilizado un código de copia de seguridad para iniciar sesión, se convertirá en inactiva."
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "You can't change this setting before test."
[SETTINGS_GENERAL] [SETTINGS_GENERAL]
LEGEND_GENERAL = "General" LEGEND_GENERAL = "General"

View file

@ -450,6 +450,7 @@ TWO_FACTOR_SECRET_CONFIGURED_DESC = "Configurer"
TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Non configuré" TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Non configuré"
TWO_FACTOR_SECRET_DESC = "Importez ces informations dans votre client Google Authenticator (ou un autre client TOTP) en utilisant le code QR fourni ci-dessous ou en entrant les valeurs manuellement." TWO_FACTOR_SECRET_DESC = "Importez ces informations dans votre client Google Authenticator (ou un autre client TOTP) en utilisant le code QR fourni ci-dessous ou en entrant les valeurs manuellement."
TWO_FACTOR_BACKUP_CODES_DESC = "Si vous ne pouvez pas recevoir les codes par Google Authenticator, vous pouvez utiliser les codes de sauvegarde pour vous connecter. Après avoir fait cela, il deviendra inactif." TWO_FACTOR_BACKUP_CODES_DESC = "Si vous ne pouvez pas recevoir les codes par Google Authenticator, vous pouvez utiliser les codes de sauvegarde pour vous connecter. Après avoir fait cela, il deviendra inactif."
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "You can't change this setting before test."
[SETTINGS_GENERAL] [SETTINGS_GENERAL]
LEGEND_GENERAL = "Général" LEGEND_GENERAL = "Général"

View file

@ -450,6 +450,7 @@ TWO_FACTOR_SECRET_CONFIGURED_DESC = "Configured"
TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Not configured" TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Not configured"
TWO_FACTOR_SECRET_DESC = "Import this info into your Google Authenticator client (or other TOTP client) using the provided QR code below or by entering the code manually." TWO_FACTOR_SECRET_DESC = "Import this info into your Google Authenticator client (or other TOTP client) using the provided QR code below or by entering the code manually."
TWO_FACTOR_BACKUP_CODES_DESC = "If you can't receive codes via Google Authenticator, you can use backup codes to sign in. After youve used a backup code to sign in, it will become inactive." TWO_FACTOR_BACKUP_CODES_DESC = "If you can't receive codes via Google Authenticator, you can use backup codes to sign in. After youve used a backup code to sign in, it will become inactive."
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "You can't change this setting before test."
[SETTINGS_GENERAL] [SETTINGS_GENERAL]
LEGEND_GENERAL = "General" LEGEND_GENERAL = "General"

View file

@ -450,6 +450,7 @@ TWO_FACTOR_SECRET_CONFIGURED_DESC = "Configured"
TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Not configured" TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Not configured"
TWO_FACTOR_SECRET_DESC = "Import this info into your Google Authenticator client (or other TOTP client) using the provided QR code below or by entering the code manually." TWO_FACTOR_SECRET_DESC = "Import this info into your Google Authenticator client (or other TOTP client) using the provided QR code below or by entering the code manually."
TWO_FACTOR_BACKUP_CODES_DESC = "If you can't receive codes via Google Authenticator, you can use backup codes to sign in. After youve used a backup code to sign in, it will become inactive." TWO_FACTOR_BACKUP_CODES_DESC = "If you can't receive codes via Google Authenticator, you can use backup codes to sign in. After youve used a backup code to sign in, it will become inactive."
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "You can't change this setting before test."
[SETTINGS_GENERAL] [SETTINGS_GENERAL]
LEGEND_GENERAL = "Almennt" LEGEND_GENERAL = "Almennt"

View file

@ -450,6 +450,7 @@ TWO_FACTOR_SECRET_CONFIGURED_DESC = "Configurato"
TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Non configurato" TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Non configurato"
TWO_FACTOR_SECRET_DESC = "Importa questo codice nel tuo client di Google Authenticator (o un altro client TOTP) usando il codice QR presente sotto o inserendo il codice manualmente." TWO_FACTOR_SECRET_DESC = "Importa questo codice nel tuo client di Google Authenticator (o un altro client TOTP) usando il codice QR presente sotto o inserendo il codice manualmente."
TWO_FACTOR_BACKUP_CODES_DESC = "Se non puoi ricevere codici da Google Authenticator, puoi usare i codici di riserva per entrare. Dopo aver usato un codice di riserva per entrare, esso si disattiverà." TWO_FACTOR_BACKUP_CODES_DESC = "Se non puoi ricevere codici da Google Authenticator, puoi usare i codici di riserva per entrare. Dopo aver usato un codice di riserva per entrare, esso si disattiverà."
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "You can't change this setting before test."
[SETTINGS_GENERAL] [SETTINGS_GENERAL]
LEGEND_GENERAL = "Generali" LEGEND_GENERAL = "Generali"

View file

@ -450,6 +450,7 @@ TWO_FACTOR_SECRET_CONFIGURED_DESC = "Configured"
TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Not configured" TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Not configured"
TWO_FACTOR_SECRET_DESC = "Import this info into your Google Authenticator client (or other TOTP client) using the provided QR code below or by entering the code manually." TWO_FACTOR_SECRET_DESC = "Import this info into your Google Authenticator client (or other TOTP client) using the provided QR code below or by entering the code manually."
TWO_FACTOR_BACKUP_CODES_DESC = "If you can't receive codes via Google Authenticator, you can use backup codes to sign in. After youve used a backup code to sign in, it will become inactive." TWO_FACTOR_BACKUP_CODES_DESC = "If you can't receive codes via Google Authenticator, you can use backup codes to sign in. After youve used a backup code to sign in, it will become inactive."
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "You can't change this setting before test."
[SETTINGS_GENERAL] [SETTINGS_GENERAL]
LEGEND_GENERAL = "全般" LEGEND_GENERAL = "全般"

View file

@ -447,6 +447,7 @@ TWO_FACTOR_SECRET_CONFIGURED_DESC = "Configured"
TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Not configured" TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Not configured"
TWO_FACTOR_SECRET_DESC = "Import this info into your Google Authenticator client (or other TOTP client) using the provided QR code below or by entering the code manually." TWO_FACTOR_SECRET_DESC = "Import this info into your Google Authenticator client (or other TOTP client) using the provided QR code below or by entering the code manually."
TWO_FACTOR_BACKUP_CODES_DESC = "If you can't receive codes via Google Authenticator, you can use backup codes to sign in. After youve used a backup code to sign in, it will become inactive." TWO_FACTOR_BACKUP_CODES_DESC = "If you can't receive codes via Google Authenticator, you can use backup codes to sign in. After youve used a backup code to sign in, it will become inactive."
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "You can't change this setting before test."
[SETTINGS_GENERAL] [SETTINGS_GENERAL]
LEGEND_GENERAL = "일반" LEGEND_GENERAL = "일반"

View file

@ -450,6 +450,7 @@ TWO_FACTOR_SECRET_CONFIGURED_DESC = "Sukonfiguruota"
TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Nesukonfiguruota" TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Nesukonfiguruota"
TWO_FACTOR_SECRET_DESC = "Importuoti šią informaciją į Google autentifikavimo klientą naudojant žemiau pateiktą QR kodą arba įveskite kodą rankiniu būdu." TWO_FACTOR_SECRET_DESC = "Importuoti šią informaciją į Google autentifikavimo klientą naudojant žemiau pateiktą QR kodą arba įveskite kodą rankiniu būdu."
TWO_FACTOR_BACKUP_CODES_DESC = "Jei negaunate kodo per Google autentifikavimo klientą, galite nautotis savo sukurta atsargine kodų kopija. Kai panaudosite atsarginę kopiją prisijungimui, ji taps neaktyvi." TWO_FACTOR_BACKUP_CODES_DESC = "Jei negaunate kodo per Google autentifikavimo klientą, galite nautotis savo sukurta atsargine kodų kopija. Kai panaudosite atsarginę kopiją prisijungimui, ji taps neaktyvi."
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "You can't change this setting before test."
[SETTINGS_GENERAL] [SETTINGS_GENERAL]
LEGEND_GENERAL = "Pagrindiniai" LEGEND_GENERAL = "Pagrindiniai"

View file

@ -450,6 +450,7 @@ TWO_FACTOR_SECRET_CONFIGURED_DESC = "Configured"
TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Not configured" TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Not configured"
TWO_FACTOR_SECRET_DESC = "Import this info into your Google Authenticator client (or other TOTP client) using the provided QR code below or by entering the code manually." TWO_FACTOR_SECRET_DESC = "Import this info into your Google Authenticator client (or other TOTP client) using the provided QR code below or by entering the code manually."
TWO_FACTOR_BACKUP_CODES_DESC = "If you can't receive codes via Google Authenticator, you can use backup codes to sign in. After youve used a backup code to sign in, it will become inactive." TWO_FACTOR_BACKUP_CODES_DESC = "If you can't receive codes via Google Authenticator, you can use backup codes to sign in. After youve used a backup code to sign in, it will become inactive."
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "You can't change this setting before test."
[SETTINGS_GENERAL] [SETTINGS_GENERAL]
LEGEND_GENERAL = "Vispārējie" LEGEND_GENERAL = "Vispārējie"

View file

@ -450,6 +450,7 @@ TWO_FACTOR_SECRET_CONFIGURED_DESC = "Geconfigureerd"
TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Niet geconfigureerd" TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Niet geconfigureerd"
TWO_FACTOR_SECRET_DESC = "Importeer deze informatie in uw Google Authenticator-client (of andere TOTP-client) door gebruik te maken van de QR code hier beneden of door de code handmatig in te voeren." TWO_FACTOR_SECRET_DESC = "Importeer deze informatie in uw Google Authenticator-client (of andere TOTP-client) door gebruik te maken van de QR code hier beneden of door de code handmatig in te voeren."
TWO_FACTOR_BACKUP_CODES_DESC = "Als u geen codes ontvangt via de Google Authenticator kan je de backup codes gebruiken om in te loggen. Na gebruik van de backup code wordt deze inactief." TWO_FACTOR_BACKUP_CODES_DESC = "Als u geen codes ontvangt via de Google Authenticator kan je de backup codes gebruiken om in te loggen. Na gebruik van de backup code wordt deze inactief."
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "You can't change this setting before test."
[SETTINGS_GENERAL] [SETTINGS_GENERAL]
LEGEND_GENERAL = "Algemeen" LEGEND_GENERAL = "Algemeen"

View file

@ -449,6 +449,7 @@ TWO_FACTOR_SECRET_CONFIGURED_DESC = "Konfigurert"
TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Ikke konfigurert" TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Ikke konfigurert"
TWO_FACTOR_SECRET_DESC = "Importer denne informasjonen til din Google Authenticator klient (eller andre klienter) ved å bruke QR-koden under, eller ved å skrive inn koden manuelt." TWO_FACTOR_SECRET_DESC = "Importer denne informasjonen til din Google Authenticator klient (eller andre klienter) ved å bruke QR-koden under, eller ved å skrive inn koden manuelt."
TWO_FACTOR_BACKUP_CODES_DESC = "Om du ikke mottar koder fra Google Authenticator, kan du brukeyou can use backupkodene for å logge inn. Disse kodene vil bli deaktivert etter bruk." TWO_FACTOR_BACKUP_CODES_DESC = "Om du ikke mottar koder fra Google Authenticator, kan du brukeyou can use backupkodene for å logge inn. Disse kodene vil bli deaktivert etter bruk."
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "You can't change this setting before test."
[SETTINGS_GENERAL] [SETTINGS_GENERAL]
LEGEND_GENERAL = "Generelt" LEGEND_GENERAL = "Generelt"

View file

@ -450,6 +450,7 @@ TWO_FACTOR_SECRET_CONFIGURED_DESC = "Skonfigurowane"
TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Nie skonfigurowane" TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Nie skonfigurowane"
TWO_FACTOR_SECRET_DESC = "Zaimportuj te informacje do swojego klienta usługi Google Authenticator (lub innego klienta TOTP), używając poniższego kodu QR lub wpisując kod ręcznie." TWO_FACTOR_SECRET_DESC = "Zaimportuj te informacje do swojego klienta usługi Google Authenticator (lub innego klienta TOTP), używając poniższego kodu QR lub wpisując kod ręcznie."
TWO_FACTOR_BACKUP_CODES_DESC = "Jeżeli nie możesz otrzymać kodu poprzez apikację Google Authenticator, możesz użyć kodów zapasowych. Po zużyciu kodów, opcja ta będzie nieaktywna." TWO_FACTOR_BACKUP_CODES_DESC = "Jeżeli nie możesz otrzymać kodu poprzez apikację Google Authenticator, możesz użyć kodów zapasowych. Po zużyciu kodów, opcja ta będzie nieaktywna."
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "You can't change this setting before test."
[SETTINGS_GENERAL] [SETTINGS_GENERAL]
LEGEND_GENERAL = "Ogólne" LEGEND_GENERAL = "Ogólne"

View file

@ -450,6 +450,7 @@ TWO_FACTOR_SECRET_CONFIGURED_DESC = "Configurado"
TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Não configurado" TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Não configurado"
TWO_FACTOR_SECRET_DESC = "Importe este código no seu cliente Google Authenticator (ou outro cliente TOTP) usando o QR code abaixo ou informando o código manualmente." TWO_FACTOR_SECRET_DESC = "Importe este código no seu cliente Google Authenticator (ou outro cliente TOTP) usando o QR code abaixo ou informando o código manualmente."
TWO_FACTOR_BACKUP_CODES_DESC = "Se você não puder receber os códigos via Google Authenticator, você pode usar esses códigos de backup para acessar sua conta. Depois de você usar um código de backup, ele se expira." TWO_FACTOR_BACKUP_CODES_DESC = "Se você não puder receber os códigos via Google Authenticator, você pode usar esses códigos de backup para acessar sua conta. Depois de você usar um código de backup, ele se expira."
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "You can't change this setting before test."
[SETTINGS_GENERAL] [SETTINGS_GENERAL]
LEGEND_GENERAL = "Geral" LEGEND_GENERAL = "Geral"

View file

@ -450,6 +450,7 @@ TWO_FACTOR_SECRET_CONFIGURED_DESC = "Configured"
TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Not configured" TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Not configured"
TWO_FACTOR_SECRET_DESC = "Import this info into your Google Authenticator client (or other TOTP client) using the provided QR code below or by entering the code manually." TWO_FACTOR_SECRET_DESC = "Import this info into your Google Authenticator client (or other TOTP client) using the provided QR code below or by entering the code manually."
TWO_FACTOR_BACKUP_CODES_DESC = "If you can't receive codes via Google Authenticator, you can use backup codes to sign in. After youve used a backup code to sign in, it will become inactive." TWO_FACTOR_BACKUP_CODES_DESC = "If you can't receive codes via Google Authenticator, you can use backup codes to sign in. After youve used a backup code to sign in, it will become inactive."
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "You can't change this setting before test."
[SETTINGS_GENERAL] [SETTINGS_GENERAL]
LEGEND_GENERAL = "Geral" LEGEND_GENERAL = "Geral"

View file

@ -449,6 +449,7 @@ TWO_FACTOR_SECRET_CONFIGURED_DESC = "Configured"
TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Not configured" TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Not configured"
TWO_FACTOR_SECRET_DESC = "Import this info into your Google Authenticator client (or other TOTP client) using the provided QR code below or by entering the code manually." TWO_FACTOR_SECRET_DESC = "Import this info into your Google Authenticator client (or other TOTP client) using the provided QR code below or by entering the code manually."
TWO_FACTOR_BACKUP_CODES_DESC = "If you can't receive codes via Google Authenticator, you can use backup codes to sign in. After youve used a backup code to sign in, it will become inactive." TWO_FACTOR_BACKUP_CODES_DESC = "If you can't receive codes via Google Authenticator, you can use backup codes to sign in. After youve used a backup code to sign in, it will become inactive."
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "You can't change this setting before test."
[SETTINGS_GENERAL] [SETTINGS_GENERAL]
LEGEND_GENERAL = "Setări de bază" LEGEND_GENERAL = "Setări de bază"

View file

@ -450,6 +450,7 @@ TWO_FACTOR_SECRET_CONFIGURED_DESC = "Настроен"
TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Не настроен" TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Не настроен"
TWO_FACTOR_SECRET_DESC = "Используйте эту информацию для настройки Google Authenticator клиента (или другого TOTP клиента) с помощью прилагаемого QR-кода, или вручную." TWO_FACTOR_SECRET_DESC = "Используйте эту информацию для настройки Google Authenticator клиента (или другого TOTP клиента) с помощью прилагаемого QR-кода, или вручную."
TWO_FACTOR_BACKUP_CODES_DESC = "Если вы не можете получить коды через Google Authenticator, вы можете использовать резервные коды, чтобы войти. После того как вы использовали резервный код для входа в систему, он становится неактивным." TWO_FACTOR_BACKUP_CODES_DESC = "Если вы не можете получить коды через Google Authenticator, вы можете использовать резервные коды, чтобы войти. После того как вы использовали резервный код для входа в систему, он становится неактивным."
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "You can't change this setting before test."
[SETTINGS_GENERAL] [SETTINGS_GENERAL]
LEGEND_GENERAL = "Основные Настройки" LEGEND_GENERAL = "Основные Настройки"

View file

@ -450,6 +450,7 @@ TWO_FACTOR_SECRET_CONFIGURED_DESC = "Configured"
TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Not configured" TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Not configured"
TWO_FACTOR_SECRET_DESC = "Import this info into your Google Authenticator client (or other TOTP client) using the provided QR code below or by entering the code manually." TWO_FACTOR_SECRET_DESC = "Import this info into your Google Authenticator client (or other TOTP client) using the provided QR code below or by entering the code manually."
TWO_FACTOR_BACKUP_CODES_DESC = "If you can't receive codes via Google Authenticator, you can use backup codes to sign in. After youve used a backup code to sign in, it will become inactive." TWO_FACTOR_BACKUP_CODES_DESC = "If you can't receive codes via Google Authenticator, you can use backup codes to sign in. After youve used a backup code to sign in, it will become inactive."
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "You can't change this setting before test."
[SETTINGS_GENERAL] [SETTINGS_GENERAL]
LEGEND_GENERAL = "Všeobecné" LEGEND_GENERAL = "Všeobecné"

View file

@ -450,6 +450,7 @@ TWO_FACTOR_SECRET_CONFIGURED_DESC = "Konfigurerad"
TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Inte konfigurarad" TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Inte konfigurarad"
TWO_FACTOR_SECRET_DESC = "Importera denna information till din Google Authenticator klient (eller annan TOTP klient) med denna QR kod eller manuellt med koden här nedan." TWO_FACTOR_SECRET_DESC = "Importera denna information till din Google Authenticator klient (eller annan TOTP klient) med denna QR kod eller manuellt med koden här nedan."
TWO_FACTOR_BACKUP_CODES_DESC = "Om du inte kan ta emot koderna med Google Authenticator, så använd backupkoderna för att logga in. När du använt backupkoderna för att logga in så blir dom inaktiva." TWO_FACTOR_BACKUP_CODES_DESC = "Om du inte kan ta emot koderna med Google Authenticator, så använd backupkoderna för att logga in. När du använt backupkoderna för att logga in så blir dom inaktiva."
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "You can't change this setting before test."
[SETTINGS_GENERAL] [SETTINGS_GENERAL]
LEGEND_GENERAL = "Allmänt" LEGEND_GENERAL = "Allmänt"

View file

@ -448,6 +448,7 @@ TWO_FACTOR_SECRET_CONFIGURED_DESC = "Yapılandırılmış"
TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Yapılandırılmamış" TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Yapılandırılmamış"
TWO_FACTOR_SECRET_DESC = "Aşağıda sunulan QR kodu kullanarak Google Şifrematik istemcisi (veya başka TOTP istemci) içine veya elle kod girerek bu bilgi aktarın." TWO_FACTOR_SECRET_DESC = "Aşağıda sunulan QR kodu kullanarak Google Şifrematik istemcisi (veya başka TOTP istemci) içine veya elle kod girerek bu bilgi aktarın."
TWO_FACTOR_BACKUP_CODES_DESC = "Google Şifrematik'te aracılığıyla kodları alamıyorsa Eğer oturum için bir yedek kod kullandım sonra, bunu pasif olacaktır, oturum yedekleme kodlarını kullanabilirsiniz." TWO_FACTOR_BACKUP_CODES_DESC = "Google Şifrematik'te aracılığıyla kodları alamıyorsa Eğer oturum için bir yedek kod kullandım sonra, bunu pasif olacaktır, oturum yedekleme kodlarını kullanabilirsiniz."
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "You can't change this setting before test."
[SETTINGS_GENERAL] [SETTINGS_GENERAL]
LEGEND_GENERAL = "Genel" LEGEND_GENERAL = "Genel"

View file

@ -450,6 +450,7 @@ TWO_FACTOR_SECRET_CONFIGURED_DESC = "Налаштований"
TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Не налаштований" TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Не налаштований"
TWO_FACTOR_SECRET_DESC = "Використовуйте цю інформацію для налаштування Google Authenticator клиенту (чи іншого TOTP клиенту) за допомогою прикладеного QR-коду, чи вручну." TWO_FACTOR_SECRET_DESC = "Використовуйте цю інформацію для налаштування Google Authenticator клиенту (чи іншого TOTP клиенту) за допомогою прикладеного QR-коду, чи вручну."
TWO_FACTOR_BACKUP_CODES_DESC = "Якщо Ви не можете отримати коди через Google Authenticator, ви можете використовувати резервні коди, щоб увійти. Після того як Ви використали резервний код для входу в систему, він стає неактивним." TWO_FACTOR_BACKUP_CODES_DESC = "Якщо Ви не можете отримати коди через Google Authenticator, ви можете використовувати резервні коди, щоб увійти. Після того як Ви використали резервний код для входу в систему, він стає неактивним."
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "You can't change this setting before test."
[SETTINGS_GENERAL] [SETTINGS_GENERAL]
LEGEND_GENERAL = "Основні Налаштування" LEGEND_GENERAL = "Основні Налаштування"

View file

@ -450,6 +450,7 @@ TWO_FACTOR_SECRET_CONFIGURED_DESC = "Configured"
TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Not configured" TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Not configured"
TWO_FACTOR_SECRET_DESC = "Import this info into your Google Authenticator client (or other TOTP client) using the provided QR code below or by entering the code manually." TWO_FACTOR_SECRET_DESC = "Import this info into your Google Authenticator client (or other TOTP client) using the provided QR code below or by entering the code manually."
TWO_FACTOR_BACKUP_CODES_DESC = "If you can't receive codes via Google Authenticator, you can use backup codes to sign in. After youve used a backup code to sign in, it will become inactive." TWO_FACTOR_BACKUP_CODES_DESC = "If you can't receive codes via Google Authenticator, you can use backup codes to sign in. After youve used a backup code to sign in, it will become inactive."
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "You can't change this setting before test."
[SETTINGS_GENERAL] [SETTINGS_GENERAL]
LEGEND_GENERAL = "一般设置" LEGEND_GENERAL = "一般设置"

View file

@ -450,6 +450,7 @@ TWO_FACTOR_SECRET_CONFIGURED_DESC = "Configured"
TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Not configured" TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Not configured"
TWO_FACTOR_SECRET_DESC = "Import this info into your Google Authenticator client (or other TOTP client) using the provided QR code below or by entering the code manually." TWO_FACTOR_SECRET_DESC = "Import this info into your Google Authenticator client (or other TOTP client) using the provided QR code below or by entering the code manually."
TWO_FACTOR_BACKUP_CODES_DESC = "If you can't receive codes via Google Authenticator, you can use backup codes to sign in. After youve used a backup code to sign in, it will become inactive." TWO_FACTOR_BACKUP_CODES_DESC = "If you can't receive codes via Google Authenticator, you can use backup codes to sign in. After youve used a backup code to sign in, it will become inactive."
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "You can't change this setting before test."
[SETTINGS_GENERAL] [SETTINGS_GENERAL]
LEGEND_GENERAL = "一般設置" LEGEND_GENERAL = "一般設置"

View file

@ -875,7 +875,7 @@ b),e="undefined"==typeof this.state?CKEDITOR.TRISTATE_OFF:this.state,j="",i=e==C
"false",disabled:e==CKEDITOR.TRISTATE_DISABLED,title:this.label,href:"javascript:void('"+(this.label||"").replace("'")+"')",hoverFn:a._.itemOverFn,moveOutFn:a._.itemOutFn,clickFn:a._.itemClickFn,index:b,iconStyle:CKEDITOR.skin.getIconStyle(g,"rtl"==this.editor.lang.dir,g==this.icon?null:this.icon,this.iconOffset),arrowHtml:f?l.output({label:d}):"",role:this.role?this.role:"menuitem",ariaChecked:j};m.output(a,c)}}})})();CKEDITOR.config.menu_groups="clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea,div";CKEDITOR.plugins.add("menubutton",{requires:"button,menu",onLoad:function(){var d=function(c){var a=this._,b=a.menu;a.state!==CKEDITOR.TRISTATE_DISABLED&&(a.on&&b?b.hide():(a.previousState=a.state,b||(b=a.menu=new CKEDITOR.menu(c,{panel:{className:"cke_menu_panel",attributes:{"aria-label":c.lang.common.options}}}),b.onHide=CKEDITOR.tools.bind(function(){var b=this.command?c.getCommand(this.command).modes:this.modes;this.setState(!b||b[c.mode]?a.previousState:CKEDITOR.TRISTATE_DISABLED);a.on=0},this), "false",disabled:e==CKEDITOR.TRISTATE_DISABLED,title:this.label,href:"javascript:void('"+(this.label||"").replace("'")+"')",hoverFn:a._.itemOverFn,moveOutFn:a._.itemOutFn,clickFn:a._.itemClickFn,index:b,iconStyle:CKEDITOR.skin.getIconStyle(g,"rtl"==this.editor.lang.dir,g==this.icon?null:this.icon,this.iconOffset),arrowHtml:f?l.output({label:d}):"",role:this.role?this.role:"menuitem",ariaChecked:j};m.output(a,c)}}})})();CKEDITOR.config.menu_groups="clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea,div";CKEDITOR.plugins.add("menubutton",{requires:"button,menu",onLoad:function(){var d=function(c){var a=this._,b=a.menu;a.state!==CKEDITOR.TRISTATE_DISABLED&&(a.on&&b?b.hide():(a.previousState=a.state,b||(b=a.menu=new CKEDITOR.menu(c,{panel:{className:"cke_menu_panel",attributes:{"aria-label":c.lang.common.options}}}),b.onHide=CKEDITOR.tools.bind(function(){var b=this.command?c.getCommand(this.command).modes:this.modes;this.setState(!b||b[c.mode]?a.previousState:CKEDITOR.TRISTATE_DISABLED);a.on=0},this),
this.onMenu&&b.addListener(this.onMenu)),this.setState(CKEDITOR.TRISTATE_ON),a.on=1,setTimeout(function(){b.show(CKEDITOR.document.getById(a.id),4)},0)))};CKEDITOR.ui.menuButton=CKEDITOR.tools.createClass({base:CKEDITOR.ui.button,$:function(c){delete c.panel;this.base(c);this.hasArrow=!0;this.click=d},statics:{handler:{create:function(c){return new CKEDITOR.ui.menuButton(c)}}}})},beforeInit:function(d){d.ui.addHandler(CKEDITOR.UI_MENUBUTTON,CKEDITOR.ui.menuButton.handler)}}); this.onMenu&&b.addListener(this.onMenu)),this.setState(CKEDITOR.TRISTATE_ON),a.on=1,setTimeout(function(){b.show(CKEDITOR.document.getById(a.id),4)},0)))};CKEDITOR.ui.menuButton=CKEDITOR.tools.createClass({base:CKEDITOR.ui.button,$:function(c){delete c.panel;this.base(c);this.hasArrow=!0;this.click=d},statics:{handler:{create:function(c){return new CKEDITOR.ui.menuButton(c)}}}})},beforeInit:function(d){d.ui.addHandler(CKEDITOR.UI_MENUBUTTON,CKEDITOR.ui.menuButton.handler)}});
CKEDITOR.UI_MENUBUTTON="menubutton";CKEDITOR.plugins.add("onchange",{init:function(a){function b(){a.readOnly||d||(d=setTimeout(function(){d=0;a.fire("change")},a.config.minimumChangeMilliseconds||100))}var d,g=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver,f;a.on("destroy",function(){d&&clearTimeout(d);d=null});a.on("saveSnapshot",function(a){(!a.data||!a.data.contentOnly)&&b()});var e=a.getCommand("undo");e&&e.on("afterUndo",b);(e=a.getCommand("redo"))&&e.on("afterRedo",b);a.on("afterCommandExec", CKEDITOR.UI_MENUBUTTON="menubutton";CKEDITOR.plugins.add("onchange",{init:function(a){function b(){a.readOnly||d||(d=setTimeout(function(){d=0;a.fire("change")},a.config.minimumChangeMilliseconds||100))}var d,g=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver,f;a.on("destroy",function(){d&&clearTimeout(d);d=null});a.on("saveSnapshot",function(a){(!a.data||!a.data.contentOnly)&&b()});var e=a.getCommand("undo");e&&e.on("afterUndo",b);(e=a.getCommand("redo"))&&e.on("afterRedo",b);a.on("afterCommandExec",
function(a){"source"!=a.data.name&&!1!==a.data.command.canUndo&&b()});g&&(f=new g(function(){b()}),window.console&&window.console.log&&console.log("Detecting changes using MutationObservers"));a.on("contentDom",function(){if(f)var c=setInterval(function(){if(typeof a.document==="object"){f.observe(a.document.getBody().$,{attributes:true,childList:true,characterData:true});clearInterval(c)}},100);a.document.on("keydown",function(a){if(!a.data.$.ctrlKey&&!a.data.$.metaKey){a=a.data.$.keyCode;(a==8|| function(a){"source"!=a.data.name&&!1!==a.data.command.canUndo&&b()});g&&(f=new g(function(){b()}),window.console&&window.console.log&&true);a.on("contentDom",function(){if(f)var c=setInterval(function(){if(typeof a.document==="object"){f.observe(a.document.getBody().$,{attributes:true,childList:true,characterData:true});clearInterval(c)}},100);a.document.on("keydown",function(a){if(!a.data.$.ctrlKey&&!a.data.$.metaKey){a=a.data.$.keyCode;(a==8||
a==13||a==32||a>=46&&a<=90||a>=96&&a<=111||a>=186&&a<=222||a==229)&&b()}});a.document.on("drop",b);a.document.getBody().on("drop",b)});a.on("mode",function(){if(a.mode=="source"){var c=a.textarea||a._.editable;c.on("keydown",function(a){!a.data.$.ctrlKey&&!a.data.$.metaKey&&b()});c.on("drop",b);c.on("input",b);if(CKEDITOR.env.ie){c.on("cut",b);c.on("paste",b)}}})}});CKEDITOR.plugins.add("removeformat",{init:function(a){a.addCommand("removeFormat",CKEDITOR.plugins.removeformat.commands.removeformat);a.ui.addButton&&a.ui.addButton("RemoveFormat",{label:a.lang.removeformat.toolbar,command:"removeFormat",toolbar:"cleanup,10"})}}); a==13||a==32||a>=46&&a<=90||a>=96&&a<=111||a>=186&&a<=222||a==229)&&b()}});a.document.on("drop",b);a.document.getBody().on("drop",b)});a.on("mode",function(){if(a.mode=="source"){var c=a.textarea||a._.editable;c.on("keydown",function(a){!a.data.$.ctrlKey&&!a.data.$.metaKey&&b()});c.on("drop",b);c.on("input",b);if(CKEDITOR.env.ie){c.on("cut",b);c.on("paste",b)}}})}});CKEDITOR.plugins.add("removeformat",{init:function(a){a.addCommand("removeFormat",CKEDITOR.plugins.removeformat.commands.removeformat);a.ui.addButton&&a.ui.addButton("RemoveFormat",{label:a.lang.removeformat.toolbar,command:"removeFormat",toolbar:"cleanup,10"})}});
CKEDITOR.plugins.removeformat={commands:{removeformat:{exec:function(a){for(var h=a._.removeFormatRegex||(a._.removeFormatRegex=RegExp("^(?:"+a.config.removeFormatTags.replace(/,/g,"|")+")$","i")),e=a._.removeAttributes||(a._.removeAttributes=a.config.removeFormatAttributes.split(",")),f=CKEDITOR.plugins.removeformat.filter,k=a.getSelection().getRanges(),l=k.createIterator(),m=function(a){return a.type==CKEDITOR.NODE_ELEMENT},c;c=l.getNextRange();){c.collapsed||c.enlarge(CKEDITOR.ENLARGE_ELEMENT); CKEDITOR.plugins.removeformat={commands:{removeformat:{exec:function(a){for(var h=a._.removeFormatRegex||(a._.removeFormatRegex=RegExp("^(?:"+a.config.removeFormatTags.replace(/,/g,"|")+")$","i")),e=a._.removeAttributes||(a._.removeAttributes=a.config.removeFormatAttributes.split(",")),f=CKEDITOR.plugins.removeformat.filter,k=a.getSelection().getRanges(),l=k.createIterator(),m=function(a){return a.type==CKEDITOR.NODE_ELEMENT},c;c=l.getNextRange();){c.collapsed||c.enlarge(CKEDITOR.ENLARGE_ELEMENT);
var j=c.createBookmark(),b=j.startNode,d=j.endNode,i=function(b){for(var c=a.elementPath(b),e=c.elements,d=1,g;(g=e[d])&&!g.equals(c.block)&&!g.equals(c.blockLimit);d++)h.test(g.getName())&&f(a,g)&&b.breakParent(g)};i(b);if(d){i(d);for(b=b.getNextSourceNode(!0,CKEDITOR.NODE_ELEMENT);b&&!b.equals(d);)if(b.isReadOnly()){if(b.getPosition(d)&CKEDITOR.POSITION_CONTAINS)break;b=b.getNext(m)}else i=b.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT),!("img"==b.getName()&&b.data("cke-realelement"))&&f(a,b)&&(h.test(b.getName())? var j=c.createBookmark(),b=j.startNode,d=j.endNode,i=function(b){for(var c=a.elementPath(b),e=c.elements,d=1,g;(g=e[d])&&!g.equals(c.block)&&!g.equals(c.blockLimit);d++)h.test(g.getName())&&f(a,g)&&b.breakParent(g)};i(b);if(d){i(d);for(b=b.getNextSourceNode(!0,CKEDITOR.NODE_ELEMENT);b&&!b.equals(d);)if(b.isReadOnly()){if(b.getPosition(d)&CKEDITOR.POSITION_CONTAINS)break;b=b.getNext(m)}else i=b.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT),!("img"==b.getName()&&b.data("cke-realelement"))&&f(a,b)&&(h.test(b.getName())?

View file

@ -867,7 +867,7 @@ b),e="undefined"==typeof this.state?CKEDITOR.TRISTATE_OFF:this.state,j="",i=e==C
"false",disabled:e==CKEDITOR.TRISTATE_DISABLED,title:this.label,href:"javascript:void('"+(this.label||"").replace("'")+"')",hoverFn:a._.itemOverFn,moveOutFn:a._.itemOutFn,clickFn:a._.itemClickFn,index:b,iconStyle:CKEDITOR.skin.getIconStyle(g,"rtl"==this.editor.lang.dir,g==this.icon?null:this.icon,this.iconOffset),arrowHtml:f?l.output({label:d}):"",role:this.role?this.role:"menuitem",ariaChecked:j};m.output(a,c)}}})})();CKEDITOR.config.menu_groups="clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea,div";CKEDITOR.plugins.add("menubutton",{requires:"button,menu",onLoad:function(){var d=function(c){var a=this._,b=a.menu;a.state!==CKEDITOR.TRISTATE_DISABLED&&(a.on&&b?b.hide():(a.previousState=a.state,b||(b=a.menu=new CKEDITOR.menu(c,{panel:{className:"cke_menu_panel",attributes:{"aria-label":c.lang.common.options}}}),b.onHide=CKEDITOR.tools.bind(function(){var b=this.command?c.getCommand(this.command).modes:this.modes;this.setState(!b||b[c.mode]?a.previousState:CKEDITOR.TRISTATE_DISABLED);a.on=0},this), "false",disabled:e==CKEDITOR.TRISTATE_DISABLED,title:this.label,href:"javascript:void('"+(this.label||"").replace("'")+"')",hoverFn:a._.itemOverFn,moveOutFn:a._.itemOutFn,clickFn:a._.itemClickFn,index:b,iconStyle:CKEDITOR.skin.getIconStyle(g,"rtl"==this.editor.lang.dir,g==this.icon?null:this.icon,this.iconOffset),arrowHtml:f?l.output({label:d}):"",role:this.role?this.role:"menuitem",ariaChecked:j};m.output(a,c)}}})})();CKEDITOR.config.menu_groups="clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea,div";CKEDITOR.plugins.add("menubutton",{requires:"button,menu",onLoad:function(){var d=function(c){var a=this._,b=a.menu;a.state!==CKEDITOR.TRISTATE_DISABLED&&(a.on&&b?b.hide():(a.previousState=a.state,b||(b=a.menu=new CKEDITOR.menu(c,{panel:{className:"cke_menu_panel",attributes:{"aria-label":c.lang.common.options}}}),b.onHide=CKEDITOR.tools.bind(function(){var b=this.command?c.getCommand(this.command).modes:this.modes;this.setState(!b||b[c.mode]?a.previousState:CKEDITOR.TRISTATE_DISABLED);a.on=0},this),
this.onMenu&&b.addListener(this.onMenu)),this.setState(CKEDITOR.TRISTATE_ON),a.on=1,setTimeout(function(){b.show(CKEDITOR.document.getById(a.id),4)},0)))};CKEDITOR.ui.menuButton=CKEDITOR.tools.createClass({base:CKEDITOR.ui.button,$:function(c){delete c.panel;this.base(c);this.hasArrow=!0;this.click=d},statics:{handler:{create:function(c){return new CKEDITOR.ui.menuButton(c)}}}})},beforeInit:function(d){d.ui.addHandler(CKEDITOR.UI_MENUBUTTON,CKEDITOR.ui.menuButton.handler)}}); this.onMenu&&b.addListener(this.onMenu)),this.setState(CKEDITOR.TRISTATE_ON),a.on=1,setTimeout(function(){b.show(CKEDITOR.document.getById(a.id),4)},0)))};CKEDITOR.ui.menuButton=CKEDITOR.tools.createClass({base:CKEDITOR.ui.button,$:function(c){delete c.panel;this.base(c);this.hasArrow=!0;this.click=d},statics:{handler:{create:function(c){return new CKEDITOR.ui.menuButton(c)}}}})},beforeInit:function(d){d.ui.addHandler(CKEDITOR.UI_MENUBUTTON,CKEDITOR.ui.menuButton.handler)}});
CKEDITOR.UI_MENUBUTTON="menubutton";CKEDITOR.plugins.add("onchange",{init:function(a){function b(){a.readOnly||d||(d=setTimeout(function(){d=0;a.fire("change")},a.config.minimumChangeMilliseconds||100))}var d,g=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver,f;a.on("destroy",function(){d&&clearTimeout(d);d=null});a.on("saveSnapshot",function(a){(!a.data||!a.data.contentOnly)&&b()});var e=a.getCommand("undo");e&&e.on("afterUndo",b);(e=a.getCommand("redo"))&&e.on("afterRedo",b);a.on("afterCommandExec", CKEDITOR.UI_MENUBUTTON="menubutton";CKEDITOR.plugins.add("onchange",{init:function(a){function b(){a.readOnly||d||(d=setTimeout(function(){d=0;a.fire("change")},a.config.minimumChangeMilliseconds||100))}var d,g=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver,f;a.on("destroy",function(){d&&clearTimeout(d);d=null});a.on("saveSnapshot",function(a){(!a.data||!a.data.contentOnly)&&b()});var e=a.getCommand("undo");e&&e.on("afterUndo",b);(e=a.getCommand("redo"))&&e.on("afterRedo",b);a.on("afterCommandExec",
function(a){"source"!=a.data.name&&!1!==a.data.command.canUndo&&b()});g&&(f=new g(function(){b()}),window.console&&window.console.log&&console.log("Detecting changes using MutationObservers"));a.on("contentDom",function(){if(f)var c=setInterval(function(){if(typeof a.document==="object"){f.observe(a.document.getBody().$,{attributes:true,childList:true,characterData:true});clearInterval(c)}},100);a.document.on("keydown",function(a){if(!a.data.$.ctrlKey&&!a.data.$.metaKey){a=a.data.$.keyCode;(a==8|| function(a){"source"!=a.data.name&&!1!==a.data.command.canUndo&&b()});g&&(f=new g(function(){b()}),window.console&&window.console.log&&true);a.on("contentDom",function(){if(f)var c=setInterval(function(){if(typeof a.document==="object"){f.observe(a.document.getBody().$,{attributes:true,childList:true,characterData:true});clearInterval(c)}},100);a.document.on("keydown",function(a){if(!a.data.$.ctrlKey&&!a.data.$.metaKey){a=a.data.$.keyCode;(a==8||
a==13||a==32||a>=46&&a<=90||a>=96&&a<=111||a>=186&&a<=222||a==229)&&b()}});a.document.on("drop",b);a.document.getBody().on("drop",b)});a.on("mode",function(){if(a.mode=="source"){var c=a.textarea||a._.editable;c.on("keydown",function(a){!a.data.$.ctrlKey&&!a.data.$.metaKey&&b()});c.on("drop",b);c.on("input",b);if(CKEDITOR.env.ie){c.on("cut",b);c.on("paste",b)}}})}});CKEDITOR.plugins.add("removeformat",{init:function(a){a.addCommand("removeFormat",CKEDITOR.plugins.removeformat.commands.removeformat);a.ui.addButton&&a.ui.addButton("RemoveFormat",{label:a.lang.removeformat.toolbar,command:"removeFormat",toolbar:"cleanup,10"})}}); a==13||a==32||a>=46&&a<=90||a>=96&&a<=111||a>=186&&a<=222||a==229)&&b()}});a.document.on("drop",b);a.document.getBody().on("drop",b)});a.on("mode",function(){if(a.mode=="source"){var c=a.textarea||a._.editable;c.on("keydown",function(a){!a.data.$.ctrlKey&&!a.data.$.metaKey&&b()});c.on("drop",b);c.on("input",b);if(CKEDITOR.env.ie){c.on("cut",b);c.on("paste",b)}}})}});CKEDITOR.plugins.add("removeformat",{init:function(a){a.addCommand("removeFormat",CKEDITOR.plugins.removeformat.commands.removeformat);a.ui.addButton&&a.ui.addButton("RemoveFormat",{label:a.lang.removeformat.toolbar,command:"removeFormat",toolbar:"cleanup,10"})}});
CKEDITOR.plugins.removeformat={commands:{removeformat:{exec:function(a){for(var h=a._.removeFormatRegex||(a._.removeFormatRegex=RegExp("^(?:"+a.config.removeFormatTags.replace(/,/g,"|")+")$","i")),e=a._.removeAttributes||(a._.removeAttributes=a.config.removeFormatAttributes.split(",")),f=CKEDITOR.plugins.removeformat.filter,k=a.getSelection().getRanges(),l=k.createIterator(),m=function(a){return a.type==CKEDITOR.NODE_ELEMENT},c;c=l.getNextRange();){c.collapsed||c.enlarge(CKEDITOR.ENLARGE_ELEMENT); CKEDITOR.plugins.removeformat={commands:{removeformat:{exec:function(a){for(var h=a._.removeFormatRegex||(a._.removeFormatRegex=RegExp("^(?:"+a.config.removeFormatTags.replace(/,/g,"|")+")$","i")),e=a._.removeAttributes||(a._.removeAttributes=a.config.removeFormatAttributes.split(",")),f=CKEDITOR.plugins.removeformat.filter,k=a.getSelection().getRanges(),l=k.createIterator(),m=function(a){return a.type==CKEDITOR.NODE_ELEMENT},c;c=l.getNextRange();){c.collapsed||c.enlarge(CKEDITOR.ENLARGE_ELEMENT);
var j=c.createBookmark(),b=j.startNode,d=j.endNode,i=function(b){for(var c=a.elementPath(b),e=c.elements,d=1,g;(g=e[d])&&!g.equals(c.block)&&!g.equals(c.blockLimit);d++)h.test(g.getName())&&f(a,g)&&b.breakParent(g)};i(b);if(d){i(d);for(b=b.getNextSourceNode(!0,CKEDITOR.NODE_ELEMENT);b&&!b.equals(d);)if(b.isReadOnly()){if(b.getPosition(d)&CKEDITOR.POSITION_CONTAINS)break;b=b.getNext(m)}else i=b.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT),!("img"==b.getName()&&b.data("cke-realelement"))&&f(a,b)&&(h.test(b.getName())? var j=c.createBookmark(),b=j.startNode,d=j.endNode,i=function(b){for(var c=a.elementPath(b),e=c.elements,d=1,g;(g=e[d])&&!g.equals(c.block)&&!g.equals(c.blockLimit);d++)h.test(g.getName())&&f(a,g)&&b.breakParent(g)};i(b);if(d){i(d);for(b=b.getNextSourceNode(!0,CKEDITOR.NODE_ELEMENT);b&&!b.equals(d);)if(b.isReadOnly()){if(b.getPosition(d)&CKEDITOR.POSITION_CONTAINS)break;b=b.getNext(m)}else i=b.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT),!("img"==b.getName()&&b.data("cke-realelement"))&&f(a,b)&&(h.test(b.getName())?

View file

@ -600,6 +600,10 @@
this.elements.input.focus(); this.elements.input.focus();
}, },
blur : function () {
this.elements.input.blur();
},
_focus : function(ev) { _focus : function(ev) {
var var
widget = (ev && ev.data.widget) || this, widget = (ev && ev.data.widget) || this,

File diff suppressed because one or more lines are too long