Code refactoring

This commit is contained in:
RainLoop Team 2014-08-27 19:59:44 +04:00
parent 36329110e5
commit b4f416b6f8
105 changed files with 4331 additions and 4339 deletions

View file

@ -9,7 +9,7 @@
_ = require('_'),
window = require('window'),
$html = require('$html'),
$window = require('$window'),
$win = require('$win'),
$doc = require('$doc'),
Globals = require('Globals'),
@ -17,9 +17,9 @@
LinkBuilder = require('LinkBuilder'),
Events = require('Events'),
AppSettings = require('../Storages/AppSettings.js'),
Settings = require('Storage:Settings'),
KnoinAbstractBoot = require('KnoinAbstractBoot')
KnoinAbstractBoot = require('Knoin:AbstractBoot')
;
/**
@ -35,7 +35,7 @@
this.iframe = $('<iframe style="display:none" src="javascript:;" />').appendTo('body');
$window.on('error', function (oEvent) {
$win.on('error', function (oEvent) {
if (oEvent && oEvent.originalEvent && oEvent.originalEvent.message &&
-1 === Utils.inArray(oEvent.originalEvent.message, [
'Script error.', 'Uncaught Error: Error calling method on NPObject.'
@ -129,7 +129,7 @@
AbstractApp.prototype.setTitle = function (sTitle)
{
sTitle = ((Utils.isNormal(sTitle) && 0 < sTitle.length) ? sTitle + ' - ' : '') +
AppSettings.settingsGet('Title') || '';
Settings.settingsGet('Title') || '';
window.document.title = '_';
window.document.title = sTitle;
@ -142,9 +142,9 @@
AbstractApp.prototype.loginAndLogoutReload = function (bLogout, bClose)
{
var
kn = require('kn'),
sCustomLogoutLink = Utils.pString(AppSettings.settingsGet('CustomLogoutLink')),
bInIframe = !!AppSettings.settingsGet('InIframe')
kn = require('App:Knoin'),
sCustomLogoutLink = Utils.pString(Settings.settingsGet('CustomLogoutLink')),
bInIframe = !!Settings.settingsGet('InIframe')
;
bLogout = Utils.isUnd(bLogout) ? false : !!bLogout;
@ -196,7 +196,7 @@
{
Events.pub('rl.bootstart');
var ssm = require('../External/ssm.js');
var ssm = require('ssm');
Utils.initOnStartOrLangChange(function () {
Utils.initNotificationLanguage();

View file

@ -13,16 +13,16 @@
Utils = require('Utils'),
LinkBuilder = require('LinkBuilder'),
kn = require('kn'),
kn = require('App:Knoin'),
AppSettings = require('../Storages/AppSettings.js'),
Data = require('../Storages/AdminDataStorage.js'),
Remote = require('../Storages/AdminAjaxRemoteStorage.js'),
Settings = require('Storage:Settings'),
Data = require('Storage:Admin:Data'),
Remote = require('Storage:Admin:Remote'),
AdminSettingsScreen = require('../Screens/AdminSettingsScreen.js'),
AdminLoginScreen = require('../Screens/AdminLoginScreen.js'),
AdminSettingsScreen = require('Screen:Admin:Settings'),
AdminLoginScreen = require('Screen:Admin:Login'),
AbstractApp = require('./AbstractApp.js')
AbstractApp = require('App:Abstract')
;
/**
@ -48,40 +48,40 @@
AdminApp.prototype.setupSettings = function ()
{
kn.addSettingsViewModel(require('../Settings/Admin/AdminSettingsGeneral.js'),
kn.addSettingsViewModel(require('Settings:Admin:General'),
'AdminSettingsGeneral', 'General', 'general', true);
kn.addSettingsViewModel(require('../Settings/Admin/AdminSettingsLogin.js'),
kn.addSettingsViewModel(require('Settings:Admin:Login'),
'AdminSettingsLogin', 'Login', 'login');
if (AppSettings.capa(Enums.Capa.Prem))
if (Settings.capa(Enums.Capa.Prem))
{
kn.addSettingsViewModel(require('../Settings/Admin/AdminSettingsBranding.js'),
kn.addSettingsViewModel(require('Settings:Admin:Branding'),
'AdminSettingsBranding', 'Branding', 'branding');
}
kn.addSettingsViewModel(require('../Settings/Admin/AdminSettingsContacts.js'),
kn.addSettingsViewModel(require('Settings:Admin:Contacts'),
'AdminSettingsContacts', 'Contacts', 'contacts');
kn.addSettingsViewModel(require('../Settings/Admin/AdminSettingsDomains.js'),
kn.addSettingsViewModel(require('Settings:Admin:Domains'),
'AdminSettingsDomains', 'Domains', 'domains');
kn.addSettingsViewModel(require('../Settings/Admin/AdminSettingsSecurity.js'),
kn.addSettingsViewModel(require('Settings:Admin:Security'),
'AdminSettingsSecurity', 'Security', 'security');
kn.addSettingsViewModel(require('../Settings/Admin/AdminSettingsSocial.js'),
kn.addSettingsViewModel(require('Settings:Admin:Social'),
'AdminSettingsSocial', 'Social', 'social');
kn.addSettingsViewModel(require('../Settings/Admin/AdminSettingsPlugins.js'),
kn.addSettingsViewModel(require('Settings:Admin:Plugins'),
'AdminSettingsPlugins', 'Plugins', 'plugins');
kn.addSettingsViewModel(require('../Settings/Admin/AdminSettingsPackages.js'),
kn.addSettingsViewModel(require('Settings:Admin:Packages'),
'AdminSettingsPackages', 'Packages', 'packages');
kn.addSettingsViewModel(require('../Settings/Admin/AdminSettingsLicensing.js'),
kn.addSettingsViewModel(require('Settings:Admin:Licensing'),
'AdminSettingsLicensing', 'Licensing', 'licensing');
kn.addSettingsViewModel(require('../Settings/Admin/AdminSettingsAbout.js'),
kn.addSettingsViewModel(require('Settings:Admin:About'),
'AdminSettingsAbout', 'About', 'about');
return true;
@ -283,7 +283,7 @@
kn.hideLoading();
if (!AppSettings.settingsGet('AllowAdminPanel'))
if (!Settings.settingsGet('AllowAdminPanel'))
{
kn.routeOff();
kn.setHash(LinkBuilder.root(), true);
@ -295,7 +295,7 @@
}
else
{
if (!!AppSettings.settingsGet('Auth'))
if (!!Settings.settingsGet('Auth'))
{
kn.startScreens([AdminSettingsScreen]);
}

View file

@ -18,30 +18,22 @@
LinkBuilder = require('LinkBuilder'),
Events = require('Events'),
kn = require('kn'),
kn = require('App:Knoin'),
LocalStorage = require('../Storages/LocalStorage.js'),
AppSettings = require('../Storages/AppSettings.js'),
Data = require('../Storages/WebMailDataStorage.js'),
Cache = require('../Storages/WebMailCacheStorage.js'),
Remote = require('../Storages/WebMailAjaxRemoteStorage.js'),
LocalStorage = require('Storage:LocalStorage'),
Settings = require('Storage:Settings'),
Data = require('Storage:RainLoop:Data'),
Cache = require('Storage:RainLoop:Cache'),
Remote = require('Storage:RainLoop:Remote'),
EmailModel = require('../Models/EmailModel.js'),
FolderModel = require('../Models/FolderModel.js'),
MessageModel = require('../Models/MessageModel.js'),
AccountModel = require('../Models/AccountModel.js'),
IdentityModel = require('../Models/IdentityModel.js'),
OpenPgpKeyModel = require('../Models/OpenPgpKeyModel.js'),
EmailModel = require('Model:Email'),
FolderModel = require('Model:Folder'),
MessageModel = require('Model:Message'),
AccountModel = require('Model:Account'),
IdentityModel = require('Model:Identity'),
OpenPgpKeyModel = require('Model:OpenPgpKey'),
PopupsFolderSystemViewModel = require('../ViewModels/Popups/PopupsAskViewModel.js'),
PopupsAskViewModel = require('../ViewModels/Popups/PopupsAskViewModel.js'),
PopupsComposeViewModel = require('../ViewModels/Popups/PopupsComposeViewModel.js'),
MailBoxScreen = require('../Screens/MailBoxScreen.js'),
SettingsScreen = require('../Screens/SettingsScreen.js'),
LoginScreen = require('../Screens/LoginScreen.js'),
AbstractApp = require('./AbstractApp.js')
AbstractApp = require('App:Abstract')
;
/**
@ -94,7 +86,7 @@
Remote.jsVersion(function (sResult, oData) {
if (Enums.StorageResultType.Success === sResult && oData && !oData.Result)
{
if (window.parent && !!AppSettings.settingsGet('InIframe'))
if (window.parent && !!Settings.settingsGet('InIframe'))
{
window.parent.location.reload();
}
@ -103,7 +95,7 @@
window.location.reload();
}
}
}, AppSettings.settingsGet('Version'));
}, Settings.settingsGet('Version'));
}, {}, 60 * 60 * 1000);
@ -125,70 +117,70 @@
RainLoopApp.prototype.setupSettings = function ()
{
kn.addSettingsViewModel(require('../Settings/App/SettingsGeneral.js'),
kn.addSettingsViewModel(require('Settings:RainLoop:General'),
'SettingsGeneral', 'SETTINGS_LABELS/LABEL_GENERAL_NAME', 'general', true);
if (AppSettings.settingsGet('ContactsIsAllowed'))
if (Settings.settingsGet('ContactsIsAllowed'))
{
kn.addSettingsViewModel(require('../Settings/App/SettingsContacts.js'),
kn.addSettingsViewModel(require('Settings:RainLoop:Contacts'),
'SettingsContacts', 'SETTINGS_LABELS/LABEL_CONTACTS_NAME', 'contacts');
}
if (AppSettings.capa(Enums.Capa.AdditionalAccounts))
if (Settings.capa(Enums.Capa.AdditionalAccounts))
{
kn.addSettingsViewModel(require('../Settings/App/SettingsAccounts.js'),
kn.addSettingsViewModel(require('Settings:RainLoop:Accounts'),
'SettingsAccounts', 'SETTINGS_LABELS/LABEL_ACCOUNTS_NAME', 'accounts');
}
if (AppSettings.capa(Enums.Capa.AdditionalIdentities))
if (Settings.capa(Enums.Capa.AdditionalIdentities))
{
kn.addSettingsViewModel(require('../Settings/App/SettingsIdentities.js'),
kn.addSettingsViewModel(require('Settings:RainLoop:Identities'),
'SettingsIdentities', 'SETTINGS_LABELS/LABEL_IDENTITIES_NAME', 'identities');
}
else
{
kn.addSettingsViewModel(require('../Settings/App/SettingsIdentity.js'),
kn.addSettingsViewModel(require('Settings:RainLoop:Identity'),
'SettingsIdentity', 'SETTINGS_LABELS/LABEL_IDENTITY_NAME', 'identity');
}
if (AppSettings.capa(Enums.Capa.Filters))
if (Settings.capa(Enums.Capa.Filters))
{
kn.addSettingsViewModel(require('../Settings/App/SettingsFilters.js'),
kn.addSettingsViewModel(require('Settings:RainLoop:Filters'),
'SettingsFilters', 'SETTINGS_LABELS/LABEL_FILTERS_NAME', 'filters');
}
if (AppSettings.capa(Enums.Capa.TwoFactor))
if (Settings.capa(Enums.Capa.TwoFactor))
{
kn.addSettingsViewModel(require('../Settings/App/SettingsSecurity.js'),
kn.addSettingsViewModel(require('Settings:RainLoop:Security'),
'SettingsSecurity', 'SETTINGS_LABELS/LABEL_SECURITY_NAME', 'security');
}
if (AppSettings.settingsGet('AllowGoogleSocial') ||
AppSettings.settingsGet('AllowFacebookSocial') ||
AppSettings.settingsGet('AllowTwitterSocial'))
if (Settings.settingsGet('AllowGoogleSocial') ||
Settings.settingsGet('AllowFacebookSocial') ||
Settings.settingsGet('AllowTwitterSocial'))
{
kn.addSettingsViewModel(require('../Settings/App/SettingsSocial.js'),
kn.addSettingsViewModel(require('Settings:RainLoop:Social'),
'SettingsSocial', 'SETTINGS_LABELS/LABEL_SOCIAL_NAME', 'social');
}
if (AppSettings.settingsGet('ChangePasswordIsAllowed'))
if (Settings.settingsGet('ChangePasswordIsAllowed'))
{
kn.addSettingsViewModel(require('../Settings/App/SettingsChangePassword.js'),
kn.addSettingsViewModel(require('Settings:RainLoop:ChangePassword'),
'SettingsChangePassword', 'SETTINGS_LABELS/LABEL_CHANGE_PASSWORD_NAME', 'change-password');
}
kn.addSettingsViewModel(require('../Settings/App/SettingsFolders.js'),
kn.addSettingsViewModel(require('Settings:RainLoop:Folders'),
'SettingsFolders', 'SETTINGS_LABELS/LABEL_FOLDERS_NAME', 'folders');
if (AppSettings.capa(Enums.Capa.Themes))
if (Settings.capa(Enums.Capa.Themes))
{
kn.addSettingsViewModel(require('../Settings/App/SettingsThemes.js'),
kn.addSettingsViewModel(require('Settings:RainLoop:Themes'),
'SettingsThemes', 'SETTINGS_LABELS/LABEL_THEMES_NAME', 'themes');
}
if (AppSettings.capa(Enums.Capa.OpenPGP))
if (Settings.capa(Enums.Capa.OpenPGP))
{
kn.addSettingsViewModel(require('../Settings/App/SettingsOpenPGP.js'),
kn.addSettingsViewModel(require('Settings:RainLoop:OpenPGP'),
'SettingsOpenPGP', 'SETTINGS_LABELS/LABEL_OPEN_PGP_NAME', 'openpgp');
}
@ -425,12 +417,12 @@
if (!oMoveFolder && bUseFolder)
{
kn.showScreenPopup(PopupsFolderSystemViewModel, [nSetSystemFoldersNotification]);
kn.showScreenPopup(require('View:Popup:FolderSystem'), [nSetSystemFoldersNotification]);
}
else if (!bUseFolder || (Enums.FolderType.Trash === iDeleteType &&
(sFromFolderFullNameRaw === Data.spamFolder() || sFromFolderFullNameRaw === Data.trashFolder())))
{
kn.showScreenPopup(PopupsAskViewModel, [Utils.i18n('POPUPS_ASK/DESC_WANT_DELETE_MESSAGES'), function () {
kn.showScreenPopup(require('View:Popup:Ask'), [Utils.i18n('POPUPS_ASK/DESC_WANT_DELETE_MESSAGES'), function () {
self.messagesDeleteHelper(sFromFolderFullNameRaw, aUidForRemove);
Data.removeMessagesFromList(sFromFolderFullNameRaw, aUidForRemove);
@ -561,7 +553,7 @@
if (Enums.StorageResultType.Success === sResult && oData.Result)
{
var
sParentEmail = AppSettings.settingsGet('ParentEmail'),
sParentEmail = Settings.settingsGet('ParentEmail'),
sAccountEmail = Data.accountEmail()
;
@ -1156,31 +1148,31 @@
Data.namespace = oData.Result.Namespace;
}
Data.threading(!!AppSettings.settingsGet('UseImapThread') && oData.Result.IsThreadsSupported && true);
Data.threading(!!Settings.settingsGet('UseImapThread') && oData.Result.IsThreadsSupported && true);
aList = this.folderResponseParseRec(Data.namespace, oData.Result['@Collection']);
Data.folderList(aList);
if (oData.Result['SystemFolders'] &&
'' === '' + AppSettings.settingsGet('SentFolder') + AppSettings.settingsGet('DraftFolder') +
AppSettings.settingsGet('SpamFolder') + AppSettings.settingsGet('TrashFolder') + AppSettings.settingsGet('ArchiveFolder') +
AppSettings.settingsGet('NullFolder'))
'' === '' + Settings.settingsGet('SentFolder') + Settings.settingsGet('DraftFolder') +
Settings.settingsGet('SpamFolder') + Settings.settingsGet('TrashFolder') + Settings.settingsGet('ArchiveFolder') +
Settings.settingsGet('NullFolder'))
{
// TODO Magic Numbers
AppSettings.settingsSet('SentFolder', oData.Result['SystemFolders'][2] || null);
AppSettings.settingsSet('DraftFolder', oData.Result['SystemFolders'][3] || null);
AppSettings.settingsSet('SpamFolder', oData.Result['SystemFolders'][4] || null);
AppSettings.settingsSet('TrashFolder', oData.Result['SystemFolders'][5] || null);
AppSettings.settingsSet('ArchiveFolder', oData.Result['SystemFolders'][12] || null);
Settings.settingsSet('SentFolder', oData.Result['SystemFolders'][2] || null);
Settings.settingsSet('DraftFolder', oData.Result['SystemFolders'][3] || null);
Settings.settingsSet('SpamFolder', oData.Result['SystemFolders'][4] || null);
Settings.settingsSet('TrashFolder', oData.Result['SystemFolders'][5] || null);
Settings.settingsSet('ArchiveFolder', oData.Result['SystemFolders'][12] || null);
bUpdate = true;
}
Data.sentFolder(fNormalizeFolder(AppSettings.settingsGet('SentFolder')));
Data.draftFolder(fNormalizeFolder(AppSettings.settingsGet('DraftFolder')));
Data.spamFolder(fNormalizeFolder(AppSettings.settingsGet('SpamFolder')));
Data.trashFolder(fNormalizeFolder(AppSettings.settingsGet('TrashFolder')));
Data.archiveFolder(fNormalizeFolder(AppSettings.settingsGet('ArchiveFolder')));
Data.sentFolder(fNormalizeFolder(Settings.settingsGet('SentFolder')));
Data.draftFolder(fNormalizeFolder(Settings.settingsGet('DraftFolder')));
Data.spamFolder(fNormalizeFolder(Settings.settingsGet('SpamFolder')));
Data.trashFolder(fNormalizeFolder(Settings.settingsGet('TrashFolder')));
Data.archiveFolder(fNormalizeFolder(Settings.settingsGet('ArchiveFolder')));
if (bUpdate)
{
@ -1327,7 +1319,7 @@
if (oEmailModel && oEmailModel.email)
{
oParams = Utils.simpleQueryParser(sQueryString);
kn.showScreenPopup(PopupsComposeViewModel, [Enums.ComposeType.Empty, null, [oEmailModel],
kn.showScreenPopup(require('View:Popup:Compose'), [Enums.ComposeType.Empty, null, [oEmailModel],
Utils.isUnd(oParams.subject) ? null : Utils.pString(oParams.subject),
Utils.isUnd(oParams.body) ? null : Utils.plainToHtml(Utils.pString(oParams.body))
]);
@ -1339,6 +1331,32 @@
return false;
};
RainLoopApp.prototype.bootstartLoginScreen = function ()
{
var sCustomLoginLink = Utils.pString(Settings.settingsGet('CustomLoginLink'));
if (!sCustomLoginLink)
{
kn.hideLoading();
kn.startScreens([
require('Screen:RainLoop:Login')
]);
Plugins.runHook('rl-start-login-screens');
Events.pub('rl.bootstart-login-screens');
}
else
{
kn.routeOff();
kn.setHash(LinkBuilder.root(), true);
kn.routeOff();
_.defer(function () {
window.location.href = sCustomLoginLink;
});
}
};
RainLoopApp.prototype.bootstart = function ()
{
AbstractApp.prototype.bootstart.call(this);
@ -1347,12 +1365,11 @@
var
self = this,
sCustomLoginLink = '',
sJsHash = AppSettings.settingsGet('JsHash'),
iContactsSyncInterval = Utils.pInt(AppSettings.settingsGet('ContactsSyncInterval')),
bGoogle = AppSettings.settingsGet('AllowGoogleSocial'),
bFacebook = AppSettings.settingsGet('AllowFacebookSocial'),
bTwitter = AppSettings.settingsGet('AllowTwitterSocial')
sJsHash = Settings.settingsGet('JsHash'),
iContactsSyncInterval = Utils.pInt(Settings.settingsGet('ContactsSyncInterval')),
bGoogle = Settings.settingsGet('AllowGoogleSocial'),
bFacebook = Settings.settingsGet('AllowFacebookSocial'),
bTwitter = Settings.settingsGet('AllowTwitterSocial')
;
Utils.initOnStartOrLangChange(function () {
@ -1385,7 +1402,7 @@
Events.pub('left-panel.' + (bValue ? 'off' : 'on'));
});
if (!!AppSettings.settingsGet('Auth'))
if (!!Settings.settingsGet('Auth'))
{
this.setTitle(Utils.i18n('TITLES/LOADING'));
@ -1395,7 +1412,7 @@
if (bValue)
{
if (window.$LAB && window.crypto && window.crypto.getRandomValues && AppSettings.capa(Enums.Capa.OpenPGP))
if (window.$LAB && window.crypto && window.crypto.getRandomValues && Settings.capa(Enums.Capa.OpenPGP))
{
window.$LAB.script(window.openpgp ? '' : LinkBuilder.openPgpJs()).wait(function () {
if (window.openpgp)
@ -1414,7 +1431,11 @@
Data.capaOpenPGP(false);
}
kn.startScreens([MailBoxScreen, SettingsScreen]);
kn.startScreens([
require('Screen:RainLoop:MailBox'),
require('Screen:RainLoop:Settings'),
require('Screen:RainLoop:About')
]);
if (bGoogle || bFacebook || bTwitter)
{
@ -1463,28 +1484,32 @@
Plugins.runHook('rl-start-user-screens');
Events.pub('rl.bootstart-user-screens');
if (!!AppSettings.settingsGet('AccountSignMe') && window.navigator.registerProtocolHandler)
if (!!Settings.settingsGet('AccountSignMe') && window.navigator.registerProtocolHandler)
{
_.delay(function () {
try {
window.navigator.registerProtocolHandler('mailto',
window.location.protocol + '//' + window.location.host + window.location.pathname + '?mailto&to=%s',
'' + (AppSettings.settingsGet('Title') || 'RainLoop'));
'' + (Settings.settingsGet('Title') || 'RainLoop'));
} catch(e) {}
if (AppSettings.settingsGet('MailToEmail'))
if (Settings.settingsGet('MailToEmail'))
{
self.mailToHelper(AppSettings.settingsGet('MailToEmail'));
self.mailToHelper(Settings.settingsGet('MailToEmail'));
}
}, 500);
}
if (!Globals.bMobileDevice)
{
_.defer(function () {
self.initLayoutResizer('#rl-left', '#rl-right', Enums.ClientSideKeyName.FolderListSize);
});
}
}
else
{
kn.startScreens([LoginScreen]);
Plugins.runHook('rl-start-login-screens');
Events.pub('rl.bootstart-login-screens');
self.bootstartLoginScreen();
}
if (window.SimplePace)
@ -1492,40 +1517,15 @@
window.SimplePace.set(100);
}
if (!Globals.bMobileDevice)
{
_.defer(function () {
self.initLayoutResizer('#rl-left', '#rl-right', Enums.ClientSideKeyName.FolderListSize);
});
}
}, this));
}
else
{
sCustomLoginLink = Utils.pString(AppSettings.settingsGet('CustomLoginLink'));
if (!sCustomLoginLink)
this.bootstartLoginScreen();
if (window.SimplePace)
{
kn.hideLoading();
kn.startScreens([LoginScreen]);
Plugins.runHook('rl-start-login-screens');
Events.pub('rl.bootstart-login-screens');
if (window.SimplePace)
{
window.SimplePace.set(100);
}
}
else
{
kn.routeOff();
kn.setHash(LinkBuilder.root(), true);
kn.routeOff();
_.defer(function () {
window.location.href = sCustomLoginLink;
});
window.SimplePace.set(100);
}
}