From 2f92c8174971d83c42a940f264cb367ac230b4aa Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Wed, 24 May 2017 14:55:18 +0300 Subject: [PATCH] [DE] View signatures in the right panel. --- apps/common/main/lib/util/utils.js | 3 +- .../main/app/controller/LeftMenu.js | 32 -- .../main/app/controller/RightMenu.js | 14 +- .../main/app/template/RightMenu.template | 3 + .../app/template/SignatureSettings.template | 27 ++ .../main/app/view/FileMenuPanels.js | 34 +-- .../documenteditor/main/app/view/RightMenu.js | 20 +- .../main/app/view/SignatureSettings.js | 282 ++++++++++++++++++ .../main/resources/less/rightmenu.less | 1 + 9 files changed, 356 insertions(+), 60 deletions(-) create mode 100644 apps/documenteditor/main/app/template/SignatureSettings.template create mode 100644 apps/documenteditor/main/app/view/SignatureSettings.js diff --git a/apps/common/main/lib/util/utils.js b/apps/common/main/lib/util/utils.js index da546a159..45d89d50e 100644 --- a/apps/common/main/lib/util/utils.js +++ b/apps/common/main/lib/util/utils.js @@ -101,7 +101,8 @@ Common.Utils = _.extend(new(function() { Shape : 5, Slide : 6, Chart : 7, - MailMerge : 8 + MailMerge : 8, + Signature : 9 }, isMobile = /android|avantgo|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od|ad)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent || navigator.vendor || window.opera), me = this, diff --git a/apps/documenteditor/main/app/controller/LeftMenu.js b/apps/documenteditor/main/app/controller/LeftMenu.js index f43c71051..e1797ac5e 100644 --- a/apps/documenteditor/main/app/controller/LeftMenu.js +++ b/apps/documenteditor/main/app/controller/LeftMenu.js @@ -687,44 +687,12 @@ define([ }); win.show(); - // win.setSettings(me.api.asc_getSignatureSettings()); menu.hide(); this.leftMenu.btnFile.toggle(false, true); }, addInvisibleSign: function(menu) { - /* - var me = this; - if (_.isUndefined(me.fontStore)) { - me.fontStore = new Common.Collections.Fonts(); - var fonts = DE.getController('Toolbar').getView('Toolbar').cmbFontName.store.toJSON(); - var arr = []; - _.each(fonts, function(font, index){ - if (!font.cloneid) { - arr.push(_.clone(font)); - } - }); - me.fontStore.add(arr); - } - var win = new DE.Views.SignDialog({ - api: me.api, - signType: 'visible', - fontStore: me.fontStore, - handler: function(dlg, result) { - if (result == 'ok') { - var props = dlg.getSettings(); - me.api.asc_Sign(props.certificateId, 'guid', props.images[0], props.images[1]); - } - Common.NotificationCenter.trigger('edit:complete'); - } - }); - win.show(); - - menu.hide(); - this.leftMenu.btnFile.toggle(false, true); -*/ - var me = this, win = new DE.Views.SignDialog({ api: me.api, diff --git a/apps/documenteditor/main/app/controller/RightMenu.js b/apps/documenteditor/main/app/controller/RightMenu.js index 67e8afae1..fa2db4cce 100644 --- a/apps/documenteditor/main/app/controller/RightMenu.js +++ b/apps/documenteditor/main/app/controller/RightMenu.js @@ -79,6 +79,7 @@ define([ this._settings[Common.Utils.documentSettingsType.TextArt] = {panelId: "id-textart-settings", panel: rightMenu.textartSettings, btn: rightMenu.btnTextArt, hidden: 1, locked: false}; this._settings[Common.Utils.documentSettingsType.Chart] = {panelId: "id-chart-settings", panel: rightMenu.chartSettings, btn: rightMenu.btnChart, hidden: 1, locked: false}; this._settings[Common.Utils.documentSettingsType.MailMerge] = {panelId: "id-mail-merge-settings", panel: rightMenu.mergeSettings, btn: rightMenu.btnMailMerge, hidden: 1, props: {}, locked: false}; + this._settings[Common.Utils.documentSettingsType.Signature] = {panelId: "id-signature-settings", panel: rightMenu.signatureSettings, btn: rightMenu.btnSignature, hidden: 0, props: {}, locked: false}; }, setApi: function(api) { @@ -96,7 +97,7 @@ define([ var panel = this._settings[type].panel; var props = this._settings[type].props; if (props && panel) - panel.ChangeSettings.call(panel, (type==Common.Utils.documentSettingsType.MailMerge) ? undefined : props); + panel.ChangeSettings.call(panel, (type==Common.Utils.documentSettingsType.MailMerge || type==Common.Utils.documentSettingsType.Signature) ? undefined : props); } else if (minimized && type==Common.Utils.documentSettingsType.MailMerge) { this.rightmenu.mergeSettings.disablePreviewMode(); } @@ -112,13 +113,14 @@ define([ in_equation = false, needhide = true; for (var i=0; i
+
+
@@ -27,5 +29,6 @@ +
\ No newline at end of file diff --git a/apps/documenteditor/main/app/template/SignatureSettings.template b/apps/documenteditor/main/app/template/SignatureSettings.template new file mode 100644 index 000000000..5a4fa0157 --- /dev/null +++ b/apps/documenteditor/main/app/template/SignatureSettings.template @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ +
\ No newline at end of file diff --git a/apps/documenteditor/main/app/view/FileMenuPanels.js b/apps/documenteditor/main/app/view/FileMenuPanels.js index d81eedd18..34c85083a 100644 --- a/apps/documenteditor/main/app/view/FileMenuPanels.js +++ b/apps/documenteditor/main/app/view/FileMenuPanels.js @@ -1090,7 +1090,6 @@ define([ template: _.template([ '', - '', '', '', '
', @@ -1106,23 +1105,23 @@ define([ this.templateRequested = _.template([ '', '', - '<% _.each(signatures, function(item) { %>', - '', - '', - '', - '<% }); %>', + '<% _.each(signatures, function(item) { %>', + '', + '', + '', + '<% }); %>', '
<%= Common.Utils.String.htmlEncode(item) %>
<%= Common.Utils.String.htmlEncode(item) %>
' ].join('')); this.templateValid = _.template([ '', - '', - '<% _.each(signatures, function(item) { %>', - '', - '', - '', - '', - '<% }); %>', + '
<%= Common.Utils.String.htmlEncode(item.name) %><%= Common.Utils.String.htmlEncode(item.date) %>
', + '<% _.each(signatures, function(item) { %>', + '', + '', + '', + '', + '<% }); %>', '
<%= Common.Utils.String.htmlEncode(item.name) %><%= Common.Utils.String.htmlEncode(item.date) %>
' ].join('')); }, @@ -1130,11 +1129,6 @@ define([ render: function() { $(this.el).html(this.template({scope: this})); - this.btnFinal = new Common.UI.Button({ - el: '#fms-btn-final' - }); - this.btnFinal.on('click', _.bind(this.markAsFinal, this)); - this.btnAddInvisibleSign = new Common.UI.Button({ el: '#fms-btn-invisible-sign' }); @@ -1173,9 +1167,6 @@ define([ return this; }, - markAsFinal: function() { - }, - addInvisibleSign: function() { if (this.menu) this.menu.fireEvent('signature:invisible', [this.menu]); @@ -1208,7 +1199,6 @@ define([ }, strProtect: 'Protect Document', - strMarkAsFinal: 'Mark as final', strInvisibleSign: 'Add invisible digital signature', strVisibleSign: 'Add visible signature', strRequested: 'Requested signatures', diff --git a/apps/documenteditor/main/app/view/RightMenu.js b/apps/documenteditor/main/app/view/RightMenu.js index 0d52aace0..d3ff6c463 100644 --- a/apps/documenteditor/main/app/view/RightMenu.js +++ b/apps/documenteditor/main/app/view/RightMenu.js @@ -57,6 +57,7 @@ define([ 'documenteditor/main/app/view/ShapeSettings', 'documenteditor/main/app/view/MailMergeSettings', 'documenteditor/main/app/view/TextArtSettings', + 'documenteditor/main/app/view/SignatureSettings', 'common/main/lib/component/Scroller' ], function (menuTemplate, $, _, Backbone) { 'use strict'; @@ -194,6 +195,21 @@ define([ this.mergeSettings = new DE.Views.MailMergeSettings(); } + if (mode && mode.isDesktopApp) { + this.btnSignature = new Common.UI.Button({ + hint: this.txtSignatureSettings, + asctype: Common.Utils.documentSettingsType.Signature, + enableToggle: true, + disabled: true, + toggleGroup: 'tabpanelbtnsGroup' + }); + this._settings[Common.Utils.documentSettingsType.Signature] = {panel: "id-signature-settings", btn: this.btnSignature}; + + this.btnSignature.el = $('#id-right-menu-signature'); this.btnSignature.render().setVisible(true); + this.btnSignature.on('click', _.bind(this.onBtnMenuClick, this)); + this.signatureSettings = new DE.Views.SignatureSettings(); + } + if (_.isUndefined(this.scroller)) { this.scroller = new Common.UI.Scroller({ el: $(this.el).find('.right-panel'), @@ -223,6 +239,7 @@ define([ this.shapeSettings.setApi(api).on('editcomplete', _.bind( fire, this)); this.textartSettings.setApi(api).on('editcomplete', _.bind( fire, this)); if (this.mergeSettings) this.mergeSettings.setApi(api).on('editcomplete', _.bind( fire, this)); + if (this.signatureSettings) this.signatureSettings.setApi(api).on('editcomplete', _.bind( fire, this)); }, setMode: function(mode) { @@ -303,6 +320,7 @@ define([ txtShapeSettings: 'Shape Settings', txtTextArtSettings: 'Text Art Settings', txtChartSettings: 'Chart Settings', - txtMailMergeSettings: 'Mail Merge Settings' + txtMailMergeSettings: 'Mail Merge Settings', + txtSignatureSettings: 'Signature Settings' }, DE.Views.RightMenu || {})); }); \ No newline at end of file diff --git a/apps/documenteditor/main/app/view/SignatureSettings.js b/apps/documenteditor/main/app/view/SignatureSettings.js new file mode 100644 index 000000000..e21122bcb --- /dev/null +++ b/apps/documenteditor/main/app/view/SignatureSettings.js @@ -0,0 +1,282 @@ +/* + * + * (c) Copyright Ascensio System Limited 2010-2017 + * + * 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 Lubanas st. 125a-25, Riga, Latvia, + * EU, LV-1021. + * + * 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 + * +*/ +/** + * SignatureSettings.js + * + * Created by Julia Radzhabova on 5/24/17 + * Copyright (c) 2017 Ascensio System SIA. All rights reserved. + * + */ + +define([ + 'text!documenteditor/main/app/template/SignatureSettings.template', + 'jquery', + 'underscore', + 'backbone', + 'common/main/lib/component/Button', + 'documenteditor/main/app/view/SignSettingsDialog', + 'documenteditor/main/app/view/SignDialog' +], function (menuTemplate, $, _, Backbone) { + 'use strict'; + + DE.Views.SignatureSettings = Backbone.View.extend(_.extend({ + el: '#id-signature-settings', + + // Compile our stats template + template: _.template(menuTemplate), + + // Delegated events for creating new items, and clearing completed ones. + events: { + }, + + options: { + alias: 'SignatureSettings' + }, + + initialize: function () { + var me = this; + + this._initSettings = true; + + this._state = { + DisabledControls: false, + requestedSignatures: undefined, + validSignatures: undefined, + invalidSignatures: undefined + }; + this._locked = false; + this.lockedControls = []; + + this._noApply = false; + this._originalProps = null; + + this.templateRequested = _.template([ + '', + '', + '', + '<% _.each(signatures, function(item) { %>', + '', + '', + '', + '', + '<% }); %>', + '
', + '' + ].join('')); + + this.templateValid = _.template([ + '', + '', + '', + '<% _.each(signatures, function(item) { %>', + '', + '', + '', + '', + '', + '<% }); %>', + '
<%= Common.Utils.String.htmlEncode(item.name) %>
<%= Common.Utils.String.htmlEncode(item.date) %>
', + '' + ].join('')); + + this.render(); + }, + + render: function () { + this.$el.html(this.template({ + scope: this + })); + + this.btnAddInvisibleSign = new Common.UI.Button({ + el: this.$el.find('#signature-invisible-sign') + }); + this.btnAddInvisibleSign.on('click', _.bind(this.addInvisibleSign, this)); + this.lockedControls.push(this.btnAddInvisibleSign); + + this.btnAddVisibleSign = new Common.UI.Button({ + el: this.$el.find('#signature-visible-sign') + }); + this.btnAddVisibleSign.on('click', _.bind(this.addVisibleSign, this)); + this.lockedControls.push(this.btnAddVisibleSign); + + this.cntRequestedSign = $('#signature-requested-sign'); + this.cntValidSign = $('#signature-valid-sign'); + this.cntInvalidSign = $('#signature-invalid-sign'); + }, + + setApi: function(api) { + this.api = api; + if (this.api) { + this.api.asc_registerCallback('asc_onUpdateSignatures', _.bind(this.onUpdateSignatures, 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()); + } + }, + + setLocked: function (locked) { + this._locked = locked; + }, + + disableControls: function(disable) { + if (this._initSettings) return; + + if (this._state.DisabledControls!==disable) { + this._state.DisabledControls = disable; + _.each(this.lockedControls, function(item) { + item.setDisabled(disable); + }); + this.$linksSign.toggleClass('disabled', disable); + this.$linksView.toggleClass('disabled', disable); + } + }, + + setMode: function(mode) { + this.mode = mode; + }, + + onUpdateSignatures: function(valid, requested){ + var me = this; + me._state.requestedSignatures = []; + me._state.validSignatures = []; + me._state.invalidSignatures = []; + + _.each(requested, function(item, index){ + me._state.requestedSignatures.push({name: item.asc_getSigner1(), guid: item.asc_getGuid()}); + }); + _.each(valid, function(item, index){ + var sign = {name: item.asc_getSigner1(), guid: item.asc_getGuid(), date: '18/05/2017'}; + (item.asc_getValid()==0) ? me._state.validSignatures.push(sign) : me._state.invalidSignatures.push(sign); + }); + 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); + this.$linksView = $('.signature-view-link', this.$el); + this.$el.on('click', '.signature-sign-link', _.bind(this.onSign, this)); + this.$el.on('click', '.signature-view-link', _.bind(this.onViewSignature, this)); + }, + + addVisibleSign: function(btn) { + var me = this, + win = new DE.Views.SignSettingsDialog({ + handler: function(dlg, result) { + if (result == 'ok') { + me.api.asc_AddSignatureLine2(dlg.getSettings()); + } + me.fireEvent('editcomplete', me); + } + }); + + win.show(); + }, + + addInvisibleSign: function(btn) { + var me = this, + win = new DE.Views.SignDialog({ + api: me.api, + signType: 'invisible', + handler: function(dlg, result) { + if (result == 'ok') { + var props = dlg.getSettings(); + me.api.asc_Sign(props.certificateId); + } + me.fireEvent('editcomplete', me); + } + }); + + win.show(); + }, + + onSign: function(event) { + var me = this, + guid = $(event.currentTarget).attr('data-value'); + + if (_.isUndefined(me.fontStore)) { + me.fontStore = new Common.Collections.Fonts(); + var fonts = DE.getController('Toolbar').getView('Toolbar').cmbFontName.store.toJSON(); + var arr = []; + _.each(fonts, function(font, index){ + if (!font.cloneid) { + arr.push(_.clone(font)); + } + }); + me.fontStore.add(arr); + } + + var win = new DE.Views.SignDialog({ + api: me.api, + signType: 'visible', + fontStore: me.fontStore, + handler: function(dlg, result) { + if (result == 'ok') { + var props = dlg.getSettings(); + me.api.asc_Sign(props.certificateId, guid, props.images[0], props.images[1]); + } + me.fireEvent('editcomplete', me); + } + }); + win.show(); + }, + + onViewSignature: function(guid) { + var guid = $(event.currentTarget).attr('data-value'); + this.api.asc_ViewCertificate(guid); + }, + + strSignature: 'Signature', + strInvisibleSign: 'Add invisible digital signature', + strVisibleSign: 'Add visible signature', + strRequested: 'Requested signatures', + strValid: 'Valid signatures', + strInvalid: 'Invalid signatures', + strSign: 'Sign', + strView: 'View' + + }, DE.Views.SignatureSettings || {})); +}); \ No newline at end of file diff --git a/apps/documenteditor/main/resources/less/rightmenu.less b/apps/documenteditor/main/resources/less/rightmenu.less index 2983c04f0..717b2b5f7 100644 --- a/apps/documenteditor/main/resources/less/rightmenu.less +++ b/apps/documenteditor/main/resources/less/rightmenu.less @@ -105,6 +105,7 @@ /*menuTextArt*/ .button-normal-icon(btn-menu-textart, 54, @toolbar-icon-size); +.button-normal-icon(btn-menu-signature, 54, @toolbar-icon-size); .button-otherstates-icon2(btn-category, @toolbar-icon-size);