From ca9b1bcf224959b55dbbd92dfed9acbfbb0a6c4a Mon Sep 17 00:00:00 2001 From: Julia Radzhabova <julia.radzhabova@onlyoffice.com> Date: Wed, 21 Sep 2022 17:15:33 +0300 Subject: [PATCH 01/28] [DE] Add document protection --- apps/documenteditor/main/app.js | 2 + .../main/app/controller/DocProtection.js | 203 +++++++++++++++ .../main/app/controller/Main.js | 4 +- .../main/app/controller/Toolbar.js | 23 +- .../main/app/view/DocProtection.js | 130 ++++++++++ .../main/app/view/ProtectDialog.js | 237 ++++++++++++++++++ apps/documenteditor/main/app_dev.js | 2 + 7 files changed, 593 insertions(+), 8 deletions(-) create mode 100644 apps/documenteditor/main/app/controller/DocProtection.js create mode 100644 apps/documenteditor/main/app/view/DocProtection.js create mode 100644 apps/documenteditor/main/app/view/ProtectDialog.js diff --git a/apps/documenteditor/main/app.js b/apps/documenteditor/main/app.js index 190281919..4d7b05f6d 100644 --- a/apps/documenteditor/main/app.js +++ b/apps/documenteditor/main/app.js @@ -157,6 +157,7 @@ require([ 'Main', 'ViewTab', 'Search', + 'DocProtection', 'Common.Controllers.Fonts', 'Common.Controllers.History' /** coauthoring begin **/ @@ -191,6 +192,7 @@ require([ 'documenteditor/main/app/controller/Main', 'documenteditor/main/app/controller/ViewTab', 'documenteditor/main/app/controller/Search', + 'documenteditor/main/app/controller/DocProtection', 'documenteditor/main/app/view/FileMenuPanels', 'documenteditor/main/app/view/ParagraphSettings', 'documenteditor/main/app/view/HeaderFooterSettings', diff --git a/apps/documenteditor/main/app/controller/DocProtection.js b/apps/documenteditor/main/app/controller/DocProtection.js new file mode 100644 index 000000000..c5202176f --- /dev/null +++ b/apps/documenteditor/main/app/controller/DocProtection.js @@ -0,0 +1,203 @@ +/* + * + * (c) Copyright Ascensio System SIA 2010-2022 + * + * 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 + * + */ + +/** + * DocProtection.js + * + * Created by Julia Radzhabova on 21.09.2022 + * Copyright (c) 2022 Ascensio System SIA. All rights reserved. + * + */ +define([ + 'core', + 'common/main/lib/view/Protection', + 'documenteditor/main/app/view/DocProtection', + 'documenteditor/main/app/view/ProtectDialog' +], function () { + 'use strict'; + + if (!Common.enumLock) + Common.enumLock = {}; + + var enumLock = { + docLockView: 'lock-mode-view', + docLockForms: 'lock-mode-forms', + docLockReview: 'lock-mode-review', + docLockComments: 'lock-mode-comments' + }; + for (var key in enumLock) { + if (enumLock.hasOwnProperty(key)) { + Common.enumLock[key] = enumLock[key]; + } + } + + DE.Controllers.DocProtection = Backbone.Controller.extend(_.extend({ + models : [], + collections : [ + ], + views : [ + 'DocProtection' + ], + + initialize: function () { + + this.addListeners({ + 'DocProtection': { + 'protect:document': _.bind(this.onProtectDocClick, this) + } + }); + }, + onLaunch: function () { + this._state = {}; + Common.NotificationCenter.on('app:ready', this.onAppReady.bind(this)); + }, + setConfig: function (data, api) { + this.setApi(api); + }, + setApi: function (api) { + if (api) { + this.api = api; + this.api.asc_registerCallback('asc_onChangeProtectDocument',_.bind(this.onChangeProtectDocument, this)); + } + }, + + setMode: function(mode) { + this.appConfig = mode; + + this.appConfig.isEdit && (this.view = this.createView('DocProtection', { + mode: mode + })); + + return this; + }, + + createToolbarPanel: function() { + if (this.view) + return this.view.getPanel(); + }, + + getView: function(name) { + return !name && this.view ? + this.view : Backbone.Controller.prototype.getView.call(this, name); + }, + + onProtectDocClick: function(state) { + this.view.btnProtectDoc.toggle(!state, true); + if (state) { + var me = this, + btn, + win = new DE.Views.ProtectDialog({ + handler: function(result, value, props) { + btn = result; + if (result == 'ok') { + // var props = me.api.asc_getProtectedDocument(); + // props.asc_setLockMode(props); + // props.asc_setLockPwd(value); + // me.api.asc_setProtectedDocument(props); + } + Common.NotificationCenter.trigger('edit:complete'); + } + }).on('close', function() { + if (btn!=='ok') + me.view.btnProtectDoc.toggle(false, true); + }); + + win.show(); + } else { + var me = this, + btn, + props = me.api.asc_getProtectedDocument(); + if (props.asc_isPassword()) { + var win = new Common.Views.OpenDialog({ + title: me.view.txtWBUnlockTitle, + closable: true, + type: Common.Utils.importTextType.DRM, + txtOpenFile: me.view.txtWBUnlockDescription, + validatePwd: false, + handler: function (result, value) { + btn = result; + if (result == 'ok') { + if (me.api) { + // props.asc_setLockPwd(value && value.drmOptions ? value.drmOptions.asc_getPassword() : undefined); + // me.api.asc_setProtectedDocument(props); + } + Common.NotificationCenter.trigger('edit:complete'); + } + } + }).on('close', function() { + if (btn!=='ok') + me.view.btnProtectDoc.toggle(true, true); + }); + + win.show(); + } else { + props.asc_setLockPwd(); + me.api.asc_setProtectedDocument(props); + } + } + }, + + onAppReady: function (config) { + if (!this.view) return; + + var me = this; + (new Promise(function (resolve) { + resolve(); + })).then(function () { + // me.view.btnProtectDoc.toggle(me.api.asc_isProtectedDocument(), true); + }); + }, + + onChangeProtectDocument: function() { + // this.view && this.view.btnProtectDoc.toggle(this.api.asc_isProtectedDocument(), true); + }, + + getDocProps: function(update) { + if (!this.appConfig || !this.appConfig.isEdit && !this.appConfig.isRestrictedEdit) return; + + if (update || !this._state.protection) { + var docProtected = !!this.api.asc_isProtectedDocument(), + type; + + if (docProtected) { + var props = this.api.asc_getProtectedDocument(); + type = props.asc_getLockMode(); + } + this._state.protection = {docLock: docProtected, lockMode: type}; + } + + return this._state.protection; + } + + }, DE.Controllers.DocProtection || {})); +}); \ No newline at end of file diff --git a/apps/documenteditor/main/app/controller/Main.js b/apps/documenteditor/main/app/controller/Main.js index 9af86ff56..a0fdd0c70 100644 --- a/apps/documenteditor/main/app/controller/Main.js +++ b/apps/documenteditor/main/app/controller/Main.js @@ -1700,8 +1700,8 @@ define([ fontsControllers && fontsControllers.setApi(me.api); rightmenuController && rightmenuController.setApi(me.api); - if (this.appOptions.canProtect) - application.getController('Common.Controllers.Protection').setMode(me.appOptions).setConfig({config: me.editorConfig}, me.api); + application.getController('Common.Controllers.Protection').setMode(me.appOptions).setConfig({config: me.editorConfig}, me.api); + application.getController('DocProtection').setMode(me.appOptions).setConfig({config: me.editorConfig}, me.api); var viewport = this.getApplication().getController('Viewport').getView('Viewport'); diff --git a/apps/documenteditor/main/app/controller/Toolbar.js b/apps/documenteditor/main/app/controller/Toolbar.js index 6812ef505..94aaaf698 100644 --- a/apps/documenteditor/main/app/controller/Toolbar.js +++ b/apps/documenteditor/main/app/controller/Toolbar.js @@ -3203,13 +3203,24 @@ define([ me.toolbar.processPanelVisible(null, true, true); } - if ( config.isDesktopApp ) { - if ( config.canProtect ) { - tab = {action: 'protect', caption: me.toolbar.textTabProtect, dataHintTitle: 'T', layoutname: 'toolbar-protect'}; - $panel = me.getApplication().getController('Common.Controllers.Protection').createToolbarPanel(); + // if ( config.isDesktopApp ) { + // if ( config.canProtect ) { + // tab = {action: 'protect', caption: me.toolbar.textTabProtect, dataHintTitle: 'T', layoutname: 'toolbar-protect'}; + // $panel = me.getApplication().getController('Common.Controllers.Protection').createToolbarPanel(); + // + // if ($panel) me.toolbar.addTab(tab, $panel, 6); + // } + // } - if ($panel) me.toolbar.addTab(tab, $panel, 6); - } + tab = {action: 'protect', caption: me.toolbar.textTabProtect, layoutname: 'toolbar-protect', dataHintTitle: 'T'}; + $panel = me.getApplication().getController('Common.Controllers.Protection').createToolbarPanel(); + if ($panel) { + config.canProtect && $panel.append($('<div class="separator long"></div>')); + var doctab = me.getApplication().getController('DocProtection'); + $panel.append(doctab.createToolbarPanel()); + me.toolbar.addTab(tab, $panel, 6); + me.toolbar.setVisible('protect', Common.UI.LayoutManager.isElementVisible('toolbar-protect')); + Array.prototype.push.apply(me.toolbar.lockControls, doctab.getView('DocProtection').getButtons()); } var links = me.getApplication().getController('Links'); diff --git a/apps/documenteditor/main/app/view/DocProtection.js b/apps/documenteditor/main/app/view/DocProtection.js new file mode 100644 index 000000000..3f4916175 --- /dev/null +++ b/apps/documenteditor/main/app/view/DocProtection.js @@ -0,0 +1,130 @@ +/* + * + * (c) Copyright Ascensio System SIA 2010-2022 + * + * 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 + * + */ + +/** + * DocProtection.js + * + * Created by Julia Radzhabova on 21.09.2022 + * Copyright (c) 2022 Ascensio System SIA. All rights reserved. + * + */ +define([ + 'common/main/lib/util/utils', + 'common/main/lib/component/BaseView', + 'common/main/lib/component/Layout', + 'common/main/lib/component/Window' +], function (template) { + 'use strict'; + + DE.Views.DocProtection = Common.UI.BaseView.extend(_.extend((function(){ + var template = + '<div class="group">' + + '<span id="slot-btn-protect-doc" class="btn-slot text x-huge"></span>' + + '</div>'; + + function setEvents() { + var me = this; + + this.btnProtectDoc.on('click', function (btn, e) { + me.fireEvent('protect:document', [btn.pressed]); + }); + me._isSetEvents = true; + } + + return { + + options: {}, + + initialize: function (options) { + Common.UI.BaseView.prototype.initialize.call(this, options); + + this.appConfig = options.mode; + + var _set = Common.enumLock; + this.lockedControls = []; + this._state = {disabled: false}; + + this.btnProtectDoc = new Common.UI.Button({ + cls: 'btn-toolbar x-huge icon-top', + iconCls: 'toolbar__icon protect-workbook', + enableToggle: true, + caption: this.txtProtectDoc, + lock : [_set.lostConnect, _set.coAuth], + dataHint : '1', + dataHintDirection: 'bottom', + dataHintOffset: 'small' + }); + this.lockedControls.push(this.btnProtectDoc); + + Common.NotificationCenter.on('app:ready', this.onAppReady.bind(this)); + }, + + render: function (el) { + return this; + }, + + onAppReady: function (config) { + var me = this; + (new Promise(function (accept, reject) { + accept(); + })).then(function(){ + me.btnProtectDoc.updateHint(me.hintProtectDoc); + setEvents.call(me); + }); + }, + + getPanel: function () { + this.$el = $(_.template(template)( {} )); + + this.btnProtectDoc.render(this.$el.find('#slot-btn-protect-doc')); + return this.$el; + }, + + getButtons: function(type) { + if (type===undefined) + return this.lockedControls; + return []; + }, + + show: function () { + Common.UI.BaseView.prototype.show.call(this); + this.fireEvent('show', this); + }, + + txtProtectDoc: 'Protect Document', + txtDocUnlockTitle: 'Unprotect Document', + hintProtectDoc: 'Protect document', + txtDocUnlockDescription: 'Enter a password to unprotect document' + } + }()), DE.Views.DocProtection || {})); +}); \ No newline at end of file diff --git a/apps/documenteditor/main/app/view/ProtectDialog.js b/apps/documenteditor/main/app/view/ProtectDialog.js new file mode 100644 index 000000000..bebe37ef4 --- /dev/null +++ b/apps/documenteditor/main/app/view/ProtectDialog.js @@ -0,0 +1,237 @@ +/* + * + * (c) Copyright Ascensio System SIA 2010-2022 + * + * 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.09.2022 + * Copyright (c) 2022 Ascensio System SIA. All rights reserved. + * + */ + +define([ + 'common/main/lib/component/Window' +], function () { + 'use strict'; + + Asc.c_oAscProtection = { + View: 1, + Forms: 2, + Review: 3, + Comments: 4 + }; + DE.Views.ProtectDialog = Common.UI.Window.extend(_.extend({ + + initialize : function (options) { + var t = this, + _options = {}; + + _.extend(_options, { + title: options.title ? options.title : this.txtTitle, + cls: 'modal-dlg', + width: 350, + height: 'auto', + buttons: options.buttons ? options.buttons : [{ + value: 'ok', + caption: this.txtProtect + }, 'cancel'] + }, options); + + this.handler = options.handler; + this.txtDescription = options.txtDescription || ''; + this.props = options.props; + this.isEdit = options.isEdit; + this.api = options.api; + + this.template = options.template || [ + '<div class="box">', + '<div class="input-row">', + '<label>' + t.txtPassword + ' (' + t.txtOptional + ')' + '</label>', + '</div>', + '<div id="id-protect-password-txt" class="input-row" style="margin-bottom: 5px;"></div>', + '<div class="input-row">', + '<label>' + t.txtRepeat + '</label>', + '</div>', + '<div id="id-protect-repeat-txt" class="input-row" style="margin-bottom: 10px;"></div>', + '<div class="input-row" style="margin-bottom: 5px;">', + '<label style="font-weight: bold;letter-spacing: 0.01em;margin-bottom: 5px;">' + t.txtAllow + '</label>', + '</div>', + '<div id="id-protect-radio-view" style="margin-bottom: 8px;"></div>', + '<div id="id-protect-radio-forms" style="margin-bottom: 8px;"></div>', + '<div id="id-protect-radio-review" style="margin-bottom: 8px;"></div>', + '<div id="id-protect-radio-comment" style="margin-bottom: 8px;"></div>', + '<label>' + t.txtWarning + '</label>', + '</div>' + ].join(''); + + _options.tpl = _.template(this.template)(_options); + + Common.UI.Window.prototype.initialize.call(this, _options); + }, + render: function () { + Common.UI.Window.prototype.render.call(this); + + var me = this; + this.$window.find('.dlg-btn').on('click', _.bind(this.onBtnClick, this)); + + this.repeatPwd = new Common.UI.InputField({ + el: this.$window.find('#id-protect-repeat-txt'), + type: 'password', + allowBlank : true, + style : 'width: 100%;', + maxLength: 255, + validateOnBlur: false, + validation : function(value) { + return me.txtIncorrectPwd; + } + }); + + this.inputPwd = new Common.UI.InputFieldBtnPassword({ + el: this.$window.find('#id-protect-password-txt'), + type: 'password', + allowBlank : true, + style : 'width: 100%;', + maxLength: 255, + validateOnBlur: false, + repeatInput: this.repeatPwd, + showPwdOnClick: true + }); + + this.rbView = new Common.UI.RadioBox({ + el: this.$window.find('#id-protect-radio-view'), + labelText: this.textView, + name: 'asc-radio-protect-mode', + value: Asc.c_oAscProtection.View, + checked: true + }); + + this.rbForms = new Common.UI.RadioBox({ + el: this.$window.find('#id-protect-radio-forms'), + labelText: this.textForms, + name: 'asc-radio-protect-mode', + value: Asc.c_oAscProtection.Forms + }); + + this.rbReview = new Common.UI.RadioBox({ + el: this.$window.find('#id-protect-radio-review'), + labelText: this.textReview, + name: 'asc-radio-protect-mode', + value: Asc.c_oAscProtection.Review + }); + + this.rbComments = new Common.UI.RadioBox({ + el: this.$window.find('#id-protect-radio-comment'), + labelText: this.textComments, + name: 'asc-radio-protect-mode', + value: Asc.c_oAscProtection.Comments + }); + + this.afterRender(); + }, + + getFocusedComponents: function() { + return [this.inputPwd, this.repeatPwd, this.rbView, this.rbForms, this.rbReview, this.rbComments]; + }, + + getDefaultFocusableComponent: function () { + return this.inputPwd; + }, + + afterRender: function() { + this._setDefaults(this.props); + }, + + 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(), (state == 'ok') ? this.getSettings() : undefined); + } + + this.close(); + }, + + _setDefaults: function (props) { + if (props) { + var type = props.asc_getType(); + switch (type) { + case Asc.c_oAscProtection.Forms: this.rbForms.setValue(true, true); break; + case Asc.c_oAscProtection.Review: this.rbReview.setValue(true, true); break; + case Asc.c_oAscProtection.Comments: this.rbComments.setValue(true, true); break; + } + } + }, + + getSettings: function() { + if (this.rbView.getValue()) + return Asc.c_oAscProtection.View; + if (this.rbForms.getValue()) + return Asc.c_oAscProtection.Forms; + if (this.rbReview.getValue()) + return Asc.c_oAscProtection.Review; + if (this.rbComments.getValue()) + return Asc.c_oAscProtection.Comments; + }, + + txtPassword : "Password", + txtRepeat: 'Repeat password', + txtOptional: 'optional', + 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.', + txtProtect: 'Protect', + txtTitle: 'Protect', + txtAllow: 'Allow only this type of editing in the document', + textView: 'No changes (Read only)', + textForms: 'Filling forms', + textReview: 'Tracked changes', + textComments: 'Comments' + + }, DE.Views.ProtectDialog || {})); +}); diff --git a/apps/documenteditor/main/app_dev.js b/apps/documenteditor/main/app_dev.js index 242a4d947..89276f32b 100644 --- a/apps/documenteditor/main/app_dev.js +++ b/apps/documenteditor/main/app_dev.js @@ -147,6 +147,7 @@ require([ 'Main', 'ViewTab', 'Search', + 'DocProtection', 'Common.Controllers.Fonts', 'Common.Controllers.History' /** coauthoring begin **/ @@ -181,6 +182,7 @@ require([ 'documenteditor/main/app/controller/Main', 'documenteditor/main/app/controller/ViewTab', 'documenteditor/main/app/controller/Search', + 'documenteditor/main/app/controller/DocProtection', 'documenteditor/main/app/view/FileMenuPanels', 'documenteditor/main/app/view/ParagraphSettings', 'documenteditor/main/app/view/HeaderFooterSettings', From b898aee9279dfba5fd1f8786a0186f3aa531b1bf Mon Sep 17 00:00:00 2001 From: Julia Radzhabova <julia.radzhabova@onlyoffice.com> Date: Fri, 23 Sep 2022 15:13:58 +0300 Subject: [PATCH 02/28] [DE] Lock controls when document is protected (read only mode) --- .../main/lib/controller/ReviewChanges.js | 16 +++ apps/common/main/lib/view/ReviewChanges.js | 26 ++-- .../main/app/controller/DocProtection.js | 51 ++++++-- .../main/app/controller/DocumentHolder.js | 29 ++++- .../main/app/controller/FormsTab.js | 16 +++ .../main/app/controller/Links.js | 15 +++ .../main/app/controller/PageLayout.js | 18 ++- .../main/app/controller/RightMenu.js | 31 ++++- .../main/app/controller/Statusbar.js | 10 +- .../main/app/controller/Toolbar.js | 17 ++- .../main/app/view/DocProtection.js | 2 +- .../main/app/view/DocumentHolder.js | 9 +- apps/documenteditor/main/app/view/FormsTab.js | 28 ++-- apps/documenteditor/main/app/view/Links.js | 20 +-- .../main/app/view/ProtectDialog.js | 6 - .../documenteditor/main/app/view/Statusbar.js | 17 ++- apps/documenteditor/main/app/view/Toolbar.js | 122 +++++++++--------- 17 files changed, 292 insertions(+), 141 deletions(-) diff --git a/apps/common/main/lib/controller/ReviewChanges.js b/apps/common/main/lib/controller/ReviewChanges.js index 9cd921188..d25d1a9c6 100644 --- a/apps/common/main/lib/controller/ReviewChanges.js +++ b/apps/common/main/lib/controller/ReviewChanges.js @@ -111,6 +111,7 @@ define([ Common.NotificationCenter.on('collaboration:sharing', this.changeAccessRights.bind(this)); Common.NotificationCenter.on('collaboration:sharingdeny', this.onLostEditRights.bind(this)); Common.NotificationCenter.on('protect:wslock', _.bind(this.onChangeProtectSheet, this)); + Common.NotificationCenter.on('protect:doclock', _.bind(this.onChangeProtectDocument, this)); this.userCollection.on('reset', _.bind(this.onUpdateUsers, this)); this.userCollection.on('add', _.bind(this.onUpdateUsers, this)); @@ -890,6 +891,7 @@ define([ }); } me.onChangeProtectSheet(); + me.onChangeProtectDocument(); if (me.view) { me.lockToolbar(Common.enumLock.hideComments, !Common.localStorage.getBool(me.view.appPrefix + "settings-livecomment", true), {array: [me.view.btnCommentRemove, me.view.btnCommentResolve]}); me.lockToolbar(Common.enumLock['Objects'], !!this._state.wsProps['Objects'], {array: [me.view.btnCommentRemove, me.view.btnCommentResolve]}); @@ -1011,6 +1013,20 @@ define([ this.lockToolbar(Common.enumLock['Objects'], !!this._state.wsProps['Objects'], {array: [this.view.btnCommentRemove, this.view.btnCommentResolve]}); }, + onChangeProtectDocument: function(props) { + if (!props) { + var docprotect = this.getApplication().getController('DocProtection'); + props = docprotect ? docprotect.getDocProps() : null; + } + if (props) { + this._state.docProtection = props; + this.lockToolbar(Common.enumLock.docLockView, props.docLock && (props.lockMode===Asc.c_oAscProtection.View)); + this.lockToolbar(Common.enumLock.docLockForms, props.docLock && (props.lockMode===Asc.c_oAscProtection.Forms)); + this.lockToolbar(Common.enumLock.docLockReview, props.docLock && (props.lockMode===Asc.c_oAscProtection.Review)); + this.lockToolbar(Common.enumLock.docLockComments, props.docLock && (props.lockMode===Asc.c_oAscProtection.Comments)); + } + }, + textInserted: '<b>Inserted:</b>', textDeleted: '<b>Deleted:</b>', textParaInserted: '<b>Paragraph Inserted</b> ', diff --git a/apps/common/main/lib/view/ReviewChanges.js b/apps/common/main/lib/view/ReviewChanges.js index baba01435..12f007dbc 100644 --- a/apps/common/main/lib/view/ReviewChanges.js +++ b/apps/common/main/lib/view/ReviewChanges.js @@ -259,7 +259,7 @@ define([ caption: this.txtAccept, split: !this.appConfig.canUseReviewPermissions, iconCls: 'toolbar__icon btn-review-save', - lock: [_set.reviewChangelock, _set.isReviewOnly, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect], + lock: [_set.reviewChangelock, _set.isReviewOnly, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView], dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: 'small' @@ -271,7 +271,7 @@ define([ caption: this.txtReject, split: !this.appConfig.canUseReviewPermissions, iconCls: 'toolbar__icon btn-review-deny', - lock: [_set.reviewChangelock, _set.isReviewOnly, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect], + lock: [_set.reviewChangelock, _set.isReviewOnly, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView], dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: 'small' @@ -284,7 +284,7 @@ define([ caption: this.txtCompare, split: true, iconCls: 'toolbar__icon btn-compare', - lock: [_set.hasCoeditingUsers, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect], + lock: [_set.hasCoeditingUsers, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView], dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: 'small' @@ -294,7 +294,7 @@ define([ this.btnTurnOn = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-ic-review', - lock: [_set.previewReviewMode, _set.viewFormMode, _set.lostConnect], + lock: [_set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView], caption: this.txtTurnon, split: !this.appConfig.isReviewOnly, enableToggle: true, @@ -309,7 +309,7 @@ define([ this.btnPrev = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-review-prev', - lock: [_set.previewReviewMode, _set.viewFormMode, _set.lostConnect], + lock: [_set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView], caption: this.txtPrev, dataHint: '1', dataHintDirection: 'bottom', @@ -320,7 +320,7 @@ define([ this.btnNext = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-review-next', - lock: [_set.previewReviewMode, _set.viewFormMode, _set.lostConnect], + lock: [_set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView], caption: this.txtNext, dataHint: '1', dataHintDirection: 'bottom', @@ -336,7 +336,7 @@ define([ this.btnReviewView = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-ic-reviewview', - lock: [_set.viewFormMode, _set.lostConnect], + lock: [_set.viewFormMode, _set.lostConnect, _set.docLockView], caption: this.txtView, menu: new Common.UI.Menu({ cls: 'ppm-toolbar', @@ -404,7 +404,7 @@ define([ this.btnCoAuthMode = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-ic-coedit', - lock: [_set.viewFormMode, _set.lostConnect], + lock: [_set.viewFormMode, _set.lostConnect, _set.docLockView], caption: this.txtCoAuthMode, menu: true, dataHint: '1', @@ -450,7 +450,7 @@ define([ caption: this.txtCommentRemove, split: true, iconCls: 'toolbar__icon btn-rem-comment', - lock: [_set.previewReviewMode, _set.viewFormMode, _set.hideComments, _set['Objects'], _set.lostConnect], + lock: [_set.previewReviewMode, _set.viewFormMode, _set.hideComments, _set['Objects'], _set.lostConnect, _set.docLockView], dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: 'small' @@ -461,7 +461,7 @@ define([ caption: this.txtCommentResolve, split: true, iconCls: 'toolbar__icon btn-resolve-all', - lock: [_set.previewReviewMode, _set.viewFormMode, _set.hideComments, _set['Objects'], _set.lostConnect], + lock: [_set.previewReviewMode, _set.viewFormMode, _set.hideComments, _set['Objects'], _set.lostConnect, _set.docLockView], dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: 'small' @@ -731,7 +731,7 @@ define([ var button = new Common.UI.Button({ cls : 'btn-toolbar', iconCls : 'toolbar__icon btn-ic-review', - lock: [Common.enumLock.viewMode, Common.enumLock.previewReviewMode, Common.enumLock.viewFormMode, Common.enumLock.lostConnect], + lock: [Common.enumLock.viewMode, Common.enumLock.previewReviewMode, Common.enumLock.viewFormMode, Common.enumLock.lostConnect, Common.enumLock.docLockView], hintAnchor : 'top', hint : this.tipReview, split : !this.appConfig.isReviewOnly, @@ -778,7 +778,7 @@ define([ button = new Common.UI.Button({ cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-ic-docspell', - lock: [Common.enumLock.viewMode, Common.enumLock.viewFormMode, Common.enumLock.previewReviewMode], + lock: [Common.enumLock.viewMode, Common.enumLock.viewFormMode, Common.enumLock.previewReviewMode, Common.enumLock.docLockView], hintAnchor : 'top', hint: this.tipSetSpelling, enableToggle: true, @@ -794,7 +794,7 @@ define([ button = new Common.UI.Button({ cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-ic-doclang', - lock: [Common.enumLock.viewMode, Common.enumLock.previewReviewMode, Common.enumLock.viewFormMode, Common.enumLock.noSpellcheckLangs, Common.enumLock.lostConnect], + lock: [Common.enumLock.viewMode, Common.enumLock.previewReviewMode, Common.enumLock.viewFormMode, Common.enumLock.noSpellcheckLangs, Common.enumLock.lostConnect, Common.enumLock.docLockView], hintAnchor : 'top', hint: this.tipSetDocLang, dataHint: '0', diff --git a/apps/documenteditor/main/app/controller/DocProtection.js b/apps/documenteditor/main/app/controller/DocProtection.js index c5202176f..7dd4d9d0f 100644 --- a/apps/documenteditor/main/app/controller/DocProtection.js +++ b/apps/documenteditor/main/app/controller/DocProtection.js @@ -46,6 +46,13 @@ define([ ], function () { 'use strict'; + Asc.c_oAscProtection = { + View: 1, + Forms: 2, + Review: 3, + Comments: 4 + }; + if (!Common.enumLock) Common.enumLock = {}; @@ -121,9 +128,12 @@ define([ btn = result; if (result == 'ok') { // var props = me.api.asc_getProtectedDocument(); - // props.asc_setLockMode(props); + // props.asc_setType(props); // props.asc_setLockPwd(value); // me.api.asc_setProtectedDocument(props); + + me.view.btnProtectDoc.toggle(true, true); // test + me.onChangeProtectDocument(); // test } Common.NotificationCenter.trigger('edit:complete'); } @@ -136,8 +146,10 @@ define([ } else { var me = this, btn, - props = me.api.asc_getProtectedDocument(); - if (props.asc_isPassword()) { + // props = me.api.asc_getProtectedDocument(); + props = undefined; // test + // if (props.asc_isPassword()) { + if (props && props.asc_isPassword()) { var win = new Common.Views.OpenDialog({ title: me.view.txtWBUnlockTitle, closable: true, @@ -161,8 +173,10 @@ define([ win.show(); } else { - props.asc_setLockPwd(); - me.api.asc_setProtectedDocument(props); + me.view.btnProtectDoc.toggle(false, true); // test + me.onChangeProtectDocument(); // test + // props.asc_setLockPwd(); + // me.api.asc_setProtectedDocument(props); } } }, @@ -179,24 +193,37 @@ define([ }, onChangeProtectDocument: function() { - // this.view && this.view.btnProtectDoc.toggle(this.api.asc_isProtectedDocument(), true); + // var isProtected = this.api.asc_isProtectedDocument(); + var isProtected = this.view.btnProtectDoc.isActive(); // test + this.view && this.view.btnProtectDoc.toggle(isProtected, true); + var props = this.getDocProps(true); + Common.NotificationCenter.trigger('protect:doclock', props); }, getDocProps: function(update) { if (!this.appConfig || !this.appConfig.isEdit && !this.appConfig.isRestrictedEdit) return; - if (update || !this._state.protection) { - var docProtected = !!this.api.asc_isProtectedDocument(), + if (update || !this._state.docProtection) { + // var docProtected = !!this.api.asc_isProtectedDocument(), + // type; + // + // if (docProtected) { + // var props = this.api.asc_getProtectedDocument(); + // type = props.asc_getType(); + // } + + // test ////// + var docProtected = this.view.btnProtectDoc.isActive(), type; if (docProtected) { - var props = this.api.asc_getProtectedDocument(); - type = props.asc_getLockMode(); + type = Asc.c_oAscProtection.View; } - this._state.protection = {docLock: docProtected, lockMode: type}; + ///////////// + this._state.docProtection = {docLock: docProtected, lockMode: type}; } - return this._state.protection; + return this._state.docProtection; } }, DE.Controllers.DocProtection || {})); diff --git a/apps/documenteditor/main/app/controller/DocumentHolder.js b/apps/documenteditor/main/app/controller/DocumentHolder.js index c42c99a88..e5c6ab6b3 100644 --- a/apps/documenteditor/main/app/controller/DocumentHolder.js +++ b/apps/documenteditor/main/app/controller/DocumentHolder.js @@ -226,7 +226,7 @@ define([ this.api.asc_registerCallback('asc_onShowContentControlsActions',_.bind(this.onShowContentControlsActions, this)); this.api.asc_registerCallback('asc_onHideContentControlsActions',_.bind(this.onHideContentControlsActions, this)); } - + Common.NotificationCenter.on('protect:doclock', _.bind(this.onChangeProtectDocument, this)); this.documentHolder.setApi(this.api); } @@ -585,7 +585,9 @@ define([ showObjectMenu: function(event, docElement, eOpts){ var me = this; if (me.api){ - var obj = (me.mode.isEdit && !me._isDisabled) ? me.fillMenuProps(me.api.getSelectedElements()) : me.fillViewMenuProps(me.api.getSelectedElements()); + var lockMode = this.documentHolder.docProtection ? this.documentHolder.docProtection.lockMode : undefined; + var obj = (me.mode.isEdit && !(me._isDisabled || lockMode===Asc.c_oAscProtection.View || lockMode===Asc.c_oAscProtection.Comments || lockMode===Asc.c_oAscProtection.Forms)) ? + me.fillMenuProps(me.api.getSelectedElements()) : me.fillViewMenuProps(me.api.getSelectedElements()); if (obj) me.showPopupMenu(obj.menu_to_show, obj.menu_props, event, docElement, eOpts); } }, @@ -612,7 +614,9 @@ define([ var me = this, currentMenu = me.documentHolder.currentMenu; if (currentMenu && currentMenu.isVisible() && currentMenu !== me.documentHolder.hdrMenu){ - var obj = (me.mode.isEdit && !me._isDisabled) ? me.fillMenuProps(selectedElements) : me.fillViewMenuProps(selectedElements); + var lockMode = me.documentHolder.docProtection ? me.documentHolder.docProtection.lockMode : undefined; + var obj = (me.mode.isEdit && !(me._isDisabled || lockMode===Asc.c_oAscProtection.View || lockMode===Asc.c_oAscProtection.Comments || lockMode===Asc.c_oAscProtection.Forms)) ? + me.fillMenuProps(selectedElements) : me.fillViewMenuProps(selectedElements); if (obj) { if (obj.menu_to_show===currentMenu) { currentMenu.options.initMenu(obj.menu_props); @@ -1180,7 +1184,8 @@ define([ }, onDoubleClickOnChart: function(chart) { - if (this.mode.isEdit && !this._isDisabled) { + var lockMode = this.documentHolder.docProtection ? this.documentHolder.docProtection.lockMode : undefined; + if (this.mode.isEdit && !(this._isDisabled || lockMode===Asc.c_oAscProtection.View || lockMode===Asc.c_oAscProtection.Comments || lockMode===Asc.c_oAscProtection.Forms)) { var diagramEditor = this.getApplication().getController('Common.Controllers.ExternalDiagramEditor').getView('Common.Views.ExternalDiagramEditor'); if (diagramEditor && chart) { diagramEditor.setEditMode(true); @@ -1191,7 +1196,8 @@ define([ }, onDoubleClickOnTableOleObject: function(chart) { - if (this.mode.isEdit && !this._isDisabled) { + var lockMode = this.documentHolder.docProtection ? this.documentHolder.docProtection.lockMode : undefined; + if (this.mode.isEdit && !(this._isDisabled || lockMode===Asc.c_oAscProtection.View || lockMode===Asc.c_oAscProtection.Comments || lockMode===Asc.c_oAscProtection.Forms)) { var oleEditor = this.getApplication().getController('Common.Controllers.ExternalOleEditor').getView('Common.Views.ExternalOleEditor'); if (oleEditor && chart) { oleEditor.setEditMode(true); @@ -1895,7 +1901,8 @@ define([ this.api.asc_ViewCertificate(datavalue); //certificate id break; case 2: - Common.NotificationCenter.trigger('protect:signature', 'visible', this._isDisabled, datavalue);//guid, can edit settings for requested signature + var lockMode = this.documentHolder.docProtection ? this.documentHolder.docProtection.lockMode : undefined; + Common.NotificationCenter.trigger('protect:signature', 'visible', this._isDisabled || lockMode===Asc.c_oAscProtection.View || lockMode===Asc.c_oAscProtection.Comments || lockMode===Asc.c_oAscProtection.Forms, datavalue);//guid, can edit settings for requested signature break; case 3: var me = this; @@ -2310,6 +2317,16 @@ define([ editComplete: function() { this.documentHolder && this.documentHolder.fireEvent('editcomplete', this.documentHolder); + }, + + onChangeProtectDocument: function(props) { + if (!props) { + var docprotect = this.getApplication().getController('DocProtection'); + props = docprotect ? docprotect.getDocProps() : null; + } + if (props) { + this.documentHolder && (this.documentHolder.docProtection = props); + } } }); }); \ No newline at end of file diff --git a/apps/documenteditor/main/app/controller/FormsTab.js b/apps/documenteditor/main/app/controller/FormsTab.js index 456c25627..a9ee02625 100644 --- a/apps/documenteditor/main/app/controller/FormsTab.js +++ b/apps/documenteditor/main/app/controller/FormsTab.js @@ -76,6 +76,7 @@ define([ // this.api.asc_registerCallback('asc_onShowContentControlsActions',_.bind(this.onShowContentControlsActions, this)); // this.api.asc_registerCallback('asc_onHideContentControlsActions',_.bind(this.onHideContentControlsActions, this)); } + Common.NotificationCenter.on('protect:doclock', _.bind(this.onChangeProtectDocument, this)); return this; }, @@ -430,6 +431,21 @@ define([ if (tab !== 'forms') { this.tipSaveForm && this.tipSaveForm.close(); } + }, + + onChangeProtectDocument: function(props) { + if (!props) { + var docprotect = this.getApplication().getController('DocProtection'); + props = docprotect ? docprotect.getDocProps() : null; + } + if (props) { + this._state.docProtection = props; + var arr = this.view.getButtons(); + Common.Utils.lockControls(Common.enumLock.docLockView, props.docLock && (props.lockMode===Asc.c_oAscProtection.View)), {array: arr}; + Common.Utils.lockControls(Common.enumLock.docLockForms, props.docLock && (props.lockMode===Asc.c_oAscProtection.Forms), {array: arr}); + Common.Utils.lockControls(Common.enumLock.docLockReview, props.docLock && (props.lockMode===Asc.c_oAscProtection.Review), {array: arr}); + Common.Utils.lockControls(Common.enumLock.docLockComments, props.docLock && (props.lockMode===Asc.c_oAscProtection.Comments), {array: arr}); + } } }, DE.Controllers.FormsTab || {})); diff --git a/apps/documenteditor/main/app/controller/Links.js b/apps/documenteditor/main/app/controller/Links.js index cd3577712..c3db0cc6f 100644 --- a/apps/documenteditor/main/app/controller/Links.js +++ b/apps/documenteditor/main/app/controller/Links.js @@ -108,6 +108,7 @@ define([ this.api.asc_registerCallback('asc_onAscReplaceCurrentTOF',_.bind(this.onAscReplaceCurrentTOF, this)); this.api.asc_registerCallback('asc_onAscTOFUpdate',_.bind(this.onAscTOFUpdate, this)); } + Common.NotificationCenter.on('protect:doclock', _.bind(this.onChangeProtectDocument, this)); return this; }, @@ -570,6 +571,20 @@ define([ Common.NotificationCenter.trigger('edit:complete', me.toolbar); } })).show(); + }, + + onChangeProtectDocument: function(props) { + if (!props) { + var docprotect = this.getApplication().getController('DocProtection'); + props = docprotect ? docprotect.getDocProps() : null; + } + if (props) { + this._state.docProtection = props; + this.lockToolbar(Common.enumLock.docLockView, props.docLock && (props.lockMode===Asc.c_oAscProtection.View)); + this.lockToolbar(Common.enumLock.docLockForms, props.docLock && (props.lockMode===Asc.c_oAscProtection.Forms)); + this.lockToolbar(Common.enumLock.docLockReview, props.docLock && (props.lockMode===Asc.c_oAscProtection.Review)); + this.lockToolbar(Common.enumLock.docLockComments, props.docLock && (props.lockMode===Asc.c_oAscProtection.Comments)); + } } }, DE.Controllers.Links || {})); diff --git a/apps/documenteditor/main/app/controller/PageLayout.js b/apps/documenteditor/main/app/controller/PageLayout.js index efac3b1f7..2703215e2 100644 --- a/apps/documenteditor/main/app/controller/PageLayout.js +++ b/apps/documenteditor/main/app/controller/PageLayout.js @@ -57,7 +57,7 @@ define([ onLaunch: function (view) { this.toolbar = view; this.editMode = true; - + this._state = {}; return this; }, @@ -98,7 +98,7 @@ define([ this.api.asc_registerCallback('asc_onImgWrapStyleChanged', this.onApiWrappingStyleChanged.bind(this)); this.api.asc_registerCallback('asc_onCoAuthoringDisconnect', this.onApiCoAuthoringDisconnect.bind(this)); this.api.asc_registerCallback('asc_onFocusObject', this.onApiFocusObject.bind(this)); - + Common.NotificationCenter.on('protect:doclock', _.bind(this.onChangeProtectDocument, this)); return this; }, @@ -255,6 +255,20 @@ define([ this.api.ImgApply(props); this.toolbar.fireEvent('editcomplete', this.toolbar); + }, + + onChangeProtectDocument: function(props) { + if (!props) { + var docprotect = this.getApplication().getController('DocProtection'); + props = docprotect ? docprotect.getDocProps() : null; + } + if (props) { + this._state.docProtection = props; + this.toolbar.lockToolbar(Common.enumLock.docLockView, props.docLock && (props.lockMode===Asc.c_oAscProtection.View)); + this.toolbar.lockToolbar(Common.enumLock.docLockForms, props.docLock && (props.lockMode===Asc.c_oAscProtection.Forms)); + this.toolbar.lockToolbar(Common.enumLock.docLockReview, props.docLock && (props.lockMode===Asc.c_oAscProtection.Review)); + this.toolbar.lockToolbar(Common.enumLock.docLockComments, props.docLock && (props.lockMode===Asc.c_oAscProtection.Comments)); + } } } })()); diff --git a/apps/documenteditor/main/app/controller/RightMenu.js b/apps/documenteditor/main/app/controller/RightMenu.js index c4cea9f25..e05283bc6 100644 --- a/apps/documenteditor/main/app/controller/RightMenu.js +++ b/apps/documenteditor/main/app/controller/RightMenu.js @@ -54,7 +54,7 @@ define([ initialize: function() { this.editMode = true; this._initSettings = true; - + this._state = {}; this.addListeners({ 'RightMenu': { 'rightmenuclick': this.onRightMenuClick @@ -89,6 +89,7 @@ define([ setApi: function(api) { this.api = api; this.api.asc_registerCallback('asc_onUpdateSignatures', _.bind(this.onApiUpdateSignatures, this)); + Common.NotificationCenter.on('protect:doclock', _.bind(this.onChangeProtectDocument, this)); this.api.asc_registerCallback('asc_onCoAuthoringDisconnect',_.bind(this.onCoAuthoringDisconnect, this)); Common.NotificationCenter.on('api:disconnect', _.bind(this.onCoAuthoringDisconnect, this)); }, @@ -156,7 +157,10 @@ define([ this._settings[Common.Utils.documentSettingsType.Signature].locked = false; var isChart = false, - isSmartArtInternal = false; + isSmartArtInternal = false, + lockMode = this._state.docProtection ? this._state.docProtection.lockMode : undefined; + lockMode = (lockMode===Asc.c_oAscProtection.View || lockMode===Asc.c_oAscProtection.Forms || lockMode===Asc.c_oAscProtection.Comments); + var control_props = this.api.asc_IsContentControl() ? this.api.asc_GetContentControlProperties() : null, control_lock = false; for (i=0; i<SelectedObjects.length; i++) @@ -185,7 +189,7 @@ define([ if (value.get_ShapeProperties().asc_getTextArtProperties()) { this._settings[Common.Utils.documentSettingsType.TextArt].props = value; this._settings[Common.Utils.documentSettingsType.TextArt].hidden = 0; - this._settings[Common.Utils.documentSettingsType.TextArt].locked = value.get_Locked() || content_locked; + this._settings[Common.Utils.documentSettingsType.TextArt].locked = value.get_Locked() || content_locked || lockMode; } } control_lock = control_lock || value.get_Locked(); @@ -197,11 +201,11 @@ define([ } this._settings[settingsType].props = value; this._settings[settingsType].hidden = 0; - this._settings[settingsType].locked = value.get_Locked() || content_locked; + this._settings[settingsType].locked = value.get_Locked() || content_locked || lockMode; if (!this._settings[Common.Utils.documentSettingsType.MailMerge].locked) // lock MailMerge-InsertField, если хотя бы один объект locked - this._settings[Common.Utils.documentSettingsType.MailMerge].locked = value.get_Locked(); + this._settings[Common.Utils.documentSettingsType.MailMerge].locked = value.get_Locked() || lockMode; if (!this._settings[Common.Utils.documentSettingsType.Signature].locked) // lock Signature, если хотя бы один объект locked - this._settings[Common.Utils.documentSettingsType.Signature].locked = value.get_Locked(); + this._settings[Common.Utils.documentSettingsType.Signature].locked = value.get_Locked() || lockMode; } if (control_props && control_props.get_FormPr() && this.rightmenu.formSettings) { @@ -210,7 +214,7 @@ define([ spectype==Asc.c_oAscContentControlSpecificType.ComboBox || spectype==Asc.c_oAscContentControlSpecificType.DropDownList || spectype==Asc.c_oAscContentControlSpecificType.None) { settingsType = Common.Utils.documentSettingsType.Form; this._settings[settingsType].props = control_props; - this._settings[settingsType].locked = control_lock; + this._settings[settingsType].locked = control_lock || lockMode; this._settings[settingsType].hidden = 0; if (control_props.get_FormPr().get_Fixed()) this._settings[Common.Utils.documentSettingsType.TextArt].hidden = 1; @@ -466,6 +470,19 @@ define([ case Asc.c_oAscTypeSelectElement.Header: return Common.Utils.documentSettingsType.Header; } + }, + + onChangeProtectDocument: function(props) { + if (!props) { + var docprotect = this.getApplication().getController('DocProtection'); + props = docprotect ? docprotect.getDocProps() : null; + } + if (props) { + this._state.docProtection = props; + } + var selectedElements = this.api.getSelectedElements(); + if (selectedElements.length > 0) + this.onFocusObject(selectedElements); } }); }); \ No newline at end of file diff --git a/apps/documenteditor/main/app/controller/Statusbar.js b/apps/documenteditor/main/app/controller/Statusbar.js index d751f39db..b2af4e032 100644 --- a/apps/documenteditor/main/app/controller/Statusbar.js +++ b/apps/documenteditor/main/app/controller/Statusbar.js @@ -122,7 +122,7 @@ define([ me.statusbar.$el.find('.hide-select-tools').removeClass('hide-select-tools'); } }); - + Common.NotificationCenter.on('protect:doclock', _.bind(this.onChangeProtectDocument, this)); Common.NotificationCenter.on('app:ready', me.onAppReady.bind(me)); }, @@ -358,6 +358,14 @@ define([ } }, + onChangeProtectDocument: function(props) { + if (!props) { + var docprotect = this.getApplication().getController('DocProtection'); + props = docprotect ? docprotect.getDocProps() : null; + } + props && this.statusbar.onChangeProtectDocument(props); + }, + zoomText : 'Zoom {0}%', textHasChanges : 'New changes have been tracked', textTrackChanges: 'The document is opened with the Track Changes mode enabled', diff --git a/apps/documenteditor/main/app/controller/Toolbar.js b/apps/documenteditor/main/app/controller/Toolbar.js index 94aaaf698..5c413ae5f 100644 --- a/apps/documenteditor/main/app/controller/Toolbar.js +++ b/apps/documenteditor/main/app/controller/Toolbar.js @@ -430,6 +430,7 @@ define([ this.api.asc_registerCallback('asc_onCoAuthoringDisconnect', _.bind(this.onApiCoAuthoringDisconnect, this)); Common.NotificationCenter.on('api:disconnect', _.bind(this.onApiCoAuthoringDisconnect, this)); } + Common.NotificationCenter.on('protect:doclock', _.bind(this.onChangeProtectDocument, this)); }, onChangeCompactView: function(view, compact) { @@ -3263,7 +3264,7 @@ define([ this.btnsComment = Common.Utils.injectButtons(this.toolbar.$el.find('.slot-comment'), 'tlbtn-addcomment-', 'toolbar__icon btn-menu-comments', this.toolbar.capBtnComment, [ Common.enumLock.paragraphLock, Common.enumLock.headerLock, Common.enumLock.richEditLock, Common.enumLock.plainEditLock, Common.enumLock.richDelLock, Common.enumLock.plainDelLock, Common.enumLock.cantAddQuotedComment, Common.enumLock.imageLock, Common.enumLock.inSpecificForm, Common.enumLock.inImage, Common.enumLock.lostConnect, Common.enumLock.disableOnStart, - Common.enumLock.previewReviewMode, Common.enumLock.viewFormMode ], + Common.enumLock.previewReviewMode, Common.enumLock.viewFormMode, Common.enumLock.docLockView ], undefined, undefined, undefined, '1', 'bottom'); if ( this.btnsComment.length ) { var _comments = DE.getController('Common.Controllers.Comments').getView(); @@ -3331,6 +3332,20 @@ define([ })).show(); }, + onChangeProtectDocument: function(props) { + if (!props) { + var docprotect = this.getApplication().getController('DocProtection'); + props = docprotect ? docprotect.getDocProps() : null; + } + if (props) { + this._state.docProtection = props; + this.toolbar.lockToolbar(Common.enumLock.docLockView, props.docLock && (props.lockMode===Asc.c_oAscProtection.View)); + this.toolbar.lockToolbar(Common.enumLock.docLockForms, props.docLock && (props.lockMode===Asc.c_oAscProtection.Forms)); + this.toolbar.lockToolbar(Common.enumLock.docLockReview, props.docLock && (props.lockMode===Asc.c_oAscProtection.Review)); + this.toolbar.lockToolbar(Common.enumLock.docLockComments, props.docLock && (props.lockMode===Asc.c_oAscProtection.Comments)); + } + }, + textEmptyImgUrl : 'You need to specify image URL.', textWarning : 'Warning', textFontSizeErr : 'The entered value is incorrect.<br>Please enter a numeric value between 1 and 300', diff --git a/apps/documenteditor/main/app/view/DocProtection.js b/apps/documenteditor/main/app/view/DocProtection.js index 3f4916175..eb4945b63 100644 --- a/apps/documenteditor/main/app/view/DocProtection.js +++ b/apps/documenteditor/main/app/view/DocProtection.js @@ -79,7 +79,7 @@ define([ iconCls: 'toolbar__icon protect-workbook', enableToggle: true, caption: this.txtProtectDoc, - lock : [_set.lostConnect, _set.coAuth], + lock : [_set.lostConnect, _set.coAuth, _set.previewReviewMode, _set.viewFormMode], dataHint : '1', dataHintDirection: 'bottom', dataHintOffset: 'small' diff --git a/apps/documenteditor/main/app/view/DocumentHolder.js b/apps/documenteditor/main/app/view/DocumentHolder.js index 3b9f238c5..a14786b13 100644 --- a/apps/documenteditor/main/app/view/DocumentHolder.js +++ b/apps/documenteditor/main/app/view/DocumentHolder.js @@ -152,6 +152,7 @@ define([ signGuid = (value.imgProps && value.imgProps.value && me.mode.isSignatureSupport) ? value.imgProps.value.asc_getSignatureId() : undefined, signProps = (signGuid) ? me.api.asc_getSignatureSetup(signGuid) : null, isInSign = !!signProps && me._canProtect, + lockMode = me.docProtection ? me.docProtection.lockMode : undefined, control_lock = (value.paraProps) ? (!value.paraProps.value.can_DeleteBlockContentControl() || !value.paraProps.value.can_EditBlockContentControl() || !value.paraProps.value.can_DeleteInlineContentControl() || !value.paraProps.value.can_EditInlineContentControl()) : false, canComment = !isInChart && me.api.can_AddQuotedComment() !== false && me.mode.canCoAuthoring && me.mode.canComments && !me._isDisabled && !control_lock, @@ -169,7 +170,7 @@ define([ } me.menuViewUndo.setVisible(me.mode.canCoAuthoring && me.mode.canComments && !me._isDisabled); - me.menuViewUndo.setDisabled(!me.api.asc_getCanUndo()); + me.menuViewUndo.setDisabled(!me.api.asc_getCanUndo() || lockMode===Asc.c_oAscProtection.View || lockMode===Asc.c_oAscProtection.Forms); me.menuViewCopySeparator.setVisible(isInSign); var isRequested = (signProps) ? signProps.asc_getRequested() : false; @@ -187,15 +188,15 @@ define([ } me.menuViewAddComment.setVisible(canComment); - me.menuViewAddComment.setDisabled(value.paraProps && value.paraProps.locked === true); + me.menuViewAddComment.setDisabled(value.paraProps && value.paraProps.locked === true || lockMode===Asc.c_oAscProtection.View || lockMode===Asc.c_oAscProtection.Forms); var disabled = value.paraProps && value.paraProps.locked === true; var cancopy = me.api && me.api.can_CopyCut(); me.menuViewCopy.setDisabled(!cancopy); me.menuViewCut.setVisible(me._fillFormMode && canEditControl); - me.menuViewCut.setDisabled(disabled || !cancopy); + me.menuViewCut.setDisabled(disabled || !cancopy || lockMode===Asc.c_oAscProtection.View || lockMode===Asc.c_oAscProtection.Comments); me.menuViewPaste.setVisible(me._fillFormMode && canEditControl); - me.menuViewPaste.setDisabled(disabled); + me.menuViewPaste.setDisabled(disabled || lockMode===Asc.c_oAscProtection.View || lockMode===Asc.c_oAscProtection.Comments); me.menuViewPrint.setVisible(me.mode.canPrint && !me._fillFormMode); me.menuViewPrint.setDisabled(!cancopy); diff --git a/apps/documenteditor/main/app/view/FormsTab.js b/apps/documenteditor/main/app/view/FormsTab.js index 10524186c..e1a9a91e4 100644 --- a/apps/documenteditor/main/app/view/FormsTab.js +++ b/apps/documenteditor/main/app/view/FormsTab.js @@ -169,7 +169,7 @@ define([ this.btnTextField = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-text-field', - lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: this.capBtnText, dataHint: '1', dataHintDirection: 'bottom', @@ -180,7 +180,7 @@ define([ this.btnComboBox = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-combo-box', - lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: this.capBtnComboBox, dataHint: '1', dataHintDirection: 'bottom', @@ -191,7 +191,7 @@ define([ this.btnDropDown = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-dropdown', - lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: this.capBtnDropDown, dataHint: '1', dataHintDirection: 'bottom', @@ -202,7 +202,7 @@ define([ this.btnCheckBox = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-checkbox', - lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: this.capBtnCheckBox, dataHint: '1', dataHintDirection: 'bottom', @@ -213,7 +213,7 @@ define([ this.btnRadioBox = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-radio-button', - lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: this.capBtnRadioBox, dataHint: '1', dataHintDirection: 'bottom', @@ -224,7 +224,7 @@ define([ this.btnImageField = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-insertimage', - lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.complexForm, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.complexForm, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: this.capBtnImage, dataHint: '1', dataHintDirection: 'bottom', @@ -235,7 +235,7 @@ define([ this.btnEmailField = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-email', - lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: this.capBtnEmail, dataHint: '1', dataHintDirection: 'bottom', @@ -246,7 +246,7 @@ define([ this.btnPhoneField = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-phone', - lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: this.capBtnPhone, dataHint: '1', dataHintDirection: 'bottom', @@ -257,7 +257,7 @@ define([ this.btnComplexField = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon complex-field', - lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.complexForm, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.complexForm, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: this.capBtnComplex, dataHint: '1', dataHintDirection: 'bottom', @@ -268,7 +268,7 @@ define([ this.btnViewForm = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-sheet-view', - lock: [ _set.previewReviewMode, _set.lostConnect, _set.disableOnStart], + lock: [ _set.previewReviewMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: this.capBtnView, enableToggle: true, dataHint: '1', @@ -280,7 +280,7 @@ define([ this.btnClearFields = new Common.UI.Button({ cls : 'btn-toolbar', iconCls : 'toolbar__icon btn-clearstyle', - lock: [ _set.previewReviewMode, _set.lostConnect, _set.disableOnStart], + lock: [ _set.previewReviewMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption : this.textClearFields, dataHint : '1', dataHintDirection: 'left', @@ -291,7 +291,7 @@ define([ this.btnHighlight = new Common.UI.ButtonColored({ cls : 'btn-toolbar', iconCls : 'toolbar__icon btn-highlight', - lock: [ _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [ _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption : this.textHighlight, menu : true, additionalItems: [ this.mnuNoFormsColor = new Common.UI.MenuItem({ @@ -316,7 +316,7 @@ define([ this.btnPrevForm = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon previous-field', - lock: [ _set.previewReviewMode, _set.lostConnect, _set.disableOnStart], + lock: [ _set.previewReviewMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: this.capBtnPrev, // disabled: this.appConfig.isEdit && this.appConfig.canFeatureContentControl && this.appConfig.canFeatureForms, // disable only for edit mode dataHint: '1', @@ -328,7 +328,7 @@ define([ this.btnNextForm = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon next-field', - lock: [ _set.previewReviewMode, _set.lostConnect, _set.disableOnStart], + lock: [ _set.previewReviewMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: this.capBtnNext, // disabled: this.appConfig.isEdit && this.appConfig.canFeatureContentControl && this.appConfig.canFeatureForms, // disable only for edit mode, dataHint: '1', diff --git a/apps/documenteditor/main/app/view/Links.js b/apps/documenteditor/main/app/view/Links.js index 8ea79d0eb..8fce3db9d 100644 --- a/apps/documenteditor/main/app/view/Links.js +++ b/apps/documenteditor/main/app/view/Links.js @@ -169,13 +169,13 @@ define([ $host = me.toolbar.$el; this.btnsContents = Common.Utils.injectButtons($host.find('.btn-slot.btn-contents'), '', 'toolbar__icon btn-contents', me.capBtnInsContents, - [_set.inHeader, _set.richEditLock, _set.plainEditLock, _set.richDelLock, _set.plainDelLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + [_set.inHeader, _set.richEditLock, _set.plainEditLock, _set.richDelLock, _set.plainDelLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], true, true, undefined, '1', 'bottom', 'small'); this.btnsNotes = Common.Utils.injectButtons($host.find('.btn-slot.slot-notes'), '', 'toolbar__icon btn-notes', me.capBtnInsFootnote, - [_set.paragraphLock, _set.inEquation, _set.inImage, _set.inHeader, _set.controlPlain, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + [_set.paragraphLock, _set.inEquation, _set.inImage, _set.inHeader, _set.controlPlain, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], true, true, undefined, '1', 'bottom', 'small'); this.btnsHyperlink = Common.Utils.injectButtons($host.find('.btn-slot.slot-inshyperlink'), '', 'toolbar__icon btn-inserthyperlink', me.capBtnInsLink, - [_set.paragraphLock, _set.headerLock, _set.hyperlinkLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + [_set.paragraphLock, _set.headerLock, _set.hyperlinkLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], undefined, undefined, undefined, '1', 'bottom', 'small'); Array.prototype.push.apply(this.paragraphControls, this.btnsContents.concat(this.btnsNotes, this.btnsHyperlink)); @@ -183,7 +183,7 @@ define([ parentEl: $host.find('#slot-btn-contents-update'), cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-update', - lock: [ _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [ _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: this.capBtnContentsUpdate, split: true, menu: true, @@ -197,7 +197,7 @@ define([ parentEl: $host.find('#slot-btn-add-text'), cls: 'btn-toolbar', iconCls: 'toolbar__icon add-text', - lock: [ _set.cantAddTextTOF, _set.inHeader, _set.inFootnote, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [ _set.cantAddTextTOF, _set.inHeader, _set.inFootnote, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: this.capBtnAddText, menu: new Common.UI.Menu({ items: [] @@ -212,7 +212,7 @@ define([ parentEl: $host.find('#slot-btn-bookmarks'), cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-bookmarks', - lock: [_set.paragraphLock, _set.inHeader, _set.headerLock, _set.controlPlain, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.paragraphLock, _set.inHeader, _set.headerLock, _set.controlPlain, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: this.capBtnBookmarks, dataHint: '1', dataHintDirection: 'bottom', @@ -224,7 +224,7 @@ define([ parentEl: $host.find('#slot-btn-caption'), cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-caption', - lock: [_set.inHeader, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.inHeader, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: this.capBtnCaption, dataHint: '1', dataHintDirection: 'bottom', @@ -236,7 +236,7 @@ define([ parentEl: $host.find('#slot-btn-crossref'), cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-cross-reference', - lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.richEditLock, _set.plainEditLock, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.richEditLock, _set.plainEditLock, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: this.capBtnCrossRef, dataHint: '1', dataHintDirection: 'bottom', @@ -248,7 +248,7 @@ define([ parentEl: $host.find('#slot-btn-tof'), cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-contents', - lock: [_set.inHeader, _set.richEditLock, _set.plainEditLock, _set.richDelLock, _set.plainDelLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.inHeader, _set.richEditLock, _set.plainEditLock, _set.richDelLock, _set.plainDelLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: this.capBtnTOF, dataHint: '1', dataHintDirection: 'left', @@ -260,7 +260,7 @@ define([ parentEl: $host.find('#slot-btn-tof-update'), cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-update', - lock: [_set.paragraphLock, _set.inHeader, _set.richEditLock, _set.plainEditLock, _set.richDelLock, _set.plainDelLock, _set.cantUpdateTOF, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.paragraphLock, _set.inHeader, _set.richEditLock, _set.plainEditLock, _set.richDelLock, _set.plainDelLock, _set.cantUpdateTOF, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: this.capBtnContentsUpdate, dataHint: '1', dataHintDirection: 'left', diff --git a/apps/documenteditor/main/app/view/ProtectDialog.js b/apps/documenteditor/main/app/view/ProtectDialog.js index bebe37ef4..f5f33a74a 100644 --- a/apps/documenteditor/main/app/view/ProtectDialog.js +++ b/apps/documenteditor/main/app/view/ProtectDialog.js @@ -43,12 +43,6 @@ define([ ], function () { 'use strict'; - Asc.c_oAscProtection = { - View: 1, - Forms: 2, - Review: 3, - Comments: 4 - }; DE.Views.ProtectDialog = Common.UI.Window.extend(_.extend({ initialize : function (options) { diff --git a/apps/documenteditor/main/app/view/Statusbar.js b/apps/documenteditor/main/app/view/Statusbar.js index 95b0d8d17..1ec4040d0 100644 --- a/apps/documenteditor/main/app/view/Statusbar.js +++ b/apps/documenteditor/main/app/view/Statusbar.js @@ -176,7 +176,8 @@ define([ _.extend(this, options); this.pages = new DE.Models.Pages({current:1, count:1}); this.pages.on('change', _.bind(_updatePagesCaption,this)); - this.state = {}; + this._state = {}; + this._isDisabled = false; var me = this; this.$layout = $(this.template({ @@ -399,8 +400,18 @@ define([ }, SetDisabled: function(disable) { - this.btnLanguage.setDisabled(disable || this.langMenu.items.length<1); - this.btnTurnReview && this.btnTurnReview.setDisabled(disable); + this._isDisabled = disable; + var lockMode = this._state.docProtection ? this._state.docProtection.lockMode : undefined; + lockMode = (lockMode===Asc.c_oAscProtection.View || lockMode===Asc.c_oAscProtection.Forms || lockMode===Asc.c_oAscProtection.Comments); + this.btnLanguage.setDisabled(disable || this.langMenu.items.length<1 || lockMode); + this.btnTurnReview && this.btnTurnReview.setDisabled(disable || lockMode); + }, + + onChangeProtectDocument: function(props) { + if (props) { + this._state.docProtection = props; + this.SetDisabled(this._isDisabled); + } }, onApiCoAuthoringDisconnect: function() { diff --git a/apps/documenteditor/main/app/view/Toolbar.js b/apps/documenteditor/main/app/view/Toolbar.js index a0efea64b..d7f0032d5 100644 --- a/apps/documenteditor/main/app/view/Toolbar.js +++ b/apps/documenteditor/main/app/view/Toolbar.js @@ -201,7 +201,7 @@ define([ id: 'id-toolbar-btn-save', cls: 'btn-toolbar', iconCls: 'toolbar__icon no-mask ' + this.btnSaveCls, - lock: [_set.lostConnect, _set.disableOnStart], + lock: [_set.lostConnect, _set.disableOnStart, _set.docLockView], signals: ['disabled'], dataHint: '1', dataHintDirection: 'top', @@ -214,7 +214,7 @@ define([ id: 'id-toolbar-btn-undo', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-undo', - lock: [_set.undoLock, _set.previewReviewMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.undoLock, _set.previewReviewMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], signals: ['disabled'], dataHint: '1', dataHintDirection: 'bottom', @@ -226,7 +226,7 @@ define([ id: 'id-toolbar-btn-redo', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-redo', - lock: [_set.redoLock, _set.previewReviewMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.redoLock, _set.previewReviewMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], signals: ['disabled'], dataHint: '1', dataHintDirection: 'bottom', @@ -238,7 +238,7 @@ define([ id: 'id-toolbar-btn-copy', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-copy', - lock: [_set.copyLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.copyLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], dataHint: '1', dataHintDirection: 'top', dataHintTitle: 'C' @@ -249,7 +249,7 @@ define([ id: 'id-toolbar-btn-paste', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-paste', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], dataHint: '1', dataHintDirection: 'top', dataHintTitle: 'V' @@ -260,7 +260,7 @@ define([ id: 'id-toolbar-btn-cut', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-cut', - lock: [_set.copyLock, _set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.imageLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.copyLock, _set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.imageLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], dataHint: '1', dataHintDirection: 'top', dataHintTitle: 'X' @@ -281,7 +281,7 @@ define([ id: 'id-toolbar-btn-incfont', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-incfont', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], dataHint: '1', dataHintDirection: 'top' }); @@ -291,7 +291,7 @@ define([ id: 'id-toolbar-btn-decfont', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-decfont', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], dataHint: '1', dataHintDirection: 'top' }); @@ -301,7 +301,7 @@ define([ id: 'id-toolbar-btn-bold', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-bold', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], enableToggle: true, dataHint: '1', dataHintDirection: 'bottom' @@ -312,7 +312,7 @@ define([ id: 'id-toolbar-btn-italic', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-italic', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], enableToggle: true, dataHint: '1', dataHintDirection: 'bottom' @@ -323,7 +323,7 @@ define([ id: 'id-toolbar-btn-underline', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-underline', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], enableToggle: true, dataHint: '1', dataHintDirection: 'bottom' @@ -334,7 +334,7 @@ define([ id: 'id-toolbar-btn-strikeout', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-strikeout', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], enableToggle: true, dataHint: '1', dataHintDirection: 'bottom' @@ -345,7 +345,7 @@ define([ id: 'id-toolbar-btn-superscript', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-superscript', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inEquation, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inEquation, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], enableToggle: true, toggleGroup: 'superscriptGroup', dataHint: '1', @@ -357,7 +357,7 @@ define([ id: 'id-toolbar-btn-subscript', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-subscript', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inEquation, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inEquation, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], enableToggle: true, toggleGroup: 'superscriptGroup', dataHint: '1', @@ -370,7 +370,7 @@ define([ cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-highlight', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inChart, _set.inSmartart, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, - _set.lostConnect, _set.disableOnStart], + _set.lostConnect, _set.disableOnStart, _set.docLockView], enableToggle: true, allowDepress: true, split: true, @@ -395,7 +395,7 @@ define([ id: 'id-toolbar-btn-fontcolor', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-fontcolor', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], split: true, menu: true, auto: true, @@ -410,7 +410,7 @@ define([ cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-paracolor', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inChart, _set.inSmartart, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, - _set.lostConnect, _set.disableOnStart], + _set.lostConnect, _set.disableOnStart, _set.docLockView], split: true, transparent: true, menu: true, @@ -425,7 +425,7 @@ define([ id: 'id-toolbar-btn-case', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-change-case', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], menu: new Common.UI.Menu({ items: [ {caption: this.mniSentenceCase, value: Asc.c_oAscChangeTextCaseType.SentenceCase}, @@ -444,7 +444,7 @@ define([ id: 'id-toolbar-btn-align-left', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-align-left', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], enableToggle: true, toggleGroup: 'alignGroup', dataHint: '1', @@ -456,7 +456,7 @@ define([ id: 'id-toolbar-btn-align-center', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-align-center', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], enableToggle: true, toggleGroup: 'alignGroup', dataHint: '1', @@ -468,7 +468,7 @@ define([ id: 'id-toolbar-btn-align-right', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-align-right', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], enableToggle: true, toggleGroup: 'alignGroup', dataHint: '1', @@ -480,7 +480,7 @@ define([ id: 'id-toolbar-btn-align-just', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-align-just', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], enableToggle: true, toggleGroup: 'alignGroup', dataHint: '1', @@ -492,7 +492,7 @@ define([ id: 'id-toolbar-btn-decoffset', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-decoffset', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], dataHint: '1', dataHintDirection: 'top' }); @@ -502,7 +502,7 @@ define([ id: 'id-toolbar-btn-incoffset', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-incoffset', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], dataHint: '1', dataHintDirection: 'top' }); @@ -512,7 +512,7 @@ define([ id: 'id-toolbar-btn-linespace', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-linespace', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], menu: new Common.UI.Menu({ style: 'min-width: 60px;', items: [ @@ -534,7 +534,7 @@ define([ id: 'id-toolbar-btn-hidenchars', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-paragraph', - lock: [ _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [ _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], enableToggle: true, split: true, menu: new Common.UI.Menu({ @@ -555,7 +555,7 @@ define([ cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-setmarkers', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inChart, _set.inSmartart, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, - _set.lostConnect, _set.disableOnStart], + _set.lostConnect, _set.disableOnStart, _set.docLockView], enableToggle: true, toggleGroup: 'markersGroup', split: true, @@ -572,7 +572,7 @@ define([ cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-numbering', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inChart, _set.inSmartart, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, - _set.lostConnect, _set.disableOnStart], + _set.lostConnect, _set.disableOnStart, _set.docLockView], enableToggle: true, toggleGroup: 'markersGroup', split: true, @@ -589,7 +589,7 @@ define([ cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-multilevels', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inChart, _set.inSmartart, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, - _set.lostConnect, _set.disableOnStart], + _set.lostConnect, _set.disableOnStart, _set.docLockView], menu: true, dataHint: '1', dataHintDirection: 'top', @@ -622,7 +622,7 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-inserttable', lock: [_set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inEquation, _set.controlPlain, _set.richDelLock, _set.plainDelLock, _set.cantAddTable, _set.previewReviewMode, - _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: me.capBtnInsTable, menu: new Common.UI.Menu({ items: [ @@ -645,7 +645,7 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-insertimage', lock: [_set.paragraphLock, _set.headerLock, _set.inEquation, _set.controlPlain, _set.richDelLock, _set.plainDelLock, _set.contentLock, _set.cantAddImagePara, - _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: me.capBtnInsImage, menu: new Common.UI.Menu({ items: [ @@ -666,7 +666,7 @@ define([ caption: me.capBtnInsChart, iconCls: 'toolbar__icon btn-insertchart', lock: [ _set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.controlPlain, _set.richDelLock, _set.plainDelLock, _set.contentLock, - _set.chartLock, _set.cantAddChart, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + _set.chartLock, _set.cantAddChart, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], menu: true, dataHint: '1', dataHintDirection: 'bottom', @@ -679,7 +679,7 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-text', lock: [_set.paragraphLock, _set.headerLock, _set.inEquation, _set.controlPlain, _set.contentLock, _set.inFootnote, _set.previewReviewMode, _set.viewFormMode, - _set.lostConnect, _set.disableOnStart], + _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: me.capBtnInsTextbox, enableToggle: true, dataHint: '1', @@ -693,7 +693,7 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-textart', lock: [_set.paragraphLock, _set.headerLock, _set.inEquation, _set.controlPlain, _set.richDelLock, _set.plainDelLock, _set.contentLock, _set.inFootnote, _set.cantAddImagePara, - _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: me.capBtnInsTextart, menu: new Common.UI.Menu({ cls: 'menu-shapes', @@ -711,7 +711,7 @@ define([ id: 'id-toolbar-btn-editheader', cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-editheader', - lock: [ _set.previewReviewMode, _set.viewFormMode, _set.inEquation, _set.lostConnect, _set.disableOnStart], + lock: [ _set.previewReviewMode, _set.viewFormMode, _set.inEquation, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: me.capBtnInsHeader, menu: true, dataHint: '1', @@ -745,7 +745,7 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-datetime', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.richDelLock, _set.plainDelLock, _set.noParagraphSelected, _set.previewReviewMode, - _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: me.capBtnDateTime, dataHint: '1', dataHintDirection: 'bottom', @@ -758,7 +758,7 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-blankpage', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inEquation, _set.richDelLock, _set.plainDelLock, _set.inHeader, _set.inFootnote, _set.inControl, - _set.cantPageBreak, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + _set.cantPageBreak, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: me.capBtnBlankPage, dataHint: '1', dataHintDirection: 'bottom', @@ -771,7 +771,7 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-insertshape', lock: [_set.paragraphLock, _set.headerLock, _set.inEquation, _set.controlPlain, _set.contentLock, _set.inFootnote, _set.previewReviewMode, _set.viewFormMode, - _set.lostConnect, _set.disableOnStart], + _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: me.capBtnInsShape, enableToggle: true, menu: new Common.UI.Menu({cls: 'menu-shapes menu-insert-shape'}), @@ -786,7 +786,7 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-insertequation', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inChart, _set.controlPlain, _set.richDelLock, _set.plainDelLock, _set.cantAddEquation, - _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: me.capBtnInsEquation, split: true, menu: new Common.UI.Menu({cls: 'menu-shapes'}), @@ -801,7 +801,7 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-symbol', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.richDelLock, _set.plainDelLock, _set.noParagraphSelected, _set.previewReviewMode, - _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: me.capBtnInsSymbol, dataHint: '1', dataHintDirection: 'bottom', @@ -814,7 +814,7 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-dropcap', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inEquation, _set.controlPlain, _set.dropcapLock, _set.previewReviewMode, _set.viewFormMode, - _set.lostConnect, _set.disableOnStart], + _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: me.capBtnInsDropcap, menu: new Common.UI.Menu({ cls: 'ppm-toolbar shifted-right', @@ -858,7 +858,7 @@ define([ id: 'tlbtn-controls', cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-controls', - lock: [_set.paragraphLock, _set.headerLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.paragraphLock, _set.headerLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: me.capBtnInsControls, menu: new Common.UI.Menu({ cls: 'ppm-toolbar shifted-right', @@ -944,7 +944,7 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-columns', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.controlPlain, _set.inImage, _set.docPropsLock, _set.previewReviewMode, _set.viewFormMode, - _set.lostConnect, _set.disableOnStart], + _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: me.capBtnColumns, menu: new Common.UI.Menu({ cls: 'ppm-toolbar shifted-right', @@ -1003,7 +1003,7 @@ define([ id: 'tlbtn-pageorient', cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-pageorient', - lock: [_set.docPropsLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.docPropsLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: me.capBtnPageOrient, menu: new Common.UI.Menu({ cls: 'ppm-toolbar', @@ -1045,7 +1045,7 @@ define([ id: 'tlbtn-pagemargins', cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-pagemargins', - lock: [_set.docPropsLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.docPropsLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: me.capBtnMargins, menu: new Common.UI.Menu({ items: [ @@ -1108,7 +1108,7 @@ define([ id: 'tlbtn-pagesize', cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-pagesize', - lock: [_set.docPropsLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.docPropsLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: me.capBtnPageSize, menu: new Common.UI.Menu({ restoreHeight: true, @@ -1232,7 +1232,7 @@ define([ id: 'tlbtn-line-numbers', cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-line-numbering', - lock: [_set.docPropsLock, _set.inImagePara, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.docPropsLock, _set.inImagePara, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: me.capBtnLineNumbers, menu: new Common.UI.Menu({ cls: 'ppm-toolbar', @@ -1285,7 +1285,7 @@ define([ cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-clearstyle', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inChart, _set.inSmartart, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, - _set.lostConnect, _set.disableOnStart], + _set.lostConnect, _set.disableOnStart, _set.docLockView], dataHint: '1', dataHintDirection: 'top' }); @@ -1295,7 +1295,7 @@ define([ id: 'id-toolbar-btn-copystyle', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-copystyle', - lock: [ _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [ _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], enableToggle: true, dataHint: '1', dataHintDirection: 'bottom' @@ -1306,7 +1306,7 @@ define([ id: 'id-toolbar-btn-colorschemas', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-colorschemas', - lock: [_set.docSchemaLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.docSchemaLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], menu: new Common.UI.Menu({ cls: 'shifted-left', items: [], @@ -1322,7 +1322,7 @@ define([ id: 'id-toolbar-btn-mailrecepients', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-mailmerge', - lock: [_set.mmergeLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.mmergeLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], dataHint: '1', dataHintDirection: 'bottom', menu: new Common.UI.Menu({ @@ -1338,7 +1338,7 @@ define([ me.btnImgAlign = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-img-align', - lock: [_set.imageLock, _set.contentLock, _set.inImageInline, _set.noObjectSelected, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.imageLock, _set.contentLock, _set.inImageInline, _set.noObjectSelected, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: me.capImgAlign, menu: true, dataHint: '1', @@ -1349,7 +1349,7 @@ define([ me.btnImgGroup = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-img-group', - lock: [_set.imageLock, _set.contentLock, _set.inImageInline, _set.noObjectSelected, _set.cantGroup, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.imageLock, _set.contentLock, _set.inImageInline, _set.noObjectSelected, _set.cantGroup, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: me.capImgGroup, menu: true, dataHint: '1', @@ -1359,7 +1359,7 @@ define([ me.btnImgForward = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-img-frwd', - lock: [_set.cantArrange, _set.lostConnect, _set.contentLock, _set.noObjectSelected, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, _set.disableOnStart], + lock: [_set.cantArrange, _set.lostConnect, _set.contentLock, _set.noObjectSelected, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, _set.disableOnStart, _set.docLockView], caption: me.capImgForward, split: true, menu: true, @@ -1370,7 +1370,7 @@ define([ me.btnImgBackward = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-img-bkwd', - lock: [_set.cantArrange, _set.lostConnect, _set.contentLock, _set.noObjectSelected, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, _set.disableOnStart], + lock: [_set.cantArrange, _set.lostConnect, _set.contentLock, _set.noObjectSelected, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, _set.disableOnStart, _set.docLockView], caption: me.capImgBackward, split: true, menu: true, @@ -1381,7 +1381,7 @@ define([ me.btnImgWrapping = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-img-wrap', - lock: [_set.cantWrap, _set.imageLock, _set.contentLock, _set.noObjectSelected, _set.lostConnect, _set.previewReviewMode, _set.viewFormMode, _set.disableOnStart], + lock: [_set.cantWrap, _set.imageLock, _set.contentLock, _set.noObjectSelected, _set.lostConnect, _set.previewReviewMode, _set.viewFormMode, _set.disableOnStart, _set.docLockView], caption: me.capImgWrapping, menu: true, dataHint: '1', @@ -1392,7 +1392,7 @@ define([ me.btnWatermark = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-watermark', - lock: [_set.headerLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.headerLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], caption: me.capBtnWatermark, menu: new Common.UI.Menu({ cls: 'ppm-toolbar', @@ -1431,7 +1431,7 @@ define([ this.cmbFontSize = new Common.UI.ComboBox({ cls: 'input-group-nr', menuStyle: 'min-width: 55px;', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], hint: this.tipFontSize, data: [ {value: 8, displayValue: "8"}, @@ -1461,7 +1461,7 @@ define([ cls: 'input-group-nr', menuCls: 'scrollable-menu', menuStyle: 'min-width: 325px;', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], hint: this.tipFontName, store: new Common.Collections.Fonts(), dataHint: '1', @@ -1480,7 +1480,7 @@ define([ this.listStyles = new Common.UI.ComboDataView({ cls: 'combo-styles', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inChart, _set.inSmartart, _set.inSmartartInternal, _set.previewReviewMode, - _set.viewFormMode, _set.lostConnect, _set.disableOnStart], + _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], itemWidth: itemWidth, itemHeight: itemHeight, style: 'min-width:150px;', @@ -1738,7 +1738,7 @@ define([ this.btnsPageBreak = Common.Utils.injectButtons($host.find('.btn-slot.btn-pagebreak'), '', 'toolbar__icon btn-pagebreak', this.capBtnInsPagebreak, [Common.enumLock.paragraphLock, Common.enumLock.headerLock, Common.enumLock.richEditLock, Common.enumLock.plainEditLock, Common.enumLock.inEquation, Common.enumLock.richDelLock, Common.enumLock.plainDelLock, Common.enumLock.inHeader, Common.enumLock.inFootnote, Common.enumLock.inControl, Common.enumLock.cantPageBreak, Common.enumLock.previewReviewMode, - Common.enumLock.viewFormMode, Common.enumLock.lostConnect, Common.enumLock.disableOnStart], + Common.enumLock.viewFormMode, Common.enumLock.lostConnect, Common.enumLock.disableOnStart, Common.enumLock.docLockView], true, true, undefined, '1', 'bottom', 'small'); Array.prototype.push.apply(this.paragraphControls, this.btnsPageBreak); Array.prototype.push.apply(this.lockControls, this.btnsPageBreak); From c6cd767264cf115da607ae10342585aaa11c37a3 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova <julia.radzhabova@onlyoffice.com> Date: Fri, 23 Sep 2022 21:00:18 +0300 Subject: [PATCH 03/28] [DE] Lock review changes and comments when document is protected --- apps/common/main/lib/controller/Comments.js | 33 ++++++++++++++++--- .../main/lib/controller/ReviewChanges.js | 20 ++++++++--- .../main/app/controller/LeftMenu.js | 26 +++++++++++++-- 3 files changed, 66 insertions(+), 13 deletions(-) diff --git a/apps/common/main/lib/controller/Comments.js b/apps/common/main/lib/controller/Comments.js index 65bcb0e22..a8357d176 100644 --- a/apps/common/main/lib/controller/Comments.js +++ b/apps/common/main/lib/controller/Comments.js @@ -144,10 +144,12 @@ define([ } }, this, area); }.bind(this)); + Common.NotificationCenter.on('protect:doclock', _.bind(this.onChangeProtectDocument, this)); }, onLaunch: function () { var filter = Common.localStorage.getKeysFilter(); this.appPrefix = (filter && filter.length) ? filter.split(',')[0] : ''; + this._state = {viewmode: false}; this.collection = this.getApplication().getCollection('Common.Collections.Comments'); this.setComparator(); @@ -1645,16 +1647,26 @@ define([ }, setPreviewMode: function(mode) { - if (this.viewmode === mode) return; - this.viewmode = mode; - if (mode) + this._state.viewmode = mode; + this.updatePreviewMode(); + }, + + updatePreviewMode: function() { + var lockMode = this._state.docProtection ? this._state.docProtection.lockMode : undefined; + lockMode = (lockMode===Asc.c_oAscProtection.View || lockMode===Asc.c_oAscProtection.Forms); + var viewmode = this._state.viewmode || lockMode; + + if (this.viewmode === viewmode) return; + this.viewmode = viewmode; + + if (viewmode) this.prevcanComments = this.mode.canComments; - this.mode.canComments = (mode) ? false : this.prevcanComments; + this.mode.canComments = (viewmode) ? false : this.prevcanComments; this.closeEditing(); this.setMode(this.mode); this.updateComments(true); if (this.getPopover()) - mode ? this.getPopover().hide() : this.getPopover().update(true); + viewmode ? this.getPopover().hide() : this.getPopover().update(true); }, clearCollections: function() { @@ -1718,6 +1730,17 @@ define([ } } this.updateComments(true); + }, + + onChangeProtectDocument: function(props) { + if (!props) { + var docprotect = this.getApplication().getController('DocProtection'); + props = docprotect ? docprotect.getDocProps() : null; + } + if (props) { + this._state.docProtection = props; + this.updatePreviewMode(); + } } }, Common.Controllers.Comments || {})); diff --git a/apps/common/main/lib/controller/ReviewChanges.js b/apps/common/main/lib/controller/ReviewChanges.js index d25d1a9c6..b395255a8 100644 --- a/apps/common/main/lib/controller/ReviewChanges.js +++ b/apps/common/main/lib/controller/ReviewChanges.js @@ -102,7 +102,7 @@ define([ this.userCollection = this.getApplication().getCollection('Common.Collections.Users'); this.viewmode = false; - this._state = {posx: -1000, posy: -1000, popoverVisible: false, previewMode: false, compareSettings: null, wsLock: false, wsProps: []}; + this._state = {posx: -1000, posy: -1000, popoverVisible: false, previewMode: false, compareSettings: null, wsLock: false, wsProps: [], viewmode: false}; Common.NotificationCenter.on('reviewchanges:turn', this.onTurnPreview.bind(this)); Common.NotificationCenter.on('spelling:turn', this.onTurnSpelling.bind(this)); @@ -180,11 +180,20 @@ define([ }, setPreviewMode: function(mode) { //disable accept/reject in popover - if (this.viewmode === mode) return; - this.viewmode = mode; - if (mode) + this._state.viewmode = mode; + this.updatePreviewMode(); + }, + + updatePreviewMode: function() { + var lockMode = this._state.docProtection ? this._state.docProtection.lockMode : undefined; + lockMode = (lockMode===Asc.c_oAscProtection.View || lockMode===Asc.c_oAscProtection.Forms || lockMode===Asc.c_oAscProtection.Comments); + var viewmode = this._state.viewmode || lockMode; + + if (this.viewmode === viewmode) return; + this.viewmode = viewmode; + if (viewmode) this.prevcanReview = this.appConfig.canReview; - this.appConfig.canReview = (mode) ? false : this.prevcanReview; + this.appConfig.canReview = (viewmode) ? false : this.prevcanReview; var me = this; this.popoverChanges && this.popoverChanges.each(function (model) { model.set('hint', !me.appConfig.canReview); @@ -1024,6 +1033,7 @@ define([ this.lockToolbar(Common.enumLock.docLockForms, props.docLock && (props.lockMode===Asc.c_oAscProtection.Forms)); this.lockToolbar(Common.enumLock.docLockReview, props.docLock && (props.lockMode===Asc.c_oAscProtection.Review)); this.lockToolbar(Common.enumLock.docLockComments, props.docLock && (props.lockMode===Asc.c_oAscProtection.Comments)); + this.updatePreviewMode(); } }, diff --git a/apps/documenteditor/main/app/controller/LeftMenu.js b/apps/documenteditor/main/app/controller/LeftMenu.js index 1a9e70001..1fe6247ad 100644 --- a/apps/documenteditor/main/app/controller/LeftMenu.js +++ b/apps/documenteditor/main/app/controller/LeftMenu.js @@ -113,12 +113,13 @@ define([ if ( !this.leftMenu.panelHistory.isVisible() ) this.clickMenuFileItem(null, 'history'); }, this)); + Common.NotificationCenter.on('protect:doclock', _.bind(this.onChangeProtectDocument, this)); }, onLaunch: function() { this.leftMenu = this.createView('LeftMenu').render(); this.leftMenu.btnSearchBar.on('toggle', _.bind(this.onMenuSearchBar, this)); - + this._state = {viewmode: false}; Common.util.Shortcuts.delegateShortcuts({ shortcuts: { 'command+shift+s,ctrl+shift+s': _.bind(this.onShortcut, this, 'save'), @@ -581,8 +582,16 @@ define([ }, setPreviewMode: function(mode) { - if (this.viewmode === mode) return; - this.viewmode = mode; + this._state.viewmode = mode; + this.updatePreviewMode(); + }, + + updatePreviewMode: function() { + var lockMode = this._state.docProtection ? this._state.docProtection.lockMode : undefined; + lockMode = (lockMode===Asc.c_oAscProtection.View || lockMode===Asc.c_oAscProtection.Forms); + var viewmode = this._state.viewmode || lockMode; + if (this.viewmode === viewmode) return; + this.viewmode = viewmode; this.leftMenu.panelSearch && this.leftMenu.panelSearch.setSearchMode(this.viewmode ? 'no-replace' : 'search'); }, @@ -887,6 +896,17 @@ define([ return this.leftMenu && this.leftMenu.panelComments && this.leftMenu.panelComments.isVisible(); }, + onChangeProtectDocument: function(props) { + if (!props) { + var docprotect = this.getApplication().getController('DocProtection'); + props = docprotect ? docprotect.getDocProps() : null; + } + if (props) { + this._state.docProtection = props; + this.updatePreviewMode(); + } + }, + textNoTextFound : 'Text not found', newDocumentTitle : 'Unnamed document', requestEditRightsText : 'Requesting editing rights...', From 9aeffb19c5effcdf775564b5bfaaf7db90149b67 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova <julia.radzhabova@onlyoffice.com> Date: Fri, 23 Sep 2022 22:07:05 +0300 Subject: [PATCH 04/28] [DE] Lock controls when document is protected (fill forms only) --- apps/common/main/lib/view/ReviewChanges.js | 24 ++-- .../main/app/controller/DocProtection.js | 3 +- .../main/app/controller/DocumentHolder.js | 3 +- .../main/app/controller/Toolbar.js | 2 +- .../main/app/view/DocumentHolder.js | 2 +- apps/documenteditor/main/app/view/FormsTab.js | 22 ++-- apps/documenteditor/main/app/view/Links.js | 20 ++-- apps/documenteditor/main/app/view/Toolbar.js | 112 +++++++++--------- 8 files changed, 95 insertions(+), 93 deletions(-) diff --git a/apps/common/main/lib/view/ReviewChanges.js b/apps/common/main/lib/view/ReviewChanges.js index 12f007dbc..a9fa6c061 100644 --- a/apps/common/main/lib/view/ReviewChanges.js +++ b/apps/common/main/lib/view/ReviewChanges.js @@ -259,7 +259,7 @@ define([ caption: this.txtAccept, split: !this.appConfig.canUseReviewPermissions, iconCls: 'toolbar__icon btn-review-save', - lock: [_set.reviewChangelock, _set.isReviewOnly, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView], + lock: [_set.reviewChangelock, _set.isReviewOnly, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms], dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: 'small' @@ -271,7 +271,7 @@ define([ caption: this.txtReject, split: !this.appConfig.canUseReviewPermissions, iconCls: 'toolbar__icon btn-review-deny', - lock: [_set.reviewChangelock, _set.isReviewOnly, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView], + lock: [_set.reviewChangelock, _set.isReviewOnly, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms], dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: 'small' @@ -284,7 +284,7 @@ define([ caption: this.txtCompare, split: true, iconCls: 'toolbar__icon btn-compare', - lock: [_set.hasCoeditingUsers, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView], + lock: [_set.hasCoeditingUsers, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms], dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: 'small' @@ -294,7 +294,7 @@ define([ this.btnTurnOn = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-ic-review', - lock: [_set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView], + lock: [_set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms], caption: this.txtTurnon, split: !this.appConfig.isReviewOnly, enableToggle: true, @@ -309,7 +309,7 @@ define([ this.btnPrev = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-review-prev', - lock: [_set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView], + lock: [_set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms], caption: this.txtPrev, dataHint: '1', dataHintDirection: 'bottom', @@ -320,7 +320,7 @@ define([ this.btnNext = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-review-next', - lock: [_set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView], + lock: [_set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms], caption: this.txtNext, dataHint: '1', dataHintDirection: 'bottom', @@ -336,7 +336,7 @@ define([ this.btnReviewView = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-ic-reviewview', - lock: [_set.viewFormMode, _set.lostConnect, _set.docLockView], + lock: [_set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms], caption: this.txtView, menu: new Common.UI.Menu({ cls: 'ppm-toolbar', @@ -450,7 +450,7 @@ define([ caption: this.txtCommentRemove, split: true, iconCls: 'toolbar__icon btn-rem-comment', - lock: [_set.previewReviewMode, _set.viewFormMode, _set.hideComments, _set['Objects'], _set.lostConnect, _set.docLockView], + lock: [_set.previewReviewMode, _set.viewFormMode, _set.hideComments, _set['Objects'], _set.lostConnect, _set.docLockView, _set.docLockForms], dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: 'small' @@ -461,7 +461,7 @@ define([ caption: this.txtCommentResolve, split: true, iconCls: 'toolbar__icon btn-resolve-all', - lock: [_set.previewReviewMode, _set.viewFormMode, _set.hideComments, _set['Objects'], _set.lostConnect, _set.docLockView], + lock: [_set.previewReviewMode, _set.viewFormMode, _set.hideComments, _set['Objects'], _set.lostConnect, _set.docLockView, _set.docLockForms], dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: 'small' @@ -731,7 +731,7 @@ define([ var button = new Common.UI.Button({ cls : 'btn-toolbar', iconCls : 'toolbar__icon btn-ic-review', - lock: [Common.enumLock.viewMode, Common.enumLock.previewReviewMode, Common.enumLock.viewFormMode, Common.enumLock.lostConnect, Common.enumLock.docLockView], + lock: [Common.enumLock.viewMode, Common.enumLock.previewReviewMode, Common.enumLock.viewFormMode, Common.enumLock.lostConnect, Common.enumLock.docLockView, Common.enumLock.docLockForms], hintAnchor : 'top', hint : this.tipReview, split : !this.appConfig.isReviewOnly, @@ -778,7 +778,7 @@ define([ button = new Common.UI.Button({ cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-ic-docspell', - lock: [Common.enumLock.viewMode, Common.enumLock.viewFormMode, Common.enumLock.previewReviewMode, Common.enumLock.docLockView], + lock: [Common.enumLock.viewMode, Common.enumLock.viewFormMode, Common.enumLock.previewReviewMode, Common.enumLock.docLockView, Common.enumLock.docLockForms], hintAnchor : 'top', hint: this.tipSetSpelling, enableToggle: true, @@ -794,7 +794,7 @@ define([ button = new Common.UI.Button({ cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-ic-doclang', - lock: [Common.enumLock.viewMode, Common.enumLock.previewReviewMode, Common.enumLock.viewFormMode, Common.enumLock.noSpellcheckLangs, Common.enumLock.lostConnect, Common.enumLock.docLockView], + lock: [Common.enumLock.viewMode, Common.enumLock.previewReviewMode, Common.enumLock.viewFormMode, Common.enumLock.noSpellcheckLangs, Common.enumLock.lostConnect, Common.enumLock.docLockView, Common.enumLock.docLockForms], hintAnchor : 'top', hint: this.tipSetDocLang, dataHint: '0', diff --git a/apps/documenteditor/main/app/controller/DocProtection.js b/apps/documenteditor/main/app/controller/DocProtection.js index 7dd4d9d0f..0be9788b0 100644 --- a/apps/documenteditor/main/app/controller/DocProtection.js +++ b/apps/documenteditor/main/app/controller/DocProtection.js @@ -132,6 +132,7 @@ define([ // props.asc_setLockPwd(value); // me.api.asc_setProtectedDocument(props); + Common.Utils.InternalSettings.set('protect-test-type', props); me.view.btnProtectDoc.toggle(true, true); // test me.onChangeProtectDocument(); // test } @@ -217,7 +218,7 @@ define([ type; if (docProtected) { - type = Asc.c_oAscProtection.View; + type = Common.Utils.InternalSettings.get('protect-test-type'); } ///////////// this._state.docProtection = {docLock: docProtected, lockMode: type}; diff --git a/apps/documenteditor/main/app/controller/DocumentHolder.js b/apps/documenteditor/main/app/controller/DocumentHolder.js index e5c6ab6b3..4fdab482b 100644 --- a/apps/documenteditor/main/app/controller/DocumentHolder.js +++ b/apps/documenteditor/main/app/controller/DocumentHolder.js @@ -828,7 +828,8 @@ define([ onDialogAddHyperlink: function() { var me = this; var win, props, text; - if (me.api && me.mode.isEdit && !me._isDisabled && !me.getApplication().getController('LeftMenu').leftMenu.menuFile.isVisible()){ + var lockMode = me.documentHolder.docProtection ? me.documentHolder.docProtection.lockMode : undefined; + if (me.api && me.mode.isEdit && !(me._isDisabled || lockMode===Asc.c_oAscProtection.View || lockMode===Asc.c_oAscProtection.Comments || lockMode===Asc.c_oAscProtection.Forms) && !me.getApplication().getController('LeftMenu').leftMenu.menuFile.isVisible()){ var handlerDlg = function(dlg, result) { if (result == 'ok') { props = dlg.getSettings(); diff --git a/apps/documenteditor/main/app/controller/Toolbar.js b/apps/documenteditor/main/app/controller/Toolbar.js index 5c413ae5f..2ba838dfb 100644 --- a/apps/documenteditor/main/app/controller/Toolbar.js +++ b/apps/documenteditor/main/app/controller/Toolbar.js @@ -3264,7 +3264,7 @@ define([ this.btnsComment = Common.Utils.injectButtons(this.toolbar.$el.find('.slot-comment'), 'tlbtn-addcomment-', 'toolbar__icon btn-menu-comments', this.toolbar.capBtnComment, [ Common.enumLock.paragraphLock, Common.enumLock.headerLock, Common.enumLock.richEditLock, Common.enumLock.plainEditLock, Common.enumLock.richDelLock, Common.enumLock.plainDelLock, Common.enumLock.cantAddQuotedComment, Common.enumLock.imageLock, Common.enumLock.inSpecificForm, Common.enumLock.inImage, Common.enumLock.lostConnect, Common.enumLock.disableOnStart, - Common.enumLock.previewReviewMode, Common.enumLock.viewFormMode, Common.enumLock.docLockView ], + Common.enumLock.previewReviewMode, Common.enumLock.viewFormMode, Common.enumLock.docLockView, Common.enumLock.docLockForms ], undefined, undefined, undefined, '1', 'bottom'); if ( this.btnsComment.length ) { var _comments = DE.getController('Common.Controllers.Comments').getView(); diff --git a/apps/documenteditor/main/app/view/DocumentHolder.js b/apps/documenteditor/main/app/view/DocumentHolder.js index a14786b13..779e39235 100644 --- a/apps/documenteditor/main/app/view/DocumentHolder.js +++ b/apps/documenteditor/main/app/view/DocumentHolder.js @@ -170,7 +170,7 @@ define([ } me.menuViewUndo.setVisible(me.mode.canCoAuthoring && me.mode.canComments && !me._isDisabled); - me.menuViewUndo.setDisabled(!me.api.asc_getCanUndo() || lockMode===Asc.c_oAscProtection.View || lockMode===Asc.c_oAscProtection.Forms); + me.menuViewUndo.setDisabled(!me.api.asc_getCanUndo() || lockMode===Asc.c_oAscProtection.View); me.menuViewCopySeparator.setVisible(isInSign); var isRequested = (signProps) ? signProps.asc_getRequested() : false; diff --git a/apps/documenteditor/main/app/view/FormsTab.js b/apps/documenteditor/main/app/view/FormsTab.js index e1a9a91e4..8300eb357 100644 --- a/apps/documenteditor/main/app/view/FormsTab.js +++ b/apps/documenteditor/main/app/view/FormsTab.js @@ -169,7 +169,7 @@ define([ this.btnTextField = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-text-field', - lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: this.capBtnText, dataHint: '1', dataHintDirection: 'bottom', @@ -180,7 +180,7 @@ define([ this.btnComboBox = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-combo-box', - lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: this.capBtnComboBox, dataHint: '1', dataHintDirection: 'bottom', @@ -191,7 +191,7 @@ define([ this.btnDropDown = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-dropdown', - lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: this.capBtnDropDown, dataHint: '1', dataHintDirection: 'bottom', @@ -202,7 +202,7 @@ define([ this.btnCheckBox = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-checkbox', - lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: this.capBtnCheckBox, dataHint: '1', dataHintDirection: 'bottom', @@ -213,7 +213,7 @@ define([ this.btnRadioBox = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-radio-button', - lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: this.capBtnRadioBox, dataHint: '1', dataHintDirection: 'bottom', @@ -224,7 +224,7 @@ define([ this.btnImageField = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-insertimage', - lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.complexForm, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.complexForm, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: this.capBtnImage, dataHint: '1', dataHintDirection: 'bottom', @@ -235,7 +235,7 @@ define([ this.btnEmailField = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-email', - lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: this.capBtnEmail, dataHint: '1', dataHintDirection: 'bottom', @@ -246,7 +246,7 @@ define([ this.btnPhoneField = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-phone', - lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: this.capBtnPhone, dataHint: '1', dataHintDirection: 'bottom', @@ -257,7 +257,7 @@ define([ this.btnComplexField = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon complex-field', - lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.complexForm, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.complexForm, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: this.capBtnComplex, dataHint: '1', dataHintDirection: 'bottom', @@ -268,7 +268,7 @@ define([ this.btnViewForm = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-sheet-view', - lock: [ _set.previewReviewMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [ _set.previewReviewMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: this.capBtnView, enableToggle: true, dataHint: '1', @@ -291,7 +291,7 @@ define([ this.btnHighlight = new Common.UI.ButtonColored({ cls : 'btn-toolbar', iconCls : 'toolbar__icon btn-highlight', - lock: [ _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [ _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption : this.textHighlight, menu : true, additionalItems: [ this.mnuNoFormsColor = new Common.UI.MenuItem({ diff --git a/apps/documenteditor/main/app/view/Links.js b/apps/documenteditor/main/app/view/Links.js index 8fce3db9d..4d9730111 100644 --- a/apps/documenteditor/main/app/view/Links.js +++ b/apps/documenteditor/main/app/view/Links.js @@ -169,13 +169,13 @@ define([ $host = me.toolbar.$el; this.btnsContents = Common.Utils.injectButtons($host.find('.btn-slot.btn-contents'), '', 'toolbar__icon btn-contents', me.capBtnInsContents, - [_set.inHeader, _set.richEditLock, _set.plainEditLock, _set.richDelLock, _set.plainDelLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + [_set.inHeader, _set.richEditLock, _set.plainEditLock, _set.richDelLock, _set.plainDelLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], true, true, undefined, '1', 'bottom', 'small'); this.btnsNotes = Common.Utils.injectButtons($host.find('.btn-slot.slot-notes'), '', 'toolbar__icon btn-notes', me.capBtnInsFootnote, - [_set.paragraphLock, _set.inEquation, _set.inImage, _set.inHeader, _set.controlPlain, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + [_set.paragraphLock, _set.inEquation, _set.inImage, _set.inHeader, _set.controlPlain, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], true, true, undefined, '1', 'bottom', 'small'); this.btnsHyperlink = Common.Utils.injectButtons($host.find('.btn-slot.slot-inshyperlink'), '', 'toolbar__icon btn-inserthyperlink', me.capBtnInsLink, - [_set.paragraphLock, _set.headerLock, _set.hyperlinkLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + [_set.paragraphLock, _set.headerLock, _set.hyperlinkLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], undefined, undefined, undefined, '1', 'bottom', 'small'); Array.prototype.push.apply(this.paragraphControls, this.btnsContents.concat(this.btnsNotes, this.btnsHyperlink)); @@ -183,7 +183,7 @@ define([ parentEl: $host.find('#slot-btn-contents-update'), cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-update', - lock: [ _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [ _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockForms], caption: this.capBtnContentsUpdate, split: true, menu: true, @@ -197,7 +197,7 @@ define([ parentEl: $host.find('#slot-btn-add-text'), cls: 'btn-toolbar', iconCls: 'toolbar__icon add-text', - lock: [ _set.cantAddTextTOF, _set.inHeader, _set.inFootnote, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [ _set.cantAddTextTOF, _set.inHeader, _set.inFootnote, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: this.capBtnAddText, menu: new Common.UI.Menu({ items: [] @@ -212,7 +212,7 @@ define([ parentEl: $host.find('#slot-btn-bookmarks'), cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-bookmarks', - lock: [_set.paragraphLock, _set.inHeader, _set.headerLock, _set.controlPlain, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.paragraphLock, _set.inHeader, _set.headerLock, _set.controlPlain, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: this.capBtnBookmarks, dataHint: '1', dataHintDirection: 'bottom', @@ -224,7 +224,7 @@ define([ parentEl: $host.find('#slot-btn-caption'), cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-caption', - lock: [_set.inHeader, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.inHeader, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: this.capBtnCaption, dataHint: '1', dataHintDirection: 'bottom', @@ -236,7 +236,7 @@ define([ parentEl: $host.find('#slot-btn-crossref'), cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-cross-reference', - lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.richEditLock, _set.plainEditLock, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.richEditLock, _set.plainEditLock, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: this.capBtnCrossRef, dataHint: '1', dataHintDirection: 'bottom', @@ -248,7 +248,7 @@ define([ parentEl: $host.find('#slot-btn-tof'), cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-contents', - lock: [_set.inHeader, _set.richEditLock, _set.plainEditLock, _set.richDelLock, _set.plainDelLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.inHeader, _set.richEditLock, _set.plainEditLock, _set.richDelLock, _set.plainDelLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: this.capBtnTOF, dataHint: '1', dataHintDirection: 'left', @@ -260,7 +260,7 @@ define([ parentEl: $host.find('#slot-btn-tof-update'), cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-update', - lock: [_set.paragraphLock, _set.inHeader, _set.richEditLock, _set.plainEditLock, _set.richDelLock, _set.plainDelLock, _set.cantUpdateTOF, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.paragraphLock, _set.inHeader, _set.richEditLock, _set.plainEditLock, _set.richDelLock, _set.plainDelLock, _set.cantUpdateTOF, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: this.capBtnContentsUpdate, dataHint: '1', dataHintDirection: 'left', diff --git a/apps/documenteditor/main/app/view/Toolbar.js b/apps/documenteditor/main/app/view/Toolbar.js index d7f0032d5..eedd0d7e1 100644 --- a/apps/documenteditor/main/app/view/Toolbar.js +++ b/apps/documenteditor/main/app/view/Toolbar.js @@ -238,7 +238,7 @@ define([ id: 'id-toolbar-btn-copy', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-copy', - lock: [_set.copyLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.copyLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart], dataHint: '1', dataHintDirection: 'top', dataHintTitle: 'C' @@ -281,7 +281,7 @@ define([ id: 'id-toolbar-btn-incfont', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-incfont', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], dataHint: '1', dataHintDirection: 'top' }); @@ -291,7 +291,7 @@ define([ id: 'id-toolbar-btn-decfont', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-decfont', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], dataHint: '1', dataHintDirection: 'top' }); @@ -301,7 +301,7 @@ define([ id: 'id-toolbar-btn-bold', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-bold', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], enableToggle: true, dataHint: '1', dataHintDirection: 'bottom' @@ -312,7 +312,7 @@ define([ id: 'id-toolbar-btn-italic', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-italic', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], enableToggle: true, dataHint: '1', dataHintDirection: 'bottom' @@ -323,7 +323,7 @@ define([ id: 'id-toolbar-btn-underline', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-underline', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], enableToggle: true, dataHint: '1', dataHintDirection: 'bottom' @@ -334,7 +334,7 @@ define([ id: 'id-toolbar-btn-strikeout', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-strikeout', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], enableToggle: true, dataHint: '1', dataHintDirection: 'bottom' @@ -345,7 +345,7 @@ define([ id: 'id-toolbar-btn-superscript', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-superscript', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inEquation, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inEquation, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], enableToggle: true, toggleGroup: 'superscriptGroup', dataHint: '1', @@ -357,7 +357,7 @@ define([ id: 'id-toolbar-btn-subscript', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-subscript', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inEquation, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inEquation, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], enableToggle: true, toggleGroup: 'superscriptGroup', dataHint: '1', @@ -370,7 +370,7 @@ define([ cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-highlight', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inChart, _set.inSmartart, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, - _set.lostConnect, _set.disableOnStart, _set.docLockView], + _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], enableToggle: true, allowDepress: true, split: true, @@ -395,7 +395,7 @@ define([ id: 'id-toolbar-btn-fontcolor', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-fontcolor', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], split: true, menu: true, auto: true, @@ -410,7 +410,7 @@ define([ cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-paracolor', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inChart, _set.inSmartart, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, - _set.lostConnect, _set.disableOnStart, _set.docLockView], + _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], split: true, transparent: true, menu: true, @@ -425,7 +425,7 @@ define([ id: 'id-toolbar-btn-case', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-change-case', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], menu: new Common.UI.Menu({ items: [ {caption: this.mniSentenceCase, value: Asc.c_oAscChangeTextCaseType.SentenceCase}, @@ -444,7 +444,7 @@ define([ id: 'id-toolbar-btn-align-left', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-align-left', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], enableToggle: true, toggleGroup: 'alignGroup', dataHint: '1', @@ -456,7 +456,7 @@ define([ id: 'id-toolbar-btn-align-center', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-align-center', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], enableToggle: true, toggleGroup: 'alignGroup', dataHint: '1', @@ -468,7 +468,7 @@ define([ id: 'id-toolbar-btn-align-right', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-align-right', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], enableToggle: true, toggleGroup: 'alignGroup', dataHint: '1', @@ -480,7 +480,7 @@ define([ id: 'id-toolbar-btn-align-just', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-align-just', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], enableToggle: true, toggleGroup: 'alignGroup', dataHint: '1', @@ -492,7 +492,7 @@ define([ id: 'id-toolbar-btn-decoffset', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-decoffset', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], dataHint: '1', dataHintDirection: 'top' }); @@ -502,7 +502,7 @@ define([ id: 'id-toolbar-btn-incoffset', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-incoffset', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], dataHint: '1', dataHintDirection: 'top' }); @@ -512,7 +512,7 @@ define([ id: 'id-toolbar-btn-linespace', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-linespace', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], menu: new Common.UI.Menu({ style: 'min-width: 60px;', items: [ @@ -534,7 +534,7 @@ define([ id: 'id-toolbar-btn-hidenchars', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-paragraph', - lock: [ _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [ _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], enableToggle: true, split: true, menu: new Common.UI.Menu({ @@ -555,7 +555,7 @@ define([ cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-setmarkers', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inChart, _set.inSmartart, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, - _set.lostConnect, _set.disableOnStart, _set.docLockView], + _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], enableToggle: true, toggleGroup: 'markersGroup', split: true, @@ -572,7 +572,7 @@ define([ cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-numbering', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inChart, _set.inSmartart, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, - _set.lostConnect, _set.disableOnStart, _set.docLockView], + _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], enableToggle: true, toggleGroup: 'markersGroup', split: true, @@ -589,7 +589,7 @@ define([ cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-multilevels', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inChart, _set.inSmartart, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, - _set.lostConnect, _set.disableOnStart, _set.docLockView], + _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], menu: true, dataHint: '1', dataHintDirection: 'top', @@ -622,7 +622,7 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-inserttable', lock: [_set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inEquation, _set.controlPlain, _set.richDelLock, _set.plainDelLock, _set.cantAddTable, _set.previewReviewMode, - _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: me.capBtnInsTable, menu: new Common.UI.Menu({ items: [ @@ -645,7 +645,7 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-insertimage', lock: [_set.paragraphLock, _set.headerLock, _set.inEquation, _set.controlPlain, _set.richDelLock, _set.plainDelLock, _set.contentLock, _set.cantAddImagePara, - _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: me.capBtnInsImage, menu: new Common.UI.Menu({ items: [ @@ -666,7 +666,7 @@ define([ caption: me.capBtnInsChart, iconCls: 'toolbar__icon btn-insertchart', lock: [ _set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.controlPlain, _set.richDelLock, _set.plainDelLock, _set.contentLock, - _set.chartLock, _set.cantAddChart, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + _set.chartLock, _set.cantAddChart, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], menu: true, dataHint: '1', dataHintDirection: 'bottom', @@ -679,7 +679,7 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-text', lock: [_set.paragraphLock, _set.headerLock, _set.inEquation, _set.controlPlain, _set.contentLock, _set.inFootnote, _set.previewReviewMode, _set.viewFormMode, - _set.lostConnect, _set.disableOnStart, _set.docLockView], + _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: me.capBtnInsTextbox, enableToggle: true, dataHint: '1', @@ -693,7 +693,7 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-textart', lock: [_set.paragraphLock, _set.headerLock, _set.inEquation, _set.controlPlain, _set.richDelLock, _set.plainDelLock, _set.contentLock, _set.inFootnote, _set.cantAddImagePara, - _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: me.capBtnInsTextart, menu: new Common.UI.Menu({ cls: 'menu-shapes', @@ -711,7 +711,7 @@ define([ id: 'id-toolbar-btn-editheader', cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-editheader', - lock: [ _set.previewReviewMode, _set.viewFormMode, _set.inEquation, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [ _set.previewReviewMode, _set.viewFormMode, _set.inEquation, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: me.capBtnInsHeader, menu: true, dataHint: '1', @@ -745,7 +745,7 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-datetime', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.richDelLock, _set.plainDelLock, _set.noParagraphSelected, _set.previewReviewMode, - _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: me.capBtnDateTime, dataHint: '1', dataHintDirection: 'bottom', @@ -758,7 +758,7 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-blankpage', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inEquation, _set.richDelLock, _set.plainDelLock, _set.inHeader, _set.inFootnote, _set.inControl, - _set.cantPageBreak, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + _set.cantPageBreak, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: me.capBtnBlankPage, dataHint: '1', dataHintDirection: 'bottom', @@ -771,7 +771,7 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-insertshape', lock: [_set.paragraphLock, _set.headerLock, _set.inEquation, _set.controlPlain, _set.contentLock, _set.inFootnote, _set.previewReviewMode, _set.viewFormMode, - _set.lostConnect, _set.disableOnStart, _set.docLockView], + _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: me.capBtnInsShape, enableToggle: true, menu: new Common.UI.Menu({cls: 'menu-shapes menu-insert-shape'}), @@ -786,7 +786,7 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-insertequation', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inChart, _set.controlPlain, _set.richDelLock, _set.plainDelLock, _set.cantAddEquation, - _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: me.capBtnInsEquation, split: true, menu: new Common.UI.Menu({cls: 'menu-shapes'}), @@ -801,7 +801,7 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-symbol', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.richDelLock, _set.plainDelLock, _set.noParagraphSelected, _set.previewReviewMode, - _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: me.capBtnInsSymbol, dataHint: '1', dataHintDirection: 'bottom', @@ -814,7 +814,7 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-dropcap', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inEquation, _set.controlPlain, _set.dropcapLock, _set.previewReviewMode, _set.viewFormMode, - _set.lostConnect, _set.disableOnStart, _set.docLockView], + _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: me.capBtnInsDropcap, menu: new Common.UI.Menu({ cls: 'ppm-toolbar shifted-right', @@ -858,7 +858,7 @@ define([ id: 'tlbtn-controls', cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-controls', - lock: [_set.paragraphLock, _set.headerLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.paragraphLock, _set.headerLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: me.capBtnInsControls, menu: new Common.UI.Menu({ cls: 'ppm-toolbar shifted-right', @@ -944,7 +944,7 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-columns', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.controlPlain, _set.inImage, _set.docPropsLock, _set.previewReviewMode, _set.viewFormMode, - _set.lostConnect, _set.disableOnStart, _set.docLockView], + _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: me.capBtnColumns, menu: new Common.UI.Menu({ cls: 'ppm-toolbar shifted-right', @@ -1003,7 +1003,7 @@ define([ id: 'tlbtn-pageorient', cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-pageorient', - lock: [_set.docPropsLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.docPropsLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: me.capBtnPageOrient, menu: new Common.UI.Menu({ cls: 'ppm-toolbar', @@ -1045,7 +1045,7 @@ define([ id: 'tlbtn-pagemargins', cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-pagemargins', - lock: [_set.docPropsLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.docPropsLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: me.capBtnMargins, menu: new Common.UI.Menu({ items: [ @@ -1108,7 +1108,7 @@ define([ id: 'tlbtn-pagesize', cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-pagesize', - lock: [_set.docPropsLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.docPropsLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: me.capBtnPageSize, menu: new Common.UI.Menu({ restoreHeight: true, @@ -1232,7 +1232,7 @@ define([ id: 'tlbtn-line-numbers', cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-line-numbering', - lock: [_set.docPropsLock, _set.inImagePara, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.docPropsLock, _set.inImagePara, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: me.capBtnLineNumbers, menu: new Common.UI.Menu({ cls: 'ppm-toolbar', @@ -1285,7 +1285,7 @@ define([ cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-clearstyle', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inChart, _set.inSmartart, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, - _set.lostConnect, _set.disableOnStart, _set.docLockView], + _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], dataHint: '1', dataHintDirection: 'top' }); @@ -1295,7 +1295,7 @@ define([ id: 'id-toolbar-btn-copystyle', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-copystyle', - lock: [ _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [ _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], enableToggle: true, dataHint: '1', dataHintDirection: 'bottom' @@ -1306,7 +1306,7 @@ define([ id: 'id-toolbar-btn-colorschemas', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-colorschemas', - lock: [_set.docSchemaLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.docSchemaLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], menu: new Common.UI.Menu({ cls: 'shifted-left', items: [], @@ -1322,7 +1322,7 @@ define([ id: 'id-toolbar-btn-mailrecepients', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-mailmerge', - lock: [_set.mmergeLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.mmergeLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], dataHint: '1', dataHintDirection: 'bottom', menu: new Common.UI.Menu({ @@ -1338,7 +1338,7 @@ define([ me.btnImgAlign = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-img-align', - lock: [_set.imageLock, _set.contentLock, _set.inImageInline, _set.noObjectSelected, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.imageLock, _set.contentLock, _set.inImageInline, _set.noObjectSelected, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: me.capImgAlign, menu: true, dataHint: '1', @@ -1349,7 +1349,7 @@ define([ me.btnImgGroup = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-img-group', - lock: [_set.imageLock, _set.contentLock, _set.inImageInline, _set.noObjectSelected, _set.cantGroup, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.imageLock, _set.contentLock, _set.inImageInline, _set.noObjectSelected, _set.cantGroup, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: me.capImgGroup, menu: true, dataHint: '1', @@ -1359,7 +1359,7 @@ define([ me.btnImgForward = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-img-frwd', - lock: [_set.cantArrange, _set.lostConnect, _set.contentLock, _set.noObjectSelected, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, _set.disableOnStart, _set.docLockView], + lock: [_set.cantArrange, _set.lostConnect, _set.contentLock, _set.noObjectSelected, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: me.capImgForward, split: true, menu: true, @@ -1370,7 +1370,7 @@ define([ me.btnImgBackward = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-img-bkwd', - lock: [_set.cantArrange, _set.lostConnect, _set.contentLock, _set.noObjectSelected, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, _set.disableOnStart, _set.docLockView], + lock: [_set.cantArrange, _set.lostConnect, _set.contentLock, _set.noObjectSelected, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: me.capImgBackward, split: true, menu: true, @@ -1381,7 +1381,7 @@ define([ me.btnImgWrapping = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-img-wrap', - lock: [_set.cantWrap, _set.imageLock, _set.contentLock, _set.noObjectSelected, _set.lostConnect, _set.previewReviewMode, _set.viewFormMode, _set.disableOnStart, _set.docLockView], + lock: [_set.cantWrap, _set.imageLock, _set.contentLock, _set.noObjectSelected, _set.lostConnect, _set.previewReviewMode, _set.viewFormMode, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: me.capImgWrapping, menu: true, dataHint: '1', @@ -1392,7 +1392,7 @@ define([ me.btnWatermark = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-watermark', - lock: [_set.headerLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.headerLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], caption: me.capBtnWatermark, menu: new Common.UI.Menu({ cls: 'ppm-toolbar', @@ -1431,7 +1431,7 @@ define([ this.cmbFontSize = new Common.UI.ComboBox({ cls: 'input-group-nr', menuStyle: 'min-width: 55px;', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], hint: this.tipFontSize, data: [ {value: 8, displayValue: "8"}, @@ -1461,7 +1461,7 @@ define([ cls: 'input-group-nr', menuCls: 'scrollable-menu', menuStyle: 'min-width: 325px;', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], hint: this.tipFontName, store: new Common.Collections.Fonts(), dataHint: '1', @@ -1480,7 +1480,7 @@ define([ this.listStyles = new Common.UI.ComboDataView({ cls: 'combo-styles', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inChart, _set.inSmartart, _set.inSmartartInternal, _set.previewReviewMode, - _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], itemWidth: itemWidth, itemHeight: itemHeight, style: 'min-width:150px;', @@ -1738,7 +1738,7 @@ define([ this.btnsPageBreak = Common.Utils.injectButtons($host.find('.btn-slot.btn-pagebreak'), '', 'toolbar__icon btn-pagebreak', this.capBtnInsPagebreak, [Common.enumLock.paragraphLock, Common.enumLock.headerLock, Common.enumLock.richEditLock, Common.enumLock.plainEditLock, Common.enumLock.inEquation, Common.enumLock.richDelLock, Common.enumLock.plainDelLock, Common.enumLock.inHeader, Common.enumLock.inFootnote, Common.enumLock.inControl, Common.enumLock.cantPageBreak, Common.enumLock.previewReviewMode, - Common.enumLock.viewFormMode, Common.enumLock.lostConnect, Common.enumLock.disableOnStart, Common.enumLock.docLockView], + Common.enumLock.viewFormMode, Common.enumLock.lostConnect, Common.enumLock.disableOnStart, Common.enumLock.docLockView, Common.enumLock.docLockForms], true, true, undefined, '1', 'bottom', 'small'); Array.prototype.push.apply(this.paragraphControls, this.btnsPageBreak); Array.prototype.push.apply(this.lockControls, this.btnsPageBreak); From fba576115ca928843fb29db6caa99d19afa8c508 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova <julia.radzhabova@onlyoffice.com> Date: Fri, 23 Sep 2022 23:43:09 +0300 Subject: [PATCH 05/28] [DE] Lock controls when document is protected (comments only) --- apps/common/main/lib/view/ReviewChanges.js | 20 +-- apps/documenteditor/main/app/view/FormsTab.js | 28 ++--- apps/documenteditor/main/app/view/Links.js | 20 +-- apps/documenteditor/main/app/view/Toolbar.js | 114 +++++++++--------- 4 files changed, 91 insertions(+), 91 deletions(-) diff --git a/apps/common/main/lib/view/ReviewChanges.js b/apps/common/main/lib/view/ReviewChanges.js index a9fa6c061..e8596856d 100644 --- a/apps/common/main/lib/view/ReviewChanges.js +++ b/apps/common/main/lib/view/ReviewChanges.js @@ -259,7 +259,7 @@ define([ caption: this.txtAccept, split: !this.appConfig.canUseReviewPermissions, iconCls: 'toolbar__icon btn-review-save', - lock: [_set.reviewChangelock, _set.isReviewOnly, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms], + lock: [_set.reviewChangelock, _set.isReviewOnly, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms, _set.docLockComments], dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: 'small' @@ -271,7 +271,7 @@ define([ caption: this.txtReject, split: !this.appConfig.canUseReviewPermissions, iconCls: 'toolbar__icon btn-review-deny', - lock: [_set.reviewChangelock, _set.isReviewOnly, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms], + lock: [_set.reviewChangelock, _set.isReviewOnly, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms, _set.docLockComments], dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: 'small' @@ -284,7 +284,7 @@ define([ caption: this.txtCompare, split: true, iconCls: 'toolbar__icon btn-compare', - lock: [_set.hasCoeditingUsers, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms], + lock: [_set.hasCoeditingUsers, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms, _set.docLockComments], dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: 'small' @@ -294,7 +294,7 @@ define([ this.btnTurnOn = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-ic-review', - lock: [_set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms], + lock: [_set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: this.txtTurnon, split: !this.appConfig.isReviewOnly, enableToggle: true, @@ -309,7 +309,7 @@ define([ this.btnPrev = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-review-prev', - lock: [_set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms], + lock: [_set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: this.txtPrev, dataHint: '1', dataHintDirection: 'bottom', @@ -320,7 +320,7 @@ define([ this.btnNext = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-review-next', - lock: [_set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms], + lock: [_set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: this.txtNext, dataHint: '1', dataHintDirection: 'bottom', @@ -336,7 +336,7 @@ define([ this.btnReviewView = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-ic-reviewview', - lock: [_set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms], + lock: [_set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: this.txtView, menu: new Common.UI.Menu({ cls: 'ppm-toolbar', @@ -731,7 +731,7 @@ define([ var button = new Common.UI.Button({ cls : 'btn-toolbar', iconCls : 'toolbar__icon btn-ic-review', - lock: [Common.enumLock.viewMode, Common.enumLock.previewReviewMode, Common.enumLock.viewFormMode, Common.enumLock.lostConnect, Common.enumLock.docLockView, Common.enumLock.docLockForms], + lock: [Common.enumLock.viewMode, Common.enumLock.previewReviewMode, Common.enumLock.viewFormMode, Common.enumLock.lostConnect, Common.enumLock.docLockView, Common.enumLock.docLockForms, Common.enumLock.docLockComments], hintAnchor : 'top', hint : this.tipReview, split : !this.appConfig.isReviewOnly, @@ -778,7 +778,7 @@ define([ button = new Common.UI.Button({ cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-ic-docspell', - lock: [Common.enumLock.viewMode, Common.enumLock.viewFormMode, Common.enumLock.previewReviewMode, Common.enumLock.docLockView, Common.enumLock.docLockForms], + lock: [Common.enumLock.viewMode, Common.enumLock.viewFormMode, Common.enumLock.previewReviewMode, Common.enumLock.docLockView, Common.enumLock.docLockForms, Common.enumLock.docLockComments], hintAnchor : 'top', hint: this.tipSetSpelling, enableToggle: true, @@ -794,7 +794,7 @@ define([ button = new Common.UI.Button({ cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-ic-doclang', - lock: [Common.enumLock.viewMode, Common.enumLock.previewReviewMode, Common.enumLock.viewFormMode, Common.enumLock.noSpellcheckLangs, Common.enumLock.lostConnect, Common.enumLock.docLockView, Common.enumLock.docLockForms], + lock: [Common.enumLock.viewMode, Common.enumLock.previewReviewMode, Common.enumLock.viewFormMode, Common.enumLock.noSpellcheckLangs, Common.enumLock.lostConnect, Common.enumLock.docLockView, Common.enumLock.docLockForms, Common.enumLock.docLockComments], hintAnchor : 'top', hint: this.tipSetDocLang, dataHint: '0', diff --git a/apps/documenteditor/main/app/view/FormsTab.js b/apps/documenteditor/main/app/view/FormsTab.js index 8300eb357..a95da5b75 100644 --- a/apps/documenteditor/main/app/view/FormsTab.js +++ b/apps/documenteditor/main/app/view/FormsTab.js @@ -169,7 +169,7 @@ define([ this.btnTextField = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-text-field', - lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: this.capBtnText, dataHint: '1', dataHintDirection: 'bottom', @@ -180,7 +180,7 @@ define([ this.btnComboBox = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-combo-box', - lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: this.capBtnComboBox, dataHint: '1', dataHintDirection: 'bottom', @@ -191,7 +191,7 @@ define([ this.btnDropDown = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-dropdown', - lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: this.capBtnDropDown, dataHint: '1', dataHintDirection: 'bottom', @@ -202,7 +202,7 @@ define([ this.btnCheckBox = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-checkbox', - lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: this.capBtnCheckBox, dataHint: '1', dataHintDirection: 'bottom', @@ -213,7 +213,7 @@ define([ this.btnRadioBox = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-radio-button', - lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: this.capBtnRadioBox, dataHint: '1', dataHintDirection: 'bottom', @@ -224,7 +224,7 @@ define([ this.btnImageField = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-insertimage', - lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.complexForm, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.complexForm, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: this.capBtnImage, dataHint: '1', dataHintDirection: 'bottom', @@ -235,7 +235,7 @@ define([ this.btnEmailField = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-email', - lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: this.capBtnEmail, dataHint: '1', dataHintDirection: 'bottom', @@ -246,7 +246,7 @@ define([ this.btnPhoneField = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-phone', - lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: this.capBtnPhone, dataHint: '1', dataHintDirection: 'bottom', @@ -257,7 +257,7 @@ define([ this.btnComplexField = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon complex-field', - lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.complexForm, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.contentLock, _set.complexForm, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: this.capBtnComplex, dataHint: '1', dataHintDirection: 'bottom', @@ -268,7 +268,7 @@ define([ this.btnViewForm = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-sheet-view', - lock: [ _set.previewReviewMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [ _set.previewReviewMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: this.capBtnView, enableToggle: true, dataHint: '1', @@ -280,7 +280,7 @@ define([ this.btnClearFields = new Common.UI.Button({ cls : 'btn-toolbar', iconCls : 'toolbar__icon btn-clearstyle', - lock: [ _set.previewReviewMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [ _set.previewReviewMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockComments], caption : this.textClearFields, dataHint : '1', dataHintDirection: 'left', @@ -291,7 +291,7 @@ define([ this.btnHighlight = new Common.UI.ButtonColored({ cls : 'btn-toolbar', iconCls : 'toolbar__icon btn-highlight', - lock: [ _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [ _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption : this.textHighlight, menu : true, additionalItems: [ this.mnuNoFormsColor = new Common.UI.MenuItem({ @@ -316,7 +316,7 @@ define([ this.btnPrevForm = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon previous-field', - lock: [ _set.previewReviewMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [ _set.previewReviewMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockComments], caption: this.capBtnPrev, // disabled: this.appConfig.isEdit && this.appConfig.canFeatureContentControl && this.appConfig.canFeatureForms, // disable only for edit mode dataHint: '1', @@ -328,7 +328,7 @@ define([ this.btnNextForm = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon next-field', - lock: [ _set.previewReviewMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [ _set.previewReviewMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockComments], caption: this.capBtnNext, // disabled: this.appConfig.isEdit && this.appConfig.canFeatureContentControl && this.appConfig.canFeatureForms, // disable only for edit mode, dataHint: '1', diff --git a/apps/documenteditor/main/app/view/Links.js b/apps/documenteditor/main/app/view/Links.js index 4d9730111..92b15a761 100644 --- a/apps/documenteditor/main/app/view/Links.js +++ b/apps/documenteditor/main/app/view/Links.js @@ -169,13 +169,13 @@ define([ $host = me.toolbar.$el; this.btnsContents = Common.Utils.injectButtons($host.find('.btn-slot.btn-contents'), '', 'toolbar__icon btn-contents', me.capBtnInsContents, - [_set.inHeader, _set.richEditLock, _set.plainEditLock, _set.richDelLock, _set.plainDelLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + [_set.inHeader, _set.richEditLock, _set.plainEditLock, _set.richDelLock, _set.plainDelLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], true, true, undefined, '1', 'bottom', 'small'); this.btnsNotes = Common.Utils.injectButtons($host.find('.btn-slot.slot-notes'), '', 'toolbar__icon btn-notes', me.capBtnInsFootnote, - [_set.paragraphLock, _set.inEquation, _set.inImage, _set.inHeader, _set.controlPlain, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + [_set.paragraphLock, _set.inEquation, _set.inImage, _set.inHeader, _set.controlPlain, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], true, true, undefined, '1', 'bottom', 'small'); this.btnsHyperlink = Common.Utils.injectButtons($host.find('.btn-slot.slot-inshyperlink'), '', 'toolbar__icon btn-inserthyperlink', me.capBtnInsLink, - [_set.paragraphLock, _set.headerLock, _set.hyperlinkLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + [_set.paragraphLock, _set.headerLock, _set.hyperlinkLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], undefined, undefined, undefined, '1', 'bottom', 'small'); Array.prototype.push.apply(this.paragraphControls, this.btnsContents.concat(this.btnsNotes, this.btnsHyperlink)); @@ -183,7 +183,7 @@ define([ parentEl: $host.find('#slot-btn-contents-update'), cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-update', - lock: [ _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockForms], + lock: [ _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockForms, _set.docLockComments], caption: this.capBtnContentsUpdate, split: true, menu: true, @@ -197,7 +197,7 @@ define([ parentEl: $host.find('#slot-btn-add-text'), cls: 'btn-toolbar', iconCls: 'toolbar__icon add-text', - lock: [ _set.cantAddTextTOF, _set.inHeader, _set.inFootnote, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [ _set.cantAddTextTOF, _set.inHeader, _set.inFootnote, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: this.capBtnAddText, menu: new Common.UI.Menu({ items: [] @@ -212,7 +212,7 @@ define([ parentEl: $host.find('#slot-btn-bookmarks'), cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-bookmarks', - lock: [_set.paragraphLock, _set.inHeader, _set.headerLock, _set.controlPlain, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.paragraphLock, _set.inHeader, _set.headerLock, _set.controlPlain, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: this.capBtnBookmarks, dataHint: '1', dataHintDirection: 'bottom', @@ -224,7 +224,7 @@ define([ parentEl: $host.find('#slot-btn-caption'), cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-caption', - lock: [_set.inHeader, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.inHeader, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: this.capBtnCaption, dataHint: '1', dataHintDirection: 'bottom', @@ -236,7 +236,7 @@ define([ parentEl: $host.find('#slot-btn-crossref'), cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-cross-reference', - lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.richEditLock, _set.plainEditLock, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.paragraphLock, _set.headerLock, _set.controlPlain, _set.richEditLock, _set.plainEditLock, _set.contentLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: this.capBtnCrossRef, dataHint: '1', dataHintDirection: 'bottom', @@ -248,7 +248,7 @@ define([ parentEl: $host.find('#slot-btn-tof'), cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-contents', - lock: [_set.inHeader, _set.richEditLock, _set.plainEditLock, _set.richDelLock, _set.plainDelLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.inHeader, _set.richEditLock, _set.plainEditLock, _set.richDelLock, _set.plainDelLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: this.capBtnTOF, dataHint: '1', dataHintDirection: 'left', @@ -260,7 +260,7 @@ define([ parentEl: $host.find('#slot-btn-tof-update'), cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-update', - lock: [_set.paragraphLock, _set.inHeader, _set.richEditLock, _set.plainEditLock, _set.richDelLock, _set.plainDelLock, _set.cantUpdateTOF, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.paragraphLock, _set.inHeader, _set.richEditLock, _set.plainEditLock, _set.richDelLock, _set.plainDelLock, _set.cantUpdateTOF, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: this.capBtnContentsUpdate, dataHint: '1', dataHintDirection: 'left', diff --git a/apps/documenteditor/main/app/view/Toolbar.js b/apps/documenteditor/main/app/view/Toolbar.js index eedd0d7e1..91e638f15 100644 --- a/apps/documenteditor/main/app/view/Toolbar.js +++ b/apps/documenteditor/main/app/view/Toolbar.js @@ -249,7 +249,7 @@ define([ id: 'id-toolbar-btn-paste', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-paste', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockComments], dataHint: '1', dataHintDirection: 'top', dataHintTitle: 'V' @@ -260,7 +260,7 @@ define([ id: 'id-toolbar-btn-cut', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-cut', - lock: [_set.copyLock, _set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.imageLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.copyLock, _set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.imageLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockComments], dataHint: '1', dataHintDirection: 'top', dataHintTitle: 'X' @@ -281,7 +281,7 @@ define([ id: 'id-toolbar-btn-incfont', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-incfont', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], dataHint: '1', dataHintDirection: 'top' }); @@ -291,7 +291,7 @@ define([ id: 'id-toolbar-btn-decfont', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-decfont', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], dataHint: '1', dataHintDirection: 'top' }); @@ -301,7 +301,7 @@ define([ id: 'id-toolbar-btn-bold', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-bold', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], enableToggle: true, dataHint: '1', dataHintDirection: 'bottom' @@ -312,7 +312,7 @@ define([ id: 'id-toolbar-btn-italic', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-italic', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], enableToggle: true, dataHint: '1', dataHintDirection: 'bottom' @@ -323,7 +323,7 @@ define([ id: 'id-toolbar-btn-underline', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-underline', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], enableToggle: true, dataHint: '1', dataHintDirection: 'bottom' @@ -334,7 +334,7 @@ define([ id: 'id-toolbar-btn-strikeout', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-strikeout', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], enableToggle: true, dataHint: '1', dataHintDirection: 'bottom' @@ -345,7 +345,7 @@ define([ id: 'id-toolbar-btn-superscript', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-superscript', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inEquation, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inEquation, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], enableToggle: true, toggleGroup: 'superscriptGroup', dataHint: '1', @@ -357,7 +357,7 @@ define([ id: 'id-toolbar-btn-subscript', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-subscript', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inEquation, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inEquation, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], enableToggle: true, toggleGroup: 'superscriptGroup', dataHint: '1', @@ -370,7 +370,7 @@ define([ cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-highlight', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inChart, _set.inSmartart, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, - _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], enableToggle: true, allowDepress: true, split: true, @@ -395,7 +395,7 @@ define([ id: 'id-toolbar-btn-fontcolor', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-fontcolor', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], split: true, menu: true, auto: true, @@ -410,7 +410,7 @@ define([ cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-paracolor', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inChart, _set.inSmartart, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, - _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], split: true, transparent: true, menu: true, @@ -425,7 +425,7 @@ define([ id: 'id-toolbar-btn-case', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-change-case', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], menu: new Common.UI.Menu({ items: [ {caption: this.mniSentenceCase, value: Asc.c_oAscChangeTextCaseType.SentenceCase}, @@ -444,7 +444,7 @@ define([ id: 'id-toolbar-btn-align-left', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-align-left', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], enableToggle: true, toggleGroup: 'alignGroup', dataHint: '1', @@ -456,7 +456,7 @@ define([ id: 'id-toolbar-btn-align-center', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-align-center', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], enableToggle: true, toggleGroup: 'alignGroup', dataHint: '1', @@ -468,7 +468,7 @@ define([ id: 'id-toolbar-btn-align-right', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-align-right', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], enableToggle: true, toggleGroup: 'alignGroup', dataHint: '1', @@ -480,7 +480,7 @@ define([ id: 'id-toolbar-btn-align-just', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-align-just', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], enableToggle: true, toggleGroup: 'alignGroup', dataHint: '1', @@ -492,7 +492,7 @@ define([ id: 'id-toolbar-btn-decoffset', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-decoffset', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], dataHint: '1', dataHintDirection: 'top' }); @@ -502,7 +502,7 @@ define([ id: 'id-toolbar-btn-incoffset', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-incoffset', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], dataHint: '1', dataHintDirection: 'top' }); @@ -512,7 +512,7 @@ define([ id: 'id-toolbar-btn-linespace', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-linespace', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], menu: new Common.UI.Menu({ style: 'min-width: 60px;', items: [ @@ -534,7 +534,7 @@ define([ id: 'id-toolbar-btn-hidenchars', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-paragraph', - lock: [ _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [ _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], enableToggle: true, split: true, menu: new Common.UI.Menu({ @@ -555,7 +555,7 @@ define([ cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-setmarkers', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inChart, _set.inSmartart, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, - _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], enableToggle: true, toggleGroup: 'markersGroup', split: true, @@ -572,7 +572,7 @@ define([ cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-numbering', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inChart, _set.inSmartart, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, - _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], enableToggle: true, toggleGroup: 'markersGroup', split: true, @@ -589,7 +589,7 @@ define([ cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-multilevels', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inChart, _set.inSmartart, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, - _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], menu: true, dataHint: '1', dataHintDirection: 'top', @@ -622,7 +622,7 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-inserttable', lock: [_set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inEquation, _set.controlPlain, _set.richDelLock, _set.plainDelLock, _set.cantAddTable, _set.previewReviewMode, - _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: me.capBtnInsTable, menu: new Common.UI.Menu({ items: [ @@ -645,7 +645,7 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-insertimage', lock: [_set.paragraphLock, _set.headerLock, _set.inEquation, _set.controlPlain, _set.richDelLock, _set.plainDelLock, _set.contentLock, _set.cantAddImagePara, - _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: me.capBtnInsImage, menu: new Common.UI.Menu({ items: [ @@ -666,7 +666,7 @@ define([ caption: me.capBtnInsChart, iconCls: 'toolbar__icon btn-insertchart', lock: [ _set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.controlPlain, _set.richDelLock, _set.plainDelLock, _set.contentLock, - _set.chartLock, _set.cantAddChart, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + _set.chartLock, _set.cantAddChart, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], menu: true, dataHint: '1', dataHintDirection: 'bottom', @@ -679,7 +679,7 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-text', lock: [_set.paragraphLock, _set.headerLock, _set.inEquation, _set.controlPlain, _set.contentLock, _set.inFootnote, _set.previewReviewMode, _set.viewFormMode, - _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: me.capBtnInsTextbox, enableToggle: true, dataHint: '1', @@ -693,7 +693,7 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-textart', lock: [_set.paragraphLock, _set.headerLock, _set.inEquation, _set.controlPlain, _set.richDelLock, _set.plainDelLock, _set.contentLock, _set.inFootnote, _set.cantAddImagePara, - _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: me.capBtnInsTextart, menu: new Common.UI.Menu({ cls: 'menu-shapes', @@ -711,7 +711,7 @@ define([ id: 'id-toolbar-btn-editheader', cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-editheader', - lock: [ _set.previewReviewMode, _set.viewFormMode, _set.inEquation, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [ _set.previewReviewMode, _set.viewFormMode, _set.inEquation, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: me.capBtnInsHeader, menu: true, dataHint: '1', @@ -745,7 +745,7 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-datetime', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.richDelLock, _set.plainDelLock, _set.noParagraphSelected, _set.previewReviewMode, - _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: me.capBtnDateTime, dataHint: '1', dataHintDirection: 'bottom', @@ -758,7 +758,7 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-blankpage', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inEquation, _set.richDelLock, _set.plainDelLock, _set.inHeader, _set.inFootnote, _set.inControl, - _set.cantPageBreak, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + _set.cantPageBreak, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: me.capBtnBlankPage, dataHint: '1', dataHintDirection: 'bottom', @@ -771,7 +771,7 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-insertshape', lock: [_set.paragraphLock, _set.headerLock, _set.inEquation, _set.controlPlain, _set.contentLock, _set.inFootnote, _set.previewReviewMode, _set.viewFormMode, - _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: me.capBtnInsShape, enableToggle: true, menu: new Common.UI.Menu({cls: 'menu-shapes menu-insert-shape'}), @@ -786,7 +786,7 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-insertequation', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inChart, _set.controlPlain, _set.richDelLock, _set.plainDelLock, _set.cantAddEquation, - _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: me.capBtnInsEquation, split: true, menu: new Common.UI.Menu({cls: 'menu-shapes'}), @@ -801,7 +801,7 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-symbol', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.richDelLock, _set.plainDelLock, _set.noParagraphSelected, _set.previewReviewMode, - _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: me.capBtnInsSymbol, dataHint: '1', dataHintDirection: 'bottom', @@ -814,7 +814,7 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-dropcap', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inEquation, _set.controlPlain, _set.dropcapLock, _set.previewReviewMode, _set.viewFormMode, - _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: me.capBtnInsDropcap, menu: new Common.UI.Menu({ cls: 'ppm-toolbar shifted-right', @@ -858,7 +858,7 @@ define([ id: 'tlbtn-controls', cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-controls', - lock: [_set.paragraphLock, _set.headerLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.paragraphLock, _set.headerLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: me.capBtnInsControls, menu: new Common.UI.Menu({ cls: 'ppm-toolbar shifted-right', @@ -944,7 +944,7 @@ define([ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-columns', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.controlPlain, _set.inImage, _set.docPropsLock, _set.previewReviewMode, _set.viewFormMode, - _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: me.capBtnColumns, menu: new Common.UI.Menu({ cls: 'ppm-toolbar shifted-right', @@ -1003,7 +1003,7 @@ define([ id: 'tlbtn-pageorient', cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-pageorient', - lock: [_set.docPropsLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.docPropsLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: me.capBtnPageOrient, menu: new Common.UI.Menu({ cls: 'ppm-toolbar', @@ -1045,7 +1045,7 @@ define([ id: 'tlbtn-pagemargins', cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-pagemargins', - lock: [_set.docPropsLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.docPropsLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: me.capBtnMargins, menu: new Common.UI.Menu({ items: [ @@ -1108,7 +1108,7 @@ define([ id: 'tlbtn-pagesize', cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-pagesize', - lock: [_set.docPropsLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.docPropsLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: me.capBtnPageSize, menu: new Common.UI.Menu({ restoreHeight: true, @@ -1232,7 +1232,7 @@ define([ id: 'tlbtn-line-numbers', cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-line-numbering', - lock: [_set.docPropsLock, _set.inImagePara, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.docPropsLock, _set.inImagePara, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: me.capBtnLineNumbers, menu: new Common.UI.Menu({ cls: 'ppm-toolbar', @@ -1285,7 +1285,7 @@ define([ cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-clearstyle', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inChart, _set.inSmartart, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, - _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], dataHint: '1', dataHintDirection: 'top' }); @@ -1295,7 +1295,7 @@ define([ id: 'id-toolbar-btn-copystyle', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-copystyle', - lock: [ _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [ _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], enableToggle: true, dataHint: '1', dataHintDirection: 'bottom' @@ -1306,7 +1306,7 @@ define([ id: 'id-toolbar-btn-colorschemas', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-colorschemas', - lock: [_set.docSchemaLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.docSchemaLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], menu: new Common.UI.Menu({ cls: 'shifted-left', items: [], @@ -1322,7 +1322,7 @@ define([ id: 'id-toolbar-btn-mailrecepients', cls: 'btn-toolbar', iconCls: 'toolbar__icon btn-mailmerge', - lock: [_set.mmergeLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.mmergeLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], dataHint: '1', dataHintDirection: 'bottom', menu: new Common.UI.Menu({ @@ -1338,7 +1338,7 @@ define([ me.btnImgAlign = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-img-align', - lock: [_set.imageLock, _set.contentLock, _set.inImageInline, _set.noObjectSelected, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.imageLock, _set.contentLock, _set.inImageInline, _set.noObjectSelected, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: me.capImgAlign, menu: true, dataHint: '1', @@ -1349,7 +1349,7 @@ define([ me.btnImgGroup = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-img-group', - lock: [_set.imageLock, _set.contentLock, _set.inImageInline, _set.noObjectSelected, _set.cantGroup, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.imageLock, _set.contentLock, _set.inImageInline, _set.noObjectSelected, _set.cantGroup, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: me.capImgGroup, menu: true, dataHint: '1', @@ -1359,7 +1359,7 @@ define([ me.btnImgForward = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-img-frwd', - lock: [_set.cantArrange, _set.lostConnect, _set.contentLock, _set.noObjectSelected, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.cantArrange, _set.lostConnect, _set.contentLock, _set.noObjectSelected, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: me.capImgForward, split: true, menu: true, @@ -1370,7 +1370,7 @@ define([ me.btnImgBackward = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-img-bkwd', - lock: [_set.cantArrange, _set.lostConnect, _set.contentLock, _set.noObjectSelected, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.cantArrange, _set.lostConnect, _set.contentLock, _set.noObjectSelected, _set.inSmartartInternal, _set.previewReviewMode, _set.viewFormMode, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: me.capImgBackward, split: true, menu: true, @@ -1381,7 +1381,7 @@ define([ me.btnImgWrapping = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-img-wrap', - lock: [_set.cantWrap, _set.imageLock, _set.contentLock, _set.noObjectSelected, _set.lostConnect, _set.previewReviewMode, _set.viewFormMode, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.cantWrap, _set.imageLock, _set.contentLock, _set.noObjectSelected, _set.lostConnect, _set.previewReviewMode, _set.viewFormMode, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: me.capImgWrapping, menu: true, dataHint: '1', @@ -1392,7 +1392,7 @@ define([ me.btnWatermark = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-watermark', - lock: [_set.headerLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.headerLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], caption: me.capBtnWatermark, menu: new Common.UI.Menu({ cls: 'ppm-toolbar', @@ -1431,7 +1431,7 @@ define([ this.cmbFontSize = new Common.UI.ComboBox({ cls: 'input-group-nr', menuStyle: 'min-width: 55px;', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], hint: this.tipFontSize, data: [ {value: 8, displayValue: "8"}, @@ -1461,7 +1461,7 @@ define([ cls: 'input-group-nr', menuCls: 'scrollable-menu', menuStyle: 'min-width: 325px;', - lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], hint: this.tipFontName, store: new Common.Collections.Fonts(), dataHint: '1', @@ -1480,7 +1480,7 @@ define([ this.listStyles = new Common.UI.ComboDataView({ cls: 'combo-styles', lock: [_set.paragraphLock, _set.headerLock, _set.richEditLock, _set.plainEditLock, _set.inChart, _set.inSmartart, _set.inSmartartInternal, _set.previewReviewMode, - _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms], + _set.viewFormMode, _set.lostConnect, _set.disableOnStart, _set.docLockView, _set.docLockForms, _set.docLockComments], itemWidth: itemWidth, itemHeight: itemHeight, style: 'min-width:150px;', @@ -1738,7 +1738,7 @@ define([ this.btnsPageBreak = Common.Utils.injectButtons($host.find('.btn-slot.btn-pagebreak'), '', 'toolbar__icon btn-pagebreak', this.capBtnInsPagebreak, [Common.enumLock.paragraphLock, Common.enumLock.headerLock, Common.enumLock.richEditLock, Common.enumLock.plainEditLock, Common.enumLock.inEquation, Common.enumLock.richDelLock, Common.enumLock.plainDelLock, Common.enumLock.inHeader, Common.enumLock.inFootnote, Common.enumLock.inControl, Common.enumLock.cantPageBreak, Common.enumLock.previewReviewMode, - Common.enumLock.viewFormMode, Common.enumLock.lostConnect, Common.enumLock.disableOnStart, Common.enumLock.docLockView, Common.enumLock.docLockForms], + Common.enumLock.viewFormMode, Common.enumLock.lostConnect, Common.enumLock.disableOnStart, Common.enumLock.docLockView, Common.enumLock.docLockForms, Common.enumLock.docLockComments], true, true, undefined, '1', 'bottom', 'small'); Array.prototype.push.apply(this.paragraphControls, this.btnsPageBreak); Array.prototype.push.apply(this.lockControls, this.btnsPageBreak); From f8b95b54ab0bffb4819613acac49c559c6c2794f Mon Sep 17 00:00:00 2001 From: Julia Radzhabova <julia.radzhabova@onlyoffice.com> Date: Mon, 26 Sep 2022 18:37:20 +0300 Subject: [PATCH 06/28] [DE] Refactoring document protection --- apps/common/main/lib/controller/Comments.js | 34 +++++++++++------- .../main/lib/controller/ReviewChanges.js | 31 ++++++++-------- apps/common/main/lib/util/utils.js | 18 +++++++++- .../main/app/controller/DocProtection.js | 17 +++++---- .../main/app/controller/DocumentHolder.js | 35 +++++++------------ .../main/app/controller/FormsTab.js | 21 +++++------ .../main/app/controller/LeftMenu.js | 24 ++++++------- .../main/app/controller/Links.js | 31 ++++++++++------ .../main/app/controller/PageLayout.js | 15 -------- .../main/app/controller/RightMenu.js | 34 +++++++++--------- .../main/app/controller/Statusbar.js | 9 ----- .../main/app/controller/Toolbar.js | 21 +++++------ .../main/app/view/DocumentHolder.js | 10 +++--- apps/documenteditor/main/app/view/Links.js | 1 - .../documenteditor/main/app/view/Statusbar.js | 22 +++++++----- 15 files changed, 168 insertions(+), 155 deletions(-) diff --git a/apps/common/main/lib/controller/Comments.js b/apps/common/main/lib/controller/Comments.js index a8357d176..160701fc7 100644 --- a/apps/common/main/lib/controller/Comments.js +++ b/apps/common/main/lib/controller/Comments.js @@ -144,12 +144,15 @@ define([ } }, this, area); }.bind(this)); + Common.NotificationCenter.on('app:ready', this.onAppReady.bind(this)); Common.NotificationCenter.on('protect:doclock', _.bind(this.onChangeProtectDocument, this)); }, onLaunch: function () { var filter = Common.localStorage.getKeysFilter(); this.appPrefix = (filter && filter.length) ? filter.split(',')[0] : ''; - this._state = {viewmode: false}; + this._state = { + disableEditing: false // disable editing when disconnect/signed file/mail merge preview/review final or original/forms preview + }; this.collection = this.getApplication().getCollection('Common.Collections.Comments'); this.setComparator(); @@ -1647,14 +1650,13 @@ define([ }, setPreviewMode: function(mode) { - this._state.viewmode = mode; + this._state.disableEditing = mode; this.updatePreviewMode(); }, updatePreviewMode: function() { - var lockMode = this._state.docProtection ? this._state.docProtection.lockMode : undefined; - lockMode = (lockMode===Asc.c_oAscProtection.View || lockMode===Asc.c_oAscProtection.Forms); - var viewmode = this._state.viewmode || lockMode; + var docProtection = Common.Utils.Store.get('docProtection', {}); + var viewmode = this._state.disableEditing || !!docProtection.isReadOnly || !!docProtection.isFormsOnly; if (this.viewmode === viewmode) return; this.viewmode = viewmode; @@ -1732,15 +1734,23 @@ define([ this.updateComments(true); }, - onChangeProtectDocument: function(props) { - if (!props) { - var docprotect = this.getApplication().getController('DocProtection'); - props = docprotect ? docprotect.getDocProps() : null; + onAppReady: function (config) { + var me = this; + (new Promise(function (accept, reject) { + accept(); + })).then(function(){ + me.onChangeProtectDocument(); + }); + }, + + onChangeProtectDocument: function() { + var docProtection = Common.Utils.Store.get('docProtection'); + if (!docProtection) { + var cntrl = this.getApplication().getController('DocProtection'); + docProtection = cntrl ? cntrl.getDocProps() : null; } - if (props) { - this._state.docProtection = props; + if (docProtection) this.updatePreviewMode(); - } } }, Common.Controllers.Comments || {})); diff --git a/apps/common/main/lib/controller/ReviewChanges.js b/apps/common/main/lib/controller/ReviewChanges.js index b395255a8..94c912933 100644 --- a/apps/common/main/lib/controller/ReviewChanges.js +++ b/apps/common/main/lib/controller/ReviewChanges.js @@ -102,7 +102,9 @@ define([ this.userCollection = this.getApplication().getCollection('Common.Collections.Users'); this.viewmode = false; - this._state = {posx: -1000, posy: -1000, popoverVisible: false, previewMode: false, compareSettings: null, wsLock: false, wsProps: [], viewmode: false}; + this._state = { posx: -1000, posy: -1000, popoverVisible: false, previewMode: false, compareSettings: null, wsLock: false, wsProps: [], + disableEditing: false // disable editing when disconnect/signed file/mail merge preview/review final or original/forms preview + }; Common.NotificationCenter.on('reviewchanges:turn', this.onTurnPreview.bind(this)); Common.NotificationCenter.on('spelling:turn', this.onTurnSpelling.bind(this)); @@ -180,14 +182,13 @@ define([ }, setPreviewMode: function(mode) { //disable accept/reject in popover - this._state.viewmode = mode; + this._state.disableEditing = mode; this.updatePreviewMode(); }, updatePreviewMode: function() { - var lockMode = this._state.docProtection ? this._state.docProtection.lockMode : undefined; - lockMode = (lockMode===Asc.c_oAscProtection.View || lockMode===Asc.c_oAscProtection.Forms || lockMode===Asc.c_oAscProtection.Comments); - var viewmode = this._state.viewmode || lockMode; + var docProtection = Common.Utils.Store.get('docProtection', {}); + var viewmode = this._state.disableEditing || !!docProtection.isReadOnly || !!docProtection.isFormsOnly || !!docProtection.isCommentsOnly; if (this.viewmode === viewmode) return; this.viewmode = viewmode; @@ -1022,17 +1023,17 @@ define([ this.lockToolbar(Common.enumLock['Objects'], !!this._state.wsProps['Objects'], {array: [this.view.btnCommentRemove, this.view.btnCommentResolve]}); }, - onChangeProtectDocument: function(props) { - if (!props) { - var docprotect = this.getApplication().getController('DocProtection'); - props = docprotect ? docprotect.getDocProps() : null; + onChangeProtectDocument: function() { + var docProtection = Common.Utils.Store.get('docProtection'); + if (!docProtection) { + var cntrl = this.getApplication().getController('DocProtection'); + docProtection = cntrl ? cntrl.getDocProps() : null; } - if (props) { - this._state.docProtection = props; - this.lockToolbar(Common.enumLock.docLockView, props.docLock && (props.lockMode===Asc.c_oAscProtection.View)); - this.lockToolbar(Common.enumLock.docLockForms, props.docLock && (props.lockMode===Asc.c_oAscProtection.Forms)); - this.lockToolbar(Common.enumLock.docLockReview, props.docLock && (props.lockMode===Asc.c_oAscProtection.Review)); - this.lockToolbar(Common.enumLock.docLockComments, props.docLock && (props.lockMode===Asc.c_oAscProtection.Comments)); + if (docProtection) { + this.lockToolbar(Common.enumLock.docLockView, docProtection.isReadOnly); + this.lockToolbar(Common.enumLock.docLockForms, docProtection.isFormsOnly); + this.lockToolbar(Common.enumLock.docLockReview, docProtection.isReviewOnly); + this.lockToolbar(Common.enumLock.docLockComments, docProtection.isCommentsOnly); this.updatePreviewMode(); } }, diff --git a/apps/common/main/lib/util/utils.js b/apps/common/main/lib/util/utils.js index b1d58e132..78d492cc4 100644 --- a/apps/common/main/lib/util/utils.js +++ b/apps/common/main/lib/util/utils.js @@ -1095,4 +1095,20 @@ Common.Utils.getKeyByValue = function(obj, value) { return prop; } } -}; \ No newline at end of file +}; + +Common.Utils.Store = new(function() { + var settings = {}; + + var _get = function(name, defValue) { + return (settings[name]!==undefined) ? settings[name] : defValue; + }, + _set = function(name, value) { + settings[name] = value; + }; + + return { + get: _get, + set: _set + } +}); \ No newline at end of file diff --git a/apps/documenteditor/main/app/controller/DocProtection.js b/apps/documenteditor/main/app/controller/DocProtection.js index 0be9788b0..72acd53df 100644 --- a/apps/documenteditor/main/app/controller/DocProtection.js +++ b/apps/documenteditor/main/app/controller/DocProtection.js @@ -190,6 +190,7 @@ define([ resolve(); })).then(function () { // me.view.btnProtectDoc.toggle(me.api.asc_isProtectedDocument(), true); + // me.onChangeProtectDocument(); }); }, @@ -197,14 +198,14 @@ define([ // var isProtected = this.api.asc_isProtectedDocument(); var isProtected = this.view.btnProtectDoc.isActive(); // test this.view && this.view.btnProtectDoc.toggle(isProtected, true); - var props = this.getDocProps(true); - Common.NotificationCenter.trigger('protect:doclock', props); + this.getDocProps(true); + Common.NotificationCenter.trigger('protect:doclock'); }, getDocProps: function(update) { if (!this.appConfig || !this.appConfig.isEdit && !this.appConfig.isRestrictedEdit) return; - if (update || !this._state.docProtection) { + if (update || !Common.Utils.Store.get('docProtection')) { // var docProtected = !!this.api.asc_isProtectedDocument(), // type; // @@ -221,10 +222,14 @@ define([ type = Common.Utils.InternalSettings.get('protect-test-type'); } ///////////// - this._state.docProtection = {docLock: docProtected, lockMode: type}; + Common.Utils.Store.set('docProtection', { + isReadOnly: type===Asc.c_oAscProtection.View, + isCommentsOnly: type===Asc.c_oAscProtection.Comments, + isReviewOnly: type===Asc.c_oAscProtection.Review, + isFormsOnly: type===Asc.c_oAscProtection.Forms + }); } - - return this._state.docProtection; + return Common.Utils.Store.get('docProtection'); } }, DE.Controllers.DocProtection || {})); diff --git a/apps/documenteditor/main/app/controller/DocumentHolder.js b/apps/documenteditor/main/app/controller/DocumentHolder.js index 4fdab482b..3fe44e89c 100644 --- a/apps/documenteditor/main/app/controller/DocumentHolder.js +++ b/apps/documenteditor/main/app/controller/DocumentHolder.js @@ -226,7 +226,6 @@ define([ this.api.asc_registerCallback('asc_onShowContentControlsActions',_.bind(this.onShowContentControlsActions, this)); this.api.asc_registerCallback('asc_onHideContentControlsActions',_.bind(this.onHideContentControlsActions, this)); } - Common.NotificationCenter.on('protect:doclock', _.bind(this.onChangeProtectDocument, this)); this.documentHolder.setApi(this.api); } @@ -585,8 +584,8 @@ define([ showObjectMenu: function(event, docElement, eOpts){ var me = this; if (me.api){ - var lockMode = this.documentHolder.docProtection ? this.documentHolder.docProtection.lockMode : undefined; - var obj = (me.mode.isEdit && !(me._isDisabled || lockMode===Asc.c_oAscProtection.View || lockMode===Asc.c_oAscProtection.Comments || lockMode===Asc.c_oAscProtection.Forms)) ? + var docProtection = Common.Utils.Store.get('docProtection', {}); + var obj = (me.mode.isEdit && !(me._isDisabled || docProtection.isReadOnly || docProtection.isFormsOnly || docProtection.isCommentsOnly)) ? me.fillMenuProps(me.api.getSelectedElements()) : me.fillViewMenuProps(me.api.getSelectedElements()); if (obj) me.showPopupMenu(obj.menu_to_show, obj.menu_props, event, docElement, eOpts); } @@ -614,8 +613,8 @@ define([ var me = this, currentMenu = me.documentHolder.currentMenu; if (currentMenu && currentMenu.isVisible() && currentMenu !== me.documentHolder.hdrMenu){ - var lockMode = me.documentHolder.docProtection ? me.documentHolder.docProtection.lockMode : undefined; - var obj = (me.mode.isEdit && !(me._isDisabled || lockMode===Asc.c_oAscProtection.View || lockMode===Asc.c_oAscProtection.Comments || lockMode===Asc.c_oAscProtection.Forms)) ? + var docProtection = Common.Utils.Store.get('docProtection', {}); + var obj = (me.mode.isEdit && !(me._isDisabled || docProtection.isReadOnly || docProtection.isFormsOnly || docProtection.isCommentsOnly)) ? me.fillMenuProps(selectedElements) : me.fillViewMenuProps(selectedElements); if (obj) { if (obj.menu_to_show===currentMenu) { @@ -828,8 +827,8 @@ define([ onDialogAddHyperlink: function() { var me = this; var win, props, text; - var lockMode = me.documentHolder.docProtection ? me.documentHolder.docProtection.lockMode : undefined; - if (me.api && me.mode.isEdit && !(me._isDisabled || lockMode===Asc.c_oAscProtection.View || lockMode===Asc.c_oAscProtection.Comments || lockMode===Asc.c_oAscProtection.Forms) && !me.getApplication().getController('LeftMenu').leftMenu.menuFile.isVisible()){ + var docProtection = Common.Utils.Store.get('docProtection', {}); + if (me.api && me.mode.isEdit && !(me._isDisabled || docProtection.isReadOnly || docProtection.isFormsOnly || docProtection.isCommentsOnly) && !me.getApplication().getController('LeftMenu').leftMenu.menuFile.isVisible()){ var handlerDlg = function(dlg, result) { if (result == 'ok') { props = dlg.getSettings(); @@ -1185,8 +1184,8 @@ define([ }, onDoubleClickOnChart: function(chart) { - var lockMode = this.documentHolder.docProtection ? this.documentHolder.docProtection.lockMode : undefined; - if (this.mode.isEdit && !(this._isDisabled || lockMode===Asc.c_oAscProtection.View || lockMode===Asc.c_oAscProtection.Comments || lockMode===Asc.c_oAscProtection.Forms)) { + var docProtection = Common.Utils.Store.get('docProtection', {}); + if (this.mode.isEdit && !(this._isDisabled || docProtection.isReadOnly || docProtection.isFormsOnly || docProtection.isCommentsOnly)) { var diagramEditor = this.getApplication().getController('Common.Controllers.ExternalDiagramEditor').getView('Common.Views.ExternalDiagramEditor'); if (diagramEditor && chart) { diagramEditor.setEditMode(true); @@ -1197,8 +1196,8 @@ define([ }, onDoubleClickOnTableOleObject: function(chart) { - var lockMode = this.documentHolder.docProtection ? this.documentHolder.docProtection.lockMode : undefined; - if (this.mode.isEdit && !(this._isDisabled || lockMode===Asc.c_oAscProtection.View || lockMode===Asc.c_oAscProtection.Comments || lockMode===Asc.c_oAscProtection.Forms)) { + var docProtection = Common.Utils.Store.get('docProtection', {}); + if (this.mode.isEdit && !(this._isDisabled || docProtection.isReadOnly || docProtection.isFormsOnly || docProtection.isCommentsOnly)) { var oleEditor = this.getApplication().getController('Common.Controllers.ExternalOleEditor').getView('Common.Views.ExternalOleEditor'); if (oleEditor && chart) { oleEditor.setEditMode(true); @@ -1902,8 +1901,8 @@ define([ this.api.asc_ViewCertificate(datavalue); //certificate id break; case 2: - var lockMode = this.documentHolder.docProtection ? this.documentHolder.docProtection.lockMode : undefined; - Common.NotificationCenter.trigger('protect:signature', 'visible', this._isDisabled || lockMode===Asc.c_oAscProtection.View || lockMode===Asc.c_oAscProtection.Comments || lockMode===Asc.c_oAscProtection.Forms, datavalue);//guid, can edit settings for requested signature + var docProtection = Common.Utils.Store.get('docProtection', {}); + Common.NotificationCenter.trigger('protect:signature', 'visible', this._isDisabled || !!docProtection.isReadOnly || !!docProtection.isFormsOnly || !!docProtection.isCommentsOnly, datavalue);//guid, can edit settings for requested signature break; case 3: var me = this; @@ -2318,16 +2317,6 @@ define([ editComplete: function() { this.documentHolder && this.documentHolder.fireEvent('editcomplete', this.documentHolder); - }, - - onChangeProtectDocument: function(props) { - if (!props) { - var docprotect = this.getApplication().getController('DocProtection'); - props = docprotect ? docprotect.getDocProps() : null; - } - if (props) { - this.documentHolder && (this.documentHolder.docProtection = props); - } } }); }); \ No newline at end of file diff --git a/apps/documenteditor/main/app/controller/FormsTab.js b/apps/documenteditor/main/app/controller/FormsTab.js index a9ee02625..b43d56a8c 100644 --- a/apps/documenteditor/main/app/controller/FormsTab.js +++ b/apps/documenteditor/main/app/controller/FormsTab.js @@ -378,6 +378,7 @@ define([ me.view.btnHighlight.currentColor = clr; } config.isEdit && config.canFeatureContentControl && config.isFormCreator && me.showCreateFormTip(); // show tip only when create form in docxf + me.onChangeProtectDocument(); }); }, @@ -433,18 +434,18 @@ define([ } }, - onChangeProtectDocument: function(props) { - if (!props) { - var docprotect = this.getApplication().getController('DocProtection'); - props = docprotect ? docprotect.getDocProps() : null; + onChangeProtectDocument: function() { + var docProtection = Common.Utils.Store.get('docProtection'); + if (!docProtection) { + var cntrl = this.getApplication().getController('DocProtection'); + docProtection = cntrl ? cntrl.getDocProps() : null; } - if (props) { - this._state.docProtection = props; + if (docProtection) { var arr = this.view.getButtons(); - Common.Utils.lockControls(Common.enumLock.docLockView, props.docLock && (props.lockMode===Asc.c_oAscProtection.View)), {array: arr}; - Common.Utils.lockControls(Common.enumLock.docLockForms, props.docLock && (props.lockMode===Asc.c_oAscProtection.Forms), {array: arr}); - Common.Utils.lockControls(Common.enumLock.docLockReview, props.docLock && (props.lockMode===Asc.c_oAscProtection.Review), {array: arr}); - Common.Utils.lockControls(Common.enumLock.docLockComments, props.docLock && (props.lockMode===Asc.c_oAscProtection.Comments), {array: arr}); + Common.Utils.lockControls(Common.enumLock.docLockView, docProtection.isReadOnly, {array: arr}); + Common.Utils.lockControls(Common.enumLock.docLockForms, docProtection.isFormsOnly, {array: arr}); + Common.Utils.lockControls(Common.enumLock.docLockReview, docProtection.isReviewOnly, {array: arr}); + Common.Utils.lockControls(Common.enumLock.docLockComments, docProtection.isCommentsOnly, {array: arr}); } } diff --git a/apps/documenteditor/main/app/controller/LeftMenu.js b/apps/documenteditor/main/app/controller/LeftMenu.js index 1fe6247ad..556862582 100644 --- a/apps/documenteditor/main/app/controller/LeftMenu.js +++ b/apps/documenteditor/main/app/controller/LeftMenu.js @@ -119,7 +119,7 @@ define([ onLaunch: function() { this.leftMenu = this.createView('LeftMenu').render(); this.leftMenu.btnSearchBar.on('toggle', _.bind(this.onMenuSearchBar, this)); - this._state = {viewmode: false}; + this._state = {disableEditing: false}; Common.util.Shortcuts.delegateShortcuts({ shortcuts: { 'command+shift+s,ctrl+shift+s': _.bind(this.onShortcut, this, 'save'), @@ -216,7 +216,7 @@ define([ } (this.mode.trialMode || this.mode.isBeta) && this.leftMenu.setDeveloperMode(this.mode.trialMode, this.mode.isBeta, this.mode.buildVersion); - + this.onChangeProtectDocument(); Common.util.Shortcuts.resumeEvents(); return this; }, @@ -582,14 +582,13 @@ define([ }, setPreviewMode: function(mode) { - this._state.viewmode = mode; + this._state.disableEditing = mode; this.updatePreviewMode(); }, updatePreviewMode: function() { - var lockMode = this._state.docProtection ? this._state.docProtection.lockMode : undefined; - lockMode = (lockMode===Asc.c_oAscProtection.View || lockMode===Asc.c_oAscProtection.Forms); - var viewmode = this._state.viewmode || lockMode; + var docProtection = Common.Utils.Store.get('docProtection', {}); + var viewmode = this._state.disableEditing || !!docProtection.isReadOnly || !!docProtection.isFormsOnly; if (this.viewmode === viewmode) return; this.viewmode = viewmode; @@ -896,15 +895,14 @@ define([ return this.leftMenu && this.leftMenu.panelComments && this.leftMenu.panelComments.isVisible(); }, - onChangeProtectDocument: function(props) { - if (!props) { - var docprotect = this.getApplication().getController('DocProtection'); - props = docprotect ? docprotect.getDocProps() : null; + onChangeProtectDocument: function() { + var docProtection = Common.Utils.Store.get('docProtection'); + if (!docProtection) { + var cntrl = this.getApplication().getController('DocProtection'); + docProtection = cntrl ? cntrl.getDocProps() : null; } - if (props) { - this._state.docProtection = props; + if (docProtection) this.updatePreviewMode(); - } }, textNoTextFound : 'Text not found', diff --git a/apps/documenteditor/main/app/controller/Links.js b/apps/documenteditor/main/app/controller/Links.js index c3db0cc6f..f6afb11e2 100644 --- a/apps/documenteditor/main/app/controller/Links.js +++ b/apps/documenteditor/main/app/controller/Links.js @@ -94,6 +94,7 @@ define([ Common.Gateway.on('setactionlink', function (url) { console.log('url with actions: ' + url); }.bind(this)); + Common.NotificationCenter.on('app:ready', this.onAppReady.bind(this)); }, setApi: function (api) { @@ -573,18 +574,28 @@ define([ })).show(); }, - onChangeProtectDocument: function(props) { - if (!props) { - var docprotect = this.getApplication().getController('DocProtection'); - props = docprotect ? docprotect.getDocProps() : null; + onChangeProtectDocument: function() { + var docProtection = Common.Utils.Store.get('docProtection'); + if (!docProtection) { + var cntrl = this.getApplication().getController('DocProtection'); + docProtection = cntrl ? cntrl.getDocProps() : null; } - if (props) { - this._state.docProtection = props; - this.lockToolbar(Common.enumLock.docLockView, props.docLock && (props.lockMode===Asc.c_oAscProtection.View)); - this.lockToolbar(Common.enumLock.docLockForms, props.docLock && (props.lockMode===Asc.c_oAscProtection.Forms)); - this.lockToolbar(Common.enumLock.docLockReview, props.docLock && (props.lockMode===Asc.c_oAscProtection.Review)); - this.lockToolbar(Common.enumLock.docLockComments, props.docLock && (props.lockMode===Asc.c_oAscProtection.Comments)); + if (docProtection) { + this.lockToolbar(Common.enumLock.docLockView, docProtection.isReadOnly); + this.lockToolbar(Common.enumLock.docLockForms, docProtection.isFormsOnly); + this.lockToolbar(Common.enumLock.docLockReview, docProtection.isReviewOnly); + this.lockToolbar(Common.enumLock.docLockComments, docProtection.isCommentsOnly); } + }, + + onAppReady: function (config) { + var me = this; + (new Promise(function (accept, reject) { + accept(); + })).then(function(){ + me.view && me.view.onAppReady(config); + me.onChangeProtectDocument(); + }); } }, DE.Controllers.Links || {})); diff --git a/apps/documenteditor/main/app/controller/PageLayout.js b/apps/documenteditor/main/app/controller/PageLayout.js index 2703215e2..46dd5b769 100644 --- a/apps/documenteditor/main/app/controller/PageLayout.js +++ b/apps/documenteditor/main/app/controller/PageLayout.js @@ -98,7 +98,6 @@ define([ this.api.asc_registerCallback('asc_onImgWrapStyleChanged', this.onApiWrappingStyleChanged.bind(this)); this.api.asc_registerCallback('asc_onCoAuthoringDisconnect', this.onApiCoAuthoringDisconnect.bind(this)); this.api.asc_registerCallback('asc_onFocusObject', this.onApiFocusObject.bind(this)); - Common.NotificationCenter.on('protect:doclock', _.bind(this.onChangeProtectDocument, this)); return this; }, @@ -255,20 +254,6 @@ define([ this.api.ImgApply(props); this.toolbar.fireEvent('editcomplete', this.toolbar); - }, - - onChangeProtectDocument: function(props) { - if (!props) { - var docprotect = this.getApplication().getController('DocProtection'); - props = docprotect ? docprotect.getDocProps() : null; - } - if (props) { - this._state.docProtection = props; - this.toolbar.lockToolbar(Common.enumLock.docLockView, props.docLock && (props.lockMode===Asc.c_oAscProtection.View)); - this.toolbar.lockToolbar(Common.enumLock.docLockForms, props.docLock && (props.lockMode===Asc.c_oAscProtection.Forms)); - this.toolbar.lockToolbar(Common.enumLock.docLockReview, props.docLock && (props.lockMode===Asc.c_oAscProtection.Review)); - this.toolbar.lockToolbar(Common.enumLock.docLockComments, props.docLock && (props.lockMode===Asc.c_oAscProtection.Comments)); - } } } })()); diff --git a/apps/documenteditor/main/app/controller/RightMenu.js b/apps/documenteditor/main/app/controller/RightMenu.js index e05283bc6..101d48ede 100644 --- a/apps/documenteditor/main/app/controller/RightMenu.js +++ b/apps/documenteditor/main/app/controller/RightMenu.js @@ -158,8 +158,8 @@ define([ var isChart = false, isSmartArtInternal = false, - lockMode = this._state.docProtection ? this._state.docProtection.lockMode : undefined; - lockMode = (lockMode===Asc.c_oAscProtection.View || lockMode===Asc.c_oAscProtection.Forms || lockMode===Asc.c_oAscProtection.Comments); + docProtection = Common.Utils.Store.get('docProtection', {}), + isProtected = !!docProtection.isReadOnly || !!docProtection.isFormsOnly || !!docProtection.isCommentsOnly; var control_props = this.api.asc_IsContentControl() ? this.api.asc_GetContentControlProperties() : null, control_lock = false; @@ -189,7 +189,7 @@ define([ if (value.get_ShapeProperties().asc_getTextArtProperties()) { this._settings[Common.Utils.documentSettingsType.TextArt].props = value; this._settings[Common.Utils.documentSettingsType.TextArt].hidden = 0; - this._settings[Common.Utils.documentSettingsType.TextArt].locked = value.get_Locked() || content_locked || lockMode; + this._settings[Common.Utils.documentSettingsType.TextArt].locked = value.get_Locked() || content_locked || isProtected; } } control_lock = control_lock || value.get_Locked(); @@ -201,11 +201,11 @@ define([ } this._settings[settingsType].props = value; this._settings[settingsType].hidden = 0; - this._settings[settingsType].locked = value.get_Locked() || content_locked || lockMode; + this._settings[settingsType].locked = value.get_Locked() || content_locked || isProtected; if (!this._settings[Common.Utils.documentSettingsType.MailMerge].locked) // lock MailMerge-InsertField, если хотя бы один объект locked - this._settings[Common.Utils.documentSettingsType.MailMerge].locked = value.get_Locked() || lockMode; + this._settings[Common.Utils.documentSettingsType.MailMerge].locked = value.get_Locked() || isProtected; if (!this._settings[Common.Utils.documentSettingsType.Signature].locked) // lock Signature, если хотя бы один объект locked - this._settings[Common.Utils.documentSettingsType.Signature].locked = value.get_Locked() || lockMode; + this._settings[Common.Utils.documentSettingsType.Signature].locked = value.get_Locked() || isProtected; } if (control_props && control_props.get_FormPr() && this.rightmenu.formSettings) { @@ -214,7 +214,7 @@ define([ spectype==Asc.c_oAscContentControlSpecificType.ComboBox || spectype==Asc.c_oAscContentControlSpecificType.DropDownList || spectype==Asc.c_oAscContentControlSpecificType.None) { settingsType = Common.Utils.documentSettingsType.Form; this._settings[settingsType].props = control_props; - this._settings[settingsType].locked = control_lock || lockMode; + this._settings[settingsType].locked = control_lock || isProtected; this._settings[settingsType].hidden = 0; if (control_props.get_FormPr().get_Fixed()) this._settings[Common.Utils.documentSettingsType.TextArt].hidden = 1; @@ -358,7 +358,6 @@ define([ } this.api.asc_registerCallback('asc_onError', _.bind(this.onError, this)); } - if (this.editMode && this.api) { // this.rightmenu.shapeSettings.createDelayedElements(); var selectedElements = this.api.getSelectedElements(); @@ -366,6 +365,7 @@ define([ this.onFocusObject(selectedElements); } } + this.onChangeProtectDocument(); }, onDoubleClickOnObject: function(obj) { @@ -472,17 +472,17 @@ define([ } }, - onChangeProtectDocument: function(props) { - if (!props) { - var docprotect = this.getApplication().getController('DocProtection'); - props = docprotect ? docprotect.getDocProps() : null; + onChangeProtectDocument: function() { + var docProtection = Common.Utils.Store.get('docProtection'); + if (!docProtection) { + var cntrl = this.getApplication().getController('DocProtection'); + docProtection = cntrl ? cntrl.getDocProps() : null; } - if (props) { - this._state.docProtection = props; + if (docProtection && this.api) { + var selectedElements = this.api.getSelectedElements(); + if (selectedElements.length > 0) + this.onFocusObject(selectedElements); } - var selectedElements = this.api.getSelectedElements(); - if (selectedElements.length > 0) - this.onFocusObject(selectedElements); } }); }); \ No newline at end of file diff --git a/apps/documenteditor/main/app/controller/Statusbar.js b/apps/documenteditor/main/app/controller/Statusbar.js index b2af4e032..8f6629628 100644 --- a/apps/documenteditor/main/app/controller/Statusbar.js +++ b/apps/documenteditor/main/app/controller/Statusbar.js @@ -122,7 +122,6 @@ define([ me.statusbar.$el.find('.hide-select-tools').removeClass('hide-select-tools'); } }); - Common.NotificationCenter.on('protect:doclock', _.bind(this.onChangeProtectDocument, this)); Common.NotificationCenter.on('app:ready', me.onAppReady.bind(me)); }, @@ -358,14 +357,6 @@ define([ } }, - onChangeProtectDocument: function(props) { - if (!props) { - var docprotect = this.getApplication().getController('DocProtection'); - props = docprotect ? docprotect.getDocProps() : null; - } - props && this.statusbar.onChangeProtectDocument(props); - }, - zoomText : 'Zoom {0}%', textHasChanges : 'New changes have been tracked', textTrackChanges: 'The document is opened with the Track Changes mode enabled', diff --git a/apps/documenteditor/main/app/controller/Toolbar.js b/apps/documenteditor/main/app/controller/Toolbar.js index 2ba838dfb..763dcfa7c 100644 --- a/apps/documenteditor/main/app/controller/Toolbar.js +++ b/apps/documenteditor/main/app/controller/Toolbar.js @@ -3162,6 +3162,7 @@ define([ createDelayedElements: function() { this.toolbar.createDelayedElements(); this.attachUIEvents(this.toolbar); + this.onChangeProtectDocument(); }, onAppShowed: function (config) { @@ -3332,17 +3333,17 @@ define([ })).show(); }, - onChangeProtectDocument: function(props) { - if (!props) { - var docprotect = this.getApplication().getController('DocProtection'); - props = docprotect ? docprotect.getDocProps() : null; + onChangeProtectDocument: function() { + var docProtection = Common.Utils.Store.get('docProtection'); + if (!docProtection) { + var cntrl = this.getApplication().getController('DocProtection'); + docProtection = cntrl ? cntrl.getDocProps() : null; } - if (props) { - this._state.docProtection = props; - this.toolbar.lockToolbar(Common.enumLock.docLockView, props.docLock && (props.lockMode===Asc.c_oAscProtection.View)); - this.toolbar.lockToolbar(Common.enumLock.docLockForms, props.docLock && (props.lockMode===Asc.c_oAscProtection.Forms)); - this.toolbar.lockToolbar(Common.enumLock.docLockReview, props.docLock && (props.lockMode===Asc.c_oAscProtection.Review)); - this.toolbar.lockToolbar(Common.enumLock.docLockComments, props.docLock && (props.lockMode===Asc.c_oAscProtection.Comments)); + if (docProtection) { + this.toolbar.lockToolbar(Common.enumLock.docLockView, docProtection.isReadOnly); + this.toolbar.lockToolbar(Common.enumLock.docLockForms, docProtection.isFormsOnly); + this.toolbar.lockToolbar(Common.enumLock.docLockReview, docProtection.isReviewOnly); + this.toolbar.lockToolbar(Common.enumLock.docLockComments, docProtection.isCommentsOnly); } }, diff --git a/apps/documenteditor/main/app/view/DocumentHolder.js b/apps/documenteditor/main/app/view/DocumentHolder.js index 779e39235..49c576700 100644 --- a/apps/documenteditor/main/app/view/DocumentHolder.js +++ b/apps/documenteditor/main/app/view/DocumentHolder.js @@ -152,7 +152,7 @@ define([ signGuid = (value.imgProps && value.imgProps.value && me.mode.isSignatureSupport) ? value.imgProps.value.asc_getSignatureId() : undefined, signProps = (signGuid) ? me.api.asc_getSignatureSetup(signGuid) : null, isInSign = !!signProps && me._canProtect, - lockMode = me.docProtection ? me.docProtection.lockMode : undefined, + docProtection = Common.Utils.Store.get('docProtection', {}), control_lock = (value.paraProps) ? (!value.paraProps.value.can_DeleteBlockContentControl() || !value.paraProps.value.can_EditBlockContentControl() || !value.paraProps.value.can_DeleteInlineContentControl() || !value.paraProps.value.can_EditInlineContentControl()) : false, canComment = !isInChart && me.api.can_AddQuotedComment() !== false && me.mode.canCoAuthoring && me.mode.canComments && !me._isDisabled && !control_lock, @@ -170,7 +170,7 @@ define([ } me.menuViewUndo.setVisible(me.mode.canCoAuthoring && me.mode.canComments && !me._isDisabled); - me.menuViewUndo.setDisabled(!me.api.asc_getCanUndo() || lockMode===Asc.c_oAscProtection.View); + me.menuViewUndo.setDisabled(!me.api.asc_getCanUndo() || !!docProtection.isReadOnly); me.menuViewCopySeparator.setVisible(isInSign); var isRequested = (signProps) ? signProps.asc_getRequested() : false; @@ -188,15 +188,15 @@ define([ } me.menuViewAddComment.setVisible(canComment); - me.menuViewAddComment.setDisabled(value.paraProps && value.paraProps.locked === true || lockMode===Asc.c_oAscProtection.View || lockMode===Asc.c_oAscProtection.Forms); + me.menuViewAddComment.setDisabled(value.paraProps && value.paraProps.locked === true || !!docProtection.isReadOnly || !!docProtection.isFormsOnly); var disabled = value.paraProps && value.paraProps.locked === true; var cancopy = me.api && me.api.can_CopyCut(); me.menuViewCopy.setDisabled(!cancopy); me.menuViewCut.setVisible(me._fillFormMode && canEditControl); - me.menuViewCut.setDisabled(disabled || !cancopy || lockMode===Asc.c_oAscProtection.View || lockMode===Asc.c_oAscProtection.Comments); + me.menuViewCut.setDisabled(disabled || !cancopy || !!docProtection.isReadOnly || !!docProtection.isCommentsOnly); me.menuViewPaste.setVisible(me._fillFormMode && canEditControl); - me.menuViewPaste.setDisabled(disabled || lockMode===Asc.c_oAscProtection.View || lockMode===Asc.c_oAscProtection.Comments); + me.menuViewPaste.setDisabled(disabled || !!docProtection.isReadOnly || !!docProtection.isCommentsOnly); me.menuViewPrint.setVisible(me.mode.canPrint && !me._fillFormMode); me.menuViewPrint.setDisabled(!cancopy); diff --git a/apps/documenteditor/main/app/view/Links.js b/apps/documenteditor/main/app/view/Links.js index 92b15a761..4f5de8e50 100644 --- a/apps/documenteditor/main/app/view/Links.js +++ b/apps/documenteditor/main/app/view/Links.js @@ -269,7 +269,6 @@ define([ this.paragraphControls.push(this.btnTableFiguresUpdate); Common.Utils.lockControls(Common.enumLock.disableOnStart, true, {array: this.paragraphControls}); this._state = {disabled: false}; - Common.NotificationCenter.on('app:ready', this.onAppReady.bind(this)); }, render: function (el) { diff --git a/apps/documenteditor/main/app/view/Statusbar.js b/apps/documenteditor/main/app/view/Statusbar.js index 1ec4040d0..54db2be0c 100644 --- a/apps/documenteditor/main/app/view/Statusbar.js +++ b/apps/documenteditor/main/app/view/Statusbar.js @@ -160,6 +160,8 @@ define([ me.zoomMenu.on('item:click', function(menu, item) { me.fireEvent('zoom:value', [item.value]); }); + + me.onChangeProtectDocument(); } DE.Views.Statusbar = Backbone.View.extend(_.extend({ @@ -334,6 +336,7 @@ define([ this.api.asc_registerCallback('asc_onCurrentPage', _.bind(_onCurrentPage, this)); this.api.asc_registerCallback('asc_onCoAuthoringDisconnect',_.bind(this.onApiCoAuthoringDisconnect, this)); Common.NotificationCenter.on('api:disconnect', _.bind(this.onApiCoAuthoringDisconnect, this)); + Common.NotificationCenter.on('protect:doclock', _.bind(this.onChangeProtectDocument, this)); } return this; @@ -401,17 +404,20 @@ define([ SetDisabled: function(disable) { this._isDisabled = disable; - var lockMode = this._state.docProtection ? this._state.docProtection.lockMode : undefined; - lockMode = (lockMode===Asc.c_oAscProtection.View || lockMode===Asc.c_oAscProtection.Forms || lockMode===Asc.c_oAscProtection.Comments); - this.btnLanguage.setDisabled(disable || this.langMenu.items.length<1 || lockMode); - this.btnTurnReview && this.btnTurnReview.setDisabled(disable || lockMode); + var docProtection = Common.Utils.Store.get('docProtection', {}), + isProtected = !!docProtection.isReadOnly || !!docProtection.isFormsOnly || !!docProtection.isCommentsOnly + this.btnLanguage.setDisabled(disable || this.langMenu.items.length<1 || isProtected); + this.btnTurnReview && this.btnTurnReview.setDisabled(disable || isProtected); }, - onChangeProtectDocument: function(props) { - if (props) { - this._state.docProtection = props; - this.SetDisabled(this._isDisabled); + onChangeProtectDocument: function() { + var docProtection = Common.Utils.Store.get('docProtection'); + if (!docProtection) { + var cntrl = DE.getController('DocProtection'); + docProtection = cntrl ? cntrl.getDocProps() : null; } + if (docProtection) + this.SetDisabled(this._isDisabled); }, onApiCoAuthoringDisconnect: function() { From 7f703b6294023736ecae4dbbb47c5c2c37183661 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova <julia.radzhabova@onlyoffice.com> Date: Mon, 26 Sep 2022 18:37:47 +0300 Subject: [PATCH 07/28] Fix disabled styles --- apps/common/main/resources/less/combo-dataview.less | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/apps/common/main/resources/less/combo-dataview.less b/apps/common/main/resources/less/combo-dataview.less index 23cb1a058..71270f7d6 100644 --- a/apps/common/main/resources/less/combo-dataview.less +++ b/apps/common/main/resources/less/combo-dataview.less @@ -78,6 +78,12 @@ } } } + + .masked & { + &.disabled { + opacity: 1; + } + } } From 8f1f89ee31bfc7268ed59b6fbfff21d12d08b812 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova <julia.radzhabova@onlyoffice.com> Date: Mon, 26 Sep 2022 23:34:59 +0300 Subject: [PATCH 08/28] [DE] Lock controls when document is protected (review only) --- .../main/lib/controller/ReviewChanges.js | 43 +++++++++++++------ .../template/ReviewChangesPopover.template | 2 +- apps/common/main/lib/view/ReviewChanges.js | 22 +++++++--- 3 files changed, 47 insertions(+), 20 deletions(-) diff --git a/apps/common/main/lib/controller/ReviewChanges.js b/apps/common/main/lib/controller/ReviewChanges.js index 94c912933..341f91cd3 100644 --- a/apps/common/main/lib/controller/ReviewChanges.js +++ b/apps/common/main/lib/controller/ReviewChanges.js @@ -167,13 +167,15 @@ define([ SetDisabled: function(state, reviewMode, fillFormMode) { if (this.dlgChanges) this.dlgChanges.close(); - if (reviewMode) + if (reviewMode) { this.lockToolbar(Common.enumLock.previewReviewMode, state); - else if (fillFormMode) + this.dlgChanges && Common.Utils.lockControls(Common.enumLock.previewReviewMode, state, {array: [this.dlgChanges.btnAccept, this.dlgChanges.btnReject]}); + } else if (fillFormMode) { this.lockToolbar(Common.enumLock.viewFormMode, state); - else + this.dlgChanges && Common.Utils.lockControls(Common.enumLock.viewFormMode, state, {array: [this.dlgChanges.btnAccept, this.dlgChanges.btnReject]}); + } else { this.lockToolbar(Common.enumLock.viewMode, state); - + } this.setPreviewMode(state); }, @@ -218,17 +220,14 @@ define([ onApiShowChange: function (sdkchange, isShow) { var btnlock = true, changes; - if (this.appConfig.canReview && !this.appConfig.isReviewOnly) { + if (this.appConfig.canReview && !(this.appConfig.isReviewOnly || Common.Utils.Store.get('docProtection', {}).isReviewOnly)) { if (sdkchange && sdkchange.length>0) { changes = this.readSDKChange(sdkchange); btnlock = this.isSelectedChangesLocked(changes, isShow); } if (this._state.lock !== btnlock) { Common.Utils.lockControls(Common.enumLock.reviewChangelock, btnlock, {array: [this.view.btnAccept, this.view.btnReject]}); - if (this.dlgChanges) { - this.dlgChanges.btnAccept.setDisabled(btnlock); - this.dlgChanges.btnReject.setDisabled(btnlock); - } + this.dlgChanges && Common.Utils.lockControls(Common.enumLock.reviewChangelock, btnlock, {array: [this.dlgChanges.btnAccept, this.dlgChanges.btnReject]}); this._state.lock = btnlock; Common.Utils.InternalSettings.set(this.view.appPrefix + "accept-reject-lock", btnlock); } @@ -496,6 +495,7 @@ define([ } var date = (item.get_DateTime() == '') ? new Date() : new Date(item.get_DateTime()), user = me.userCollection.findOriginalUser(item.get_UserId()), + isProtectedReview = !!Common.Utils.Store.get('docProtection', {}).isReviewOnly, change = new Common.Models.ReviewChange({ uid : Common.UI.getId(), userid : item.get_UserId(), @@ -511,7 +511,7 @@ define([ scope : me.view, hint : !me.appConfig.canReview, goto : (item.get_MoveType() == Asc.c_oAscRevisionsMove.MoveTo || item.get_MoveType() == Asc.c_oAscRevisionsMove.MoveFrom), - editable : me.appConfig.isReviewOnly && (item.get_UserId() == me.currentUserId) || !me.appConfig.isReviewOnly && (!me.appConfig.canUseReviewPermissions || AscCommon.UserInfoParser.canEditReview(item.get_UserName())) + editable : (me.appConfig.isReviewOnly || isProtectedReview) && (item.get_UserId() == me.currentUserId) || !(me.appConfig.isReviewOnly || isProtectedReview) && (!me.appConfig.canUseReviewPermissions || AscCommon.UserInfoParser.canEditReview(item.get_UserName())) }); arr.push(change); @@ -600,7 +600,7 @@ define([ }, onTurnPreview: function(state, global, fromApi) { - if ( this.appConfig.isReviewOnly ) { + if ( this.appConfig.isReviewOnly) { this.view.turnChanges(true); } else if ( this.appConfig.canReview ) { @@ -614,7 +614,7 @@ define([ }, onApiTrackRevisionsChange: function(localFlag, globalFlag, userId) { - if ( this.appConfig.isReviewOnly ) { + if ( this.appConfig.isReviewOnly || Common.Utils.Store.get('docProtection', {}).isReviewOnly) { this.view.turnChanges(true); } else if ( this.appConfig.canReview ) { @@ -983,7 +983,8 @@ define([ }, onCoAuthoringDisconnect: function() { - this.lockToolbar(Common.enumLock.lostConnect, true) + this.lockToolbar(Common.enumLock.lostConnect, true); + this.dlgChanges && Common.Utils.lockControls(Common.enumLock.lostConnect, true, {array: [this.dlgChanges.btnAccept, this.dlgChanges.btnReject]}); }, onUpdateUsers: function() { @@ -1034,6 +1035,22 @@ define([ this.lockToolbar(Common.enumLock.docLockForms, docProtection.isFormsOnly); this.lockToolbar(Common.enumLock.docLockReview, docProtection.isReviewOnly); this.lockToolbar(Common.enumLock.docLockComments, docProtection.isCommentsOnly); + if (this.dlgChanges) { + Common.Utils.lockControls(Common.enumLock.docLockView, docProtection.isReadOnly, {array: [this.dlgChanges.btnAccept, this.dlgChanges.btnReject]}); + Common.Utils.lockControls(Common.enumLock.docLockForms, docProtection.isFormsOnly, {array: [this.dlgChanges.btnAccept, this.dlgChanges.btnReject]}); + Common.Utils.lockControls(Common.enumLock.docLockReview, docProtection.isReviewOnly, {array: [this.dlgChanges.btnAccept, this.dlgChanges.btnReject]}); + Common.Utils.lockControls(Common.enumLock.docLockComments, docProtection.isCommentsOnly, {array: [this.dlgChanges.btnAccept, this.dlgChanges.btnReject]}); + } + if (this.appConfig.canReview) { + if (docProtection.isReviewOnly) { + this.onTurnPreview(true); + this.onApiShowChange(); + } else if (this._state.prevReviewProtected) { + this.onTurnPreview(false); + this.onApiShowChange(); + } + this._state.prevReviewProtected = docProtection.isReviewOnly; + } this.updatePreviewMode(); } }, diff --git a/apps/common/main/lib/template/ReviewChangesPopover.template b/apps/common/main/lib/template/ReviewChangesPopover.template index ddfe2c417..8669c695d 100644 --- a/apps/common/main/lib/template/ReviewChangesPopover.template +++ b/apps/common/main/lib/template/ReviewChangesPopover.template @@ -9,7 +9,7 @@ <div class="btn-goto img-commonctrl"></div> <% } %> <% if (!hint) { %> - <% if (scope.appConfig.isReviewOnly) { %> + <% if (scope.appConfig.isReviewOnly || Common.Utils.Store.get("docProtection", {}).isReviewOnly) { %> <% if (editable) { %> <div class="btn-delete img-commonctrl"></div> <% } %> diff --git a/apps/common/main/lib/view/ReviewChanges.js b/apps/common/main/lib/view/ReviewChanges.js index e8596856d..861208612 100644 --- a/apps/common/main/lib/view/ReviewChanges.js +++ b/apps/common/main/lib/view/ReviewChanges.js @@ -259,7 +259,7 @@ define([ caption: this.txtAccept, split: !this.appConfig.canUseReviewPermissions, iconCls: 'toolbar__icon btn-review-save', - lock: [_set.reviewChangelock, _set.isReviewOnly, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms, _set.docLockComments], + lock: [_set.reviewChangelock, _set.isReviewOnly, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms, _set.docLockComments, _set.docLockReview], dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: 'small' @@ -271,7 +271,7 @@ define([ caption: this.txtReject, split: !this.appConfig.canUseReviewPermissions, iconCls: 'toolbar__icon btn-review-deny', - lock: [_set.reviewChangelock, _set.isReviewOnly, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms, _set.docLockComments], + lock: [_set.reviewChangelock, _set.isReviewOnly, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms, _set.docLockComments, _set.docLockReview], dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: 'small' @@ -294,7 +294,7 @@ define([ this.btnTurnOn = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconCls: 'toolbar__icon btn-ic-review', - lock: [_set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms, _set.docLockComments], + lock: [_set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms, _set.docLockComments, _set.docLockReview], caption: this.txtTurnon, split: !this.appConfig.isReviewOnly, enableToggle: true, @@ -731,7 +731,7 @@ define([ var button = new Common.UI.Button({ cls : 'btn-toolbar', iconCls : 'toolbar__icon btn-ic-review', - lock: [Common.enumLock.viewMode, Common.enumLock.previewReviewMode, Common.enumLock.viewFormMode, Common.enumLock.lostConnect, Common.enumLock.docLockView, Common.enumLock.docLockForms, Common.enumLock.docLockComments], + lock: [Common.enumLock.viewMode, Common.enumLock.previewReviewMode, Common.enumLock.viewFormMode, Common.enumLock.lostConnect, Common.enumLock.docLockView, Common.enumLock.docLockForms, Common.enumLock.docLockComments, Common.enumLock.docLockReview], hintAnchor : 'top', hint : this.tipReview, split : !this.appConfig.isReviewOnly, @@ -983,6 +983,7 @@ define([ render: function() { Common.UI.Window.prototype.render.call(this); + var _set = Common.enumLock; this.btnPrev = new Common.UI.Button({ cls: 'dlg-btn iconic', iconCls: 'img-commonctrl prev', @@ -1003,7 +1004,8 @@ define([ cls : 'btn-toolbar', caption : this.txtAccept, split : true, - disabled : this.mode.isReviewOnly || !!Common.Utils.InternalSettings.get(this.appPrefix + "accept-reject-lock"), + disabled : this.mode.isReviewOnly || Common.Utils.Store.get('docProtection', {}).isReviewOnly || !!Common.Utils.InternalSettings.get(this.appPrefix + "accept-reject-lock"), + lock : [_set.reviewChangelock, _set.isReviewOnly, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms, _set.docLockComments, _set.docLockReview], menu : this.mode.canUseReviewPermissions ? false : new Common.UI.Menu({ items: [ this.mnuAcceptCurrent = new Common.UI.MenuItem({ @@ -1023,7 +1025,7 @@ define([ cls : 'btn-toolbar', caption : this.txtReject, split : true, - disabled : this.mode.isReviewOnly || !!Common.Utils.InternalSettings.get(this.appPrefix + "accept-reject-lock"), + lock : [_set.reviewChangelock, _set.isReviewOnly, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms, _set.docLockComments, _set.docLockReview], menu : this.mode.canUseReviewPermissions ? false : new Common.UI.Menu({ items: [ this.mnuRejectCurrent = new Common.UI.MenuItem({ @@ -1038,6 +1040,14 @@ define([ }) }); this.btnReject.render(this.$window.find('#id-review-button-reject')); + var arr = [this.btnAccept, this.btnReject]; + Common.Utils.lockControls(Common.enumLock.isReviewOnly, this.mode.isReviewOnly, {array: arr}); + var docProtection = Common.Utils.Store.get('docProtection', {}); + Common.Utils.lockControls(Common.enumLock.docLockView, docProtection.isReadOnly, {array: arr}); + Common.Utils.lockControls(Common.enumLock.docLockForms, docProtection.isFormsOnly, {array: arr}); + Common.Utils.lockControls(Common.enumLock.docLockReview, docProtection.isReviewOnly, {array: arr}); + Common.Utils.lockControls(Common.enumLock.docLockComments, docProtection.isCommentsOnly, {array: arr}); + Common.Utils.lockControls(Common.enumLock.reviewChangelock, !!Common.Utils.InternalSettings.get(this.appPrefix + "accept-reject-lock"), {array: arr}); var me = this; this.btnPrev.on('click', function (e) { From 0d54c6d31e1d4a7fa8469c186c578898a489aff4 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova <julia.radzhabova@onlyoffice.com> Date: Tue, 27 Sep 2022 11:34:47 +0300 Subject: [PATCH 09/28] [DE] Protect settings depend on permissions --- .../main/app/controller/DocProtection.js | 1 + apps/documenteditor/main/app/view/ProtectDialog.js | 12 +++--------- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/apps/documenteditor/main/app/controller/DocProtection.js b/apps/documenteditor/main/app/controller/DocProtection.js index 72acd53df..ea7aa1320 100644 --- a/apps/documenteditor/main/app/controller/DocProtection.js +++ b/apps/documenteditor/main/app/controller/DocProtection.js @@ -124,6 +124,7 @@ define([ var me = this, btn, win = new DE.Views.ProtectDialog({ + props: me.appConfig, handler: function(result, value, props) { btn = result; if (result == 'ok') { diff --git a/apps/documenteditor/main/app/view/ProtectDialog.js b/apps/documenteditor/main/app/view/ProtectDialog.js index f5f33a74a..2eeb9f018 100644 --- a/apps/documenteditor/main/app/view/ProtectDialog.js +++ b/apps/documenteditor/main/app/view/ProtectDialog.js @@ -61,10 +61,7 @@ define([ }, options); this.handler = options.handler; - this.txtDescription = options.txtDescription || ''; this.props = options.props; - this.isEdit = options.isEdit; - this.api = options.api; this.template = options.template || [ '<div class="box">', @@ -194,12 +191,9 @@ define([ _setDefaults: function (props) { if (props) { - var type = props.asc_getType(); - switch (type) { - case Asc.c_oAscProtection.Forms: this.rbForms.setValue(true, true); break; - case Asc.c_oAscProtection.Review: this.rbReview.setValue(true, true); break; - case Asc.c_oAscProtection.Comments: this.rbComments.setValue(true, true); break; - } + this.rbReview.setDisabled(!props.canReview); + this.rbForms.setDisabled(!props.canFillForms); + this.rbComments.setDisabled(!props.canComments); } }, From 00d7a665e60a3ec2eda1b26c752c10df7a75d371 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova <julia.radzhabova@onlyoffice.com> Date: Tue, 27 Sep 2022 13:23:20 +0300 Subject: [PATCH 10/28] [DE] Refactoring review changes --- .../main/lib/controller/ReviewChanges.js | 72 ++++++++++--------- apps/common/main/lib/view/ReviewChanges.js | 2 - 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/apps/common/main/lib/controller/ReviewChanges.js b/apps/common/main/lib/controller/ReviewChanges.js index 341f91cd3..4ea4bd624 100644 --- a/apps/common/main/lib/controller/ReviewChanges.js +++ b/apps/common/main/lib/controller/ReviewChanges.js @@ -840,10 +840,10 @@ define([ onAppReady: function (config) { var me = this; - if ( config.canReview ) { - (new Promise(function (resolve) { - resolve(); - })).then(function () { + (new Promise(function (resolve) { + resolve(); + })).then(function () { + if ( config.canReview ) { // function _setReviewStatus(state, global) { // me.view.turnChanges(state, global); // !global && me.api.asc_SetLocalTrackRevisions(state); @@ -879,41 +879,43 @@ define([ offset = sdk.offset(); me.dlgChanges.show(Math.max(10, offset.left + sdk.width() - 300), Math.max(10, offset.top + sdk.height() - 150)); } - }); - } else if (config.canViewReview) { - config.canViewReview = (config.isEdit || me.api.asc_HaveRevisionsChanges(true)); // check revisions from all users - if (config.canViewReview) { - var val = Common.localStorage.getItem(me.view.appPrefix + (config.isEdit || config.isRestrictedEdit ? "review-mode-editor" : "review-mode")); - if (val===null) { - val = me.appConfig.customization && me.appConfig.customization.review ? me.appConfig.customization.review.reviewDisplay : undefined; - !val && (val = me.appConfig.customization ? me.appConfig.customization.reviewDisplay : undefined); - val = /^(original|final|markup|simple)$/i.test(val) ? val.toLocaleLowerCase() : (config.isEdit || config.isRestrictedEdit ? 'markup' : 'original'); + } else if (config.canViewReview) { + config.canViewReview = (config.isEdit || me.api.asc_HaveRevisionsChanges(true)); // check revisions from all users + if (config.canViewReview) { + var val = Common.localStorage.getItem(me.view.appPrefix + (config.isEdit || config.isRestrictedEdit ? "review-mode-editor" : "review-mode")); + if (val===null) { + val = me.appConfig.customization && me.appConfig.customization.review ? me.appConfig.customization.review.reviewDisplay : undefined; + !val && (val = me.appConfig.customization ? me.appConfig.customization.reviewDisplay : undefined); + val = /^(original|final|markup|simple)$/i.test(val) ? val.toLocaleLowerCase() : (config.isEdit || config.isRestrictedEdit ? 'markup' : 'original'); + } + me.turnDisplayMode(val); + me.view.turnDisplayMode(val); } - me.turnDisplayMode(val); - me.view.turnDisplayMode(val); } - } - if (me.view && me.view.btnChat) { - me.getApplication().getController('LeftMenu').leftMenu.btnChat.on('toggle', function(btn, state){ - if (state !== me.view.btnChat.pressed) - me.view.turnChat(state); - }); - } - me.onChangeProtectSheet(); - me.onChangeProtectDocument(); - if (me.view) { - me.lockToolbar(Common.enumLock.hideComments, !Common.localStorage.getBool(me.view.appPrefix + "settings-livecomment", true), {array: [me.view.btnCommentRemove, me.view.btnCommentResolve]}); - me.lockToolbar(Common.enumLock['Objects'], !!this._state.wsProps['Objects'], {array: [me.view.btnCommentRemove, me.view.btnCommentResolve]}); - } + if (me.view && me.view.btnChat) { + me.getApplication().getController('LeftMenu').leftMenu.btnChat.on('toggle', function(btn, state){ + if (state !== me.view.btnChat.pressed) + me.view.turnChat(state); + }); + } + me.onChangeProtectSheet(); + me.onChangeProtectDocument(); + if (me.view) { + me.lockToolbar(Common.enumLock.hideComments, !Common.localStorage.getBool(me.view.appPrefix + "settings-livecomment", true), {array: [me.view.btnCommentRemove, me.view.btnCommentResolve]}); + me.lockToolbar(Common.enumLock['Objects'], !!me._state.wsProps['Objects'], {array: [me.view.btnCommentRemove, me.view.btnCommentResolve]}); + } - var val = Common.localStorage.getItem(me.view.appPrefix + "settings-review-hover-mode"); - if (val === null) { - val = me.appConfig.customization && me.appConfig.customization.review ? !!me.appConfig.customization.review.hoverMode : false; - } else - val = !!parseInt(val); - Common.Utils.InternalSettings.set(me.view.appPrefix + "settings-review-hover-mode", val); - me.appConfig.reviewHoverMode = val; + var val = Common.localStorage.getItem(me.view.appPrefix + "settings-review-hover-mode"); + if (val === null) { + val = me.appConfig.customization && me.appConfig.customization.review ? !!me.appConfig.customization.review.hoverMode : false; + } else + val = !!parseInt(val); + Common.Utils.InternalSettings.set(me.view.appPrefix + "settings-review-hover-mode", val); + me.appConfig.reviewHoverMode = val; + + me.view && me.view.onAppReady(config); + }); }, applySettings: function(menu) { diff --git a/apps/common/main/lib/view/ReviewChanges.js b/apps/common/main/lib/view/ReviewChanges.js index 861208612..dcb4dce78 100644 --- a/apps/common/main/lib/view/ReviewChanges.js +++ b/apps/common/main/lib/view/ReviewChanges.js @@ -468,8 +468,6 @@ define([ }); this.lockedControls.push(this.btnCommentResolve); } - - Common.NotificationCenter.on('app:ready', this.onAppReady.bind(this)); }, render: function (el) { From 9adcc64e9b0b7e0ab5e2144b78086eb2aff9db82 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova <julia.radzhabova@onlyoffice.com> Date: Tue, 27 Sep 2022 14:32:41 +0300 Subject: [PATCH 11/28] [DE] Fix protection for restricted modes --- apps/common/main/lib/controller/ReviewChanges.js | 2 +- apps/documenteditor/main/app/controller/DocProtection.js | 9 ++++++--- apps/documenteditor/main/app/controller/FormsTab.js | 2 +- apps/documenteditor/main/app/controller/Links.js | 8 +++++--- apps/documenteditor/main/app/controller/Main.js | 4 +++- 5 files changed, 16 insertions(+), 9 deletions(-) diff --git a/apps/common/main/lib/controller/ReviewChanges.js b/apps/common/main/lib/controller/ReviewChanges.js index 4ea4bd624..39cbafc03 100644 --- a/apps/common/main/lib/controller/ReviewChanges.js +++ b/apps/common/main/lib/controller/ReviewChanges.js @@ -180,7 +180,7 @@ define([ }, lockToolbar: function (causes, lock, opts) { - Common.Utils.lockControls(causes, lock, opts, this.view.getButtons()); + this.view && Common.Utils.lockControls(causes, lock, opts, this.view.getButtons()); }, setPreviewMode: function(mode) { //disable accept/reject in popover diff --git a/apps/documenteditor/main/app/controller/DocProtection.js b/apps/documenteditor/main/app/controller/DocProtection.js index ea7aa1320..4dcc94bb6 100644 --- a/apps/documenteditor/main/app/controller/DocProtection.js +++ b/apps/documenteditor/main/app/controller/DocProtection.js @@ -191,13 +191,12 @@ define([ resolve(); })).then(function () { // me.view.btnProtectDoc.toggle(me.api.asc_isProtectedDocument(), true); - // me.onChangeProtectDocument(); }); }, onChangeProtectDocument: function() { // var isProtected = this.api.asc_isProtectedDocument(); - var isProtected = this.view.btnProtectDoc.isActive(); // test + var isProtected = this.view ? this.view.btnProtectDoc.isActive() : false; // test this.view && this.view.btnProtectDoc.toggle(isProtected, true); this.getDocProps(true); Common.NotificationCenter.trigger('protect:doclock'); @@ -216,7 +215,11 @@ define([ // } // test ////// - var docProtected = this.view.btnProtectDoc.isActive(), + // if (Common.Utils.InternalSettings.get('protect-test-type')===undefined) { + // this.view && this.view.btnProtectDoc.toggle(true, true); + // Common.Utils.InternalSettings.set('protect-test-type', Asc.c_oAscProtection.Comments); + // } + var docProtected = this.view ? this.view.btnProtectDoc.isActive() : true, type; if (docProtected) { diff --git a/apps/documenteditor/main/app/controller/FormsTab.js b/apps/documenteditor/main/app/controller/FormsTab.js index b43d56a8c..728813d3d 100644 --- a/apps/documenteditor/main/app/controller/FormsTab.js +++ b/apps/documenteditor/main/app/controller/FormsTab.js @@ -440,7 +440,7 @@ define([ var cntrl = this.getApplication().getController('DocProtection'); docProtection = cntrl ? cntrl.getDocProps() : null; } - if (docProtection) { + if (docProtection && this.view) { var arr = this.view.getButtons(); Common.Utils.lockControls(Common.enumLock.docLockView, docProtection.isReadOnly, {array: arr}); Common.Utils.lockControls(Common.enumLock.docLockForms, docProtection.isFormsOnly, {array: arr}); diff --git a/apps/documenteditor/main/app/controller/Links.js b/apps/documenteditor/main/app/controller/Links.js index f6afb11e2..04febdc0f 100644 --- a/apps/documenteditor/main/app/controller/Links.js +++ b/apps/documenteditor/main/app/controller/Links.js @@ -205,7 +205,7 @@ define([ }, lockToolbar: function (causes, lock, opts) { - Common.Utils.lockControls(causes, lock, opts, this.view.getButtons()); + this.view && Common.Utils.lockControls(causes, lock, opts, this.view.getButtons()); }, onApiCanAddHyperlink: function(value) { @@ -593,8 +593,10 @@ define([ (new Promise(function (accept, reject) { accept(); })).then(function(){ - me.view && me.view.onAppReady(config); - me.onChangeProtectDocument(); + if (me.view) { + me.view.onAppReady(config); + me.onChangeProtectDocument(); + } }); } diff --git a/apps/documenteditor/main/app/controller/Main.js b/apps/documenteditor/main/app/controller/Main.js index a0fdd0c70..75c0570a0 100644 --- a/apps/documenteditor/main/app/controller/Main.js +++ b/apps/documenteditor/main/app/controller/Main.js @@ -1694,7 +1694,9 @@ define([ var toolbarController = application.getController('Toolbar'); toolbarController && toolbarController.setApi(me.api); - if (this.appOptions.isEdit) { + if (this.appOptions.isRestrictedEdit) + application.getController('DocProtection').setMode(me.appOptions).setConfig({config: me.editorConfig}, me.api); + else if (this.appOptions.isEdit) { var rightmenuController = application.getController('RightMenu'), fontsControllers = application.getController('Common.Controllers.Fonts'); fontsControllers && fontsControllers.setApi(me.api); From 6f1ee48c6d209aa5497bb24c5a18b0315c6a16fa Mon Sep 17 00:00:00 2001 From: Julia Radzhabova <julia.radzhabova@onlyoffice.com> Date: Wed, 28 Sep 2022 01:01:27 +0300 Subject: [PATCH 12/28] [DE] Refactoring document protection --- apps/common/main/lib/controller/Comments.js | 27 +++++---- .../main/lib/controller/ReviewChanges.js | 58 ++++++++++--------- .../template/ReviewChangesPopover.template | 2 +- apps/common/main/lib/util/utils.js | 16 ----- apps/common/main/lib/view/ReviewChanges.js | 17 +++--- .../main/app/controller/DocProtection.js | 19 +++--- .../main/app/controller/DocumentHolder.js | 27 ++++++--- .../main/app/controller/FormsTab.js | 24 ++++---- .../main/app/controller/LeftMenu.js | 26 ++++++--- .../main/app/controller/Links.js | 20 +++---- .../main/app/controller/RightMenu.js | 32 ++++++---- .../main/app/controller/Toolbar.js | 20 +++---- .../main/app/view/DocumentHolder.js | 15 +++-- .../documenteditor/main/app/view/Statusbar.js | 28 +++++---- 14 files changed, 187 insertions(+), 144 deletions(-) diff --git a/apps/common/main/lib/controller/Comments.js b/apps/common/main/lib/controller/Comments.js index 160701fc7..115657f63 100644 --- a/apps/common/main/lib/controller/Comments.js +++ b/apps/common/main/lib/controller/Comments.js @@ -145,13 +145,18 @@ define([ }, this, area); }.bind(this)); Common.NotificationCenter.on('app:ready', this.onAppReady.bind(this)); - Common.NotificationCenter.on('protect:doclock', _.bind(this.onChangeProtectDocument, this)); }, onLaunch: function () { var filter = Common.localStorage.getKeysFilter(); this.appPrefix = (filter && filter.length) ? filter.split(',')[0] : ''; this._state = { - disableEditing: false // disable editing when disconnect/signed file/mail merge preview/review final or original/forms preview + disableEditing: false, // disable editing when disconnect/signed file/mail merge preview/review final or original/forms preview + docProtection: { + isReadOnly: false, + isReviewOnly: false, + isFormsOnly: false, + isCommentsOnly: false + } }; this.collection = this.getApplication().getCollection('Common.Collections.Comments'); @@ -1655,8 +1660,8 @@ define([ }, updatePreviewMode: function() { - var docProtection = Common.Utils.Store.get('docProtection', {}); - var viewmode = this._state.disableEditing || !!docProtection.isReadOnly || !!docProtection.isFormsOnly; + var docProtection = this._state.docProtection; + var viewmode = this._state.disableEditing || docProtection.isReadOnly || docProtection.isFormsOnly; if (this.viewmode === viewmode) return; this.viewmode = viewmode; @@ -1740,17 +1745,19 @@ define([ accept(); })).then(function(){ me.onChangeProtectDocument(); + Common.NotificationCenter.on('protect:doclock', _.bind(me.onChangeProtectDocument, me)); }); }, - onChangeProtectDocument: function() { - var docProtection = Common.Utils.Store.get('docProtection'); - if (!docProtection) { - var cntrl = this.getApplication().getController('DocProtection'); - docProtection = cntrl ? cntrl.getDocProps() : null; + onChangeProtectDocument: function(props) { + if (!props) { + var docprotect = this.getApplication().getController('DocProtection'); + props = docprotect ? docprotect.getDocProps() : null; } - if (docProtection) + if (props) { + this._state.docProtection = props; this.updatePreviewMode(); + } } }, Common.Controllers.Comments || {})); diff --git a/apps/common/main/lib/controller/ReviewChanges.js b/apps/common/main/lib/controller/ReviewChanges.js index 39cbafc03..3691dba1d 100644 --- a/apps/common/main/lib/controller/ReviewChanges.js +++ b/apps/common/main/lib/controller/ReviewChanges.js @@ -82,7 +82,8 @@ define([ 'reviewchange:view': _.bind(this.onReviewViewClick, this), 'reviewchange:compare': _.bind(this.onCompareClick, this), 'lang:document': _.bind(this.onDocLanguage, this), - 'collaboration:coauthmode': _.bind(this.onCoAuthMode, this) + 'collaboration:coauthmode': _.bind(this.onCoAuthMode, this), + 'protect:update': _.bind(this.onChangeProtectDocument, this) }, 'Common.Views.ReviewChangesDialog': { 'reviewchange:accept': _.bind(this.onAcceptClick, this), @@ -103,7 +104,13 @@ define([ this.viewmode = false; this._state = { posx: -1000, posy: -1000, popoverVisible: false, previewMode: false, compareSettings: null, wsLock: false, wsProps: [], - disableEditing: false // disable editing when disconnect/signed file/mail merge preview/review final or original/forms preview + disableEditing: false, // disable editing when disconnect/signed file/mail merge preview/review final or original/forms preview + docProtection: { + isReadOnly: false, + isReviewOnly: false, + isFormsOnly: false, + isCommentsOnly: false + } }; Common.NotificationCenter.on('reviewchanges:turn', this.onTurnPreview.bind(this)); @@ -113,7 +120,6 @@ define([ Common.NotificationCenter.on('collaboration:sharing', this.changeAccessRights.bind(this)); Common.NotificationCenter.on('collaboration:sharingdeny', this.onLostEditRights.bind(this)); Common.NotificationCenter.on('protect:wslock', _.bind(this.onChangeProtectSheet, this)); - Common.NotificationCenter.on('protect:doclock', _.bind(this.onChangeProtectDocument, this)); this.userCollection.on('reset', _.bind(this.onUpdateUsers, this)); this.userCollection.on('add', _.bind(this.onUpdateUsers, this)); @@ -189,8 +195,7 @@ define([ }, updatePreviewMode: function() { - var docProtection = Common.Utils.Store.get('docProtection', {}); - var viewmode = this._state.disableEditing || !!docProtection.isReadOnly || !!docProtection.isFormsOnly || !!docProtection.isCommentsOnly; + var viewmode = this._state.disableEditing || this._state.docProtection.isReadOnly || this._state.docProtection.isFormsOnly || this._state.docProtection.isCommentsOnly; if (this.viewmode === viewmode) return; this.viewmode = viewmode; @@ -220,7 +225,7 @@ define([ onApiShowChange: function (sdkchange, isShow) { var btnlock = true, changes; - if (this.appConfig.canReview && !(this.appConfig.isReviewOnly || Common.Utils.Store.get('docProtection', {}).isReviewOnly)) { + if (this.appConfig.canReview && !(this.appConfig.isReviewOnly || this._state.docProtection.isReviewOnly)) { if (sdkchange && sdkchange.length>0) { changes = this.readSDKChange(sdkchange); btnlock = this.isSelectedChangesLocked(changes, isShow); @@ -495,7 +500,7 @@ define([ } var date = (item.get_DateTime() == '') ? new Date() : new Date(item.get_DateTime()), user = me.userCollection.findOriginalUser(item.get_UserId()), - isProtectedReview = !!Common.Utils.Store.get('docProtection', {}).isReviewOnly, + isProtectedReview = me._state.docProtection.isReviewOnly, change = new Common.Models.ReviewChange({ uid : Common.UI.getId(), userid : item.get_UserId(), @@ -510,6 +515,7 @@ define([ changedata : item, scope : me.view, hint : !me.appConfig.canReview, + docProtection: me._state.docProtection, goto : (item.get_MoveType() == Asc.c_oAscRevisionsMove.MoveTo || item.get_MoveType() == Asc.c_oAscRevisionsMove.MoveFrom), editable : (me.appConfig.isReviewOnly || isProtectedReview) && (item.get_UserId() == me.currentUserId) || !(me.appConfig.isReviewOnly || isProtectedReview) && (!me.appConfig.canUseReviewPermissions || AscCommon.UserInfoParser.canEditReview(item.get_UserName())) }); @@ -614,7 +620,7 @@ define([ }, onApiTrackRevisionsChange: function(localFlag, globalFlag, userId) { - if ( this.appConfig.isReviewOnly || Common.Utils.Store.get('docProtection', {}).isReviewOnly) { + if ( this.appConfig.isReviewOnly || this._state.docProtection.isReviewOnly) { this.view.turnChanges(true); } else if ( this.appConfig.canReview ) { @@ -873,7 +879,8 @@ define([ (!me.appConfig.customization.review || me.appConfig.customization.review.showReviewChanges===undefined) && me.appConfig.customization.showReviewChanges==true) ) { me.dlgChanges = (new Common.Views.ReviewChangesDialog({ popoverChanges : me.popoverChanges, - mode : me.appConfig + mode : me.appConfig, + docProtection : me._state.docProtection })); var sdk = $('#editor_sdk'), offset = sdk.offset(); @@ -900,7 +907,6 @@ define([ }); } me.onChangeProtectSheet(); - me.onChangeProtectDocument(); if (me.view) { me.lockToolbar(Common.enumLock.hideComments, !Common.localStorage.getBool(me.view.appPrefix + "settings-livecomment", true), {array: [me.view.btnCommentRemove, me.view.btnCommentResolve]}); me.lockToolbar(Common.enumLock['Objects'], !!me._state.wsProps['Objects'], {array: [me.view.btnCommentRemove, me.view.btnCommentResolve]}); @@ -1026,32 +1032,32 @@ define([ this.lockToolbar(Common.enumLock['Objects'], !!this._state.wsProps['Objects'], {array: [this.view.btnCommentRemove, this.view.btnCommentResolve]}); }, - onChangeProtectDocument: function() { - var docProtection = Common.Utils.Store.get('docProtection'); - if (!docProtection) { - var cntrl = this.getApplication().getController('DocProtection'); - docProtection = cntrl ? cntrl.getDocProps() : null; + onChangeProtectDocument: function(props) { + if (!props) { + var docprotect = this.getApplication().getController('DocProtection'); + props = docprotect ? docprotect.getDocProps() : null; } - if (docProtection) { - this.lockToolbar(Common.enumLock.docLockView, docProtection.isReadOnly); - this.lockToolbar(Common.enumLock.docLockForms, docProtection.isFormsOnly); - this.lockToolbar(Common.enumLock.docLockReview, docProtection.isReviewOnly); - this.lockToolbar(Common.enumLock.docLockComments, docProtection.isCommentsOnly); + if (props) { + this._state.docProtection = props; + this.lockToolbar(Common.enumLock.docLockView, props.isReadOnly); + this.lockToolbar(Common.enumLock.docLockForms, props.isFormsOnly); + this.lockToolbar(Common.enumLock.docLockReview, props.isReviewOnly); + this.lockToolbar(Common.enumLock.docLockComments, props.isCommentsOnly); if (this.dlgChanges) { - Common.Utils.lockControls(Common.enumLock.docLockView, docProtection.isReadOnly, {array: [this.dlgChanges.btnAccept, this.dlgChanges.btnReject]}); - Common.Utils.lockControls(Common.enumLock.docLockForms, docProtection.isFormsOnly, {array: [this.dlgChanges.btnAccept, this.dlgChanges.btnReject]}); - Common.Utils.lockControls(Common.enumLock.docLockReview, docProtection.isReviewOnly, {array: [this.dlgChanges.btnAccept, this.dlgChanges.btnReject]}); - Common.Utils.lockControls(Common.enumLock.docLockComments, docProtection.isCommentsOnly, {array: [this.dlgChanges.btnAccept, this.dlgChanges.btnReject]}); + Common.Utils.lockControls(Common.enumLock.docLockView, props.isReadOnly, {array: [this.dlgChanges.btnAccept, this.dlgChanges.btnReject]}); + Common.Utils.lockControls(Common.enumLock.docLockForms, props.isFormsOnly, {array: [this.dlgChanges.btnAccept, this.dlgChanges.btnReject]}); + Common.Utils.lockControls(Common.enumLock.docLockReview, props.isReviewOnly, {array: [this.dlgChanges.btnAccept, this.dlgChanges.btnReject]}); + Common.Utils.lockControls(Common.enumLock.docLockComments, props.isCommentsOnly, {array: [this.dlgChanges.btnAccept, this.dlgChanges.btnReject]}); } if (this.appConfig.canReview) { - if (docProtection.isReviewOnly) { + if (props.isReviewOnly) { this.onTurnPreview(true); this.onApiShowChange(); } else if (this._state.prevReviewProtected) { this.onTurnPreview(false); this.onApiShowChange(); } - this._state.prevReviewProtected = docProtection.isReviewOnly; + this._state.prevReviewProtected = props.isReviewOnly; } this.updatePreviewMode(); } diff --git a/apps/common/main/lib/template/ReviewChangesPopover.template b/apps/common/main/lib/template/ReviewChangesPopover.template index 8669c695d..409e4c0e5 100644 --- a/apps/common/main/lib/template/ReviewChangesPopover.template +++ b/apps/common/main/lib/template/ReviewChangesPopover.template @@ -9,7 +9,7 @@ <div class="btn-goto img-commonctrl"></div> <% } %> <% if (!hint) { %> - <% if (scope.appConfig.isReviewOnly || Common.Utils.Store.get("docProtection", {}).isReviewOnly) { %> + <% if (scope.appConfig.isReviewOnly || docProtection.isReviewOnly) { %> <% if (editable) { %> <div class="btn-delete img-commonctrl"></div> <% } %> diff --git a/apps/common/main/lib/util/utils.js b/apps/common/main/lib/util/utils.js index 78d492cc4..bab0f3cff 100644 --- a/apps/common/main/lib/util/utils.js +++ b/apps/common/main/lib/util/utils.js @@ -1096,19 +1096,3 @@ Common.Utils.getKeyByValue = function(obj, value) { } } }; - -Common.Utils.Store = new(function() { - var settings = {}; - - var _get = function(name, defValue) { - return (settings[name]!==undefined) ? settings[name] : defValue; - }, - _set = function(name, value) { - settings[name] = value; - }; - - return { - get: _get, - set: _set - } -}); \ No newline at end of file diff --git a/apps/common/main/lib/view/ReviewChanges.js b/apps/common/main/lib/view/ReviewChanges.js index dcb4dce78..fb1336691 100644 --- a/apps/common/main/lib/view/ReviewChanges.js +++ b/apps/common/main/lib/view/ReviewChanges.js @@ -238,6 +238,10 @@ define([ me.fireEvent('comment:resolveComments', [item.value]); }); } + Common.NotificationCenter.on('protect:doclock', function (e) { + me.fireEvent('protect:update'); + }); + me.fireEvent('protect:update'); } return { @@ -691,7 +695,6 @@ define([ me.$el.find(separator_last).hide(); Common.NotificationCenter.trigger('tab:visible', 'review', (config.isEdit || config.canViewReview || config.canCoAuthoring && config.canComments) && Common.UI.LayoutManager.isElementVisible('toolbar-collaboration')); - setEvents.call(me); }); }, @@ -971,6 +974,7 @@ define([ this.options.tpl = _.template(this.template)(this.options); this.popoverChanges = this.options.popoverChanges; this.mode = this.options.mode; + this.docProtection = this.options.docProtection; var filter = Common.localStorage.getKeysFilter(); this.appPrefix = (filter && filter.length) ? filter.split(',')[0] : ''; @@ -1002,7 +1006,7 @@ define([ cls : 'btn-toolbar', caption : this.txtAccept, split : true, - disabled : this.mode.isReviewOnly || Common.Utils.Store.get('docProtection', {}).isReviewOnly || !!Common.Utils.InternalSettings.get(this.appPrefix + "accept-reject-lock"), + disabled : this.mode.isReviewOnly || this.docProtection.isReviewOnly || !!Common.Utils.InternalSettings.get(this.appPrefix + "accept-reject-lock"), lock : [_set.reviewChangelock, _set.isReviewOnly, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms, _set.docLockComments, _set.docLockReview], menu : this.mode.canUseReviewPermissions ? false : new Common.UI.Menu({ items: [ @@ -1040,11 +1044,10 @@ define([ this.btnReject.render(this.$window.find('#id-review-button-reject')); var arr = [this.btnAccept, this.btnReject]; Common.Utils.lockControls(Common.enumLock.isReviewOnly, this.mode.isReviewOnly, {array: arr}); - var docProtection = Common.Utils.Store.get('docProtection', {}); - Common.Utils.lockControls(Common.enumLock.docLockView, docProtection.isReadOnly, {array: arr}); - Common.Utils.lockControls(Common.enumLock.docLockForms, docProtection.isFormsOnly, {array: arr}); - Common.Utils.lockControls(Common.enumLock.docLockReview, docProtection.isReviewOnly, {array: arr}); - Common.Utils.lockControls(Common.enumLock.docLockComments, docProtection.isCommentsOnly, {array: arr}); + Common.Utils.lockControls(Common.enumLock.docLockView, this.docProtection.isReadOnly, {array: arr}); + Common.Utils.lockControls(Common.enumLock.docLockForms, this.docProtection.isFormsOnly, {array: arr}); + Common.Utils.lockControls(Common.enumLock.docLockReview, this.docProtection.isReviewOnly, {array: arr}); + Common.Utils.lockControls(Common.enumLock.docLockComments, this.docProtection.isCommentsOnly, {array: arr}); Common.Utils.lockControls(Common.enumLock.reviewChangelock, !!Common.Utils.InternalSettings.get(this.appPrefix + "accept-reject-lock"), {array: arr}); var me = this; diff --git a/apps/documenteditor/main/app/controller/DocProtection.js b/apps/documenteditor/main/app/controller/DocProtection.js index 4dcc94bb6..557d56b31 100644 --- a/apps/documenteditor/main/app/controller/DocProtection.js +++ b/apps/documenteditor/main/app/controller/DocProtection.js @@ -198,14 +198,13 @@ define([ // var isProtected = this.api.asc_isProtectedDocument(); var isProtected = this.view ? this.view.btnProtectDoc.isActive() : false; // test this.view && this.view.btnProtectDoc.toggle(isProtected, true); - this.getDocProps(true); - Common.NotificationCenter.trigger('protect:doclock'); + Common.NotificationCenter.trigger('protect:doclock', this.getDocProps(true)); }, getDocProps: function(update) { if (!this.appConfig || !this.appConfig.isEdit && !this.appConfig.isRestrictedEdit) return; - if (update || !Common.Utils.Store.get('docProtection')) { + if (update || !this._state.docProtection) { // var docProtected = !!this.api.asc_isProtectedDocument(), // type; // @@ -215,10 +214,10 @@ define([ // } // test ////// - // if (Common.Utils.InternalSettings.get('protect-test-type')===undefined) { - // this.view && this.view.btnProtectDoc.toggle(true, true); - // Common.Utils.InternalSettings.set('protect-test-type', Asc.c_oAscProtection.Comments); - // } + if (Common.Utils.InternalSettings.get('protect-test-type')===undefined) { + this.view && this.view.btnProtectDoc.toggle(true, true); + Common.Utils.InternalSettings.set('protect-test-type', Asc.c_oAscProtection.Forms); + } var docProtected = this.view ? this.view.btnProtectDoc.isActive() : true, type; @@ -226,14 +225,14 @@ define([ type = Common.Utils.InternalSettings.get('protect-test-type'); } ///////////// - Common.Utils.Store.set('docProtection', { + this._state.docProtection = { isReadOnly: type===Asc.c_oAscProtection.View, isCommentsOnly: type===Asc.c_oAscProtection.Comments, isReviewOnly: type===Asc.c_oAscProtection.Review, isFormsOnly: type===Asc.c_oAscProtection.Forms - }); + }; } - return Common.Utils.Store.get('docProtection'); + return this._state.docProtection; } }, DE.Controllers.DocProtection || {})); diff --git a/apps/documenteditor/main/app/controller/DocumentHolder.js b/apps/documenteditor/main/app/controller/DocumentHolder.js index 3fe44e89c..f2a3cefab 100644 --- a/apps/documenteditor/main/app/controller/DocumentHolder.js +++ b/apps/documenteditor/main/app/controller/DocumentHolder.js @@ -187,6 +187,7 @@ define([ me.onDocumentHolderResize(); } }); + Common.NotificationCenter.on('protect:doclock', _.bind(me.onChangeProtectDocument, me)); }, setApi: function(o) { @@ -424,6 +425,8 @@ define([ view.menuParaTOCSettings.on('click', _.bind(me.onParaTOCSettings, me)); view.menuTableEquation.menu.on('item:click', _.bind(me.convertEquation, me)); view.menuParagraphEquation.menu.on('item:click', _.bind(me.convertEquation, me)); + + me.onChangeProtectDocument(); }, getView: function (name) { @@ -584,7 +587,7 @@ define([ showObjectMenu: function(event, docElement, eOpts){ var me = this; if (me.api){ - var docProtection = Common.Utils.Store.get('docProtection', {}); + var docProtection = me.documentHolder._docProtection; var obj = (me.mode.isEdit && !(me._isDisabled || docProtection.isReadOnly || docProtection.isFormsOnly || docProtection.isCommentsOnly)) ? me.fillMenuProps(me.api.getSelectedElements()) : me.fillViewMenuProps(me.api.getSelectedElements()); if (obj) me.showPopupMenu(obj.menu_to_show, obj.menu_props, event, docElement, eOpts); @@ -613,7 +616,7 @@ define([ var me = this, currentMenu = me.documentHolder.currentMenu; if (currentMenu && currentMenu.isVisible() && currentMenu !== me.documentHolder.hdrMenu){ - var docProtection = Common.Utils.Store.get('docProtection', {}); + var docProtection = me.documentHolder._docProtection; var obj = (me.mode.isEdit && !(me._isDisabled || docProtection.isReadOnly || docProtection.isFormsOnly || docProtection.isCommentsOnly)) ? me.fillMenuProps(selectedElements) : me.fillViewMenuProps(selectedElements); if (obj) { @@ -827,7 +830,7 @@ define([ onDialogAddHyperlink: function() { var me = this; var win, props, text; - var docProtection = Common.Utils.Store.get('docProtection', {}); + var docProtection = me.documentHolder._docProtection; if (me.api && me.mode.isEdit && !(me._isDisabled || docProtection.isReadOnly || docProtection.isFormsOnly || docProtection.isCommentsOnly) && !me.getApplication().getController('LeftMenu').leftMenu.menuFile.isVisible()){ var handlerDlg = function(dlg, result) { if (result == 'ok') { @@ -1184,7 +1187,7 @@ define([ }, onDoubleClickOnChart: function(chart) { - var docProtection = Common.Utils.Store.get('docProtection', {}); + var docProtection = this.documentHolder._docProtection; if (this.mode.isEdit && !(this._isDisabled || docProtection.isReadOnly || docProtection.isFormsOnly || docProtection.isCommentsOnly)) { var diagramEditor = this.getApplication().getController('Common.Controllers.ExternalDiagramEditor').getView('Common.Views.ExternalDiagramEditor'); if (diagramEditor && chart) { @@ -1196,7 +1199,7 @@ define([ }, onDoubleClickOnTableOleObject: function(chart) { - var docProtection = Common.Utils.Store.get('docProtection', {}); + var docProtection = this.documentHolder._docProtection; if (this.mode.isEdit && !(this._isDisabled || docProtection.isReadOnly || docProtection.isFormsOnly || docProtection.isCommentsOnly)) { var oleEditor = this.getApplication().getController('Common.Controllers.ExternalOleEditor').getView('Common.Views.ExternalOleEditor'); if (oleEditor && chart) { @@ -1901,8 +1904,8 @@ define([ this.api.asc_ViewCertificate(datavalue); //certificate id break; case 2: - var docProtection = Common.Utils.Store.get('docProtection', {}); - Common.NotificationCenter.trigger('protect:signature', 'visible', this._isDisabled || !!docProtection.isReadOnly || !!docProtection.isFormsOnly || !!docProtection.isCommentsOnly, datavalue);//guid, can edit settings for requested signature + var docProtection = this.documentHolder._docProtection; + Common.NotificationCenter.trigger('protect:signature', 'visible', this._isDisabled || docProtection.isReadOnly || docProtection.isFormsOnly || docProtection.isCommentsOnly, datavalue);//guid, can edit settings for requested signature break; case 3: var me = this; @@ -2315,6 +2318,16 @@ define([ } }, + onChangeProtectDocument: function(props) { + if (!props) { + var docprotect = this.getApplication().getController('DocProtection'); + props = docprotect ? docprotect.getDocProps() : null; + } + if (props && this.documentHolder) { + this.documentHolder._docProtection = props; + } + }, + editComplete: function() { this.documentHolder && this.documentHolder.fireEvent('editcomplete', this.documentHolder); } diff --git a/apps/documenteditor/main/app/controller/FormsTab.js b/apps/documenteditor/main/app/controller/FormsTab.js index 728813d3d..35f52e116 100644 --- a/apps/documenteditor/main/app/controller/FormsTab.js +++ b/apps/documenteditor/main/app/controller/FormsTab.js @@ -434,18 +434,20 @@ define([ } }, - onChangeProtectDocument: function() { - var docProtection = Common.Utils.Store.get('docProtection'); - if (!docProtection) { - var cntrl = this.getApplication().getController('DocProtection'); - docProtection = cntrl ? cntrl.getDocProps() : null; + onChangeProtectDocument: function(props) { + if (!props) { + var docprotect = this.getApplication().getController('DocProtection'); + props = docprotect ? docprotect.getDocProps() : null; } - if (docProtection && this.view) { - var arr = this.view.getButtons(); - Common.Utils.lockControls(Common.enumLock.docLockView, docProtection.isReadOnly, {array: arr}); - Common.Utils.lockControls(Common.enumLock.docLockForms, docProtection.isFormsOnly, {array: arr}); - Common.Utils.lockControls(Common.enumLock.docLockReview, docProtection.isReviewOnly, {array: arr}); - Common.Utils.lockControls(Common.enumLock.docLockComments, docProtection.isCommentsOnly, {array: arr}); + if (props) { + this._state.docProtection = props; + if (this.view) { + var arr = this.view.getButtons(); + Common.Utils.lockControls(Common.enumLock.docLockView, props.isReadOnly, {array: arr}); + Common.Utils.lockControls(Common.enumLock.docLockForms, props.isFormsOnly, {array: arr}); + Common.Utils.lockControls(Common.enumLock.docLockReview, props.isReviewOnly, {array: arr}); + Common.Utils.lockControls(Common.enumLock.docLockComments, props.isCommentsOnly, {array: arr}); + } } } diff --git a/apps/documenteditor/main/app/controller/LeftMenu.js b/apps/documenteditor/main/app/controller/LeftMenu.js index 556862582..694413232 100644 --- a/apps/documenteditor/main/app/controller/LeftMenu.js +++ b/apps/documenteditor/main/app/controller/LeftMenu.js @@ -119,7 +119,15 @@ define([ onLaunch: function() { this.leftMenu = this.createView('LeftMenu').render(); this.leftMenu.btnSearchBar.on('toggle', _.bind(this.onMenuSearchBar, this)); - this._state = {disableEditing: false}; + this._state = { + disableEditing: false, + docProtection: { + isReadOnly: false, + isReviewOnly: false, + isFormsOnly: false, + isCommentsOnly: false + } + }; Common.util.Shortcuts.delegateShortcuts({ shortcuts: { 'command+shift+s,ctrl+shift+s': _.bind(this.onShortcut, this, 'save'), @@ -587,8 +595,7 @@ define([ }, updatePreviewMode: function() { - var docProtection = Common.Utils.Store.get('docProtection', {}); - var viewmode = this._state.disableEditing || !!docProtection.isReadOnly || !!docProtection.isFormsOnly; + var viewmode = this._state.disableEditing || this._state.docProtection.isReadOnly || this._state.docProtection.isFormsOnly; if (this.viewmode === viewmode) return; this.viewmode = viewmode; @@ -895,14 +902,15 @@ define([ return this.leftMenu && this.leftMenu.panelComments && this.leftMenu.panelComments.isVisible(); }, - onChangeProtectDocument: function() { - var docProtection = Common.Utils.Store.get('docProtection'); - if (!docProtection) { - var cntrl = this.getApplication().getController('DocProtection'); - docProtection = cntrl ? cntrl.getDocProps() : null; + onChangeProtectDocument: function(props) { + if (!props) { + var docprotect = this.getApplication().getController('DocProtection'); + props = docprotect ? docprotect.getDocProps() : null; } - if (docProtection) + if (props) { + this._state.docProtection = props; this.updatePreviewMode(); + } }, textNoTextFound : 'Text not found', diff --git a/apps/documenteditor/main/app/controller/Links.js b/apps/documenteditor/main/app/controller/Links.js index 04febdc0f..fb16e6a22 100644 --- a/apps/documenteditor/main/app/controller/Links.js +++ b/apps/documenteditor/main/app/controller/Links.js @@ -574,17 +574,17 @@ define([ })).show(); }, - onChangeProtectDocument: function() { - var docProtection = Common.Utils.Store.get('docProtection'); - if (!docProtection) { - var cntrl = this.getApplication().getController('DocProtection'); - docProtection = cntrl ? cntrl.getDocProps() : null; + onChangeProtectDocument: function(props) { + if (!props) { + var docprotect = this.getApplication().getController('DocProtection'); + props = docprotect ? docprotect.getDocProps() : null; } - if (docProtection) { - this.lockToolbar(Common.enumLock.docLockView, docProtection.isReadOnly); - this.lockToolbar(Common.enumLock.docLockForms, docProtection.isFormsOnly); - this.lockToolbar(Common.enumLock.docLockReview, docProtection.isReviewOnly); - this.lockToolbar(Common.enumLock.docLockComments, docProtection.isCommentsOnly); + if (props) { + this._state.docProtection = props; + this.lockToolbar(Common.enumLock.docLockView, props.isReadOnly); + this.lockToolbar(Common.enumLock.docLockForms, props.isFormsOnly); + this.lockToolbar(Common.enumLock.docLockReview, props.isReviewOnly); + this.lockToolbar(Common.enumLock.docLockComments, props.isCommentsOnly); } }, diff --git a/apps/documenteditor/main/app/controller/RightMenu.js b/apps/documenteditor/main/app/controller/RightMenu.js index 101d48ede..23466eb39 100644 --- a/apps/documenteditor/main/app/controller/RightMenu.js +++ b/apps/documenteditor/main/app/controller/RightMenu.js @@ -54,7 +54,14 @@ define([ initialize: function() { this.editMode = true; this._initSettings = true; - this._state = {}; + this._state = { + docProtection: { + isReadOnly: false, + isReviewOnly: false, + isFormsOnly: false, + isCommentsOnly: false + } + }; this.addListeners({ 'RightMenu': { 'rightmenuclick': this.onRightMenuClick @@ -158,8 +165,7 @@ define([ var isChart = false, isSmartArtInternal = false, - docProtection = Common.Utils.Store.get('docProtection', {}), - isProtected = !!docProtection.isReadOnly || !!docProtection.isFormsOnly || !!docProtection.isCommentsOnly; + isProtected = this._state.docProtection.isReadOnly || this._state.docProtection.isFormsOnly || this._state.docProtection.isCommentsOnly; var control_props = this.api.asc_IsContentControl() ? this.api.asc_GetContentControlProperties() : null, control_lock = false; @@ -472,16 +478,18 @@ define([ } }, - onChangeProtectDocument: function() { - var docProtection = Common.Utils.Store.get('docProtection'); - if (!docProtection) { - var cntrl = this.getApplication().getController('DocProtection'); - docProtection = cntrl ? cntrl.getDocProps() : null; + onChangeProtectDocument: function(props) { + if (!props) { + var docprotect = this.getApplication().getController('DocProtection'); + props = docprotect ? docprotect.getDocProps() : null; } - if (docProtection && this.api) { - var selectedElements = this.api.getSelectedElements(); - if (selectedElements.length > 0) - this.onFocusObject(selectedElements); + if (props) { + this._state.docProtection = props; + if (this.api) { + var selectedElements = this.api.getSelectedElements(); + if (selectedElements.length > 0) + this.onFocusObject(selectedElements); + } } } }); diff --git a/apps/documenteditor/main/app/controller/Toolbar.js b/apps/documenteditor/main/app/controller/Toolbar.js index 763dcfa7c..ecdea8744 100644 --- a/apps/documenteditor/main/app/controller/Toolbar.js +++ b/apps/documenteditor/main/app/controller/Toolbar.js @@ -3333,17 +3333,17 @@ define([ })).show(); }, - onChangeProtectDocument: function() { - var docProtection = Common.Utils.Store.get('docProtection'); - if (!docProtection) { - var cntrl = this.getApplication().getController('DocProtection'); - docProtection = cntrl ? cntrl.getDocProps() : null; + onChangeProtectDocument: function(props) { + if (!props) { + var docprotect = this.getApplication().getController('DocProtection'); + props = docprotect ? docprotect.getDocProps() : null; } - if (docProtection) { - this.toolbar.lockToolbar(Common.enumLock.docLockView, docProtection.isReadOnly); - this.toolbar.lockToolbar(Common.enumLock.docLockForms, docProtection.isFormsOnly); - this.toolbar.lockToolbar(Common.enumLock.docLockReview, docProtection.isReviewOnly); - this.toolbar.lockToolbar(Common.enumLock.docLockComments, docProtection.isCommentsOnly); + if (props) { + this._state.docProtection = props; + this.toolbar.lockToolbar(Common.enumLock.docLockView, props.isReadOnly); + this.toolbar.lockToolbar(Common.enumLock.docLockForms, props.isFormsOnly); + this.toolbar.lockToolbar(Common.enumLock.docLockReview, props.isReviewOnly); + this.toolbar.lockToolbar(Common.enumLock.docLockComments, props.isCommentsOnly); } }, diff --git a/apps/documenteditor/main/app/view/DocumentHolder.js b/apps/documenteditor/main/app/view/DocumentHolder.js index 49c576700..3d98b204e 100644 --- a/apps/documenteditor/main/app/view/DocumentHolder.js +++ b/apps/documenteditor/main/app/view/DocumentHolder.js @@ -76,6 +76,12 @@ define([ this._currentParaObjDisabled = false; this._currLang = {}; this._isDisabled = false; + this._docProtection = { + isReadOnly: false, + isReviewOnly: false, + isFormsOnly: false, + isCommentsOnly: false + }; }, render: function () { @@ -152,7 +158,6 @@ define([ signGuid = (value.imgProps && value.imgProps.value && me.mode.isSignatureSupport) ? value.imgProps.value.asc_getSignatureId() : undefined, signProps = (signGuid) ? me.api.asc_getSignatureSetup(signGuid) : null, isInSign = !!signProps && me._canProtect, - docProtection = Common.Utils.Store.get('docProtection', {}), control_lock = (value.paraProps) ? (!value.paraProps.value.can_DeleteBlockContentControl() || !value.paraProps.value.can_EditBlockContentControl() || !value.paraProps.value.can_DeleteInlineContentControl() || !value.paraProps.value.can_EditInlineContentControl()) : false, canComment = !isInChart && me.api.can_AddQuotedComment() !== false && me.mode.canCoAuthoring && me.mode.canComments && !me._isDisabled && !control_lock, @@ -170,7 +175,7 @@ define([ } me.menuViewUndo.setVisible(me.mode.canCoAuthoring && me.mode.canComments && !me._isDisabled); - me.menuViewUndo.setDisabled(!me.api.asc_getCanUndo() || !!docProtection.isReadOnly); + me.menuViewUndo.setDisabled(!me.api.asc_getCanUndo() || me._docProtection.isReadOnly); me.menuViewCopySeparator.setVisible(isInSign); var isRequested = (signProps) ? signProps.asc_getRequested() : false; @@ -188,15 +193,15 @@ define([ } me.menuViewAddComment.setVisible(canComment); - me.menuViewAddComment.setDisabled(value.paraProps && value.paraProps.locked === true || !!docProtection.isReadOnly || !!docProtection.isFormsOnly); + me.menuViewAddComment.setDisabled(value.paraProps && value.paraProps.locked === true || me._docProtection.isReadOnly || me._docProtection.isFormsOnly); var disabled = value.paraProps && value.paraProps.locked === true; var cancopy = me.api && me.api.can_CopyCut(); me.menuViewCopy.setDisabled(!cancopy); me.menuViewCut.setVisible(me._fillFormMode && canEditControl); - me.menuViewCut.setDisabled(disabled || !cancopy || !!docProtection.isReadOnly || !!docProtection.isCommentsOnly); + me.menuViewCut.setDisabled(disabled || !cancopy || me._docProtection.isReadOnly || me._docProtection.isCommentsOnly); me.menuViewPaste.setVisible(me._fillFormMode && canEditControl); - me.menuViewPaste.setDisabled(disabled || !!docProtection.isReadOnly || !!docProtection.isCommentsOnly); + me.menuViewPaste.setDisabled(disabled || me._docProtection.isReadOnly || me._docProtection.isCommentsOnly); me.menuViewPrint.setVisible(me.mode.canPrint && !me._fillFormMode); me.menuViewPrint.setDisabled(!cancopy); diff --git a/apps/documenteditor/main/app/view/Statusbar.js b/apps/documenteditor/main/app/view/Statusbar.js index 54db2be0c..072bc49c4 100644 --- a/apps/documenteditor/main/app/view/Statusbar.js +++ b/apps/documenteditor/main/app/view/Statusbar.js @@ -178,7 +178,14 @@ define([ _.extend(this, options); this.pages = new DE.Models.Pages({current:1, count:1}); this.pages.on('change', _.bind(_updatePagesCaption,this)); - this._state = {}; + this._state = { + docProtection: { + isReadOnly: false, + isReviewOnly: false, + isFormsOnly: false, + isCommentsOnly: false + } + }; this._isDisabled = false; var me = this; @@ -371,7 +378,8 @@ define([ }); this.langMenu.resetItems(arr); if (this.langMenu.items.length>0) { - this.btnLanguage.setDisabled(!!this.mode.isDisconnected); + var isProtected = this._state.docProtection.isReadOnly || this._state.docProtection.isFormsOnly || this._state.docProtection.isCommentsOnly; + this.btnLanguage.setDisabled(this._isDisabled || !!this.mode.isDisconnected || isProtected); } }, @@ -404,20 +412,20 @@ define([ SetDisabled: function(disable) { this._isDisabled = disable; - var docProtection = Common.Utils.Store.get('docProtection', {}), - isProtected = !!docProtection.isReadOnly || !!docProtection.isFormsOnly || !!docProtection.isCommentsOnly + var isProtected = this._state.docProtection.isReadOnly || this._state.docProtection.isFormsOnly || this._state.docProtection.isCommentsOnly; this.btnLanguage.setDisabled(disable || this.langMenu.items.length<1 || isProtected); this.btnTurnReview && this.btnTurnReview.setDisabled(disable || isProtected); }, - onChangeProtectDocument: function() { - var docProtection = Common.Utils.Store.get('docProtection'); - if (!docProtection) { - var cntrl = DE.getController('DocProtection'); - docProtection = cntrl ? cntrl.getDocProps() : null; + onChangeProtectDocument: function(props) { + if (!props) { + var docprotect = DE.getController('DocProtection'); + props = docprotect ? docprotect.getDocProps() : null; } - if (docProtection) + if (props) { + this._state.docProtection = props; this.SetDisabled(this._isDisabled); + } }, onApiCoAuthoringDisconnect: function() { From 041557e6a3c2f551e1b38e05008858d3e8d78f69 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova <julia.radzhabova@onlyoffice.com> Date: Wed, 28 Sep 2022 17:29:24 +0300 Subject: [PATCH 13/28] Lock edit plugins when document is protected --- apps/common/main/lib/controller/Plugins.js | 40 ++++++++++++++++++- apps/common/main/lib/view/Plugins.js | 33 +++++++++++---- .../main/app/controller/Main.js | 2 +- .../main/app/controller/LeftMenu.js | 4 +- 4 files changed, 66 insertions(+), 13 deletions(-) diff --git a/apps/common/main/lib/controller/Plugins.js b/apps/common/main/lib/controller/Plugins.js index b17280eab..ddc0c42db 100644 --- a/apps/common/main/lib/controller/Plugins.js +++ b/apps/common/main/lib/controller/Plugins.js @@ -105,6 +105,7 @@ define([ Common.NotificationCenter.on('app:face', this.onAppShowed.bind(this)); Common.NotificationCenter.on('uitheme:changed', this.updatePluginsButtons.bind(this)); Common.NotificationCenter.on('window:resize', this.updatePluginsButtons.bind(this)); + Common.NotificationCenter.on('app:ready', this.onAppReady.bind(this)); }, loadConfig: function(data) { @@ -151,6 +152,16 @@ define([ onAppShowed: function (config) { }, + onAppReady: function (config) { + var me = this; + (new Promise(function (accept, reject) { + accept(); + })).then(function(){ + me.onChangeProtectDocument(); + Common.NotificationCenter.on('protect:doclock', _.bind(me.onChangeProtectDocument, me)); + }); + }, + setApi: function(api) { this.api = api; @@ -225,6 +236,10 @@ define([ var _group = $('> .group', me.$toolbarPanelPlugins); var $slot = $('<span class="btn-slot text x-huge"></span>').appendTo(_group); btn.render($slot); + var docProtection = me.panelPlugins._state.docProtection; + Common.Utils.lockControls(Common.enumLock.docLockView, docProtection.isReadOnly, {array: btn}); + Common.Utils.lockControls(Common.enumLock.docLockForms, docProtection.isFormsOnly, {array: btn}); + Common.Utils.lockControls(Common.enumLock.docLockComments, docProtection.isCommentsOnly, {array: btn}); } }, @@ -259,6 +274,10 @@ define([ rank = new_rank; }); _group.appendTo(me.$toolbarPanelPlugins); + var docProtection = me.panelPlugins._state.docProtection; + Common.Utils.lockControls(Common.enumLock.docLockView, docProtection.isReadOnly, {array: me.panelPlugins.lockedControls}); + Common.Utils.lockControls(Common.enumLock.docLockForms, docProtection.isFormsOnly, {array: me.panelPlugins.lockedControls}); + Common.Utils.lockControls(Common.enumLock.docLockComments, docProtection.isCommentsOnly, {array: me.panelPlugins.lockedControls}); } else { console.error('toolbar panel isnot created'); } @@ -518,10 +537,13 @@ define([ } var variationsArr = [], - pluginVisible = false; + pluginVisible = false, + isDisplayedInViewer = false; item.variations.forEach(function(itemVar){ var visible = (isEdit || itemVar.isViewer && (itemVar.isDisplayedInViewer!==false)) && _.contains(itemVar.EditorsSupport, editor) && !itemVar.isSystem; if ( visible ) pluginVisible = true; + if (itemVar.isViewer && (itemVar.isDisplayedInViewer!==false)) + isDisplayedInViewer = true; if (item.isUICustomizer ) { visible && arrUI.push({ @@ -571,7 +593,8 @@ define([ groupName: (item.group) ? item.group.name : '', groupRank: (item.group) ? item.group.rank : 0, minVersion: item.minVersion, - original: item + original: item, + isDisplayedInViewer: isDisplayedInViewer })); } }); @@ -720,6 +743,19 @@ define([ }, funcComplete); } else funcComplete(); + }, + + onChangeProtectDocument: function(props) { + if (!props) { + var docprotect = this.getApplication().getController('DocProtection'); + props = docprotect ? docprotect.getDocProps() : null; + } + if (props && this.panelPlugins) { + this.panelPlugins._state.docProtection = props; + Common.Utils.lockControls(Common.enumLock.docLockView, props.isReadOnly, {array: this.panelPlugins.lockedControls}); + Common.Utils.lockControls(Common.enumLock.docLockForms, props.isFormsOnly, {array: this.panelPlugins.lockedControls}); + Common.Utils.lockControls(Common.enumLock.docLockComments, props.isCommentsOnly, {array: this.panelPlugins.lockedControls}); + } } }, Common.Controllers.Plugins || {})); }); diff --git a/apps/common/main/lib/view/Plugins.js b/apps/common/main/lib/view/Plugins.js index 37c97cc1d..fdc530457 100644 --- a/apps/common/main/lib/view/Plugins.js +++ b/apps/common/main/lib/view/Plugins.js @@ -74,14 +74,16 @@ define([ _.extend(this, options); this._locked = false; this._state = { - DisabledControls: false + DisabledControls: false, + docProtection: { + isReadOnly: false, + isReviewOnly: false, + isFormsOnly: false, + isCommentsOnly: false + } }; this.lockedControls = []; Common.UI.BaseView.prototype.initialize.call(this, arguments); - - Common.NotificationCenter.on('app:ready', function (mode) { - Common.Utils.asyncCall(this._onAppReady, this, mode); - }.bind(this)); }, render: function(el) { @@ -153,6 +155,7 @@ define([ if ( !this.storePlugins.isEmpty() ) { var me = this; var _group = $('<div class="group"></div>'); + var _set = Common.enumLock; this.storePlugins.each(function (model) { if (model.get('visible')) { var modes = model.get('variations'), @@ -167,6 +170,7 @@ define([ split: modes && modes.length > 1, value: guid, hint: model.get('name'), + lock: model.get('isDisplayedInViewer') ? [_set.viewMode, _set.previewReviewMode, _set.viewFormMode, _set.selRangeEdit, _set.editFormula] : [_set.viewMode, _set.previewReviewMode, _set.viewFormMode, _set.lostConnect, _set.docLockView, _set.docLockForms, _set.docLockComments, _set.selRangeEdit, _set.editFormula], dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: 'small' @@ -179,6 +183,10 @@ define([ me.lockedControls.push(btn); } }); + var docProtection = me._state.docProtection + Common.Utils.lockControls(Common.enumLock.docLockView, docProtection.isReadOnly, {array: me.lockedControls}); + Common.Utils.lockControls(Common.enumLock.docLockForms, docProtection.isFormsOnly, {array: me.lockedControls}); + Common.Utils.lockControls(Common.enumLock.docLockComments, docProtection.isCommentsOnly, {array: me.lockedControls}); parent.html(_group); $('<div class="separator long"></div>').prependTo(parent); @@ -204,6 +212,16 @@ define([ } }, + SetDisabled: function(disable, reviewMode, fillFormMode) { + if (reviewMode) { + Common.Utils.lockControls(Common.enumLock.previewReviewMode, disable, {array: this.lockedControls}); + } else if (fillFormMode) { + Common.Utils.lockControls(Common.enumLock.viewFormMode, disable, {array: this.lockedControls}); + } else { + Common.Utils.lockControls(Common.enumLock.viewMode, disable, {array: this.lockedControls}); + } + }, + openInsideMode: function(name, url, frameId) { if (!this.pluginsPanel) return false; @@ -289,9 +307,6 @@ define([ this.loadMask.hide(); }, - _onAppReady: function (mode) { - }, - parseIcons: function(icons) { if (icons.length && typeof icons[0] !== 'string') { var theme = Common.UI.Themes.currentThemeId().toLowerCase(), @@ -389,6 +404,7 @@ define([ }); }); + var _set = Common.enumLock; var btn = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', iconImg: icon_url, @@ -397,6 +413,7 @@ define([ split: _menu_items.length > 1, value: guid, hint: model.get('name'), + lock: model.get('isDisplayedInViewer') ? [_set.viewMode, _set.previewReviewMode, _set.viewFormMode, _set.selRangeEdit, _set.editFormula] : [_set.viewMode, _set.previewReviewMode, _set.viewFormMode, _set.docLockView, _set.docLockForms, _set.docLockComments, _set.selRangeEdit, _set.editFormula ], dataHint: '1', dataHintDirection: 'bottom', dataHintOffset: 'small' diff --git a/apps/documenteditor/main/app/controller/Main.js b/apps/documenteditor/main/app/controller/Main.js index 75c0570a0..71feac14f 100644 --- a/apps/documenteditor/main/app/controller/Main.js +++ b/apps/documenteditor/main/app/controller/Main.js @@ -842,7 +842,7 @@ define([ app.getController('Navigation') && app.getController('Navigation').SetDisabled(disable); } if (options.plugins) { - app.getController('Common.Controllers.Plugins').getView('Common.Views.Plugins').disableControls(disable); + app.getController('Common.Controllers.Plugins').getView('Common.Views.Plugins').SetDisabled(disable, options.reviewMode, options.fillFormMode); } if (options.protect) { app.getController('Common.Controllers.Protection').SetDisabled(disable, false); diff --git a/apps/spreadsheeteditor/main/app/controller/LeftMenu.js b/apps/spreadsheeteditor/main/app/controller/LeftMenu.js index edbc33b2a..d1e6f2c58 100644 --- a/apps/spreadsheeteditor/main/app/controller/LeftMenu.js +++ b/apps/spreadsheeteditor/main/app/controller/LeftMenu.js @@ -805,8 +805,8 @@ define([ this.leftMenu.btnSearchBar.setDisabled(isRangeSelection); this.leftMenu.btnSpellcheck.setDisabled(isRangeSelection); if (this.mode.canPlugins && this.leftMenu.panelPlugins) { + Common.Utils.lockControls(Common.enumLock.selRangeEdit, isRangeSelection, {array: this.leftMenu.panelPlugins.lockedControls}); this.leftMenu.panelPlugins.setLocked(isRangeSelection); - this.leftMenu.panelPlugins.disableControls(isRangeSelection); } }, @@ -817,8 +817,8 @@ define([ this.leftMenu.btnSearchBar.setDisabled(isEditFormula); this.leftMenu.btnSpellcheck.setDisabled(isEditFormula); if (this.mode.canPlugins && this.leftMenu.panelPlugins) { + Common.Utils.lockControls(Common.enumLock.editFormula, isEditFormula, {array: this.leftMenu.panelPlugins.lockedControls}); this.leftMenu.panelPlugins.setLocked(isEditFormula); - this.leftMenu.panelPlugins.disableControls(isEditFormula); } }, From 96cc66875e1a8820ba32aee467c3ddac2b54fa52 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova <julia.radzhabova@onlyoffice.com> Date: Mon, 3 Oct 2022 13:44:27 +0300 Subject: [PATCH 14/28] [DE] Use sdk methods --- .../main/app/controller/DocProtection.js | 75 ++++++------------- .../main/app/view/ProtectDialog.js | 16 ++-- 2 files changed, 29 insertions(+), 62 deletions(-) diff --git a/apps/documenteditor/main/app/controller/DocProtection.js b/apps/documenteditor/main/app/controller/DocProtection.js index 557d56b31..069e6a2da 100644 --- a/apps/documenteditor/main/app/controller/DocProtection.js +++ b/apps/documenteditor/main/app/controller/DocProtection.js @@ -46,13 +46,6 @@ define([ ], function () { 'use strict'; - Asc.c_oAscProtection = { - View: 1, - Forms: 2, - Review: 3, - Comments: 4 - }; - if (!Common.enumLock) Common.enumLock = {}; @@ -94,7 +87,7 @@ define([ setApi: function (api) { if (api) { this.api = api; - this.api.asc_registerCallback('asc_onChangeProtectDocument',_.bind(this.onChangeProtectDocument, this)); + this.api.asc_registerCallback('asc_onChangeDocumentProtection',_.bind(this.onChangeProtectDocument, this)); } }, @@ -128,14 +121,7 @@ define([ handler: function(result, value, props) { btn = result; if (result == 'ok') { - // var props = me.api.asc_getProtectedDocument(); - // props.asc_setType(props); - // props.asc_setLockPwd(value); - // me.api.asc_setProtectedDocument(props); - - Common.Utils.InternalSettings.set('protect-test-type', props); - me.view.btnProtectDoc.toggle(true, true); // test - me.onChangeProtectDocument(); // test + me.api.asc_setDocumentProtection(props, value); } Common.NotificationCenter.trigger('edit:complete'); } @@ -148,10 +134,8 @@ define([ } else { var me = this, btn, - // props = me.api.asc_getProtectedDocument(); - props = undefined; // test - // if (props.asc_isPassword()) { - if (props && props.asc_isPassword()) { + props = me.api.asc_getDocumentProtection(); + if (props && props[1]) { var win = new Common.Views.OpenDialog({ title: me.view.txtWBUnlockTitle, closable: true, @@ -162,8 +146,7 @@ define([ btn = result; if (result == 'ok') { if (me.api) { - // props.asc_setLockPwd(value && value.drmOptions ? value.drmOptions.asc_getPassword() : undefined); - // me.api.asc_setProtectedDocument(props); + me.api.asc_setProtectedDocument(Asc.c_oAscEDocProtect.None, value && value.drmOptions ? value.drmOptions.asc_getPassword() : undefined); } Common.NotificationCenter.trigger('edit:complete'); } @@ -175,10 +158,7 @@ define([ win.show(); } else { - me.view.btnProtectDoc.toggle(false, true); // test - me.onChangeProtectDocument(); // test - // props.asc_setLockPwd(); - // me.api.asc_setProtectedDocument(props); + me.api.asc_setProtectedDocument(Asc.c_oAscEDocProtect.None); } } }, @@ -190,46 +170,33 @@ define([ (new Promise(function (resolve) { resolve(); })).then(function () { - // me.view.btnProtectDoc.toggle(me.api.asc_isProtectedDocument(), true); + var props = me.api.asc_getDocumentProtection(), + isProtected = props && (props[0] === Asc.c_oAscEDocProtect.ReadOnly || props[0] === Asc.c_oAscEDocProtect.Comments || + props[0] === Asc.c_oAscEDocProtect.TrackedChanges || props[0] === Asc.c_oAscEDocProtect.Forms); + + me.view.btnProtectDoc.toggle(!!isProtected, true); }); }, onChangeProtectDocument: function() { - // var isProtected = this.api.asc_isProtectedDocument(); - var isProtected = this.view ? this.view.btnProtectDoc.isActive() : false; // test + var props = this.getDocProps(true), + isProtected = props && (props[0] === Asc.c_oAscEDocProtect.ReadOnly || props[0] === Asc.c_oAscEDocProtect.Comments || + props[0] === Asc.c_oAscEDocProtect.TrackedChanges || props[0] === Asc.c_oAscEDocProtect.Forms); this.view && this.view.btnProtectDoc.toggle(isProtected, true); - Common.NotificationCenter.trigger('protect:doclock', this.getDocProps(true)); + Common.NotificationCenter.trigger('protect:doclock', props); }, getDocProps: function(update) { if (!this.appConfig || !this.appConfig.isEdit && !this.appConfig.isRestrictedEdit) return; if (update || !this._state.docProtection) { - // var docProtected = !!this.api.asc_isProtectedDocument(), - // type; - // - // if (docProtected) { - // var props = this.api.asc_getProtectedDocument(); - // type = props.asc_getType(); - // } - - // test ////// - if (Common.Utils.InternalSettings.get('protect-test-type')===undefined) { - this.view && this.view.btnProtectDoc.toggle(true, true); - Common.Utils.InternalSettings.set('protect-test-type', Asc.c_oAscProtection.Forms); - } - var docProtected = this.view ? this.view.btnProtectDoc.isActive() : true, - type; - - if (docProtected) { - type = Common.Utils.InternalSettings.get('protect-test-type'); - } - ///////////// + var props = this.api.asc_getDocumentProtection(), + type = props ? props[0] : Asc.c_oAscEDocProtect.None; this._state.docProtection = { - isReadOnly: type===Asc.c_oAscProtection.View, - isCommentsOnly: type===Asc.c_oAscProtection.Comments, - isReviewOnly: type===Asc.c_oAscProtection.Review, - isFormsOnly: type===Asc.c_oAscProtection.Forms + isReadOnly: type===Asc.c_oAscEDocProtect.ReadOnly, + isCommentsOnly: type===Asc.c_oAscEDocProtect.Comments, + isReviewOnly: type===Asc.c_oAscEDocProtect.TrackedChanges, + isFormsOnly: type===Asc.c_oAscEDocProtect.Forms }; } return this._state.docProtection; diff --git a/apps/documenteditor/main/app/view/ProtectDialog.js b/apps/documenteditor/main/app/view/ProtectDialog.js index 2eeb9f018..75376afe0 100644 --- a/apps/documenteditor/main/app/view/ProtectDialog.js +++ b/apps/documenteditor/main/app/view/ProtectDialog.js @@ -121,7 +121,7 @@ define([ el: this.$window.find('#id-protect-radio-view'), labelText: this.textView, name: 'asc-radio-protect-mode', - value: Asc.c_oAscProtection.View, + value: Asc.c_oAscEDocProtect.ReadOnly, checked: true }); @@ -129,21 +129,21 @@ define([ el: this.$window.find('#id-protect-radio-forms'), labelText: this.textForms, name: 'asc-radio-protect-mode', - value: Asc.c_oAscProtection.Forms + value: Asc.c_oAscEDocProtect.Forms }); this.rbReview = new Common.UI.RadioBox({ el: this.$window.find('#id-protect-radio-review'), labelText: this.textReview, name: 'asc-radio-protect-mode', - value: Asc.c_oAscProtection.Review + value: Asc.c_oAscEDocProtect.TrackedChanges }); this.rbComments = new Common.UI.RadioBox({ el: this.$window.find('#id-protect-radio-comment'), labelText: this.textComments, name: 'asc-radio-protect-mode', - value: Asc.c_oAscProtection.Comments + value: Asc.c_oAscEDocProtect.Comments }); this.afterRender(); @@ -199,13 +199,13 @@ define([ getSettings: function() { if (this.rbView.getValue()) - return Asc.c_oAscProtection.View; + return Asc.c_oAscEDocProtect.ReadOnly; if (this.rbForms.getValue()) - return Asc.c_oAscProtection.Forms; + return Asc.c_oAscEDocProtect.Forms; if (this.rbReview.getValue()) - return Asc.c_oAscProtection.Review; + return Asc.c_oAscEDocProtect.TrackedChanges; if (this.rbComments.getValue()) - return Asc.c_oAscProtection.Comments; + return Asc.c_oAscEDocProtect.Comments; }, txtPassword : "Password", From 064fc09574476e9e5538bf570dc31e653f85f5b7 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova <julia.radzhabova@onlyoffice.com> Date: Mon, 3 Oct 2022 23:36:58 +0300 Subject: [PATCH 15/28] [DE] Fix protection --- apps/documenteditor/main/app/controller/DocProtection.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/documenteditor/main/app/controller/DocProtection.js b/apps/documenteditor/main/app/controller/DocProtection.js index 069e6a2da..6c8fe6c2b 100644 --- a/apps/documenteditor/main/app/controller/DocProtection.js +++ b/apps/documenteditor/main/app/controller/DocProtection.js @@ -146,7 +146,7 @@ define([ btn = result; if (result == 'ok') { if (me.api) { - me.api.asc_setProtectedDocument(Asc.c_oAscEDocProtect.None, value && value.drmOptions ? value.drmOptions.asc_getPassword() : undefined); + me.api.asc_setDocumentProtection(Asc.c_oAscEDocProtect.None, value && value.drmOptions ? value.drmOptions.asc_getPassword() : undefined); } Common.NotificationCenter.trigger('edit:complete'); } @@ -158,7 +158,7 @@ define([ win.show(); } else { - me.api.asc_setProtectedDocument(Asc.c_oAscEDocProtect.None); + me.api.asc_setDocumentProtection(Asc.c_oAscEDocProtect.None); } } }, From e07e1305a43c23bd83457fed1f82d0370708b865 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova <julia.radzhabova@onlyoffice.com> Date: Tue, 4 Oct 2022 14:17:08 +0300 Subject: [PATCH 16/28] [DE] Apply edit restrictions for protected document --- .../main/lib/controller/ReviewChanges.js | 6 ++-- .../main/app/controller/DocProtection.js | 35 ++++++++++++++++++- .../main/app/controller/FormsTab.js | 7 ++++ 3 files changed, 45 insertions(+), 3 deletions(-) diff --git a/apps/common/main/lib/controller/ReviewChanges.js b/apps/common/main/lib/controller/ReviewChanges.js index 3691dba1d..102289694 100644 --- a/apps/common/main/lib/controller/ReviewChanges.js +++ b/apps/common/main/lib/controller/ReviewChanges.js @@ -651,8 +651,10 @@ define([ this.turnDisplayMode(item.value); if (!this.appConfig.isEdit && !this.appConfig.isRestrictedEdit) Common.localStorage.setItem(this.view.appPrefix + "review-mode", item.value); // for viewer - else if (item.value=='markup' || item.value=='simple') + else if (item.value=='markup' || item.value=='simple') { Common.localStorage.setItem(this.view.appPrefix + "review-mode-editor", item.value); // for editor save only markup modes + Common.Utils.InternalSettings.set(this.view.appPrefix + "review-mode-editor", item.value); + } Common.NotificationCenter.trigger('edit:complete', this.view); }, @@ -871,7 +873,7 @@ define([ !val && (val = me.appConfig.customization ? me.appConfig.customization.reviewDisplay : undefined); val = /^(original|final|markup|simple)$/i.test(val) ? val.toLocaleLowerCase() : 'markup'; } - + Common.Utils.InternalSettings.set(me.view.appPrefix + "review-mode-editor", val); me.turnDisplayMode(val); // load display mode for all modes (viewer or editor) me.view.turnDisplayMode(val); diff --git a/apps/documenteditor/main/app/controller/DocProtection.js b/apps/documenteditor/main/app/controller/DocProtection.js index 6c8fe6c2b..02860a1ce 100644 --- a/apps/documenteditor/main/app/controller/DocProtection.js +++ b/apps/documenteditor/main/app/controller/DocProtection.js @@ -173,8 +173,8 @@ define([ var props = me.api.asc_getDocumentProtection(), isProtected = props && (props[0] === Asc.c_oAscEDocProtect.ReadOnly || props[0] === Asc.c_oAscEDocProtect.Comments || props[0] === Asc.c_oAscEDocProtect.TrackedChanges || props[0] === Asc.c_oAscEDocProtect.Forms); - me.view.btnProtectDoc.toggle(!!isProtected, true); + props && me.applyRestrictions(props[0]); }); }, @@ -183,6 +183,20 @@ define([ isProtected = props && (props[0] === Asc.c_oAscEDocProtect.ReadOnly || props[0] === Asc.c_oAscEDocProtect.Comments || props[0] === Asc.c_oAscEDocProtect.TrackedChanges || props[0] === Asc.c_oAscEDocProtect.Forms); this.view && this.view.btnProtectDoc.toggle(isProtected, true); + + // off preview forms + var forms = this.getApplication().getController('FormsTab'); + forms && forms.changeViewFormMode(false); + + // off preview review changes + var review = this.getApplication().getController('Common.Controllers.ReviewChanges'); + if (review && review.isPreviewChangesMode()) { + var value = Common.Utils.InternalSettings.get("de-review-mode-editor") || 'markup'; + review.turnDisplayMode(value); + review.view && review.view.turnDisplayMode(value); + } + + this.applyRestrictions(props[0]); Common.NotificationCenter.trigger('protect:doclock', props); }, @@ -200,6 +214,25 @@ define([ }; } return this._state.docProtection; + }, + + applyRestrictions: function(type) { + if (type === Asc.c_oAscEDocProtect.ReadOnly) { + this.api.asc_setViewMode(true); + } else if (type === Asc.c_oAscEDocProtect.Comments) { + this.appConfig.canComments && this.api.asc_setRestriction(Asc.c_oAscRestrictionType.OnlyComments); + this.api.asc_setViewMode(!this.appConfig.canComments || !this.appConfig.isEdit && !this.appConfig.isRestrictedEdit); + } else if (type === Asc.c_oAscEDocProtect.Forms) { + this.appConfig.canFillForms && this.api.asc_setRestriction(Asc.c_oAscRestrictionType.OnlyForms); + this.api.asc_setViewMode(!this.appConfig.canFillForms || !this.appConfig.isEdit && !this.appConfig.isRestrictedEdit); + } else { // none or tracked changes + this.api.asc_setViewMode(!this.appConfig.isEdit && !this.appConfig.isRestrictedEdit); + if (this.appConfig.isRestrictedEdit) { + this.appConfig.canComments && this.api.asc_setRestriction(Asc.c_oAscRestrictionType.OnlyComments); + this.appConfig.canFillForms && this.api.asc_setRestriction(Asc.c_oAscRestrictionType.OnlyForms); + } else + this.api.asc_setRestriction(Asc.c_oAscRestrictionType.None); + } } }, DE.Controllers.DocProtection || {})); diff --git a/apps/documenteditor/main/app/controller/FormsTab.js b/apps/documenteditor/main/app/controller/FormsTab.js index 35f52e116..0f73609fc 100644 --- a/apps/documenteditor/main/app/controller/FormsTab.js +++ b/apps/documenteditor/main/app/controller/FormsTab.js @@ -217,6 +217,13 @@ define([ Common.NotificationCenter.trigger('edit:complete', this.toolbar); }, + changeViewFormMode: function(state) { + if (this.view && (state !== this.view.btnViewForm.isActive())) { + this.view.btnViewForm.toggle(state, true); + this.onModeClick(state); + } + }, + onClearClick: function() { if (this.api) { this.api.asc_ClearAllSpecialForms(); From 0f1a07cb94817e3c4aabd537f63f390d97b454f6 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova <julia.radzhabova@onlyoffice.com> Date: Tue, 4 Oct 2022 14:36:16 +0300 Subject: [PATCH 17/28] [DE] Fix --- apps/documenteditor/main/app/controller/DocProtection.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/documenteditor/main/app/controller/DocProtection.js b/apps/documenteditor/main/app/controller/DocProtection.js index 02860a1ce..76662f2ed 100644 --- a/apps/documenteditor/main/app/controller/DocProtection.js +++ b/apps/documenteditor/main/app/controller/DocProtection.js @@ -180,8 +180,7 @@ define([ onChangeProtectDocument: function() { var props = this.getDocProps(true), - isProtected = props && (props[0] === Asc.c_oAscEDocProtect.ReadOnly || props[0] === Asc.c_oAscEDocProtect.Comments || - props[0] === Asc.c_oAscEDocProtect.TrackedChanges || props[0] === Asc.c_oAscEDocProtect.Forms); + isProtected = props && (props.isReadOnly || props.isCommentsOnly || props.isFormsOnly || props.isReviewOnly); this.view && this.view.btnProtectDoc.toggle(isProtected, true); // off preview forms @@ -196,7 +195,7 @@ define([ review.view && review.view.turnDisplayMode(value); } - this.applyRestrictions(props[0]); + props && this.applyRestrictions(props.type); Common.NotificationCenter.trigger('protect:doclock', props); }, @@ -207,6 +206,7 @@ define([ var props = this.api.asc_getDocumentProtection(), type = props ? props[0] : Asc.c_oAscEDocProtect.None; this._state.docProtection = { + type: type, isReadOnly: type===Asc.c_oAscEDocProtect.ReadOnly, isCommentsOnly: type===Asc.c_oAscEDocProtect.Comments, isReviewOnly: type===Asc.c_oAscEDocProtect.TrackedChanges, From 66259ebf5180f80ed93d1313ca84ed7a2b25a24f Mon Sep 17 00:00:00 2001 From: Julia Radzhabova <julia.radzhabova@onlyoffice.com> Date: Tue, 4 Oct 2022 14:52:47 +0300 Subject: [PATCH 18/28] [DE] Fix restrictions --- apps/documenteditor/main/app/controller/DocProtection.js | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/apps/documenteditor/main/app/controller/DocProtection.js b/apps/documenteditor/main/app/controller/DocProtection.js index 76662f2ed..959b9985f 100644 --- a/apps/documenteditor/main/app/controller/DocProtection.js +++ b/apps/documenteditor/main/app/controller/DocProtection.js @@ -218,15 +218,12 @@ define([ applyRestrictions: function(type) { if (type === Asc.c_oAscEDocProtect.ReadOnly) { - this.api.asc_setViewMode(true); + this.api.asc_setRestriction(Asc.c_oAscRestrictionType.View); } else if (type === Asc.c_oAscEDocProtect.Comments) { - this.appConfig.canComments && this.api.asc_setRestriction(Asc.c_oAscRestrictionType.OnlyComments); - this.api.asc_setViewMode(!this.appConfig.canComments || !this.appConfig.isEdit && !this.appConfig.isRestrictedEdit); + this.api.asc_setRestriction(this.appConfig.canComments ? Asc.c_oAscRestrictionType.OnlyComments : Asc.c_oAscRestrictionType.View); } else if (type === Asc.c_oAscEDocProtect.Forms) { - this.appConfig.canFillForms && this.api.asc_setRestriction(Asc.c_oAscRestrictionType.OnlyForms); - this.api.asc_setViewMode(!this.appConfig.canFillForms || !this.appConfig.isEdit && !this.appConfig.isRestrictedEdit); + this.api.asc_setRestriction(this.appConfig.canFillForms ? Asc.c_oAscRestrictionType.OnlyForms : Asc.c_oAscRestrictionType.View); } else { // none or tracked changes - this.api.asc_setViewMode(!this.appConfig.isEdit && !this.appConfig.isRestrictedEdit); if (this.appConfig.isRestrictedEdit) { this.appConfig.canComments && this.api.asc_setRestriction(Asc.c_oAscRestrictionType.OnlyComments); this.appConfig.canFillForms && this.api.asc_setRestriction(Asc.c_oAscRestrictionType.OnlyForms); From b73380ba279280b25c9c61e8c2d0bc85912171a2 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova <julia.radzhabova@onlyoffice.com> Date: Thu, 6 Oct 2022 15:03:38 +0300 Subject: [PATCH 19/28] [DE] Handle PasswordIsNotCorrect error --- apps/documenteditor/main/app/controller/Main.js | 7 ++++++- apps/documenteditor/main/locale/en.json | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/apps/documenteditor/main/app/controller/Main.js b/apps/documenteditor/main/app/controller/Main.js index 71feac14f..96e029f23 100644 --- a/apps/documenteditor/main/app/controller/Main.js +++ b/apps/documenteditor/main/app/controller/Main.js @@ -1977,6 +1977,10 @@ define([ config.msg = this.errorTextFormWrongFormat; break; + case Asc.c_oAscError.ID.PasswordIsNotCorrect: + config.msg = this.errorPasswordIsNotCorrect; + break; + default: config.msg = (typeof id == 'string') ? id : this.errorDefaultMessage.replace('%1', id); break; @@ -3259,7 +3263,8 @@ define([ errorNoTOC: 'There\'s no table of contents to update. You can insert one from the References tab.', textRequestMacros: 'A macro makes a request to URL. Do you want to allow the request to the %1?', textRememberMacros: 'Remember my choice for all macros', - errorTextFormWrongFormat: 'The value entered does not match the format of the field.' + errorTextFormWrongFormat: 'The value entered does not match the format of the field.', + errorPasswordIsNotCorrect: 'The password you supplied is not correct.<br>Verify that the CAPS LOCK key is off and be sure to use the correct capitalization.' } })(), DE.Controllers.Main || {})) }); \ No newline at end of file diff --git a/apps/documenteditor/main/locale/en.json b/apps/documenteditor/main/locale/en.json index 3ddc137f6..2a9a64c41 100644 --- a/apps/documenteditor/main/locale/en.json +++ b/apps/documenteditor/main/locale/en.json @@ -939,6 +939,7 @@ "DE.Controllers.Main.warnNoLicense": "You've reached the limit for simultaneous connections to %1 editors. This document will be opened for viewing only.<br>Contact %1 sales team for personal upgrade terms.", "DE.Controllers.Main.warnNoLicenseUsers": "You've reached the user limit for %1 editors. Contact %1 sales team for personal upgrade terms.", "DE.Controllers.Main.warnProcessRightsChange": "You have been denied the right to edit the file.", + "DE.Controllers.Main.errorPasswordIsNotCorrect": "The password you supplied is not correct.<br>Verify that the CAPS LOCK key is off and be sure to use the correct capitalization.", "DE.Controllers.Navigation.txtBeginning": "Beginning of document", "DE.Controllers.Navigation.txtGotoBeginning": "Go to the beginning of the document", "DE.Controllers.Search.notcriticalErrorTitle": "Warning", From 52283a3d2e2e1dec91c739bd5fb65cbe1fc296bc Mon Sep 17 00:00:00 2001 From: Julia Radzhabova <julia.radzhabova@onlyoffice.com> Date: Thu, 6 Oct 2022 15:55:53 +0300 Subject: [PATCH 20/28] [DE] Fix saving protection to document --- apps/documenteditor/main/app/view/Toolbar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/documenteditor/main/app/view/Toolbar.js b/apps/documenteditor/main/app/view/Toolbar.js index 91e638f15..1a7dd8584 100644 --- a/apps/documenteditor/main/app/view/Toolbar.js +++ b/apps/documenteditor/main/app/view/Toolbar.js @@ -201,7 +201,7 @@ define([ id: 'id-toolbar-btn-save', cls: 'btn-toolbar', iconCls: 'toolbar__icon no-mask ' + this.btnSaveCls, - lock: [_set.lostConnect, _set.disableOnStart, _set.docLockView], + lock: [_set.lostConnect, _set.disableOnStart], signals: ['disabled'], dataHint: '1', dataHintDirection: 'top', From ed621f092127bd7a127940f6bfe918b047947455 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova <julia.radzhabova@onlyoffice.com> Date: Thu, 6 Oct 2022 20:14:13 +0300 Subject: [PATCH 21/28] [DE] Handle protection lock --- apps/documenteditor/main/app/controller/DocProtection.js | 8 +++++++- apps/documenteditor/main/app/view/DocProtection.js | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/apps/documenteditor/main/app/controller/DocProtection.js b/apps/documenteditor/main/app/controller/DocProtection.js index 959b9985f..d4180af29 100644 --- a/apps/documenteditor/main/app/controller/DocProtection.js +++ b/apps/documenteditor/main/app/controller/DocProtection.js @@ -53,7 +53,8 @@ define([ docLockView: 'lock-mode-view', docLockForms: 'lock-mode-forms', docLockReview: 'lock-mode-review', - docLockComments: 'lock-mode-comments' + docLockComments: 'lock-mode-comments', + protectLock: 'protect-lock' }; for (var key in enumLock) { if (enumLock.hasOwnProperty(key)) { @@ -88,6 +89,7 @@ define([ if (api) { this.api = api; this.api.asc_registerCallback('asc_onChangeDocumentProtection',_.bind(this.onChangeProtectDocument, this)); + this.api.asc_registerCallback('asc_onLockDocumentProtection',_.bind(this.onLockDocumentProtection, this)); } }, @@ -230,6 +232,10 @@ define([ } else this.api.asc_setRestriction(Asc.c_oAscRestrictionType.None); } + }, + + onLockDocumentProtection: function(state) { + this.view && Common.Utils.lockControls(Common.enumLock.protectLock, state, {array: [this.view.btnProtectDoc]}); } }, DE.Controllers.DocProtection || {})); diff --git a/apps/documenteditor/main/app/view/DocProtection.js b/apps/documenteditor/main/app/view/DocProtection.js index eb4945b63..1963ab351 100644 --- a/apps/documenteditor/main/app/view/DocProtection.js +++ b/apps/documenteditor/main/app/view/DocProtection.js @@ -79,7 +79,7 @@ define([ iconCls: 'toolbar__icon protect-workbook', enableToggle: true, caption: this.txtProtectDoc, - lock : [_set.lostConnect, _set.coAuth, _set.previewReviewMode, _set.viewFormMode], + lock : [_set.lostConnect, _set.coAuth, _set.previewReviewMode, _set.viewFormMode, _set.protectLock], dataHint : '1', dataHintDirection: 'bottom', dataHintOffset: 'small' From 528f48d09808c1f3605388ee992b4fd0c487f58d Mon Sep 17 00:00:00 2001 From: Julia Radzhabova <julia.radzhabova@onlyoffice.com> Date: Fri, 7 Oct 2022 12:08:51 +0300 Subject: [PATCH 22/28] [DE] Change protect methods --- .../main/app/controller/DocProtection.js | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/apps/documenteditor/main/app/controller/DocProtection.js b/apps/documenteditor/main/app/controller/DocProtection.js index d4180af29..8ed77b293 100644 --- a/apps/documenteditor/main/app/controller/DocProtection.js +++ b/apps/documenteditor/main/app/controller/DocProtection.js @@ -123,7 +123,10 @@ define([ handler: function(result, value, props) { btn = result; if (result == 'ok') { - me.api.asc_setDocumentProtection(props, value); + var protection = new AscCommonWord.CDocProtect(); + protection.asc_setEditType(props); + protection.asc_setPassword(value); + me.api.asc_setDocumentProtection(protection); } Common.NotificationCenter.trigger('edit:complete'); } @@ -137,7 +140,7 @@ define([ var me = this, btn, props = me.api.asc_getDocumentProtection(); - if (props && props[1]) { + if (props && props.asc_getIsPassword()) { var win = new Common.Views.OpenDialog({ title: me.view.txtWBUnlockTitle, closable: true, @@ -148,7 +151,10 @@ define([ btn = result; if (result == 'ok') { if (me.api) { - me.api.asc_setDocumentProtection(Asc.c_oAscEDocProtect.None, value && value.drmOptions ? value.drmOptions.asc_getPassword() : undefined); + var protection = new AscCommonWord.CDocProtect(); + protection.asc_setEditType(Asc.c_oAscEDocProtect.None); + value && value.drmOptions && protection.asc_setPassword(value.drmOptions.asc_getPassword()); + me.api.asc_setDocumentProtection(protection); } Common.NotificationCenter.trigger('edit:complete'); } @@ -160,7 +166,9 @@ define([ win.show(); } else { - me.api.asc_setDocumentProtection(Asc.c_oAscEDocProtect.None); + var protection = new AscCommonWord.CDocProtect(); + protection.asc_setEditType(Asc.c_oAscEDocProtect.None); + me.api.asc_setDocumentProtection(protection); } } }, @@ -173,8 +181,9 @@ define([ resolve(); })).then(function () { var props = me.api.asc_getDocumentProtection(), - isProtected = props && (props[0] === Asc.c_oAscEDocProtect.ReadOnly || props[0] === Asc.c_oAscEDocProtect.Comments || - props[0] === Asc.c_oAscEDocProtect.TrackedChanges || props[0] === Asc.c_oAscEDocProtect.Forms); + type = props ? props.asc_getEditType() : Asc.c_oAscEDocProtect.None, + isProtected = (type === Asc.c_oAscEDocProtect.ReadOnly || type === Asc.c_oAscEDocProtect.Comments || + type === Asc.c_oAscEDocProtect.TrackedChanges || type === Asc.c_oAscEDocProtect.Forms); me.view.btnProtectDoc.toggle(!!isProtected, true); props && me.applyRestrictions(props[0]); }); @@ -206,7 +215,7 @@ define([ if (update || !this._state.docProtection) { var props = this.api.asc_getDocumentProtection(), - type = props ? props[0] : Asc.c_oAscEDocProtect.None; + type = props ? props.asc_getEditType() : Asc.c_oAscEDocProtect.None; this._state.docProtection = { type: type, isReadOnly: type===Asc.c_oAscEDocProtect.ReadOnly, From 022c65cf3d3793f9f93d45ebed7fde16b9ee244c Mon Sep 17 00:00:00 2001 From: Julia Radzhabova <julia.radzhabova@onlyoffice.com> Date: Fri, 7 Oct 2022 16:21:31 +0300 Subject: [PATCH 23/28] [DE] Fix protection --- .../main/app/controller/DocProtection.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/apps/documenteditor/main/app/controller/DocProtection.js b/apps/documenteditor/main/app/controller/DocProtection.js index 8ed77b293..2ebff6d29 100644 --- a/apps/documenteditor/main/app/controller/DocProtection.js +++ b/apps/documenteditor/main/app/controller/DocProtection.js @@ -123,7 +123,7 @@ define([ handler: function(result, value, props) { btn = result; if (result == 'ok') { - var protection = new AscCommonWord.CDocProtect(); + var protection = me.api.asc_getDocumentProtection() || new AscCommonWord.CDocProtect(); protection.asc_setEditType(props); protection.asc_setPassword(value); me.api.asc_setDocumentProtection(protection); @@ -151,10 +151,9 @@ define([ btn = result; if (result == 'ok') { if (me.api) { - var protection = new AscCommonWord.CDocProtect(); - protection.asc_setEditType(Asc.c_oAscEDocProtect.None); - value && value.drmOptions && protection.asc_setPassword(value.drmOptions.asc_getPassword()); - me.api.asc_setDocumentProtection(protection); + props.asc_setEditType(Asc.c_oAscEDocProtect.None); + value && value.drmOptions && props.asc_setPassword(value.drmOptions.asc_getPassword()); + me.api.asc_setDocumentProtection(props); } Common.NotificationCenter.trigger('edit:complete'); } @@ -166,9 +165,10 @@ define([ win.show(); } else { - var protection = new AscCommonWord.CDocProtect(); - protection.asc_setEditType(Asc.c_oAscEDocProtect.None); - me.api.asc_setDocumentProtection(protection); + if (!props) + props = new AscCommonWord.CDocProtect(); + props.asc_setEditType(Asc.c_oAscEDocProtect.None); + me.api.asc_setDocumentProtection(props); } } }, From 0f2568e5b1e43bb9021a5299d962d040ae2b55d3 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova <julia.radzhabova@onlyoffice.com> Date: Mon, 10 Oct 2022 15:09:46 +0300 Subject: [PATCH 24/28] [DE] Update hint in protected document --- apps/common/main/lib/component/Button.js | 4 +++- .../main/app/controller/DocProtection.js | 3 ++- .../main/app/view/DocProtection.js | 23 ++++++++++++++++--- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/apps/common/main/lib/component/Button.js b/apps/common/main/lib/component/Button.js index ba3621a29..a24c772da 100644 --- a/apps/common/main/lib/component/Button.js +++ b/apps/common/main/lib/component/Button.js @@ -754,7 +754,7 @@ define([ return (this.cmpEl) ? this.cmpEl.is(":visible") : $(this.el).is(":visible"); }, - updateHint: function(hint) { + updateHint: function(hint, isHtml) { this.options.hint = hint; if (!this.rendered) return; @@ -780,10 +780,12 @@ define([ this.btnMenuEl.removeData('bs.tooltip'); this.btnEl.tooltip({ + html: !!isHtml, title : (typeof hint == 'string') ? hint : hint[0], placement : this.options.hintAnchor||'cursor' }); this.btnMenuEl && this.btnMenuEl.tooltip({ + html: !!isHtml, title : hint[1], placement : this.options.hintAnchor||'cursor' }); diff --git a/apps/documenteditor/main/app/controller/DocProtection.js b/apps/documenteditor/main/app/controller/DocProtection.js index 2ebff6d29..1910542ab 100644 --- a/apps/documenteditor/main/app/controller/DocProtection.js +++ b/apps/documenteditor/main/app/controller/DocProtection.js @@ -185,7 +185,7 @@ define([ isProtected = (type === Asc.c_oAscEDocProtect.ReadOnly || type === Asc.c_oAscEDocProtect.Comments || type === Asc.c_oAscEDocProtect.TrackedChanges || type === Asc.c_oAscEDocProtect.Forms); me.view.btnProtectDoc.toggle(!!isProtected, true); - props && me.applyRestrictions(props[0]); + props && me.applyRestrictions(type); }); }, @@ -241,6 +241,7 @@ define([ } else this.api.asc_setRestriction(Asc.c_oAscRestrictionType.None); } + this.view && this.view.updateProtectionTips(type); }, onLockDocumentProtection: function(state) { diff --git a/apps/documenteditor/main/app/view/DocProtection.js b/apps/documenteditor/main/app/view/DocProtection.js index 1963ab351..275d9c40f 100644 --- a/apps/documenteditor/main/app/view/DocProtection.js +++ b/apps/documenteditor/main/app/view/DocProtection.js @@ -72,7 +72,7 @@ define([ var _set = Common.enumLock; this.lockedControls = []; - this._state = {disabled: false}; + this._state = {disabled: false, currentProtectHint: this.hintProtectDoc }; this.btnProtectDoc = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', @@ -98,7 +98,7 @@ define([ (new Promise(function (accept, reject) { accept(); })).then(function(){ - me.btnProtectDoc.updateHint(me.hintProtectDoc); + me.btnProtectDoc.updateHint(me._state.currentProtectHint, true); setEvents.call(me); }); }, @@ -121,8 +121,25 @@ define([ this.fireEvent('show', this); }, + updateProtectionTips: function(type) { + var str = this.txtProtectDoc; + if (type === Asc.c_oAscEDocProtect.ReadOnly) { + str = this.txtDocProtectedView; + } else if (type === Asc.c_oAscEDocProtect.Comments) { + str = this.txtDocProtectedComment; + } else if (type === Asc.c_oAscEDocProtect.Forms) { + str = this.txtDocProtectedForms; + } else if (type === Asc.c_oAscEDocProtect.TrackedChanges){ // none or tracked changes + str = this.txtDocProtectedTrack; + } + this.btnProtectDoc.updateHint(str, true); + this._state.currentProtectHint = str; + }, txtProtectDoc: 'Protect Document', - txtDocUnlockTitle: 'Unprotect Document', + txtDocProtectedView: 'Document is protected.<br>You may only view this document.', + txtDocProtectedTrack: 'Document is protected.<br>You may edit this document, but all changes will be tracked.', + txtDocProtectedComment: 'Document is protected.<br>You may only insert comments to this document.', + txtDocProtectedForms: 'Document is protected.<br>You may only fill in forms in this document.', hintProtectDoc: 'Protect document', txtDocUnlockDescription: 'Enter a password to unprotect document' } From 412f616526c8d28e6cd30680df842f019f09c656 Mon Sep 17 00:00:00 2001 From: Kirill Volkov <kirill.volkov@onlyoffice.com> Date: Mon, 10 Oct 2022 16:29:59 +0300 Subject: [PATCH 25/28] Add new icons Added new icons. Changed btn-text icon. --- .../img/toolbar/1.25x/big/btn-text-vertical.png | Bin 0 -> 168 bytes .../img/toolbar/1.25x/big/btn-text.png | Bin 305 -> 169 bytes .../img/toolbar/1.25x/btn-text-vertical.png | Bin 0 -> 166 bytes .../resources/img/toolbar/1.25x/btn-text.png | Bin 0 -> 168 bytes .../img/toolbar/1.5x/big/btn-text-vertical.png | Bin 0 -> 189 bytes .../resources/img/toolbar/1.5x/big/btn-text.png | Bin 315 -> 191 bytes .../img/toolbar/1.5x/btn-text-vertical.png | Bin 0 -> 164 bytes .../resources/img/toolbar/1.5x/btn-text.png | Bin 0 -> 163 bytes .../img/toolbar/1.75x/big/btn-text-vertical.png | Bin 0 -> 187 bytes .../img/toolbar/1.75x/big/btn-text.png | Bin 339 -> 193 bytes .../img/toolbar/1.75x/btn-text-vertical.png | Bin 0 -> 168 bytes .../resources/img/toolbar/1.75x/btn-text.png | Bin 0 -> 170 bytes .../img/toolbar/1x/big/btn-text-vertical.png | Bin 0 -> 165 bytes .../resources/img/toolbar/1x/big/btn-text.png | Bin 276 -> 168 bytes .../img/toolbar/1x/btn-text-vertical.png | Bin 0 -> 149 bytes .../main/resources/img/toolbar/1x/btn-text.png | Bin 0 -> 147 bytes .../img/toolbar/1x/text-box-horizontal.png | Bin 0 -> 147 bytes .../img/toolbar/1x/text-box-vertical.png | Bin 0 -> 149 bytes .../img/toolbar/2x/big/btn-text-vertical.png | Bin 0 -> 178 bytes .../resources/img/toolbar/2x/big/btn-text.png | Bin 387 -> 178 bytes .../img/toolbar/2x/btn-text-vertical.png | Bin 0 -> 164 bytes .../main/resources/img/toolbar/2x/btn-text.png | Bin 0 -> 164 bytes .../resources/img/toolbar/1.25x/big/combine.png | Bin 0 -> 269 bytes .../img/toolbar/1.25x/big/restrict-editing.png | Bin 0 -> 347 bytes .../resources/img/toolbar/1.5x/big/combine.png | Bin 0 -> 289 bytes .../img/toolbar/1.5x/big/restrict-editing.png | Bin 0 -> 381 bytes .../resources/img/toolbar/1.75x/big/combine.png | Bin 0 -> 308 bytes .../img/toolbar/1.75x/big/restrict-editing.png | Bin 0 -> 426 bytes .../resources/img/toolbar/1x/big/combine.png | Bin 0 -> 236 bytes .../img/toolbar/1x/big/restrict-editing.png | Bin 0 -> 304 bytes .../resources/img/toolbar/2x/big/combine.png | Bin 0 -> 508 bytes .../img/toolbar/2x/big/restrict-editing.png | Bin 0 -> 571 bytes .../img/toolbar/1.25x/big/gridlines.png | Bin 0 -> 169 bytes .../resources/img/toolbar/1.25x/big/guides.png | Bin 0 -> 192 bytes .../img/toolbar/1.25x/horizontal-guide.png | Bin 0 -> 143 bytes .../img/toolbar/1.25x/vertical-guide.png | Bin 0 -> 142 bytes .../img/toolbar/1.5x/big/gridlines.png | Bin 0 -> 180 bytes .../resources/img/toolbar/1.5x/big/guides.png | Bin 0 -> 201 bytes .../img/toolbar/1.5x/horizontal-guide.png | Bin 0 -> 153 bytes .../img/toolbar/1.5x/vertical-guide.png | Bin 0 -> 152 bytes .../img/toolbar/1.75x/big/gridlines.png | Bin 0 -> 197 bytes .../resources/img/toolbar/1.75x/big/guides.png | Bin 0 -> 221 bytes .../img/toolbar/1.75x/horizontal-guide.png | Bin 0 -> 161 bytes .../img/toolbar/1.75x/vertical-guide.png | Bin 0 -> 162 bytes .../resources/img/toolbar/1x/big/gridlines.png | Bin 0 -> 149 bytes .../resources/img/toolbar/1x/big/guides.png | Bin 0 -> 179 bytes .../img/toolbar/1x/horizontal-guide.png | Bin 0 -> 139 bytes .../resources/img/toolbar/1x/vertical-guide.png | Bin 0 -> 138 bytes .../resources/img/toolbar/2x/big/gridlines.png | Bin 0 -> 278 bytes .../resources/img/toolbar/2x/big/guides.png | Bin 0 -> 303 bytes .../img/toolbar/2x/horizontal-guide.png | Bin 0 -> 230 bytes .../resources/img/toolbar/2x/vertical-guide.png | Bin 0 -> 232 bytes .../img/toolbar/1.25x/big/edit-links.png | Bin 0 -> 479 bytes .../img/toolbar/1.5x/big/edit-links.png | Bin 0 -> 538 bytes .../img/toolbar/1.75x/big/edit-links.png | Bin 0 -> 641 bytes .../resources/img/toolbar/1x/big/edit-links.png | Bin 0 -> 392 bytes .../resources/img/toolbar/2x/big/edit-links.png | Bin 0 -> 845 bytes 57 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/common/main/resources/img/toolbar/1.25x/big/btn-text-vertical.png create mode 100644 apps/common/main/resources/img/toolbar/1.25x/btn-text-vertical.png create mode 100644 apps/common/main/resources/img/toolbar/1.25x/btn-text.png create mode 100644 apps/common/main/resources/img/toolbar/1.5x/big/btn-text-vertical.png create mode 100644 apps/common/main/resources/img/toolbar/1.5x/btn-text-vertical.png create mode 100644 apps/common/main/resources/img/toolbar/1.5x/btn-text.png create mode 100644 apps/common/main/resources/img/toolbar/1.75x/big/btn-text-vertical.png create mode 100644 apps/common/main/resources/img/toolbar/1.75x/btn-text-vertical.png create mode 100644 apps/common/main/resources/img/toolbar/1.75x/btn-text.png create mode 100644 apps/common/main/resources/img/toolbar/1x/big/btn-text-vertical.png create mode 100644 apps/common/main/resources/img/toolbar/1x/btn-text-vertical.png create mode 100644 apps/common/main/resources/img/toolbar/1x/btn-text.png create mode 100644 apps/common/main/resources/img/toolbar/1x/text-box-horizontal.png create mode 100644 apps/common/main/resources/img/toolbar/1x/text-box-vertical.png create mode 100644 apps/common/main/resources/img/toolbar/2x/big/btn-text-vertical.png create mode 100644 apps/common/main/resources/img/toolbar/2x/btn-text-vertical.png create mode 100644 apps/common/main/resources/img/toolbar/2x/btn-text.png create mode 100644 apps/documenteditor/main/resources/img/toolbar/1.25x/big/combine.png create mode 100644 apps/documenteditor/main/resources/img/toolbar/1.25x/big/restrict-editing.png create mode 100644 apps/documenteditor/main/resources/img/toolbar/1.5x/big/combine.png create mode 100644 apps/documenteditor/main/resources/img/toolbar/1.5x/big/restrict-editing.png create mode 100644 apps/documenteditor/main/resources/img/toolbar/1.75x/big/combine.png create mode 100644 apps/documenteditor/main/resources/img/toolbar/1.75x/big/restrict-editing.png create mode 100644 apps/documenteditor/main/resources/img/toolbar/1x/big/combine.png create mode 100644 apps/documenteditor/main/resources/img/toolbar/1x/big/restrict-editing.png create mode 100644 apps/documenteditor/main/resources/img/toolbar/2x/big/combine.png create mode 100644 apps/documenteditor/main/resources/img/toolbar/2x/big/restrict-editing.png create mode 100644 apps/presentationeditor/main/resources/img/toolbar/1.25x/big/gridlines.png create mode 100644 apps/presentationeditor/main/resources/img/toolbar/1.25x/big/guides.png create mode 100644 apps/presentationeditor/main/resources/img/toolbar/1.25x/horizontal-guide.png create mode 100644 apps/presentationeditor/main/resources/img/toolbar/1.25x/vertical-guide.png create mode 100644 apps/presentationeditor/main/resources/img/toolbar/1.5x/big/gridlines.png create mode 100644 apps/presentationeditor/main/resources/img/toolbar/1.5x/big/guides.png create mode 100644 apps/presentationeditor/main/resources/img/toolbar/1.5x/horizontal-guide.png create mode 100644 apps/presentationeditor/main/resources/img/toolbar/1.5x/vertical-guide.png create mode 100644 apps/presentationeditor/main/resources/img/toolbar/1.75x/big/gridlines.png create mode 100644 apps/presentationeditor/main/resources/img/toolbar/1.75x/big/guides.png create mode 100644 apps/presentationeditor/main/resources/img/toolbar/1.75x/horizontal-guide.png create mode 100644 apps/presentationeditor/main/resources/img/toolbar/1.75x/vertical-guide.png create mode 100644 apps/presentationeditor/main/resources/img/toolbar/1x/big/gridlines.png create mode 100644 apps/presentationeditor/main/resources/img/toolbar/1x/big/guides.png create mode 100644 apps/presentationeditor/main/resources/img/toolbar/1x/horizontal-guide.png create mode 100644 apps/presentationeditor/main/resources/img/toolbar/1x/vertical-guide.png create mode 100644 apps/presentationeditor/main/resources/img/toolbar/2x/big/gridlines.png create mode 100644 apps/presentationeditor/main/resources/img/toolbar/2x/big/guides.png create mode 100644 apps/presentationeditor/main/resources/img/toolbar/2x/horizontal-guide.png create mode 100644 apps/presentationeditor/main/resources/img/toolbar/2x/vertical-guide.png create mode 100644 apps/spreadsheeteditor/main/resources/img/toolbar/1.25x/big/edit-links.png create mode 100644 apps/spreadsheeteditor/main/resources/img/toolbar/1.5x/big/edit-links.png create mode 100644 apps/spreadsheeteditor/main/resources/img/toolbar/1.75x/big/edit-links.png create mode 100644 apps/spreadsheeteditor/main/resources/img/toolbar/1x/big/edit-links.png create mode 100644 apps/spreadsheeteditor/main/resources/img/toolbar/2x/big/edit-links.png diff --git a/apps/common/main/resources/img/toolbar/1.25x/big/btn-text-vertical.png b/apps/common/main/resources/img/toolbar/1.25x/big/btn-text-vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..1850634ab80f5ea62d42f235bb0df876eb518756 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe#0(@uDyRGdQk(%kA+C%-1_Q(Y|No~fyFC%e zVk`;r3ubV5b|VeQ@%40Z45_%4oUp(?frmk84Id9r46j3*ScHcO5U^+**~rBq_Aub+ z0|p`XBsGEdW-%uvgN3XroSkiL4lQA84=KBB`)Kmj?B_*CZw7{w3380@9CHmo7J9n+ KxvX<aXaWEtS1^A7 literal 0 HcmV?d00001 diff --git a/apps/common/main/resources/img/toolbar/1.25x/big/btn-text.png b/apps/common/main/resources/img/toolbar/1.25x/big/btn-text.png index 26147828bd84830f93597c460cefad2ee1663f55..b06d5aa0ee2fc5b52f958c78e9e03d92a95f8ff3 100644 GIT binary patch delta 153 zcmdnUw32axL_HHT0|P@y<&=LwiZj3`#FY`qU|{(F|NoR_w<iKwj3q&S!3+-1ZlnP@ zex5FlAr-fh6C^|$t}=QUuo)O+G*-m$Iy9+@u&_u-ObKH=*v0l{mBhhYjgMp$W_32Q zC|<k3&@tiKDz-aLJW2+=+!Ab41uE~USuc3W%TQh{BzIX%YDOo>N>5immvv4FO#pr$ BG5-Jn delta 290 zcmZ3<xRGgsL_G%^0|SGmcug*l;w<opEM{Qf76xHPhFNnYfP#$0LGDfr>(0r%1aer? z9eo`c7&i8E|4C#8@{f7CIEGX(zP)jftJ#64<zdLLf9v;5ZIWv`oR_p|`TyM_InpUI zrIE%A2g>HRCntaUE4}dM<C6bBQd-kC^MBm`%Ax+!=GDxRb8WMImIowTxgLIRvGU59 zzJ@eo{=>>mf*fu?qVBx<d+%r3@95fZDfe<r+)kJrTW){kW7$5=@Mf)Rb|!8L5{(Hg zAf<4|i8VEQ-)hG#E!y6HjDtm4pyxo^j<xo)+kUSRnN`brd8g#MwAIloKYO*Nm2Z<y f3s+`5@SD+mznen$kN>NIeq!)+^>bP0l+XkK0hM<W diff --git a/apps/common/main/resources/img/toolbar/1.25x/btn-text-vertical.png b/apps/common/main/resources/img/toolbar/1.25x/btn-text-vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..4d5c53bf6488ef5e5c9f103659725355c6aab5dd GIT binary patch literal 166 zcmeAS@N?(olHy`uVBq!ia0vp^MnEjd!3HFYLuy@sRIaCsV@SoVx6?ei7!-L}KL7Xs zC9=28pxrNqZ3~x;*)oHyGYkse<=NiLte@~|&Fp_PB~@}_#GIz{cBM+wrf8&YVx4NN z-+3e~N>3=7bK-56De2{2E|q115Bn58&F8THtvONq_>Z!Lp8TGV48J8yELpE-)@`-} PTFl_->gTe~DWM4fX4*NZ literal 0 HcmV?d00001 diff --git a/apps/common/main/resources/img/toolbar/1.25x/btn-text.png b/apps/common/main/resources/img/toolbar/1.25x/btn-text.png new file mode 100644 index 0000000000000000000000000000000000000000..0ab41f1ff32359b15210b9b5552420f79045243b GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^MnEjd!3HFYLuy@sRKBN+V@SoVx6>T?4k&Q2{QR$8 z%Vj&wBsX>Cmq$L21XD$r(-=0W%7uBaVSmEh60zUYD{`9PPPL^1-)}r}U8A9RG)zTn z<G-TI{!hPnss#IW`22H>&OG~%L8(Kb>BOZri@J;sW$l9(PF%QQV#0LbBxCC~*6XJ& So6iHSX7F_Nb6Mw<&;$UulRiTL literal 0 HcmV?d00001 diff --git a/apps/common/main/resources/img/toolbar/1.5x/big/btn-text-vertical.png b/apps/common/main/resources/img/toolbar/1.5x/big/btn-text-vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..ce930c0052c4b1ffba0894e25c8b83ef0f87bc62 GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^AwaCf#0(?@bf-K9Qk(%kA+C%-1_Q(Y|No~fyFC%e zVk`;r3ubV5b|VeQN%C}Y45_%4oFE~hAmU=s#=yCbRbg2eb4LkF_a+8TK30KXMkOgO zri8$?p$;1sFmC76Nw_TQz%t|fK?8$DiwXjlv4#kzvam6Sh)4)L>9}+%wOQdx;S!BC hne5e8hx3?Z85v$aGxttQUwH`R3Qt!*mvv4FO#tSCHu(Sm literal 0 HcmV?d00001 diff --git a/apps/common/main/resources/img/toolbar/1.5x/big/btn-text.png b/apps/common/main/resources/img/toolbar/1.5x/big/btn-text.png index 54077238a150746234e34e658882ca3f79848edb..3da7ffbc2ba4757f721beb489a09beb838022ea1 100644 GIT binary patch delta 175 zcmdnZw4ZT;L_HHT0|P^V?v%$siZj3`#FY`qU|{(F|NoR_w<iKwj3q&S!3+-1ZlnP@ zDV{ElAr-fh6C|=4Oc{JStqcs-Fm0X@#=t4YXb{byaf?OpDMM#hTayEWM~SFJ!2^@V zgN$d=7?b!qe0i62x3#r7xb6&Fo2B4BMUf>>FPvH9uz~PWotnZUHrFhU&66uQ@<)M{ ZVG*bK+h;!?uLD}h;OXk;vd$@?2>|k*JC^_e delta 300 zcmdnbxSMH$L_G%^0|SGub4>w|;w<opEM{Qf76xHPhFNnYfP#$0LGDfr>(0r%1aer? z9eo`c7&i8E|4C#8@-KM0IEGX(zP;th*Q_Ao8hESZfAliHSrN@je_mfdXuDX=OenrW z<6@AC=cJNDuOCFn{&>IUgGA}a@+Q~Dz~n1)@7FK+Ao05UZk$DGN>909){;+>ho+u) z(9xEh+CN`s;V0WLxwHiv{AZd6uh*8_%Xe0Xd7|khNiO4nh$WxaMqN4gv1IM9b<-KE z(x39QN@|>ONMr-b&1gKtBa*hjfEgk*ac|9O<!|q8!}m!3Eo=iyJ&QiiS@%NVNjsnU sE7iMCjbDk#DKGw3uA@6i<)!Donx9b|ldsz)0)5Be>FVdQ&MBb@0KqPJW&i*H diff --git a/apps/common/main/resources/img/toolbar/1.5x/btn-text-vertical.png b/apps/common/main/resources/img/toolbar/1.5x/btn-text-vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..e220bbeb976dc5f5d3567e88c988f81743f4dece GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L#0(PoHuVmW;tcQ!ab*ND7#RNl|378f?TJ7Z zV@Z%-FoVOh8)-m}r>Bc!NX4z>gaslUOopqOnJ+Ub>}Bd;bq0clnzf;;!%7n-rZXnF zDdaIEv3~loCg2~_q91D(E=>5hD)h$BC9~WY{`Tb6KgGacY^Jnv>0O1XAj>>m{an^L HB{Ts5!zDH+ literal 0 HcmV?d00001 diff --git a/apps/common/main/resources/img/toolbar/1.5x/btn-text.png b/apps/common/main/resources/img/toolbar/1.5x/btn-text.png new file mode 100644 index 0000000000000000000000000000000000000000..43cb7a918b903223656127e4b71ddb449964bbf0 GIT binary patch literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L#0(PoHuVmW;tcQ!ab*ND7#RNl|378f?TJ7Z zV@Z%-FoVOh8)-m}ho_5UNX4z>gau|Cj7i5B*w(QrtYtm2ZlQz1fdd=4IK&bsiZf&u zB_uEf%G~(TvrsW%-?de2YiiiSR{Ub+VLp8PeO=Ju=3NX7O7~>5FYw5H2ifK6>gTe~ HDWM4fRbey$ literal 0 HcmV?d00001 diff --git a/apps/common/main/resources/img/toolbar/1.75x/big/btn-text-vertical.png b/apps/common/main/resources/img/toolbar/1.75x/big/btn-text-vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..b22e55c5754b23b59c9f3b46b254239248d01e39 GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^NkDAK#0(^3E>1ZDq&Ne7LR=Yv3<ie(|Nl=}c6%a_ z#aI&L7tG-B>_!@pli=y%7*cU7IYHuz!xcuyLS2T<3#T+NH$4gfF&s1`SQ=8dgf$-E zVr5!p=(Hx8aWZehq|U^Q6C11)Qf7$pC`kq;s2oVy(J;|r=9z?VF9Uq6D~iO<{b{y7 e|IjS=0uzIfjqQO;$4h^L+~Dcz=d#Wzp$Pys&_9v@ literal 0 HcmV?d00001 diff --git a/apps/common/main/resources/img/toolbar/1.75x/big/btn-text.png b/apps/common/main/resources/img/toolbar/1.75x/big/btn-text.png index 2ef05951645b7e91b5818cdda7b0710a35742418..244eff7bc0b4e11cfef17afcaaaf1c95cbdd0d38 100644 GIT binary patch delta 177 zcmcc2bdYg^L_HHT0|P_M#VJRC6lZ`>h$|zI!NBnU|Nkk=ZchZV7)yfuf*Bm1-ADs+ z(mY)pLn>}1CrDT}m@+sSw;321tZm?0$0Vr36d)<KfQLO~8K;i26c?j{<hoFS3oZ9e z*w{7rU9=r;a+yqI+{vfLTolXfYQ)pS=<#ihL)k&C6+D$jUp&|=E}5RY(rtb8vFG)} aTnr5NJ)KzA%FD)poZ{)~=d#Wzp$Pzi?l)rq literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^NkDAK!3HE1_t%62Db50q$YKTtZeb8+WSBKa0w~B> z9OUlAu<o49OCX0O-O<;Pfnj4m_n$;oApeD@i(^Oy<J()exta|`TrO_;^1t5l>&3V| z4`*y{-8-+Pi?Q8!o9SB5Nh+S(Ki>GUN8ZL>b5q&;nwXSJY@X}xiubv9tg+oMdEfk5 zmix6jGew!T%e*FLt(vmx=&7tzF&j3_+7{s}z{Z#;Ah5nHZc(}WKf9k3E6V273RnvQ zg(t39wsqng>+{-M!?Zu&+V$zZpgPkb1qB`ggwjX5B;IebN8%Q5%di5O12q0!t?Y^1 zpY?t21=0U_-~Rj+WqE7jR_)iFA-zDS2c3`>(u)%LB(U)l(9aB>u6{1-oD!M<1R;Ep diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-text-vertical.png b/apps/common/main/resources/img/toolbar/1.75x/btn-text-vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..64e713b3f36f3219f7c7af24229454664f574c12 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe#0(@uDyRGdQk(%kA+C%-1_Q(Y|No~fyFC%e zVk`;r3ubV5b|VeQ@%40Z45_%4oUp(?frmk84Id9r46j3*ScHcO5U^+**~rBq_Aub+ z0|p`XBsGEd<|IYI85fwmT3wu-6`WRwJrrEDtoI5x=cmQZ(-;^!ljJim*8cwvve47j K&t;ucLK6T$88RCH literal 0 HcmV?d00001 diff --git a/apps/common/main/resources/img/toolbar/1.75x/btn-text.png b/apps/common/main/resources/img/toolbar/1.75x/btn-text.png new file mode 100644 index 0000000000000000000000000000000000000000..05f63a78db0ee25744d43fff4b383172a99048ce GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe#0(@uDyRGdQk(%kA+C%-1_Q(Y|No~fyFC%e zVk`;r3ubV5b|VeQ@%MCb45_%4oFF06aFx-+fX%=lqp>1}*P%&OgoQ;yVoDg}!7jEp zt0WHIYJ4Q4FsrkXMe*VVfsPBSLb(gL4Lc5)=p{&mI6bMH{ib1=IRnFzsS4Jr^G;-g Otn_sCb6Mw<&;$THyEI(@ literal 0 HcmV?d00001 diff --git a/apps/common/main/resources/img/toolbar/1x/big/btn-text-vertical.png b/apps/common/main/resources/img/toolbar/1x/big/btn-text-vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..267ec2ec38a33638c675ae4534d64e86105ce1ca GIT binary patch literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^7C<b+#0(@ouTEJDq&Ne7LR=Yv3<ie(|Nl=}c6%a_ z#aI&L7tG-B>_!@p<K^k%7*cU7IYEK5g<+!x^I<N9rL0HREnK*;k%uRCb=cad7ENu2 zBRV`hTn=5$JnJ}GRy(qUo0za1xf->VNqV}<VvPc0&qik^28Km*B-ktVKHvq}=IQF^ Jvd$@?2>=SdFV+A6 literal 0 HcmV?d00001 diff --git a/apps/common/main/resources/img/toolbar/1x/big/btn-text.png b/apps/common/main/resources/img/toolbar/1x/big/btn-text.png index 630b2c47c6eb6f01683daef4721c01e7055d1ef5..448117d319da71db052886ad82fae72412fc6626 100644 GIT binary patch delta 140 zcmV;70CWG80;mCyB!6#7L_t(|+U=J?3cw%?1oQt-r`I5bu52tVnE`LIIvB-70Kk{X zGLC0u!Cp+v%A3tOBc24;%{kP}u_qW!a&lIO+-}xbLFK-+2`cvuL8C--W1d}B^5cOZ uf(RmrAcB0=W((5r((wME;RS&AxByMPX|s2p8MOca002ovP6b4+LSTY+(?4qf delta 248 zcmV<U00;l50h9ueB!3BTNLh0L01FcU01FcV0GgZ_00001b5ch_0Itp)=>Px#1ZP1_ zK>z@;j|==^1poj5sYygZRCodHm*EP4APj^}djD5m{V_z;X*;3WeSe~oo9BjOArSIu zj^bT9|7KCO<mOp$6D+|RTCuX$YHUi&YE0AWWe|y)L1?gnLvcd{9@an@ZE3`?IolgN zC)R3ZguI;8vK_sgn8A$v#H8{KN}i#V%{MKDmyCC4&^t8f9rnQn%lcn6m|>)1iF)UE y1FsZM3#wK!h#YuJt=QQZ0#yr{#Z?tS$U-hsa7GvulXV;b0000<MNUMnLSTaAdSpNV diff --git a/apps/common/main/resources/img/toolbar/1x/btn-text-vertical.png b/apps/common/main/resources/img/toolbar/1x/btn-text-vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..0aa4448aa6c187c85802bccb42f510b727d39097 GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<<!3HG%yVdUoQZb$`jv*Dd-cCKp#h}39{QbXu z?sY*I;cf%j3h6f!XF05%(WCXo_!6hQ#)Xz9CJW{@NB&*W=U_bdbh5MSeZ7dh^+IoQ z^Q{hCXsQr<8hv2iLFtC``)Asfs`|yg*5=*qxG3k--2AIRdl)=j{an^LB{Ts5^jbGF literal 0 HcmV?d00001 diff --git a/apps/common/main/resources/img/toolbar/1x/btn-text.png b/apps/common/main/resources/img/toolbar/1x/btn-text.png new file mode 100644 index 0000000000000000000000000000000000000000..4dbaf0d6e392f80a99ce2a2020004a6923bf01cd GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<<!3HG%yVdUoQc<2Rjv*Dd-cB{-V^H8={`r4- zp{k3wu=s_zM`2IjG|d#)`=ManW;qRc<<0vf`}#tgDlL@mN#0J#V=+xX<NnCuip=GE w9tU+!rSvyNPC4ln&~%q&tLMHODvvb9BzPC)@YLDO0@}jh>FVdQ&MBb@0DUDiqyPW_ literal 0 HcmV?d00001 diff --git a/apps/common/main/resources/img/toolbar/1x/text-box-horizontal.png b/apps/common/main/resources/img/toolbar/1x/text-box-horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..4dbaf0d6e392f80a99ce2a2020004a6923bf01cd GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<<!3HG%yVdUoQc<2Rjv*Dd-cB{-V^H8={`r4- zp{k3wu=s_zM`2IjG|d#)`=ManW;qRc<<0vf`}#tgDlL@mN#0J#V=+xX<NnCuip=GE w9tU+!rSvyNPC4ln&~%q&tLMHODvvb9BzPC)@YLDO0@}jh>FVdQ&MBb@0DUDiqyPW_ literal 0 HcmV?d00001 diff --git a/apps/common/main/resources/img/toolbar/1x/text-box-vertical.png b/apps/common/main/resources/img/toolbar/1x/text-box-vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..0aa4448aa6c187c85802bccb42f510b727d39097 GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<<!3HG%yVdUoQZb$`jv*Dd-cCKp#h}39{QbXu z?sY*I;cf%j3h6f!XF05%(WCXo_!6hQ#)Xz9CJW{@NB&*W=U_bdbh5MSeZ7dh^+IoQ z^Q{hCXsQr<8hv2iLFtC``)Asfs`|yg*5=*qxG3k--2AIRdl)=j{an^LB{Ts5^jbGF literal 0 HcmV?d00001 diff --git a/apps/common/main/resources/img/toolbar/2x/big/btn-text-vertical.png b/apps/common/main/resources/img/toolbar/2x/big/btn-text-vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..79541939738181decbb0cd52d2cf2bc253e1fb00 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^1wd@U#0(@OTBqCuQk(%kA+C%-1_Q(Y|No~fyFC%e zVk`;r3ubV5b|VeQ3HNky45_%4oFI{;V8Y<Exvl9$D7S*my3iI?W~YS>qDP`PaB=P6 z@Sc>fu6^caf@_Syy{3nnC#4#6PHs*3;I*k~k(Ay^)~>8s-h68Xq$FRKWlU9b=3roO XpHkf#&}{1fw1UCY)z4*}Q$iB}o69&{ literal 0 HcmV?d00001 diff --git a/apps/common/main/resources/img/toolbar/2x/big/btn-text.png b/apps/common/main/resources/img/toolbar/2x/big/btn-text.png index 65e28009cf1f919fe73d7220f0abbfb2ca27fa3a..d625655815f2a9b3eede55dd12ca6a162f51ef62 100644 GIT binary patch delta 162 zcmZo>-o!XTqMnJFfq@~Sb;?a3#Tnoe;>rkQFfjc8|9{G|+Y^B-#*!evU<QY0H`0Kd za8DP<kcwN$2@;wOrXt6<coPyHM6o_z8|4r%$y9`k$zf8=>IDgmiJqI@rf@XumUhu; z__#wNL!0vxhm+6~!CT%&8`u=AJF*!MuXr+H+LGd3(y~dG)h-MS+e52cr*D@`2HEZD L>gTe~DWM4f&Luab literal 387 zcmeAS@N?(olHy`uVBq!ia0vp^1wd@U!3HE%U)Oj6Db50q$YKTtF;x&|^bAt@02E{_ z4sv&5Sa(k5C6L3C?&#~tz_78O`%fY(P)@?r#WAFU@$H@4d`$)dt``sf_`g4<mr<U> zl$C34?zbxAIHQw=5(_j1C#iT|y1PvN{Z!`rJDsQRI(7S5|DK}`)vv2sE<`cSNvgS? z`!eXdNq0)r>rKoL`_3F#vkQplH2x|{X{&#$S~?|?XWMo@Yk_kN4|yQOJITLuZ6}|u zxc>b0o0(bfciWXI%waqvsc=Wsctcr_e(!wmwPuH}ZT`4U6h#}t05sOSuCE8Ap8Sem z9cVr0je`Yqi!qcaf8n&l`Mdwt7<Rpr)33e`yjEIrbM=Ojlxfe8ta-g^BlE*3D}&c- pUIc|-i@XsvT~@<$l1k=s@g@7c;}+ccT?Gs?22WQ%mvv4FO#r%;pRE7@ diff --git a/apps/common/main/resources/img/toolbar/2x/btn-text-vertical.png b/apps/common/main/resources/img/toolbar/2x/btn-text-vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..4dd250109d610790cb89ec70fc901681d9d2642c GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^0YI$5#0(@w_@+(*Qk(%kA+C%-1_Q(Y|No~fyFC%e zVk`;r3ubV5b|VeQ@$__Y45_%4oFEZ#K#EIwN7z9QnWi-h9S(3kDqhRPq<5#uW%fw{ z26eFmoO7DiFd8_nW4$8CvP)Krqr`eDOXfqrB<IYA<YER!hU!(}hFt+O-+(OhboFyt I=akR{0Jq^Vi2wiq literal 0 HcmV?d00001 diff --git a/apps/common/main/resources/img/toolbar/2x/btn-text.png b/apps/common/main/resources/img/toolbar/2x/btn-text.png new file mode 100644 index 0000000000000000000000000000000000000000..a3a4da53ff1b6e98586a6aad3e31855ce0799538 GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^0YI$5#0(@w_@+(*Qk(%kA+C%-1_Q(Y|No~fyFC%e zVk`;r3ubV5b|VeQ@$__Y45_$vb)q2`g8>Kg<{dw*#Q#5kqb<FgTbApQpbOt4r46hf zXXQ1d<w~v<Q4b56?4mzE|IiKdmAW_hkMeUSu4^%R{q#dWo2AJ4;I$774?O@H%HZkh K=d#Wzp$PzZc{T9> literal 0 HcmV?d00001 diff --git a/apps/documenteditor/main/resources/img/toolbar/1.25x/big/combine.png b/apps/documenteditor/main/resources/img/toolbar/1.25x/big/combine.png new file mode 100644 index 0000000000000000000000000000000000000000..b20ba06bbc1a94a067eeb758f9177d7efac45709 GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!3HEX#cOhb)D=$`$B>F!Z)cw7Z8hLw(L5=8 zkxBJJrkA1PqXSP}^&j~5m}vhL;dDKGY<^0lfYXa=Ez>=MsaM?Y?5&7SRgtLQDaU#2 z{u*Yr7aDhx!<&9S*0{5E^}#Ry0#|SBJW#RRdCjqDj6Jb@#z((bo7Fj5%BC58aMBPm z@L!;Da7)p}3<LXO!9LF?5=A_rn#&kxv#CYPE6<+FbfD#&m-F*>pUpgdGr^Lbc5UaT zM{*vYkUV2*TIkYw*7rm29RG6X=ek#RZg(v|*Dy(3TqDAucGX+OiDRx6!z6{*-xh3r R_z37f22WQ%mvv4FO#sNFZDs%f literal 0 HcmV?d00001 diff --git a/apps/documenteditor/main/resources/img/toolbar/1.25x/big/restrict-editing.png b/apps/documenteditor/main/resources/img/toolbar/1.25x/big/restrict-editing.png new file mode 100644 index 0000000000000000000000000000000000000000..a831cdfe637f93a87f8a063f3b87b11ca683ad55 GIT binary patch literal 347 zcmV-h0i^zkP)<h;3K|Lk000e1NJLTq002e+001Kh1^@s6DHnWg0003ZNkl<Zc-rmQ z{RzV$5C!mz;0TVG4U&yAf}=P>Mz|`xe;U%(ue%6+4~~M^5Pv<Q&9X2I!!Xk&rjp9q zG;TyhqSR;8f{}*#Q3EHhvUWZ&w^?Ak22LZ4*TRv;`NMHqVDPDeBOUXH;<UnO;YjEF zVK_Z78aTBu-*z!;n2)>I6EJGm8MYw85QZ>>`6HNV7PQRrOB3e(P#032`2K-0a~K@z zLaGx-m?Mup0pkI(r*fzjW8M-5C>dl=<xnfeyfw@Lh--FqktIy-j`e0dLj`LXL6=<P z&^6Yt9o)@$?ws=p7?lTk@1Mxg5AvD|l)MIw7BGdcL8BFnD0E;ejEwF;!Vrcqgt3Gv t*=ej`e(p4uFryKp#f?~O*9^lH<plu>b|Kk2-berd002ovPDHLkV1nPyliUCR literal 0 HcmV?d00001 diff --git a/apps/documenteditor/main/resources/img/toolbar/1.5x/big/combine.png b/apps/documenteditor/main/resources/img/toolbar/1.5x/big/combine.png new file mode 100644 index 0000000000000000000000000000000000000000..ea709cf6697aed2909a0849e29e268460e272b13 GIT binary patch literal 289 zcmV++0p9+JP)<h;3K|Lk000e1NJLTq002|~001fo1^@s6Ekk^80002!Nkl<Zc-rln z(G7(#2ml?4ja<PI+_a-$U*eY^uZFfj&0WHuCVCPmwc7>&007WSsiBQ1(GRJrMcb4N zLUqtJvxVx2YY>XiHHE&Zd(Sw%g}$tNPtFLT)*Ge9;V9I4pVT<A3za*w#p?rFUhtOr z%WU!bfR-2Rk?AJ1N2a&XR?W>K^l!~2LqD9M)KI#7{x0vnupc?OtR!^W=Ez{7Q#VIa z%&e=-)(Ax?LaCv2d3KxFZDLYlmJbukZW9@rJ430Vba~${Z~5!F2dqOae?9kzb*T5$ n#X$#zBJ?vtIeiBJ0N}|5>km7%L-i)g00000NkvXXu0mjf>!g4- literal 0 HcmV?d00001 diff --git a/apps/documenteditor/main/resources/img/toolbar/1.5x/big/restrict-editing.png b/apps/documenteditor/main/resources/img/toolbar/1.5x/big/restrict-editing.png new file mode 100644 index 0000000000000000000000000000000000000000..714b66191729e109a657d0f59e459f286bb00533 GIT binary patch literal 381 zcmV-@0fPRCP)<h;3K|Lk000e1NJLTq002|~001fo1^@s6Ekk^80003*Nkl<Zc-rmS z;R%B<5CvdI$OswH4Rj+%aFmST2-gH&|A^4q++EJ{9vp?hiGIe`Sf`0$7=~dUlu}DN zYVp`f5h>D_#S2tAdy5BZ6Y1&230a;1nmtezK(iOBDD;}6_JZQm1yz)KO;I&Ky--E5 z*9=t))B{zNdreR^L9J26pjRDL8`KiD2lShJ*a)B>?_r~Wx@}wgpe?seP=XSapadl- zK?yoAmY`v05kYl9+j4WSbzqwt#zKK&xw+Rmut?h4STxWK$hB5N%^1s3K!MpH*IEfR zV=PAk-2iybidh>4w9Ur(V!Q$Gkw68r@|=WO8U?f^U5vMxdPD;?{f^cG_4v`Veth?? zG79wOU(jVFsCZoo77v)st^|S-l%ND9C_xGOr=Y*Q&Nu?}_UnwJK)p^z8MTw%H}(v} bFwAvco1PSpe|Ie400000NkvXXu0mjfG(({V literal 0 HcmV?d00001 diff --git a/apps/documenteditor/main/resources/img/toolbar/1.75x/big/combine.png b/apps/documenteditor/main/resources/img/toolbar/1.75x/big/combine.png new file mode 100644 index 0000000000000000000000000000000000000000..4e1d7a93c63dd2a43909f2d08594236995eb9b3c GIT binary patch literal 308 zcmV-40n7f0P)<h;3K|Lk000e1NJLTq003eD001!v1^@s6A-{ZA0002{Nkl<Zc-rlo z!3~2j3`H}NH(~`wVAG7^rV>Y_rb>dp;XTPWdI(RpV~dso000000FZ~;!aJg>9>CqJ z_feHa_~hpzMEK0-5P=9ptf=KzaVUuRqn2NBsEF|F8L_G~WD{X6_RJ#M&#lFtS%jUX z%_1{$<VBnkzNO8gGtvVkgo>CUK|w@MlUEn<v&oYYWCT4TqX=$I%n{5HvnTc{EaKMf ztMtMuQpD}&Km;NXL63M(kKoqC9Pz$6g2}qDYZ`tLY+rRmuze*X=n;?W5!{-@L@-AP zeAl#zh#2{<X;TqVvS-Ay10Vtsh<Km~{vQDV00000Fu(^R*^6b)Y0cvR0000<MNUMn GLSTZToPhQK literal 0 HcmV?d00001 diff --git a/apps/documenteditor/main/resources/img/toolbar/1.75x/big/restrict-editing.png b/apps/documenteditor/main/resources/img/toolbar/1.75x/big/restrict-editing.png new file mode 100644 index 0000000000000000000000000000000000000000..e10007382af457c75a5c8ffb18ec53de18bc88ac GIT binary patch literal 426 zcmeAS@N?(olHy`uVBq!ia0vp^NkDAK!3HE1_t%6oFfbN+x;TbZ+<JSvcjX}ik+z3@ z69lcC%-1OIXv}-UA^CJhjB-c9#G-$%YVA3kl-0NSYk!GY-YMY3p=dwxR+~nzX%f53 zlCHRG8XSRZf|U(^UA(-?IN<tX=QDy5rv!>c+BB{g9>35cv0hOkDd4!Mv$PVIbI+?C zi4hJi2_1>D;yl_M`8<Z}lKT=lA9gD8mHHU2QQTv&MPc7w!!tY|ul6REb!^zG!{7Hj z%7KBAMF5!)6!z~pJa?(X5$7o{FQ(S!GTB+Lf65`SHs)pQwe4yNvbRqOD*S5Sv$b%Z z+}ii))6CW-uS;o@;Mi_<ZtvH>n`$#3TRrnC>!`aHZ}!akf~KX5{cC;c&$2J3$S&&J z{6F~F$9ZQ2{%U93obms6qlR^h#rkwc#d)t8KQ0!io;QE(OocK#`{>P%9#5vOU{RbH zu7u(=#+K``AAd6+y(qBzf9NbuC9chBw;FkL`GBGJU%x!*>w3fHpZd#yalqi|>gTe~ HDWM4fKijD< literal 0 HcmV?d00001 diff --git a/apps/documenteditor/main/resources/img/toolbar/1x/big/combine.png b/apps/documenteditor/main/resources/img/toolbar/1x/big/combine.png new file mode 100644 index 0000000000000000000000000000000000000000..b49b49a44e0eac402ecc19071cfe959107002d72 GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^7C<b+!3HEvcGuVesm-1)jv*Dd-p;tldq9E1MYgkd zSCjINm5T#rKZwr_yrA|~@1eKwXO@p9EF8C-cCwf&RqG!+GxPQ-V}{Ct9FYm`$F?!l zXl<49d=}K1!C0fYb(Ko-N|!B6S>>}+j89C8&9&sbvsE(X<T|kp?B{rHFh6I#q4hYj zVS8#1&m*2!3TtCS_TGD?_v%rKn|^Bd<e86{!glke2&4=6v4LUQqv{V4f8=azc5Cd@ iDP#TfcfHh?seT(|>Qc-D-`4=0&*16m=d#Wzp$PzQc3e*Y literal 0 HcmV?d00001 diff --git a/apps/documenteditor/main/resources/img/toolbar/1x/big/restrict-editing.png b/apps/documenteditor/main/resources/img/toolbar/1x/big/restrict-editing.png new file mode 100644 index 0000000000000000000000000000000000000000..c3e69e64ff56f66fa55a8d8804765c73815722f5 GIT binary patch literal 304 zcmV-00nh%4P)<h;3K|Lk000e1NJLTq001}u000~a1^@s6G`oC00002@Nkl<Zc-rmQ z(G7zz3<OX{$Ovo-8?XYKWrU1yjU`v&r(h>%RN7dw3dm7-K%JIp8ZqLrk!!+`3u7_> z8MathKp1N>11V>2snH9u+zFf+NC$9cA>pX$Mp}XTNkPI{(}nZ^Sx7Y0G$Xx02GRmN z>$DNTkDWFONE_RFl09Pw@SlOxoxt1f!mk6RRTs@I8YoLc&7!$Q17(7}X417#w$~`2 zfNJhFldgrby+#6y!rqbeSQJq1+I-j-Xo&=(_Yrpj!T1ha2b}$y$!y@o|Hd2v1mh`i z06}Y112}-+4ZM2k#0H+ebcz5nE<|Qe#_Xaao)9lT`3DcV9Z69D0000<MNUMnLSTZ{ Ckb30+ literal 0 HcmV?d00001 diff --git a/apps/documenteditor/main/resources/img/toolbar/2x/big/combine.png b/apps/documenteditor/main/resources/img/toolbar/2x/big/combine.png new file mode 100644 index 0000000000000000000000000000000000000000..159293d26e0920087fd989553c9bc9dc1a2d6e3d GIT binary patch literal 508 zcmV<Y0R#StP)<h;3K|Lk000e1NJLTq003|R001}$1^@s6CF^`j0005QNkl<Zc-rmT zTaJSu7=~e&;u5-}vV*!~mcSCIHZ?JfCR5};pzoKENiV>QCt*1J3<DvA5JCtccg}Ne zX>R$)7QcO6C+GZ}TgtyDE`56dj1_omOC12lT%Xhf;EJKuPaE(Pt$qLk2q1s}o&v00 z74EfAj6KfnWeIp<Rk)W>j6KfnWepew@z${?L%=AAw~jqo0!mCxTfF%FZ8G&r{BJ4n zmcOIb)GGlff#(KL0?!km6rKw}DLgNLl6dBTl6W2f$BM;JH-H7+zXBkDOrcDnEMji8 zh+!LX5kNNb7Xb8hlqPb@fAyoZE#lPZd#(UCh*OL2c?I0dnVXO33Gm>1XKp@X4}f8) zy8%hV-y08)fT8jRB$YQFUIA6p(@nSP>JGsB0;<-98cd<;b)njTs&%0Tfa-Oj(%T5@ zni%PAgn3O28+kVJ9Hm|9C`|&-4Ini!9RpGm(=i}5F_csQ2q04^Qz(lVYGT+%u#smY zzfFs`fy)>Vr$=cm-UcpXJiH#Ig`v$G!6QWLnwXH=yb(M?G_Q%#4o|EB1Q0*~0lX`q yYF(%Spn6@Xc4}9>Rdt~Tfa-Ojgb+f=mGcIf=f-%o=BmyB0000<MNUMnLSTXir`I|F literal 0 HcmV?d00001 diff --git a/apps/documenteditor/main/resources/img/toolbar/2x/big/restrict-editing.png b/apps/documenteditor/main/resources/img/toolbar/2x/big/restrict-editing.png new file mode 100644 index 0000000000000000000000000000000000000000..8164cba4b20ce114b1b0d250c9d686789e9f032a GIT binary patch literal 571 zcmeAS@N?(olHy`uVBq!ia0vp^1wd@U!3HE%U)OjsFfcKBx;TbZ+<JSbaqS@m0k#CU z1Qz#~9CsJ=JYXx`+;>4xqES#lNo~)u5cz_F>woH<lHxu}{gqo57d_QUfW;AnI3o`g zB>rGiz7}b@*W&$Op|;PtLa*1{VaQe9Q?sUrVQs#A-2Ww+TUH(B`uMkR`>Ml&8%-BH zZ1G^o*rB+MEo6>BH1o3KYXmeIZYl&Z6ge+pN@?_9J;6CqsK7!=RYBY(>%hW}D-ALN z)eL;jZx}74Hi|zGI1<;OELhDXC-^>`=}$w&be4!q{-sR}-oIA*2_?its@8^THY{7R zUW;?W)4J+?6BmEuc3@x<XkcJbU|{5M$dhEP*g2H}BBaw9w%(XOdfWQgy;1p(7@ad^ z&)c+YOqJbYyY1dOhKk_le*<Sf>tNwY&5!@JxbU{G(SoxJmTi$res<VQSL8xkKyXa& z%lDrXXHVnE*vIga=c6L8f%W_Ef*Q43_6f=hF@6szx0`9a)N;1N0o$qb{Ga(`o>LS2 zFn!moUkY6UAEtZjl=LrtFtOp)sfNA#jxh){)CX1VU+8;2l{cbrf1=HTNEL=_ck*Ab zfJqgGY1fp0YN#^ktaATVD+2Ql%xC|n--^$C#24{Z+gFIeH}!jq^@5cz=Xo$Z*|JFY zyLkA{MQd3OToQd7vYdM^+uDrlpPke}@i%drde@XAH&!kFHU*d{7(8A5T-G@yGywqI Cf#%!* literal 0 HcmV?d00001 diff --git a/apps/presentationeditor/main/resources/img/toolbar/1.25x/big/gridlines.png b/apps/presentationeditor/main/resources/img/toolbar/1.25x/big/gridlines.png new file mode 100644 index 0000000000000000000000000000000000000000..ab1ab7427c7598d62795542d6dbfb3fb37ea43d0 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!3HEX#cOhbRDq|9V@SoVw>J)Q9#9Z)b@bjY z{Pv5wrb9r$1Ow*ko57ztI5b%q9>m|WwzSCo<~V7~oU37nQZ}rg{VkGX^1*$1x7;NX zTLhmiGx+*Ir}byts|P=lWK@A7$JRaxE1J?G=q8bv_O<)pgRisyJz!+G^Num*IahTX SPwHHt-3*?telF{r5}E)C5kiUp literal 0 HcmV?d00001 diff --git a/apps/presentationeditor/main/resources/img/toolbar/1.25x/big/guides.png b/apps/presentationeditor/main/resources/img/toolbar/1.25x/big/guides.png new file mode 100644 index 0000000000000000000000000000000000000000..5aacef90b7416c600614e58a3e33ebc5e22d5b11 GIT binary patch literal 192 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!3HEX#cOhbRJ*5(V@SoVw=*2M4k+-je7;qq z{jVgOzxAHU1&3Sb8Xh=yOKuV~VFs%FA!gXl<^D#_C1}O86CHsYD^!n6nWy^u@0-Lu z-7|LH5&X<#=+fEe$P>6ISx)5f_C?{v{%<_HExGq~#hop`e$ns_5dK-$DHN#W)$ucU mO54}UgVJ;3J^)Q-*j3EnJ>?(&?8WzFL0nH)KbLh*2~7a%u1V?u literal 0 HcmV?d00001 diff --git a/apps/presentationeditor/main/resources/img/toolbar/1.25x/horizontal-guide.png b/apps/presentationeditor/main/resources/img/toolbar/1.25x/horizontal-guide.png new file mode 100644 index 0000000000000000000000000000000000000000..97bf7b14c5728e6147d1ef15dad4e9126a1629d0 GIT binary patch literal 143 zcmeAS@N?(olHy`uVBq!ia0vp^MnEjd!3HFYLuy@sRG6oWV@SoVx6=&y7!){;)ac%S zrm5b%TV}Fhu2WHWqY(QwCWar4Yc4I=blV{)%gstjO3$I~#ESOce1a|lJNZS_+b8Ny rRPyV~dzP)(#GzDwKZ=1Ne-k4ouZnE*gS+2>HZXX)`njxgN@xNALW3<M literal 0 HcmV?d00001 diff --git a/apps/presentationeditor/main/resources/img/toolbar/1.25x/vertical-guide.png b/apps/presentationeditor/main/resources/img/toolbar/1.25x/vertical-guide.png new file mode 100644 index 0000000000000000000000000000000000000000..1cde0894517dcc5b2ee8978838e7b4d84526b846 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^MnEjd!3HFYLuy@sRH&zmV@SoVx6>TC7!){IYS-TX zrWyU5FEC8NlzCpt#75f;Hii#Of$p817nvtHSthx;%$=)Vytc#2`uvl9q8l$OSr><N qX9eoItPr~zC0P0FIupZ=$xKs(6++JL3sVGIz~JfX=d#Wzp$P!(LoEgX literal 0 HcmV?d00001 diff --git a/apps/presentationeditor/main/resources/img/toolbar/1.5x/big/gridlines.png b/apps/presentationeditor/main/resources/img/toolbar/1.5x/big/gridlines.png new file mode 100644 index 0000000000000000000000000000000000000000..851d47700ee0420035da3cdd4acffb0589d3f3ac GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^AwaCf!3HFCoofn!RJEszV@SoVw>Ja18WaRv1E;_9 z%UQnumcxaHrc%B$*Z&+*b=+VIRCiDEddkC|Q|@Y#k=Y^5&l0bzzX{@*)gC*4L-&Fv zF0B;{n(CA?;w_#oC~s(e%wPJ1RWu~PkyZ4{){|RLP80{TLoReJe*4j*{LLp1b_RwI a_UfniO<|gA)KLO7p25@A&t;ucLK6VTxI`xa literal 0 HcmV?d00001 diff --git a/apps/presentationeditor/main/resources/img/toolbar/1.5x/big/guides.png b/apps/presentationeditor/main/resources/img/toolbar/1.5x/big/guides.png new file mode 100644 index 0000000000000000000000000000000000000000..ee13509a5202fd7150b2aa417d4653215f5e0b9a GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^AwaCf!3HFCoofn!)C5l#$B>F!Z*MwsH7E$M2Kc|; z`ej+LUemU7Ngh@FEoO^qpKV`h3RL*5r`q+Q)J$);BOOu7(itk>zn=PhO<D~^vHV)- zaGSGnnSQ2IXxsv=d?5KW^j=FC%dL3Ew>IhDmN3UYv;nfzzt0G`4}`*60aL>(!Q@YS p{}(ywf0oQ%{$~j@1H+H`+;1Y{!u_UBlK@)D;OXk;vd$@?2>?)QPZ0nB literal 0 HcmV?d00001 diff --git a/apps/presentationeditor/main/resources/img/toolbar/1.5x/horizontal-guide.png b/apps/presentationeditor/main/resources/img/toolbar/1.5x/horizontal-guide.png new file mode 100644 index 0000000000000000000000000000000000000000..1f65ee5987801de9349b006e7df395c452b48de2 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L!3HD?X4LuvsRU0K$B>F!Z?B)`WKiUBy%>^x zTl4A41m=qk`>Pcm<V<<J#)O%HVfjZhFNuB`t&>v^FFxqC%YwBz_}tu^?FmhsYCm>8 zFghl7?csxEUnK7bXa6%e$Rh0XA^YI{z0(*NZY*GWE1zu>ddI{RXcvR0tDnm{r-UW| DQ#m>_ literal 0 HcmV?d00001 diff --git a/apps/presentationeditor/main/resources/img/toolbar/1.5x/vertical-guide.png b/apps/presentationeditor/main/resources/img/toolbar/1.5x/vertical-guide.png new file mode 100644 index 0000000000000000000000000000000000000000..31ec9a394df4da98ca2b0f85e747a0745efc0f9b GIT binary patch literal 152 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5-L!3HD?X4Luvsd!Hp$B>F!Z?9YPH7E$M1o)rc z`dwr3Qq?10C;y0Zau-wcIlPULAwKxH*Wp!DohOG>UCDaj^G4FQ_*|p$#`KaiJ4-IA vGv7Bo&dt5%lGa)nx-0Ude7`C~#X-Kq&*C3?$+krStzz(W^>bP0l+XkK@0dAZ literal 0 HcmV?d00001 diff --git a/apps/presentationeditor/main/resources/img/toolbar/1.75x/big/gridlines.png b/apps/presentationeditor/main/resources/img/toolbar/1.75x/big/gridlines.png new file mode 100644 index 0000000000000000000000000000000000000000..de422a897954e937854da53af9b963ea333f095d GIT binary patch literal 197 zcmeAS@N?(olHy`uVBq!ia0vp^NkDAK!3HE1_t%62sUA-k$B>F!Z*QIEY%maUJve2a zU()jMTnE<Ajx!s#S83Zya72I%U^sKR@8qG(e0c@W(@|^PJMO%B{h-#W<;2;2eD~Zr z6k7zGz(mJP#aD-33O%Zc<UTI`Fhd9;3Y0472SXE1xKfV7T<!b+*Ju7dT<;6A;KLEV XhJM)@uP4sF0pfbP`njxgN@xNA^@BzS literal 0 HcmV?d00001 diff --git a/apps/presentationeditor/main/resources/img/toolbar/1.75x/big/guides.png b/apps/presentationeditor/main/resources/img/toolbar/1.75x/big/guides.png new file mode 100644 index 0000000000000000000000000000000000000000..cf1c6f38914786674bde22445f0e392bde41a408 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^NkDAK!3HE1_t%62sU@B+jv*Dd-rjQLYB3OCIk3m< zewV$hvQotq9|Mh0h1aUPXWV-kqr(bR%5d-UFH!FG(`p+!GB$?I7Ie}1r+lPEVVd3H zHTTcgdH$^usI3%jQ3#owWhB@X;JfOi%L+Be6>3*gl!BxK^JiNX&5yKK?Z`InKR@yJ zlPckdJq2zS%04g+0xdvoYEA;HJWc0r`}FtwtZnvtuCsuw^?x(*=lYxj{IfvrW$<+M Kb6Mw<&;$TrMp2vq literal 0 HcmV?d00001 diff --git a/apps/presentationeditor/main/resources/img/toolbar/1.75x/horizontal-guide.png b/apps/presentationeditor/main/resources/img/toolbar/1.75x/horizontal-guide.png new file mode 100644 index 0000000000000000000000000000000000000000..211560a004c4ad2318db411e0b5e8e34e1b870b2 GIT binary patch literal 161 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!3HEX#cOhbREDREV@SoVw>J)Q9#G(M2wZ;l zR^Ozmf=0ID4Ym9&b6o7I3V9eB-p|ZVJv=L)f6`3j>N8$5a=7NT8tA64e5c)GaEL=0 zNW=)LeUo8-9yCK0NTr(}3l?&dNNf>wn-Smov6-ErU?IDP)uFl$yF11}I~hD({an^L HB{Ts5(qJ~D literal 0 HcmV?d00001 diff --git a/apps/presentationeditor/main/resources/img/toolbar/1.75x/vertical-guide.png b/apps/presentationeditor/main/resources/img/toolbar/1.75x/vertical-guide.png new file mode 100644 index 0000000000000000000000000000000000000000..268067c2222cb657aa4cac44644df940728faca1 GIT binary patch literal 162 zcmeAS@N?(olHy`uVBq!ia0vp^Za}Qe!3HEX#cOhbRHmnkV@SoVw>J)QHW&!790-}c zZT*z1{j4fQi;S3mwmMJ0?SG7c;m3R{e<{DUbsm$v`fqWnahIoGzN0-u=gwT&V%Eza zne#cGb?!8CGgy_9%(B>P)e;bba*NF+^eY$`<VzUBx^}&(a(K%Qw3NZq)z4*}Q$iB} DA1OCq literal 0 HcmV?d00001 diff --git a/apps/presentationeditor/main/resources/img/toolbar/1x/big/gridlines.png b/apps/presentationeditor/main/resources/img/toolbar/1x/big/gridlines.png new file mode 100644 index 0000000000000000000000000000000000000000..1d8a18a4762c013175782814d95c2cdcaecd3d0e GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^7C<b+!3HEvcGuVesTfZe$B>F!Z>Jk_F(~jb*H+cv zTJCc9s8ZS`>l2e)`MnQbV_-Po-gjcg9a%Nar>feHy1RC~2;s=Oc+^#$MX<)fphuJS yxohu3Rza5us)r{fx(NP>{P6R=5Cg-U3ykTKO^<u-8VCdJVeoYIb6Mw<&;$VYaWY8& literal 0 HcmV?d00001 diff --git a/apps/presentationeditor/main/resources/img/toolbar/1x/big/guides.png b/apps/presentationeditor/main/resources/img/toolbar/1x/big/guides.png new file mode 100644 index 0000000000000000000000000000000000000000..9235a910b9614d373906a5cc6ede2c6f20ac6df4 GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^7C<b+!3HEvcGuVesVYww$B>F!Z>KwQ9Z=w5sa<>j zT=2GU0UwfPZP8?%$!OS~5VKin8&E^(4GAr|ZCYw4L;5S3L~T0eS(sQdIe&GF+Hvph ztX~I2*Rw9`66L(JuQ@`b``?X&cAXy{Wz5t5aO;m{b)ix}UlDty+6E1=ql^5n-}$$j dg@Hkm&wTx!?S)B4Qh}~u@O1TaS?83{1OT(yLXZFe literal 0 HcmV?d00001 diff --git a/apps/presentationeditor/main/resources/img/toolbar/1x/horizontal-guide.png b/apps/presentationeditor/main/resources/img/toolbar/1x/horizontal-guide.png new file mode 100644 index 0000000000000000000000000000000000000000..9a88f1b7d337d49576054b11dd87f59a89c58fdc GIT binary patch literal 139 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<<!3HG%yVdUoQbC?Bjv*Dd-cEJoVo=~<sa<>j zo967s=Q;X;TbQ}ol$2#ngq;Fh*j$oKc^n#)tsEzCFBDwz?Clrt58RIHZ@As%QnL$w npSo6m+5_&U>+wR0e#Q)J_kQG-@TZ&wn$F<q>gTe~DWM4fX>cpW literal 0 HcmV?d00001 diff --git a/apps/presentationeditor/main/resources/img/toolbar/1x/vertical-guide.png b/apps/presentationeditor/main/resources/img/toolbar/1x/vertical-guide.png new file mode 100644 index 0000000000000000000000000000000000000000..255ec3f26379c7e45419ad6331eb1c66ad04c71d GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<<!3HG%yVdUoQh}Z>jv*Dd-cCKp#h}39{5Pup zwtr--RaCE%(6<BKJhJZ=%oJ!+s%l&@gO^$0LB~`_m0I<$hZQF6Gye6qbvw_z7pLO_ n1htb~W1cqMuNP8`yUeiS@Q2%y>V<oNhBJ7&`njxgN@xNAj8-vQ literal 0 HcmV?d00001 diff --git a/apps/presentationeditor/main/resources/img/toolbar/2x/big/gridlines.png b/apps/presentationeditor/main/resources/img/toolbar/2x/big/gridlines.png new file mode 100644 index 0000000000000000000000000000000000000000..fa46a7819b0eaee3a85ed6970c1be5dd2acf3688 GIT binary patch literal 278 zcmeAS@N?(olHy`uVBq!ia0vp^1wd@U!3HE%U)Oj6sk@#ojv*Dd-rjcPI%FW=aPiI- zTd%xX%1<~9CyL$aSh~{c(Qkv@I!^PqNO*WnQt<?#FZXq8v*wGHoZ5Cgc<Z%kc3Y3G z?Xf+_FzrCa?<<@KE<FlQXZYU!W!0Xu%dgAcy>EP=n*G{S!}y5ujCuw}CKe6>1&0O@ z;|JRTnG!w5JMtL^7&$IzUonSCfK~V<{h3%U#C*ZCCtL%f9;z{pU*c!lrN_KWH#dA` z*V{ft@_^~leG5aj+s<Q+X}%vIWxv4`>`I_RFY)Hoa%xZ5dVU_zqYR#|elF{r5}E*F C?P$#a literal 0 HcmV?d00001 diff --git a/apps/presentationeditor/main/resources/img/toolbar/2x/big/guides.png b/apps/presentationeditor/main/resources/img/toolbar/2x/big/guides.png new file mode 100644 index 0000000000000000000000000000000000000000..3367ca64d8e9ff026a6a2c82393e10fd1024e36f GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^1wd@U!3HE%U)Oj6sc)Vxjv*Dd-rjcPYf<2F2+X%y zx5v!=0f(%w%FG?ig-Q?qF5!-xa4VlnZ<h{GIS3e-&$s;~_wkcQ`nph;BkBDz@6}~@ zZsYJ_KA}BPnq`?p`yHhXBFn{ZOYY4)wK-&2w2<I!!MpMA+~%<e{Sc2+{IGGl@&pIn z5N_284osXX7gUewP62ZZ^ct@p%AdX>_Wj=bx<Kai=hwcne^V|fYm8c9Ji%eVV4X6D zN&t5$n~;Y>Ba6@rp~qrg3&d8nLbyMC<|+HA{q@thDyGJ7a%WN$%evDN!d^emYz=#0 lb)x0c$AxRTA?|1JIU~Lx_CvMHXZe1Rh^MQc%Q~loCICpgZzli% literal 0 HcmV?d00001 diff --git a/apps/presentationeditor/main/resources/img/toolbar/2x/horizontal-guide.png b/apps/presentationeditor/main/resources/img/toolbar/2x/horizontal-guide.png new file mode 100644 index 0000000000000000000000000000000000000000..952f04eeb7724f6e2333e927dd4add807503ce6a GIT binary patch literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^0YI$5!3HEV6KWZO)LKs$$B>F!Z*MwswHolaUVL|@ z?@rmY393i9#JVi9Y8F-Srz}dSUvKeKmldd*;a*DS<6I|`vNeXPO4H2bthTM6$eD4d zqSi+6g420p#@}k8LFeCFPx-q;dY-=nlhA|)78M0X&L1BeUT5xl^EH~u?6t+=zgJ3` z_Gu{0H(=!SfU0@0pGoVy^ReQIH+g?C*T0NbOVGVlENFji25-dC=Ssi1SAi_wv4PR+ W&Hbd5rA)~nr+B*hxvX<aXaWFm7gWOl literal 0 HcmV?d00001 diff --git a/apps/presentationeditor/main/resources/img/toolbar/2x/vertical-guide.png b/apps/presentationeditor/main/resources/img/toolbar/2x/vertical-guide.png new file mode 100644 index 0000000000000000000000000000000000000000..631115b05b1a96302230471cfa870456be03784c GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^0YI$5!3HEV6KWZO)Ot@B$B>F!Z)ZAkwHWZYRtN9? zbj#AIPvG{#rVj4qGxd%3u-B_=)(SB%69KAbU}!MkxTV6oBk6IErczSo#|w#ndwLv% zPu+gZ*(g?Jqg=56N$fSj(7&4x@W<Qi|F+_l@&{HX`L+MMxs^VgXSsBU!$pB<<{=(I zAhU*9u)~4H$YsVMpTsDMM#;ugwI>SojkGVw|5%zY*|;_1yOQ0x8KMzKt0(?z$^yBS bVMhY<hSdk9@;A#Y1#vxH{an^LB{Ts5+3Z!S literal 0 HcmV?d00001 diff --git a/apps/spreadsheeteditor/main/resources/img/toolbar/1.25x/big/edit-links.png b/apps/spreadsheeteditor/main/resources/img/toolbar/1.25x/big/edit-links.png new file mode 100644 index 0000000000000000000000000000000000000000..09d385dfe0ad9beeb62370d64d86ea4604769d4d GIT binary patch literal 479 zcmV<50U-W~P)<h;3K|Lk000e1NJLTq002e+001Kh1^@s6DHnWg0004|Nkl<Zc-rlm zjg7+~422mXBd}q!0ojOdkWn%MBe)>>Bo1L0h~2Anev;K6nW%hy4^ZNq$z(E_zD`#z zn5>}jLjd4{c?B&nu+V>Lz$vqw?MIm5Tfle?IE!Gs793dY7l*R~247X+z>R)UIICc^ z;K0p(F*tX?Xuz2T!|h_921D**e*s4AI${$tFb2lJ7#IU%U<}NE2UAY8XRgE?=py#1 zg25B*nJY23A7bg#2ICRPk!vHymG5`#^IHEjLMcFwTpKZN%e7;lcZv~+IO!1`=qxQT z#R>c1_yX_L1Otpy+K6rV-VqVI3kDdcv=J-LN!7St5t9Iu2r#{fZOt{7BSwHpJutn9 zAsCQ~SP#sJlOKuLBiB<RVg#7th+`yT`ST;!Qz~NI;=4D_fyOC;aYh|6iN$xXol{2) zoe?N!)De@~u48krB~{T$=m^j3T5uOk1t-?`T7DviUnO*wXLc=+0^=qk))N&mk%Ji( zF`~B{F-b5~#9F5Wsl}J+?MAHQl(4$^jy`asBG%Tsh;fr0df-MytRpsJCX>mesTUNG VH1$_YjhO%d002ovPDHLkV1fyC%kTgI literal 0 HcmV?d00001 diff --git a/apps/spreadsheeteditor/main/resources/img/toolbar/1.5x/big/edit-links.png b/apps/spreadsheeteditor/main/resources/img/toolbar/1.5x/big/edit-links.png new file mode 100644 index 0000000000000000000000000000000000000000..def9fc7035dc19b664acd8df7110e6da6d0ee071 GIT binary patch literal 538 zcmV+#0_FXQP)<h;3K|Lk000e1NJLTq002|~001fo1^@s6Ekk^80005uNkl<Zc-rln ziH*WA5JgjhJ0K;b!?=Ucf$4}6T*|Dynw3x#pK}1(`I3bM83Pad#SU2(i^XEGSiUGR zH6XNI<3j>K1X^}2pg^pR8c;J4N-h2%`!@hxHJ~y8UA3SBL#;SeDo}h>feK8uqEI=2 zYC#3YS}~|xKsBHObFBzePN33IL7<i$DmPF`s1%?*YuHZ!+FZka3Q)Daxxchz-v-ox z8c+jjKn<t?HJ}F6fEv($0My~0ytU2z+q=7W08KBuyeIG2W=1^Dy#r`|(`RaTyx>vG zmf8c4cbY&E<}<Z>zTna5XG`sY$2)DHdBlam{xW>8IW2L-g~9$Ze6Q`fh$C+#E7oZO z&C_@r?C<x|oi@-Jzb>c8l3zK24*T`BuI5*X5qcZ+>vl0hul&kALT@8}MVH2wU%7#1 z#~g!x4Hbt@`?Ueor*@3^H9uE!DAlh$XZdj9(z9PzgkKwl(|+wd%ZIZ|&wfRB9<@<O z^=pqOeWxdV$CL(cpf6B;rzd@DN|XL_nXIe%wYFA`5<qAC+E}YbZJ;&3mJ%c!+Ndk~ zwNewL9NJPr$*))LZ246RXwk0)cOKNU{LJl)HNTej`F^3TLx*o?togOF&-c`IsKsKj cSS%{}0W&S&K;Q~m&Hw-a07*qoM6N<$f}&dXRR910 literal 0 HcmV?d00001 diff --git a/apps/spreadsheeteditor/main/resources/img/toolbar/1.75x/big/edit-links.png b/apps/spreadsheeteditor/main/resources/img/toolbar/1.75x/big/edit-links.png new file mode 100644 index 0000000000000000000000000000000000000000..6da669b7b71bf204103ef6e964b3fa2e8445cfcc GIT binary patch literal 641 zcmeAS@N?(olHy`uVBq!ia0vp^NkDAK!3HE1_t%6oFfe&|x;TbZ+<H6v;lw5bf!3Et zrZ~9Y;4D#)%}Af(z-ei;`J5%!N$0Z7cg|KD_t@`QvqS!w@x*MYwnT}x#DA{Ko_2V- zzyHXV)DwKg`#r0Y*0q^72}|B(UKL#NH=bS4CPAZ_BhFw^(cD)CCXOc-bN6HfEZ5@6 z6#$9_&doB=ai}=Z(N?<Zzy_v3X*ZK~$$W=}Tzn-qI>`o0TvNz8c!8-=kLNrOQ<TI! z*_PYck!H)EWec)63gAFja{MCtZWo>5-FA3ZS<-u>cOnWY(!aOK7*|C5-s;@DyfB^d zqGxjZ)ML*M@EWcA%(l_yE|B~Em>7gBxMb$r>06^E<@Y%3`Lp11UF7bm9}fy2iCy<b z+4Hgc`pW2K(;p`M{c_TvmS0uia^Fjh?<;4?I{LgQ3HcFncAmncb8YK6_f}TxaK=iz z+`0LIf8qXXjxBkNN~T|#uAJcf`%*IG#Vv)PV10*P--Y(J&0Kexj&N8kQuz|Mt_CD? zY?88<lYe>M5^Z_WUDvlSn{(l!n!M1ji}}8m3m5xd6R67M+iSM}y9#T-3&($TlRhqU zV!tMM{kg4YHg9b97KS%ZcWM{#wYT=ITO)t=`Cjj6rFl=e_)k4AEJ^)avA<kX`BCJu ztqUsUrv0{GaY69>jyL}oIJw(A=42AA(o|g--7Fz0RvWqSI>W-fypI^2N~Mo*vnYMh zZK!U^V*@H-Q_%Sm)b}S`Q|Zgv$I=U*Z!_G-rS!$8jC(F9A<Phd#;z)TKIMm(xGpeh OF?hQAxvX<aXaWGcR}azv literal 0 HcmV?d00001 diff --git a/apps/spreadsheeteditor/main/resources/img/toolbar/1x/big/edit-links.png b/apps/spreadsheeteditor/main/resources/img/toolbar/1x/big/edit-links.png new file mode 100644 index 0000000000000000000000000000000000000000..627639f5139272c4ecaa4c3e5d4078dd6e0d43a6 GIT binary patch literal 392 zcmV;30eAk1P)<h;3K|Lk000e1NJLTq001}u000~a1^@s6G`oC00003`Nkl<Zc-rll ziw%Sz3_u;l5g36{*g!XML`HCw9whamwLpP-pM)lj$ys9G@luJ?G-AYG#vT#`xoJEM z0CteYrUeMXnq31jb}p&GKVthN;H&{z0XS<xLPbqCq!bXZDv(fF(*;=rs09fPHO-K< zfEthzz}%#L0x&sgp8`}{+uCH$+5tEK2jK4kE}6;cLpn{s@Y9l+oIa$}1at^z6ZHn~ zuNu1$n@2dCs5f|j)zZu(L@q2sY5>L^GKDoZLTUk~G&pNJk?UF8T0ltDy|pFh(~Gt( zfSjIGTZ2&5+A@GQJ*l>+sc+Sm0<PGsNoafM=~}d909S0*aM~Vv(jBYOmQ%zb6sKcu zr=W3)I)vhMOzxC)s!9*rwopU0?LBPULd`|nUO-M;PEV%<c+-~CQ#xo$ADuXDX^P*A mrH@XWwoG)r7e|cvQoI0)l8}zd95J5&0000<MNUMnLSTXyj-q1# literal 0 HcmV?d00001 diff --git a/apps/spreadsheeteditor/main/resources/img/toolbar/2x/big/edit-links.png b/apps/spreadsheeteditor/main/resources/img/toolbar/2x/big/edit-links.png new file mode 100644 index 0000000000000000000000000000000000000000..1f0f17c94ae6193825fb953a7f03077115abd5f1 GIT binary patch literal 845 zcmV-T1G4;yP)<h;3K|Lk000e1NJLTq003|R001}$1^@s6CF^`j0009NNkl<Zc-rlp zfsKS95JfG45-i0|)(*}Nv=g@zORxk=umlfsm`pah3^0u2Wqv|(ySkvh1>YgrrqO6L z8jVJy(P$*+<;v#DPEdS3qokAD_x<I{w$sGdGfD$!iQvI93Ib?%`pEi{hC)@3D2T@u zr>aLHL~4M&B#0FN_R=6y18gKgqy`xN76q{eKrs+&0F(x?7C;dYYXOu5u_nOVA=U&a z1!8T0w?eE9Py$2_fVV;90C+b<E`YZ{<N|mnL{5O85QqN+@C4%UB!D^dsoR49=FF#V zPXg$BR?fWYQvmik^Qun*D6(D73wc+&3Qz$mKn17(6`%rCfC^9nDnJFO02QDD{HFj- z^Y;`XWy)-IWp<^N4$$pp{8NO)DYMm;*_Bp0z|sZ4{<DKrfCLMGH~92H8o(d0-{MLa zdLt%&-#7UDOWIK8Hva$+iz}V)jmY}_zHjh(*7L&vY(dYP3fh@KPc%{h`k@c>ys4m_ z3G_rG3E&*I&jf8P1YZPdfOFVoCTMFZ{UX!=xQ6W=L0es@%L)RxhFv;>wz^Q4l>{(H zHqLDIc>lA$n61_Zm@FG-whG?=TmbylRyhG;$Mq{)y=pIJt1JK$q~+9BuiA^*DhEKD zFoeczwFAA4#a0mjEp`Zv*(w-9S58}v0h|DkrqEU~LPTn-2!Mw@E|Geowu%v=8nzk( zXaJb8z*a{9CUzenvsDB@1Hg>Awi@n<2bh-AR#O+`&KJY!nXQ`edTG+uf|A*4#)91W zY&bo$)d0T(Ku~KzscjW&nFE2G^a&PAGS!wal{OH_Nsl}xLpjx!a-rHF8tWHe=Hs;u zL!qg7T*UyveeMl<+kR!M;I$3+HB;-jST0netzw7Jl@nm39$Vob{#6n{tgT`~Hho73 z5M`^#y2z&QC;?(^HI@`x<phYbRYW~#Tjd6bwbd*5Ikw7suR+-A7x>AxicRUSG+}Ku z<-u=Hb#kS@(uB3u#0S4*=XdlPO9=4FR%0dCRx!QCQUScORYbCERin{pG#ZUYqv6Xh Xze<j7B!z|Z00000NkvXXu0mjf@4j~e literal 0 HcmV?d00001 From b17377a91662fb0d7322f25363df2b1429559242 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova <julia.radzhabova@onlyoffice.com> Date: Mon, 10 Oct 2022 22:47:34 +0300 Subject: [PATCH 26/28] [DE] Add icon cls --- apps/documenteditor/main/app/view/DocProtection.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/documenteditor/main/app/view/DocProtection.js b/apps/documenteditor/main/app/view/DocProtection.js index 275d9c40f..757cd7912 100644 --- a/apps/documenteditor/main/app/view/DocProtection.js +++ b/apps/documenteditor/main/app/view/DocProtection.js @@ -76,7 +76,7 @@ define([ this.btnProtectDoc = new Common.UI.Button({ cls: 'btn-toolbar x-huge icon-top', - iconCls: 'toolbar__icon protect-workbook', + iconCls: 'toolbar__icon restrict-editing', enableToggle: true, caption: this.txtProtectDoc, lock : [_set.lostConnect, _set.coAuth, _set.previewReviewMode, _set.viewFormMode, _set.protectLock], From 5c0b841223dc60fb07baecad5c09a6b4cd08780e Mon Sep 17 00:00:00 2001 From: Julia Radzhabova <julia.radzhabova@onlyoffice.com> Date: Thu, 13 Oct 2022 18:56:03 +0300 Subject: [PATCH 27/28] [DE] Set max length of password for document protection --- apps/common/main/lib/view/OpenDialog.js | 1 + apps/documenteditor/main/app/controller/DocProtection.js | 1 + apps/documenteditor/main/app/view/ProtectDialog.js | 4 ++-- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/common/main/lib/view/OpenDialog.js b/apps/common/main/lib/view/OpenDialog.js index ad039555a..1e2f7fa3f 100644 --- a/apps/common/main/lib/view/OpenDialog.js +++ b/apps/common/main/lib/view/OpenDialog.js @@ -207,6 +207,7 @@ define([ type: 'password', showCls: (this.options.iconType==='svg' ? 'svg-icon' : 'toolbar__icon') + ' btn-sheet-view', hideCls: (this.options.iconType==='svg' ? 'svg-icon' : 'toolbar__icon') + ' hide-password', + maxLength: this.options.maxPasswordLength, validateOnBlur: false, showPwdOnClick: true, validation : function(value) { diff --git a/apps/documenteditor/main/app/controller/DocProtection.js b/apps/documenteditor/main/app/controller/DocProtection.js index 1910542ab..3174987a1 100644 --- a/apps/documenteditor/main/app/controller/DocProtection.js +++ b/apps/documenteditor/main/app/controller/DocProtection.js @@ -147,6 +147,7 @@ define([ type: Common.Utils.importTextType.DRM, txtOpenFile: me.view.txtWBUnlockDescription, validatePwd: false, + maxPasswordLength: 15, handler: function (result, value) { btn = result; if (result == 'ok') { diff --git a/apps/documenteditor/main/app/view/ProtectDialog.js b/apps/documenteditor/main/app/view/ProtectDialog.js index 75376afe0..8c41dccea 100644 --- a/apps/documenteditor/main/app/view/ProtectDialog.js +++ b/apps/documenteditor/main/app/view/ProtectDialog.js @@ -99,7 +99,7 @@ define([ type: 'password', allowBlank : true, style : 'width: 100%;', - maxLength: 255, + maxLength: 15, validateOnBlur: false, validation : function(value) { return me.txtIncorrectPwd; @@ -111,7 +111,7 @@ define([ type: 'password', allowBlank : true, style : 'width: 100%;', - maxLength: 255, + maxLength: 15, validateOnBlur: false, repeatInput: this.repeatPwd, showPwdOnClick: true From ef395c554af3703de76e93244e48cdd7f624e052 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova <julia.radzhabova@onlyoffice.com> Date: Thu, 13 Oct 2022 19:13:23 +0300 Subject: [PATCH 28/28] Add translation --- apps/documenteditor/main/locale/en.json | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/apps/documenteditor/main/locale/en.json b/apps/documenteditor/main/locale/en.json index 2a9a64c41..478c5571d 100644 --- a/apps/documenteditor/main/locale/en.json +++ b/apps/documenteditor/main/locale/en.json @@ -1455,6 +1455,13 @@ "DE.Views.DateTimeDialog.textLang": "Language", "DE.Views.DateTimeDialog.textUpdate": "Update automatically", "DE.Views.DateTimeDialog.txtTitle": "Date & Time", + "DE.Views.DocProtection.txtProtectDoc": "Protect Document", + "DE.Views.DocProtection.txtDocProtectedView": "Document is protected.<br>You may only view this document.", + "DE.Views.DocProtection.txtDocProtectedTrack": "Document is protected.<br>You may edit this document, but all changes will be tracked.", + "DE.Views.DocProtection.txtDocProtectedComment": "Document is protected.<br>You may only insert comments to this document.", + "DE.Views.DocProtection.txtDocProtectedForms": "Document is protected.<br>You may only fill in forms in this document.", + "DE.Views.DocProtection.hintProtectDoc": "Protect document", + "DE.Views.DocProtection.txtDocUnlockDescription": "Enter a password to unprotect document", "DE.Views.DocumentHolder.aboveText": "Above", "DE.Views.DocumentHolder.addCommentText": "Add Comment", "DE.Views.DocumentHolder.advancedDropCapText": "Drop Cap Settings", @@ -2408,6 +2415,18 @@ "DE.Views.ParagraphSettingsAdvanced.tipTop": "Set top border only", "DE.Views.ParagraphSettingsAdvanced.txtAutoText": "Auto", "DE.Views.ParagraphSettingsAdvanced.txtNoBorders": "No borders", + "DE.Views.ProtectDialog.txtPassword": "Password", + "DE.Views.ProtectDialog.txtRepeat": "Repeat password", + "DE.Views.ProtectDialog.txtOptional": "optional", + "DE.Views.ProtectDialog.txtIncorrectPwd": "Confirmation password is not identical", + "DE.Views.ProtectDialog.txtWarning": "Warning: If you lose or forget the password, it cannot be recovered. Please keep it in a safe place.", + "DE.Views.ProtectDialog.txtProtect": "Protect", + "DE.Views.ProtectDialog.txtTitle": "Protect", + "DE.Views.ProtectDialog.txtAllow": "Allow only this type of editing in the document", + "DE.Views.ProtectDialog.textView": "No changes (Read only)", + "DE.Views.ProtectDialog.textForms": "Filling forms", + "DE.Views.ProtectDialog.textReview": "Tracked changes", + "DE.Views.ProtectDialog.textComments": "Comments", "DE.Views.RightMenu.txtChartSettings": "Chart settings", "DE.Views.RightMenu.txtFormSettings": "Form Settings", "DE.Views.RightMenu.txtHeaderFooterSettings": "Header and footer settings",