/** * @constructor */ function CLoginView() { CAbstractScreenView.call(this, '%ModuleName%'); this.sCustomLogoUrl = Settings.CustomLogoUrl; this.sInfoText = Settings.InfoText; this.sBottomInfoHtmlText = Settings.BottomInfoHtmlText; this.login = ko.observable(''); this.password = ko.observable(''); this.loginFocus = ko.observable(false); this.passwordFocus = ko.observable(false); this.loading = ko.observable(false); this.bUseSignMe = (Settings.LoginSignMeType === Enums.LoginSignMeType.Unuse); this.signMe = ko.observable(Enums.LoginSignMeType.DefaultOn === Settings.LoginSignMeType); this.signMeFocused = ko.observable(false); this.canBeLogin = ko.computed(function () { return !this.loading(); }, this); this.signInButtonText = ko.computed(function () { return this.loading() ? TextUtils.i18n('COREWEBCLIENT/ACTION_SIGN_IN_IN_PROGRESS') : TextUtils.i18n('COREWEBCLIENT/ACTION_SIGN_IN'); }, this); this.loginCommand = Utils.createCommand(this, this.signIn, this.canBeLogin); this.login(Settings.DemoLogin || ''); this.password(Settings.DemoPassword || ''); this.shake = ko.observable(false).extend({'autoResetToFalse': 800}); this.bRtl = UserSettings.IsRTL; this.aLanguages = UserSettings.LanguageList; this.currentLanguage = ko.observable(UserSettings.Language); this.bAllowChangeLanguage = Settings.AllowChangeLanguage && !App.isMobile(); this.bUseDropdownLanguagesView = Settings.UseDropdownLanguagesView; this.beforeButtonsControllers = ko.observableArray([]); App.broadcastEvent('AnonymousUserForm::PopulateBeforeButtonsControllers', { ModuleName: '%ModuleName%', RegisterBeforeButtonsController: this.registerBeforeButtonsController.bind(this) }); App.broadcastEvent('%ModuleName%::ConstructView::after', {'Name': this.ViewConstructorName, 'View': this}); }
/** * @constructor */ function CMailView() { CAbstractScreenView.call(this, '%ModuleName%'); App.broadcastEvent('%ModuleName%::ConstructView::before', {'Name': this.ViewConstructorName, 'View': this, 'MailCache': MailCache}); this.browserTitle = ko.computed(function () { return AccountList.getEmail() + ' - ' + TextUtils.i18n('%MODULENAME%/HEADING_BROWSER_TAB'); }); this.folderList = MailCache.folderList; this.domFoldersMoveTo = ko.observable(null); this.openMessageInNewWindowBound = _.bind(this.openMessageInNewWindow, this); this.oFolderList = new CFolderListView(); this.oMessageList = new CMessageListView(this.openMessageInNewWindowBound); this.oBaseMessagePaneView = MessagePaneView; this.messagePane = ko.observable(this.oBaseMessagePaneView); this.messagePane().openMessageInNewWindowBound = this.openMessageInNewWindowBound; this.messagePane.subscribe(function () { this.bindMessagePane(); }, this); this.isEnableGroupOperations = this.oMessageList.isEnableGroupOperations; this.composeLink = ko.observable(Routing.buildHashFromArray(LinksUtils.getCompose())); this.sCustomBigButtonModule = ''; this.fCustomBigButtonHandler = null; this.customBigButtonText = ko.observable(''); this.bigButtonCommand = Utils.createCommand(this, function () { if (_.isFunction(this.fCustomBigButtonHandler)) { this.fCustomBigButtonHandler(); } else { this.executeCompose(); } }); this.bigButtonText = ko.computed(function () { if (this.customBigButtonText() !== '') { return this.customBigButtonText(); } return TextUtils.i18n('%MODULENAME%/ACTION_NEW_MESSAGE'); }, this); this.checkMailCommand = Utils.createCommand(this, this.executeCheckMail); this.checkMailIndicator = ko.observable(true).extend({ throttle: 50 }); ko.computed(function () { this.checkMailIndicator(MailCache.checkMailStarted() || MailCache.messagesLoading()); }, this); this.customModulesDisabledMark = ko.observableArray([]); this.visibleMarkTool = ko.computed(function () { return !Types.isNonEmptyArray(this.customModulesDisabledMark()); }, this); this.markAsReadCommand = Utils.createCommand(this.oMessageList, this.oMessageList.executeMarkAsRead, this.isEnableGroupOperations); this.markAsUnreadCommand = Utils.createCommand(this.oMessageList, this.oMessageList.executeMarkAsUnread, this.isEnableGroupOperations); this.markAllReadCommand = Utils.createCommand(this.oMessageList, this.oMessageList.executeMarkAllRead); this.customModulesDisabledMove = ko.observableArray([]); this.visibleMoveTool = ko.computed(function () { return !Types.isNonEmptyArray(this.customModulesDisabledMove()); }, this); this.moveToFolderCommand = Utils.createCommand(this, function () {}, this.isEnableGroupOperations); // this.copyToFolderCommand = Utils.createCommand(this, function () {}, this.isEnableGroupOperations); this.deleteCommand = Utils.createCommand(this.oMessageList, this.oMessageList.executeDelete, this.isEnableGroupOperations); this.selectedCount = ko.computed(function () { return this.oMessageList.checkedUids().length; }, this); this.emptyTrashCommand = Utils.createCommand(MailCache, MailCache.executeEmptyTrash, this.oMessageList.isNotEmptyList); this.emptySpamCommand = Utils.createCommand(MailCache, MailCache.executeEmptySpam, this.oMessageList.isNotEmptyList); this.spamCommand = Utils.createCommand(this.oMessageList, this.oMessageList.executeSpam, this.isEnableGroupOperations); this.notSpamCommand = Utils.createCommand(this.oMessageList, this.oMessageList.executeNotSpam, this.isEnableGroupOperations); this.isVisibleReplyTool = ko.computed(function () { return (this.folderList().currentFolder() && this.folderList().currentFolderFullName().length > 0 && this.folderList().currentFolderType() !== Enums.FolderTypes.Drafts && this.folderList().currentFolderType() !== Enums.FolderTypes.Sent); }, this); this.isVisibleForwardTool = ko.computed(function () { return (this.folderList().currentFolder() && this.folderList().currentFolderFullName().length > 0 && this.folderList().currentFolderType() !== Enums.FolderTypes.Drafts); }, this); this.isSpamFolder = ko.computed(function () { return this.folderList().currentFolderType() === Enums.FolderTypes.Spam; }, this); this.customModulesDisabledSpam = ko.observableArray([]); this.allowedSpamAction = ko.computed(function () { return Settings.AllowSpamFolder && this.folderList().spamFolder() && !this.isSpamFolder() && !Types.isNonEmptyArray(this.customModulesDisabledSpam()); }, this); this.allowedNotSpamAction = ko.computed(function () { return Settings.AllowSpamFolder && this.isSpamFolder(); }, this); this.isTrashFolder = ko.computed(function () { return this.folderList().currentFolderType() === Enums.FolderTypes.Trash; }, this); this.jqPanelHelper = null; if (Settings.HorizontalLayout) { $('html').addClass('layout-horiz-split'); } App.broadcastEvent('%ModuleName%::ConstructView::after', {'Name': this.ViewConstructorName, 'View': this}); }
/** * @constructor * @param {boolean=} bPopup = false */ function CFilesView(bPopup) { CAbstractScreenView.call(this, '%ModuleName%'); this.browserTitle = ko.observable(TextUtils.i18n('%MODULENAME%/HEADING_BROWSER_TAB')); this.bAllowSendEmails = _.isFunction(ComposeMessageWithAttachments); this.error = ko.observable(false); this.loaded = ko.observable(false); this.bPublic = App.isPublic(); this.storages = ko.observableArray([]); this.folders = ko.observableArray(); this.files = ko.observableArray(); this.uploadingFiles = ko.observableArray(); this.rootPath = ko.observable(this.bPublic ? Settings.PublicFolderName : TextUtils.i18n('%MODULENAME%/LABEL_PERSONAL_STORAGE')); this.storageType = ko.observable(Enums.FileStorageType.Personal); this.storageDisplayName = ko.computed(function () { var oStorage = this.getStorageByType(this.storageType()); return oStorage ? oStorage.displayName : ''; }, this); this.storageType.subscribe(function () { if (this.bPublic) { this.rootPath(Settings.PublicFolderName); } else { var oStorage = this.getStorageByType(this.storageType()); if (oStorage) { this.rootPath(oStorage.displayName); } else if (this.storageType() === 'corporate') { this.rootPath(TextUtils.i18n('%MODULENAME%/LABEL_CORPORATE_STORAGE')); } this.selector.listCheckedAndSelected(false); } }, this); this.pathItems = ko.observableArray(); this.currentPath = ko.observable(''); this.dropPath = ko.observable(''); ko.computed(function () { this.dropPath(this.currentPath()); }, this); this.filesCollection = ko.computed(function () { var aFiles = _.union(this.files(), this.getUploadingFiles()); aFiles.sort(function(left, right) { return left.fileName() === right.fileName() ? 0 : (left.fileName() < right.fileName() ? -1 : 1); }); return aFiles; }, this); this.collection = ko.computed(function () { return _.union(this.folders(), this.filesCollection()); }, this); this.columnCount = ko.observable(1); this.selector = new CSelector(this.collection, _.bind(this.onItemSelect, this), _.bind(this.onItemDelete, this), _.bind(this.onItemDblClick, this), _.bind(this.onEnter, this), this.columnCount, true, true, true); this.firstSelectedFile = ko.computed(function () { return _.find(this.selector.listCheckedAndSelected(), function (oItem) { return oItem instanceof CFileModel; }); }, this); this.selectedCount = ko.computed(function () { return this.selector.listCheckedAndSelected().length; }, this); this.searchPattern = ko.observable(''); this.newSearchPattern = ko.observable(''); this.isSearchFocused = ko.observable(false); this.checkedReadyForOperations = ko.computed(function () { var aItems = this.selector.listCheckedAndSelected() || []; return aItems.every(function (oItem) { return !(oItem.uploaded !== undefined && oItem.uploaded() === false || oItem.downloading !== undefined && oItem.downloading() === true); }); }, this); this.renameCommand = Utils.createCommand(this, this.executeRename, function () { return this.checkedReadyForOperations() && this.selector.listCheckedAndSelected().length === 1 && !this.isDisabledRenameButton(); }); this.deleteCommand = Utils.createCommand(this, this.executeDelete, function () { return this.checkedReadyForOperations() && this.selector.listCheckedAndSelected().length > 0 && !this.isDisabledDeleteButton(); }); this.downloadCommand = Utils.createCommand(this, this.executeDownload, function () { if (this.checkedReadyForOperations()) { var oFile = this.getFileIfOnlyOneSelected(); return !!oFile && oFile.hasAction('download'); } return false; }); this.shareCommand = Utils.createCommand(this, this.executeShare, function () { var aItems = this.selector.listCheckedAndSelected(); return this.checkedReadyForOperations() && 1 === aItems.length && (!aItems[0].bIsLink); }); this.sendCommand = Utils.createCommand(this, this.executeSend, function () { if (this.checkedReadyForOperations()) { var aItems = this.selector.listCheckedAndSelected(), aFileItems = _.filter(aItems, function (oItem) { return oItem instanceof CFileModel; }, this) ; return (aFileItems.length > 0); } return false; }); this.uploaderButton = ko.observable(null); this.uploaderArea = ko.observable(null); this.bDragActive = ko.observable(false); this.bDragActiveComp = ko.computed(function () { var bDrag = this.bDragActive(); return bDrag && this.searchPattern() === ''; }, this); this.bAllowDragNDrop = false; this.uploadError = ko.observable(false); this.quota = ko.observable(0); this.used = ko.observable(0); this.quotaDesc = ko.observable(''); this.quotaProc = ko.observable(-1); ko.computed(function () { if (!UserSettings.ShowQuotaBar) { return true; } var iQuota = this.quota(), iUsed = this.used(), iProc = 0 < iQuota ? Math.ceil((iUsed / iQuota) * 100) : -1 ; iProc = 100 < iProc ? 100 : iProc; this.quotaProc(iProc); this.quotaDesc(-1 < iProc ? TextUtils.i18n('COREWEBCLIENT/INFO_QUOTA', { 'PROC': iProc, 'QUOTA': TextUtils.getFriendlySize(iQuota) }) : '') ; if (UserSettings.QuotaWarningPerc > 0 && iProc !== -1 && UserSettings.QuotaWarningPerc > (100 - iProc)) { Screens.showError(TextUtils.i18n('COREWEBCLIENT/WARNING_QUOTA_ALMOST_REACHED'), true); } }, this); this.dragover = ko.observable(false); this.loading = ko.observable(false); this.loadedFiles = ko.observable(false); this.fileListInfoText = ko.computed(function () { var sInfoText = ''; if (this.loading()) { sInfoText = TextUtils.i18n('COREWEBCLIENT/INFO_LOADING'); } else if (this.loadedFiles()) { if (this.collection().length === 0) { if (this.searchPattern() !== '') { sInfoText = TextUtils.i18n('%MODULENAME%/INFO_NOTHING_FOUND'); } else { if (this.currentPath() !== '' || this.bInPopup || this.bPublic) { sInfoText = TextUtils.i18n('%MODULENAME%/INFO_FOLDER_IS_EMPTY'); } else if (this.bAllowDragNDrop) { sInfoText = TextUtils.i18n('%MODULENAME%/INFO_DRAGNDROP_FILES_OR_CREATE_FOLDER'); } } } } else if (this.error()) { sInfoText = TextUtils.i18n('%MODULENAME%/ERROR_FILES_NOT_RECEIVED'); } return sInfoText; }, this); this.dragAndDropHelperBound = _.bind(this.dragAndDropHelper, this); this.bInPopup = !!bPopup; this.isCurrentStorageExternal = ko.computed(function () { var oStorage = this.getStorageByType(this.storageType()); return (oStorage && oStorage.isExternal); }, this); this.timerId = null; var oParams = { 'View': this, 'TemplateName': '%ModuleName%_ItemsView' }; this.itemsViewTemplate = ko.observable(oParams.TemplateName); App.broadcastEvent('Files::ChangeItemsView', oParams); this.addToolbarButtons = ko.observableArray([]); App.subscribeEvent('Files::ShowList', _.bind(function (oParams) { if (oParams.Item) { this.routeFiles(oParams.Item.storageType(), oParams.Item.fullPath()); } }, this)); App.broadcastEvent('%ModuleName%::ConstructView::after', {'Name': this.ViewConstructorName, 'View': this}); ConfirmPopup.opened.subscribe(_.bind(function() { if (this.shown()) { this.selector.useKeyboardKeys(true); } }, this)); this.createFolderButtonModules = ko.observableArray([]); //list of modules that disable "create folder" button this.renameButtonModules = ko.observableArray([]); //list of modules that disable "rename" button this.deleteButtonModules = ko.observableArray([]); //list of modules that disable "delete" button this.shortcutButtonModules = ko.observableArray([]); //list of modules that disable "shortcut" button this.isDisabledCreateFolderButton = ko.computed(function () { return this.createFolderButtonModules().length > 0; }, this); this.isDisabledRenameButton = ko.computed(function () { return this.renameButtonModules().length > 0; }, this); this.isDisabledDeleteButton = ko.computed(function () { return this.deleteButtonModules().length > 0; }, this); this.isDisabledShortcutButton = ko.computed(function () { return this.shortcutButtonModules().length > 0; }, this); this.createFolderCommand = Utils.createCommand(this, this.executeCreateFolder, function () { return !this.isDisabledCreateFolderButton(); }); this.createShortcutCommand = Utils.createCommand(this, this.executeCreateShortcut, function () { return !this.isDisabledShortcutButton(); }); }