diff --git a/apps/spreadsheeteditor/main/app.js b/apps/spreadsheeteditor/main/app.js index 8131b9fd2..d32de0fe5 100644 --- a/apps/spreadsheeteditor/main/app.js +++ b/apps/spreadsheeteditor/main/app.js @@ -186,6 +186,7 @@ require([ 'spreadsheeteditor/main/app/view/PivotSettings', 'spreadsheeteditor/main/app/view/FieldSettingsDialog', 'spreadsheeteditor/main/app/view/ValueFieldSettingsDialog', + 'spreadsheeteditor/main/app/view/SignatureSettings', 'common/main/lib/util/utils', 'common/main/lib/util/LocalStorage', 'common/main/lib/controller/Fonts', diff --git a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js index 03e6c2717..d757a431a 100644 --- a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js +++ b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js @@ -82,6 +82,7 @@ define([ me.namedrange_locked = false; me._currentMathObj = undefined; me._currentParaObjDisabled = false; + me._isDisabled = false; /** coauthoring begin **/ this.wrapEvents = { @@ -1230,14 +1231,14 @@ define([ showObjectMenu: function(event){ if (this.api && !this.mouse.isLeftButtonDown && !this.rangeSelectionMode){ - (this.permissions.isEdit) ? this.fillMenuProps(this.api.asc_getCellInfo(), true, event) : this.fillViewMenuProps(this.api.asc_getCellInfo(), true, event); + (this.permissions.isEdit && !this._isDisabled) ? this.fillMenuProps(this.api.asc_getCellInfo(), true, event) : this.fillViewMenuProps(this.api.asc_getCellInfo(), true, event); } }, onSelectionChanged: function(info){ if (!this.mouse.isLeftButtonDown && !this.rangeSelectionMode && this.currentMenu && this.currentMenu.isVisible()){ - (this.permissions.isEdit) ? this.fillMenuProps(info, true) : this.fillViewMenuProps(info, true); + (this.permissions.isEdit && !this._isDisabled) ? this.fillMenuProps(info, true) : this.fillViewMenuProps(info, true); } }, @@ -1495,12 +1496,15 @@ define([ iscellmenu = (seltype==Asc.c_oAscSelectionType.RangeCells) && !this.permissions.isEditMailMerge && !this.permissions.isEditDiagram, iscelledit = this.api.isCellEdited; + if (!documentHolder.viewModeMenu) + documentHolder.createDelayedElementsViewer(); + if (!showMenu && !documentHolder.viewModeMenu.isVisible()) return; - documentHolder.menuViewUndo.setVisible(this.permissions.canCoAuthoring && this.permissions.canComments); - documentHolder.menuViewUndo.setDisabled(!this.api.asc_getCanUndo()); - documentHolder.menuViewCopySeparator.setVisible(iscellmenu && !iscelledit && this.permissions.canCoAuthoring && this.permissions.canComments); - documentHolder.menuViewAddComment.setVisible(iscellmenu && !iscelledit && this.permissions.canCoAuthoring && this.permissions.canComments); + documentHolder.menuViewUndo.setVisible(this.permissions.canCoAuthoring && this.permissions.canComments && !this._isDisabled); + documentHolder.menuViewUndo.setDisabled(!this.api.asc_getCanUndo() && !this._isDisabled); + documentHolder.menuViewCopySeparator.setVisible(iscellmenu && !iscelledit && this.permissions.canCoAuthoring && this.permissions.canComments && !this._isDisabled); + documentHolder.menuViewAddComment.setVisible(iscellmenu && !iscelledit && this.permissions.canCoAuthoring && this.permissions.canComments && !this._isDisabled); documentHolder.setMenuItemCommentCaptionMode(documentHolder.menuViewAddComment, cellinfo.asc_getComments().length < 1, this.permissions.canEditComments); commentsController && commentsController.blockPopover(true); documentHolder.menuViewAddComment.setDisabled(isCellLocked || isTableLocked); @@ -2489,6 +2493,10 @@ define([ win.show(); }, + SetDisabled: function(state) { + this._isDisabled = state; + }, + guestText : 'Guest', textCtrlClick : 'Press CTRL and click link', txtHeight : 'Height', diff --git a/apps/spreadsheeteditor/main/app/controller/Main.js b/apps/spreadsheeteditor/main/app/controller/Main.js index 939a4fbbd..fbe11d38d 100644 --- a/apps/spreadsheeteditor/main/app/controller/Main.js +++ b/apps/spreadsheeteditor/main/app/controller/Main.js @@ -726,14 +726,12 @@ define([ if (me.needToUpdateVersion) toolbarController.onApiCoAuthoringDisconnect(); - if (me.appOptions.canBrandingExt) - Common.NotificationCenter.trigger('document:ready', 'main'); + Common.NotificationCenter.trigger('document:ready', 'main'); } }, 50); } else { documentHolderView.createDelayedElementsViewer(); - if (me.appOptions.canBrandingExt) - Common.NotificationCenter.trigger('document:ready', 'main'); + Common.NotificationCenter.trigger('document:ready', 'main'); } if (me.appOptions.canAnalytics && false) diff --git a/apps/spreadsheeteditor/main/app/controller/RightMenu.js b/apps/spreadsheeteditor/main/app/controller/RightMenu.js index fc2505df7..d7bdaa55e 100644 --- a/apps/spreadsheeteditor/main/app/controller/RightMenu.js +++ b/apps/spreadsheeteditor/main/app/controller/RightMenu.js @@ -124,7 +124,8 @@ define([ SelectedObjects = this.api.asc_getGraphicObjectProps(); } - if (SelectedObjects.length<=0 && !formatTableInfo && !sparkLineInfo && !pivotInfo && !this.rightmenu.minimizedMode) { + if (SelectedObjects.length<=0 && !formatTableInfo && !sparkLineInfo && !pivotInfo && !this.rightmenu.minimizedMode && + this.rightmenu.GetActivePane() !== 'id-signature-settings') { this.rightmenu.clearSelection(); this._openRightMenu = true; } @@ -332,7 +333,8 @@ define([ } }, - SetDisabled: function(disabled) { + SetDisabled: function(disabled, allowSignature) { + this.setMode({isEdit: !disabled}); if (this.rightmenu) { this.rightmenu.paragraphSettings.disableControls(disabled); this.rightmenu.shapeSettings.disableControls(disabled); @@ -341,7 +343,7 @@ define([ this.rightmenu.tableSettings.disableControls(disabled); this.rightmenu.pivotSettings.disableControls(disabled); - if (this.rightmenu.signatureSettings) { + if (!allowSignature && this.rightmenu.signatureSettings) { this.rightmenu.signatureSettings.disableControls(disabled); this.rightmenu.btnSignature.setDisabled(disabled); } diff --git a/apps/spreadsheeteditor/main/app/controller/Statusbar.js b/apps/spreadsheeteditor/main/app/controller/Statusbar.js index 400abdccb..f688e0216 100644 --- a/apps/spreadsheeteditor/main/app/controller/Statusbar.js +++ b/apps/spreadsheeteditor/main/app/controller/Statusbar.js @@ -138,7 +138,11 @@ define([ }, onApiDisconnect: function() { - this.statusbar.setMode({isDisconnected: true}); + this.SetDisabled(true); + }, + + SetDisabled: function(state) { + this.statusbar.setMode({isDisconnected: state}); this.statusbar.update(); }, diff --git a/apps/spreadsheeteditor/main/app/controller/Toolbar.js b/apps/spreadsheeteditor/main/app/controller/Toolbar.js index 8b59c1a54..c2b587625 100644 --- a/apps/spreadsheeteditor/main/app/controller/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/controller/Toolbar.js @@ -2879,7 +2879,10 @@ define([ this._state.namedrange_locked = (state == Asc.c_oAscDefinedNameReason.LockDefNameManager); }, - DisableToolbar: function(disable) { + DisableToolbar: function(disable, viewMode) { + if (viewMode!==undefined) this.editMode = !viewMode; + disable = disable || !this.editMode; + var mask = $('.toolbar-mask'); if (disable && mask.length>0 || !disable && mask.length==0) return; diff --git a/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js b/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js index 6801af7d6..ea7dd8593 100644 --- a/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js +++ b/apps/spreadsheeteditor/main/app/view/FileMenuPanels.js @@ -1436,12 +1436,17 @@ define([ var sign = {name: item.asc_getSigner1(), date: '18/05/2017'}; (item.asc_getValid()==0) ? valid_arr.push(sign) : invalid_arr.push(sign); }); + + // requested_arr = ['Hammish Mitchell', 'Someone Somewhere', 'Mary White', 'John Black']; + // valid_arr = [{name: 'Hammish Mitchell', guid: '123', date: '18/05/2017'}, {name: 'Someone Somewhere', guid: '345', date: '18/05/2017'}]; + // invalid_arr = [{name: 'Mary White', guid: '111', date: '18/05/2017'}, {name: 'John Black', guid: '456', date: '18/05/2017'}]; + this.cntRequestedSign.html(this.templateRequested({signatures: requested_arr, header: this.strRequested})); this.cntValidSign.html(this.templateValid({signatures: valid_arr, header: this.strValid})); this.cntInvalidSign.html(this.templateValid({signatures: invalid_arr, header: this.strInvalid})); - // this.cntRequestedSign.html(this.templateRequested({signatures: ['Hammish Mitchell', 'Someone Somewhere', 'Mary White', 'John Black'], header: this.strRequested})); - // this.cntValidSign.html(this.templateValid({signatures: [{name: 'Hammish Mitchell', date: '18/05/2017'}, {name: 'Someone Somewhere', date: '18/05/2017'}], header: this.strValid})); - // this.cntInvalidSign.html(this.templateValid({signatures: [{name: 'Mary White', date: '18/05/2017'}, {name: 'John Black', date: '18/05/2017'}], header: this.strInvalid})); + + this.btnAddInvisibleSign.setDisabled(valid_arr.length>0 || invalid_arr.length>0); + this.btnAddVisibleSign.setDisabled(valid_arr.length>0 || invalid_arr.length>0); }, strProtect: 'Protect Document', diff --git a/apps/spreadsheeteditor/main/app/view/SignatureSettings.js b/apps/spreadsheeteditor/main/app/view/SignatureSettings.js index 4bebf984a..3c6be4178 100644 --- a/apps/spreadsheeteditor/main/app/view/SignatureSettings.js +++ b/apps/spreadsheeteditor/main/app/view/SignatureSettings.js @@ -66,10 +66,9 @@ define([ initialize: function () { var me = this; - this._initSettings = true; - this._state = { DisabledControls: false, + DisabledInsertControls: false, requestedSignatures: undefined, validSignatures: undefined, invalidSignatures: undefined @@ -142,17 +141,11 @@ define([ if (this.api) { this.api.asc_registerCallback('asc_onUpdateSignatures', _.bind(this.onUpdateSignatures, this)); } + Common.NotificationCenter.on('document:ready', _.bind(this.onDocumentReady, this)); return this; }, - createDelayedControls: function() { - this._initSettings = false; - }, - ChangeSettings: function(props) { - if (this._initSettings) - this.createDelayedControls(); - if (!this._state.requestedSignatures || !this._state.validSignatures || !this._state.invalidSignatures) { this.onUpdateSignatures(this.api.asc_getSignatures(), this.api.asc_getRequestSignatures()); } @@ -165,15 +158,20 @@ define([ }, disableControls: function(disable) { - if (this._initSettings) return; - if (this._state.DisabledControls!==disable) { this._state.DisabledControls = disable; + this.$linksSign && this.$linksSign.toggleClass('disabled', disable); + this.$linksView && this.$linksView.toggleClass('disabled', disable); + } + this.disableInsertControls(disable); + }, + + disableInsertControls: function(disable) { + if (this._state.DisabledInsertControls!==disable) { + this._state.DisabledInsertControls = disable; _.each(this.lockedControls, function(item) { item.setDisabled(disable); }); - this.$linksSign.toggleClass('disabled', disable); - this.$linksView.toggleClass('disabled', disable); } }, @@ -194,12 +192,14 @@ define([ var sign = {name: item.asc_getSigner1(), guid: item.asc_getId(), date: '18/05/2017'}; (item.asc_getValid()==0) ? me._state.validSignatures.push(sign) : me._state.invalidSignatures.push(sign); }); + + // me._state.requestedSignatures = [{name: 'Hammish Mitchell', guid: '123'}, {name: 'Someone Somewhere', guid: '123'}, {name: 'Mary White', guid: '123'}, {name: 'John Black', guid: '123'}]; + // me._state.validSignatures = [{name: 'Hammish Mitchell', guid: '123', date: '18/05/2017'}, {name: 'Someone Somewhere', guid: '345', date: '18/05/2017'}]; + // me._state.invalidSignatures = [{name: 'Mary White', guid: '111', date: '18/05/2017'}, {name: 'John Black', guid: '456', date: '18/05/2017'}]; + this.cntRequestedSign.html(this.templateRequested({signatures: me._state.requestedSignatures, header: this.strRequested})); this.cntValidSign.html(this.templateValid({signatures: me._state.validSignatures, header: this.strValid})); this.cntInvalidSign.html(this.templateValid({signatures: me._state.invalidSignatures, header: this.strInvalid})); - // this.cntRequestedSign.html(this.templateRequested({signatures: [{name: 'Hammish Mitchell', guid: '123'}, {name: 'Someone Somewhere', guid: '123'}, {name: 'Mary White', guid: '123'}, {name: 'John Black', guid: '123'}], header: this.strRequested})); - // this.cntValidSign.html(this.templateValid({signatures: [{name: 'Hammish Mitchell', guid: '123', date: '18/05/2017'}, {name: 'Someone Somewhere', guid: '345', date: '18/05/2017'}], header: this.strValid})); - // this.cntInvalidSign.html(this.templateValid({signatures: [{name: 'Mary White', guid: '111', date: '18/05/2017'}, {name: 'John Black', guid: '456', date: '18/05/2017'}], header: this.strInvalid})); this.$linksSign = $('.signature-sign-link', this.$el); var width = this.$linksSign.width(); @@ -282,6 +282,54 @@ define([ this.api.asc_ViewCertificate(target.attr('data-value')); }, + onDocumentReady: function() { + this.ChangeSettings(); + + var me = this, + hasSigned = (me._state.validSignatures.length>0 || me._state.invalidSignatures.length>0), + hasRequested = (me._state.requestedSignatures.length>0); + + hasSigned && this.disableEditing(hasSigned); + + if (!this._state.tip && (hasSigned || hasRequested)) { + this._state.tip = new Common.UI.SynchronizeTip({ + target : SSE.getController('RightMenu').getView('RightMenu').btnSignature.btnEl, + text : (hasSigned) ? this.txtSignedDocument : this.txtRequestedSignatures, + showLink: hasSigned, + textLink: this.txtContinueEditing, + placement: 'left' + }); + this._state.tip.on({ + 'dontshowclick': function() { + me._state.tip.hide(); + // me.api.editSingedDoc(); + me.disableEditing(false); + }, + 'closeclick': function() { + me._state.tip.hide(); + } + }); + this._state.tip.show(); + } + }, + + disableEditing: function(disable) { + disable && SSE.getController('RightMenu').getView('RightMenu').clearSelection(); + SSE.getController('Toolbar').DisableToolbar(disable, disable); + SSE.getController('RightMenu').SetDisabled(disable, true); + SSE.getController('Common.Controllers.ReviewChanges').SetDisabled(disable); + SSE.getController('DocumentHolder').SetDisabled(disable); + SSE.getController('Statusbar').SetDisabled(disable); + + var leftMenu = SSE.getController('LeftMenu').leftMenu; + leftMenu.btnComments.setDisabled(disable); + var comments = SSE.getController('Common.Controllers.Comments'); + if (comments) + comments.setPreviewMode(disable); + + this.disableInsertControls(disable); + }, + strSignature: 'Signature', strInvisibleSign: 'Add invisible digital signature', strVisibleSign: 'Add visible signature', @@ -289,7 +337,10 @@ define([ strValid: 'Valid signatures', strInvalid: 'Invalid signatures', strSign: 'Sign', - strView: 'View' + strView: 'View', + txtSignedDocument: 'This document has been signed. It should not be edited.', + txtRequestedSignatures: 'This document has requested signatures.', + txtContinueEditing: 'Edit anyway' }, SSE.Views.SignatureSettings || {})); }); \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/app_dev.js b/apps/spreadsheeteditor/main/app_dev.js index 894287a0a..0690b9351 100644 --- a/apps/spreadsheeteditor/main/app_dev.js +++ b/apps/spreadsheeteditor/main/app_dev.js @@ -176,6 +176,7 @@ require([ 'spreadsheeteditor/main/app/view/PivotSettings', 'spreadsheeteditor/main/app/view/FieldSettingsDialog', 'spreadsheeteditor/main/app/view/ValueFieldSettingsDialog', + 'spreadsheeteditor/main/app/view/SignatureSettings', 'common/main/lib/util/utils', 'common/main/lib/util/LocalStorage', 'common/main/lib/controller/Fonts',