/* RainLoop Webmail (c) RainLoop Team | Licensed under CC BY-NC-SA 3.0 */ /** * @constructor * @extends KnoinAbstractViewModel */ function PopupsPluginViewModel() { KnoinAbstractViewModel.call(this, 'Popups', 'PopupsPlugin'); var self = this; this.onPluginSettingsUpdateResponse = _.bind(this.onPluginSettingsUpdateResponse, this); this.saveError = ko.observable(''); this.name = ko.observable(''); this.readme = ko.observable(''); this.configures = ko.observableArray([]); this.hasReadme = ko.computed(function () { return '' !== this.readme(); }, this); this.hasConfiguration = ko.computed(function () { return 0 < this.configures().length; }, this); this.readmePopoverConf = { 'placement': 'top', 'trigger': 'hover', 'title': 'About', 'content': function () { return self.readme(); } }; this.saveCommand = Utils.createCommand(this, function () { var oList = {}; oList['Name'] = this.name(); _.each(this.configures(), function (oItem) { var mValue = oItem.value(); if (false === mValue || true === mValue) { mValue = mValue ? '1' : '0'; } oList['_' + oItem['Name']] = mValue; }, this); this.saveError(''); RL.remote().pluginSettingsUpdate(this.onPluginSettingsUpdateResponse, oList); }, this.hasConfiguration); Knoin.constructorEnd(this); } Utils.extendAsViewModel('PopupsPluginViewModel', PopupsPluginViewModel); PopupsPluginViewModel.prototype.onPluginSettingsUpdateResponse = function (sResult, oData) { if (Enums.StorageResultType.Success === sResult && oData && oData.Result) { this.cancelCommand(); } else { this.saveError(''); if (oData && oData.ErrorCode) { this.saveError(Utils.getNotification(oData.ErrorCode)); } else { this.saveError(Utils.getNotification(Enums.Notification.CantSavePluginSettings)); } } }; PopupsPluginViewModel.prototype.onShow = function (oPlugin) { this.name(); this.readme(); this.configures([]); if (oPlugin) { this.name(oPlugin['Name']); this.readme(oPlugin['Readme']); var aConfig = oPlugin['Config']; if (Utils.isNonEmptyArray(aConfig)) { this.configures(_.map(aConfig, function (aItem) { return { 'value': ko.observable(aItem[0]), 'Name': aItem[1], 'Type': aItem[2], 'Label': aItem[3], 'Default': aItem[4], 'Desc': aItem[5] }; })); } } }; PopupsPluginViewModel.prototype.tryToClosePopup = function () { var self = this; kn.showScreenPopup(PopupsAskViewModel, [Utils.i18n('POPUPS_ASK/DESC_WANT_CLOSE_THIS_WINDOW'), function () { if (self.modalVisibility()) { Utils.delegateRun(self, 'cancelCommand'); } }]); }; PopupsPluginViewModel.prototype.onBuild = function () { var self = this; $window.on('keydown', function (oEvent) { var bResult = true; if (oEvent && Enums.EventKeyCode.Esc === oEvent.keyCode && self.modalVisibility()) { self.tryToClosePopup(); bResult = false; } return bResult; }); };