From 05099e883cf63e8e1f2df0dc565827e4b4643c3a Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Tue, 22 Jun 2021 00:43:55 +0300 Subject: [PATCH] [SSE] Protect workbook --- apps/common/main/lib/view/PasswordDialog.js | 18 +- .../main/app/controller/WBProtection.js | 14 +- .../main/app/view/ProtectDialog.js | 158 ++++++++++++++++++ 3 files changed, 169 insertions(+), 21 deletions(-) create mode 100644 apps/spreadsheeteditor/main/app/view/ProtectDialog.js diff --git a/apps/common/main/lib/view/PasswordDialog.js b/apps/common/main/lib/view/PasswordDialog.js index d8884ad71..862446e9c 100644 --- a/apps/common/main/lib/view/PasswordDialog.js +++ b/apps/common/main/lib/view/PasswordDialog.js @@ -55,23 +55,20 @@ define([ _.extend(_options, { width : 395, - height : options.height || 261, + height : 270, header : true, cls : 'modal-dlg', contentTemplate : '', - title : options.txtTitle || t.txtTitle, - passwordOptional: !!options.passwordOptional, - buttons: options.buttons || ['ok', 'cancel'] + title : t.txtTitle, + buttons: ['ok', 'cancel'] }, options); this.handler = options.handler; - this.passwordOptional = options.passwordOptional || false; - this.txtDescription = options.txtDescription || t.txtDescription; this.template = options.template || [ '
', - '
', + '
', '', '
', '
', @@ -99,7 +96,7 @@ define([ this.inputPwd = new Common.UI.InputField({ el: $('#id-password-txt'), type: 'password', - allowBlank : this.passwordOptional, + allowBlank : false, style : 'width: 100%;', maxLength: 255, validateOnBlur: false @@ -107,7 +104,7 @@ define([ this.repeatPwd = new Common.UI.InputField({ el: $('#id-repeat-txt'), type: 'password', - allowBlank : this.passwordOptional, + allowBlank : false, style : 'width: 100%;', maxLength: 255, validateOnBlur: false, @@ -159,8 +156,7 @@ define([ txtDescription : "A Password is required to open this document", txtRepeat: 'Repeat password', txtIncorrectPwd: 'Confirmation password is not identical', - txtWarning: 'Warning: If you lose or forget the password, it cannot be recovered. Please keep it in a safe place.', - txtOptional: 'Optional' + txtWarning: 'Warning: If you lose or forget the password, it cannot be recovered. Please keep it in a safe place.' }, Common.Views.PasswordDialog || {})); }); \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/app/controller/WBProtection.js b/apps/spreadsheeteditor/main/app/controller/WBProtection.js index ea885d7d8..d1fd83802 100644 --- a/apps/spreadsheeteditor/main/app/controller/WBProtection.js +++ b/apps/spreadsheeteditor/main/app/controller/WBProtection.js @@ -41,7 +41,8 @@ define([ 'core', 'common/main/lib/view/Protection', - 'spreadsheeteditor/main/app/view/WBProtection' + 'spreadsheeteditor/main/app/view/WBProtection', + 'spreadsheeteditor/main/app/view/ProtectDialog' ], function () { 'use strict'; @@ -107,17 +108,10 @@ define([ onWorkbookClick: function(state) { if (state) { var me = this, - win = new Common.Views.PasswordDialog({ - api: me.api, + win = new SSE.Views.ProtectDialog({ title: me.view.txtWBTitle, txtDescription: me.view.txtWBDescription, - passwordOptional: true, - height: 291, - buttons: [{ - value: 'ok', - caption: me.view.txtProtect - }, 'cancel'], - primary: 'ok', + height: 306, handler: function(result, props) { if (result == 'ok') { me.api.asc_setProtectedWorkbook(me.api.asc_getProtectedWorkbook()); diff --git a/apps/spreadsheeteditor/main/app/view/ProtectDialog.js b/apps/spreadsheeteditor/main/app/view/ProtectDialog.js new file mode 100644 index 000000000..b1068269b --- /dev/null +++ b/apps/spreadsheeteditor/main/app/view/ProtectDialog.js @@ -0,0 +1,158 @@ +/* + * + * (c) Copyright Ascensio System SIA 2010-2021 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha + * street, Riga, Latvia, EU, LV-1050. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * + */ +/** + * ProtectDialog.js + * + * Created by Julia Radzhabova on 21.06.2021 + * Copyright (c) 2021 Ascensio System SIA. All rights reserved. + * + */ + +define([ + 'common/main/lib/component/Window' +], function () { + 'use strict'; + + SSE.Views.ProtectDialog = Common.UI.Window.extend(_.extend({ + + initialize : function (options) { + var t = this, + _options = {}; + + _.extend(_options, { + width: 350, + cls: 'modal-dlg', + height : options.height || 306, + buttons: [{ + value: 'ok', + caption: this.txtProtect + }, 'cancel'] + }, options); + + this.handler = options.handler; + this.txtDescription = options.txtDescription || ''; + + this.template = options.template || [ + '
', + '
', + '', + '
', + '
', + '', + '
', + '
', + '
', + '', + '
', + '
', + '', + '
' + ].join(''); + + _options.tpl = _.template(this.template)(_options); + + Common.UI.Window.prototype.initialize.call(this, _options); + }, + render: function () { + Common.UI.Window.prototype.render.call(this); + + if (this.$window) { + var me = this; + this.$window.find('.dlg-btn').on('click', _.bind(this.onBtnClick, this)); + this.inputPwd = new Common.UI.InputField({ + el: $('#id-password-txt'), + type: 'password', + allowBlank : true, + style : 'width: 100%;', + maxLength: 255, + validateOnBlur: false + }); + this.repeatPwd = new Common.UI.InputField({ + el: $('#id-repeat-txt'), + type: 'password', + allowBlank : true, + style : 'width: 100%;', + maxLength: 255, + validateOnBlur: false, + validation : function(value) { + return me.txtIncorrectPwd; + } + }); + } + }, + + getFocusedComponents: function() { + return [this.inputPwd, this.repeatPwd]; + }, + + getDefaultFocusableComponent: function () { + return this.inputPwd; + }, + + onPrimary: function(event) { + this._handleInput('ok'); + return false; + }, + + onBtnClick: function(event) { + this._handleInput(event.currentTarget.attributes['result'].value); + }, + + _handleInput: function(state) { + if (this.handler) { + if (state == 'ok') { + if (this.inputPwd.checkValidate() !== true) { + this.inputPwd.focus(); + return; + } + if (this.inputPwd.getValue() !== this.repeatPwd.getValue()) { + this.repeatPwd.checkValidate(); + this.repeatPwd.focus(); + return; + } + } + this.handler.call(this, state, this.inputPwd.getValue()); + } + + this.close(); + }, + + txtPassword : "Password", + txtRepeat: 'Repeat password', + txtIncorrectPwd: 'Confirmation password is not identical', + txtWarning: 'Warning: If you lose or forget the password, it cannot be recovered. Please keep it in a safe place.', + txtOptional: 'optional', + txtProtect: 'Protect' + + }, SSE.Views.ProtectDialog || {})); +});