Merge pull request #41 from ONLYOFFICE/feature/v5.0.6-signature

Feature/v5.0.6 signature
This commit is contained in:
Julia Radzhabova 2017-12-11 14:31:35 +03:00 committed by GitHub
commit 5612ec41f8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
101 changed files with 4928 additions and 202 deletions

View file

@ -180,7 +180,8 @@ define([
menu : null, menu : null,
disabled : false, disabled : false,
pressed : false, pressed : false,
split : false split : false,
visible : true
}, },
template: _.template([ template: _.template([
@ -238,6 +239,7 @@ define([
me.split = me.options.split; me.split = me.options.split;
me.toggleGroup = me.options.toggleGroup; me.toggleGroup = me.options.toggleGroup;
me.disabled = me.options.disabled; me.disabled = me.options.disabled;
me.visible = me.options.visible;
me.pressed = me.options.pressed; me.pressed = me.options.pressed;
me.caption = me.options.caption; me.caption = me.options.caption;
me.template = me.options.template || me.template; me.template = me.options.template || me.template;
@ -466,6 +468,10 @@ define([
me.setDisabled(!(me.disabled=false)); me.setDisabled(!(me.disabled=false));
} }
if (!me.visible) {
me.setVisible(me.visible);
}
me.trigger('render:after', me); me.trigger('render:after', me);
return this; return this;
@ -550,6 +556,11 @@ define([
setVisible: function(visible) { setVisible: function(visible) {
if (this.cmpEl) this.cmpEl.toggleClass('hidden', !visible); if (this.cmpEl) this.cmpEl.toggleClass('hidden', !visible);
this.visible = visible;
},
isVisible: function() {
return (this.cmpEl) ? this.cmpEl.is(":visible") : $(this.el).is(":visible");
}, },
updateHint: function(hint) { updateHint: function(hint) {

View file

@ -41,7 +41,8 @@ define([
Common.UI.ColorButton = Common.UI.Button.extend({ Common.UI.ColorButton = Common.UI.Button.extend({
options : { options : {
hint: false, hint: false,
enableToggle: false enableToggle: false,
visible: true
}, },
template: _.template([ template: _.template([

View file

@ -113,6 +113,8 @@ define([
this._input.on('keyup', _.bind(this.onInputKeyUp, this)); this._input.on('keyup', _.bind(this.onInputKeyUp, this));
this._input.on('keydown', _.bind(this.onInputKeyDown, this)); this._input.on('keydown', _.bind(this.onInputKeyDown, this));
this._modalParents = this.cmpEl.closest('.asc-window');
return this; return this;
}, },
@ -319,6 +321,8 @@ define([
var name = (_.isFunction(font.get_Name) ? font.get_Name() : font.asc_getName()); var name = (_.isFunction(font.get_Name) ? font.get_Name() : font.asc_getName());
if (this.getRawValue() !== name) { if (this.getRawValue() !== name) {
if (this._modalParents.length > 0) return;
var record = this.store.findWhere({ var record = this.store.findWhere({
name: name name: name
}); });

View file

@ -57,7 +57,7 @@ define([
if ( sv || opts == 'right' ) { if ( sv || opts == 'right' ) {
$boxTabs.animate({scrollLeft: opts == 'left' ? sv - 100 : sv + 100}, 200); $boxTabs.animate({scrollLeft: opts == 'left' ? sv - 100 : sv + 100}, 200);
} }
} };
function onTabDblclick(e) { function onTabDblclick(e) {
this.fireEvent('change:compact', [$(e.target).data('tab')]); this.fireEvent('change:compact', [$(e.target).data('tab')]);

View file

@ -43,7 +43,8 @@ define([
options : { options : {
target : $(document.body), target : $(document.body),
text : '', text : '',
placement: 'right' placement: 'right',
showLink: true
}, },
template: _.template([ template: _.template([
@ -54,7 +55,9 @@ define([
'<div class="tip-text" style="width: 260px;"><%= scope.text %></div>', '<div class="tip-text" style="width: 260px;"><%= scope.text %></div>',
'<div class="close img-commonctrl"></div>', '<div class="close img-commonctrl"></div>',
'</div>', '</div>',
'<div class="show-link"><label><%= scope.textDontShow %></label></div>', '<% if ( scope.showLink ) { %>',
'<div class="show-link"><label><%= scope.textLink %></label></div>',
'<% } %>',
'</div>', '</div>',
'</div>' '</div>'
].join('')), ].join('')),
@ -65,7 +68,9 @@ define([
Common.UI.BaseView.prototype.initialize.call(this, options); Common.UI.BaseView.prototype.initialize.call(this, options);
this.target = this.options.target; this.target = this.options.target;
this.text = !_.isEmpty(this.options.text) ? this.options.text : this.textSynchronize; this.text = !_.isEmpty(this.options.text) ? this.options.text : this.textSynchronize;
this.textLink = !_.isEmpty(this.options.textLink) ? this.options.textLink : this.textDontShow;
this.placement = this.options.placement; this.placement = this.options.placement;
this.showLink = this.options.showLink;
}, },
render: function() { render: function() {
@ -93,10 +98,18 @@ define([
if (this.cmpEl) this.cmpEl.hide(); if (this.cmpEl) this.cmpEl.hide();
}, },
close: function() {
if (this.cmpEl) this.cmpEl.remove();
},
applyPlacement: function () { applyPlacement: function () {
var showxy = this.target.offset(); var showxy = this.target.offset();
(this.placement == 'top') ? this.cmpEl.css({bottom : Common.Utils.innerHeight() - showxy.top + 'px', right: Common.Utils.innerWidth() - showxy.left - this.target.width()/2 + 'px'}) if (this.placement == 'top')
: this.cmpEl.css({top : showxy.top + this.target.height()/2 + 'px', left: showxy.left + this.target.width() + 'px'}); this.cmpEl.css({bottom : Common.Utils.innerHeight() - showxy.top + 'px', right: Common.Utils.innerWidth() - showxy.left - this.target.width()/2 + 'px'});
else if (this.placement == 'left')
this.cmpEl.css({top : showxy.top + this.target.height()/2 + 'px', right: Common.Utils.innerWidth() - showxy.left - 5 + 'px'});
else // right
this.cmpEl.css({top : showxy.top + this.target.height()/2 + 'px', left: showxy.left + this.target.width() + 'px'});
}, },
isVisible: function() { isVisible: function() {

View file

@ -60,7 +60,7 @@ define([
height : '100%', height : '100%',
documentType: 'spreadsheet', documentType: 'spreadsheet',
document : { document : {
url : '_offline_', url : '_chart_',
permissions : { permissions : {
edit : true, edit : true,
download: false download: false

View file

@ -60,7 +60,7 @@ define([
height : '100%', height : '100%',
documentType: 'spreadsheet', documentType: 'spreadsheet',
document : { document : {
url : '_offline_', url : '_chart_',
permissions : { permissions : {
edit : true, edit : true,
download: false download: false

View file

@ -192,13 +192,22 @@ define([
if ( me.$toolbarPanelPlugins ) { if ( me.$toolbarPanelPlugins ) {
me.$toolbarPanelPlugins.empty(); me.$toolbarPanelPlugins.empty();
var _group = $('<div class="group"></div>'); var _group = $('<div class="group"></div>'),
rank = -1;
collection.each(function (model) { collection.each(function (model) {
var new_rank = model.get('groupRank');
if (new_rank!==rank && rank>-1) {
_group.appendTo(me.$toolbarPanelPlugins);
$('<div class="separator long"></div>').appendTo(me.$toolbarPanelPlugins);
_group = $('<div class="group"></div>');
}
var btn = me.panelPlugins.createPluginButton(model); var btn = me.panelPlugins.createPluginButton(model);
if (btn) { if (btn) {
var $slot = $('<span class="slot"></span>').appendTo(_group); var $slot = $('<span class="slot"></span>').appendTo(_group);
btn.render($slot); btn.render($slot);
} }
rank = new_rank;
}); });
_group.appendTo(me.$toolbarPanelPlugins); _group.appendTo(me.$toolbarPanelPlugins);
} }

View file

@ -0,0 +1,252 @@
/*
*
* (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
*
*/
/**
* Protection.js
*
* Created by Julia Radzhabova on 14.11.2017
* Copyright (c) 2017 Ascensio System SIA. All rights reserved.
*
*/
if (Common === undefined)
var Common = {};
Common.Controllers = Common.Controllers || {};
define([
'core',
'common/main/lib/view/Protection',
'common/main/lib/view/PasswordDialog',
'common/main/lib/view/SignDialog',
'common/main/lib/view/SignSettingsDialog'
], function () {
'use strict';
Common.Controllers.Protection = Backbone.Controller.extend(_.extend({
models : [],
collections : [
],
views : [
'Common.Views.Protection'
],
sdkViewName : '#id_main',
initialize: function () {
this.addListeners({
'Common.Views.Protection': {
'protect:password': _.bind(this.onPasswordClick, this),
'protect:signature': _.bind(this.onSignatureClick, this)
}
});
},
onLaunch: function () {
this._state = {};
Common.NotificationCenter.on('app:ready', this.onAppReady.bind(this));
Common.NotificationCenter.on('api:disconnect', _.bind(this.onCoAuthoringDisconnect, this));
},
setConfig: function (data, api) {
this.setApi(api);
if (data) {
this.sdkViewName = data['sdkviewname'] || this.sdkViewName;
}
},
setApi: function (api) {
if (api) {
this.api = api;
if (this.appConfig.isDesktopApp && this.appConfig.isOffline) {
this.api.asc_registerCallback('asc_onDocumentPassword', _.bind(this.onDocumentPassword, this));
if (this.appConfig.canProtect) {
Common.NotificationCenter.on('protect:sign', _.bind(this.onSignatureRequest, this));
Common.NotificationCenter.on('protect:signature', _.bind(this.onSignatureClick, this));
this.api.asc_registerCallback('asc_onSignatureClick', _.bind(this.onSignatureSign, this));
this.api.asc_registerCallback('asc_onUpdateSignatures', _.bind(this.onApiUpdateSignatures, this));
}
}
this.api.asc_registerCallback('asc_onCoAuthoringDisconnect',_.bind(this.onCoAuthoringDisconnect, this));
}
},
setMode: function(mode) {
this.appConfig = mode;
this.view = this.createView('Common.Views.Protection', {
mode: mode
});
return this;
},
onDocumentPassword: function(hasPassword) {
this.view && this.view.onDocumentPassword(hasPassword);
},
SetDisabled: function(state, canProtect) {
this.view && this.view.SetDisabled(state, canProtect);
},
onPasswordClick: function(btn, opts){
switch (opts) {
case 'add': this.addPassword(); break;
case 'delete': this.deletePassword(); break;
}
Common.NotificationCenter.trigger('edit:complete', this.view);
},
onSignatureRequest: function(guid){
this.api.asc_RequestSign(guid);
},
onSignatureClick: function(type, signed, guid){
switch (type) {
case 'invisible': this.onSignatureRequest('unvisibleAdd'); break;
case 'visible': this.addVisibleSignature(signed, guid); break;
}
},
createToolbarPanel: function() {
return this.view.getPanel();
},
getView: function(name) {
return !name && this.view ?
this.view : Backbone.Controller.prototype.getView.call(this, name);
},
onAppReady: function (config) {
},
addPassword: function() {
var me = this,
win = new Common.Views.PasswordDialog({
api: me.api,
signType: 'invisible',
handler: function(result, props) {
if (result == 'ok') {
me.api.asc_setCurrentPassword(props);
}
Common.NotificationCenter.trigger('edit:complete');
}
});
win.show();
},
deletePassword: function() {
this.api.asc_resetPassword();
},
addInvisibleSignature: function() {
var me = this,
win = new Common.Views.SignDialog({
api: me.api,
signType: 'invisible',
handler: function(dlg, result) {
if (result == 'ok') {
var props = dlg.getSettings();
me.api.asc_Sign(props.certificateId);
}
Common.NotificationCenter.trigger('edit:complete');
}
});
win.show();
},
addVisibleSignature: function(signed, guid) {
var me = this,
win = new Common.Views.SignSettingsDialog({
type: (!signed) ? 'edit' : 'view',
handler: function(dlg, result) {
if (!signed && result == 'ok') {
me.api.asc_AddSignatureLine2(dlg.getSettings());
}
Common.NotificationCenter.trigger('edit:complete');
}
});
win.show();
if (guid)
win.setSettings(this.api.asc_getSignatureSetup(guid));
},
signVisibleSignature: function(guid, width, height) {
var me = this;
if (_.isUndefined(me.fontStore)) {
me.fontStore = new Common.Collections.Fonts();
var fonts = me.getApplication().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 Common.Views.SignDialog({
api: me.api,
signType: 'visible',
fontStore: me.fontStore,
signSize: {width: width || 0, height: height || 0},
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();
},
onSignatureSign: function(guid, width, height, isVisible) {
(isVisible) ? this.signVisibleSignature(guid, width, height) : this.addInvisibleSignature();
},
onApiUpdateSignatures: function(valid, requested){
this.SetDisabled(valid && valid.length>0, true);// can add invisible signature
},
onCoAuthoringDisconnect: function() {
this.SetDisabled(true);
}
}, Common.Controllers.Protection || {}));
});

View file

@ -535,6 +535,8 @@ define([
if (comments) if (comments)
comments.setPreviewMode(disable); comments.setPreviewMode(disable);
leftMenu.getMenu('file').miProtect.setDisabled(disable);
if (this.view) { if (this.view) {
this.view.$el.find('.no-group-mask').css('opacity', 1); this.view.$el.find('.no-group-mask').css('opacity', 1);
} }

View file

@ -84,7 +84,9 @@ define([
pluginObj: undefined, pluginObj: undefined,
allowSelected: false, allowSelected: false,
selected: false, selected: false,
visible: true visible: true,
groupName: '',
groupRank: 0
} }
} }
}); });

View file

@ -125,6 +125,9 @@ define(['gateway'], function () {
setKeysFilter: function(value) { setKeysFilter: function(value) {
_filter = value; _filter = value;
}, },
getKeysFilter: function() {
return _filter;
},
itemExists: _getItemExists, itemExists: _getItemExists,
sync: _refresh, sync: _refresh,
save: _save save: _save

View file

@ -101,7 +101,8 @@ Common.Utils = _.extend(new(function() {
Shape : 5, Shape : 5,
Slide : 6, Slide : 6,
Chart : 7, 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), 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, me = this,

View file

@ -0,0 +1,170 @@
/*
*
* (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
*
*/
/**
* OpenDialog.js
*
* Select Codepage for open CSV/TXT format file.
*
* Created by Alexey.Musinov on 29/04/14
* Copyright (c) 2014 Ascensio System SIA. All rights reserved.
*
*/
define([
'common/main/lib/component/Window'
], function () {
'use strict';
Common.Views.PasswordDialog = Common.UI.Window.extend(_.extend({
applyFunction: undefined,
initialize : function (options) {
var t = this,
_options = {};
_.extend(_options, {
closable: false,
width : 350,
height : 220,
header : true,
cls : 'modal-dlg',
contentTemplate : '',
title : t.txtTitle
}, options);
this.template = options.template || [
'<div class="box" style="height:' + (_options.height - 85) + 'px;">',
'<div class="input-row" style="margin-bottom: 10px;">',
'<label>' + t.txtDescription + '</label>',
'</div>',
'<div class="input-row">',
'<label>' + t.txtPassword + '</label>',
'</div>',
'<div id="id-password-txt" class="input-row" style="margin-bottom: 5px;"></div>',
'<div class="input-row">',
'<label>' + t.txtRepeat + '</label>',
'</div>',
'<div id="id-repeat-txt" class="input-row"></div>',
'</div>',
'<div class="separator horizontal"/>',
'<div class="footer center">',
'<button class="btn normal dlg-btn primary" result="ok" style="margin-right:10px;">' + t.okButtonText + '</button>',
'<button class="btn normal dlg-btn" result="cancel">' + t.cancelButtonText + '</button>',
'</div>'
].join('');
this.handler = options.handler;
this.settings = options.settings;
_options.tpl = _.template(this.template)(_options);
Common.UI.Window.prototype.initialize.call(this, _options);
},
render: function () {
Common.UI.Window.prototype.render.call(this);
if (this.$window) {
var me = this;
this.$window.find('.tool').hide();
this.$window.find('.dlg-btn').on('click', _.bind(this.onBtnClick, this));
this.inputPwd = new Common.UI.InputField({
el: $('#id-password-txt'),
type: 'password',
allowBlank : false,
style : 'width: 100%;',
validateOnBlur: false
});
this.repeatPwd = new Common.UI.InputField({
el: $('#id-repeat-txt'),
type: 'password',
allowBlank : false,
style : 'width: 100%;',
validateOnBlur: false,
validation : function(value) {
return me.txtIncorrectPwd;
}
});
this.$window.find('input').on('keypress', _.bind(this.onKeyPress, this));
}
},
show: function() {
Common.UI.Window.prototype.show.apply(this, arguments);
var me = this;
setTimeout(function(){
me.inputPwd.cmpEl.find('input').focus();
}, 500);
},
onKeyPress: function(event) {
if (event.keyCode == Common.UI.Keys.RETURN) {
this._handleInput('ok');
}
},
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.cmpEl.find('input').focus();
return;
}
if (this.inputPwd.getValue() !== this.repeatPwd.getValue()) {
this.repeatPwd.checkValidate();
this.repeatPwd.cmpEl.find('input').focus();
return;
}
}
this.handler.call(this, state, this.inputPwd.getValue());
}
this.close();
},
okButtonText : "OK",
cancelButtonText : "Cancel",
txtTitle : "Set Password",
txtPassword : "Password",
txtDescription : "A Password is required to open this document",
txtRepeat: 'Repeat password',
txtIncorrectPwd: 'Confirmation password is not identical'
}, Common.Views.PasswordDialog || {}));
});

View file

@ -331,6 +331,11 @@ define([
return btn; return btn;
}, },
hide: function () {
Common.UI.BaseView.prototype.hide.call(this,arguments);
this.fireEvent('hide', this );
},
strPlugins: 'Plugins', strPlugins: 'Plugins',
textLoading: 'Loading', textLoading: 'Loading',
textStart: 'Start', textStart: 'Start',

View file

@ -0,0 +1,314 @@
/*
*
* (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
*
*/
/**
* Protection.js
*
* Created by Julia Radzhabova on 14.11.2017
* Copyright (c) 2017 Ascensio System SIA. All rights reserved.
*
*/
if (Common === undefined)
var Common = {};
Common.Views = Common.Views || {};
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';
Common.Views.Protection = Common.UI.BaseView.extend(_.extend((function(){
var template =
'<section id="protection-panel" class="panel" data-tab="protect">' +
'<div class="group">' +
'<span id="slot-btn-add-password" class="btn-slot text x-huge"></span>' +
'<span id="slot-btn-change-password" class="btn-slot text x-huge"></span>' +
'<span id="slot-btn-signature" class="btn-slot text x-huge"></span>' +
'</div>' +
'</section>';
function setEvents() {
var me = this;
if ( me.appConfig.isDesktopApp && me.appConfig.isOffline ) {
this.btnsAddPwd.concat(this.btnsChangePwd).forEach(function(button) {
button.on('click', function (b, e) {
me.fireEvent('protect:password', [b, 'add']);
});
});
this.btnsDelPwd.forEach(function(button) {
button.on('click', function (b, e) {
me.fireEvent('protect:password', [b, 'delete']);
});
});
this.btnPwd.menu.on('item:click', function (menu, item, e) {
me.fireEvent('protect:password', [menu, item.value]);
});
if (me.appConfig.canProtect) {
if (this.btnSignature.menu)
this.btnSignature.menu.on('item:click', function (menu, item, e) {
me.fireEvent('protect:signature', [item.value, false]);
});
this.btnsInvisibleSignature.forEach(function(button) {
button.on('click', function (b, e) {
me.fireEvent('protect:signature', ['invisible']);
});
});
}
}
}
return {
options: {},
initialize: function (options) {
Common.UI.BaseView.prototype.initialize.call(this, options);
this.appConfig = options.mode;
this.btnsInvisibleSignature = [];
this.btnsAddPwd = [];
this.btnsDelPwd = [];
this.btnsChangePwd = [];
this._state = {disabled: false, hasPassword: false};
var filter = Common.localStorage.getKeysFilter();
this.appPrefix = (filter && filter.length) ? filter.split(',')[0] : '';
if ( this.appConfig.isDesktopApp && this.appConfig.isOffline ) {
this.btnAddPwd = new Common.UI.Button({
cls: 'btn-toolbar x-huge icon-top',
iconCls: 'btn-ic-protect',
caption: this.txtEncrypt
});
this.btnsAddPwd.push(this.btnAddPwd);
this.btnPwd = new Common.UI.Button({
cls: 'btn-toolbar x-huge icon-top',
iconCls: 'btn-ic-protect',
caption: this.txtEncrypt,
menu: true,
visible: false
});
if (this.appConfig.canProtect) {
this.btnSignature = new Common.UI.Button({
cls: 'btn-toolbar x-huge icon-top',
iconCls: 'btn-ic-signature',
caption: this.txtSignature,
menu: (this.appPrefix !== 'pe-')
});
if (!this.btnSignature.menu)
this.btnsInvisibleSignature.push(this.btnSignature);
}
}
Common.NotificationCenter.on('app:ready', this.onAppReady.bind(this));
},
render: function (el) {
this.boxSdk = $('#editor_sdk');
if ( el ) el.html( this.getPanel() );
return this;
},
onAppReady: function (config) {
var me = this;
(new Promise(function (accept, reject) {
accept();
})).then(function(){
if ( config.isDesktopApp && config.isOffline) {
me.btnAddPwd.updateHint(me.hintAddPwd);
me.btnPwd.updateHint(me.hintPwd);
me.btnPwd.setMenu(
new Common.UI.Menu({
items: [
{
caption: me.txtChangePwd,
value: 'add'
},
{
caption: me.txtDeletePwd,
value: 'delete'
}
]
})
);
if (me.btnSignature) {
me.btnSignature.updateHint((me.btnSignature.menu) ? me.hintSignature : me.txtInvisibleSignature);
me.btnSignature.menu && me.btnSignature.setMenu(
new Common.UI.Menu({
items: [
{
caption: me.txtInvisibleSignature,
value: 'invisible'
},
{
caption: me.txtSignatureLine,
value: 'visible',
disabled: me._state.disabled
}
]
})
);
}
Common.NotificationCenter.trigger('tab:visible', 'protect', true);
}
setEvents.call(me);
});
},
getPanel: function () {
this.$el = $(_.template(template)( {} ));
if ( this.appConfig.isDesktopApp && this.appConfig.isOffline ) {
this.btnAddPwd.render(this.$el.find('#slot-btn-add-password'));
this.btnPwd.render(this.$el.find('#slot-btn-change-password'));
this.btnSignature && this.btnSignature.render(this.$el.find('#slot-btn-signature'));
}
return this.$el;
},
show: function () {
Common.UI.BaseView.prototype.show.call(this);
this.fireEvent('show', this);
},
getButton: function(type, parent) {
if ( type == 'signature' ) {
var button = new Common.UI.Button({
cls: 'btn-text-default',
style: 'width: 100%;',
caption: this.txtInvisibleSignature,
disabled: this._state.disabled
});
this.btnsInvisibleSignature.push(button);
return button;
} else if ( type == 'add-password' ) {
var button = new Common.UI.Button({
cls: 'btn-text-default',
style: 'width: 100%;',
caption: this.txtAddPwd,
disabled: this._state.disabled,
visible: !this._state.hasPassword
});
this.btnsAddPwd.push(button);
return button;
} else if ( type == 'del-password' ) {
var button = new Common.UI.Button({
cls: 'btn-text-default',
style: 'width: 100%;',
caption: this.txtDeletePwd,
disabled: this._state.disabled,
visible: this._state.hasPassword
});
this.btnsDelPwd.push(button);
return button;
} else if ( type == 'change-password' ) {
var button = new Common.UI.Button({
cls: 'btn-text-default',
style: 'width: 100%;',
caption: this.txtChangePwd,
disabled: this._state.disabled,
visible: this._state.hasPassword
});
this.btnsChangePwd.push(button);
return button;
}
},
SetDisabled: function (state, canProtect) {
this._state.disabled = state;
this.btnsInvisibleSignature && this.btnsInvisibleSignature.forEach(function(button) {
if ( button ) {
button.setDisabled(state && !canProtect);
}
}, this);
if (this.btnSignature && this.btnSignature.menu) {
this.btnSignature.menu.items && this.btnSignature.menu.items[1].setDisabled(state); // disable adding signature line
this.btnSignature.setDisabled(state && !canProtect); // disable adding any signature
}
this.btnsAddPwd.concat(this.btnsDelPwd, this.btnsChangePwd).forEach(function(button) {
if ( button ) {
button.setDisabled(state);
}
}, this);
},
onDocumentPassword: function (hasPassword) {
this._state.hasPassword = hasPassword;
this.btnsAddPwd && this.btnsAddPwd.forEach(function(button) {
if ( button ) {
button.setVisible(!hasPassword);
}
}, this);
this.btnsDelPwd.concat(this.btnsChangePwd).forEach(function(button) {
if ( button ) {
button.setVisible(hasPassword);
}
}, this);
this.btnPwd.setVisible(hasPassword);
},
txtEncrypt: 'Encrypt',
txtSignature: 'Signature',
hintAddPwd: 'Encrypt with password',
hintPwd: 'Change or delete password',
hintSignature: 'Add digital signature or signature line',
txtChangePwd: 'Change password',
txtDeletePwd: 'Delete password',
txtAddPwd: 'Add password',
txtInvisibleSignature: 'Add digital signature',
txtSignatureLine: 'Signature line'
}
}()), Common.Views.Protection || {}));
});

View file

@ -0,0 +1,358 @@
/*
*
* (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
*
*/
/**
* SignDialog.js
*
* Created by Julia Radzhabova on 5/19/17
* Copyright (c) 2017 Ascensio System SIA. All rights reserved.
*
*/
if (Common === undefined)
var Common = {};
define([
'common/main/lib/util/utils',
'common/main/lib/component/InputField',
'common/main/lib/component/Window',
'common/main/lib/component/ComboBoxFonts'
], function () { 'use strict';
Common.Views.SignDialog = Common.UI.Window.extend(_.extend({
options: {
width: 350,
style: 'min-width: 350px;',
cls: 'modal-dlg'
},
initialize : function(options) {
_.extend(this.options, {
title: this.textTitle
}, options || {});
this.api = this.options.api;
this.signType = this.options.signType || 'invisible';
this.signSize = this.options.signSize || {width: 0, height: 0};
this.certificateId = null;
this.signObject = null;
this.fontStore = this.options.fontStore;
this.font = {
size: 11,
name: 'Arial',
bold: false,
italic: false
};
this.template = [
'<div class="box" style="height: ' + ((this.signType == 'invisible') ? '132px;' : '300px;') + '">',
'<div id="id-dlg-sign-invisible">',
'<div class="input-row">',
'<label>' + this.textPurpose + '</label>',
'</div>',
'<div id="id-dlg-sign-purpose" class="input-row"></div>',
'</div>',
'<div id="id-dlg-sign-visible">',
'<div class="input-row">',
'<label>' + this.textInputName + '</label>',
'</div>',
'<div id="id-dlg-sign-name" class="input-row" style="margin-bottom: 5px;"></div>',
'<div id="id-dlg-sign-fonts" class="input-row" style="display: inline-block;"></div>',
'<div id="id-dlg-sign-font-size" class="input-row" style="display: inline-block;margin-left: 3px;"></div>',
'<div id="id-dlg-sign-bold" style="display: inline-block;margin-left: 3px;"></div>','<div id="id-dlg-sign-italic" style="display: inline-block;margin-left: 3px;"></div>',
'<div class="input-row" style="margin-top: 10px;">',
'<label>' + this.textUseImage + '</label>',
'</div>',
'<button id="id-dlg-sign-image" class="btn btn-text-default" style="">' + this.textSelectImage + '</button>',
'<div class="input-row" style="margin-top: 10px;">',
'<label style="font-weight: bold;">' + this.textSignature + '</label>',
'</div>',
'<div style="border: 1px solid #cbcbcb;"><div id="signature-preview-img" style="width: 100%; height: 50px;position: relative;"></div></div>',
'</div>',
'<table style="margin-top: 30px;">',
'<tr>',
'<td><label style="font-weight: bold;margin-bottom: 3px;">' + this.textCertificate + '</label></td>' +
'<td rowspan="2" style="vertical-align: top; padding-left: 30px;"><button id="id-dlg-sign-change" class="btn btn-text-default" style="">' + this.textChange + '</button></td>',
'</tr>',
'<tr><td><div id="id-dlg-sign-certificate" class="hidden" style="max-width: 212px;overflow: hidden;"></td></tr>',
'</table>',
'</div>',
'<div class="footer center">',
'<button class="btn normal dlg-btn primary" result="ok" style="margin-right: 10px;">' + this.okButtonText + '</button>',
'<button class="btn normal dlg-btn" result="cancel">' + this.cancelButtonText + '</button>',
'</div>'
].join('');
this.templateCertificate = _.template([
'<label style="display: block;margin-bottom: 3px;"><%= Common.Utils.String.htmlEncode(name) %></label>',
'<label style="display: block;"><%= Common.Utils.String.htmlEncode(valid) %></label>'
].join(''));
this.options.tpl = _.template(this.template)(this.options);
Common.UI.Window.prototype.initialize.call(this, this.options);
},
render: function() {
Common.UI.Window.prototype.render.call(this);
var me = this,
$window = this.getChild();
me.inputPurpose = new Common.UI.InputField({
el : $('#id-dlg-sign-purpose'),
style : 'width: 100%;'
});
me.inputName = new Common.UI.InputField({
el : $('#id-dlg-sign-name'),
style : 'width: 100%;',
validateOnChange: true
}).on ('changing', _.bind(me.onChangeName, me));
me.cmbFonts = new Common.UI.ComboBoxFonts({
el : $('#id-dlg-sign-fonts'),
cls : 'input-group-nr',
style : 'width: 214px;',
menuCls : 'scrollable-menu',
menuStyle : 'min-width: 55px;max-height: 270px;',
store : new Common.Collections.Fonts(),
recent : 0,
hint : me.tipFontName
}).on('selected', function(combo, record) {
if (me.signObject) {
me.signObject.setText(me.inputName.getValue(), record.name, me.font.size, me.font.italic, me.font.bold);
}
me.font.name = record.name;
});
this.cmbFontSize = new Common.UI.ComboBox({
el: $('#id-dlg-sign-font-size'),
cls: 'input-group-nr',
style: 'width: 55px;',
menuCls : 'scrollable-menu',
menuStyle: 'min-width: 55px;max-height: 270px;',
hint: this.tipFontSize,
data: [
{ value: 8, displayValue: "8" },
{ value: 9, displayValue: "9" },
{ value: 10, displayValue: "10" },
{ value: 11, displayValue: "11" },
{ value: 12, displayValue: "12" },
{ value: 14, displayValue: "14" },
{ value: 16, displayValue: "16" },
{ value: 18, displayValue: "18" },
{ value: 20, displayValue: "20" },
{ value: 22, displayValue: "22" },
{ value: 24, displayValue: "24" },
{ value: 26, displayValue: "26" },
{ value: 28, displayValue: "28" },
{ value: 36, displayValue: "36" },
{ value: 48, displayValue: "48" },
{ value: 72, displayValue: "72" }
]
}).on('selected', function(combo, record) {
if (me.signObject) {
me.signObject.setText(me.inputName.getValue(), me.font.name, record.value, me.font.italic, me.font.bold);
}
me.font.size = record.value;
});
this.cmbFontSize.setValue(this.font.size);
me.btnBold = new Common.UI.Button({
cls: 'btn-toolbar',
iconCls: 'btn-bold',
enableToggle: true,
hint: me.textBold
});
me.btnBold.render($('#id-dlg-sign-bold')) ;
me.btnBold.on('click', function(btn, e) {
if (me.signObject) {
me.signObject.setText(me.inputName.getValue(), me.font.name, me.font.size, me.font.italic, btn.pressed);
}
me.font.bold = btn.pressed;
});
me.btnItalic = new Common.UI.Button({
cls: 'btn-toolbar',
iconCls: 'btn-italic',
enableToggle: true,
hint: me.textItalic
});
me.btnItalic.render($('#id-dlg-sign-italic')) ;
me.btnItalic.on('click', function(btn, e) {
if (me.signObject) {
me.signObject.setText(me.inputName.getValue(), me.font.name, me.font.size, btn.pressed, me.font.bold);
}
me.font.italic = btn.pressed;
});
me.btnSelectImage = new Common.UI.Button({
el: '#id-dlg-sign-image'
});
me.btnSelectImage.on('click', _.bind(me.onSelectImage, me));
me.btnChangeCertificate = new Common.UI.Button({
el: '#id-dlg-sign-change'
});
me.btnChangeCertificate.on('click', _.bind(me.onChangeCertificate, me));
me.btnOk = new Common.UI.Button({
el: $window.find('.primary'),
disabled: true
});
me.cntCertificate = $('#id-dlg-sign-certificate');
me.cntVisibleSign = $('#id-dlg-sign-visible');
me.cntInvisibleSign = $('#id-dlg-sign-invisible');
(me.signType == 'visible') ? me.cntInvisibleSign.addClass('hidden') : me.cntVisibleSign.addClass('hidden');
$window.find('.dlg-btn').on('click', _.bind(me.onBtnClick, me));
$window.find('input').on('keypress', _.bind(me.onKeyPress, me));
me.afterRender();
},
show: function() {
Common.UI.Window.prototype.show.apply(this, arguments);
var me = this;
_.delay(function(){
((me.signType == 'visible') ? me.inputName : me.inputPurpose).cmpEl.find('input').focus();
},500);
},
close: function() {
this.api.asc_unregisterCallback('on_signature_defaultcertificate_ret', this.binding.certificateChanged);
this.api.asc_unregisterCallback('on_signature_selectsertificate_ret', this.binding.certificateChanged);
Common.UI.Window.prototype.close.apply(this, arguments);
if (this.signObject)
this.signObject.destroy();
},
afterRender: function () {
if (this.api) {
this.binding = {
certificateChanged: _.bind(this.onCertificateChanged, this)
};
this.api.asc_registerCallback('on_signature_defaultcertificate_ret', this.binding.certificateChanged);
this.api.asc_registerCallback('on_signature_selectsertificate_ret', this.binding.certificateChanged);
this.api.asc_GetDefaultCertificate();
}
if (this.signType == 'visible') {
this.cmbFonts.fillFonts(this.fontStore);
this.cmbFonts.selectRecord(this.fontStore.findWhere({name: this.font.name}) || this.fontStore.at(0));
this.signObject = new AscCommon.CSignatureDrawer('signature-preview-img', this.api, this.signSize.width, this.signSize.height);
}
},
getSettings: function () {
var props = {};
props.certificateId = this.certificateId;
if (this.signType == 'invisible') {
props.purpose = this.inputPurpose.getValue();
} else {
props.images = this.signObject ? this.signObject.getImages() : [null, null];
}
return props;
},
onBtnClick: function(event) {
this._handleInput(event.currentTarget.attributes['result'].value);
},
onKeyPress: function(event) {
if (event.keyCode == Common.UI.Keys.RETURN) {
this._handleInput('ok');
return false;
}
},
_handleInput: function(state) {
if (this.options.handler) {
if (state == 'ok' && (this.btnOk.isDisabled() || this.signObject && !this.signObject.isValid()))
return;
this.options.handler.call(this, this, state);
}
this.close();
},
onChangeCertificate: function() {
this.api.asc_SelectCertificate();
},
onCertificateChanged: function(certificate) {
this.certificateId = certificate.id;
var date = certificate.date,
arr_date = (typeof date == 'string') ? date.split(' - ') : ['', ''];
this.cntCertificate.html(this.templateCertificate({name: certificate.name, valid: this.textValid.replace('%1', arr_date[0]).replace('%2', arr_date[1])}));
this.cntCertificate.toggleClass('hidden', _.isEmpty(this.certificateId) || this.certificateId<0);
this.btnOk.setDisabled(_.isEmpty(this.certificateId) || this.certificateId<0);
},
onSelectImage: function() {
if (!this.signObject) return;
this.signObject.selectImage();
this.inputName.setValue('');
},
onChangeName: function (input, value) {
if (!this.signObject) return;
this.signObject.setText(value, this.font.name, this.font.size, this.font.italic, this.font.bold);
},
textTitle: 'Sign Document',
textPurpose: 'Purpose for signing this document',
textCertificate: 'Certificate',
textValid: 'Valid from %1 to %2',
textChange: 'Change',
cancelButtonText: 'Cancel',
okButtonText: 'Ok',
textInputName: 'Input signer name',
textUseImage: 'or click \'Select Image\' to use a picture as signature',
textSelectImage: 'Select Image',
textSignature: 'Signature looks as',
tipFontName: 'Font Name',
tipFontSize: 'Font Size',
textBold: 'Bold',
textItalic: 'Italic'
}, Common.Views.SignDialog || {}))
});

View file

@ -0,0 +1,213 @@
/*
*
* (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
*
*/
/**
* SignSettingsDialog.js
*
* Created by Julia Radzhabova on 5/19/17
* Copyright (c) 2017 Ascensio System SIA. All rights reserved.
*
*/
if (Common === undefined)
var Common = {};
define([
'common/main/lib/util/utils',
'common/main/lib/component/InputField',
'common/main/lib/component/CheckBox',
'common/main/lib/component/Window'
], function () { 'use strict';
Common.Views.SignSettingsDialog = Common.UI.Window.extend(_.extend({
options: {
width: 350,
style: 'min-width: 350px;',
cls: 'modal-dlg',
type: 'edit'
},
initialize : function(options) {
_.extend(this.options, {
title: this.textTitle
}, options || {});
this.template = [
'<div class="box" style="height: 260px;">',
'<div class="input-row">',
'<label>' + this.textInfo + '</label>',
'</div>',
'<div class="input-row">',
'<label>' + this.textInfoName + '</label>',
'</div>',
'<div id="id-dlg-sign-settings-name" class="input-row" style="margin-bottom: 5px;"></div>',
'<div class="input-row">',
'<label>' + this.textInfoTitle + '</label>',
'</div>',
'<div id="id-dlg-sign-settings-title" class="input-row" style="margin-bottom: 5px;"></div>',
'<div class="input-row">',
'<label>' + this.textInfoEmail + '</label>',
'</div>',
'<div id="id-dlg-sign-settings-email" class="input-row" style="margin-bottom: 10px;"></div>',
'<div class="input-row">',
'<label>' + this.textInstructions + '</label>',
'</div>',
'<textarea id="id-dlg-sign-settings-instructions" class="form-control" style="width: 100%;height: 35px;margin-bottom: 10px;resize: none;"></textarea>',
'<div id="id-dlg-sign-settings-date"></div>',
'</div>',
'<div class="footer center">',
'<button class="btn normal dlg-btn primary" result="ok" style="margin-right: 10px;">' + this.okButtonText + '</button>',
'<% if (type == "edit") { %>',
'<button class="btn normal dlg-btn" result="cancel">' + this.cancelButtonText + '</button>',
'<% } %>',
'</div>'
].join('');
this.api = this.options.api;
this.type = this.options.type || 'edit';
this.options.tpl = _.template(this.template)(this.options);
Common.UI.Window.prototype.initialize.call(this, this.options);
},
render: function() {
Common.UI.Window.prototype.render.call(this);
var me = this,
$window = this.getChild();
me.inputName = new Common.UI.InputField({
el : $('#id-dlg-sign-settings-name'),
style : 'width: 100%;',
disabled : this.type=='view'
});
me.inputTitle = new Common.UI.InputField({
el : $('#id-dlg-sign-settings-title'),
style : 'width: 100%;',
disabled : this.type=='view'
});
me.inputEmail = new Common.UI.InputField({
el : $('#id-dlg-sign-settings-email'),
style : 'width: 100%;',
disabled : this.type=='view'
});
me.textareaInstructions = this.$window.find('textarea');
me.textareaInstructions.keydown(function (event) {
if (event.keyCode == Common.UI.Keys.RETURN) {
event.stopPropagation();
}
});
(this.type=='view') ? this.textareaInstructions.attr('disabled', 'disabled') : this.textareaInstructions.removeAttr('disabled');
this.textareaInstructions.toggleClass('disabled', this.type=='view');
this.chDate = new Common.UI.CheckBox({
el: $('#id-dlg-sign-settings-date'),
labelText: this.textShowDate,
disabled: this.type=='view'
});
$window.find('.dlg-btn').on('click', _.bind(this.onBtnClick, this));
$window.find('input').on('keypress', _.bind(this.onKeyPress, this));
},
show: function() {
Common.UI.Window.prototype.show.apply(this, arguments);
var me = this;
_.delay(function(){
me.inputName.cmpEl.find('input').focus();
},500);
},
setSettings: function (props) {
if (props) {
var me = this;
var value = props.asc_getSigner1();
me.inputName.setValue(value ? value : '');
value = props.asc_getSigner2();
me.inputTitle.setValue(value ? value : '');
value = props.asc_getEmail();
me.inputEmail.setValue(value ? value : '');
value = props.asc_getInstructions();
me.textareaInstructions.val(value ? value : '');
me.chDate.setValue(props.asc_getShowDate());
}
},
getSettings: function () {
var me = this,
props = new AscCommon.asc_CSignatureLine();
props.asc_setSigner1(me.inputName.getValue());
props.asc_setSigner2(me.inputTitle.getValue());
props.asc_setEmail(me.inputEmail.getValue());
props.asc_setInstructions(me.textareaInstructions.val());
props.asc_setShowDate(me.chDate.getValue()=='checked');
return props;
},
onBtnClick: function(event) {
this._handleInput(event.currentTarget.attributes['result'].value);
},
onKeyPress: function(event) {
if (event.keyCode == Common.UI.Keys.RETURN) {
this._handleInput('ok');
return false;
}
},
_handleInput: function(state) {
if (this.options.handler)
this.options.handler.call(this, this, state);
this.close();
},
textInfo: 'Signer Info',
textInfoName: 'Name',
textInfoTitle: 'Signer Title',
textInfoEmail: 'E-mail',
textInstructions: 'Instructions for Signer',
cancelButtonText: 'Cancel',
okButtonText: 'Ok',
txtEmpty: 'This field is required',
textAllowComment: 'Allow signer to add comment in the signature dialog',
textShowDate: 'Show sign date in signature line',
textTitle: 'Signature Settings'
}, Common.Views.SignSettingsDialog || {}))
});

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.7 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View file

@ -76,3 +76,7 @@ input.error {
::-ms-clear { ::-ms-clear {
display: none; display: none;
} }
input[type="password"] {
font-size: 16px;
}

View file

@ -23,6 +23,21 @@
} }
} }
&.left {
margin: -32px 15px 0 0;
.tip-arrow {
right: -15px;
top: 20px;
width: 15px;
height: 30px;
&:after {
top: 5px;
left: -8px;
}
}
}
&.top { &.top {
margin: 0 -32px 15px 0; margin: 0 -32px 15px 0;

View file

@ -275,6 +275,8 @@
.button-normal-icon(~'x-huge .btn-ic-docspell', 12, @toolbar-big-icon-size); .button-normal-icon(~'x-huge .btn-ic-docspell', 12, @toolbar-big-icon-size);
.button-normal-icon(~'x-huge .btn-ic-review', 13, @toolbar-big-icon-size); .button-normal-icon(~'x-huge .btn-ic-review', 13, @toolbar-big-icon-size);
.button-normal-icon(~'x-huge .btn-ic-reviewview', 30, @toolbar-big-icon-size); .button-normal-icon(~'x-huge .btn-ic-reviewview', 30, @toolbar-big-icon-size);
.button-normal-icon(~'x-huge .btn-ic-protect', 35, @toolbar-big-icon-size);
.button-normal-icon(~'x-huge .btn-ic-signature', 36, @toolbar-big-icon-size);
.button-normal-icon(review-save, 14, @toolbar-big-icon-size); .button-normal-icon(review-save, 14, @toolbar-big-icon-size);
.button-normal-icon(review-deny, 15, @toolbar-big-icon-size); .button-normal-icon(review-deny, 15, @toolbar-big-icon-size);
.button-normal-icon(review-next, 16, @toolbar-big-icon-size); .button-normal-icon(review-next, 16, @toolbar-big-icon-size);

View file

@ -163,6 +163,7 @@ require([
,'Common.Controllers.ExternalDiagramEditor' ,'Common.Controllers.ExternalDiagramEditor'
,'Common.Controllers.ExternalMergeEditor' ,'Common.Controllers.ExternalMergeEditor'
,'Common.Controllers.ReviewChanges' ,'Common.Controllers.ReviewChanges'
,'Common.Controllers.Protection'
] ]
}); });
@ -183,6 +184,7 @@ require([
'documenteditor/main/app/view/TableSettings', 'documenteditor/main/app/view/TableSettings',
'documenteditor/main/app/view/ShapeSettings', 'documenteditor/main/app/view/ShapeSettings',
'documenteditor/main/app/view/TextArtSettings', 'documenteditor/main/app/view/TextArtSettings',
'documenteditor/main/app/view/SignatureSettings',
'common/main/lib/util/utils', 'common/main/lib/util/utils',
'common/main/lib/util/LocalStorage', 'common/main/lib/util/LocalStorage',
'common/main/lib/controller/Fonts', 'common/main/lib/controller/Fonts',
@ -196,6 +198,7 @@ require([
,'common/main/lib/controller/ExternalDiagramEditor' ,'common/main/lib/controller/ExternalDiagramEditor'
,'common/main/lib/controller/ExternalMergeEditor' ,'common/main/lib/controller/ExternalMergeEditor'
,'common/main/lib/controller/ReviewChanges' ,'common/main/lib/controller/ReviewChanges'
,'common/main/lib/controller/Protection'
], function() { ], function() {
app.start(); app.start();
}); });

View file

@ -72,7 +72,8 @@ define([
'hide': _.bind(this.aboutShowHide, this, true) 'hide': _.bind(this.aboutShowHide, this, true)
}, },
'Common.Views.Plugins': { 'Common.Views.Plugins': {
'plugin:open': _.bind(this.onPluginOpen, this) 'plugin:open': _.bind(this.onPluginOpen, this),
'hide': _.bind(this.onHidePlugins, this)
}, },
'LeftMenu': { 'LeftMenu': {
'comments:show': _.bind(this.commentsShowHide, this, 'show'), 'comments:show': _.bind(this.commentsShowHide, this, 'show'),
@ -381,6 +382,10 @@ define([
$(this.leftMenu.btnChat.el).blur(); $(this.leftMenu.btnChat.el).blur();
Common.NotificationCenter.trigger('layout:changed', 'leftmenu'); Common.NotificationCenter.trigger('layout:changed', 'leftmenu');
}, },
onHidePlugins: function() {
Common.NotificationCenter.trigger('layout:changed', 'leftmenu');
},
/** coauthoring end **/ /** coauthoring end **/
onQuerySearch: function(d, w, opts) { onQuerySearch: function(d, w, opts) {

View file

@ -647,7 +647,7 @@ define([
case Asc.c_oAscAsyncAction['ForceSaveButton']: case Asc.c_oAscAsyncAction['ForceSaveButton']:
clearTimeout(this._state.timerSave); clearTimeout(this._state.timerSave);
force = true; force = true;
title = (!this.appOptions.isOffline) ? this.saveTitleText : ''; title = this.saveTitleText;
text = (!this.appOptions.isOffline) ? this.saveTextText : ''; text = (!this.appOptions.isOffline) ? this.saveTextText : '';
break; break;
@ -861,6 +861,7 @@ define([
pluginsController.setApi(me.api); pluginsController.setApi(me.api);
me.requestPlugins('../../../../plugins.json'); me.requestPlugins('../../../../plugins.json');
me.api.asc_registerCallback('asc_onPluginsInit', _.bind(me.updatePluginsList, me)); me.api.asc_registerCallback('asc_onPluginsInit', _.bind(me.updatePluginsList, me));
me.api.asc_registerCallback('asc_onPluginsReset', _.bind(me.resetPluginsList, me));
documentHolderController.setApi(me.api); documentHolderController.setApi(me.api);
documentHolderController.createDelayedElements(); documentHolderController.createDelayedElements();
@ -910,16 +911,13 @@ define([
me.api.UpdateInterfaceState(); me.api.UpdateInterfaceState();
me.fillTextArt(me.api.asc_getTextArtPreviews()); me.fillTextArt(me.api.asc_getTextArtPreviews());
if (me.appOptions.canBrandingExt) Common.NotificationCenter.trigger('document:ready', 'main');
Common.NotificationCenter.trigger('document:ready', 'main');
me.applyLicense(); me.applyLicense();
} }
}, 50); }, 50);
} else { } else {
documentHolderController.getView().createDelayedElementsViewer(); documentHolderController.getView().createDelayedElementsViewer();
if (me.appOptions.canBrandingExt) Common.NotificationCenter.trigger('document:ready', 'main');
Common.NotificationCenter.trigger('document:ready', 'main');
} }
if (this.appOptions.canAnalytics && false) if (this.appOptions.canAnalytics && false)
@ -1033,6 +1031,7 @@ define([
this.appOptions.forcesave = this.appOptions.canForcesave; this.appOptions.forcesave = this.appOptions.canForcesave;
this.appOptions.canEditComments= this.appOptions.isOffline || !(typeof (this.editorConfig.customization) == 'object' && this.editorConfig.customization.commentAuthorOnly); this.appOptions.canEditComments= this.appOptions.isOffline || !(typeof (this.editorConfig.customization) == 'object' && this.editorConfig.customization.commentAuthorOnly);
this.appOptions.trialMode = params.asc_getLicenseMode(); this.appOptions.trialMode = params.asc_getLicenseMode();
this.appOptions.canProtect = this.appOptions.isEdit && this.appOptions.isDesktopApp && this.api.asc_isSignaturesSupport();
if ( this.appOptions.isLightVersion ) { if ( this.appOptions.isLightVersion ) {
this.appOptions.canUseHistory = this.appOptions.canUseHistory =
@ -1123,6 +1122,9 @@ define([
reviewController.setMode(me.appOptions).setConfig({config: me.editorConfig}, me.api); reviewController.setMode(me.appOptions).setConfig({config: me.editorConfig}, me.api);
if (this.appOptions.isDesktopApp && this.appOptions.isOffline)
application.getController('Common.Controllers.Protection').setMode(me.appOptions).setConfig({config: me.editorConfig}, me.api);
var viewport = this.getApplication().getController('Viewport').getView('Viewport'); var viewport = this.getApplication().getController('Viewport').getView('Viewport');
viewport.applyEditorMode(); viewport.applyEditorMode();
@ -1992,15 +1994,27 @@ define([
baseUrl : item.baseUrl, baseUrl : item.baseUrl,
variations: variationsArr, variations: variationsArr,
currentVariation: 0, currentVariation: 0,
visible: pluginVisible visible: pluginVisible,
groupName: (item.group) ? item.group.name : '',
groupRank: (item.group) ? item.group.rank : 0
})); }));
}); });
if ( uiCustomize!==false ) // from ui customizer in editor config or desktop event if ( uiCustomize!==false ) // from ui customizer in editor config or desktop event
this.UICustomizePlugins = arrUI; this.UICustomizePlugins = arrUI;
if ( !uiCustomize ) { if ( !uiCustomize && pluginStore) {
if (pluginStore) pluginStore.add(arr); arr = pluginStore.models.concat(arr);
arr.sort(function(a, b){
var rank_a = a.get('groupRank'),
rank_b = b.get('groupRank');
if (rank_a < rank_b)
return (rank_a==0) ? 1 : -1;
if (rank_a > rank_b)
return (rank_b==0) ? -1 : 1;
return 0;
});
pluginStore.reset(arr);
this.appOptions.canPlugins = !pluginStore.isEmpty(); this.appOptions.canPlugins = !pluginStore.isEmpty();
} }
} else if (!uiCustomize){ } else if (!uiCustomize){
@ -2012,6 +2026,10 @@ define([
if (!uiCustomize) this.getApplication().getController('LeftMenu').enablePlugins(); if (!uiCustomize) this.getApplication().getController('LeftMenu').enablePlugins();
}, },
resetPluginsList: function() {
this.getApplication().getCollection('Common.Collections.Plugins').reset();
},
leavePageText: 'You have unsaved changes in this document. Click \'Stay on this Page\' then \'Save\' to save them. Click \'Leave this Page\' to discard all the unsaved changes.', leavePageText: 'You have unsaved changes in this document. Click \'Stay on this Page\' then \'Save\' to save them. Click \'Leave this Page\' to discard all the unsaved changes.',
defaultTitleText: 'ONLYOFFICE Document Editor', defaultTitleText: 'ONLYOFFICE Document Editor',
criticalErrorTitle: 'Error', criticalErrorTitle: 'Error',

View file

@ -78,11 +78,13 @@ define([
this._settings[Common.Utils.documentSettingsType.Shape] = {panelId: "id-shape-settings", panel: rightMenu.shapeSettings, btn: rightMenu.btnShape, hidden: 1, locked: false}; this._settings[Common.Utils.documentSettingsType.Shape] = {panelId: "id-shape-settings", panel: rightMenu.shapeSettings, btn: rightMenu.btnShape, hidden: 1, locked: false};
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.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.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.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: 1, props: {}, locked: false};
}, },
setApi: function(api) { setApi: function(api) {
this.api = api; this.api = api;
this.api.asc_registerCallback('asc_onUpdateSignatures', _.bind(this.onApiUpdateSignatures, this));
this.api.asc_registerCallback('asc_onCoAuthoringDisconnect',_.bind(this.onCoAuthoringDisconnect, this)); this.api.asc_registerCallback('asc_onCoAuthoringDisconnect',_.bind(this.onCoAuthoringDisconnect, this));
Common.NotificationCenter.on('api:disconnect', _.bind(this.onCoAuthoringDisconnect, this)); Common.NotificationCenter.on('api:disconnect', _.bind(this.onCoAuthoringDisconnect, this));
}, },
@ -96,7 +98,7 @@ define([
var panel = this._settings[type].panel; var panel = this._settings[type].panel;
var props = this._settings[type].props; var props = this._settings[type].props;
if (props && panel) 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) { } else if (minimized && type==Common.Utils.documentSettingsType.MailMerge) {
this.rightmenu.mergeSettings.disablePreviewMode(); this.rightmenu.mergeSettings.disablePreviewMode();
} }
@ -112,13 +114,14 @@ define([
in_equation = false, in_equation = false,
needhide = true; needhide = true;
for (var i=0; i<this._settings.length; i++) { for (var i=0; i<this._settings.length; i++) {
if (i==Common.Utils.documentSettingsType.MailMerge) continue; if (i==Common.Utils.documentSettingsType.MailMerge || i==Common.Utils.documentSettingsType.Signature) continue;
if (this._settings[i]) { if (this._settings[i]) {
this._settings[i].hidden = 1; this._settings[i].hidden = 1;
this._settings[i].locked = false; this._settings[i].locked = false;
} }
} }
this._settings[Common.Utils.documentSettingsType.MailMerge].locked = false; this._settings[Common.Utils.documentSettingsType.MailMerge].locked = false;
this._settings[Common.Utils.documentSettingsType.Signature].locked = false;
var isChart = false; var isChart = false;
for (i=0; i<SelectedObjects.length; i++) for (i=0; i<SelectedObjects.length; i++)
@ -154,6 +157,8 @@ define([
this._settings[settingsType].locked = value.get_Locked(); this._settings[settingsType].locked = value.get_Locked();
if (!this._settings[Common.Utils.documentSettingsType.MailMerge].locked) // lock MailMerge-InsertField, если хотя бы один объект locked 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();
if (!this._settings[Common.Utils.documentSettingsType.Signature].locked) // lock Signature, если хотя бы один объект locked
this._settings[Common.Utils.documentSettingsType.Signature].locked = value.get_Locked();
} }
if ( this._settings[Common.Utils.documentSettingsType.Header].locked ) { // если находимся в locked header/footer, то считаем, что все элементы в нем тоже недоступны if ( this._settings[Common.Utils.documentSettingsType.Header].locked ) { // если находимся в locked header/footer, то считаем, что все элементы в нем тоже недоступны
@ -179,7 +184,7 @@ define([
currentactive = -1; currentactive = -1;
} else { } else {
if (pnl.btn.isDisabled()) pnl.btn.setDisabled(false); if (pnl.btn.isDisabled()) pnl.btn.setDisabled(false);
if (i!=Common.Utils.documentSettingsType.MailMerge) lastactive = i; if (i!=Common.Utils.documentSettingsType.MailMerge && i!=Common.Utils.documentSettingsType.Signature) lastactive = i;
if ( pnl.needShow ) { if ( pnl.needShow ) {
pnl.needShow = false; pnl.needShow = false;
priorityactive = i; priorityactive = i;
@ -204,7 +209,7 @@ define([
if (active !== undefined) { if (active !== undefined) {
this.rightmenu.SetActivePane(active, open); this.rightmenu.SetActivePane(active, open);
if (active!=Common.Utils.documentSettingsType.MailMerge) if (active!=Common.Utils.documentSettingsType.MailMerge && active!=Common.Utils.documentSettingsType.Signature)
this._settings[active].panel.ChangeSettings.call(this._settings[active].panel, this._settings[active].props); this._settings[active].panel.ChangeSettings.call(this._settings[active].panel, this._settings[active].props);
else else
this._settings[active].panel.ChangeSettings.call(this._settings[active].panel); this._settings[active].panel.ChangeSettings.call(this._settings[active].panel);
@ -321,7 +326,17 @@ define([
} }
}, },
SetDisabled: function(disabled, allowMerge) { onApiUpdateSignatures: function(valid, requested){
if (!this.rightmenu.signatureSettings) return;
var disabled = (!valid || valid.length<1) && (!requested || requested.length<1),
type = Common.Utils.documentSettingsType.Signature;
this._settings[type].hidden = disabled ? 1 : 0;
this._settings[type].btn.setDisabled(disabled);
this._settings[type].panel.setLocked(this._settings[type].locked);
},
SetDisabled: function(disabled, allowMerge, allowSignature) {
this.setMode({isEdit: !disabled}); this.setMode({isEdit: !disabled});
if (this.rightmenu) { if (this.rightmenu) {
this.rightmenu.paragraphSettings.disableControls(disabled); this.rightmenu.paragraphSettings.disableControls(disabled);
@ -336,6 +351,10 @@ define([
} }
this.rightmenu.chartSettings.disableControls(disabled); this.rightmenu.chartSettings.disableControls(disabled);
if (!allowSignature && this.rightmenu.signatureSettings) {
this.rightmenu.btnSignature.setDisabled(disabled);
}
if (disabled) { if (disabled) {
this.rightmenu.btnText.setDisabled(disabled); this.rightmenu.btnText.setDisabled(disabled);
this.rightmenu.btnTable.setDisabled(disabled); this.rightmenu.btnTable.setDisabled(disabled);
@ -343,7 +362,6 @@ define([
this.rightmenu.btnHeaderFooter.setDisabled(disabled); this.rightmenu.btnHeaderFooter.setDisabled(disabled);
this.rightmenu.btnShape.setDisabled(disabled); this.rightmenu.btnShape.setDisabled(disabled);
this.rightmenu.btnTextArt.setDisabled(disabled); this.rightmenu.btnTextArt.setDisabled(disabled);
this.rightmenu.btnChart.setDisabled(disabled); this.rightmenu.btnChart.setDisabled(disabled);
} else { } else {
var selectedElements = this.api.getSelectedElements(); var selectedElements = this.api.getSelectedElements();

View file

@ -2850,8 +2850,15 @@ define([
var tab = {action: 'review', caption: me.toolbar.textTabReview}; var tab = {action: 'review', caption: me.toolbar.textTabReview};
var $panel = DE.getController('Common.Controllers.ReviewChanges').createToolbarPanel(); var $panel = DE.getController('Common.Controllers.ReviewChanges').createToolbarPanel();
if ( $panel ) { if ( $panel )
me.toolbar.addTab(tab, $panel, 3); me.toolbar.addTab(tab, $panel, 3);
if (config.isDesktopApp && config.isOffline) {
tab = {action: 'protect', caption: me.toolbar.textTabProtect};
$panel = me.getApplication().getController('Common.Controllers.Protection').createToolbarPanel();
if ( $panel )
me.toolbar.addTab(tab, $panel, 4);
} }
} }
}, },

View file

@ -8,6 +8,7 @@
<li id="fm-btn-save-desktop" class="fm-btn" /> <li id="fm-btn-save-desktop" class="fm-btn" />
<li id="fm-btn-print" class="fm-btn" /> <li id="fm-btn-print" class="fm-btn" />
<li id="fm-btn-rename" class="fm-btn" /> <li id="fm-btn-rename" class="fm-btn" />
<li id="fm-btn-protect" class="fm-btn" />
<li class="devider" /> <li class="devider" />
<li id="fm-btn-recent" class="fm-btn" /> <li id="fm-btn-recent" class="fm-btn" />
<li id="fm-btn-create" class="fm-btn" /> <li id="fm-btn-create" class="fm-btn" />
@ -30,4 +31,5 @@
<div id="panel-rights" class="content-box" /> <div id="panel-rights" class="content-box" />
<div id="panel-settings" class="content-box" /> <div id="panel-settings" class="content-box" />
<div id="panel-help" class="content-box" /> <div id="panel-help" class="content-box" />
<div id="panel-protect" class="content-box" />
</div> </div>

View file

@ -16,6 +16,8 @@
</div> </div>
<div id="id-textart-settings" class="settings-panel"> <div id="id-textart-settings" class="settings-panel">
</div> </div>
<div id="id-signature-settings" class="settings-panel">
</div>
</div> </div>
<div class="tool-menu-btns"> <div class="tool-menu-btns">
<div class="ct-btn-category arrow-left" /> <div class="ct-btn-category arrow-left" />
@ -27,5 +29,6 @@
<button id="id-right-menu-chart" class="btn btn-category arrow-left" content-target="id-chart-settings"><i class="icon img-toolbarmenu btn-menu-chart">&nbsp;</i></button> <button id="id-right-menu-chart" class="btn btn-category arrow-left" content-target="id-chart-settings"><i class="icon img-toolbarmenu btn-menu-chart">&nbsp;</i></button>
<button id="id-right-menu-textart" class="btn btn-category arrow-left" content-target="id-textart-settings"><i class="icon img-toolbarmenu btn-menu-textart">&nbsp;</i></button> <button id="id-right-menu-textart" class="btn btn-category arrow-left" content-target="id-textart-settings"><i class="icon img-toolbarmenu btn-menu-textart">&nbsp;</i></button>
<button id="id-right-menu-mail-merge" class="btn btn-category arrow-left hidden" content-target="id-mail-merge-settings"><i class="icon img-toolbarmenu btn-menu-mail-merge">&nbsp;</i></button> <button id="id-right-menu-mail-merge" class="btn btn-category arrow-left hidden" content-target="id-mail-merge-settings"><i class="icon img-toolbarmenu btn-menu-mail-merge">&nbsp;</i></button>
<button id="id-right-menu-signature" class="btn btn-category arrow-left hidden" content-target="id-signature-settings"><i class="icon img-toolbarmenu btn-menu-signature">&nbsp;</i></button>
</div> </div>
</div> </div>

View file

@ -0,0 +1,41 @@
<table cols="2">
<tr>
<td class="padding-large">
<label style="font-size: 18px;"><%= scope.strSignature %></label>
</td>
</tr>
<tr>
<td class="padding-large">
<div id="signature-invisible-sign" style="width:100%;"></div>
</td>
</tr>
<tr class="requested">
<td class="padding-small">
<label class="header"><%= scope.strRequested %></label>
</td>
</tr>
<tr class="requested">
<td class="padding-large">
<div id="signature-requested-sign"></div>
</td>
</tr>
<tr class="valid">
<td class="padding-small">
<label class="header"><%= scope.strValid %></label>
</td>
</tr>
<tr class="valid">
<td class="padding-large">
<div id="signature-valid-sign"></div>
</td>
</tr>
<tr class="invalid">
<td class="padding-small">
<label class="header" style="color:#bb3d3d;"><%= scope.strInvalid %></label>
</td>
</tr>
<tr class="invalid">
<td><div id="signature-invalid-sign"></div></td>
</tr>
<tr class="finish-cell"></tr>
</table>

View file

@ -1527,7 +1527,6 @@ define([
this.api.asc_registerCallback('asc_onFocusObject', _.bind(onFocusObject, this)); this.api.asc_registerCallback('asc_onFocusObject', _.bind(onFocusObject, this));
this.api.asc_registerCallback('asc_onShowSpecialPasteOptions', _.bind(onShowSpecialPasteOptions, this)); this.api.asc_registerCallback('asc_onShowSpecialPasteOptions', _.bind(onShowSpecialPasteOptions, this));
this.api.asc_registerCallback('asc_onHideSpecialPasteOptions', _.bind(onHideSpecialPasteOptions, this)); this.api.asc_registerCallback('asc_onHideSpecialPasteOptions', _.bind(onHideSpecialPasteOptions, this));
} }
return this; return this;
@ -1814,14 +1813,39 @@ define([
caption: me.addCommentText caption: me.addCommentText
}).on('click', _.bind(me.addComment, me)); }).on('click', _.bind(me.addComment, me));
var menuSignatureViewSign = new Common.UI.MenuItem({caption: this.strSign, value: 0 }).on('click', _.bind(me.onSignatureClick, me));
var menuSignatureDetails = new Common.UI.MenuItem({caption: this.strDetails, value: 1 }).on('click', _.bind(me.onSignatureClick, me));
var menuSignatureViewSetup = new Common.UI.MenuItem({caption: this.strSetup, value: 2 }).on('click', _.bind(me.onSignatureClick, me));
var menuSignatureRemove = new Common.UI.MenuItem({caption: this.strDelete, value: 3 }).on('click', _.bind(me.onSignatureClick, me));
var menuViewSignSeparator = new Common.UI.MenuItem({caption: '--' });
this.viewModeMenu = new Common.UI.Menu({ this.viewModeMenu = new Common.UI.Menu({
initMenu: function (value) { initMenu: function (value) {
var isInChart = (value.imgProps && value.imgProps.value && !_.isNull(value.imgProps.value.get_ChartProperties())); var isInChart = (value.imgProps && value.imgProps.value && !_.isNull(value.imgProps.value.get_ChartProperties())),
signGuid = (value.imgProps && value.imgProps.value && me.mode.canProtect) ? value.imgProps.value.asc_getSignatureId() : undefined,
signProps = (signGuid) ? me.api.asc_getSignatureSetup(signGuid) : null,
isInSign = !!signProps && me._canProtect,
canComment = !isInChart && me.api.can_AddQuotedComment() !== false && me.mode.canCoAuthoring && me.mode.canComments && !me._isDisabled;
menuViewUndo.setVisible(me.mode.canCoAuthoring && me.mode.canComments && !me._isDisabled); menuViewUndo.setVisible(me.mode.canCoAuthoring && me.mode.canComments && !me._isDisabled);
menuViewUndo.setDisabled(!me.api.asc_getCanUndo() && !me._isDisabled); menuViewUndo.setDisabled(!me.api.asc_getCanUndo() && !me._isDisabled);
menuViewCopySeparator.setVisible(!isInChart && me.api.can_AddQuotedComment() !== false && me.mode.canCoAuthoring && me.mode.canComments && !me._isDisabled); menuViewCopySeparator.setVisible(isInSign);
menuViewAddComment.setVisible(!isInChart && me.api.can_AddQuotedComment() !== false && me.mode.canCoAuthoring && me.mode.canComments && !me._isDisabled);
var isRequested = (signProps) ? signProps.asc_getRequested() : false;
menuSignatureViewSign.setVisible(isInSign && isRequested);
menuSignatureDetails.setVisible(isInSign && !isRequested);
menuSignatureViewSetup.setVisible(isInSign);
menuSignatureRemove.setVisible(isInSign && !isRequested);
menuViewSignSeparator.setVisible(canComment);
if (isInSign) {
menuSignatureViewSign.cmpEl.attr('data-value', signGuid); // sign
menuSignatureDetails.cmpEl.attr('data-value', signProps.asc_getId()); // view certificate
menuSignatureViewSetup.cmpEl.attr('data-value', signGuid); // view signature settings
menuSignatureRemove.cmpEl.attr('data-value', signGuid);
}
menuViewAddComment.setVisible(canComment);
menuViewAddComment.setDisabled(value.paraProps && value.paraProps.locked === true); menuViewAddComment.setDisabled(value.paraProps && value.paraProps.locked === true);
var cancopy = me.api && me.api.can_CopyCut(); var cancopy = me.api && me.api.can_CopyCut();
@ -1831,6 +1855,11 @@ define([
menuViewCopy, menuViewCopy,
menuViewUndo, menuViewUndo,
menuViewCopySeparator, menuViewCopySeparator,
menuSignatureViewSign,
menuSignatureDetails,
menuSignatureViewSetup,
menuSignatureRemove,
menuViewSignSeparator,
menuViewAddComment menuViewAddComment
] ]
}).on('hide:after', function (menu, e, isFromInputControl) { }).on('hide:after', function (menu, e, isFromInputControl) {
@ -2150,6 +2179,10 @@ define([
value : 'cut' value : 'cut'
}).on('click', _.bind(me.onCutCopyPaste, me)); }).on('click', _.bind(me.onCutCopyPaste, me));
var menuSignatureEditSign = new Common.UI.MenuItem({caption: this.strSign, value: 0 }).on('click', _.bind(me.onSignatureClick, me));
var menuSignatureEditSetup = new Common.UI.MenuItem({caption: this.strSetup, value: 2 }).on('click', _.bind(me.onSignatureClick, me));
var menuEditSignSeparator = new Common.UI.MenuItem({ caption: '--' });
this.pictureMenu = new Common.UI.Menu({ this.pictureMenu = new Common.UI.Menu({
initMenu: function(value){ initMenu: function(value){
if (_.isUndefined(value.imgProps)) if (_.isUndefined(value.imgProps))
@ -2210,7 +2243,7 @@ define([
me.menuOriginalSize.setVisible(_.isNull(value.imgProps.value.get_ChartProperties()) && _.isNull(value.imgProps.value.get_ShapeProperties()) && me.menuOriginalSize.setVisible(_.isNull(value.imgProps.value.get_ChartProperties()) && _.isNull(value.imgProps.value.get_ShapeProperties()) &&
!onlyCommonProps); !onlyCommonProps);
me.pictureMenu.items[7].setVisible(menuChartEdit.isVisible() || me.menuOriginalSize.isVisible()); me.pictureMenu.items[10].setVisible(menuChartEdit.isVisible() || me.menuOriginalSize.isVisible());
var islocked = value.imgProps.locked || (value.headerProps!==undefined && value.headerProps.locked); var islocked = value.imgProps.locked || (value.headerProps!==undefined && value.headerProps.locked);
if (menuChartEdit.isVisible()) if (menuChartEdit.isVisible())
@ -2233,12 +2266,26 @@ define([
menuImgCopy.setDisabled(!cancopy); menuImgCopy.setDisabled(!cancopy);
menuImgCut.setDisabled(islocked || !cancopy); menuImgCut.setDisabled(islocked || !cancopy);
menuImgPaste.setDisabled(islocked); menuImgPaste.setDisabled(islocked);
var signGuid = (value.imgProps && value.imgProps.value && me.mode.canProtect) ? value.imgProps.value.asc_getSignatureId() : undefined,
isInSign = !!signGuid;
menuSignatureEditSign.setVisible(isInSign);
menuSignatureEditSetup.setVisible(isInSign);
menuEditSignSeparator.setVisible(isInSign);
if (isInSign) {
menuSignatureEditSign.cmpEl.attr('data-value', signGuid); // sign
menuSignatureEditSetup.cmpEl.attr('data-value', signGuid); // edit signature settings
}
}, },
items: [ items: [
menuImgCut, menuImgCut,
menuImgCopy, menuImgCopy,
menuImgPaste, menuImgPaste,
{ caption: '--' }, { caption: '--' },
menuSignatureEditSign,
menuSignatureEditSetup,
menuEditSignSeparator,
menuImageArrange, menuImageArrange,
menuImageAlign, menuImageAlign,
me.menuImageWrap, me.menuImageWrap,
@ -3298,13 +3345,32 @@ define([
} }
}, },
onSignatureClick: function(item) {
var datavalue = item.cmpEl.attr('data-value');
switch (item.value) {
case 0:
Common.NotificationCenter.trigger('protect:sign', datavalue); //guid
break;
case 1:
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
break;
case 3:
this.api.asc_RemoveSignature(datavalue); //guid
break;
}
},
focus: function() { focus: function() {
var me = this; var me = this;
_.defer(function(){ me.cmpEl.focus(); }, 50); _.defer(function(){ me.cmpEl.focus(); }, 50);
}, },
SetDisabled: function(state) { SetDisabled: function(state, canProtect) {
this._isDisabled = state; this._isDisabled = state;
this._canProtect = canProtect;
}, },
alignmentText : 'Alignment', alignmentText : 'Alignment',
@ -3476,7 +3542,11 @@ define([
txtDeleteChars: 'Delete enclosing characters', txtDeleteChars: 'Delete enclosing characters',
txtDeleteCharsAndSeparators: 'Delete enclosing characters and separators', txtDeleteCharsAndSeparators: 'Delete enclosing characters and separators',
txtKeepTextOnly: 'Keep text only', txtKeepTextOnly: 'Keep text only',
textUndo: 'Undo' textUndo: 'Undo',
strSign: 'Sign',
strDetails: 'Signature Details',
strSetup: 'Signature Setup',
strDelete: 'Remove Signature'
}, DE.Views.DocumentHolder || {})); }, DE.Views.DocumentHolder || {}));
}); });

View file

@ -126,6 +126,13 @@ define([
canFocused: false canFocused: false
}); });
this.miProtect = new Common.UI.MenuItem({
el : $('#fm-btn-protect',this.el),
action : 'protect',
caption : this.btnProtectCaption,
canFocused: false
});
this.miRecent = new Common.UI.MenuItem({ this.miRecent = new Common.UI.MenuItem({
el : $('#fm-btn-recent',this.el), el : $('#fm-btn-recent',this.el),
action : 'recent', action : 'recent',
@ -168,6 +175,7 @@ define([
this.miSaveAs, this.miSaveAs,
this.miPrint, this.miPrint,
this.miRename, this.miRename,
this.miProtect,
this.miRecent, this.miRecent,
this.miNew, this.miNew,
new Common.UI.MenuItem({ new Common.UI.MenuItem({
@ -215,10 +223,11 @@ define([
show: function(panel, opts) { show: function(panel, opts) {
if (this.isVisible() && panel===undefined) return; if (this.isVisible() && panel===undefined) return;
var defPanel = (this.mode.canDownload && (!this.mode.isDesktopApp || !this.mode.isOffline)) ? 'saveas' : 'info';
if (!panel) if (!panel)
panel = this.active || ((this.mode.canDownload && (!this.mode.isDesktopApp || !this.mode.isOffline)) ? 'saveas' : 'info'); panel = this.active || defPanel;
this.$el.show(); this.$el.show();
this.selectMenu(panel, opts); this.selectMenu(panel, opts, defPanel);
this.api.asc_enableKeyEvents(false); this.api.asc_enableKeyEvents(false);
this.fireEvent('menu:show', [this]); this.fireEvent('menu:show', [this]);
@ -234,7 +243,8 @@ define([
applyMode: function() { applyMode: function() {
this.miPrint[this.mode.canPrint?'show':'hide'](); this.miPrint[this.mode.canPrint?'show':'hide']();
this.miRename[(this.mode.canRename && !this.mode.isDesktopApp) ?'show':'hide'](); this.miRename[(this.mode.canRename && !this.mode.isDesktopApp) ?'show':'hide']();
this.miRename.$el.find('+.devider')[!this.mode.isDisconnected?'show':'hide'](); this.miProtect[(this.mode.isEdit && this.mode.isDesktopApp && this.mode.isOffline) ?'show':'hide']();
this.miProtect.$el.find('+.devider')[!this.mode.isDisconnected?'show':'hide']();
this.miRecent[this.mode.canOpenRecent?'show':'hide'](); this.miRecent[this.mode.canOpenRecent?'show':'hide']();
this.miNew[this.mode.canCreateNew?'show':'hide'](); this.miNew[this.mode.canCreateNew?'show':'hide']();
this.miNew.$el.find('+.devider')[this.mode.canCreateNew?'show':'hide'](); this.miNew.$el.find('+.devider')[this.mode.canCreateNew?'show':'hide']();
@ -270,8 +280,10 @@ define([
} }
} }
if (this.mode.isDesktopApp) { if (this.mode.isEdit && this.mode.isDesktopApp && this.mode.isOffline) {
// this.$el.find('#fm-btn-back').hide(); // this.$el.find('#fm-btn-back').hide();
this.panels['protect'] = (new DE.Views.FileMenuPanels.ProtectDoc({menu:this})).render();
this.panels['protect'].setMode(this.mode);
} }
if (this.mode.canDownload) { if (this.mode.canDownload) {
@ -302,16 +314,21 @@ define([
setApi: function(api) { setApi: function(api) {
this.api = api; this.api = api;
this.panels['info'].setApi(api); this.panels['info'].setApi(api);
if (this.panels['protect']) this.panels['protect'].setApi(api);
}, },
loadDocument: function(data) { loadDocument: function(data) {
this.document = data.doc; this.document = data.doc;
}, },
selectMenu: function(menu, opts) { selectMenu: function(menu, opts, defMenu) {
if ( menu ) { if ( menu ) {
var item = this._getMenuItem(menu), var item = this._getMenuItem(menu),
panel = this.panels[menu]; panel = this.panels[menu];
if ( item.isDisabled() ) {
item = this._getMenuItem(defMenu);
panel = this.panels[defMenu];
}
if ( item && panel ) { if ( item && panel ) {
$('.fm-btn',this.el).removeClass('active'); $('.fm-btn',this.el).removeClass('active');
item.$el.addClass('active'); item.$el.addClass('active');
@ -360,6 +377,7 @@ define([
btnSaveAsCaption : 'Save as', btnSaveAsCaption : 'Save as',
textDownload : 'Download', textDownload : 'Download',
btnRenameCaption : 'Rename...', btnRenameCaption : 'Rename...',
btnCloseMenuCaption : 'Close Menu' btnCloseMenuCaption : 'Close Menu',
btnProtectCaption: 'Protect'
}, DE.Views.FileMenu || {})); }, DE.Views.FileMenu || {}));
}); });

View file

@ -1097,4 +1097,174 @@ define([
} }
} }
}); });
DE.Views.FileMenuPanels.ProtectDoc = Common.UI.BaseView.extend(_.extend({
el: '#panel-protect',
menu: undefined,
template: _.template([
'<label id="id-fms-lbl-protect-header" style="font-size: 18px;"><%= scope.strProtect %></label>',
'<div id="id-fms-password">',
'<label class="header"><%= scope.strEncrypt %></label>',
'<div id="fms-btn-add-pwd" style="width:190px;"></div>',
'<table id="id-fms-view-pwd" cols="2" width="300">',
'<tr>',
'<td colspan="2"><span><%= scope.txtEncrypted %></span></td>',
'</tr>',
'<tr>',
'<td><div id="fms-btn-change-pwd" style="width:190px;"></div></td>',
'<td align="right"><div id="fms-btn-delete-pwd" style="width:190px; margin-left:20px;"></div></td>',
'</tr>',
'</table>',
'</div>',
'<div id="id-fms-signature">',
'<label class="header"><%= scope.strSignature %></label>',
'<div id="fms-btn-invisible-sign" style="width:190px; margin-bottom: 20px;"></div>',
'<div id="id-fms-signature-view"></div>',
'</div>'
].join('')),
initialize: function(options) {
Common.UI.BaseView.prototype.initialize.call(this,arguments);
this.menu = options.menu;
var me = this;
this.templateSignature = _.template([
'<table cols="2" width="300" class="<% if (!hasRequested && !hasSigned) { %>hidden<% } %>"">',
'<tr>',
'<td colspan="2"><span><%= tipText %></span></td>',
'</tr>',
'<tr>',
'<td><label class="link signature-view-link">' + me.txtView + '</label></td>',
'<td align="right"><label class="link signature-edit-link <% if (!hasSigned) { %>hidden<% } %>">' + me.txtEdit + '</label></td>',
'</tr>',
'</table>'
].join(''));
},
render: function() {
$(this.el).html(this.template({scope: this}));
var protection = DE.getController('Common.Controllers.Protection').getView();
this.btnAddPwd = protection.getButton('add-password');
this.btnAddPwd.render(this.$el.find('#fms-btn-add-pwd'));
this.btnAddPwd.on('click', _.bind(this.closeMenu, this));
this.btnChangePwd = protection.getButton('change-password');
this.btnChangePwd.render(this.$el.find('#fms-btn-change-pwd'));
this.btnChangePwd.on('click', _.bind(this.closeMenu, this));
this.btnDeletePwd = protection.getButton('del-password');
this.btnDeletePwd.render(this.$el.find('#fms-btn-delete-pwd'));
this.btnDeletePwd.on('click', _.bind(this.closeMenu, this));
this.cntPassword = $('#id-fms-view-pwd');
this.btnAddInvisibleSign = protection.getButton('signature');
this.btnAddInvisibleSign.render(this.$el.find('#fms-btn-invisible-sign'));
this.btnAddInvisibleSign.on('click', _.bind(this.closeMenu, this));
this.cntSignature = $('#id-fms-signature');
this.cntSignatureView = $('#id-fms-signature-view');
if (_.isUndefined(this.scroller)) {
this.scroller = new Common.UI.Scroller({
el: $(this.el),
suppressScrollX: true
});
}
this.$el.on('click', '.signature-edit-link', _.bind(this.onEdit, this));
this.$el.on('click', '.signature-view-link', _.bind(this.onView, this));
return this;
},
show: function() {
Common.UI.BaseView.prototype.show.call(this,arguments);
this.updateSignatures();
this.updateEncrypt();
},
setMode: function(mode) {
this.mode = mode;
this.cntSignature.toggleClass('hidden', !this.mode.canProtect);
},
setApi: function(o) {
this.api = o;
return this;
},
closeMenu: function() {
this.menu && this.menu.hide();
},
onEdit: function() {
this.menu && this.menu.hide();
var me = this;
Common.UI.warning({
title: this.notcriticalErrorTitle,
msg: this.txtEditWarning,
buttons: ['ok', 'cancel'],
primary: 'ok',
callback: function(btn) {
if (btn == 'ok') {
me.api.asc_RemoveAllSignatures();
}
}
});
},
onView: function() {
this.menu && this.menu.hide();
DE.getController('RightMenu').rightmenu.SetActivePane(Common.Utils.documentSettingsType.Signature, true);
},
updateSignatures: function(){
var requested = this.api.asc_getRequestSignatures(),
valid = this.api.asc_getSignatures(),
hasRequested = requested && requested.length>0,
hasValid = false,
hasInvalid = false;
_.each(valid, function(item, index){
if (item.asc_getValid()==0)
hasValid = true;
else
hasInvalid = true;
});
// hasRequested = true;
// hasValid = true;
// hasInvalid = true;
var tipText = (hasInvalid) ? this.txtSignedInvalid : (hasValid ? this.txtSigned : "");
if (hasRequested)
tipText = this.txtRequestedSignatures + (tipText!="" ? "<br><br>" : "")+ tipText;
this.cntSignatureView.html(this.templateSignature({tipText: tipText, hasSigned: (hasValid || hasInvalid), hasRequested: hasRequested}));
},
updateEncrypt: function() {
this.cntPassword.toggleClass('hidden', this.btnAddPwd.isVisible());
},
strProtect: 'Protect Document',
strSignature: 'With Signature',
txtView: 'View signatures',
txtEdit: 'Edit document',
txtSigned: 'Valid signatures has been added to the document. The document is protected from editing.',
txtSignedInvalid: 'Some of the digital signatures in document are invalid or could not be verified. The document is protected from editing.',
txtRequestedSignatures: 'This document needs to be signed.',
notcriticalErrorTitle: 'Warning',
txtEditWarning: 'Editing will remove the signatures from the document.<br>Are you sure you want to continue?',
strEncrypt: 'With Password',
txtEncrypted: 'This document has been protected by password'
}, DE.Views.FileMenuPanels.ProtectDoc || {}));
}); });

View file

@ -57,6 +57,7 @@ define([
'documenteditor/main/app/view/ShapeSettings', 'documenteditor/main/app/view/ShapeSettings',
'documenteditor/main/app/view/MailMergeSettings', 'documenteditor/main/app/view/MailMergeSettings',
'documenteditor/main/app/view/TextArtSettings', 'documenteditor/main/app/view/TextArtSettings',
'documenteditor/main/app/view/SignatureSettings',
'common/main/lib/component/Scroller' 'common/main/lib/component/Scroller'
], function (menuTemplate, $, _, Backbone) { ], function (menuTemplate, $, _, Backbone) {
'use strict'; 'use strict';
@ -194,6 +195,21 @@ define([
this.mergeSettings = new DE.Views.MailMergeSettings(); this.mergeSettings = new DE.Views.MailMergeSettings();
} }
if (mode && mode.canProtect) {
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)) { if (_.isUndefined(this.scroller)) {
this.scroller = new Common.UI.Scroller({ this.scroller = new Common.UI.Scroller({
el: $(this.el).find('.right-panel'), el: $(this.el).find('.right-panel'),
@ -223,6 +239,7 @@ define([
this.shapeSettings.setApi(api).on('editcomplete', _.bind( fire, this)); this.shapeSettings.setApi(api).on('editcomplete', _.bind( fire, this));
this.textartSettings.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.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) { setMode: function(mode) {
@ -303,6 +320,7 @@ define([
txtShapeSettings: 'Shape Settings', txtShapeSettings: 'Shape Settings',
txtTextArtSettings: 'Text Art Settings', txtTextArtSettings: 'Text Art Settings',
txtChartSettings: 'Chart Settings', txtChartSettings: 'Chart Settings',
txtMailMergeSettings: 'Mail Merge Settings' txtMailMergeSettings: 'Mail Merge Settings',
txtSignatureSettings: 'Signature Settings'
}, DE.Views.RightMenu || {})); }, DE.Views.RightMenu || {}));
}); });

View file

@ -0,0 +1,390 @@
/*
*
* (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'
], 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 () {
this._state = {
DisabledEditing: false,
ready: false,
hasValid: false,
hasInvalid: false,
hasRequested: false,
tip: undefined
};
this._locked = false;
this.render();
},
render: function () {
this.$el.html(this.template({
scope: this
}));
var protection = DE.getController('Common.Controllers.Protection').getView();
this.btnAddInvisibleSign = protection.getButton('signature');
this.btnAddInvisibleSign.render(this.$el.find('#signature-invisible-sign'));
this.viewRequestedList = new Common.UI.DataView({
el: $('#signature-requested-sign'),
enableKeyEvents: false,
itemTemplate: _.template([
'<div id="<%= id %>" class="signature-item requested">',
'<div class="caret img-commonctrl nomargin"></div>',
'<div class="name"><%= Common.Utils.String.htmlEncode(name) %></div>',
'</div>'
].join(''))
});
this.viewValidList = new Common.UI.DataView({
el: $('#signature-valid-sign'),
enableKeyEvents: false,
itemTemplate: _.template([
'<div id="<%= id %>" class="signature-item">',
'<div class="caret img-commonctrl <% if (name == "" || date == "") { %>' + 'nomargin' + '<% } %>"></div>',
'<div class="name"><%= Common.Utils.String.htmlEncode(name) %></div>',
'<div class="date"><%= Common.Utils.String.htmlEncode(date) %></div>',
'</div>'
].join(''))
});
this.viewInvalidList = new Common.UI.DataView({
el: $('#signature-invalid-sign'),
enableKeyEvents: false,
itemTemplate: _.template([
'<div id="<%= id %>" class="signature-item">',
'<div class="caret img-commonctrl <% if (name == "" || date == "") { %>' + 'nomargin' + '<% } %>"></div>',
'<div class="name"><%= Common.Utils.String.htmlEncode(name) %></div>',
'<div class="date"><%= Common.Utils.String.htmlEncode(date) %></div>',
'</div>'
].join(''))
});
this.viewRequestedList.on('item:click', _.bind(this.onSelectSignature, this));
this.viewValidList.on('item:click', _.bind(this.onSelectSignature, this));
this.viewInvalidList.on('item:click', _.bind(this.onSelectSignature, this));
this.signatureMenu = new Common.UI.Menu({
menuAlign : 'tr-br',
items: [
{ caption: this.strSign, value: 0 },
{ caption: this.strDetails,value: 1 },
{ caption: this.strSetup, value: 2 },
{ caption: this.strDelete, value: 3 }
]
});
this.signatureMenu.on('item:click', _.bind(this.onMenuSignatureClick, this));
},
setApi: function(api) {
this.api = api;
if (this.api) {
this.api.asc_registerCallback('asc_onUpdateSignatures', _.bind(this.onApiUpdateSignatures, this));
}
Common.NotificationCenter.on('document:ready', _.bind(this.onDocumentReady, this));
return this;
},
ChangeSettings: function(props) {
if (!this._state.hasRequested && !this._state.hasValid && !this._state.hasInvalid)
this.updateSignatures(this.api.asc_getSignatures(), this.api.asc_getRequestSignatures());
},
setLocked: function (locked) {
this._locked = locked;
},
setMode: function(mode) {
this.mode = mode;
},
onApiUpdateSignatures: function(valid, requested){
if (!this._state.ready) return;
this.updateSignatures(valid, requested);
this.showSignatureTooltip(this._state.hasValid, this._state.hasInvalid);
},
updateSignatures: function(valid, requested){
var me = this,
requestedSignatures = [],
validSignatures = [],
invalidSignatures = [],
name_index = 1;
_.each(requested, function(item, index){
var name = item.asc_getSigner1();
requestedSignatures.push({name: (name !== "") ? name : (me.strSigner + " " + name_index++) , guid: item.asc_getGuid(), requested: true});
});
_.each(valid, function(item, index){
var item_date = item.asc_getDate();
var sign = {name: item.asc_getSigner1(), certificateId: item.asc_getId(), guid: item.asc_getGuid(), date: (!_.isEmpty(item_date)) ? new Date(item_date).toLocaleString() : '', invisible: !item.asc_getVisible()};
(item.asc_getValid()==0) ? validSignatures.push(sign) : invalidSignatures.push(sign);
});
// requestedSignatures = [{name: 'Hammish Mitchell', guid: '123', requested: true}, {name: 'Someone Somewhere', guid: '123', requested: true}, {name: 'Mary White', guid: '123', requested: true}, {name: 'John Black', guid: '123', requested: true}];
// validSignatures = [{name: 'Hammish Mitchell', guid: '123', date: '18/05/2017', invisible: true}, {name: 'Someone Somewhere', guid: '345', date: '18/05/2017'}];
// invalidSignatures = [{name: 'Mary White', guid: '111', date: '18/05/2017'}, {name: 'John Black', guid: '456', date: '18/05/2017'}];
me._state.hasValid = validSignatures.length>0;
me._state.hasInvalid = invalidSignatures.length>0;
me._state.hasRequested = requestedSignatures.length>0;
this.viewRequestedList.store.reset(requestedSignatures);
this.viewValidList.store.reset(validSignatures);
this.viewInvalidList.store.reset(invalidSignatures);
this.$el.find('.requested').toggleClass('hidden', !me._state.hasRequested);
this.$el.find('.valid').toggleClass('hidden', !me._state.hasValid);
this.$el.find('.invalid').toggleClass('hidden', !me._state.hasInvalid);
me.disableEditing(me._state.hasValid || me._state.hasInvalid);
},
onSelectSignature: function(picker, item, record, e){
if (!record) return;
var btn = $(e.target);
if (btn && btn.hasClass('caret')) {
var menu = this.signatureMenu;
if (menu.isVisible()) {
menu.hide();
return;
}
var showPoint, me = this,
currentTarget = $(e.currentTarget),
parent = $(this.el),
offset = currentTarget.offset(),
offsetParent = parent.offset();
showPoint = [offset.left - offsetParent.left + currentTarget.width(), offset.top - offsetParent.top + currentTarget.height()/2];
var menuContainer = parent.find('#menu-signature-container');
if (!menu.rendered) {
if (menuContainer.length < 1) {
menuContainer = $('<div id="menu-signature-container" style="position: absolute; z-index: 10000;"><div class="dropdown-toggle" data-toggle="dropdown"></div></div>', menu.id);
parent.append(menuContainer);
}
menu.render(menuContainer);
menu.cmpEl.attr({tabindex: "-1"});
menu.on({
'show:after': function(cmp) {
if (cmp && cmp.menuAlignEl)
cmp.menuAlignEl.toggleClass('over', true);
},
'hide:after': function(cmp) {
if (cmp && cmp.menuAlignEl)
cmp.menuAlignEl.toggleClass('over', false);
}
});
}
var requested = record.get('requested'),
signed = (this._state.hasValid || this._state.hasInvalid);
menu.items[0].setVisible(requested);
menu.items[1].setVisible(!requested);
menu.items[2].setVisible(requested || !record.get('invisible'));
menu.items[3].setVisible(!requested);
menu.items[0].setDisabled(this._locked);
menu.items[3].setDisabled(this._locked);
menu.items[1].cmpEl.attr('data-value', record.get('certificateId')); // view certificate
menu.items[2].cmpEl.attr('data-value', signed ? 1 : 0); // view or edit signature settings
menu.cmpEl.attr('data-value', record.get('guid'));
menuContainer.css({left: showPoint[0], top: showPoint[1]});
menu.menuAlignEl = currentTarget;
menu.setOffset(-20, -currentTarget.height()/2 + 3);
menu.show();
_.delay(function() {
menu.cmpEl.focus();
}, 10);
e.stopPropagation();
e.preventDefault();
} else {
this.api.asc_gotoSignature(record.get('guid'));
}
},
onMenuSignatureClick: function(menu, item) {
var guid = menu.cmpEl.attr('data-value');
switch (item.value) {
case 0:
Common.NotificationCenter.trigger('protect:sign', guid);
break;
case 1:
this.api.asc_ViewCertificate(item.cmpEl.attr('data-value'));
break;
case 2:
Common.NotificationCenter.trigger('protect:signature', 'visible', !!parseInt(item.cmpEl.attr('data-value')), guid);// can edit settings for requested signature
break;
case 3:
this.api.asc_RemoveSignature(guid);
break;
}
},
onDocumentReady: function() {
this._state.ready = true;
this.updateSignatures(this.api.asc_getSignatures(), this.api.asc_getRequestSignatures());
this.showSignatureTooltip(this._state.hasValid, this._state.hasInvalid, this._state.hasRequested);
},
showSignatureTooltip: function(hasValid, hasInvalid, hasRequested) {
var me = this,
tip = me._state.tip;
if (!hasValid && !hasInvalid && !hasRequested) {
if (tip && tip.isVisible()) {
tip.close();
me._state.tip = undefined;
}
return;
}
var showLink = hasValid || hasInvalid,
tipText = (hasInvalid) ? me.txtSignedInvalid : (hasValid ? me.txtSigned : "");
if (hasRequested)
tipText = me.txtRequestedSignatures + "<br><br>" + tipText;
if (tip && tip.isVisible() && (tipText !== tip.text || showLink !== tip.showLink)) {
tip.close();
me._state.tip = undefined;
}
if (!me._state.tip) {
tip = new Common.UI.SynchronizeTip({
target : DE.getController('RightMenu').getView('RightMenu').btnSignature.btnEl,
text : tipText,
showLink: showLink,
textLink: this.txtContinueEditing,
placement: 'left'
});
tip.on({
'dontshowclick': function() {
Common.UI.warning({
title: me.notcriticalErrorTitle,
msg: me.txtEditWarning,
buttons: ['ok', 'cancel'],
primary: 'ok',
callback: function(btn) {
if (btn == 'ok') {
tip.close();
me._state.tip = undefined;
me.api.asc_RemoveAllSignatures();
}
}
});
},
'closeclick': function() {
tip.close();
me._state.tip = undefined;
}
});
me._state.tip = tip;
tip.show();
}
},
disableEditing: function(disable) {
if (this._state.DisabledEditing != disable) {
this._state.DisabledEditing = disable;
var rightMenuController = DE.getController('RightMenu');
if (disable && rightMenuController.rightmenu.GetActivePane() !== 'id-signature-settings')
rightMenuController.rightmenu.clearSelection();
rightMenuController.SetDisabled(disable, false, true);
DE.getController('Toolbar').DisableToolbar(disable, disable);
DE.getController('Statusbar').getView('Statusbar').SetDisabled(disable);
DE.getController('Common.Controllers.ReviewChanges').SetDisabled(disable);
DE.getController('DocumentHolder').getView().SetDisabled(disable, true);
var leftMenu = DE.getController('LeftMenu').leftMenu;
leftMenu.btnComments.setDisabled(disable);
var comments = DE.getController('Common.Controllers.Comments');
if (comments)
comments.setPreviewMode(disable);
}
},
strSignature: 'Signature',
strRequested: 'Requested signatures',
strValid: 'Valid signatures',
strInvalid: 'Invalid signatures',
strSign: 'Sign',
strDetails: 'Signature Details',
strSetup: 'Signature Setup',
txtSigned: 'Valid signatures has been added to the document. The document is protected from editing.',
txtSignedInvalid: 'Some of the digital signatures in document are invalid or could not be verified. The document is protected from editing.',
txtRequestedSignatures: 'This document needs to be signed.',
txtContinueEditing: 'Edit anyway',
notcriticalErrorTitle: 'Warning',
txtEditWarning: 'Editing will remove the signatures from the document.<br>Are you sure you want to continue?',
strDelete: 'Remove Signature',
strSigner: 'Signer'
}, DE.Views.SignatureSettings || {}));
});

View file

@ -2469,7 +2469,8 @@ define([
capImgWrapping: 'Wrapping', capImgWrapping: 'Wrapping',
capBtnComment: 'Comment', capBtnComment: 'Comment',
textColumnsCustom: 'Custom Columns', textColumnsCustom: 'Custom Columns',
textSurface: 'Surface' textSurface: 'Surface',
textTabProtect: 'Protection'
} }
})(), DE.Views.Toolbar || {})); })(), DE.Views.Toolbar || {}));
}); });

View file

@ -153,6 +153,7 @@ require([
,'Common.Controllers.ExternalDiagramEditor' ,'Common.Controllers.ExternalDiagramEditor'
,'Common.Controllers.ExternalMergeEditor' ,'Common.Controllers.ExternalMergeEditor'
,'Common.Controllers.ReviewChanges' ,'Common.Controllers.ReviewChanges'
,'Common.Controllers.Protection'
] ]
}); });
@ -173,6 +174,7 @@ require([
'documenteditor/main/app/view/TableSettings', 'documenteditor/main/app/view/TableSettings',
'documenteditor/main/app/view/ShapeSettings', 'documenteditor/main/app/view/ShapeSettings',
'documenteditor/main/app/view/TextArtSettings', 'documenteditor/main/app/view/TextArtSettings',
'documenteditor/main/app/view/SignatureSettings',
'common/main/lib/util/utils', 'common/main/lib/util/utils',
'common/main/lib/util/LocalStorage', 'common/main/lib/util/LocalStorage',
'common/main/lib/controller/Fonts', 'common/main/lib/controller/Fonts',
@ -186,6 +188,7 @@ require([
,'common/main/lib/controller/ExternalDiagramEditor' ,'common/main/lib/controller/ExternalDiagramEditor'
,'common/main/lib/controller/ExternalMergeEditor' ,'common/main/lib/controller/ExternalMergeEditor'
,'common/main/lib/controller/ReviewChanges' ,'common/main/lib/controller/ReviewChanges'
,'common/main/lib/controller/Protection'
], function() { ], function() {
window.compareVersions = true; window.compareVersions = true;
app.start(); app.start();

View file

@ -22,7 +22,7 @@
"Common.Controllers.ReviewChanges.textColor": "Font color", "Common.Controllers.ReviewChanges.textColor": "Font color",
"Common.Controllers.ReviewChanges.textContextual": "Don't add interval between paragraphs of the same style", "Common.Controllers.ReviewChanges.textContextual": "Don't add interval between paragraphs of the same style",
"Common.Controllers.ReviewChanges.textDeleted": "<b>Deleted:</b>", "Common.Controllers.ReviewChanges.textDeleted": "<b>Deleted:</b>",
"Common.Controllers.ReviewChanges.textDStrikeout": "Double strikeout", "Common.Controllers.ReviewChanges.textDStrikeout": "Double strikethrough",
"Common.Controllers.ReviewChanges.textEquation": "Equation", "Common.Controllers.ReviewChanges.textEquation": "Equation",
"Common.Controllers.ReviewChanges.textExact": "exactly", "Common.Controllers.ReviewChanges.textExact": "exactly",
"Common.Controllers.ReviewChanges.textFirstLine": "First line", "Common.Controllers.ReviewChanges.textFirstLine": "First line",
@ -58,7 +58,7 @@
"Common.Controllers.ReviewChanges.textSpacing": "Spacing", "Common.Controllers.ReviewChanges.textSpacing": "Spacing",
"Common.Controllers.ReviewChanges.textSpacingAfter": "Spacing after", "Common.Controllers.ReviewChanges.textSpacingAfter": "Spacing after",
"Common.Controllers.ReviewChanges.textSpacingBefore": "Spacing before", "Common.Controllers.ReviewChanges.textSpacingBefore": "Spacing before",
"Common.Controllers.ReviewChanges.textStrikeout": "Strikeout", "Common.Controllers.ReviewChanges.textStrikeout": "Strikethrough",
"Common.Controllers.ReviewChanges.textSubScript": "Subscript", "Common.Controllers.ReviewChanges.textSubScript": "Subscript",
"Common.Controllers.ReviewChanges.textSuperScript": "Superscript", "Common.Controllers.ReviewChanges.textSuperScript": "Superscript",
"Common.Controllers.ReviewChanges.textTabs": "Change tabs", "Common.Controllers.ReviewChanges.textTabs": "Change tabs",
@ -183,12 +183,29 @@
"Common.Views.OpenDialog.txtPassword": "Password", "Common.Views.OpenDialog.txtPassword": "Password",
"Common.Views.OpenDialog.txtTitle": "Choose %1 options", "Common.Views.OpenDialog.txtTitle": "Choose %1 options",
"Common.Views.OpenDialog.txtTitleProtected": "Protected File", "Common.Views.OpenDialog.txtTitleProtected": "Protected File",
"Common.Views.PasswordDialog.cancelButtonText": "Cancel",
"Common.Views.PasswordDialog.okButtonText": "OK",
"Common.Views.PasswordDialog.txtDescription": "A password is required to open this document",
"Common.Views.PasswordDialog.txtIncorrectPwd": "Confirmation password is not identical",
"Common.Views.PasswordDialog.txtPassword": "Password",
"Common.Views.PasswordDialog.txtRepeat": "Repeat password",
"Common.Views.PasswordDialog.txtTitle": "Set Password",
"Common.Views.PluginDlg.textLoading": "Loading", "Common.Views.PluginDlg.textLoading": "Loading",
"Common.Views.Plugins.groupCaption": "Plugins", "Common.Views.Plugins.groupCaption": "Plugins",
"Common.Views.Plugins.strPlugins": "Plugins", "Common.Views.Plugins.strPlugins": "Plugins",
"Common.Views.Plugins.textLoading": "Loading", "Common.Views.Plugins.textLoading": "Loading",
"Common.Views.Plugins.textStart": "Start", "Common.Views.Plugins.textStart": "Start",
"Common.Views.Plugins.textStop": "Stop", "Common.Views.Plugins.textStop": "Stop",
"Common.Views.Protection.hintAddPwd": "Encrypt with password",
"Common.Views.Protection.hintPwd": "Change or delete password",
"Common.Views.Protection.hintSignature": "Add digital signature or signature line",
"Common.Views.Protection.txtAddPwd": "Add password",
"Common.Views.Protection.txtChangePwd": "Change password",
"Common.Views.Protection.txtDeletePwd": "Delete password",
"Common.Views.Protection.txtEncrypt": "Encrypt",
"Common.Views.Protection.txtInvisibleSignature": "Add digital signature",
"Common.Views.Protection.txtSignature": "Signature",
"Common.Views.Protection.txtSignatureLine": "Signature line",
"Common.Views.RenameDialog.cancelButtonText": "Cancel", "Common.Views.RenameDialog.cancelButtonText": "Cancel",
"Common.Views.RenameDialog.okButtonText": "Ok", "Common.Views.RenameDialog.okButtonText": "Ok",
"Common.Views.RenameDialog.textName": "File name", "Common.Views.RenameDialog.textName": "File name",
@ -228,6 +245,32 @@
"Common.Views.ReviewChangesDialog.txtReject": "Reject", "Common.Views.ReviewChangesDialog.txtReject": "Reject",
"Common.Views.ReviewChangesDialog.txtRejectAll": "Reject All Changes", "Common.Views.ReviewChangesDialog.txtRejectAll": "Reject All Changes",
"Common.Views.ReviewChangesDialog.txtRejectCurrent": "Reject Current Change", "Common.Views.ReviewChangesDialog.txtRejectCurrent": "Reject Current Change",
"Common.Views.SignDialog.cancelButtonText": "Cancel",
"Common.Views.SignDialog.okButtonText": "Ok",
"Common.Views.SignDialog.textBold": "Bold",
"Common.Views.SignDialog.textCertificate": "Certificate",
"Common.Views.SignDialog.textChange": "Change",
"Common.Views.SignDialog.textInputName": "Input signer name",
"Common.Views.SignDialog.textItalic": "Italic",
"Common.Views.SignDialog.textPurpose": "Purpose for signing this document",
"Common.Views.SignDialog.textSelectImage": "Select Image",
"Common.Views.SignDialog.textSignature": "Signature looks as",
"Common.Views.SignDialog.textTitle": "Sign Document",
"Common.Views.SignDialog.textUseImage": "or click 'Select Image' to use a picture as signature",
"Common.Views.SignDialog.textValid": "Valid from %1 to %2",
"Common.Views.SignDialog.tipFontName": "Font Name",
"Common.Views.SignDialog.tipFontSize": "Font Size",
"Common.Views.SignSettingsDialog.cancelButtonText": "Cancel",
"Common.Views.SignSettingsDialog.okButtonText": "Ok",
"Common.Views.SignSettingsDialog.textAllowComment": "Allow signer to add comment in the signature dialog",
"Common.Views.SignSettingsDialog.textInfo": "Signer Info",
"Common.Views.SignSettingsDialog.textInfoEmail": "E-mail",
"Common.Views.SignSettingsDialog.textInfoName": "Name",
"Common.Views.SignSettingsDialog.textInfoTitle": "Signer Title",
"Common.Views.SignSettingsDialog.textInstructions": "Instructions for Signer",
"Common.Views.SignSettingsDialog.textShowDate": "Show sign date in signature line",
"Common.Views.SignSettingsDialog.textTitle": "Signature Settings",
"Common.Views.SignSettingsDialog.txtEmpty": "This field is required",
"DE.Controllers.LeftMenu.leavePageText": "All unsaved changes in this document will be lost.<br> Click \"Cancel\" then \"Save\" to save them. Click \"OK\" to discard all the unsaved changes.", "DE.Controllers.LeftMenu.leavePageText": "All unsaved changes in this document will be lost.<br> Click \"Cancel\" then \"Save\" to save them. Click \"OK\" to discard all the unsaved changes.",
"DE.Controllers.LeftMenu.newDocumentTitle": "Unnamed document", "DE.Controllers.LeftMenu.newDocumentTitle": "Unnamed document",
"DE.Controllers.LeftMenu.notcriticalErrorTitle": "Warning", "DE.Controllers.LeftMenu.notcriticalErrorTitle": "Warning",
@ -317,19 +360,30 @@
"DE.Controllers.Main.titleLicenseExp": "License expired", "DE.Controllers.Main.titleLicenseExp": "License expired",
"DE.Controllers.Main.titleServerVersion": "Editor updated", "DE.Controllers.Main.titleServerVersion": "Editor updated",
"DE.Controllers.Main.titleUpdateVersion": "Version changed", "DE.Controllers.Main.titleUpdateVersion": "Version changed",
"DE.Controllers.Main.txtAbove": "above",
"DE.Controllers.Main.txtArt": "Your text here", "DE.Controllers.Main.txtArt": "Your text here",
"DE.Controllers.Main.txtBasicShapes": "Basic Shapes", "DE.Controllers.Main.txtBasicShapes": "Basic Shapes",
"DE.Controllers.Main.txtBelow": "below",
"DE.Controllers.Main.txtBookmarkError": "Error! Bookmark not defined.",
"DE.Controllers.Main.txtButtons": "Buttons", "DE.Controllers.Main.txtButtons": "Buttons",
"DE.Controllers.Main.txtCallouts": "Callouts", "DE.Controllers.Main.txtCallouts": "Callouts",
"DE.Controllers.Main.txtCharts": "Charts", "DE.Controllers.Main.txtCharts": "Charts",
"DE.Controllers.Main.txtDiagramTitle": "Chart Title", "DE.Controllers.Main.txtDiagramTitle": "Chart Title",
"DE.Controllers.Main.txtEditingMode": "Set editing mode...", "DE.Controllers.Main.txtEditingMode": "Set editing mode...",
"DE.Controllers.Main.txtErrorLoadHistory": "History loading failed", "DE.Controllers.Main.txtErrorLoadHistory": "History loading failed",
"DE.Controllers.Main.txtEvenPage": "Even Page ",
"DE.Controllers.Main.txtFiguredArrows": "Figured Arrows", "DE.Controllers.Main.txtFiguredArrows": "Figured Arrows",
"DE.Controllers.Main.txtFirstPage": "First Page ",
"DE.Controllers.Main.txtFooter": "Footer",
"DE.Controllers.Main.txtHeader": "Header",
"DE.Controllers.Main.txtLines": "Lines", "DE.Controllers.Main.txtLines": "Lines",
"DE.Controllers.Main.txtMath": "Math", "DE.Controllers.Main.txtMath": "Math",
"DE.Controllers.Main.txtNeedSynchronize": "You have updates", "DE.Controllers.Main.txtNeedSynchronize": "You have updates",
"DE.Controllers.Main.txtOddPage": "Odd Page ",
"DE.Controllers.Main.txtOnPage": "on page ",
"DE.Controllers.Main.txtRectangles": "Rectangles", "DE.Controllers.Main.txtRectangles": "Rectangles",
"DE.Controllers.Main.txtSameAsPrev": "Same as Previous",
"DE.Controllers.Main.txtSection": " -Section ",
"DE.Controllers.Main.txtSeries": "Series", "DE.Controllers.Main.txtSeries": "Series",
"DE.Controllers.Main.txtStarsRibbons": "Stars & Ribbons", "DE.Controllers.Main.txtStarsRibbons": "Stars & Ribbons",
"DE.Controllers.Main.txtStyle_Heading_1": "Heading 1", "DE.Controllers.Main.txtStyle_Heading_1": "Heading 1",
@ -797,6 +851,10 @@
"DE.Views.DocumentHolder.spellcheckText": "Spellcheck", "DE.Views.DocumentHolder.spellcheckText": "Spellcheck",
"DE.Views.DocumentHolder.splitCellsText": "Split Cell...", "DE.Views.DocumentHolder.splitCellsText": "Split Cell...",
"DE.Views.DocumentHolder.splitCellTitleText": "Split Cell", "DE.Views.DocumentHolder.splitCellTitleText": "Split Cell",
"DE.Views.DocumentHolder.strDelete": "Remove Signature",
"DE.Views.DocumentHolder.strDetails": "Signature Details",
"DE.Views.DocumentHolder.strSetup": "Signature Setup",
"DE.Views.DocumentHolder.strSign": "Sign",
"DE.Views.DocumentHolder.styleText": "Formatting as Style", "DE.Views.DocumentHolder.styleText": "Formatting as Style",
"DE.Views.DocumentHolder.tableText": "Table", "DE.Views.DocumentHolder.tableText": "Table",
"DE.Views.DocumentHolder.textAlign": "Align", "DE.Views.DocumentHolder.textAlign": "Align",
@ -955,6 +1013,7 @@
"DE.Views.FileMenu.btnHistoryCaption": "Version History", "DE.Views.FileMenu.btnHistoryCaption": "Version History",
"DE.Views.FileMenu.btnInfoCaption": "Document Info...", "DE.Views.FileMenu.btnInfoCaption": "Document Info...",
"DE.Views.FileMenu.btnPrintCaption": "Print", "DE.Views.FileMenu.btnPrintCaption": "Print",
"DE.Views.FileMenu.btnProtectCaption": "Protect",
"DE.Views.FileMenu.btnRecentFilesCaption": "Open Recent...", "DE.Views.FileMenu.btnRecentFilesCaption": "Open Recent...",
"DE.Views.FileMenu.btnRenameCaption": "Rename...", "DE.Views.FileMenu.btnRenameCaption": "Rename...",
"DE.Views.FileMenu.btnReturnCaption": "Back to Document", "DE.Views.FileMenu.btnReturnCaption": "Back to Document",
@ -984,6 +1043,22 @@
"DE.Views.FileMenuPanels.DocumentInfo.txtWords": "Words", "DE.Views.FileMenuPanels.DocumentInfo.txtWords": "Words",
"DE.Views.FileMenuPanels.DocumentRights.txtBtnAccessRights": "Change access rights", "DE.Views.FileMenuPanels.DocumentRights.txtBtnAccessRights": "Change access rights",
"DE.Views.FileMenuPanels.DocumentRights.txtRights": "Persons who have rights", "DE.Views.FileMenuPanels.DocumentRights.txtRights": "Persons who have rights",
"DE.Views.FileMenuPanels.ProtectDoc.notcriticalErrorTitle": "Warning",
"DE.Views.FileMenuPanels.ProtectDoc.strEncrypt": "With password",
"del_DE.Views.FileMenuPanels.ProtectDoc.strInvalid": "Invalid signatures",
"del_DE.Views.FileMenuPanels.ProtectDoc.strInvisibleSign": "Add invisible digital signature",
"DE.Views.FileMenuPanels.ProtectDoc.strProtect": "Protect Document",
"del_DE.Views.FileMenuPanels.ProtectDoc.strRequested": "Requested signatures",
"DE.Views.FileMenuPanels.ProtectDoc.strSignature": "With signature",
"del_DE.Views.FileMenuPanels.ProtectDoc.strValid": "Valid signatures",
"del_DE.Views.FileMenuPanels.ProtectDoc.strVisibleSign": "Add visible signature",
"DE.Views.FileMenuPanels.ProtectDoc.txtEdit": "Edit document",
"DE.Views.FileMenuPanels.ProtectDoc.txtEditWarning": "Editing will remove the signatures from the document.<br>Are you sure you want to continue?",
"DE.Views.FileMenuPanels.ProtectDoc.txtEncrypted": "This document has been protected by password",
"DE.Views.FileMenuPanels.ProtectDoc.txtRequestedSignatures": "This document needs to be signed.",
"DE.Views.FileMenuPanels.ProtectDoc.txtSigned": "Valid signatures has been added to the document. The document is protected from editing.",
"DE.Views.FileMenuPanels.ProtectDoc.txtSignedInvalid": "Some of the digital signatures in document are invalid or could not be verified. The document is protected from editing.",
"DE.Views.FileMenuPanels.ProtectDoc.txtView": "View signatures",
"DE.Views.FileMenuPanels.Settings.okButtonText": "Apply", "DE.Views.FileMenuPanels.Settings.okButtonText": "Apply",
"DE.Views.FileMenuPanels.Settings.strAlignGuides": "Turn on alignment guides", "DE.Views.FileMenuPanels.Settings.strAlignGuides": "Turn on alignment guides",
"DE.Views.FileMenuPanels.Settings.strAutoRecover": "Turn on autorecover", "DE.Views.FileMenuPanels.Settings.strAutoRecover": "Turn on autorecover",
@ -1267,7 +1342,7 @@
"DE.Views.ParagraphSettingsAdvanced.strStrike": "Strikethrough", "DE.Views.ParagraphSettingsAdvanced.strStrike": "Strikethrough",
"DE.Views.ParagraphSettingsAdvanced.strSubscript": "Subscript", "DE.Views.ParagraphSettingsAdvanced.strSubscript": "Subscript",
"DE.Views.ParagraphSettingsAdvanced.strSuperscript": "Superscript", "DE.Views.ParagraphSettingsAdvanced.strSuperscript": "Superscript",
"DE.Views.ParagraphSettingsAdvanced.strTabs": "Tab", "DE.Views.ParagraphSettingsAdvanced.strTabs": "Tabs",
"DE.Views.ParagraphSettingsAdvanced.textAlign": "Alignment", "DE.Views.ParagraphSettingsAdvanced.textAlign": "Alignment",
"DE.Views.ParagraphSettingsAdvanced.textBackColor": "Background Color", "DE.Views.ParagraphSettingsAdvanced.textBackColor": "Background Color",
"DE.Views.ParagraphSettingsAdvanced.textBorderColor": "Border Color", "DE.Views.ParagraphSettingsAdvanced.textBorderColor": "Border Color",
@ -1306,6 +1381,7 @@
"DE.Views.RightMenu.txtMailMergeSettings": "Mail merge settings", "DE.Views.RightMenu.txtMailMergeSettings": "Mail merge settings",
"DE.Views.RightMenu.txtParagraphSettings": "Paragraph settings", "DE.Views.RightMenu.txtParagraphSettings": "Paragraph settings",
"DE.Views.RightMenu.txtShapeSettings": "Shape settings", "DE.Views.RightMenu.txtShapeSettings": "Shape settings",
"DE.Views.RightMenu.txtSignatureSettings": "Signature Settings",
"DE.Views.RightMenu.txtTableSettings": "Table settings", "DE.Views.RightMenu.txtTableSettings": "Table settings",
"DE.Views.RightMenu.txtTextArtSettings": "Text Art settings", "DE.Views.RightMenu.txtTextArtSettings": "Text Art settings",
"DE.Views.ShapeSettings.strBackground": "Background color", "DE.Views.ShapeSettings.strBackground": "Background color",
@ -1358,6 +1434,24 @@
"DE.Views.ShapeSettings.txtTight": "Tight", "DE.Views.ShapeSettings.txtTight": "Tight",
"DE.Views.ShapeSettings.txtTopAndBottom": "Top and bottom", "DE.Views.ShapeSettings.txtTopAndBottom": "Top and bottom",
"DE.Views.ShapeSettings.txtWood": "Wood", "DE.Views.ShapeSettings.txtWood": "Wood",
"DE.Views.SignatureSettings.notcriticalErrorTitle": "Warning",
"DE.Views.SignatureSettings.strDelete": "Remove Signature",
"DE.Views.SignatureSettings.strDetails": "Signature Details",
"DE.Views.SignatureSettings.strInvalid": "Invalid signatures",
"del_DE.Views.SignatureSettings.strInvisibleSign": "Add invisible digital signature",
"DE.Views.SignatureSettings.strRequested": "Requested signatures",
"DE.Views.SignatureSettings.strSetup": "Signature Setup",
"DE.Views.SignatureSettings.strSign": "Sign",
"DE.Views.SignatureSettings.strSignature": "Signature",
"DE.Views.SignatureSettings.strSigner": "Signer",
"DE.Views.SignatureSettings.strValid": "Valid signatures",
"del_DE.Views.SignatureSettings.strView": "View",
"del_DE.Views.SignatureSettings.strVisibleSign": "Add visible signature",
"DE.Views.SignatureSettings.txtContinueEditing": "Edit anyway",
"DE.Views.SignatureSettings.txtEditWarning": "Editing will remove the signatures from the document.<br>Are you sure you want to continue?",
"DE.Views.SignatureSettings.txtRequestedSignatures": "This document needs to be signed.",
"DE.Views.SignatureSettings.txtSigned": "Valid signatures has been added to the document. The document is protected from editing.",
"DE.Views.SignatureSettings.txtSignedInvalid": "Some of the digital signatures in document are invalid or could not be verified. The document is protected from editing.",
"DE.Views.Statusbar.goToPageText": "Go to Page", "DE.Views.Statusbar.goToPageText": "Go to Page",
"DE.Views.Statusbar.pageIndexText": "Page {0} of {1}", "DE.Views.Statusbar.pageIndexText": "Page {0} of {1}",
"DE.Views.Statusbar.tipFitPage": "Fit to page", "DE.Views.Statusbar.tipFitPage": "Fit to page",
@ -1598,7 +1692,7 @@
"DE.Views.Toolbar.textPortrait": "Portrait", "DE.Views.Toolbar.textPortrait": "Portrait",
"DE.Views.Toolbar.textRight": "Right: ", "DE.Views.Toolbar.textRight": "Right: ",
"DE.Views.Toolbar.textStock": "Stock", "DE.Views.Toolbar.textStock": "Stock",
"DE.Views.Toolbar.textStrikeout": "Strikeout", "DE.Views.Toolbar.textStrikeout": "Strikethrough",
"DE.Views.Toolbar.textStyleMenuDelete": "Delete style", "DE.Views.Toolbar.textStyleMenuDelete": "Delete style",
"DE.Views.Toolbar.textStyleMenuDeleteAll": "Delete all custom styles", "DE.Views.Toolbar.textStyleMenuDeleteAll": "Delete all custom styles",
"DE.Views.Toolbar.textStyleMenuNew": "New style from selection", "DE.Views.Toolbar.textStyleMenuNew": "New style from selection",
@ -1612,6 +1706,7 @@
"DE.Views.Toolbar.textTabHome": "Home", "DE.Views.Toolbar.textTabHome": "Home",
"DE.Views.Toolbar.textTabInsert": "Insert", "DE.Views.Toolbar.textTabInsert": "Insert",
"DE.Views.Toolbar.textTabLayout": "Layout", "DE.Views.Toolbar.textTabLayout": "Layout",
"DE.Views.Toolbar.textTabProtect": "Protection",
"DE.Views.Toolbar.textTabReview": "Review", "DE.Views.Toolbar.textTabReview": "Review",
"DE.Views.Toolbar.textTitleError": "Error", "DE.Views.Toolbar.textTitleError": "Error",
"DE.Views.Toolbar.textToCurrent": "To current position", "DE.Views.Toolbar.textToCurrent": "To current position",

View file

@ -183,12 +183,29 @@
"Common.Views.OpenDialog.txtPassword": "Password", "Common.Views.OpenDialog.txtPassword": "Password",
"Common.Views.OpenDialog.txtTitle": "Seleziona parametri %1", "Common.Views.OpenDialog.txtTitle": "Seleziona parametri %1",
"Common.Views.OpenDialog.txtTitleProtected": "File protetto", "Common.Views.OpenDialog.txtTitleProtected": "File protetto",
"Common.Views.PasswordDialog.cancelButtonText": "Annulla",
"Common.Views.PasswordDialog.okButtonText": "OK",
"Common.Views.PasswordDialog.txtDescription": "É richiesta la password per aprire il documento",
"Common.Views.PasswordDialog.txtIncorrectPwd": "la password di conferma non corrisponde",
"Common.Views.PasswordDialog.txtPassword": "Password",
"Common.Views.PasswordDialog.txtRepeat": "Ripeti password",
"Common.Views.PasswordDialog.txtTitle": "Imposta password",
"Common.Views.PluginDlg.textLoading": "Caricamento", "Common.Views.PluginDlg.textLoading": "Caricamento",
"Common.Views.Plugins.groupCaption": "Componenti Aggiuntivi", "Common.Views.Plugins.groupCaption": "Componenti Aggiuntivi",
"Common.Views.Plugins.strPlugins": "Plugin", "Common.Views.Plugins.strPlugins": "Plugin",
"Common.Views.Plugins.textLoading": "Caricamento", "Common.Views.Plugins.textLoading": "Caricamento",
"Common.Views.Plugins.textStart": "Avvio", "Common.Views.Plugins.textStart": "Avvio",
"Common.Views.Plugins.textStop": "Termina", "Common.Views.Plugins.textStop": "Termina",
"Common.Views.Protection.hintAddPwd": "Crittografa con password",
"Common.Views.Protection.hintPwd": "Modifica o rimuovi password",
"Common.Views.Protection.hintSignature": "Aggiungi firma digitale o riga di firma",
"Common.Views.Protection.txtAddPwd": "Aggiungi password",
"Common.Views.Protection.txtChangePwd": "Modifica password",
"Common.Views.Protection.txtDeletePwd": "Elimina password",
"Common.Views.Protection.txtEncrypt": "Crittografare",
"Common.Views.Protection.txtInvisibleSignature": "Aggiungi firma digitale",
"Common.Views.Protection.txtSignature": "Firma",
"Common.Views.Protection.txtSignatureLine": "Riga della firma",
"Common.Views.RenameDialog.cancelButtonText": "Annulla", "Common.Views.RenameDialog.cancelButtonText": "Annulla",
"Common.Views.RenameDialog.okButtonText": "Ok", "Common.Views.RenameDialog.okButtonText": "Ok",
"Common.Views.RenameDialog.textName": "Nome del file", "Common.Views.RenameDialog.textName": "Nome del file",
@ -228,6 +245,32 @@
"Common.Views.ReviewChangesDialog.txtReject": "Respingi", "Common.Views.ReviewChangesDialog.txtReject": "Respingi",
"Common.Views.ReviewChangesDialog.txtRejectAll": "Annulla tutte le modifiche", "Common.Views.ReviewChangesDialog.txtRejectAll": "Annulla tutte le modifiche",
"Common.Views.ReviewChangesDialog.txtRejectCurrent": "Annulla la modifica attuale", "Common.Views.ReviewChangesDialog.txtRejectCurrent": "Annulla la modifica attuale",
"Common.Views.SignDialog.cancelButtonText": "Annulla",
"Common.Views.SignDialog.okButtonText": "OK",
"Common.Views.SignDialog.textBold": "Grassetto",
"Common.Views.SignDialog.textCertificate": "Certificato",
"Common.Views.SignDialog.textChange": "Cambia",
"Common.Views.SignDialog.textInputName": "Inserisci nome firmatario",
"Common.Views.SignDialog.textItalic": "Corsivo",
"Common.Views.SignDialog.textPurpose": "Motivo della firma del documento",
"Common.Views.SignDialog.textSelectImage": "Seleziona Immagine",
"Common.Views.SignDialog.textSignature": "La firma appare come",
"Common.Views.SignDialog.textTitle": "Firma Documento",
"Common.Views.SignDialog.textUseImage": "oppure clicca 'Scegli immagine' per utilizzare u'immagine come firma",
"Common.Views.SignDialog.textValid": "Valido dal %1 al %2",
"Common.Views.SignDialog.tipFontName": "Nome carattere",
"Common.Views.SignDialog.tipFontSize": "Dimensione carattere",
"Common.Views.SignSettingsDialog.cancelButtonText": "Annulla",
"Common.Views.SignSettingsDialog.okButtonText": "OK",
"Common.Views.SignSettingsDialog.textAllowComment": "Consenti al firmatario di aggiungere commenti nella finestra di firma",
"Common.Views.SignSettingsDialog.textInfo": "Informazioni sul Firmatario",
"Common.Views.SignSettingsDialog.textInfoEmail": "E-mail",
"Common.Views.SignSettingsDialog.textInfoName": "Nome",
"Common.Views.SignSettingsDialog.textInfoTitle": "Titolo del Firmatario",
"Common.Views.SignSettingsDialog.textInstructions": "Istruzioni per i Firmatari",
"Common.Views.SignSettingsDialog.textShowDate": "Mostra la data nella riga di Firma",
"Common.Views.SignSettingsDialog.textTitle": "Impostazioni della Firma",
"Common.Views.SignSettingsDialog.txtEmpty": "Campo obbligatorio",
"DE.Controllers.LeftMenu.leavePageText": "Tutte le modifiche non salvate nel documento verranno perse.<br> Clicca \"Annulla\" e poi \"Salva\" per salvarle. Clicca \"OK\" per annullare tutte le modifiche non salvate.", "DE.Controllers.LeftMenu.leavePageText": "Tutte le modifiche non salvate nel documento verranno perse.<br> Clicca \"Annulla\" e poi \"Salva\" per salvarle. Clicca \"OK\" per annullare tutte le modifiche non salvate.",
"DE.Controllers.LeftMenu.newDocumentTitle": "Documento senza nome", "DE.Controllers.LeftMenu.newDocumentTitle": "Documento senza nome",
"DE.Controllers.LeftMenu.notcriticalErrorTitle": "Warning", "DE.Controllers.LeftMenu.notcriticalErrorTitle": "Warning",
@ -310,26 +353,37 @@
"DE.Controllers.Main.textCloseTip": "Clicca per chiudere il consiglio", "DE.Controllers.Main.textCloseTip": "Clicca per chiudere il consiglio",
"DE.Controllers.Main.textContactUs": "Contatta il team di vendite", "DE.Controllers.Main.textContactUs": "Contatta il team di vendite",
"DE.Controllers.Main.textLoadingDocument": "Caricamento del documento", "DE.Controllers.Main.textLoadingDocument": "Caricamento del documento",
"DE.Controllers.Main.textNoLicenseTitle": "Versione open source di ONLYOFFICE", "DE.Controllers.Main.textNoLicenseTitle": "ONLYOFFICE® limite connessione",
"DE.Controllers.Main.textShape": "Forma", "DE.Controllers.Main.textShape": "Forma",
"DE.Controllers.Main.textStrict": "Modalità Rigorosa", "DE.Controllers.Main.textStrict": "Modalità Rigorosa",
"DE.Controllers.Main.textTryUndoRedo": "Le funzioni Annulla/Ripristina sono disabilitate per la Modalità di Co-editing Veloce.<br>Clicca il pulsante 'Modalità Rigorosa' per passare alla Modalità di Co-editing Rigorosa per poter modificare il file senza l'interferenza di altri utenti e inviare le modifiche solamente dopo averle salvate. Puoi passare da una modalità all'altra di co-editing utilizzando le Impostazioni avanzate dell'editor.", "DE.Controllers.Main.textTryUndoRedo": "Le funzioni Annulla/Ripristina sono disabilitate per la Modalità di Co-editing Veloce.<br>Clicca il pulsante 'Modalità Rigorosa' per passare alla Modalità di Co-editing Rigorosa per poter modificare il file senza l'interferenza di altri utenti e inviare le modifiche solamente dopo averle salvate. Puoi passare da una modalità all'altra di co-editing utilizzando le Impostazioni avanzate dell'editor.",
"DE.Controllers.Main.titleLicenseExp": "La licenza è scaduta", "DE.Controllers.Main.titleLicenseExp": "La licenza è scaduta",
"DE.Controllers.Main.titleServerVersion": "L'editor è stato aggiornato", "DE.Controllers.Main.titleServerVersion": "L'editor è stato aggiornato",
"DE.Controllers.Main.titleUpdateVersion": "Version changed", "DE.Controllers.Main.titleUpdateVersion": "Version changed",
"DE.Controllers.Main.txtAbove": "Sopra",
"DE.Controllers.Main.txtArt": "Your text here", "DE.Controllers.Main.txtArt": "Your text here",
"DE.Controllers.Main.txtBasicShapes": "Figure di base", "DE.Controllers.Main.txtBasicShapes": "Figure di base",
"DE.Controllers.Main.txtBelow": "sotto",
"DE.Controllers.Main.txtBookmarkError": "Errore! Segnalibro non definito.",
"DE.Controllers.Main.txtButtons": "Bottoni", "DE.Controllers.Main.txtButtons": "Bottoni",
"DE.Controllers.Main.txtCallouts": "Chiamate", "DE.Controllers.Main.txtCallouts": "Chiamate",
"DE.Controllers.Main.txtCharts": "Grafici", "DE.Controllers.Main.txtCharts": "Grafici",
"DE.Controllers.Main.txtDiagramTitle": "Titolo diagramma", "DE.Controllers.Main.txtDiagramTitle": "Titolo diagramma",
"DE.Controllers.Main.txtEditingMode": "Impostazione modo di modifica...", "DE.Controllers.Main.txtEditingMode": "Impostazione modo di modifica...",
"DE.Controllers.Main.txtErrorLoadHistory": "History loading failed", "DE.Controllers.Main.txtErrorLoadHistory": "History loading failed",
"DE.Controllers.Main.txtEvenPage": "Pagina pari",
"DE.Controllers.Main.txtFiguredArrows": "Frecce decorate", "DE.Controllers.Main.txtFiguredArrows": "Frecce decorate",
"DE.Controllers.Main.txtFirstPage": "Prima Pagina",
"DE.Controllers.Main.txtFooter": "Piè di pagina",
"DE.Controllers.Main.txtHeader": "Intestazione",
"DE.Controllers.Main.txtLines": "Linee", "DE.Controllers.Main.txtLines": "Linee",
"DE.Controllers.Main.txtMath": "Matematica", "DE.Controllers.Main.txtMath": "Matematica",
"DE.Controllers.Main.txtNeedSynchronize": "Ci sono aggiornamenti disponibili", "DE.Controllers.Main.txtNeedSynchronize": "Ci sono aggiornamenti disponibili",
"DE.Controllers.Main.txtOddPage": "Pagina dispari",
"DE.Controllers.Main.txtOnPage": "sulla pagina",
"DE.Controllers.Main.txtRectangles": "Rettangoli", "DE.Controllers.Main.txtRectangles": "Rettangoli",
"DE.Controllers.Main.txtSameAsPrev": "come in precedenza",
"DE.Controllers.Main.txtSection": "Sezione",
"DE.Controllers.Main.txtSeries": "Serie", "DE.Controllers.Main.txtSeries": "Serie",
"DE.Controllers.Main.txtStarsRibbons": "Stelle e nastri", "DE.Controllers.Main.txtStarsRibbons": "Stelle e nastri",
"DE.Controllers.Main.txtStyle_Heading_1": "Titolo 1", "DE.Controllers.Main.txtStyle_Heading_1": "Titolo 1",
@ -360,7 +414,8 @@
"DE.Controllers.Main.warnBrowserIE9": "L'applicazione è poco compatibile con IE9. Usa IE10 o più recente", "DE.Controllers.Main.warnBrowserIE9": "L'applicazione è poco compatibile con IE9. Usa IE10 o più recente",
"DE.Controllers.Main.warnBrowserZoom": "Le impostazioni correnti di zoom del tuo browser non sono completamente supportate. Per favore, ritorna allo zoom predefinito premendo Ctrl+0.", "DE.Controllers.Main.warnBrowserZoom": "Le impostazioni correnti di zoom del tuo browser non sono completamente supportate. Per favore, ritorna allo zoom predefinito premendo Ctrl+0.",
"DE.Controllers.Main.warnLicenseExp": "La tua licenza è scaduta.<br>Si prega di aggiornare la licenza e ricaricare la pagina.", "DE.Controllers.Main.warnLicenseExp": "La tua licenza è scaduta.<br>Si prega di aggiornare la licenza e ricaricare la pagina.",
"DE.Controllers.Main.warnNoLicense": "Stai utilizzando una versione open source di ONLYOFFICE. La versione presenta delle limitazioni per le connessioni simultanee al server dei documenti (20 connessioni alla volta).<br>Per poterne avere di più, considera l'acquisto di una licenza commerciale.", "DE.Controllers.Main.warnNoLicense": "Questa versione di ONLYOFFICE® Editors presenta delle limitazioni per le connessioni simultanee al server dei documenti.<br>Se necessiti di avere di più, considera l'acquisto di una licenza commerciale.",
"DE.Controllers.Main.warnNoLicenseUsers": "Questa versione di ONLYOFFICE Editors presenta alcune limitazioni per gli utenti simultanei. <br> Se hai bisogno di più, ti preghiamo di considerare l'aggiornamento della tua licenza attuale o l'acquisto di una licenza commerciale.",
"DE.Controllers.Main.warnProcessRightsChange": "Ci stato negato il diritto alla modifica del file.", "DE.Controllers.Main.warnProcessRightsChange": "Ci stato negato il diritto alla modifica del file.",
"DE.Controllers.Statusbar.textHasChanges": "New changes have been tracked", "DE.Controllers.Statusbar.textHasChanges": "New changes have been tracked",
"DE.Controllers.Statusbar.textTrackChanges": "The document is opened with the Track Changes mode enabled", "DE.Controllers.Statusbar.textTrackChanges": "The document is opened with the Track Changes mode enabled",
@ -796,6 +851,10 @@
"DE.Views.DocumentHolder.spellcheckText": "Controllo ortografia", "DE.Views.DocumentHolder.spellcheckText": "Controllo ortografia",
"DE.Views.DocumentHolder.splitCellsText": "Dividi cella...", "DE.Views.DocumentHolder.splitCellsText": "Dividi cella...",
"DE.Views.DocumentHolder.splitCellTitleText": "Dividi cella", "DE.Views.DocumentHolder.splitCellTitleText": "Dividi cella",
"DE.Views.DocumentHolder.strDelete": "Rimuovi Firma",
"DE.Views.DocumentHolder.strDetails": "Dettagli firma",
"DE.Views.DocumentHolder.strSetup": "Impostazioni firma",
"DE.Views.DocumentHolder.strSign": "Firma",
"DE.Views.DocumentHolder.styleText": "Formatting as Style", "DE.Views.DocumentHolder.styleText": "Formatting as Style",
"DE.Views.DocumentHolder.tableText": "Tabella", "DE.Views.DocumentHolder.tableText": "Tabella",
"DE.Views.DocumentHolder.textAlign": "Allinea", "DE.Views.DocumentHolder.textAlign": "Allinea",
@ -954,6 +1013,7 @@
"DE.Views.FileMenu.btnHistoryCaption": "Cronologia delle versioni", "DE.Views.FileMenu.btnHistoryCaption": "Cronologia delle versioni",
"DE.Views.FileMenu.btnInfoCaption": "Informazioni documento...", "DE.Views.FileMenu.btnInfoCaption": "Informazioni documento...",
"DE.Views.FileMenu.btnPrintCaption": "Stampa", "DE.Views.FileMenu.btnPrintCaption": "Stampa",
"DE.Views.FileMenu.btnProtectCaption": "Proteggi",
"DE.Views.FileMenu.btnRecentFilesCaption": "Apri recenti...", "DE.Views.FileMenu.btnRecentFilesCaption": "Apri recenti...",
"DE.Views.FileMenu.btnRenameCaption": "Rinomina...", "DE.Views.FileMenu.btnRenameCaption": "Rinomina...",
"DE.Views.FileMenu.btnReturnCaption": "Torna al documento", "DE.Views.FileMenu.btnReturnCaption": "Torna al documento",
@ -983,6 +1043,22 @@
"DE.Views.FileMenuPanels.DocumentInfo.txtWords": "Parole", "DE.Views.FileMenuPanels.DocumentInfo.txtWords": "Parole",
"DE.Views.FileMenuPanels.DocumentRights.txtBtnAccessRights": "Cambia diritti di accesso", "DE.Views.FileMenuPanels.DocumentRights.txtBtnAccessRights": "Cambia diritti di accesso",
"DE.Views.FileMenuPanels.DocumentRights.txtRights": "Persone con diritti", "DE.Views.FileMenuPanels.DocumentRights.txtRights": "Persone con diritti",
"DE.Views.FileMenuPanels.ProtectDoc.notcriticalErrorTitle": "Avviso",
"DE.Views.FileMenuPanels.ProtectDoc.strEncrypt": "con Password",
"DE.Views.FileMenuPanels.ProtectDoc.strInvalid": "Firme non valide",
"DE.Views.FileMenuPanels.ProtectDoc.strInvisibleSign": "Aggiungi firma digitale invisibile",
"DE.Views.FileMenuPanels.ProtectDoc.strProtect": "Proteggi Documento",
"DE.Views.FileMenuPanels.ProtectDoc.strRequested": "Firme Richieste",
"DE.Views.FileMenuPanels.ProtectDoc.strSignature": "con Firma",
"DE.Views.FileMenuPanels.ProtectDoc.strValid": "Firme valide",
"DE.Views.FileMenuPanels.ProtectDoc.strVisibleSign": "Aggiungi firma visibile",
"DE.Views.FileMenuPanels.ProtectDoc.txtEdit": "Modifica documento",
"DE.Views.FileMenuPanels.ProtectDoc.txtEditWarning": "la modifica eliminerà le firme dal documento. <br>Sei sicuro di voler continuare?",
"DE.Views.FileMenuPanels.ProtectDoc.txtEncrypted": "Questo documento è protetto con password",
"DE.Views.FileMenuPanels.ProtectDoc.txtRequestedSignatures": "Questo documento necessita di essere firmato",
"DE.Views.FileMenuPanels.ProtectDoc.txtSigned": "Le firme valide sono state aggiunte al documento. Il documento è protetto dalla modifica.",
"DE.Views.FileMenuPanels.ProtectDoc.txtSignedInvalid": "Alcune delle firme digitali preseti nel documento non sono valide o non possono essere verificate. Il documento è protetto dalla modifica.",
"DE.Views.FileMenuPanels.ProtectDoc.txtView": "Mostra firme",
"DE.Views.FileMenuPanels.Settings.okButtonText": "Applica", "DE.Views.FileMenuPanels.Settings.okButtonText": "Applica",
"DE.Views.FileMenuPanels.Settings.strAlignGuides": "Abilita guide di allineamento", "DE.Views.FileMenuPanels.Settings.strAlignGuides": "Abilita guide di allineamento",
"DE.Views.FileMenuPanels.Settings.strAutoRecover": "Attiva il ripristino automatico", "DE.Views.FileMenuPanels.Settings.strAutoRecover": "Attiva il ripristino automatico",
@ -994,6 +1070,7 @@
"DE.Views.FileMenuPanels.Settings.strFontRender": "Hinting dei caratteri", "DE.Views.FileMenuPanels.Settings.strFontRender": "Hinting dei caratteri",
"DE.Views.FileMenuPanels.Settings.strForcesave": "Salva sempre sul server (altrimenti salva sul server alla chiusura del documento)", "DE.Views.FileMenuPanels.Settings.strForcesave": "Salva sempre sul server (altrimenti salva sul server alla chiusura del documento)",
"DE.Views.FileMenuPanels.Settings.strInputMode": "Attiva geroglifici", "DE.Views.FileMenuPanels.Settings.strInputMode": "Attiva geroglifici",
"DE.Views.FileMenuPanels.Settings.strInputSogou": "Attiva l'input Sogou Pinyin",
"DE.Views.FileMenuPanels.Settings.strLiveComment": "Attivare visualizzazione dei commenti", "DE.Views.FileMenuPanels.Settings.strLiveComment": "Attivare visualizzazione dei commenti",
"DE.Views.FileMenuPanels.Settings.strResolvedComment": "Attiva la visualizzazione dei commenti risolti", "DE.Views.FileMenuPanels.Settings.strResolvedComment": "Attiva la visualizzazione dei commenti risolti",
"DE.Views.FileMenuPanels.Settings.strShowChanges": "Evidenzia modifiche di collaborazione", "DE.Views.FileMenuPanels.Settings.strShowChanges": "Evidenzia modifiche di collaborazione",
@ -1144,6 +1221,7 @@
"DE.Views.LeftMenu.tipSupport": "Feedback & Support", "DE.Views.LeftMenu.tipSupport": "Feedback & Support",
"DE.Views.LeftMenu.tipTitles": "Titoli", "DE.Views.LeftMenu.tipTitles": "Titoli",
"DE.Views.LeftMenu.txtDeveloper": "MODALITÀ SVILUPPATORE", "DE.Views.LeftMenu.txtDeveloper": "MODALITÀ SVILUPPATORE",
"DE.Views.LeftMenu.txtTrial": "Modalità di prova",
"DE.Views.MailMergeEmailDlg.cancelButtonText": "Annulla", "DE.Views.MailMergeEmailDlg.cancelButtonText": "Annulla",
"DE.Views.MailMergeEmailDlg.filePlaceholder": "PDF", "DE.Views.MailMergeEmailDlg.filePlaceholder": "PDF",
"DE.Views.MailMergeEmailDlg.okButtonText": "Send", "DE.Views.MailMergeEmailDlg.okButtonText": "Send",
@ -1303,6 +1381,7 @@
"DE.Views.RightMenu.txtMailMergeSettings": "Mail Merge Settings", "DE.Views.RightMenu.txtMailMergeSettings": "Mail Merge Settings",
"DE.Views.RightMenu.txtParagraphSettings": "Impostazioni paragrafo", "DE.Views.RightMenu.txtParagraphSettings": "Impostazioni paragrafo",
"DE.Views.RightMenu.txtShapeSettings": "Impostazioni forma", "DE.Views.RightMenu.txtShapeSettings": "Impostazioni forma",
"DE.Views.RightMenu.txtSignatureSettings": "Impostazioni della Firma",
"DE.Views.RightMenu.txtTableSettings": "Impostazioni tabella", "DE.Views.RightMenu.txtTableSettings": "Impostazioni tabella",
"DE.Views.RightMenu.txtTextArtSettings": "Text Art Settings", "DE.Views.RightMenu.txtTextArtSettings": "Text Art Settings",
"DE.Views.ShapeSettings.strBackground": "Colore sfondo", "DE.Views.ShapeSettings.strBackground": "Colore sfondo",
@ -1355,6 +1434,23 @@
"DE.Views.ShapeSettings.txtTight": "Ravvicinato", "DE.Views.ShapeSettings.txtTight": "Ravvicinato",
"DE.Views.ShapeSettings.txtTopAndBottom": "Sopra e sotto", "DE.Views.ShapeSettings.txtTopAndBottom": "Sopra e sotto",
"DE.Views.ShapeSettings.txtWood": "Legno", "DE.Views.ShapeSettings.txtWood": "Legno",
"DE.Views.SignatureSettings.notcriticalErrorTitle": "Avviso",
"DE.Views.SignatureSettings.strDelete": "Rimuovi Firma",
"DE.Views.SignatureSettings.strDetails": "Dettagli firma",
"DE.Views.SignatureSettings.strInvalid": "Firme non valide",
"DE.Views.SignatureSettings.strInvisibleSign": "Aggiungi firma digitale invisibile",
"DE.Views.SignatureSettings.strRequested": "Firme Richieste",
"DE.Views.SignatureSettings.strSetup": "Impostazioni firma",
"DE.Views.SignatureSettings.strSign": "Firma",
"DE.Views.SignatureSettings.strSignature": "Firma",
"DE.Views.SignatureSettings.strValid": "Firme valide",
"DE.Views.SignatureSettings.strView": "Visualizza",
"DE.Views.SignatureSettings.strVisibleSign": "Aggiungi firma visibile",
"DE.Views.SignatureSettings.txtContinueEditing": "Modifica comunque",
"DE.Views.SignatureSettings.txtEditWarning": "la modifica eliminerà le firme dal documento. <br>Sei sicuro di voler continuare?",
"DE.Views.SignatureSettings.txtRequestedSignatures": "Questo documento necessita di essere firmato",
"DE.Views.SignatureSettings.txtSigned": "Le firme valide sono state aggiunte al documento. Il documento è protetto dalla modifica.",
"DE.Views.SignatureSettings.txtSignedInvalid": "Alcune delle firme digitali preseti nel documento non sono valide o non possono essere verificate. Il documento è protetto dalla modifica.",
"DE.Views.Statusbar.goToPageText": "Va' alla pagina", "DE.Views.Statusbar.goToPageText": "Va' alla pagina",
"DE.Views.Statusbar.pageIndexText": "Pagina {0} di {1}", "DE.Views.Statusbar.pageIndexText": "Pagina {0} di {1}",
"DE.Views.Statusbar.tipFitPage": "Adatta alla pagina", "DE.Views.Statusbar.tipFitPage": "Adatta alla pagina",
@ -1524,7 +1620,7 @@
"DE.Views.Toolbar.capBtnInsShape": "Forma", "DE.Views.Toolbar.capBtnInsShape": "Forma",
"DE.Views.Toolbar.capBtnInsTable": "Tabella", "DE.Views.Toolbar.capBtnInsTable": "Tabella",
"DE.Views.Toolbar.capBtnInsTextart": "Text Art", "DE.Views.Toolbar.capBtnInsTextart": "Text Art",
"DE.Views.Toolbar.capBtnInsTextbox": "Testo", "DE.Views.Toolbar.capBtnInsTextbox": "Casella di testo",
"DE.Views.Toolbar.capBtnMargins": "Margini", "DE.Views.Toolbar.capBtnMargins": "Margini",
"DE.Views.Toolbar.capBtnPageOrient": "Orientamento", "DE.Views.Toolbar.capBtnPageOrient": "Orientamento",
"DE.Views.Toolbar.capBtnPageSize": "Dimensione", "DE.Views.Toolbar.capBtnPageSize": "Dimensione",
@ -1609,6 +1705,7 @@
"DE.Views.Toolbar.textTabHome": "Home", "DE.Views.Toolbar.textTabHome": "Home",
"DE.Views.Toolbar.textTabInsert": "Inserisci", "DE.Views.Toolbar.textTabInsert": "Inserisci",
"DE.Views.Toolbar.textTabLayout": "Layout di Pagina", "DE.Views.Toolbar.textTabLayout": "Layout di Pagina",
"DE.Views.Toolbar.textTabProtect": "Protezione",
"DE.Views.Toolbar.textTabReview": "Revisione", "DE.Views.Toolbar.textTabReview": "Revisione",
"DE.Views.Toolbar.textTitleError": "Errore", "DE.Views.Toolbar.textTitleError": "Errore",
"DE.Views.Toolbar.textToCurrent": "Alla posizione corrente", "DE.Views.Toolbar.textToCurrent": "Alla posizione corrente",

View file

@ -183,12 +183,29 @@
"Common.Views.OpenDialog.txtPassword": "Пароль", "Common.Views.OpenDialog.txtPassword": "Пароль",
"Common.Views.OpenDialog.txtTitle": "Выбрать параметры %1", "Common.Views.OpenDialog.txtTitle": "Выбрать параметры %1",
"Common.Views.OpenDialog.txtTitleProtected": "Защищенный файл", "Common.Views.OpenDialog.txtTitleProtected": "Защищенный файл",
"Common.Views.PasswordDialog.cancelButtonText": "Отмена",
"Common.Views.PasswordDialog.okButtonText": "OK",
"Common.Views.PasswordDialog.txtDescription": "Для открытия этого документа требуется пароль",
"Common.Views.PasswordDialog.txtIncorrectPwd": "Пароль и его подтверждение не совпадают",
"Common.Views.PasswordDialog.txtPassword": "Пароль",
"Common.Views.PasswordDialog.txtRepeat": "Повторить пароль",
"Common.Views.PasswordDialog.txtTitle": "Установка пароля",
"Common.Views.PluginDlg.textLoading": "Загрузка", "Common.Views.PluginDlg.textLoading": "Загрузка",
"Common.Views.Plugins.groupCaption": "Плагины", "Common.Views.Plugins.groupCaption": "Плагины",
"Common.Views.Plugins.strPlugins": "Плагины", "Common.Views.Plugins.strPlugins": "Плагины",
"Common.Views.Plugins.textLoading": "Загрузка", "Common.Views.Plugins.textLoading": "Загрузка",
"Common.Views.Plugins.textStart": "Запустить", "Common.Views.Plugins.textStart": "Запустить",
"Common.Views.Plugins.textStop": "Остановить", "Common.Views.Plugins.textStop": "Остановить",
"Common.Views.Protection.hintAddPwd": "Зашифровать с помощью пароля",
"Common.Views.Protection.hintPwd": "Изменить или удалить пароль",
"Common.Views.Protection.hintSignature": "Добавить цифровую подпись или строку подписи",
"Common.Views.Protection.txtAddPwd": "Добавить пароль",
"Common.Views.Protection.txtChangePwd": "Изменить пароль",
"Common.Views.Protection.txtDeletePwd": "Удалить пароль",
"Common.Views.Protection.txtEncrypt": "Шифровать",
"Common.Views.Protection.txtInvisibleSignature": "Добавить цифровую подпись",
"Common.Views.Protection.txtSignature": "Подпись",
"Common.Views.Protection.txtSignatureLine": "Строка подписи",
"Common.Views.RenameDialog.cancelButtonText": "Отмена", "Common.Views.RenameDialog.cancelButtonText": "Отмена",
"Common.Views.RenameDialog.okButtonText": "Ok", "Common.Views.RenameDialog.okButtonText": "Ok",
"Common.Views.RenameDialog.textName": "Имя файла", "Common.Views.RenameDialog.textName": "Имя файла",
@ -228,6 +245,32 @@
"Common.Views.ReviewChangesDialog.txtReject": "Отклонить", "Common.Views.ReviewChangesDialog.txtReject": "Отклонить",
"Common.Views.ReviewChangesDialog.txtRejectAll": "Отклонить все изменения", "Common.Views.ReviewChangesDialog.txtRejectAll": "Отклонить все изменения",
"Common.Views.ReviewChangesDialog.txtRejectCurrent": "Отклонить текущее изменение", "Common.Views.ReviewChangesDialog.txtRejectCurrent": "Отклонить текущее изменение",
"Common.Views.SignDialog.cancelButtonText": "Отмена",
"Common.Views.SignDialog.okButtonText": "Ok",
"Common.Views.SignDialog.textBold": "Жирный",
"Common.Views.SignDialog.textCertificate": "Сертификат",
"Common.Views.SignDialog.textChange": "Изменить",
"Common.Views.SignDialog.textInputName": "Введите имя подписывающего",
"Common.Views.SignDialog.textItalic": "Курсив",
"Common.Views.SignDialog.textPurpose": "Цель подписания документа",
"Common.Views.SignDialog.textSelectImage": "Выбрать изображение",
"Common.Views.SignDialog.textSignature": "Как выглядит подпись:",
"Common.Views.SignDialog.textTitle": "Подписание документа",
"Common.Views.SignDialog.textUseImage": "или нажмите 'Выбрать изображение', чтобы использовать изображение в качестве подписи",
"Common.Views.SignDialog.textValid": "Действителен с %1 по %2",
"Common.Views.SignDialog.tipFontName": "Шрифт",
"Common.Views.SignDialog.tipFontSize": "Размер шрифта",
"Common.Views.SignSettingsDialog.cancelButtonText": "Отмена",
"Common.Views.SignSettingsDialog.okButtonText": "Ok",
"Common.Views.SignSettingsDialog.textAllowComment": "Разрешить подписывающему добавлять примечания в окне подписи",
"Common.Views.SignSettingsDialog.textInfo": "Сведения о подписывающем",
"Common.Views.SignSettingsDialog.textInfoEmail": "Адрес электронной почты",
"Common.Views.SignSettingsDialog.textInfoName": "Имя",
"Common.Views.SignSettingsDialog.textInfoTitle": "Должность подписывающего",
"Common.Views.SignSettingsDialog.textInstructions": "Инструкции для подписывающего",
"Common.Views.SignSettingsDialog.textShowDate": "Показывать дату подписи в строке подписи",
"Common.Views.SignSettingsDialog.textTitle": "Настройка подписи",
"Common.Views.SignSettingsDialog.txtEmpty": "Это поле необходимо заполнить",
"DE.Controllers.LeftMenu.leavePageText": "Все несохраненные изменения в этом документе будут потеряны.<br> Нажмите кнопку \"Отмена\", а затем нажмите кнопку \"Сохранить\", чтобы сохранить их. Нажмите кнопку \"OK\", чтобы сбросить все несохраненные изменения.", "DE.Controllers.LeftMenu.leavePageText": "Все несохраненные изменения в этом документе будут потеряны.<br> Нажмите кнопку \"Отмена\", а затем нажмите кнопку \"Сохранить\", чтобы сохранить их. Нажмите кнопку \"OK\", чтобы сбросить все несохраненные изменения.",
"DE.Controllers.LeftMenu.newDocumentTitle": "Документ без имени", "DE.Controllers.LeftMenu.newDocumentTitle": "Документ без имени",
"DE.Controllers.LeftMenu.notcriticalErrorTitle": "Внимание", "DE.Controllers.LeftMenu.notcriticalErrorTitle": "Внимание",
@ -317,19 +360,30 @@
"DE.Controllers.Main.titleLicenseExp": "Истек срок действия лицензии", "DE.Controllers.Main.titleLicenseExp": "Истек срок действия лицензии",
"DE.Controllers.Main.titleServerVersion": "Редактор обновлен", "DE.Controllers.Main.titleServerVersion": "Редактор обновлен",
"DE.Controllers.Main.titleUpdateVersion": "Версия изменилась", "DE.Controllers.Main.titleUpdateVersion": "Версия изменилась",
"DE.Controllers.Main.txtAbove": "выше",
"DE.Controllers.Main.txtArt": "Введите ваш текст", "DE.Controllers.Main.txtArt": "Введите ваш текст",
"DE.Controllers.Main.txtBasicShapes": "Основные фигуры", "DE.Controllers.Main.txtBasicShapes": "Основные фигуры",
"DE.Controllers.Main.txtBelow": "ниже",
"DE.Controllers.Main.txtBookmarkError": "Ошибка! Закладка не определена.",
"DE.Controllers.Main.txtButtons": "Кнопки", "DE.Controllers.Main.txtButtons": "Кнопки",
"DE.Controllers.Main.txtCallouts": "Выноски", "DE.Controllers.Main.txtCallouts": "Выноски",
"DE.Controllers.Main.txtCharts": "Схемы", "DE.Controllers.Main.txtCharts": "Схемы",
"DE.Controllers.Main.txtDiagramTitle": "Заголовок диаграммы", "DE.Controllers.Main.txtDiagramTitle": "Заголовок диаграммы",
"DE.Controllers.Main.txtEditingMode": "Установка режима редактирования...", "DE.Controllers.Main.txtEditingMode": "Установка режима редактирования...",
"DE.Controllers.Main.txtErrorLoadHistory": "Не удалось загрузить историю", "DE.Controllers.Main.txtErrorLoadHistory": "Не удалось загрузить историю",
"DE.Controllers.Main.txtEvenPage": "Четная страница",
"DE.Controllers.Main.txtFiguredArrows": "Фигурные стрелки", "DE.Controllers.Main.txtFiguredArrows": "Фигурные стрелки",
"DE.Controllers.Main.txtFirstPage": "Первая страница",
"DE.Controllers.Main.txtFooter": "Нижний колонтитул",
"DE.Controllers.Main.txtHeader": "Верхний колонтитул",
"DE.Controllers.Main.txtLines": "Линии", "DE.Controllers.Main.txtLines": "Линии",
"DE.Controllers.Main.txtMath": "Математические знаки", "DE.Controllers.Main.txtMath": "Математические знаки",
"DE.Controllers.Main.txtNeedSynchronize": "Есть обновления", "DE.Controllers.Main.txtNeedSynchronize": "Есть обновления",
"DE.Controllers.Main.txtOddPage": "Нечетная страница",
"DE.Controllers.Main.txtOnPage": "на странице",
"DE.Controllers.Main.txtRectangles": "Прямоугольники", "DE.Controllers.Main.txtRectangles": "Прямоугольники",
"DE.Controllers.Main.txtSameAsPrev": "Как в предыдущем",
"DE.Controllers.Main.txtSection": "-Раздел",
"DE.Controllers.Main.txtSeries": "Ряд", "DE.Controllers.Main.txtSeries": "Ряд",
"DE.Controllers.Main.txtStarsRibbons": "Звезды и ленты", "DE.Controllers.Main.txtStarsRibbons": "Звезды и ленты",
"DE.Controllers.Main.txtStyle_Heading_1": "Заголовок 1", "DE.Controllers.Main.txtStyle_Heading_1": "Заголовок 1",
@ -361,6 +415,7 @@
"DE.Controllers.Main.warnBrowserZoom": "Текущее значение масштаба страницы в браузере поддерживается не полностью. Вернитесь к масштабу по умолчанию, нажав Ctrl+0.", "DE.Controllers.Main.warnBrowserZoom": "Текущее значение масштаба страницы в браузере поддерживается не полностью. Вернитесь к масштабу по умолчанию, нажав Ctrl+0.",
"DE.Controllers.Main.warnLicenseExp": "Истек срок действия лицензии.<br>Обновите лицензию, а затем обновите страницу.", "DE.Controllers.Main.warnLicenseExp": "Истек срок действия лицензии.<br>Обновите лицензию, а затем обновите страницу.",
"DE.Controllers.Main.warnNoLicense": "Эта версия редакторов ONLYOFFICE имеет некоторые ограничения по количеству одновременных подключений к серверу документов.<br>Если требуется больше, рассмотрите вопрос об обновлении текущей лицензии или покупке коммерческой лицензии.", "DE.Controllers.Main.warnNoLicense": "Эта версия редакторов ONLYOFFICE имеет некоторые ограничения по количеству одновременных подключений к серверу документов.<br>Если требуется больше, рассмотрите вопрос об обновлении текущей лицензии или покупке коммерческой лицензии.",
"DE.Controllers.Main.warnNoLicenseUsers": "Эта версия редакторов ONLYOFFICE имеет некоторые ограничения по числу одновременно работающих пользователей.<br>Если требуется больше, рассмотрите вопрос об обновлении текущей лицензии или покупке коммерческой лицензии.",
"DE.Controllers.Main.warnProcessRightsChange": "Вам было отказано в праве на редактирование этого файла.", "DE.Controllers.Main.warnProcessRightsChange": "Вам было отказано в праве на редактирование этого файла.",
"DE.Controllers.Statusbar.textHasChanges": "Отслежены новые изменения", "DE.Controllers.Statusbar.textHasChanges": "Отслежены новые изменения",
"DE.Controllers.Statusbar.textTrackChanges": "Документ открыт при включенном режиме отслеживания изменений", "DE.Controllers.Statusbar.textTrackChanges": "Документ открыт при включенном режиме отслеживания изменений",
@ -796,6 +851,10 @@
"DE.Views.DocumentHolder.spellcheckText": "Проверка орфографии", "DE.Views.DocumentHolder.spellcheckText": "Проверка орфографии",
"DE.Views.DocumentHolder.splitCellsText": "Разделить ячейку...", "DE.Views.DocumentHolder.splitCellsText": "Разделить ячейку...",
"DE.Views.DocumentHolder.splitCellTitleText": "Разделить ячейку", "DE.Views.DocumentHolder.splitCellTitleText": "Разделить ячейку",
"DE.Views.DocumentHolder.strDelete": "Удалить подпись",
"DE.Views.DocumentHolder.strDetails": "Состав подписи",
"DE.Views.DocumentHolder.strSetup": "Настройка подписи",
"DE.Views.DocumentHolder.strSign": "Подписать",
"DE.Views.DocumentHolder.styleText": "Форматирование как стиль", "DE.Views.DocumentHolder.styleText": "Форматирование как стиль",
"DE.Views.DocumentHolder.tableText": "Таблицу", "DE.Views.DocumentHolder.tableText": "Таблицу",
"DE.Views.DocumentHolder.textAlign": "Выравнивание", "DE.Views.DocumentHolder.textAlign": "Выравнивание",
@ -954,6 +1013,7 @@
"DE.Views.FileMenu.btnHistoryCaption": "Журнал версий", "DE.Views.FileMenu.btnHistoryCaption": "Журнал версий",
"DE.Views.FileMenu.btnInfoCaption": "Сведения о документе...", "DE.Views.FileMenu.btnInfoCaption": "Сведения о документе...",
"DE.Views.FileMenu.btnPrintCaption": "Печать", "DE.Views.FileMenu.btnPrintCaption": "Печать",
"DE.Views.FileMenu.btnProtectCaption": "Защитить",
"DE.Views.FileMenu.btnRecentFilesCaption": "Открыть последние...", "DE.Views.FileMenu.btnRecentFilesCaption": "Открыть последние...",
"DE.Views.FileMenu.btnRenameCaption": "Переименовать...", "DE.Views.FileMenu.btnRenameCaption": "Переименовать...",
"DE.Views.FileMenu.btnReturnCaption": "Вернуться к документу", "DE.Views.FileMenu.btnReturnCaption": "Вернуться к документу",
@ -983,6 +1043,22 @@
"DE.Views.FileMenuPanels.DocumentInfo.txtWords": "Слова", "DE.Views.FileMenuPanels.DocumentInfo.txtWords": "Слова",
"DE.Views.FileMenuPanels.DocumentRights.txtBtnAccessRights": "Изменить права доступа", "DE.Views.FileMenuPanels.DocumentRights.txtBtnAccessRights": "Изменить права доступа",
"DE.Views.FileMenuPanels.DocumentRights.txtRights": "Люди, имеющие права", "DE.Views.FileMenuPanels.DocumentRights.txtRights": "Люди, имеющие права",
"DE.Views.FileMenuPanels.ProtectDoc.notcriticalErrorTitle": "Внимание",
"DE.Views.FileMenuPanels.ProtectDoc.strEncrypt": "C помощью пароля",
"DE.Views.FileMenuPanels.ProtectDoc.strInvalid": "Недействительные подписи",
"DE.Views.FileMenuPanels.ProtectDoc.strInvisibleSign": "Добавить невидимую цифровую подпись",
"DE.Views.FileMenuPanels.ProtectDoc.strProtect": "Защитить документ",
"DE.Views.FileMenuPanels.ProtectDoc.strRequested": "Запрошенные подписи",
"DE.Views.FileMenuPanels.ProtectDoc.strSignature": "С помощью подписи",
"DE.Views.FileMenuPanels.ProtectDoc.strValid": "Действительные подписи",
"DE.Views.FileMenuPanels.ProtectDoc.strVisibleSign": "Добавить видимую цифровую подпись",
"DE.Views.FileMenuPanels.ProtectDoc.txtEdit": "Редактировать документ",
"DE.Views.FileMenuPanels.ProtectDoc.txtEditWarning": "При редактировании из документа будут удалены подписи.<br>Вы действительно хотите продолжить?",
"DE.Views.FileMenuPanels.ProtectDoc.txtEncrypted": "Этот документ защищен паролем",
"DE.Views.FileMenuPanels.ProtectDoc.txtRequestedSignatures": "Этот документ требуется подписать.",
"DE.Views.FileMenuPanels.ProtectDoc.txtSigned": "В документ добавлены действительные подписи. Документ защищен от редактирования.",
"DE.Views.FileMenuPanels.ProtectDoc.txtSignedInvalid": "Некоторые из цифровых подписей в документе недействительны или их нельзя проверить. Документ защищен от редактирования.",
"DE.Views.FileMenuPanels.ProtectDoc.txtView": "Просмотр подписей",
"DE.Views.FileMenuPanels.Settings.okButtonText": "Применить", "DE.Views.FileMenuPanels.Settings.okButtonText": "Применить",
"DE.Views.FileMenuPanels.Settings.strAlignGuides": "Включить направляющие выравнивания", "DE.Views.FileMenuPanels.Settings.strAlignGuides": "Включить направляющие выравнивания",
"DE.Views.FileMenuPanels.Settings.strAutoRecover": "Включить автовосстановление", "DE.Views.FileMenuPanels.Settings.strAutoRecover": "Включить автовосстановление",
@ -1305,6 +1381,7 @@
"DE.Views.RightMenu.txtMailMergeSettings": "Параметры слияния", "DE.Views.RightMenu.txtMailMergeSettings": "Параметры слияния",
"DE.Views.RightMenu.txtParagraphSettings": "Параметры абзаца", "DE.Views.RightMenu.txtParagraphSettings": "Параметры абзаца",
"DE.Views.RightMenu.txtShapeSettings": "Параметры фигуры", "DE.Views.RightMenu.txtShapeSettings": "Параметры фигуры",
"DE.Views.RightMenu.txtSignatureSettings": "Настройка подписи",
"DE.Views.RightMenu.txtTableSettings": "Параметры таблицы", "DE.Views.RightMenu.txtTableSettings": "Параметры таблицы",
"DE.Views.RightMenu.txtTextArtSettings": "Параметры объекта Text Art", "DE.Views.RightMenu.txtTextArtSettings": "Параметры объекта Text Art",
"DE.Views.ShapeSettings.strBackground": "Цвет фона", "DE.Views.ShapeSettings.strBackground": "Цвет фона",
@ -1357,6 +1434,23 @@
"DE.Views.ShapeSettings.txtTight": "По контуру", "DE.Views.ShapeSettings.txtTight": "По контуру",
"DE.Views.ShapeSettings.txtTopAndBottom": "Сверху и снизу", "DE.Views.ShapeSettings.txtTopAndBottom": "Сверху и снизу",
"DE.Views.ShapeSettings.txtWood": "Дерево", "DE.Views.ShapeSettings.txtWood": "Дерево",
"DE.Views.SignatureSettings.notcriticalErrorTitle": "Внимание",
"DE.Views.SignatureSettings.strDelete": "Удалить подпись",
"DE.Views.SignatureSettings.strDetails": "Состав подписи",
"DE.Views.SignatureSettings.strInvalid": "Недействительные подписи",
"DE.Views.SignatureSettings.strInvisibleSign": "Добавить невидимую цифровую подпись",
"DE.Views.SignatureSettings.strRequested": "Запрошенные подписи",
"DE.Views.SignatureSettings.strSetup": "Настройка подписи",
"DE.Views.SignatureSettings.strSign": "Подписать",
"DE.Views.SignatureSettings.strSignature": "Подпись",
"DE.Views.SignatureSettings.strValid": "Действительные подписи",
"DE.Views.SignatureSettings.strView": "Просмотр",
"DE.Views.SignatureSettings.strVisibleSign": "Добавить видимую цифровую подпись",
"DE.Views.SignatureSettings.txtContinueEditing": "Все равно редактировать",
"DE.Views.SignatureSettings.txtEditWarning": "При редактировании из документа будут удалены подписи.<br>Вы действительно хотите продолжить?",
"DE.Views.SignatureSettings.txtRequestedSignatures": "Этот документ требуется подписать.",
"DE.Views.SignatureSettings.txtSigned": "В документ добавлены действительные подписи. Документ защищен от редактирования.",
"DE.Views.SignatureSettings.txtSignedInvalid": "Некоторые из цифровых подписей в документе недействительны или их нельзя проверить. Документ защищен от редактирования.",
"DE.Views.Statusbar.goToPageText": "Перейти на страницу", "DE.Views.Statusbar.goToPageText": "Перейти на страницу",
"DE.Views.Statusbar.pageIndexText": "Страница {0} из {1}", "DE.Views.Statusbar.pageIndexText": "Страница {0} из {1}",
"DE.Views.Statusbar.tipFitPage": "По размеру страницы", "DE.Views.Statusbar.tipFitPage": "По размеру страницы",
@ -1611,6 +1705,7 @@
"DE.Views.Toolbar.textTabHome": "Главная", "DE.Views.Toolbar.textTabHome": "Главная",
"DE.Views.Toolbar.textTabInsert": "Вставка", "DE.Views.Toolbar.textTabInsert": "Вставка",
"DE.Views.Toolbar.textTabLayout": "Макет", "DE.Views.Toolbar.textTabLayout": "Макет",
"DE.Views.Toolbar.textTabProtect": "Защита",
"DE.Views.Toolbar.textTabReview": "Рецензирование", "DE.Views.Toolbar.textTabReview": "Рецензирование",
"DE.Views.Toolbar.textTitleError": "Ошибка", "DE.Views.Toolbar.textTitleError": "Ошибка",
"DE.Views.Toolbar.textToCurrent": "В текущей позиции", "DE.Views.Toolbar.textToCurrent": "В текущей позиции",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 36 KiB

View file

@ -370,3 +370,24 @@
font: 12px tahoma, arial, verdana, sans-serif; font: 12px tahoma, arial, verdana, sans-serif;
} }
} }
#panel-protect {
label, span {
font-size: 12px;
}
#file-menu-panel & {
padding: 30px 30px;
}
.header {
font-weight: bold;
margin: 30px 0 10px;
}
table {
td {
padding: 5px 0;
}
}
}

View file

@ -77,4 +77,4 @@ button.notify .btn-menu-comments {background-position: -0*@toolbar-icon-size -60
-webkit-transform: rotate(180deg); -webkit-transform: rotate(180deg);
-o-transform: rotate(180deg); -o-transform: rotate(180deg);
transform: rotate(180deg); transform: rotate(180deg);
} }

View file

@ -105,6 +105,7 @@
/*menuTextArt*/ /*menuTextArt*/
.button-normal-icon(btn-menu-textart, 54, @toolbar-icon-size); .button-normal-icon(btn-menu-textart, 54, @toolbar-icon-size);
.button-normal-icon(btn-menu-signature, 78, @toolbar-icon-size);
.button-otherstates-icon2(btn-category, @toolbar-icon-size); .button-otherstates-icon2(btn-category, @toolbar-icon-size);
@ -268,3 +269,55 @@ button:active:not(.disabled) .btn-change-shape {background-position: -56px -
.gradient-radial-center { .gradient-radial-center {
background-position: -100px -150px; background-position: -100px -150px;
} }
#signature-requested-sign,
#signature-valid-sign,
#signature-invalid-sign {
height: 100%;
overflow: hidden;
margin: 0 -10px 0 -15px;
.item {
display: block;
border: none;
width: 100%;
.box-shadow(none);
margin: 0;
&:hover,
&.over {
background-color: @secondary;
}
}
.signature-item {
padding: 5px 2px 5px 15px;
text-overflow: ellipsis;
min-height: 25px;
.name {
width: 100%;
white-space: nowrap;
overflow: hidden;
cursor: pointer;
max-width: 160px;
text-overflow: ellipsis;
}
.caret {
width: 23px;
height: 14px;
border: 0;
background-position: -43px -150px;
margin: 8px 15px;
display: inline-block;
position: absolute;
right: 0;
&.nomargin {
margin-top: 0;
margin-bottom: 0;
}
}
}
}

View file

@ -312,12 +312,6 @@
.button-normal-icon(mmerge-first, 74, @toolbar-icon-size); .button-normal-icon(mmerge-first, 74, @toolbar-icon-size);
//.button-normal-icon(btn-columns, 75, @toolbar-icon-size); //.button-normal-icon(btn-columns, 75, @toolbar-icon-size);
//.button-normal-icon(btn-pagemargins, 76, @toolbar-icon-size); //.button-normal-icon(btn-pagemargins, 76, @toolbar-icon-size);
//.button-normal-icon(btn-img-frwd, 83, @toolbar-icon-size);
//.button-normal-icon(btn-img-bkwd, 84, @toolbar-icon-size);
//.button-normal-icon(btn-img-wrap, 85, @toolbar-icon-size);
//.button-normal-icon(btn-img-group, 86, @toolbar-icon-size);
//.button-normal-icon(btn-img-align, 87, @toolbar-icon-size);
.button-normal-icon(btn-goback, 88, @toolbar-icon-size);
//.button-normal-icon(btn-insertimage, 17, @toolbar-icon-size); //.button-normal-icon(btn-insertimage, 17, @toolbar-icon-size);
//.button-normal-icon(btn-inserttable, 18, @toolbar-icon-size); //.button-normal-icon(btn-inserttable, 18, @toolbar-icon-size);
@ -328,11 +322,6 @@
//.button-normal-icon(btn-insertequation, 53, @toolbar-icon-size); //.button-normal-icon(btn-insertequation, 53, @toolbar-icon-size);
//.button-normal-icon(btn-dropcap, 50, @toolbar-icon-size); //.button-normal-icon(btn-dropcap, 50, @toolbar-icon-size);
//.button-normal-icon(btn-ic-doclang, 67, @toolbar-icon-size); //.button-normal-icon(btn-ic-doclang, 67, @toolbar-icon-size);
//.button-normal-icon(btn-notes, 78, @toolbar-icon-size);
//.button-normal-icon(review-prev, 79, @toolbar-icon-size);
//.button-normal-icon(review-next, 80, @toolbar-icon-size);
//.button-normal-icon(review-save, 81, @toolbar-icon-size);
//.button-normal-icon(review-deny, 82, @toolbar-icon-size);
@menu-icon-size: 22px; @menu-icon-size: 22px;
.menu-icon-normal(mnu-wrap-inline, 0, @menu-icon-size); .menu-icon-normal(mnu-wrap-inline, 0, @menu-icon-size);

View file

@ -155,6 +155,7 @@ require([
/** coauthoring end **/ /** coauthoring end **/
,'Common.Controllers.Plugins' ,'Common.Controllers.Plugins'
,'Common.Controllers.ExternalDiagramEditor' ,'Common.Controllers.ExternalDiagramEditor'
,'Common.Controllers.Protection'
] ]
}); });
@ -175,6 +176,7 @@ require([
'presentationeditor/main/app/view/SlideSettings', 'presentationeditor/main/app/view/SlideSettings',
'presentationeditor/main/app/view/TableSettings', 'presentationeditor/main/app/view/TableSettings',
'presentationeditor/main/app/view/TextArtSettings', 'presentationeditor/main/app/view/TextArtSettings',
'presentationeditor/main/app/view/SignatureSettings',
'common/main/lib/util/utils', 'common/main/lib/util/utils',
'common/main/lib/util/LocalStorage', 'common/main/lib/util/LocalStorage',
'common/main/lib/controller/Fonts' 'common/main/lib/controller/Fonts'
@ -185,6 +187,7 @@ require([
'common/main/lib/controller/Plugins', 'common/main/lib/controller/Plugins',
'presentationeditor/main/app/view/ChartSettings', 'presentationeditor/main/app/view/ChartSettings',
'common/main/lib/controller/ExternalDiagramEditor' 'common/main/lib/controller/ExternalDiagramEditor'
,'common/main/lib/controller/Protection'
], function() { ], function() {
app.start(); app.start();
}); });

View file

@ -64,7 +64,8 @@ define([
'click:users': _.bind(this.clickStatusbarUsers, this) 'click:users': _.bind(this.clickStatusbarUsers, this)
}, },
'Common.Views.Plugins': { 'Common.Views.Plugins': {
'plugin:open': _.bind(this.onPluginOpen, this) 'plugin:open': _.bind(this.onPluginOpen, this),
'hide': _.bind(this.onHidePlugins, this)
}, },
'Common.Views.About': { 'Common.Views.About': {
'show': _.bind(this.aboutShowHide, this, false), 'show': _.bind(this.aboutShowHide, this, false),
@ -307,6 +308,10 @@ define([
$(this.leftMenu.btnChat.el).blur(); $(this.leftMenu.btnChat.el).blur();
Common.NotificationCenter.trigger('layout:changed', 'leftmenu'); Common.NotificationCenter.trigger('layout:changed', 'leftmenu');
}, },
onHidePlugins: function() {
Common.NotificationCenter.trigger('layout:changed', 'leftmenu');
},
/** coauthoring end **/ /** coauthoring end **/
onQuerySearch: function(d, w, opts) { onQuerySearch: function(d, w, opts) {
@ -533,12 +538,12 @@ define([
}, },
onPluginOpen: function(panel, type, action) { onPluginOpen: function(panel, type, action) {
if ( type == 'onboard' ) { if (type == 'onboard') {
if ( action == 'open' ) { if (action == 'open') {
this.leftMenu.close(); this.leftMenu.close();
this.leftMenu.btnThumbs.toggle(false, false); this.leftMenu.btnThumbs.toggle(false, false);
this.leftMenu.panelPlugins.show(); this.leftMenu.panelPlugins.show();
this.leftMenu.onBtnMenuClick({pressed:true, options: {action: 'plugins'}}); this.leftMenu.onBtnMenuClick({pressed: true, options: {action: 'plugins'}});
} else { } else {
this.leftMenu.close(); this.leftMenu.close();
} }

View file

@ -459,7 +459,7 @@ define([
case Asc.c_oAscAsyncAction['ForceSaveButton']: case Asc.c_oAscAsyncAction['ForceSaveButton']:
clearTimeout(this._state.timerSave); clearTimeout(this._state.timerSave);
force = true; force = true;
title = (!this.appOptions.isOffline) ? this.saveTitleText : ''; title = this.saveTitleText;
text = (!this.appOptions.isOffline) ? this.saveTextText : ''; text = (!this.appOptions.isOffline) ? this.saveTextText : '';
break; break;
@ -642,6 +642,7 @@ define([
pluginsController.setApi(me.api); pluginsController.setApi(me.api);
me.requestPlugins('../../../../plugins.json'); me.requestPlugins('../../../../plugins.json');
me.api.asc_registerCallback('asc_onPluginsInit', _.bind(me.updatePluginsList, me)); me.api.asc_registerCallback('asc_onPluginsInit', _.bind(me.updatePluginsList, me));
me.api.asc_registerCallback('asc_onPluginsReset', _.bind(me.resetPluginsList, me));
documentHolderController.setApi(me.api); documentHolderController.setApi(me.api);
documentHolderController.createDelayedElements(); documentHolderController.createDelayedElements();
@ -694,16 +695,13 @@ define([
toolbarController.onApiCoAuthoringDisconnect(); toolbarController.onApiCoAuthoringDisconnect();
me.api.UpdateInterfaceState(); me.api.UpdateInterfaceState();
if (me.appOptions.canBrandingExt) Common.NotificationCenter.trigger('document:ready', 'main');
Common.NotificationCenter.trigger('document:ready', 'main');
me.applyLicense(); me.applyLicense();
} }
}, 50); }, 50);
} else { } else {
documentHolderController.getView('DocumentHolder').createDelayedElementsViewer(); documentHolderController.getView('DocumentHolder').createDelayedElementsViewer();
if (me.appOptions.canBrandingExt) Common.NotificationCenter.trigger('document:ready', 'main');
Common.NotificationCenter.trigger('document:ready', 'main');
} }
if (this.appOptions.canAnalytics && false) if (this.appOptions.canAnalytics && false)
@ -814,6 +812,7 @@ define([
this.appOptions.forcesave = this.appOptions.canForcesave; this.appOptions.forcesave = this.appOptions.canForcesave;
this.appOptions.canEditComments= this.appOptions.isOffline || !(typeof (this.editorConfig.customization) == 'object' && this.editorConfig.customization.commentAuthorOnly); this.appOptions.canEditComments= this.appOptions.isOffline || !(typeof (this.editorConfig.customization) == 'object' && this.editorConfig.customization.commentAuthorOnly);
this.appOptions.trialMode = params.asc_getLicenseMode(); this.appOptions.trialMode = params.asc_getLicenseMode();
this.appOptions.canProtect = this.appOptions.isEdit && this.appOptions.isDesktopApp && this.api.asc_isSignaturesSupport();
this.appOptions.canBranding = (licType === Asc.c_oLicenseResult.Success) && (typeof this.editorConfig.customization == 'object'); this.appOptions.canBranding = (licType === Asc.c_oLicenseResult.Success) && (typeof this.editorConfig.customization == 'object');
if (this.appOptions.canBranding) if (this.appOptions.canBranding)
@ -886,6 +885,9 @@ define([
rightmenuController && rightmenuController.setApi(me.api); rightmenuController && rightmenuController.setApi(me.api);
if (me.appOptions.isDesktopApp && me.appOptions.isOffline)
application.getController('Common.Controllers.Protection').setMode(me.appOptions).setConfig({config: me.editorConfig}, me.api);
var viewport = this.getApplication().getController('Viewport').getView('Viewport'); var viewport = this.getApplication().getController('Viewport').getView('Viewport');
viewport.applyEditorMode(); viewport.applyEditorMode();
@ -1764,15 +1766,27 @@ define([
baseUrl : item.baseUrl, baseUrl : item.baseUrl,
variations: variationsArr, variations: variationsArr,
currentVariation: 0, currentVariation: 0,
visible: pluginVisible visible: pluginVisible,
groupName: (item.group) ? item.group.name : '',
groupRank: (item.group) ? item.group.rank : 0
})); }));
}); });
if (uiCustomize!==false) // from ui customizer in editor config or desktop event if (uiCustomize!==false) // from ui customizer in editor config or desktop event
this.UICustomizePlugins = arrUI; this.UICustomizePlugins = arrUI;
if ( !uiCustomize ) { if ( !uiCustomize && pluginStore) {
if (pluginStore) pluginStore.add(arr); arr = pluginStore.models.concat(arr);
arr.sort(function(a, b){
var rank_a = a.get('groupRank'),
rank_b = b.get('groupRank');
if (rank_a < rank_b)
return (rank_a==0) ? 1 : -1;
if (rank_a > rank_b)
return (rank_b==0) ? -1 : 1;
return 0;
});
pluginStore.reset(arr);
this.appOptions.canPlugins = !pluginStore.isEmpty(); this.appOptions.canPlugins = !pluginStore.isEmpty();
} }
} else if (!uiCustomize){ } else if (!uiCustomize){
@ -1784,6 +1798,10 @@ define([
if (!uiCustomize) this.getApplication().getController('LeftMenu').enablePlugins(); if (!uiCustomize) this.getApplication().getController('LeftMenu').enablePlugins();
}, },
resetPluginsList: function() {
this.getApplication().getCollection('Common.Collections.Plugins').reset();
},
// Translation // Translation
leavePageText: 'You have unsaved changes in this document. Click \'Stay on this Page\' then \'Save\' to save them. Click \'Leave this Page\' to discard all the unsaved changes.', leavePageText: 'You have unsaved changes in this document. Click \'Stay on this Page\' then \'Save\' to save them. Click \'Leave this Page\' to discard all the unsaved changes.',
defaultTitleText: 'ONLYOFFICE Presentation Editor', defaultTitleText: 'ONLYOFFICE Presentation Editor',

View file

@ -79,10 +79,12 @@ define([
this._settings[Common.Utils.documentSettingsType.Shape] = {panelId: "id-shape-settings", panel: rightMenu.shapeSettings, btn: rightMenu.btnShape, hidden: 1, locked: false}; this._settings[Common.Utils.documentSettingsType.Shape] = {panelId: "id-shape-settings", panel: rightMenu.shapeSettings, btn: rightMenu.btnShape, hidden: 1, locked: false};
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.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.Chart] = {panelId: "id-chart-settings", panel: rightMenu.chartSettings, btn: rightMenu.btnChart, hidden: 1, locked: false};
this._settings[Common.Utils.documentSettingsType.Signature] = {panelId: "id-signature-settings", panel: rightMenu.signatureSettings, btn: rightMenu.btnSignature, hidden: 1, props: {}, locked: false};
}, },
setApi: function(api) { setApi: function(api) {
this.api = api; this.api = api;
this.api.asc_registerCallback('asc_onUpdateSignatures', _.bind(this.onApiUpdateSignatures, this));
this.api.asc_registerCallback('asc_onCountPages', _.bind(this.onApiCountPages, this)); this.api.asc_registerCallback('asc_onCountPages', _.bind(this.onApiCountPages, this));
this.api.asc_registerCallback('asc_onCoAuthoringDisconnect',_.bind(this.onCoAuthoringDisconnect, this)); this.api.asc_registerCallback('asc_onCoAuthoringDisconnect',_.bind(this.onCoAuthoringDisconnect, this));
Common.NotificationCenter.on('api:disconnect', _.bind(this.onCoAuthoringDisconnect, this)); Common.NotificationCenter.on('api:disconnect', _.bind(this.onCoAuthoringDisconnect, this));
@ -97,7 +99,7 @@ define([
var panel = this._settings[type].panel; var panel = this._settings[type].panel;
var props = this._settings[type].props; var props = this._settings[type].props;
if (props && panel) if (props && panel)
panel.ChangeSettings.call(panel, props); panel.ChangeSettings.call(panel, (type==Common.Utils.documentSettingsType.Signature) ? undefined : props);
} }
Common.NotificationCenter.trigger('layout:changed', 'rightmenu'); Common.NotificationCenter.trigger('layout:changed', 'rightmenu');
this.rightmenu.fireEvent('editcomplete', this.rightmenu); this.rightmenu.fireEvent('editcomplete', this.rightmenu);
@ -109,12 +111,14 @@ define([
var needhide = true; var needhide = true;
for (var i=0; i<this._settings.length; i++) { for (var i=0; i<this._settings.length; i++) {
if (i==Common.Utils.documentSettingsType.Signature) continue;
if (this._settings[i]) { if (this._settings[i]) {
this._settings[i].hidden = 1; this._settings[i].hidden = 1;
this._settings[i].locked = undefined; this._settings[i].locked = undefined;
} }
} }
this._settings[Common.Utils.documentSettingsType.Slide].hidden = (SelectedObjects.length>0) ? 0 : 1; this._settings[Common.Utils.documentSettingsType.Slide].hidden = (SelectedObjects.length>0) ? 0 : 1;
this._settings[Common.Utils.documentSettingsType.Signature].locked = false;
for (i=0; i<SelectedObjects.length; i++) for (i=0; i<SelectedObjects.length; i++)
{ {
@ -152,7 +156,7 @@ define([
activePane = this.rightmenu.GetActivePane(); activePane = this.rightmenu.GetActivePane();
for (i=0; i<this._settings.length; i++) { for (i=0; i<this._settings.length; i++) {
var pnl = this._settings[i]; var pnl = this._settings[i];
if (pnl===undefined) continue; if (pnl===undefined || pnl.btn===undefined || pnl.panel===undefined) continue;
if ( pnl.hidden ) { if ( pnl.hidden ) {
if (!pnl.btn.isDisabled()) pnl.btn.setDisabled(true); if (!pnl.btn.isDisabled()) pnl.btn.setDisabled(true);
@ -160,7 +164,7 @@ define([
currentactive = -1; currentactive = -1;
} else { } else {
if (pnl.btn.isDisabled()) pnl.btn.setDisabled(false); if (pnl.btn.isDisabled()) pnl.btn.setDisabled(false);
if ( i!=Common.Utils.documentSettingsType.Slide ) if ( i!=Common.Utils.documentSettingsType.Slide && i!=Common.Utils.documentSettingsType.Signature)
lastactive = i; lastactive = i;
if ( pnl.needShow ) { if ( pnl.needShow ) {
pnl.needShow = false; pnl.needShow = false;
@ -190,7 +194,10 @@ define([
if (active !== undefined) { if (active !== undefined) {
this.rightmenu.SetActivePane(active, open); this.rightmenu.SetActivePane(active, open);
this._settings[active].panel.ChangeSettings.call(this._settings[active].panel, this._settings[active].props); if (active!=Common.Utils.documentSettingsType.Signature)
this._settings[active].panel.ChangeSettings.call(this._settings[active].panel, this._settings[active].props);
else
this._settings[active].panel.ChangeSettings.call(this._settings[active].panel);
} }
} }
@ -200,11 +207,41 @@ define([
}, },
onCoAuthoringDisconnect: function() { onCoAuthoringDisconnect: function() {
if (this.rightmenu) this.SetDisabled(true);
this.rightmenu.SetDisabled('', true, true);
this.setMode({isEdit: false}); this.setMode({isEdit: false});
}, },
SetDisabled: function(disabled, allowSignature) {
this.setMode({isEdit: !disabled});
if (this.rightmenu) {
this.rightmenu.slideSettings.SetSlideDisabled(disabled, disabled, disabled);
this.rightmenu.paragraphSettings.disableControls(disabled);
this.rightmenu.shapeSettings.disableControls(disabled);
this.rightmenu.textartSettings.disableControls(disabled);
this.rightmenu.tableSettings.disableControls(disabled);
this.rightmenu.imageSettings.disableControls(disabled);
this.rightmenu.chartSettings.disableControls(disabled);
if (!allowSignature && this.rightmenu.signatureSettings) {
this.rightmenu.btnSignature.setDisabled(disabled);
}
if (disabled) {
this.rightmenu.btnSlide.setDisabled(disabled);
this.rightmenu.btnText.setDisabled(disabled);
this.rightmenu.btnTable.setDisabled(disabled);
this.rightmenu.btnImage.setDisabled(disabled);
this.rightmenu.btnShape.setDisabled(disabled);
this.rightmenu.btnTextArt.setDisabled(disabled);
this.rightmenu.btnChart.setDisabled(disabled);
} else {
var selectedElements = this.api.getSelectedElements();
if (selectedElements.length > 0)
this.onFocusObject(selectedElements);
}
}
},
onInsertTable: function() { onInsertTable: function() {
this._settings[Common.Utils.documentSettingsType.Table].needShow = true; this._settings[Common.Utils.documentSettingsType.Table].needShow = true;
}, },
@ -268,6 +305,16 @@ define([
} }
}, },
onApiUpdateSignatures: function(valid){
if (!this.rightmenu.signatureSettings) return;
var disabled = (!valid || valid.length<1),
type = Common.Utils.documentSettingsType.Signature;
this._settings[type].hidden = disabled ? 1 : 0;
this._settings[type].btn.setDisabled(disabled);
this._settings[type].panel.setLocked(this._settings[type].locked);
},
onApiCountPages: function(count) { onApiCountPages: function(count) {
if (this._state.no_slides !== (count<=0) && this.editMode) { if (this._state.no_slides !== (count<=0) && this.editMode) {
this._state.no_slides = (count<=0); this._state.no_slides = (count<=0);

View file

@ -2041,7 +2041,10 @@ define([
this._state.activated = true; this._state.activated = true;
}, },
DisableToolbar: function(disable) { DisableToolbar: function(disable, viewMode) {
if (viewMode!==undefined) this.editMode = !viewMode;
disable = disable || !this.editMode;
var mask = $('.toolbar-mask'); var mask = $('.toolbar-mask');
if (disable && mask.length>0 || !disable && mask.length==0) return; if (disable && mask.length>0 || !disable && mask.length==0) return;
@ -2076,6 +2079,15 @@ define([
} }
me.toolbar.render(_.extend({compactview: compactview}, config)); me.toolbar.render(_.extend({compactview: compactview}, config));
if ( config.isEdit ) {
if (config.isDesktopApp && config.isOffline) {
var tab = {action: 'protect', caption: me.toolbar.textTabProtect};
var $panel = me.getApplication().getController('Common.Controllers.Protection').createToolbarPanel();
if ( $panel )
me.toolbar.addTab(tab, $panel, 3);
}
}
}, },
onAppReady: function (config) { onAppReady: function (config) {

View file

@ -8,6 +8,7 @@
<li id="fm-btn-save-desktop" class="fm-btn" /> <li id="fm-btn-save-desktop" class="fm-btn" />
<li id="fm-btn-print" class="fm-btn" /> <li id="fm-btn-print" class="fm-btn" />
<li id="fm-btn-rename" class="fm-btn" /> <li id="fm-btn-rename" class="fm-btn" />
<li id="fm-btn-protect" class="fm-btn" />
<li class="devider" /> <li class="devider" />
<li id="fm-btn-recent" class="fm-btn" /> <li id="fm-btn-recent" class="fm-btn" />
<li id="fm-btn-create" class="fm-btn" /> <li id="fm-btn-create" class="fm-btn" />
@ -29,4 +30,5 @@
<div id="panel-rights" class="content-box" /> <div id="panel-rights" class="content-box" />
<div id="panel-settings" class="content-box" /> <div id="panel-settings" class="content-box" />
<div id="panel-help" class="content-box" /> <div id="panel-help" class="content-box" />
<div id="panel-protect" class="content-box" />
</div> </div>

View file

@ -14,6 +14,8 @@
</div> </div>
<div id="id-textart-settings" class="settings-panel"> <div id="id-textart-settings" class="settings-panel">
</div> </div>
<div id="id-signature-settings" class="settings-panel">
</div>
</div> </div>
<div class="tool-menu-btns"> <div class="tool-menu-btns">
<div class="ct-btn-category arrow-left" /> <div class="ct-btn-category arrow-left" />
@ -24,5 +26,6 @@
<button id="id-right-menu-table" class="btn btn-category arrow-left" content-target="id-table-settings"><i class="icon img-toolbarmenu btn-menu-table">&nbsp;</i></button> <button id="id-right-menu-table" class="btn btn-category arrow-left" content-target="id-table-settings"><i class="icon img-toolbarmenu btn-menu-table">&nbsp;</i></button>
<button id="id-right-menu-chart" class="btn btn-category arrow-left" content-target="id-chart-settings"><i class="icon img-toolbarmenu btn-menu-chart">&nbsp;</i></button> <button id="id-right-menu-chart" class="btn btn-category arrow-left" content-target="id-chart-settings"><i class="icon img-toolbarmenu btn-menu-chart">&nbsp;</i></button>
<button id="id-right-menu-textart" class="btn btn-category arrow-left" content-target="id-textart-settings"><i class="icon img-toolbarmenu btn-menu-textart">&nbsp;</i></button> <button id="id-right-menu-textart" class="btn btn-category arrow-left" content-target="id-textart-settings"><i class="icon img-toolbarmenu btn-menu-textart">&nbsp;</i></button>
<button id="id-right-menu-signature" class="btn btn-category arrow-left hidden" content-target="id-signature-settings"><i class="icon img-toolbarmenu btn-menu-signature">&nbsp;</i></button>
</div> </div>
</div> </div>

View file

@ -0,0 +1,31 @@
<table cols="2">
<tr>
<td class="padding-large">
<label style="font-size: 18px;"><%= scope.strSignature %></label>
</td>
</tr>
<tr>
<td class="padding-large">
<div id="signature-invisible-sign" style="width:100%;"></div>
</td>
</tr>
<tr class="valid">
<td class="padding-small">
<label class="header"><%= scope.strValid %></label>
</td>
</tr>
<tr class="valid">
<td class="padding-large">
<div id="signature-valid-sign"></div>
</td>
</tr>
<tr class="invalid">
<td class="padding-small">
<label class="header" style="color:#bb3d3d;"><%= scope.strInvalid %></label>
</td>
</tr>
<tr class="invalid">
<td><div id="signature-invalid-sign"></div></td>
</tr>
<tr class="finish-cell"></tr>
</table>

View file

@ -67,7 +67,8 @@ define([
me._currentSpellObj = undefined; me._currentSpellObj = undefined;
me._currLang = {}; me._currLang = {};
me._state = {}; me._state = {};
me._isDisabled = false;
/** coauthoring begin **/ /** coauthoring begin **/
var usersStore = PE.getCollection('Common.Collections.Users'); var usersStore = PE.getCollection('Common.Collections.Users');
/** coauthoring end **/ /** coauthoring end **/
@ -212,7 +213,7 @@ define([
var showObjectMenu = function(event, docElement, eOpts){ var showObjectMenu = function(event, docElement, eOpts){
if (me.api){ if (me.api){
var obj = (me.mode.isEdit) ? fillMenuProps(me.api.getSelectedElements()) : fillViewMenuProps(me.api.getSelectedElements()); var obj = (me.mode.isEdit && !me._isDisabled) ? fillMenuProps(me.api.getSelectedElements()) : fillViewMenuProps(me.api.getSelectedElements());
if (obj) showPopupMenu(obj.menu_to_show, obj.menu_props, event, docElement, eOpts); if (obj) showPopupMenu(obj.menu_to_show, obj.menu_props, event, docElement, eOpts);
} }
}; };
@ -220,8 +221,7 @@ define([
var onContextMenu = function(event){ var onContextMenu = function(event){
_.delay(function(){ _.delay(function(){
if (event.get_Type() == Asc.c_oAscContextMenuTypes.Thumbnails) { if (event.get_Type() == Asc.c_oAscContextMenuTypes.Thumbnails) {
if (me.mode.isEdit) !me._isDisabled && showPopupMenu.call(me, me.slideMenu, {isSlideSelect: event.get_IsSlideSelect(), isSlideHidden: event.get_IsSlideHidden(), fromThumbs: true}, event);
showPopupMenu.call(me, me.slideMenu, {isSlideSelect: event.get_IsSlideSelect(), isSlideHidden: event.get_IsSlideHidden(), fromThumbs: true}, event);
} else { } else {
showObjectMenu.call(me, event); showObjectMenu.call(me, event);
} }
@ -231,7 +231,7 @@ define([
var onFocusObject = function(selectedElements) { var onFocusObject = function(selectedElements) {
if (me.currentMenu && me.currentMenu.isVisible()){ if (me.currentMenu && me.currentMenu.isVisible()){
if (me.api.asc_getCurrentFocusObject() === 0 ){ // thumbnails if (me.api.asc_getCurrentFocusObject() === 0 ){ // thumbnails
if (me.slideMenu===me.currentMenu) { if (me.slideMenu===me.currentMenu && !me._isDisabled) {
var isHidden = false; var isHidden = false;
_.each(selectedElements, function(element, index) { _.each(selectedElements, function(element, index) {
if (Asc.c_oAscTypeSelectElement.Slide == element.get_ObjectType()) { if (Asc.c_oAscTypeSelectElement.Slide == element.get_ObjectType()) {
@ -243,7 +243,7 @@ define([
me.currentMenu.alignPosition(); me.currentMenu.alignPosition();
} }
} else { } else {
var obj = (me.mode.isEdit) ? fillMenuProps(selectedElements) : fillViewMenuProps(selectedElements); var obj = (me.mode.isEdit && !me._isDisabled) ? fillMenuProps(selectedElements) : fillViewMenuProps(selectedElements);
if (obj) { if (obj) {
if (obj.menu_to_show===me.currentMenu) { if (obj.menu_to_show===me.currentMenu) {
me.currentMenu.options.initMenu(obj.menu_props); me.currentMenu.options.initMenu(obj.menu_props);
@ -578,7 +578,7 @@ define([
var onDialogAddHyperlink = function() { var onDialogAddHyperlink = function() {
var win, props, text; var win, props, text;
if (me.api && me.mode.isEdit){ if (me.api && me.mode.isEdit && !me._isDisabled){
var handlerDlg = function(dlg, result) { var handlerDlg = function(dlg, result) {
if (result == 'ok') { if (result == 'ok') {
props = dlg.getSettings(); props = dlg.getSettings();
@ -671,7 +671,7 @@ define([
}; };
var onDoubleClickOnChart = function(chart) { var onDoubleClickOnChart = function(chart) {
if (me.mode.isEdit) { if (me.mode.isEdit && !me._isDisabled) {
var diagramEditor = PE.getController('Common.Controllers.ExternalDiagramEditor').getView('Common.Views.ExternalDiagramEditor'); var diagramEditor = PE.getController('Common.Controllers.ExternalDiagramEditor').getView('Common.Views.ExternalDiagramEditor');
if (diagramEditor && chart) { if (diagramEditor && chart) {
@ -1711,10 +1711,10 @@ define([
this.viewModeMenu = new Common.UI.Menu({ this.viewModeMenu = new Common.UI.Menu({
initMenu: function (value) { initMenu: function (value) {
menuViewUndo.setVisible(me.mode.canCoAuthoring && me.mode.canComments); menuViewUndo.setVisible(me.mode.canCoAuthoring && me.mode.canComments && !me._isDisabled);
menuViewUndo.setDisabled(!me.api.asc_getCanUndo()); menuViewUndo.setDisabled(!me.api.asc_getCanUndo() && !me._isDisabled);
menuViewCopySeparator.setVisible(!value.isChart && me.api.can_AddQuotedComment() !== false && me.mode.canCoAuthoring && me.mode.canComments); menuViewCopySeparator.setVisible(!value.isChart && me.api.can_AddQuotedComment() !== false && me.mode.canCoAuthoring && me.mode.canComments && !me._isDisabled);
menuViewAddComment.setVisible(!value.isChart && me.api.can_AddQuotedComment() !== false && me.mode.canCoAuthoring && me.mode.canComments); menuViewAddComment.setVisible(!value.isChart && me.api.can_AddQuotedComment() !== false && me.mode.canCoAuthoring && me.mode.canComments && !me._isDisabled);
menuViewAddComment.setDisabled(value.locked); menuViewAddComment.setDisabled(value.locked);
}, },
items: [ items: [
@ -3131,6 +3131,10 @@ define([
} }
}, },
SetDisabled: function(state) {
this._isDisabled = state;
},
insertRowAboveText : 'Row Above', insertRowAboveText : 'Row Above',
insertRowBelowText : 'Row Below', insertRowBelowText : 'Row Below',
insertColumnLeftText : 'Column Left', insertColumnLeftText : 'Column Left',

View file

@ -129,6 +129,13 @@ define([
canFocused: false canFocused: false
}); });
this.miProtect = new Common.UI.MenuItem({
el : $('#fm-btn-protect',this.el),
action : 'protect',
caption : this.btnProtectCaption,
canFocused: false
});
this.miRecent = new Common.UI.MenuItem({ this.miRecent = new Common.UI.MenuItem({
el : $('#fm-btn-recent',this.el), el : $('#fm-btn-recent',this.el),
action : 'recent', action : 'recent',
@ -164,6 +171,7 @@ define([
this.miSaveAs, this.miSaveAs,
this.miPrint, this.miPrint,
this.miRename, this.miRename,
this.miProtect,
this.miRecent, this.miRecent,
this.miNew, this.miNew,
new Common.UI.MenuItem({ new Common.UI.MenuItem({
@ -210,10 +218,12 @@ define([
show: function(panel) { show: function(panel) {
if (this.isVisible() && panel===undefined) return; if (this.isVisible() && panel===undefined) return;
var defPanel = (this.mode.canDownload && (!this.mode.isDesktopApp || !this.mode.isOffline)) ? 'saveas' : 'info';
if (!panel) if (!panel)
panel = this.active || ((this.mode.canDownload && (!this.mode.isDesktopApp || !this.mode.isOffline)) ? 'saveas' : 'info'); panel = this.active || defPanel;
this.$el.show(); this.$el.show();
this.selectMenu(panel); this.selectMenu(panel, defPanel);
this.api.asc_enableKeyEvents(false); this.api.asc_enableKeyEvents(false);
this.fireEvent('menu:show', [this]); this.fireEvent('menu:show', [this]);
@ -228,7 +238,8 @@ define([
applyMode: function() { applyMode: function() {
this.miPrint[this.mode.canPrint?'show':'hide'](); this.miPrint[this.mode.canPrint?'show':'hide']();
this.miRename[(this.mode.canRename && !this.mode.isDesktopApp) ?'show':'hide'](); this.miRename[(this.mode.canRename && !this.mode.isDesktopApp) ?'show':'hide']();
this.miRename.$el.find('+.devider')[!this.mode.isDisconnected?'show':'hide'](); this.miProtect[(this.mode.isEdit && this.mode.isDesktopApp && this.mode.isOffline) ?'show':'hide']();
this.miProtect.$el.find('+.devider')[!this.mode.isDisconnected?'show':'hide']();
this.miRecent[this.mode.canOpenRecent?'show':'hide'](); this.miRecent[this.mode.canOpenRecent?'show':'hide']();
this.miNew[this.mode.canCreateNew?'show':'hide'](); this.miNew[this.mode.canCreateNew?'show':'hide']();
this.miNew.$el.find('+.devider')[this.mode.canCreateNew?'show':'hide'](); this.miNew.$el.find('+.devider')[this.mode.canCreateNew?'show':'hide']();
@ -264,8 +275,12 @@ define([
} }
} }
if (this.mode.targetApp == 'desktop') { if (this.mode.isDesktopApp && this.mode.isOffline) {
this.$el.find('#fm-btn-create, #fm-btn-back, #fm-btn-create+.devider').hide(); this.$el.find('#fm-btn-create, #fm-btn-back, #fm-btn-create+.devider').hide();
if (this.mode.isEdit) {
this.panels['protect'] = (new PE.Views.FileMenuPanels.ProtectDoc({menu:this})).render();
this.panels['protect'].setMode(this.mode);
}
} }
this.panels['help'].setLangConfig(this.mode.lang); this.panels['help'].setLangConfig(this.mode.lang);
@ -288,6 +303,7 @@ define([
setApi: function(api) { setApi: function(api) {
this.api = api; this.api = api;
if (this.panels['protect']) this.panels['protect'].setApi(api);
this.api.asc_registerCallback('asc_onDocumentName', _.bind(this.onDocumentName, this)); this.api.asc_registerCallback('asc_onDocumentName', _.bind(this.onDocumentName, this));
}, },
@ -295,10 +311,14 @@ define([
this.document = data.doc; this.document = data.doc;
}, },
selectMenu: function(menu) { selectMenu: function(menu, defMenu) {
if ( menu ) { if ( menu ) {
var item = this._getMenuItem(menu), var item = this._getMenuItem(menu),
panel = this.panels[menu]; panel = this.panels[menu];
if ( item.isDisabled() ) {
item = this._getMenuItem(defMenu);
panel = this.panels[defMenu];
}
if ( item && panel ) { if ( item && panel ) {
$('.fm-btn',this.el).removeClass('active'); $('.fm-btn',this.el).removeClass('active');
item.$el.addClass('active'); item.$el.addClass('active');
@ -354,6 +374,7 @@ define([
btnSettingsCaption : 'Advanced Settings...', btnSettingsCaption : 'Advanced Settings...',
btnSaveAsCaption : 'Save as', btnSaveAsCaption : 'Save as',
btnRenameCaption : 'Rename...', btnRenameCaption : 'Rename...',
btnCloseMenuCaption : 'Close Menu' btnCloseMenuCaption : 'Close Menu',
btnProtectCaption: 'Protect'
}, PE.Views.FileMenu || {})); }, PE.Views.FileMenu || {}));
}); });

View file

@ -866,4 +866,167 @@ define([
} }
} }
}); });
PE.Views.FileMenuPanels.ProtectDoc = Common.UI.BaseView.extend(_.extend({
el: '#panel-protect',
menu: undefined,
template: _.template([
'<label id="id-fms-lbl-protect-header" style="font-size: 18px;"><%= scope.strProtect %></label>',
'<div id="id-fms-password">',
'<label class="header"><%= scope.strEncrypt %></label>',
'<div id="fms-btn-add-pwd" style="width:190px;"></div>',
'<table id="id-fms-view-pwd" cols="2" width="300">',
'<tr>',
'<td colspan="2"><span><%= scope.txtEncrypted %></span></td>',
'</tr>',
'<tr>',
'<td><div id="fms-btn-change-pwd" style="width:190px;"></div></td>',
'<td align="right"><div id="fms-btn-delete-pwd" style="width:190px; margin-left:20px;"></div></td>',
'</tr>',
'</table>',
'</div>',
'<div id="id-fms-signature">',
'<label class="header"><%= scope.strSignature %></label>',
'<div id="fms-btn-invisible-sign" style="width:190px; margin-bottom: 20px;"></div>',
'<div id="id-fms-signature-view"></div>',
'</div>'
].join('')),
initialize: function(options) {
Common.UI.BaseView.prototype.initialize.call(this,arguments);
this.menu = options.menu;
var me = this;
this.templateSignature = _.template([
'<table cols="2" width="300" class="<% if (!hasSigned) { %>hidden<% } %>"">',
'<tr>',
'<td colspan="2"><span><%= tipText %></span></td>',
'</tr>',
'<tr>',
'<td><label class="link signature-view-link">' + me.txtView + '</label></td>',
'<td align="right"><label class="link signature-edit-link <% if (!hasSigned) { %>hidden<% } %>">' + me.txtEdit + '</label></td>',
'</tr>',
'</table>'
].join(''));
},
render: function() {
$(this.el).html(this.template({scope: this}));
var protection = PE.getController('Common.Controllers.Protection').getView();
this.btnAddPwd = protection.getButton('add-password');
this.btnAddPwd.render(this.$el.find('#fms-btn-add-pwd'));
this.btnAddPwd.on('click', _.bind(this.closeMenu, this));
this.btnChangePwd = protection.getButton('change-password');
this.btnChangePwd.render(this.$el.find('#fms-btn-change-pwd'));
this.btnChangePwd.on('click', _.bind(this.closeMenu, this));
this.btnDeletePwd = protection.getButton('del-password');
this.btnDeletePwd.render(this.$el.find('#fms-btn-delete-pwd'));
this.btnDeletePwd.on('click', _.bind(this.closeMenu, this));
this.cntPassword = $('#id-fms-view-pwd');
this.btnAddInvisibleSign = protection.getButton('signature');
this.btnAddInvisibleSign.render(this.$el.find('#fms-btn-invisible-sign'));
this.btnAddInvisibleSign.on('click', _.bind(this.closeMenu, this));
this.cntSignature = $('#id-fms-signature');
this.cntSignatureView = $('#id-fms-signature-view');
if (_.isUndefined(this.scroller)) {
this.scroller = new Common.UI.Scroller({
el: $(this.el),
suppressScrollX: true
});
}
this.$el.on('click', '.signature-edit-link', _.bind(this.onEdit, this));
this.$el.on('click', '.signature-view-link', _.bind(this.onView, this));
return this;
},
show: function() {
Common.UI.BaseView.prototype.show.call(this,arguments);
this.updateSignatures();
this.updateEncrypt();
},
setMode: function(mode) {
this.mode = mode;
this.cntSignature.toggleClass('hidden', !this.mode.canProtect);
},
setApi: function(o) {
this.api = o;
return this;
},
closeMenu: function() {
this.menu && this.menu.hide();
},
onEdit: function() {
this.menu && this.menu.hide();
var me = this;
Common.UI.warning({
title: this.notcriticalErrorTitle,
msg: this.txtEditWarning,
buttons: ['ok', 'cancel'],
primary: 'ok',
callback: function(btn) {
if (btn == 'ok') {
me.api.asc_RemoveAllSignatures();
}
}
});
},
onView: function() {
this.menu && this.menu.hide();
PE.getController('RightMenu').rightmenu.SetActivePane(Common.Utils.documentSettingsType.Signature, true);
},
updateSignatures: function(){
var valid = this.api.asc_getSignatures(),
hasValid = false,
hasInvalid = false;
_.each(valid, function(item, index){
if (item.asc_getValid()==0)
hasValid = true;
else
hasInvalid = true;
});
// hasValid = true;
// hasInvalid = true;
var tipText = (hasInvalid) ? this.txtSignedInvalid : (hasValid ? this.txtSigned : "");
this.cntSignatureView.html(this.templateSignature({tipText: tipText, hasSigned: (hasValid || hasInvalid)}));
},
updateEncrypt: function() {
this.cntPassword.toggleClass('hidden', this.btnAddPwd.isVisible());
},
strProtect: 'Protect Presentation',
strSignature: 'With Signature',
txtView: 'View signatures',
txtEdit: 'Edit presentation',
txtSigned: 'Valid signatures has been added to the presentation. The presentation is protected from editing.',
txtSignedInvalid: 'Some of the digital signatures in presentation are invalid or could not be verified. The presentation is protected from editing.',
notcriticalErrorTitle: 'Warning',
txtEditWarning: 'Editing will remove the signatures from the presentation.<br>Are you sure you want to continue?',
strEncrypt: 'With Password',
txtEncrypted: 'This presentation has been protected by password'
}, PE.Views.FileMenuPanels.ProtectDoc || {}));
}); });

View file

@ -56,6 +56,7 @@ define([
'presentationeditor/main/app/view/ShapeSettings', 'presentationeditor/main/app/view/ShapeSettings',
'presentationeditor/main/app/view/SlideSettings', 'presentationeditor/main/app/view/SlideSettings',
'presentationeditor/main/app/view/TextArtSettings', 'presentationeditor/main/app/view/TextArtSettings',
'presentationeditor/main/app/view/SignatureSettings',
'common/main/lib/component/Scroller' 'common/main/lib/component/Scroller'
], function (menuTemplate, $, _, Backbone) { ], function (menuTemplate, $, _, Backbone) {
'use strict'; 'use strict';
@ -143,7 +144,7 @@ define([
return this; return this;
}, },
render: function () { render: function (mode) {
var el = $(this.el); var el = $(this.el);
this.trigger('render:before', this); this.trigger('render:before', this);
@ -178,6 +179,21 @@ define([
this.shapeSettings = new PE.Views.ShapeSettings(); this.shapeSettings = new PE.Views.ShapeSettings();
this.textartSettings = new PE.Views.TextArtSettings(); this.textartSettings = new PE.Views.TextArtSettings();
if (mode && mode.canProtect) {
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 PE.Views.SignatureSettings();
}
if (_.isUndefined(this.scroller)) { if (_.isUndefined(this.scroller)) {
this.scroller = new Common.UI.Scroller({ this.scroller = new Common.UI.Scroller({
el: $(this.el).find('.right-panel'), el: $(this.el).find('.right-panel'),
@ -206,6 +222,7 @@ define([
this.tableSettings.setApi(api).on('editcomplete', _.bind( fire, this)); this.tableSettings.setApi(api).on('editcomplete', _.bind( fire, this));
this.shapeSettings.setApi(api).on('editcomplete', _.bind( fire, this)); this.shapeSettings.setApi(api).on('editcomplete', _.bind( fire, this));
this.textartSettings.setApi(api).on('editcomplete', _.bind( fire, this)); this.textartSettings.setApi(api).on('editcomplete', _.bind( fire, this));
if (this.signatureSettings) this.signatureSettings.setApi(api).on('editcomplete', _.bind( fire, this));
}, },
setMode: function(mode) { setMode: function(mode) {
@ -263,23 +280,6 @@ define([
return (this.minimizedMode) ? null : this.$el.find(".settings-panel.active")[0].id; return (this.minimizedMode) ? null : this.$el.find(".settings-panel.active")[0].id;
}, },
SetDisabled: function(id, disabled, all) {
if (all) {
this.slideSettings.SetSlideDisabled(disabled, disabled, disabled);
this.paragraphSettings.disableControls(disabled);
this.shapeSettings.disableControls(disabled);
this.tableSettings.disableControls(disabled);
this.imageSettings.disableControls(disabled);
this.chartSettings.disableControls(disabled);
} else {
var cmp = $("#" + id);
if (disabled !== cmp.hasClass('disabled')) {
cmp.toggleClass('disabled', disabled);
(disabled) ? cmp.attr({disabled: disabled}) : cmp.removeAttr('disabled');
}
}
},
clearSelection: function() { clearSelection: function() {
var target_pane = $(".right-panel"); var target_pane = $(".right-panel");
target_pane.find('> .active').removeClass('active'); target_pane.find('> .active').removeClass('active');
@ -299,6 +299,7 @@ define([
txtShapeSettings: 'Shape Settings', txtShapeSettings: 'Shape Settings',
txtTextArtSettings: 'Text Art Settings', txtTextArtSettings: 'Text Art Settings',
txtSlideSettings: 'Slide Settings', txtSlideSettings: 'Slide Settings',
txtChartSettings: 'Chart Settings' txtChartSettings: 'Chart Settings',
txtSignatureSettings: 'Signature Settings'
}, PE.Views.RightMenu || {})); }, PE.Views.RightMenu || {}));
}); });

View file

@ -0,0 +1,340 @@
/*
*
* (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!presentationeditor/main/app/template/SignatureSettings.template',
'jquery',
'underscore',
'backbone',
'common/main/lib/component/Button'
], function (menuTemplate, $, _, Backbone) {
'use strict';
PE.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 () {
this._state = {
DisabledEditing: false,
ready: false,
hasValid: false,
hasInvalid: false,
tip: undefined
};
this._locked = false;
this.render();
},
render: function () {
this.$el.html(this.template({
scope: this
}));
var protection = PE.getController('Common.Controllers.Protection').getView();
this.btnAddInvisibleSign = protection.getButton('signature');
this.btnAddInvisibleSign.render(this.$el.find('#signature-invisible-sign'));
this.viewValidList = new Common.UI.DataView({
el: $('#signature-valid-sign'),
enableKeyEvents: false,
itemTemplate: _.template([
'<div id="<%= id %>" class="signature-item">',
'<div class="caret img-commonctrl <% if (name == "" || date == "") { %>' + 'nomargin' + '<% } %>"></div>',
'<div class="name"><%= Common.Utils.String.htmlEncode(name) %></div>',
'<div class="date"><%= Common.Utils.String.htmlEncode(date) %></div>',
'</div>'
].join(''))
});
this.viewInvalidList = new Common.UI.DataView({
el: $('#signature-invalid-sign'),
enableKeyEvents: false,
itemTemplate: _.template([
'<div id="<%= id %>" class="signature-item">',
'<div class="caret img-commonctrl <% if (name == "" || date == "") { %>' + 'nomargin' + '<% } %>"></div>',
'<div class="name"><%= Common.Utils.String.htmlEncode(name) %></div>',
'<div class="date"><%= Common.Utils.String.htmlEncode(date) %></div>',
'</div>'
].join(''))
});
this.viewValidList.on('item:click', _.bind(this.onSelectSignature, this));
this.viewInvalidList.on('item:click', _.bind(this.onSelectSignature, this));
this.signatureMenu = new Common.UI.Menu({
menuAlign : 'tr-br',
items: [
{ caption: this.strDetails,value: 1 },
{ caption: this.strDelete, value: 3 }
]
});
this.signatureMenu.on('item:click', _.bind(this.onMenuSignatureClick, this));
},
setApi: function(api) {
this.api = api;
if (this.api) {
this.api.asc_registerCallback('asc_onUpdateSignatures', _.bind(this.onApiUpdateSignatures, this));
}
Common.NotificationCenter.on('document:ready', _.bind(this.onDocumentReady, this));
return this;
},
ChangeSettings: function(props) {
if (!this._state.hasValid && !this._state.hasInvalid)
this.updateSignatures(this.api.asc_getSignatures());
},
setLocked: function (locked) {
this._locked = locked;
},
setMode: function(mode) {
this.mode = mode;
},
onApiUpdateSignatures: function(valid){
if (!this._state.ready) return;
this.updateSignatures(valid);
this.showSignatureTooltip(this._state.hasValid, this._state.hasInvalid);
},
updateSignatures: function(valid){
var me = this,
validSignatures = [],
invalidSignatures = [];
_.each(valid, function(item, index){
var item_date = item.asc_getDate();
var sign = {name: item.asc_getSigner1(), certificateId: item.asc_getId(), guid: item.asc_getGuid(), date: (!_.isEmpty(item_date)) ? new Date(item_date).toLocaleString() : '', invisible: !item.asc_getVisible()};
(item.asc_getValid()==0) ? validSignatures.push(sign) : invalidSignatures.push(sign);
});
// validSignatures = [{name: 'Hammish Mitchell', guid: '123', date: '18/05/2017', invisible: true}, {name: 'Someone Somewhere', guid: '345', date: '18/05/2017'}];
// invalidSignatures = [{name: 'Mary White', guid: '111', date: '18/05/2017'}, {name: 'John Black', guid: '456', date: '18/05/2017'}];
me._state.hasValid = validSignatures.length>0;
me._state.hasInvalid = invalidSignatures.length>0;
this.viewValidList.store.reset(validSignatures);
this.viewInvalidList.store.reset(invalidSignatures);
this.$el.find('.valid').toggleClass('hidden', !me._state.hasValid);
this.$el.find('.invalid').toggleClass('hidden', !me._state.hasInvalid);
me.disableEditing(me._state.hasValid || me._state.hasInvalid);
},
onSelectSignature: function(picker, item, record, e){
if (!record) return;
var btn = $(e.target);
if (btn && btn.hasClass('caret')) {
var menu = this.signatureMenu;
if (menu.isVisible()) {
menu.hide();
return;
}
var showPoint, me = this,
currentTarget = $(e.currentTarget),
parent = $(this.el),
offset = currentTarget.offset(),
offsetParent = parent.offset();
showPoint = [offset.left - offsetParent.left + currentTarget.width(), offset.top - offsetParent.top + currentTarget.height()/2];
var menuContainer = parent.find('#menu-signature-container');
if (!menu.rendered) {
if (menuContainer.length < 1) {
menuContainer = $('<div id="menu-signature-container" style="position: absolute; z-index: 10000;"><div class="dropdown-toggle" data-toggle="dropdown"></div></div>', menu.id);
parent.append(menuContainer);
}
menu.render(menuContainer);
menu.cmpEl.attr({tabindex: "-1"});
menu.on({
'show:after': function(cmp) {
if (cmp && cmp.menuAlignEl)
cmp.menuAlignEl.toggleClass('over', true);
},
'hide:after': function(cmp) {
if (cmp && cmp.menuAlignEl)
cmp.menuAlignEl.toggleClass('over', false);
}
});
}
menu.items[1].setDisabled(this._locked);
menu.items[0].cmpEl.attr('data-value', record.get('certificateId')); // view certificate
menu.cmpEl.attr('data-value', record.get('guid'));
menuContainer.css({left: showPoint[0], top: showPoint[1]});
menu.menuAlignEl = currentTarget;
menu.setOffset(-20, -currentTarget.height()/2 + 3);
menu.show();
_.delay(function() {
menu.cmpEl.focus();
}, 10);
e.stopPropagation();
e.preventDefault();
}
},
onMenuSignatureClick: function(menu, item) {
var guid = menu.cmpEl.attr('data-value');
switch (item.value) {
case 1:
this.api.asc_ViewCertificate(item.cmpEl.attr('data-value'));
break;
case 3:
this.api.asc_RemoveSignature(guid);
break;
}
},
onDocumentReady: function() {
this._state.ready = true;
this.updateSignatures(this.api.asc_getSignatures(), this.api.asc_getRequestSignatures());
this.showSignatureTooltip(this._state.hasValid, this._state.hasInvalid);
},
showSignatureTooltip: function(hasValid, hasInvalid) {
var me = this,
tip = me._state.tip;
if (!hasValid && !hasInvalid) {
if (tip && tip.isVisible()) {
tip.close();
me._state.tip = undefined;
}
return;
}
var showLink = hasValid || hasInvalid,
tipText = (hasInvalid) ? me.txtSignedInvalid : (hasValid ? me.txtSigned : "");
if (tip && tip.isVisible() && (tipText !== tip.text || showLink !== tip.showLink)) {
tip.close();
me._state.tip = undefined;
}
if (!me._state.tip) {
tip = new Common.UI.SynchronizeTip({
target : PE.getController('RightMenu').getView('RightMenu').btnSignature.btnEl,
text : tipText,
showLink: showLink,
textLink: this.txtContinueEditing,
placement: 'left'
});
tip.on({
'dontshowclick': function() {
Common.UI.warning({
title: me.notcriticalErrorTitle,
msg: me.txtEditWarning,
buttons: ['ok', 'cancel'],
primary: 'ok',
callback: function(btn) {
if (btn == 'ok') {
tip.close();
me._state.tip = undefined;
me.api.asc_RemoveAllSignatures();
}
}
});
},
'closeclick': function() {
tip.close();
me._state.tip = undefined;
}
});
me._state.tip = tip;
tip.show();
}
},
disableEditing: function(disable) {
if (this._state.DisabledEditing != disable) {
this._state.DisabledEditing = disable;
var rightMenuController = PE.getController('RightMenu');
if (disable && rightMenuController.rightmenu.GetActivePane() !== 'id-signature-settings')
rightMenuController.rightmenu.clearSelection();
rightMenuController.SetDisabled(disable, true);
PE.getController('Toolbar').DisableToolbar(disable, disable);
PE.getController('Statusbar').getView('Statusbar').SetDisabled(disable);
PE.getController('DocumentHolder').getView('DocumentHolder').SetDisabled(disable);
var leftMenu = PE.getController('LeftMenu').leftMenu;
leftMenu.btnComments.setDisabled(disable);
var comments = PE.getController('Common.Controllers.Comments');
if (comments)
comments.setPreviewMode(disable);
}
},
strSignature: 'Signature',
strValid: 'Valid signatures',
strInvalid: 'Invalid signatures',
strDetails: 'Signature Details',
txtSigned: 'Valid signatures has been added to the presentation. The presentation is protected from editing.',
txtSignedInvalid: 'Some of the digital signatures in presentation are invalid or could not be verified. The presentation is protected from editing.',
txtContinueEditing: 'Edit anyway',
notcriticalErrorTitle: 'Warning',
txtEditWarning: 'Editing will remove the signatures from the presentation.<br>Are you sure you want to continue?',
strDelete: 'Remove Signature'
}, PE.Views.SignatureSettings || {}));
});

View file

@ -370,6 +370,7 @@ define([
var langs = this.langMenu.items.length>0; var langs = this.langMenu.items.length>0;
this.btnLanguage.setDisabled(disable || !langs || this._state.no_paragraph); this.btnLanguage.setDisabled(disable || !langs || this._state.no_paragraph);
this.btnDocLanguage.setDisabled(disable || !langs); this.btnDocLanguage.setDisabled(disable || !langs);
this.mode.isEdit = !disable;
}, },
onApiFocusObject: function(selectedObjects) { onApiFocusObject: function(selectedObjects) {

View file

@ -1855,7 +1855,8 @@ define([
textTabHome: 'Home', textTabHome: 'Home',
textTabInsert: 'Insert', textTabInsert: 'Insert',
textSurface: 'Surface', textSurface: 'Surface',
textShowPresenterView: 'Show presenter view' textShowPresenterView: 'Show presenter view',
textTabProtect: 'Protection'
} }
}()), PE.Views.Toolbar || {})); }()), PE.Views.Toolbar || {}));
}); });

View file

@ -123,7 +123,7 @@ define([
}, },
applyEditorMode: function() { applyEditorMode: function() {
PE.getController('RightMenu').getView('RightMenu').render(); PE.getController('RightMenu').getView('RightMenu').render(this.mode);
if ( Common.localStorage.getBool('pe-hidden-status') ) if ( Common.localStorage.getBool('pe-hidden-status') )
PE.getController('Statusbar').getView('Statusbar').setVisible(false); PE.getController('Statusbar').getView('Statusbar').setVisible(false);

View file

@ -146,6 +146,7 @@ require([
/** coauthoring end **/ /** coauthoring end **/
,'Common.Controllers.Plugins' ,'Common.Controllers.Plugins'
,'Common.Controllers.ExternalDiagramEditor' ,'Common.Controllers.ExternalDiagramEditor'
,'Common.Controllers.Protection'
] ]
}); });
@ -166,6 +167,7 @@ require([
'presentationeditor/main/app/view/SlideSettings', 'presentationeditor/main/app/view/SlideSettings',
'presentationeditor/main/app/view/TableSettings', 'presentationeditor/main/app/view/TableSettings',
'presentationeditor/main/app/view/TextArtSettings', 'presentationeditor/main/app/view/TextArtSettings',
'presentationeditor/main/app/view/SignatureSettings',
'common/main/lib/util/utils', 'common/main/lib/util/utils',
'common/main/lib/util/LocalStorage', 'common/main/lib/util/LocalStorage',
'common/main/lib/controller/Fonts' 'common/main/lib/controller/Fonts'
@ -176,6 +178,7 @@ require([
'common/main/lib/controller/Plugins', 'common/main/lib/controller/Plugins',
'presentationeditor/main/app/view/ChartSettings', 'presentationeditor/main/app/view/ChartSettings',
'common/main/lib/controller/ExternalDiagramEditor' 'common/main/lib/controller/ExternalDiagramEditor'
,'common/main/lib/controller/Protection'
], function() { ], function() {
window.compareVersions = true; window.compareVersions = true;
app.start(); app.start();

View file

@ -116,16 +116,59 @@
"Common.Views.OpenDialog.txtPassword": "Password", "Common.Views.OpenDialog.txtPassword": "Password",
"Common.Views.OpenDialog.txtTitle": "Choose %1 options", "Common.Views.OpenDialog.txtTitle": "Choose %1 options",
"Common.Views.OpenDialog.txtTitleProtected": "Protected File", "Common.Views.OpenDialog.txtTitleProtected": "Protected File",
"Common.Views.PasswordDialog.cancelButtonText": "Cancel",
"Common.Views.PasswordDialog.okButtonText": "OK",
"Common.Views.PasswordDialog.txtDescription": "A password is required to open this document",
"Common.Views.PasswordDialog.txtIncorrectPwd": "Confirmation password is not identical",
"Common.Views.PasswordDialog.txtPassword": "Password",
"Common.Views.PasswordDialog.txtRepeat": "Repeat password",
"Common.Views.PasswordDialog.txtTitle": "Set Password",
"Common.Views.PluginDlg.textLoading": "Loading", "Common.Views.PluginDlg.textLoading": "Loading",
"Common.Views.Plugins.groupCaption": "Plugins", "Common.Views.Plugins.groupCaption": "Plugins",
"Common.Views.Plugins.strPlugins": "Plugins", "Common.Views.Plugins.strPlugins": "Plugins",
"Common.Views.Plugins.textLoading": "Loading", "Common.Views.Plugins.textLoading": "Loading",
"Common.Views.Plugins.textStart": "Start", "Common.Views.Plugins.textStart": "Start",
"Common.Views.Plugins.textStop": "Stop", "Common.Views.Plugins.textStop": "Stop",
"Common.Views.Protection.hintAddPwd": "Encrypt with password",
"Common.Views.Protection.hintPwd": "Change or delete password",
"Common.Views.Protection.hintSignature": "Add digital signature or signature line",
"Common.Views.Protection.txtAddPwd": "Add password",
"Common.Views.Protection.txtChangePwd": "Change password",
"Common.Views.Protection.txtDeletePwd": "Delete password",
"Common.Views.Protection.txtEncrypt": "Encrypt",
"Common.Views.Protection.txtInvisibleSignature": "Add digital signature",
"Common.Views.Protection.txtSignature": "Signature",
"Common.Views.Protection.txtSignatureLine": "Signature line",
"Common.Views.RenameDialog.cancelButtonText": "Cancel", "Common.Views.RenameDialog.cancelButtonText": "Cancel",
"Common.Views.RenameDialog.okButtonText": "Ok", "Common.Views.RenameDialog.okButtonText": "Ok",
"Common.Views.RenameDialog.textName": "File name", "Common.Views.RenameDialog.textName": "File name",
"Common.Views.RenameDialog.txtInvalidName": "The file name cannot contain any of the following characters: ", "Common.Views.RenameDialog.txtInvalidName": "The file name cannot contain any of the following characters: ",
"Common.Views.SignDialog.cancelButtonText": "Cancel",
"Common.Views.SignDialog.okButtonText": "Ok",
"Common.Views.SignDialog.textBold": "Bold",
"Common.Views.SignDialog.textCertificate": "Certificate",
"Common.Views.SignDialog.textChange": "Change",
"Common.Views.SignDialog.textInputName": "Input signer name",
"Common.Views.SignDialog.textItalic": "Italic",
"Common.Views.SignDialog.textPurpose": "Purpose for signing this document",
"Common.Views.SignDialog.textSelectImage": "Select Image",
"Common.Views.SignDialog.textSignature": "Signature looks as",
"Common.Views.SignDialog.textTitle": "Sign Document",
"Common.Views.SignDialog.textUseImage": "or click 'Select Image' to use a picture as signature",
"Common.Views.SignDialog.textValid": "Valid from %1 to %2",
"Common.Views.SignDialog.tipFontName": "Font Name",
"Common.Views.SignDialog.tipFontSize": "Font Size",
"Common.Views.SignSettingsDialog.cancelButtonText": "Cancel",
"Common.Views.SignSettingsDialog.okButtonText": "Ok",
"Common.Views.SignSettingsDialog.textAllowComment": "Allow signer to add comment in the signature dialog",
"Common.Views.SignSettingsDialog.textInfo": "Signer Info",
"Common.Views.SignSettingsDialog.textInfoEmail": "E-mail",
"Common.Views.SignSettingsDialog.textInfoName": "Name",
"Common.Views.SignSettingsDialog.textInfoTitle": "Signer Title",
"Common.Views.SignSettingsDialog.textInstructions": "Instructions for Signer",
"Common.Views.SignSettingsDialog.textShowDate": "Show sign date in signature line",
"Common.Views.SignSettingsDialog.textTitle": "Signature Settings",
"Common.Views.SignSettingsDialog.txtEmpty": "This field is required",
"PE.Controllers.LeftMenu.newDocumentTitle": "Unnamed presentation", "PE.Controllers.LeftMenu.newDocumentTitle": "Unnamed presentation",
"PE.Controllers.LeftMenu.requestEditRightsText": "Requesting editing rights...", "PE.Controllers.LeftMenu.requestEditRightsText": "Requesting editing rights...",
"PE.Controllers.LeftMenu.textNoTextFound": "The data you have been searching for could not be found. Please adjust your search options.", "PE.Controllers.LeftMenu.textNoTextFound": "The data you have been searching for could not be found. Please adjust your search options.",
@ -810,6 +853,7 @@
"PE.Views.FileMenu.btnHelpCaption": "Help...", "PE.Views.FileMenu.btnHelpCaption": "Help...",
"PE.Views.FileMenu.btnInfoCaption": "Presentation Info...", "PE.Views.FileMenu.btnInfoCaption": "Presentation Info...",
"PE.Views.FileMenu.btnPrintCaption": "Print", "PE.Views.FileMenu.btnPrintCaption": "Print",
"PE.Views.FileMenu.btnProtectCaption": "Protect",
"PE.Views.FileMenu.btnRecentFilesCaption": "Open Recent...", "PE.Views.FileMenu.btnRecentFilesCaption": "Open Recent...",
"PE.Views.FileMenu.btnRenameCaption": "Rename...", "PE.Views.FileMenu.btnRenameCaption": "Rename...",
"PE.Views.FileMenu.btnReturnCaption": "Back to Presentation", "PE.Views.FileMenu.btnReturnCaption": "Back to Presentation",
@ -831,6 +875,16 @@
"PE.Views.FileMenuPanels.DocumentInfo.txtTitle": "Presentation Title", "PE.Views.FileMenuPanels.DocumentInfo.txtTitle": "Presentation Title",
"PE.Views.FileMenuPanels.DocumentRights.txtBtnAccessRights": "Change access rights", "PE.Views.FileMenuPanels.DocumentRights.txtBtnAccessRights": "Change access rights",
"PE.Views.FileMenuPanels.DocumentRights.txtRights": "Persons who have rights", "PE.Views.FileMenuPanels.DocumentRights.txtRights": "Persons who have rights",
"PE.Views.FileMenuPanels.ProtectDoc.notcriticalErrorTitle": "Warning",
"PE.Views.FileMenuPanels.ProtectDoc.strEncrypt": "With password",
"PE.Views.FileMenuPanels.ProtectDoc.strProtect": "Protect Presentation",
"PE.Views.FileMenuPanels.ProtectDoc.strSignature": "With signature",
"PE.Views.FileMenuPanels.ProtectDoc.txtEdit": "Edit presentation",
"PE.Views.FileMenuPanels.ProtectDoc.txtEditWarning": "Editing will remove the signatures from the presentation.<br>Are you sure you want to continue?",
"PE.Views.FileMenuPanels.ProtectDoc.txtEncrypted": "This presentation has been protected by password",
"PE.Views.FileMenuPanels.ProtectDoc.txtSigned": "Valid signatures has been added to the presentation. The presentation is protected from editing.",
"PE.Views.FileMenuPanels.ProtectDoc.txtSignedInvalid": "Some of the digital signatures in presentation are invalid or could not be verified. The presentation is protected from editing.",
"PE.Views.FileMenuPanels.ProtectDoc.txtView": "View signatures",
"PE.Views.FileMenuPanels.Settings.okButtonText": "Apply", "PE.Views.FileMenuPanels.Settings.okButtonText": "Apply",
"PE.Views.FileMenuPanels.Settings.strAlignGuides": "Turn on alignment guides", "PE.Views.FileMenuPanels.Settings.strAlignGuides": "Turn on alignment guides",
"PE.Views.FileMenuPanels.Settings.strAutoRecover": "Turn on autorecover", "PE.Views.FileMenuPanels.Settings.strAutoRecover": "Turn on autorecover",
@ -945,7 +999,7 @@
"PE.Views.ParagraphSettingsAdvanced.strStrike": "Strikethrough", "PE.Views.ParagraphSettingsAdvanced.strStrike": "Strikethrough",
"PE.Views.ParagraphSettingsAdvanced.strSubscript": "Subscript", "PE.Views.ParagraphSettingsAdvanced.strSubscript": "Subscript",
"PE.Views.ParagraphSettingsAdvanced.strSuperscript": "Superscript", "PE.Views.ParagraphSettingsAdvanced.strSuperscript": "Superscript",
"PE.Views.ParagraphSettingsAdvanced.strTabs": "Tab", "PE.Views.ParagraphSettingsAdvanced.strTabs": "Tabs",
"PE.Views.ParagraphSettingsAdvanced.textAlign": "Alignment", "PE.Views.ParagraphSettingsAdvanced.textAlign": "Alignment",
"PE.Views.ParagraphSettingsAdvanced.textCharacterSpacing": "Character Spacing", "PE.Views.ParagraphSettingsAdvanced.textCharacterSpacing": "Character Spacing",
"PE.Views.ParagraphSettingsAdvanced.textDefault": "Default Tab", "PE.Views.ParagraphSettingsAdvanced.textDefault": "Default Tab",
@ -962,6 +1016,7 @@
"PE.Views.RightMenu.txtImageSettings": "Image settings", "PE.Views.RightMenu.txtImageSettings": "Image settings",
"PE.Views.RightMenu.txtParagraphSettings": "Text settings", "PE.Views.RightMenu.txtParagraphSettings": "Text settings",
"PE.Views.RightMenu.txtShapeSettings": "Shape settings", "PE.Views.RightMenu.txtShapeSettings": "Shape settings",
"PE.Views.RightMenu.txtSignatureSettings": "Signature Settings",
"PE.Views.RightMenu.txtSlideSettings": "Slide settings", "PE.Views.RightMenu.txtSlideSettings": "Slide settings",
"PE.Views.RightMenu.txtTableSettings": "Table settings", "PE.Views.RightMenu.txtTableSettings": "Table settings",
"PE.Views.RightMenu.txtTextArtSettings": "Text Art settings", "PE.Views.RightMenu.txtTextArtSettings": "Text Art settings",
@ -1041,6 +1096,17 @@
"PE.Views.ShapeSettingsAdvanced.textWeightArrows": "Weights & Arrows", "PE.Views.ShapeSettingsAdvanced.textWeightArrows": "Weights & Arrows",
"PE.Views.ShapeSettingsAdvanced.textWidth": "Width", "PE.Views.ShapeSettingsAdvanced.textWidth": "Width",
"PE.Views.ShapeSettingsAdvanced.txtNone": "None", "PE.Views.ShapeSettingsAdvanced.txtNone": "None",
"PE.Views.SignatureSettings.notcriticalErrorTitle": "Warning",
"PE.Views.SignatureSettings.strDelete": "Remove Signature",
"PE.Views.SignatureSettings.strDetails": "Signature Details",
"PE.Views.SignatureSettings.strInvalid": "Invalid signatures",
"PE.Views.SignatureSettings.strSign": "Sign",
"PE.Views.SignatureSettings.strSignature": "Signature",
"PE.Views.SignatureSettings.strValid": "Valid signatures",
"PE.Views.SignatureSettings.txtContinueEditing": "Edit anyway",
"PE.Views.SignatureSettings.txtEditWarning": "Editing will remove the signatures from the presentation.<br>Are you sure you want to continue?",
"PE.Views.SignatureSettings.txtSigned": "Valid signatures has been added to the presentation. The presentation is protected from editing.",
"PE.Views.SignatureSettings.txtSignedInvalid": "Some of the digital signatures in presentation are invalid or could not be verified. The presentation is protected from editing.",
"PE.Views.SlideSettings.strBackground": "Background color", "PE.Views.SlideSettings.strBackground": "Background color",
"PE.Views.SlideSettings.strColor": "Color", "PE.Views.SlideSettings.strColor": "Color",
"PE.Views.SlideSettings.strDelay": "Delay", "PE.Views.SlideSettings.strDelay": "Delay",
@ -1308,13 +1374,14 @@
"PE.Views.Toolbar.textShowPresenterView": "Show presenter view", "PE.Views.Toolbar.textShowPresenterView": "Show presenter view",
"PE.Views.Toolbar.textShowSettings": "Show Settings", "PE.Views.Toolbar.textShowSettings": "Show Settings",
"PE.Views.Toolbar.textStock": "Stock", "PE.Views.Toolbar.textStock": "Stock",
"PE.Views.Toolbar.textStrikeout": "Strikeout", "PE.Views.Toolbar.textStrikeout": "Strikethrough",
"PE.Views.Toolbar.textSubscript": "Subscript", "PE.Views.Toolbar.textSubscript": "Subscript",
"PE.Views.Toolbar.textSuperscript": "Superscript", "PE.Views.Toolbar.textSuperscript": "Superscript",
"PE.Views.Toolbar.textSurface": "Surface", "PE.Views.Toolbar.textSurface": "Surface",
"PE.Views.Toolbar.textTabFile": "File", "PE.Views.Toolbar.textTabFile": "File",
"PE.Views.Toolbar.textTabHome": "Home", "PE.Views.Toolbar.textTabHome": "Home",
"PE.Views.Toolbar.textTabInsert": "Insert", "PE.Views.Toolbar.textTabInsert": "Insert",
"PE.Views.Toolbar.textTabProtect": "Protection",
"PE.Views.Toolbar.textTitleError": "Error", "PE.Views.Toolbar.textTitleError": "Error",
"PE.Views.Toolbar.textUnderline": "Underline", "PE.Views.Toolbar.textUnderline": "Underline",
"PE.Views.Toolbar.textZoom": "Zoom", "PE.Views.Toolbar.textZoom": "Zoom",

View file

@ -112,19 +112,63 @@
"Common.Views.OpenDialog.cancelButtonText": "Annulla", "Common.Views.OpenDialog.cancelButtonText": "Annulla",
"Common.Views.OpenDialog.okButtonText": "OK", "Common.Views.OpenDialog.okButtonText": "OK",
"Common.Views.OpenDialog.txtEncoding": "Codifica", "Common.Views.OpenDialog.txtEncoding": "Codifica",
"Common.Views.OpenDialog.txtIncorrectPwd": "Password errata",
"Common.Views.OpenDialog.txtPassword": "Password", "Common.Views.OpenDialog.txtPassword": "Password",
"Common.Views.OpenDialog.txtTitle": "Seleziona parametri %1", "Common.Views.OpenDialog.txtTitle": "Seleziona parametri %1",
"Common.Views.OpenDialog.txtTitleProtected": "File protetto", "Common.Views.OpenDialog.txtTitleProtected": "File protetto",
"Common.Views.PasswordDialog.cancelButtonText": "Annulla",
"Common.Views.PasswordDialog.okButtonText": "OK",
"Common.Views.PasswordDialog.txtDescription": "É richiesta la password per aprire il documento",
"Common.Views.PasswordDialog.txtIncorrectPwd": "la password di conferma non corrisponde",
"Common.Views.PasswordDialog.txtPassword": "Password",
"Common.Views.PasswordDialog.txtRepeat": "Ripeti password",
"Common.Views.PasswordDialog.txtTitle": "Imposta password",
"Common.Views.PluginDlg.textLoading": "Caricamento", "Common.Views.PluginDlg.textLoading": "Caricamento",
"Common.Views.Plugins.groupCaption": "Componenti Aggiuntivi", "Common.Views.Plugins.groupCaption": "Componenti Aggiuntivi",
"Common.Views.Plugins.strPlugins": "Plugin", "Common.Views.Plugins.strPlugins": "Plugin",
"Common.Views.Plugins.textLoading": "Caricamento", "Common.Views.Plugins.textLoading": "Caricamento",
"Common.Views.Plugins.textStart": "Avvio", "Common.Views.Plugins.textStart": "Avvio",
"Common.Views.Plugins.textStop": "Termina", "Common.Views.Plugins.textStop": "Termina",
"Common.Views.Protection.hintAddPwd": "Crittografa con password",
"Common.Views.Protection.hintPwd": "Modifica o rimuovi password",
"Common.Views.Protection.hintSignature": "Aggiungi firma digitale o riga di firma",
"Common.Views.Protection.txtAddPwd": "Aggiungi password",
"Common.Views.Protection.txtChangePwd": "Modifica password",
"Common.Views.Protection.txtDeletePwd": "Elimina password",
"Common.Views.Protection.txtEncrypt": "Crittografare",
"Common.Views.Protection.txtInvisibleSignature": "Aggiungi firma digitale",
"Common.Views.Protection.txtSignature": "Firma",
"Common.Views.Protection.txtSignatureLine": "Riga della firma",
"Common.Views.RenameDialog.cancelButtonText": "Annulla", "Common.Views.RenameDialog.cancelButtonText": "Annulla",
"Common.Views.RenameDialog.okButtonText": "OK", "Common.Views.RenameDialog.okButtonText": "OK",
"Common.Views.RenameDialog.textName": "Nome file", "Common.Views.RenameDialog.textName": "Nome file",
"Common.Views.RenameDialog.txtInvalidName": "Il nome del file non può contenere nessuno dei seguenti caratteri:", "Common.Views.RenameDialog.txtInvalidName": "Il nome del file non può contenere nessuno dei seguenti caratteri:",
"Common.Views.SignDialog.cancelButtonText": "Annulla",
"Common.Views.SignDialog.okButtonText": "OK",
"Common.Views.SignDialog.textBold": "Grassetto",
"Common.Views.SignDialog.textCertificate": "Certificato",
"Common.Views.SignDialog.textChange": "Cambia",
"Common.Views.SignDialog.textInputName": "Inserisci nome firmatario",
"Common.Views.SignDialog.textItalic": "Corsivo",
"Common.Views.SignDialog.textPurpose": "Motivo della firma del documento",
"Common.Views.SignDialog.textSelectImage": "Seleziona Immagine",
"Common.Views.SignDialog.textSignature": "La firma appare come",
"Common.Views.SignDialog.textTitle": "Firma Documento",
"Common.Views.SignDialog.textUseImage": "oppure clicca 'Scegli immagine' per utilizzare un'immagine come firma",
"Common.Views.SignDialog.textValid": "Valido dal %1 al %2",
"Common.Views.SignDialog.tipFontName": "Nome carattere",
"Common.Views.SignDialog.tipFontSize": "Dimensione carattere",
"Common.Views.SignSettingsDialog.cancelButtonText": "Annulla",
"Common.Views.SignSettingsDialog.okButtonText": "OK",
"Common.Views.SignSettingsDialog.textAllowComment": "Consenti al firmatario di aggiungere commenti nella finestra di firma",
"Common.Views.SignSettingsDialog.textInfo": "Informazioni sul Firmatario",
"Common.Views.SignSettingsDialog.textInfoEmail": "E-mail",
"Common.Views.SignSettingsDialog.textInfoName": "Nome",
"Common.Views.SignSettingsDialog.textInfoTitle": "Titolo del Firmatario",
"Common.Views.SignSettingsDialog.textInstructions": "Istruzioni per i Firmatari",
"Common.Views.SignSettingsDialog.textShowDate": "Mostra la data nella riga di Firma",
"Common.Views.SignSettingsDialog.textTitle": "Impostazioni della Firma",
"Common.Views.SignSettingsDialog.txtEmpty": "Campo obbligatorio",
"PE.Controllers.LeftMenu.newDocumentTitle": "Presentazione senza nome", "PE.Controllers.LeftMenu.newDocumentTitle": "Presentazione senza nome",
"PE.Controllers.LeftMenu.requestEditRightsText": "Richiesta di autorizzazione di modifica...", "PE.Controllers.LeftMenu.requestEditRightsText": "Richiesta di autorizzazione di modifica...",
"PE.Controllers.LeftMenu.textNoTextFound": "I dati da cercare non sono stati trovati. Modifica i parametri di ricerca.", "PE.Controllers.LeftMenu.textNoTextFound": "I dati da cercare non sono stati trovati. Modifica i parametri di ricerca.",
@ -195,7 +239,7 @@
"PE.Controllers.Main.textCloseTip": "Clicca per chiudere il consiglio", "PE.Controllers.Main.textCloseTip": "Clicca per chiudere il consiglio",
"PE.Controllers.Main.textContactUs": "Contatta il reparto vendite.", "PE.Controllers.Main.textContactUs": "Contatta il reparto vendite.",
"PE.Controllers.Main.textLoadingDocument": "Caricamento della presentazione", "PE.Controllers.Main.textLoadingDocument": "Caricamento della presentazione",
"PE.Controllers.Main.textNoLicenseTitle": "Versione open source di ONLYOFFICE", "PE.Controllers.Main.textNoLicenseTitle": "ONLYOFFICE® limite connessione",
"PE.Controllers.Main.textShape": "Forma", "PE.Controllers.Main.textShape": "Forma",
"PE.Controllers.Main.textStrict": "Modalità Rigorosa", "PE.Controllers.Main.textStrict": "Modalità Rigorosa",
"PE.Controllers.Main.textTryUndoRedo": "Le funzioni Annulla/Ripristina sono disabilitate per la Modalità di Co-editing Veloce.<br>Clicca il pulsante 'Modalità Rigorosa' per passare alla Modalità di Co-editing Rigorosa per poter modificare il file senza l'interferenza di altri utenti e inviare le modifiche solamente dopo averle salvate. Puoi passare da una modalità all'altra di co-editing utilizzando le Impostazioni avanzate dell'editor.", "PE.Controllers.Main.textTryUndoRedo": "Le funzioni Annulla/Ripristina sono disabilitate per la Modalità di Co-editing Veloce.<br>Clicca il pulsante 'Modalità Rigorosa' per passare alla Modalità di Co-editing Rigorosa per poter modificare il file senza l'interferenza di altri utenti e inviare le modifiche solamente dopo averle salvate. Puoi passare da una modalità all'altra di co-editing utilizzando le Impostazioni avanzate dell'editor.",
@ -276,7 +320,8 @@
"PE.Controllers.Main.warnBrowserIE9": "L'applicazione è poco compatibile con IE9. Usa IE10 o più recente", "PE.Controllers.Main.warnBrowserIE9": "L'applicazione è poco compatibile con IE9. Usa IE10 o più recente",
"PE.Controllers.Main.warnBrowserZoom": "Le impostazioni correnti di zoom del tuo browser non sono completamente supportate. Per favore, ritorna allo zoom predefinito premendo Ctrl+0.", "PE.Controllers.Main.warnBrowserZoom": "Le impostazioni correnti di zoom del tuo browser non sono completamente supportate. Per favore, ritorna allo zoom predefinito premendo Ctrl+0.",
"PE.Controllers.Main.warnLicenseExp": "La tua licenza è scaduta.<br>Si prega di aggiornare la licenza e ricaricare la pagina.", "PE.Controllers.Main.warnLicenseExp": "La tua licenza è scaduta.<br>Si prega di aggiornare la licenza e ricaricare la pagina.",
"PE.Controllers.Main.warnNoLicense": "Stai utilizzando una versione open source di ONLYOFFICE®. La versione presenta delle limitazioni per le connessioni simultanee al server dei documenti (20 connessioni alla volta).<br>Per poterne avere di più, considera l'acquisto di una licenza commerciale.", "PE.Controllers.Main.warnNoLicense": "Questa versione di ONLYOFFICE® Editors presenta delle limitazioni per le connessioni simultanee al server dei documenti.<br>Se necessiti di avere di più, considera l'acquisto di una licenza commerciale.",
"PE.Controllers.Main.warnNoLicenseUsers": "Questa versione di ONLYOFFICE® Editors presenta delle limitazioni per le connessioni simultanee al server dei documenti.<br>Se necessiti di avere di più, considera l'acquisto di una licenza commerciale.",
"PE.Controllers.Main.warnProcessRightsChange": "Ci stato negato il diritto alla modifica del file.", "PE.Controllers.Main.warnProcessRightsChange": "Ci stato negato il diritto alla modifica del file.",
"PE.Controllers.Statusbar.zoomText": "Zoom {0}%", "PE.Controllers.Statusbar.zoomText": "Zoom {0}%",
"PE.Controllers.Toolbar.confirmAddFontName": "Il carattere che vuoi salvare non è accessibile su questo dispositivo.<br>Lo stile di testo sarà visualizzato usando uno dei caratteri di sistema, il carattere salvato sarà usato quando accessibile.<br>Vuoi continuare?", "PE.Controllers.Toolbar.confirmAddFontName": "Il carattere che vuoi salvare non è accessibile su questo dispositivo.<br>Lo stile di testo sarà visualizzato usando uno dei caratteri di sistema, il carattere salvato sarà usato quando accessibile.<br>Vuoi continuare?",
@ -808,6 +853,7 @@
"PE.Views.FileMenu.btnHelpCaption": "Guida...", "PE.Views.FileMenu.btnHelpCaption": "Guida...",
"PE.Views.FileMenu.btnInfoCaption": "Informazioni presentazione...", "PE.Views.FileMenu.btnInfoCaption": "Informazioni presentazione...",
"PE.Views.FileMenu.btnPrintCaption": "Stampa", "PE.Views.FileMenu.btnPrintCaption": "Stampa",
"PE.Views.FileMenu.btnProtectCaption": "Proteggi",
"PE.Views.FileMenu.btnRecentFilesCaption": "Apri recenti...", "PE.Views.FileMenu.btnRecentFilesCaption": "Apri recenti...",
"PE.Views.FileMenu.btnRenameCaption": "Rinomina...", "PE.Views.FileMenu.btnRenameCaption": "Rinomina...",
"PE.Views.FileMenu.btnReturnCaption": "Torna alla presentazione", "PE.Views.FileMenu.btnReturnCaption": "Torna alla presentazione",
@ -829,6 +875,16 @@
"PE.Views.FileMenuPanels.DocumentInfo.txtTitle": "Titolo presentazione", "PE.Views.FileMenuPanels.DocumentInfo.txtTitle": "Titolo presentazione",
"PE.Views.FileMenuPanels.DocumentRights.txtBtnAccessRights": "Cambia diritti di accesso", "PE.Views.FileMenuPanels.DocumentRights.txtBtnAccessRights": "Cambia diritti di accesso",
"PE.Views.FileMenuPanels.DocumentRights.txtRights": "Persone con diritti", "PE.Views.FileMenuPanels.DocumentRights.txtRights": "Persone con diritti",
"PE.Views.FileMenuPanels.ProtectDoc.notcriticalErrorTitle": "Avviso",
"PE.Views.FileMenuPanels.ProtectDoc.strEncrypt": "con Password",
"PE.Views.FileMenuPanels.ProtectDoc.strProtect": "Proteggi Presentazione",
"PE.Views.FileMenuPanels.ProtectDoc.strSignature": "con Firma",
"PE.Views.FileMenuPanels.ProtectDoc.txtEdit": "Modifica presentazione",
"PE.Views.FileMenuPanels.ProtectDoc.txtEditWarning": "la modifica eliminerà le firme dalla presentazione. <br>Sei sicuro di voler continuare?",
"PE.Views.FileMenuPanels.ProtectDoc.txtEncrypted": "Questa presentazione è protetta con password",
"PE.Views.FileMenuPanels.ProtectDoc.txtSigned": "Le firme valide sono state aggiunte alla presentazione. La presentazione è protetta dalla modifica.",
"PE.Views.FileMenuPanels.ProtectDoc.txtSignedInvalid": "Alcune delle firme digitali in presentazione non sono valide o non possono essere verificate. La presentazione è protetta dalla modifica.",
"PE.Views.FileMenuPanels.ProtectDoc.txtView": "Mostra firme",
"PE.Views.FileMenuPanels.Settings.okButtonText": "Applica", "PE.Views.FileMenuPanels.Settings.okButtonText": "Applica",
"PE.Views.FileMenuPanels.Settings.strAlignGuides": "Turn on alignment guides", "PE.Views.FileMenuPanels.Settings.strAlignGuides": "Turn on alignment guides",
"PE.Views.FileMenuPanels.Settings.strAutoRecover": "Attiva il ripristino automatico", "PE.Views.FileMenuPanels.Settings.strAutoRecover": "Attiva il ripristino automatico",
@ -839,6 +895,7 @@
"PE.Views.FileMenuPanels.Settings.strFast": "Fast", "PE.Views.FileMenuPanels.Settings.strFast": "Fast",
"PE.Views.FileMenuPanels.Settings.strForcesave": "Salva sempre sul server (altrimenti salva sul server alla chiusura del documento)", "PE.Views.FileMenuPanels.Settings.strForcesave": "Salva sempre sul server (altrimenti salva sul server alla chiusura del documento)",
"PE.Views.FileMenuPanels.Settings.strInputMode": "Attiva geroglifici", "PE.Views.FileMenuPanels.Settings.strInputMode": "Attiva geroglifici",
"PE.Views.FileMenuPanels.Settings.strInputSogou": "Attiva l'input Sogou Pinyin",
"PE.Views.FileMenuPanels.Settings.strShowChanges": "Evidenzia modifiche di collaborazione", "PE.Views.FileMenuPanels.Settings.strShowChanges": "Evidenzia modifiche di collaborazione",
"PE.Views.FileMenuPanels.Settings.strSpellCheckMode": "Attiva controllo ortografia", "PE.Views.FileMenuPanels.Settings.strSpellCheckMode": "Attiva controllo ortografia",
"PE.Views.FileMenuPanels.Settings.strStrict": "Strict", "PE.Views.FileMenuPanels.Settings.strStrict": "Strict",
@ -917,6 +974,7 @@
"PE.Views.LeftMenu.tipSupport": "Feedback & Support", "PE.Views.LeftMenu.tipSupport": "Feedback & Support",
"PE.Views.LeftMenu.tipTitles": "Titoli", "PE.Views.LeftMenu.tipTitles": "Titoli",
"PE.Views.LeftMenu.txtDeveloper": "MODALITÀ SVILUPPATORE", "PE.Views.LeftMenu.txtDeveloper": "MODALITÀ SVILUPPATORE",
"PE.Views.LeftMenu.txtTrial": "Modalità di prova",
"PE.Views.ParagraphSettings.strLineHeight": "Interlinea", "PE.Views.ParagraphSettings.strLineHeight": "Interlinea",
"PE.Views.ParagraphSettings.strParagraphSpacing": "Spaziatura del paragrafo", "PE.Views.ParagraphSettings.strParagraphSpacing": "Spaziatura del paragrafo",
"PE.Views.ParagraphSettings.strSpacingAfter": "Dopo", "PE.Views.ParagraphSettings.strSpacingAfter": "Dopo",
@ -958,6 +1016,7 @@
"PE.Views.RightMenu.txtImageSettings": "Impostazioni immagine", "PE.Views.RightMenu.txtImageSettings": "Impostazioni immagine",
"PE.Views.RightMenu.txtParagraphSettings": "Impostazioni testo", "PE.Views.RightMenu.txtParagraphSettings": "Impostazioni testo",
"PE.Views.RightMenu.txtShapeSettings": "Impostazioni forma", "PE.Views.RightMenu.txtShapeSettings": "Impostazioni forma",
"PE.Views.RightMenu.txtSignatureSettings": "Impostazioni della Firma",
"PE.Views.RightMenu.txtSlideSettings": "Impostazioni diapositiva", "PE.Views.RightMenu.txtSlideSettings": "Impostazioni diapositiva",
"PE.Views.RightMenu.txtTableSettings": "Impostazioni tabella", "PE.Views.RightMenu.txtTableSettings": "Impostazioni tabella",
"PE.Views.RightMenu.txtTextArtSettings": "Text Art Settings", "PE.Views.RightMenu.txtTextArtSettings": "Text Art Settings",
@ -1037,6 +1096,17 @@
"PE.Views.ShapeSettingsAdvanced.textWeightArrows": "Spessori e frecce", "PE.Views.ShapeSettingsAdvanced.textWeightArrows": "Spessori e frecce",
"PE.Views.ShapeSettingsAdvanced.textWidth": "Larghezza", "PE.Views.ShapeSettingsAdvanced.textWidth": "Larghezza",
"PE.Views.ShapeSettingsAdvanced.txtNone": "Niente", "PE.Views.ShapeSettingsAdvanced.txtNone": "Niente",
"PE.Views.SignatureSettings.notcriticalErrorTitle": "Avviso",
"PE.Views.SignatureSettings.strDelete": "Rimuovi Firma",
"PE.Views.SignatureSettings.strDetails": "Dettagli firma",
"PE.Views.SignatureSettings.strInvalid": "Firme non valide",
"PE.Views.SignatureSettings.strSign": "Firma",
"PE.Views.SignatureSettings.strSignature": "Firma",
"PE.Views.SignatureSettings.strValid": "Firme valide",
"PE.Views.SignatureSettings.txtContinueEditing": "Modifica comunque",
"PE.Views.SignatureSettings.txtEditWarning": "la modifica eliminerà le firme dalla presentazione. <br>Sei sicuro di voler continuare?",
"PE.Views.SignatureSettings.txtSigned": "Le firme valide sono state aggiunte alla presentazione. La presentazione è protetta dalla modifica.",
"PE.Views.SignatureSettings.txtSignedInvalid": "Alcune delle firme digitali in presentazione non sono valide o non possono essere verificate. La presentazione è protetta dalla modifica.",
"PE.Views.SlideSettings.strBackground": "Colore sfondo", "PE.Views.SlideSettings.strBackground": "Colore sfondo",
"PE.Views.SlideSettings.strColor": "Colore", "PE.Views.SlideSettings.strColor": "Colore",
"PE.Views.SlideSettings.strDelay": "Ritardo", "PE.Views.SlideSettings.strDelay": "Ritardo",
@ -1311,6 +1381,7 @@
"PE.Views.Toolbar.textTabFile": "File", "PE.Views.Toolbar.textTabFile": "File",
"PE.Views.Toolbar.textTabHome": "Home", "PE.Views.Toolbar.textTabHome": "Home",
"PE.Views.Toolbar.textTabInsert": "Inserisci", "PE.Views.Toolbar.textTabInsert": "Inserisci",
"PE.Views.Toolbar.textTabProtect": "Protezione",
"PE.Views.Toolbar.textTitleError": "Errore", "PE.Views.Toolbar.textTitleError": "Errore",
"PE.Views.Toolbar.textUnderline": "Sottolineato", "PE.Views.Toolbar.textUnderline": "Sottolineato",
"PE.Views.Toolbar.textZoom": "Zoom", "PE.Views.Toolbar.textZoom": "Zoom",

View file

@ -116,16 +116,59 @@
"Common.Views.OpenDialog.txtPassword": "Пароль", "Common.Views.OpenDialog.txtPassword": "Пароль",
"Common.Views.OpenDialog.txtTitle": "Выбрать параметры %1", "Common.Views.OpenDialog.txtTitle": "Выбрать параметры %1",
"Common.Views.OpenDialog.txtTitleProtected": "Защищенный файл", "Common.Views.OpenDialog.txtTitleProtected": "Защищенный файл",
"Common.Views.PasswordDialog.cancelButtonText": "Отмена",
"Common.Views.PasswordDialog.okButtonText": "OK",
"Common.Views.PasswordDialog.txtDescription": "Для открытия этого документа требуется пароль",
"Common.Views.PasswordDialog.txtIncorrectPwd": "Пароль и его подтверждение не совпадают",
"Common.Views.PasswordDialog.txtPassword": "Пароль",
"Common.Views.PasswordDialog.txtRepeat": "Повторить пароль",
"Common.Views.PasswordDialog.txtTitle": "Установка пароля",
"Common.Views.PluginDlg.textLoading": "Загрузка", "Common.Views.PluginDlg.textLoading": "Загрузка",
"Common.Views.Plugins.groupCaption": "Плагины", "Common.Views.Plugins.groupCaption": "Плагины",
"Common.Views.Plugins.strPlugins": "Плагины", "Common.Views.Plugins.strPlugins": "Плагины",
"Common.Views.Plugins.textLoading": "Загрузка", "Common.Views.Plugins.textLoading": "Загрузка",
"Common.Views.Plugins.textStart": "Запустить", "Common.Views.Plugins.textStart": "Запустить",
"Common.Views.Plugins.textStop": "Остановить", "Common.Views.Plugins.textStop": "Остановить",
"Common.Views.Protection.hintAddPwd": "Зашифровать с помощью пароля",
"Common.Views.Protection.hintPwd": "Изменить или удалить пароль",
"Common.Views.Protection.hintSignature": "Добавить цифровую подпись или строку подписи",
"Common.Views.Protection.txtAddPwd": "Добавить пароль",
"Common.Views.Protection.txtChangePwd": "Изменить пароль",
"Common.Views.Protection.txtDeletePwd": "Удалить пароль",
"Common.Views.Protection.txtEncrypt": "Шифровать",
"Common.Views.Protection.txtInvisibleSignature": "Добавить цифровую подпись",
"Common.Views.Protection.txtSignature": "Подпись",
"Common.Views.Protection.txtSignatureLine": "Строка подписи",
"Common.Views.RenameDialog.cancelButtonText": "Отмена", "Common.Views.RenameDialog.cancelButtonText": "Отмена",
"Common.Views.RenameDialog.okButtonText": "Ok", "Common.Views.RenameDialog.okButtonText": "Ok",
"Common.Views.RenameDialog.textName": "Имя файла", "Common.Views.RenameDialog.textName": "Имя файла",
"Common.Views.RenameDialog.txtInvalidName": "Имя файла не должно содержать следующих символов: ", "Common.Views.RenameDialog.txtInvalidName": "Имя файла не должно содержать следующих символов: ",
"Common.Views.SignDialog.cancelButtonText": "Отмена",
"Common.Views.SignDialog.okButtonText": "Ok",
"Common.Views.SignDialog.textBold": "Жирный",
"Common.Views.SignDialog.textCertificate": "Сертификат",
"Common.Views.SignDialog.textChange": "Изменить",
"Common.Views.SignDialog.textInputName": "Введите имя подписывающего",
"Common.Views.SignDialog.textItalic": "Курсив",
"Common.Views.SignDialog.textPurpose": "Цель подписания документа",
"Common.Views.SignDialog.textSelectImage": "Выбрать изображение",
"Common.Views.SignDialog.textSignature": "Как выглядит подпись:",
"Common.Views.SignDialog.textTitle": "Подписание документа",
"Common.Views.SignDialog.textUseImage": "или нажмите 'Выбрать изображение', чтобы использовать изображение в качестве подписи",
"Common.Views.SignDialog.textValid": "Действителен с %1 по %2",
"Common.Views.SignDialog.tipFontName": "Шрифт",
"Common.Views.SignDialog.tipFontSize": "Размер шрифта",
"Common.Views.SignSettingsDialog.cancelButtonText": "Отмена",
"Common.Views.SignSettingsDialog.okButtonText": "Ok",
"Common.Views.SignSettingsDialog.textAllowComment": "Разрешить подписывающему добавлять примечания в окне подписи",
"Common.Views.SignSettingsDialog.textInfo": "Сведения о подписывающем",
"Common.Views.SignSettingsDialog.textInfoEmail": "Адрес электронной почты",
"Common.Views.SignSettingsDialog.textInfoName": "Имя",
"Common.Views.SignSettingsDialog.textInfoTitle": "Должность подписывающего",
"Common.Views.SignSettingsDialog.textInstructions": "Инструкции для подписывающего",
"Common.Views.SignSettingsDialog.textShowDate": "Показывать дату подписи в строке подписи",
"Common.Views.SignSettingsDialog.textTitle": "Настройка подписи",
"Common.Views.SignSettingsDialog.txtEmpty": "Это поле необходимо заполнить",
"PE.Controllers.LeftMenu.newDocumentTitle": "Презентация без имени", "PE.Controllers.LeftMenu.newDocumentTitle": "Презентация без имени",
"PE.Controllers.LeftMenu.requestEditRightsText": "Запрос прав на редактирование...", "PE.Controllers.LeftMenu.requestEditRightsText": "Запрос прав на редактирование...",
"PE.Controllers.LeftMenu.textNoTextFound": "Искомые данные не найдены. Пожалуйста, измените параметры поиска.", "PE.Controllers.LeftMenu.textNoTextFound": "Искомые данные не найдены. Пожалуйста, измените параметры поиска.",
@ -278,6 +321,7 @@
"PE.Controllers.Main.warnBrowserZoom": "Текущее значение масштаба страницы в браузере поддерживается не полностью. Вернитесь к масштабу по умолчанию, нажав Ctrl+0", "PE.Controllers.Main.warnBrowserZoom": "Текущее значение масштаба страницы в браузере поддерживается не полностью. Вернитесь к масштабу по умолчанию, нажав Ctrl+0",
"PE.Controllers.Main.warnLicenseExp": "Истек срок действия лицензии.<br>Обновите лицензию, а затем обновите страницу.", "PE.Controllers.Main.warnLicenseExp": "Истек срок действия лицензии.<br>Обновите лицензию, а затем обновите страницу.",
"PE.Controllers.Main.warnNoLicense": "Эта версия редакторов ONLYOFFICE имеет некоторые ограничения по количеству одновременных подключений к серверу документов.<br>Если требуется больше, рассмотрите вопрос об обновлении текущей лицензии или покупке коммерческой лицензии.", "PE.Controllers.Main.warnNoLicense": "Эта версия редакторов ONLYOFFICE имеет некоторые ограничения по количеству одновременных подключений к серверу документов.<br>Если требуется больше, рассмотрите вопрос об обновлении текущей лицензии или покупке коммерческой лицензии.",
"PE.Controllers.Main.warnNoLicenseUsers": "Эта версия редакторов ONLYOFFICE имеет некоторые ограничения по числу одновременно работающих пользователей.<br>Если требуется больше, рассмотрите вопрос об обновлении текущей лицензии или покупке коммерческой лицензии.",
"PE.Controllers.Main.warnProcessRightsChange": "Вам было отказано в праве на редактирование этого файла.", "PE.Controllers.Main.warnProcessRightsChange": "Вам было отказано в праве на редактирование этого файла.",
"PE.Controllers.Statusbar.zoomText": "Масштаб {0}%", "PE.Controllers.Statusbar.zoomText": "Масштаб {0}%",
"PE.Controllers.Toolbar.confirmAddFontName": "Шрифт, который вы хотите сохранить, недоступен на этом устройстве.<br>Стиль текста будет отображаться с помощью одного из системных шрифтов. Сохраненный шрифт будет использоваться, когда он станет доступен.<br>Вы хотите продолжить?", "PE.Controllers.Toolbar.confirmAddFontName": "Шрифт, который вы хотите сохранить, недоступен на этом устройстве.<br>Стиль текста будет отображаться с помощью одного из системных шрифтов. Сохраненный шрифт будет использоваться, когда он станет доступен.<br>Вы хотите продолжить?",
@ -809,6 +853,7 @@
"PE.Views.FileMenu.btnHelpCaption": "Справка...", "PE.Views.FileMenu.btnHelpCaption": "Справка...",
"PE.Views.FileMenu.btnInfoCaption": "Сведения о презентации...", "PE.Views.FileMenu.btnInfoCaption": "Сведения о презентации...",
"PE.Views.FileMenu.btnPrintCaption": "Печать", "PE.Views.FileMenu.btnPrintCaption": "Печать",
"PE.Views.FileMenu.btnProtectCaption": "Защитить",
"PE.Views.FileMenu.btnRecentFilesCaption": "Открыть последние...", "PE.Views.FileMenu.btnRecentFilesCaption": "Открыть последние...",
"PE.Views.FileMenu.btnRenameCaption": "Переименовать...", "PE.Views.FileMenu.btnRenameCaption": "Переименовать...",
"PE.Views.FileMenu.btnReturnCaption": "Вернуться к презентации", "PE.Views.FileMenu.btnReturnCaption": "Вернуться к презентации",
@ -830,6 +875,16 @@
"PE.Views.FileMenuPanels.DocumentInfo.txtTitle": "Название презентации", "PE.Views.FileMenuPanels.DocumentInfo.txtTitle": "Название презентации",
"PE.Views.FileMenuPanels.DocumentRights.txtBtnAccessRights": "Изменить права доступа", "PE.Views.FileMenuPanels.DocumentRights.txtBtnAccessRights": "Изменить права доступа",
"PE.Views.FileMenuPanels.DocumentRights.txtRights": "Люди, имеющие права", "PE.Views.FileMenuPanels.DocumentRights.txtRights": "Люди, имеющие права",
"PE.Views.FileMenuPanels.ProtectDoc.notcriticalErrorTitle": "Внимание",
"PE.Views.FileMenuPanels.ProtectDoc.strEncrypt": "C помощью пароля",
"PE.Views.FileMenuPanels.ProtectDoc.strProtect": "Защитить презентацию",
"PE.Views.FileMenuPanels.ProtectDoc.strSignature": "С помощью подписи",
"PE.Views.FileMenuPanels.ProtectDoc.txtEdit": "Редактировать презентацию",
"PE.Views.FileMenuPanels.ProtectDoc.txtEditWarning": "При редактировании из презентации будут удалены подписи.<br>Вы действительно хотите продолжить?",
"PE.Views.FileMenuPanels.ProtectDoc.txtEncrypted": "Эта презентация защищена паролем",
"PE.Views.FileMenuPanels.ProtectDoc.txtSigned": "В презентацию добавлены действительные подписи. Презентация защищена от редактирования.",
"PE.Views.FileMenuPanels.ProtectDoc.txtSignedInvalid": "Некоторые из цифровых подписей в презентации недействительны или их нельзя проверить. Презентация защищена от редактирования.",
"PE.Views.FileMenuPanels.ProtectDoc.txtView": "Просмотр подписей",
"PE.Views.FileMenuPanels.Settings.okButtonText": "Применить", "PE.Views.FileMenuPanels.Settings.okButtonText": "Применить",
"PE.Views.FileMenuPanels.Settings.strAlignGuides": "Включить направляющие выравнивания", "PE.Views.FileMenuPanels.Settings.strAlignGuides": "Включить направляющие выравнивания",
"PE.Views.FileMenuPanels.Settings.strAutoRecover": "Включить автовосстановление", "PE.Views.FileMenuPanels.Settings.strAutoRecover": "Включить автовосстановление",
@ -961,6 +1016,7 @@
"PE.Views.RightMenu.txtImageSettings": "Параметры изображения", "PE.Views.RightMenu.txtImageSettings": "Параметры изображения",
"PE.Views.RightMenu.txtParagraphSettings": "Параметры текста", "PE.Views.RightMenu.txtParagraphSettings": "Параметры текста",
"PE.Views.RightMenu.txtShapeSettings": "Параметры фигуры", "PE.Views.RightMenu.txtShapeSettings": "Параметры фигуры",
"PE.Views.RightMenu.txtSignatureSettings": "Настройка подписи",
"PE.Views.RightMenu.txtSlideSettings": "Параметры слайда", "PE.Views.RightMenu.txtSlideSettings": "Параметры слайда",
"PE.Views.RightMenu.txtTableSettings": "Параметры таблицы", "PE.Views.RightMenu.txtTableSettings": "Параметры таблицы",
"PE.Views.RightMenu.txtTextArtSettings": "Параметры объектов Text Art", "PE.Views.RightMenu.txtTextArtSettings": "Параметры объектов Text Art",
@ -1040,6 +1096,17 @@
"PE.Views.ShapeSettingsAdvanced.textWeightArrows": "Линии и стрелки", "PE.Views.ShapeSettingsAdvanced.textWeightArrows": "Линии и стрелки",
"PE.Views.ShapeSettingsAdvanced.textWidth": "Ширина", "PE.Views.ShapeSettingsAdvanced.textWidth": "Ширина",
"PE.Views.ShapeSettingsAdvanced.txtNone": "Нет", "PE.Views.ShapeSettingsAdvanced.txtNone": "Нет",
"PE.Views.SignatureSettings.notcriticalErrorTitle": "Внимание",
"PE.Views.SignatureSettings.strDelete": "Удалить подпись",
"PE.Views.SignatureSettings.strDetails": "Состав подписи",
"PE.Views.SignatureSettings.strInvalid": "Недействительные подписи",
"PE.Views.SignatureSettings.strSign": "Подписать",
"PE.Views.SignatureSettings.strSignature": "Подпись",
"PE.Views.SignatureSettings.strValid": "Действительные подписи",
"PE.Views.SignatureSettings.txtContinueEditing": "Все равно редактировать",
"PE.Views.SignatureSettings.txtEditWarning": "При редактировании из презентации будут удалены подписи.<br>Вы действительно хотите продолжить?",
"PE.Views.SignatureSettings.txtSigned": "В презентацию добавлены действительные подписи. Презентация защищена от редактирования.",
"PE.Views.SignatureSettings.txtSignedInvalid": "Некоторые из цифровых подписей в презентации недействительны или их нельзя проверить. Презентация защищена от редактирования.",
"PE.Views.SlideSettings.strBackground": "Цвет фона", "PE.Views.SlideSettings.strBackground": "Цвет фона",
"PE.Views.SlideSettings.strColor": "Цвет", "PE.Views.SlideSettings.strColor": "Цвет",
"PE.Views.SlideSettings.strDelay": "Задержка", "PE.Views.SlideSettings.strDelay": "Задержка",
@ -1314,6 +1381,7 @@
"PE.Views.Toolbar.textTabFile": "Файл", "PE.Views.Toolbar.textTabFile": "Файл",
"PE.Views.Toolbar.textTabHome": "Главная", "PE.Views.Toolbar.textTabHome": "Главная",
"PE.Views.Toolbar.textTabInsert": "Вставка", "PE.Views.Toolbar.textTabInsert": "Вставка",
"PE.Views.Toolbar.textTabProtect": "Защита",
"PE.Views.Toolbar.textTitleError": "Ошибка", "PE.Views.Toolbar.textTitleError": "Ошибка",
"PE.Views.Toolbar.textUnderline": "Подчеркнутый", "PE.Views.Toolbar.textUnderline": "Подчеркнутый",
"PE.Views.Toolbar.textZoom": "Масштаб", "PE.Views.Toolbar.textZoom": "Масштаб",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 34 KiB

View file

@ -451,6 +451,25 @@
font: 12px tahoma, arial, verdana, sans-serif; font: 12px tahoma, arial, verdana, sans-serif;
} }
} }
#panel-protect {
label, span {
font-size: 12px;
}
padding: 30px 30px;
.header {
font-weight: bold;
margin: 30px 0 10px;
}
table {
td {
padding: 5px 0;
}
}
}
} }
} }

View file

@ -26,6 +26,9 @@
/*menuTextArt*/ /*menuTextArt*/
.toolbar-btn-icon(btn-menu-textart, 57, @toolbar-icon-size); .toolbar-btn-icon(btn-menu-textart, 57, @toolbar-icon-size);
/**menuSignature*/
.toolbar-btn-icon(btn-menu-signature, 77, @toolbar-icon-size);
} }
} }
@ -201,4 +204,56 @@ button:active:not(.disabled) .btn-change-shape {background-position: -56px -
.gradient-radial-center { .gradient-radial-center {
background-position: -100px -150px; background-position: -100px -150px;
}
#signature-requested-sign,
#signature-valid-sign,
#signature-invalid-sign {
height: 100%;
overflow: hidden;
margin: 0 -10px 0 -15px;
.item {
display: block;
border: none;
width: 100%;
.box-shadow(none);
margin: 0;
&:hover,
&.over {
background-color: @secondary;
}
}
.signature-item {
padding: 5px 2px 5px 15px;
text-overflow: ellipsis;
min-height: 25px;
.name {
width: 100%;
white-space: nowrap;
overflow: hidden;
cursor: pointer;
max-width: 160px;
text-overflow: ellipsis;
}
.caret {
width: 23px;
height: 14px;
border: 0;
background-position: -43px -150px;
margin: 8px 15px;
display: inline-block;
position: absolute;
right: 0;
&.nomargin {
margin-top: 0;
margin-bottom: 0;
}
}
}
} }

View file

@ -159,6 +159,7 @@ require([
'Common.Controllers.Chat', 'Common.Controllers.Chat',
'Common.Controllers.Comments', 'Common.Controllers.Comments',
'Common.Controllers.Plugins' 'Common.Controllers.Plugins'
,'Common.Controllers.Protection'
] ]
}); });
@ -180,12 +181,14 @@ require([
'spreadsheeteditor/main/app/view/ChartSettings', 'spreadsheeteditor/main/app/view/ChartSettings',
'spreadsheeteditor/main/app/view/ShapeSettings', 'spreadsheeteditor/main/app/view/ShapeSettings',
'spreadsheeteditor/main/app/view/TextArtSettings', 'spreadsheeteditor/main/app/view/TextArtSettings',
'spreadsheeteditor/main/app/view/SignatureSettings',
'common/main/lib/util/utils', 'common/main/lib/util/utils',
'common/main/lib/util/LocalStorage', 'common/main/lib/util/LocalStorage',
'common/main/lib/controller/Fonts', 'common/main/lib/controller/Fonts',
'common/main/lib/controller/Comments', 'common/main/lib/controller/Comments',
'common/main/lib/controller/Chat', 'common/main/lib/controller/Chat',
'common/main/lib/controller/Plugins' 'common/main/lib/controller/Plugins'
,'common/main/lib/controller/Protection'
], function() { ], function() {
app.start(); app.start();
}); });

View file

@ -81,6 +81,7 @@ define([
me.namedrange_locked = false; me.namedrange_locked = false;
me._currentMathObj = undefined; me._currentMathObj = undefined;
me._currentParaObjDisabled = false; me._currentParaObjDisabled = false;
me._isDisabled = false;
/** coauthoring begin **/ /** coauthoring begin **/
this.wrapEvents = { this.wrapEvents = {
@ -189,10 +190,16 @@ define([
view.mnuChartEdit.on('click', _.bind(me.onChartEdit, me)); view.mnuChartEdit.on('click', _.bind(me.onChartEdit, me));
view.mnuImgAdvanced.on('click', _.bind(me.onImgAdvanced, me)); view.mnuImgAdvanced.on('click', _.bind(me.onImgAdvanced, me));
view.textInShapeMenu.on('render:after', _.bind(me.onTextInShapeAfterRender, me)); view.textInShapeMenu.on('render:after', _.bind(me.onTextInShapeAfterRender, me));
view.menuSignatureEditSign.on('click', _.bind(me.onSignatureClick, me));
view.menuSignatureEditSetup.on('click', _.bind(me.onSignatureClick, me));
} else { } else {
view.menuViewCopy.on('click', _.bind(me.onCopyPaste, me)); view.menuViewCopy.on('click', _.bind(me.onCopyPaste, me));
view.menuViewUndo.on('click', _.bind(me.onUndo, me)); view.menuViewUndo.on('click', _.bind(me.onUndo, me));
view.menuViewAddComment.on('click', _.bind(me.onAddComment, me)); view.menuViewAddComment.on('click', _.bind(me.onAddComment, me));
view.menuSignatureViewSign.on('click', _.bind(me.onSignatureClick, me));
view.menuSignatureDetails.on('click', _.bind(me.onSignatureClick, me));
view.menuSignatureViewSetup.on('click', _.bind(me.onSignatureClick, me));
view.menuSignatureRemove.on('click', _.bind(me.onSignatureClick, me));
} }
var documentHolderEl = view.cmpEl; var documentHolderEl = view.cmpEl;
@ -1222,14 +1229,14 @@ define([
showObjectMenu: function(event){ showObjectMenu: function(event){
if (this.api && !this.mouse.isLeftButtonDown && !this.rangeSelectionMode){ 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){ onSelectionChanged: function(info){
if (!this.mouse.isLeftButtonDown && !this.rangeSelectionMode && if (!this.mouse.isLeftButtonDown && !this.rangeSelectionMode &&
this.currentMenu && this.currentMenu.isVisible()){ 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);
} }
}, },
@ -1267,7 +1274,8 @@ define([
if (!showMenu && !documentHolder.imgMenu.isVisible()) return; if (!showMenu && !documentHolder.imgMenu.isVisible()) return;
isimagemenu = isshapemenu = ischartmenu = false; isimagemenu = isshapemenu = ischartmenu = false;
var has_chartprops = false; var has_chartprops = false,
signGuid;
var selectedObjects = this.api.asc_getGraphicObjectProps(); var selectedObjects = this.api.asc_getGraphicObjectProps();
for (var i = 0; i < selectedObjects.length; i++) { for (var i = 0; i < selectedObjects.length; i++) {
if (selectedObjects[i].asc_getObjectType() == Asc.c_oAscTypeSelectElement.Image) { if (selectedObjects[i].asc_getObjectType() == Asc.c_oAscTypeSelectElement.Image) {
@ -1289,6 +1297,8 @@ define([
documentHolder.mnuImgAdvanced.imageInfo = elValue; documentHolder.mnuImgAdvanced.imageInfo = elValue;
isimagemenu = true; isimagemenu = true;
} }
if (this.permissions.canProtect)
signGuid = elValue.asc_getSignatureId();
} }
} }
@ -1302,6 +1312,16 @@ define([
documentHolder.pmiImgPaste.setDisabled(isObjLocked); documentHolder.pmiImgPaste.setDisabled(isObjLocked);
documentHolder.mnuImgAdvanced.setVisible(isimagemenu && !isshapemenu && !ischartmenu); documentHolder.mnuImgAdvanced.setVisible(isimagemenu && !isshapemenu && !ischartmenu);
documentHolder.mnuImgAdvanced.setDisabled(isObjLocked); documentHolder.mnuImgAdvanced.setDisabled(isObjLocked);
var isInSign = !!signGuid;
documentHolder.menuSignatureEditSign.setVisible(isInSign);
documentHolder.menuSignatureEditSetup.setVisible(isInSign);
documentHolder.menuEditSignSeparator.setVisible(isInSign);
if (isInSign) {
documentHolder.menuSignatureEditSign.cmpEl.attr('data-value', signGuid); // sign
documentHolder.menuSignatureEditSetup.cmpEl.attr('data-value', signGuid); // edit signature settings
}
if (showMenu) this.showPopupMenu(documentHolder.imgMenu, {}, event); if (showMenu) this.showPopupMenu(documentHolder.imgMenu, {}, event);
documentHolder.mnuShapeSeparator.setVisible(documentHolder.mnuShapeAdvanced.isVisible() || documentHolder.mnuChartEdit.isVisible() || documentHolder.mnuImgAdvanced.isVisible()); documentHolder.mnuShapeSeparator.setVisible(documentHolder.mnuShapeAdvanced.isVisible() || documentHolder.mnuChartEdit.isVisible() || documentHolder.mnuImgAdvanced.isVisible());
} else if (istextshapemenu || istextchartmenu) { } else if (istextshapemenu || istextchartmenu) {
@ -1490,17 +1510,50 @@ define([
isTableLocked = cellinfo.asc_getLockedTable()===true, isTableLocked = cellinfo.asc_getLockedTable()===true,
commentsController = this.getApplication().getController('Common.Controllers.Comments'), commentsController = this.getApplication().getController('Common.Controllers.Comments'),
iscellmenu = (seltype==Asc.c_oAscSelectionType.RangeCells) && !this.permissions.isEditMailMerge && !this.permissions.isEditDiagram, iscellmenu = (seltype==Asc.c_oAscSelectionType.RangeCells) && !this.permissions.isEditMailMerge && !this.permissions.isEditDiagram,
iscelledit = this.api.isCellEdited; iscelledit = this.api.isCellEdited,
isimagemenu = (seltype==Asc.c_oAscSelectionType.RangeImage) && !this.permissions.isEditMailMerge && !this.permissions.isEditDiagram,
signGuid;
if (!documentHolder.viewModeMenu)
documentHolder.createDelayedElementsViewer();
if (!documentHolder.viewModeMenu) if (!documentHolder.viewModeMenu)
documentHolder.createDelayedElementsViewer(); documentHolder.createDelayedElementsViewer();
if (!showMenu && !documentHolder.viewModeMenu.isVisible()) return; if (!showMenu && !documentHolder.viewModeMenu.isVisible()) return;
documentHolder.menuViewUndo.setVisible(this.permissions.canCoAuthoring && this.permissions.canComments); if (isimagemenu && this.permissions.canProtect) {
documentHolder.menuViewUndo.setDisabled(!this.api.asc_getCanUndo()); var selectedObjects = this.api.asc_getGraphicObjectProps();
documentHolder.menuViewCopySeparator.setVisible(iscellmenu && !iscelledit && this.permissions.canCoAuthoring && this.permissions.canComments); for (var i = 0; i < selectedObjects.length; i++) {
documentHolder.menuViewAddComment.setVisible(iscellmenu && !iscelledit && this.permissions.canCoAuthoring && this.permissions.canComments); if (selectedObjects[i].asc_getObjectType() == Asc.c_oAscTypeSelectElement.Image) {
signGuid = selectedObjects[i].asc_getObjectValue().asc_getSignatureId();
}
}
}
var signProps = (signGuid) ? this.api.asc_getSignatureSetup(signGuid) : null,
isInSign = !!signProps && this._canProtect,
canComment = iscellmenu && !iscelledit && this.permissions.canCoAuthoring && this.permissions.canComments && !this._isDisabled;
documentHolder.menuViewUndo.setVisible(this.permissions.canCoAuthoring && this.permissions.canComments && !this._isDisabled);
documentHolder.menuViewUndo.setDisabled(!this.api.asc_getCanUndo() && !this._isDisabled);
documentHolder.menuViewCopySeparator.setVisible(isInSign);
var isRequested = (signProps) ? signProps.asc_getRequested() : false;
documentHolder.menuSignatureViewSign.setVisible(isInSign && isRequested);
documentHolder.menuSignatureDetails.setVisible(isInSign && !isRequested);
documentHolder.menuSignatureViewSetup.setVisible(isInSign);
documentHolder.menuSignatureRemove.setVisible(isInSign && !isRequested);
documentHolder.menuViewSignSeparator.setVisible(canComment);
if (isInSign) {
documentHolder.menuSignatureViewSign.cmpEl.attr('data-value', signGuid); // sign
documentHolder.menuSignatureDetails.cmpEl.attr('data-value', signProps.asc_getId()); // view certificate
documentHolder.menuSignatureViewSetup.cmpEl.attr('data-value', signGuid); // view signature settings
documentHolder.menuSignatureRemove.cmpEl.attr('data-value', signGuid);
}
documentHolder.menuViewAddComment.setVisible(canComment);
documentHolder.setMenuItemCommentCaptionMode(documentHolder.menuViewAddComment, cellinfo.asc_getComments().length < 1, this.permissions.canEditComments); documentHolder.setMenuItemCommentCaptionMode(documentHolder.menuViewAddComment, cellinfo.asc_getComments().length < 1, this.permissions.canEditComments);
commentsController && commentsController.blockPopover(true); commentsController && commentsController.blockPopover(true);
documentHolder.menuViewAddComment.setDisabled(isCellLocked || isTableLocked); documentHolder.menuViewAddComment.setDisabled(isCellLocked || isTableLocked);
@ -2437,6 +2490,29 @@ define([
_conf && view.paraBulletsPicker.selectRecord(_conf.rec, true); _conf && view.paraBulletsPicker.selectRecord(_conf.rec, true);
}, },
onSignatureClick: function(item) {
var datavalue = item.cmpEl.attr('data-value');
switch (item.value) {
case 0:
Common.NotificationCenter.trigger('protect:sign', datavalue); //guid
break;
case 1:
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
break;
case 3:
this.api.asc_RemoveSignature(datavalue); //guid
break;
}
},
SetDisabled: function(state, canProtect) {
this._isDisabled = state;
this._canProtect = canProtect;
},
guestText : 'Guest', guestText : 'Guest',
textCtrlClick : 'Press CTRL and click link', textCtrlClick : 'Press CTRL and click link',
txtHeight : 'Height', txtHeight : 'Height',

View file

@ -51,7 +51,8 @@ define([
'hide': _.bind(this.onHideChat, this) 'hide': _.bind(this.onHideChat, this)
}, },
'Common.Views.Plugins': { 'Common.Views.Plugins': {
'plugin:open': _.bind(this.onPluginOpen, this) 'plugin:open': _.bind(this.onPluginOpen, this),
'hide': _.bind(this.onHidePlugins, this)
}, },
'Common.Views.Header': { 'Common.Views.Header': {
'click:users': _.bind(this.clickStatusbarUsers, this) 'click:users': _.bind(this.clickStatusbarUsers, this)
@ -342,6 +343,10 @@ define([
$(this.leftMenu.btnChat.el).blur(); $(this.leftMenu.btnChat.el).blur();
Common.NotificationCenter.trigger('layout:changed', 'leftmenu'); Common.NotificationCenter.trigger('layout:changed', 'leftmenu');
}, },
onHidePlugins: function() {
Common.NotificationCenter.trigger('layout:changed', 'leftmenu');
},
/** coauthoring end **/ /** coauthoring end **/
onQuerySearch: function(d, w, opts) { onQuerySearch: function(d, w, opts) {
@ -751,11 +756,11 @@ define([
}, },
onPluginOpen: function(panel, type, action) { onPluginOpen: function(panel, type, action) {
if ( type == 'onboard' ) { if (type == 'onboard') {
if ( action == 'open' ) { if (action == 'open') {
this.leftMenu.close(); this.leftMenu.close();
this.leftMenu.panelPlugins.show(); this.leftMenu.panelPlugins.show();
this.leftMenu.onBtnMenuClick({pressed:true, options: {action: 'plugins'}}); this.leftMenu.onBtnMenuClick({pressed: true, options: {action: 'plugins'}});
this.leftMenu._state.pluginIsRunning = true; this.leftMenu._state.pluginIsRunning = true;
} else { } else {
this.leftMenu._state.pluginIsRunning = false; this.leftMenu._state.pluginIsRunning = false;

View file

@ -631,7 +631,8 @@ define([
pluginsController.setApi(me.api); pluginsController.setApi(me.api);
me.requestPlugins('../../../../plugins.json'); me.requestPlugins('../../../../plugins.json');
me.api.asc_registerCallback('asc_onPluginsInit', _.bind(me.updatePluginsList, me)); me.api.asc_registerCallback('asc_onPluginsInit', _.bind(me.updatePluginsList, me));
} me.api.asc_registerCallback('asc_onPluginsReset', _.bind(me.resetPluginsList, me));
}
leftMenuView.disableMenu('all',false); leftMenuView.disableMenu('all',false);
@ -706,16 +707,13 @@ define([
if (me.needToUpdateVersion) if (me.needToUpdateVersion)
toolbarController.onApiCoAuthoringDisconnect(); toolbarController.onApiCoAuthoringDisconnect();
if (me.appOptions.canBrandingExt) Common.NotificationCenter.trigger('document:ready', 'main');
Common.NotificationCenter.trigger('document:ready', 'main');
me.applyLicense(); me.applyLicense();
} }
}, 50); }, 50);
} else { } else {
documentHolderView.createDelayedElementsViewer(); documentHolderView.createDelayedElementsViewer();
if (me.appOptions.canBrandingExt) Common.NotificationCenter.trigger('document:ready', 'main');
Common.NotificationCenter.trigger('document:ready', 'main');
} }
if (me.appOptions.canAnalytics && false) if (me.appOptions.canAnalytics && false)
@ -836,6 +834,7 @@ define([
this.appOptions.canChat = this.appOptions.canLicense && !this.appOptions.isOffline && !((typeof (this.editorConfig.customization) == 'object') && this.editorConfig.customization.chat===false); this.appOptions.canChat = this.appOptions.canLicense && !this.appOptions.isOffline && !((typeof (this.editorConfig.customization) == 'object') && this.editorConfig.customization.chat===false);
this.appOptions.canRename = !!this.permissions.rename; this.appOptions.canRename = !!this.permissions.rename;
this.appOptions.trialMode = params.asc_getLicenseMode(); this.appOptions.trialMode = params.asc_getLicenseMode();
this.appOptions.canProtect = this.appOptions.isEdit && this.appOptions.isDesktopApp && this.api.asc_isSignaturesSupport();
this.appOptions.canBranding = (licType === Asc.c_oLicenseResult.Success) && (typeof this.editorConfig.customization == 'object'); this.appOptions.canBranding = (licType === Asc.c_oLicenseResult.Success) && (typeof this.editorConfig.customization == 'object');
if (this.appOptions.canBranding) if (this.appOptions.canBranding)
@ -954,6 +953,9 @@ define([
rightmenuController && rightmenuController.setApi(me.api); rightmenuController && rightmenuController.setApi(me.api);
if (me.appOptions.isDesktopApp && me.appOptions.isOffline)
application.getController('Common.Controllers.Protection').setMode(me.appOptions).setConfig({config: me.editorConfig}, me.api);
if (statusbarController) { if (statusbarController) {
statusbarController.getView('Statusbar').changeViewMode(true); statusbarController.getView('Statusbar').changeViewMode(true);
} }
@ -1960,15 +1962,27 @@ define([
baseUrl : item.baseUrl, baseUrl : item.baseUrl,
variations: variationsArr, variations: variationsArr,
currentVariation: 0, currentVariation: 0,
visible: pluginVisible visible: pluginVisible,
groupName: (item.group) ? item.group.name : '',
groupRank: (item.group) ? item.group.rank : 0
})); }));
}); });
if (uiCustomize!==false) // from ui customizer in editor config or desktop event if (uiCustomize!==false) // from ui customizer in editor config or desktop event
this.UICustomizePlugins = arrUI; this.UICustomizePlugins = arrUI;
if (!uiCustomize) { if ( !uiCustomize && pluginStore) {
if (pluginStore) pluginStore.add(arr); arr = pluginStore.models.concat(arr);
arr.sort(function(a, b){
var rank_a = a.get('groupRank'),
rank_b = b.get('groupRank');
if (rank_a < rank_b)
return (rank_a==0) ? 1 : -1;
if (rank_a > rank_b)
return (rank_b==0) ? -1 : 1;
return 0;
});
pluginStore.reset(arr);
this.appOptions.canPlugins = !pluginStore.isEmpty(); this.appOptions.canPlugins = !pluginStore.isEmpty();
} }
} else if (!uiCustomize){ } else if (!uiCustomize){
@ -1979,7 +1993,11 @@ define([
} }
if (!uiCustomize) this.getApplication().getController('LeftMenu').enablePlugins(); if (!uiCustomize) this.getApplication().getController('LeftMenu').enablePlugins();
}, },
resetPluginsList: function() {
this.getApplication().getCollection('Common.Collections.Plugins').reset();
},
leavePageText: 'You have unsaved changes in this document. Click \'Stay on this Page\' then \'Save\' to save them. Click \'Leave this Page\' to discard all the unsaved changes.', leavePageText: 'You have unsaved changes in this document. Click \'Stay on this Page\' then \'Save\' to save them. Click \'Leave this Page\' to discard all the unsaved changes.',
criticalErrorTitle: 'Error', criticalErrorTitle: 'Error',
notcriticalErrorTitle: 'Warning', notcriticalErrorTitle: 'Warning',

View file

@ -85,10 +85,12 @@ 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.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.Chart] = {panelId: "id-chart-settings", panel: rightMenu.chartSettings, btn: rightMenu.btnChart, hidden: 1, locked: false};
this._settings[Common.Utils.documentSettingsType.Table] = {panelId: "id-table-settings", panel: rightMenu.tableSettings, btn: rightMenu.btnTable, hidden: 1, locked: false}; this._settings[Common.Utils.documentSettingsType.Table] = {panelId: "id-table-settings", panel: rightMenu.tableSettings, btn: rightMenu.btnTable, hidden: 1, locked: false};
this._settings[Common.Utils.documentSettingsType.Signature] = {panelId: "id-signature-settings", panel: rightMenu.signatureSettings, btn: rightMenu.btnSignature, hidden: 1, props: {}, locked: false};
}, },
setApi: function(api) { setApi: function(api) {
this.api = api; this.api = api;
this.api.asc_registerCallback('asc_onUpdateSignatures', _.bind(this.onApiUpdateSignatures, this));
this.api.asc_registerCallback('asc_onCoAuthoringDisconnect',_.bind(this.onCoAuthoringDisconnect, this)); this.api.asc_registerCallback('asc_onCoAuthoringDisconnect',_.bind(this.onCoAuthoringDisconnect, this));
Common.NotificationCenter.on('api:disconnect', _.bind(this.onCoAuthoringDisconnect, this)); Common.NotificationCenter.on('api:disconnect', _.bind(this.onCoAuthoringDisconnect, this));
Common.NotificationCenter.on('cells:range', _.bind(this.onCellsRange, this)); Common.NotificationCenter.on('cells:range', _.bind(this.onCellsRange, this));
@ -103,7 +105,7 @@ define([
var panel = this._settings[type].panel; var panel = this._settings[type].panel;
var props = this._settings[type].props; var props = this._settings[type].props;
if (props && panel) if (props && panel)
panel.ChangeSettings.call(panel, props); panel.ChangeSettings.call(panel, (type==Common.Utils.documentSettingsType.Signature) ? undefined : props);
} }
Common.NotificationCenter.trigger('layout:changed', 'rightmenu'); Common.NotificationCenter.trigger('layout:changed', 'rightmenu');
}, },
@ -121,7 +123,8 @@ define([
SelectedObjects = this.api.asc_getGraphicObjectProps(); SelectedObjects = this.api.asc_getGraphicObjectProps();
} }
if (SelectedObjects.length<=0 && !formatTableInfo && !sparkLineInfo && !this.rightmenu.minimizedMode) { if (SelectedObjects.length<=0 && !formatTableInfo && !sparkLineInfo && !this.rightmenu.minimizedMode &&
this.rightmenu.GetActivePane() !== 'id-signature-settings') {
this.rightmenu.clearSelection(); this.rightmenu.clearSelection();
this._openRightMenu = true; this._openRightMenu = true;
} }
@ -138,11 +141,13 @@ define([
return; return;
for (var i=0; i<this._settings.length; ++i) { for (var i=0; i<this._settings.length; ++i) {
if (i==Common.Utils.documentSettingsType.Signature) continue;
if (this._settings[i]) { if (this._settings[i]) {
this._settings[i].hidden = 1; this._settings[i].hidden = 1;
this._settings[i].locked = false; this._settings[i].locked = false;
} }
} }
this._settings[Common.Utils.documentSettingsType.Signature].locked = false;
for (i=0; i<SelectedObjects.length; ++i) for (i=0; i<SelectedObjects.length; ++i)
{ {
@ -169,6 +174,9 @@ define([
this._settings[settingsType].props = value; this._settings[settingsType].props = value;
this._settings[settingsType].hidden = 0; this._settings[settingsType].hidden = 0;
this._settings[settingsType].locked = value.asc_getLocked(); this._settings[settingsType].locked = value.asc_getLocked();
if (!this._settings[Common.Utils.documentSettingsType.Signature].locked) // lock Signature, если хотя бы один объект locked
this._settings[Common.Utils.documentSettingsType.Signature].locked = value.asc_getLocked();
} }
if (formatTableInfo) { if (formatTableInfo) {
@ -190,7 +198,7 @@ define([
activePane = this.rightmenu.GetActivePane(); activePane = this.rightmenu.GetActivePane();
for (i=0; i<this._settings.length; ++i) { for (i=0; i<this._settings.length; ++i) {
var pnl = this._settings[i]; var pnl = this._settings[i];
if (pnl===undefined) continue; if (pnl===undefined || pnl.btn===undefined || pnl.panel===undefined) continue;
if ( pnl.hidden ) { if ( pnl.hidden ) {
if ( !pnl.btn.isDisabled() ) if ( !pnl.btn.isDisabled() )
@ -200,7 +208,7 @@ define([
} else { } else {
if ( pnl.btn.isDisabled() ) if ( pnl.btn.isDisabled() )
pnl.btn.setDisabled(false); pnl.btn.setDisabled(false);
lastactive = i; if (i!=Common.Utils.documentSettingsType.Signature) lastactive = i;
if ( pnl.needShow ) { if ( pnl.needShow ) {
pnl.needShow = false; pnl.needShow = false;
priorityactive = i; priorityactive = i;
@ -222,7 +230,10 @@ define([
if (active !== undefined) { if (active !== undefined) {
this.rightmenu.SetActivePane(active, this._openRightMenu); this.rightmenu.SetActivePane(active, this._openRightMenu);
this._settings[active].panel.ChangeSettings.call(this._settings[active].panel, this._settings[active].props); if (active!=Common.Utils.documentSettingsType.Signature)
this._settings[active].panel.ChangeSettings.call(this._settings[active].panel, this._settings[active].props);
else
this._settings[active].panel.ChangeSettings.call(this._settings[active].panel);
this._openRightMenu = false; this._openRightMenu = false;
} }
} }
@ -314,7 +325,18 @@ define([
} }
}, },
SetDisabled: function(disabled) { onApiUpdateSignatures: function(valid, requested){
if (!this.rightmenu.signatureSettings) return;
var disabled = (!valid || valid.length<1) && (!requested || requested.length<1),
type = Common.Utils.documentSettingsType.Signature;
this._settings[type].hidden = disabled ? 1 : 0;
this._settings[type].btn.setDisabled(disabled);
this._settings[type].panel.setLocked(this._settings[type].locked);
},
SetDisabled: function(disabled, allowSignature) {
this.setMode({isEdit: !disabled});
if (this.rightmenu) { if (this.rightmenu) {
this.rightmenu.paragraphSettings.disableControls(disabled); this.rightmenu.paragraphSettings.disableControls(disabled);
this.rightmenu.shapeSettings.disableControls(disabled); this.rightmenu.shapeSettings.disableControls(disabled);
@ -322,6 +344,10 @@ define([
this.rightmenu.chartSettings.disableControls(disabled); this.rightmenu.chartSettings.disableControls(disabled);
this.rightmenu.tableSettings.disableControls(disabled); this.rightmenu.tableSettings.disableControls(disabled);
if (!allowSignature && this.rightmenu.signatureSettings) {
this.rightmenu.btnSignature.setDisabled(disabled);
}
if (disabled) { if (disabled) {
this.rightmenu.btnText.setDisabled(disabled); this.rightmenu.btnText.setDisabled(disabled);
this.rightmenu.btnTable.setDisabled(disabled); this.rightmenu.btnTable.setDisabled(disabled);

View file

@ -138,7 +138,11 @@ define([
}, },
onApiDisconnect: function() { onApiDisconnect: function() {
this.statusbar.setMode({isDisconnected: true}); this.SetDisabled(true);
},
SetDisabled: function(state) {
this.statusbar.setMode({isDisconnected: state});
this.statusbar.update(); this.statusbar.update();
}, },

View file

@ -120,6 +120,9 @@ define([
bold: undefined, bold: undefined,
italic: undefined, italic: undefined,
underline: undefined, underline: undefined,
strikeout: undefined,
subscript: undefined,
superscript: undefined,
wrap: undefined, wrap: undefined,
merge: undefined, merge: undefined,
angle: undefined, angle: undefined,
@ -247,6 +250,9 @@ define([
toolbar.btnBold.on('click', _.bind(this.onBold, this)); toolbar.btnBold.on('click', _.bind(this.onBold, this));
toolbar.btnItalic.on('click', _.bind(this.onItalic, this)); toolbar.btnItalic.on('click', _.bind(this.onItalic, this));
toolbar.btnUnderline.on('click', _.bind(this.onUnderline, this)); toolbar.btnUnderline.on('click', _.bind(this.onUnderline, this));
toolbar.btnStrikeout.on('click', _.bind(this.onStrikeout, this));
toolbar.btnSubscript.on('click', _.bind(this.onSubscript, this));
toolbar.btnSubscript.menu.on('item:click', _.bind(this.onSubscriptMenu, this));
toolbar.btnTextColor.on('click', _.bind(this.onTextColor, this)); toolbar.btnTextColor.on('click', _.bind(this.onTextColor, this));
toolbar.btnBackColor.on('click', _.bind(this.onBackColor, this)); toolbar.btnBackColor.on('click', _.bind(this.onBackColor, this));
toolbar.mnuTextColorPicker.on('select', _.bind(this.onTextColorSelect, this)); toolbar.mnuTextColorPicker.on('select', _.bind(this.onTextColorSelect, this));
@ -463,6 +469,51 @@ define([
Common.component.Analytics.trackEvent('ToolBar', 'Underline'); Common.component.Analytics.trackEvent('ToolBar', 'Underline');
}, },
onStrikeout: function(btn, e) {
this._state.strikeout = undefined;
if (this.api)
this.api.asc_setCellStrikeout(btn.pressed);
Common.NotificationCenter.trigger('edit:complete', this.toolbar, {restorefocus:true});
Common.component.Analytics.trackEvent('ToolBar', 'Strikeout');
},
onSubscriptMenu: function(menu, item) {
var btnSubscript = this.toolbar.btnSubscript,
iconEl = $('.icon', btnSubscript.cmpEl);
if (item.value == 'sub') {
this._state.subscript = undefined;
this.api.asc_setCellSubscript(item.checked);
} else {
this._state.superscript = undefined;
this.api.asc_setCellSuperscript(item.checked);
}
if (item.checked) {
iconEl.removeClass(btnSubscript.options.icls);
btnSubscript.options.icls = item.options.icls;
iconEl.addClass(btnSubscript.options.icls);
}
Common.NotificationCenter.trigger('edit:complete', this.toolbar);
Common.component.Analytics.trackEvent('ToolBar', (item.value == 'sub') ? 'Subscript' : 'Superscript');
},
onSubscript: function(btn, e) {
var subscript = (btn.options.icls == 'btn-subscript');
if (subscript) {
this._state.subscript = undefined;
this.api.asc_setCellSubscript(btn.pressed);
} else {
this._state.superscript = undefined;
this.api.asc_setCellSuperscript(btn.pressed);
}
Common.NotificationCenter.trigger('edit:complete', this.toolbar);
Common.component.Analytics.trackEvent('ToolBar', (subscript) ? 'Subscript' : 'Superscript');
},
onTextColor: function() { onTextColor: function() {
this.toolbar.mnuTextColorPicker.trigger('select', this.toolbar.mnuTextColorPicker, this.toolbar.mnuTextColorPicker.currentColor, true); this.toolbar.mnuTextColorPicker.trigger('select', this.toolbar.mnuTextColorPicker, this.toolbar.mnuTextColorPicker.currentColor, true);
}, },
@ -1648,7 +1699,7 @@ define([
toolbar.lockToolbar(SSE.enumLock.editFormula, is_formula, toolbar.lockToolbar(SSE.enumLock.editFormula, is_formula,
{ array: [toolbar.cmbFontName, toolbar.cmbFontSize, toolbar.btnIncFontSize, toolbar.btnDecFontSize, { array: [toolbar.cmbFontName, toolbar.cmbFontSize, toolbar.btnIncFontSize, toolbar.btnDecFontSize,
toolbar.btnBold, toolbar.btnItalic, toolbar.btnUnderline, toolbar.btnTextColor]}); toolbar.btnBold, toolbar.btnItalic, toolbar.btnUnderline, toolbar.btnStrikeout, toolbar.btnSubscript, toolbar.btnTextColor]});
toolbar.lockToolbar(SSE.enumLock.editText, is_text, {array:[toolbar.btnInsertFormula]}); toolbar.lockToolbar(SSE.enumLock.editText, is_text, {array:[toolbar.btnInsertFormula]});
} }
this._state.coauthdisable = undefined; this._state.coauthdisable = undefined;
@ -1706,6 +1757,37 @@ define([
toolbar.btnUnderline.toggle(val === true, true); toolbar.btnUnderline.toggle(val === true, true);
this._state.underline = val; this._state.underline = val;
} }
val = fontobj.asc_getStrikeout();
if (this._state.strikeout !== val) {
toolbar.btnStrikeout.toggle(val === true, true);
this._state.strikeout = val;
}
var subsc = fontobj.asc_getSubscript(),
supersc = fontobj.asc_getSuperscript();
if (this._state.subscript !== subsc || this._state.superscript !== supersc) {
var index = (subsc) ? 0 : (supersc ? 1 : -1),
btnSubscript = toolbar.btnSubscript;
btnSubscript.toggle(index>-1, true);
if (index < 0) {
this._clearChecked(btnSubscript.menu);
} else {
btnSubscript.menu.items[index].setChecked(true);
if (btnSubscript.rendered) {
var iconEl = $('.icon', btnSubscript.cmpEl);
if (iconEl) {
iconEl.removeClass(btnSubscript.options.icls);
btnSubscript.options.icls = btnSubscript.menu.items[index].options.icls;
iconEl.addClass(btnSubscript.options.icls);
}
}
}
this._state.subscript = subsc;
this._state.superscript = supersc;
}
} }
/* read font size */ /* read font size */
@ -1816,6 +1898,37 @@ define([
toolbar.btnUnderline.toggle(val === true, true); toolbar.btnUnderline.toggle(val === true, true);
this._state.underline = val; this._state.underline = val;
} }
val = fontobj.asc_getStrikeout();
if (this._state.strikeout !== val) {
toolbar.btnStrikeout.toggle(val === true, true);
this._state.strikeout = val;
}
var subsc = fontobj.asc_getSubscript(),
supersc = fontobj.asc_getSuperscript();
if (this._state.subscript !== subsc || this._state.superscript !== supersc) {
var index = (subsc) ? 0 : (supersc ? 1 : -1),
btnSubscript = toolbar.btnSubscript;
btnSubscript.toggle(index>-1, true);
if (index < 0) {
this._clearChecked(btnSubscript.menu);
} else {
btnSubscript.menu.items[index].setChecked(true);
if (btnSubscript.rendered) {
var iconEl = $('.icon', btnSubscript.cmpEl);
if (iconEl) {
iconEl.removeClass(btnSubscript.options.icls);
btnSubscript.options.icls = btnSubscript.menu.items[index].options.icls;
iconEl.addClass(btnSubscript.options.icls);
}
}
}
this._state.subscript = subsc;
this._state.superscript = supersc;
}
} }
/* read font color */ /* read font color */
@ -2868,7 +2981,10 @@ define([
this._state.namedrange_locked = (state == Asc.c_oAscDefinedNameReason.LockDefNameManager); 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'); var mask = $('.toolbar-mask');
if (disable && mask.length>0 || !disable && mask.length==0) return; if (disable && mask.length>0 || !disable && mask.length==0) return;
@ -2913,8 +3029,18 @@ define([
Common.Utils.asyncCall(function () { Common.Utils.asyncCall(function () {
me.toolbar.setMode(config); me.toolbar.setMode(config);
if ( config.isEdit ) if ( config.isEdit ) {
me.toolbar.setApi(me.api); me.toolbar.setApi(me.api);
if ( !config.isEditDiagram && !config.isEditMailMerge ) {
if (config.isDesktopApp && config.isOffline) {
var tab = {action: 'protect', caption: me.toolbar.textTabProtect};
var $panel = me.getApplication().getController('Common.Controllers.Protection').createToolbarPanel();
if ( $panel )
me.toolbar.addTab(tab, $panel, 3);
}
}
}
}); });
}, },

View file

@ -8,6 +8,7 @@
<li id="fm-btn-save-desktop" class="fm-btn" /> <li id="fm-btn-save-desktop" class="fm-btn" />
<li id="fm-btn-print" class="fm-btn" /> <li id="fm-btn-print" class="fm-btn" />
<li id="fm-btn-rename" class="fm-btn" /> <li id="fm-btn-rename" class="fm-btn" />
<li id="fm-btn-protect" class="fm-btn" />
<li class="devider" /> <li class="devider" />
<li id="fm-btn-recent" class="fm-btn" /> <li id="fm-btn-recent" class="fm-btn" />
<li id="fm-btn-create" class="fm-btn" /> <li id="fm-btn-create" class="fm-btn" />
@ -29,4 +30,5 @@
<div id="panel-rights" class="content-box" /> <div id="panel-rights" class="content-box" />
<div id="panel-settings" class="content-box" /> <div id="panel-settings" class="content-box" />
<div id="panel-help" class="content-box" /> <div id="panel-help" class="content-box" />
<div id="panel-protect" class="content-box" />
</div> </div>

View file

@ -12,6 +12,8 @@
</div> </div>
<div id="id-textart-settings" class="settings-panel"> <div id="id-textart-settings" class="settings-panel">
</div> </div>
<div id="id-signature-settings" class="settings-panel">
</div>
</div> </div>
<div class="tool-menu-btns"> <div class="tool-menu-btns">
<div class="ct-btn-category arrow-left" /> <div class="ct-btn-category arrow-left" />
@ -21,5 +23,6 @@
<button id="id-right-menu-chart" class="btn btn-category arrow-left" content-target="id-chart-settings"><i class="icon img-toolbarmenu btn-menu-chart">&nbsp;</i></button> <button id="id-right-menu-chart" class="btn btn-category arrow-left" content-target="id-chart-settings"><i class="icon img-toolbarmenu btn-menu-chart">&nbsp;</i></button>
<button id="id-right-menu-text" class="btn btn-category arrow-left" content-target="id-paragraph-settings"><i class="icon img-toolbarmenu btn-menu-text">&nbsp;</i></button> <button id="id-right-menu-text" class="btn btn-category arrow-left" content-target="id-paragraph-settings"><i class="icon img-toolbarmenu btn-menu-text">&nbsp;</i></button>
<button id="id-right-menu-textart" class="btn btn-category arrow-left" content-target="id-textart-settings"><i class="icon img-toolbarmenu btn-menu-textart">&nbsp;</i></button> <button id="id-right-menu-textart" class="btn btn-category arrow-left" content-target="id-textart-settings"><i class="icon img-toolbarmenu btn-menu-textart">&nbsp;</i></button>
<button id="id-right-menu-signature" class="btn btn-category arrow-left hidden" content-target="id-signature-settings"><i class="icon img-toolbarmenu btn-menu-signature">&nbsp;</i></button>
</div> </div>
</div> </div>

View file

@ -0,0 +1,41 @@
<table cols="2">
<tr>
<td class="padding-large">
<label style="font-size: 18px;"><%= scope.strSignature %></label>
</td>
</tr>
<tr>
<td class="padding-large">
<div id="signature-invisible-sign" style="width:100%;"></div>
</td>
</tr>
<tr class="requested">
<td class="padding-small">
<label class="header"><%= scope.strRequested %></label>
</td>
</tr>
<tr class="requested">
<td class="padding-large">
<div id="signature-requested-sign"></div>
</td>
</tr>
<tr class="valid">
<td class="padding-small">
<label class="header"><%= scope.strValid %></label>
</td>
</tr>
<tr class="valid">
<td class="padding-large">
<div id="signature-valid-sign"></div>
</td>
</tr>
<tr class="invalid">
<td class="padding-small">
<label class="header" style="color:#bb3d3d;"><%= scope.strInvalid %></label>
</td>
</tr>
<tr class="invalid">
<td><div id="signature-invalid-sign"></div></td>
</tr>
<tr class="finish-cell"></tr>
</table>

View file

@ -56,6 +56,8 @@
<span class="btn-slot" id="slot-btn-bold"></span> <span class="btn-slot" id="slot-btn-bold"></span>
<span class="btn-slot" id="slot-btn-italic"></span> <span class="btn-slot" id="slot-btn-italic"></span>
<span class="btn-slot" id="slot-btn-underline"></span> <span class="btn-slot" id="slot-btn-underline"></span>
<span class="btn-slot" id="slot-btn-strikeout"></span>
<span class="btn-slot split" id="slot-btn-subscript"></span>
<span class="btn-slot split" id="slot-btn-fontcolor"></span> <span class="btn-slot split" id="slot-btn-fontcolor"></span>
<span class="btn-slot split" id="slot-btn-fillparag"></span> <span class="btn-slot split" id="slot-btn-fillparag"></span>
<span class="btn-slot split" id="slot-btn-borders"></span> <span class="btn-slot split" id="slot-btn-borders"></span>

View file

@ -107,11 +107,22 @@ define([
caption: me.txtAddComment caption: me.txtAddComment
}); });
me.menuSignatureViewSign = new Common.UI.MenuItem({caption: this.strSign, value: 0 });
me.menuSignatureDetails = new Common.UI.MenuItem({caption: this.strDetails, value: 1 });
me.menuSignatureViewSetup = new Common.UI.MenuItem({caption: this.strSetup, value: 2 });
me.menuSignatureRemove = new Common.UI.MenuItem({caption: this.strDelete, value: 3 });
me.menuViewSignSeparator = new Common.UI.MenuItem({caption: '--' });
this.viewModeMenu = new Common.UI.Menu({ this.viewModeMenu = new Common.UI.Menu({
items: [ items: [
me.menuViewCopy, me.menuViewCopy,
me.menuViewUndo, me.menuViewUndo,
me.menuViewCopySeparator, me.menuViewCopySeparator,
me.menuSignatureViewSign,
me.menuSignatureDetails,
me.menuSignatureViewSetup,
me.menuSignatureRemove,
me.menuViewSignSeparator,
me.menuViewAddComment me.menuViewAddComment
] ]
}); });
@ -474,12 +485,19 @@ define([
value : 'paste' value : 'paste'
}); });
me.menuSignatureEditSign = new Common.UI.MenuItem({caption: this.strSign, value: 0 });
me.menuSignatureEditSetup = new Common.UI.MenuItem({caption: this.strSetup, value: 2 });
me.menuEditSignSeparator = new Common.UI.MenuItem({ caption: '--' });
this.imgMenu = new Common.UI.Menu({ this.imgMenu = new Common.UI.Menu({
items: [ items: [
me.pmiImgCut, me.pmiImgCut,
me.pmiImgCopy, me.pmiImgCopy,
me.pmiImgPaste, me.pmiImgPaste,
{caption: '--'}, {caption: '--'},
me.menuSignatureEditSign,
me.menuSignatureEditSetup,
me.menuEditSignSeparator,
{ {
caption : this.textArrangeFront, caption : this.textArrangeFront,
iconCls : 'mnu-arrange-front', iconCls : 'mnu-arrange-front',
@ -788,7 +806,11 @@ define([
advancedImgText: 'Image Advanced Settings', advancedImgText: 'Image Advanced Settings',
textNone: 'None', textNone: 'None',
bulletsText: 'Bullets and Numbering', bulletsText: 'Bullets and Numbering',
textUndo: 'Undo' textUndo: 'Undo',
strSign: 'Sign',
strDetails: 'Signature Details',
strSetup: 'Signature Setup',
strDelete: 'Remove Signature'
}, SSE.Views.DocumentHolder || {})); }, SSE.Views.DocumentHolder || {}));
}); });

View file

@ -116,6 +116,13 @@ define([
canFocused: false canFocused: false
}); });
this.miProtect = new Common.UI.MenuItem({
el : $('#fm-btn-protect',this.el),
action : 'protect',
caption : this.btnProtectCaption,
canFocused: false
});
this.miRecent = new Common.UI.MenuItem({ this.miRecent = new Common.UI.MenuItem({
el : $('#fm-btn-recent',this.el), el : $('#fm-btn-recent',this.el),
action : 'recent', action : 'recent',
@ -158,6 +165,7 @@ define([
this.miSaveAs, this.miSaveAs,
this.miPrint, this.miPrint,
this.miRename, this.miRename,
this.miProtect,
this.miRecent, this.miRecent,
this.miNew, this.miNew,
new Common.UI.MenuItem({ new Common.UI.MenuItem({
@ -199,10 +207,12 @@ define([
show: function(panel) { show: function(panel) {
if (this.isVisible() && panel===undefined) return; if (this.isVisible() && panel===undefined) return;
var defPanel = (this.mode.canDownload && (!this.mode.isDesktopApp || !this.mode.isOffline)) ? 'saveas' : 'info';
if (!panel) if (!panel)
panel = this.active || ((this.mode.canDownload && (!this.mode.isDesktopApp || !this.mode.isOffline)) ? 'saveas' : 'info'); panel = this.active || defPanel;
this.$el.show(); this.$el.show();
this.selectMenu(panel); this.selectMenu(panel, defPanel);
this.api.asc_enableKeyEvents(false); this.api.asc_enableKeyEvents(false);
this.fireEvent('menu:show', [this]); this.fireEvent('menu:show', [this]);
@ -217,7 +227,8 @@ define([
applyMode: function() { applyMode: function() {
this.miPrint[this.mode.canPrint?'show':'hide'](); this.miPrint[this.mode.canPrint?'show':'hide']();
this.miRename[(this.mode.canRename && !this.mode.isDesktopApp) ?'show':'hide'](); this.miRename[(this.mode.canRename && !this.mode.isDesktopApp) ?'show':'hide']();
this.miRename.$el.find('+.devider')[!this.mode.isDisconnected?'show':'hide'](); this.miProtect[(this.mode.isEdit && this.mode.isDesktopApp && this.mode.isOffline) ?'show':'hide']();
this.miProtect.$el.find('+.devider')[!this.mode.isDisconnected?'show':'hide']();
this.miRecent[this.mode.canOpenRecent?'show':'hide'](); this.miRecent[this.mode.canOpenRecent?'show':'hide']();
this.miNew[this.mode.canCreateNew?'show':'hide'](); this.miNew[this.mode.canCreateNew?'show':'hide']();
this.miNew.$el.find('+.devider')[this.mode.canCreateNew?'show':'hide'](); this.miNew.$el.find('+.devider')[this.mode.canCreateNew?'show':'hide']();
@ -255,6 +266,11 @@ define([
} }
} }
if (this.mode.isEdit && this.mode.isDesktopApp && this.mode.isOffline) {
this.panels['protect'] = (new SSE.Views.FileMenuPanels.ProtectDoc({menu:this})).render();
this.panels['protect'].setMode(this.mode);
}
this.panels['help'].setLangConfig(this.mode.lang); this.panels['help'].setLangConfig(this.mode.lang);
}, },
@ -276,6 +292,7 @@ define([
setApi: function(api) { setApi: function(api) {
this.api = api; this.api = api;
if (this.panels['opts']) this.panels['opts'].setApi(api); if (this.panels['opts']) this.panels['opts'].setApi(api);
if (this.panels['protect']) this.panels['protect'].setApi(api);
this.api.asc_registerCallback('asc_onDocumentName', _.bind(this.onDocumentName, this)); this.api.asc_registerCallback('asc_onDocumentName', _.bind(this.onDocumentName, this));
}, },
@ -283,10 +300,14 @@ define([
this.document = data.doc; this.document = data.doc;
}, },
selectMenu: function(menu) { selectMenu: function(menu, defMenu) {
if ( menu ) { if ( menu ) {
var item = this._getMenuItem(menu), var item = this._getMenuItem(menu),
panel = this.panels[menu]; panel = this.panels[menu];
if ( item.isDisabled() ) {
item = this._getMenuItem(defMenu);
panel = this.panels[defMenu];
}
if ( item && panel ) { if ( item && panel ) {
$('.fm-btn',this.el).removeClass('active'); $('.fm-btn',this.el).removeClass('active');
item.$el.addClass('active'); item.$el.addClass('active');
@ -333,6 +354,7 @@ define([
btnSettingsCaption : 'Advanced Settings...', btnSettingsCaption : 'Advanced Settings...',
btnSaveAsCaption : 'Save as', btnSaveAsCaption : 'Save as',
btnRenameCaption : 'Rename...', btnRenameCaption : 'Rename...',
btnCloseMenuCaption : 'Close Menu' btnCloseMenuCaption : 'Close Menu',
btnProtectCaption: 'Protect'
}, SSE.Views.FileMenu || {})); }, SSE.Views.FileMenu || {}));
}); });

View file

@ -1333,4 +1333,174 @@ define([
} }
} }
}); });
SSE.Views.FileMenuPanels.ProtectDoc = Common.UI.BaseView.extend(_.extend({
el: '#panel-protect',
menu: undefined,
template: _.template([
'<label id="id-fms-lbl-protect-header" style="font-size: 18px;"><%= scope.strProtect %></label>',
'<div id="id-fms-password">',
'<label class="header"><%= scope.strEncrypt %></label>',
'<div id="fms-btn-add-pwd" style="width:190px;"></div>',
'<table id="id-fms-view-pwd" cols="2" width="300">',
'<tr>',
'<td colspan="2"><span><%= scope.txtEncrypted %></span></td>',
'</tr>',
'<tr>',
'<td><div id="fms-btn-change-pwd" style="width:190px;"></div></td>',
'<td align="right"><div id="fms-btn-delete-pwd" style="width:190px; margin-left:20px;"></div></td>',
'</tr>',
'</table>',
'</div>',
'<div id="id-fms-signature">',
'<label class="header"><%= scope.strSignature %></label>',
'<div id="fms-btn-invisible-sign" style="width:190px; margin-bottom: 20px;"></div>',
'<div id="id-fms-signature-view"></div>',
'</div>'
].join('')),
initialize: function(options) {
Common.UI.BaseView.prototype.initialize.call(this,arguments);
this.menu = options.menu;
var me = this;
this.templateSignature = _.template([
'<table cols="2" width="300" class="<% if (!hasRequested && !hasSigned) { %>hidden<% } %>"">',
'<tr>',
'<td colspan="2"><span><%= tipText %></span></td>',
'</tr>',
'<tr>',
'<td><label class="link signature-view-link">' + me.txtView + '</label></td>',
'<td align="right"><label class="link signature-edit-link <% if (!hasSigned) { %>hidden<% } %>">' + me.txtEdit + '</label></td>',
'</tr>',
'</table>'
].join(''));
},
render: function() {
$(this.el).html(this.template({scope: this}));
var protection = SSE.getController('Common.Controllers.Protection').getView();
this.btnAddPwd = protection.getButton('add-password');
this.btnAddPwd.render(this.$el.find('#fms-btn-add-pwd'));
this.btnAddPwd.on('click', _.bind(this.closeMenu, this));
this.btnChangePwd = protection.getButton('change-password');
this.btnChangePwd.render(this.$el.find('#fms-btn-change-pwd'));
this.btnChangePwd.on('click', _.bind(this.closeMenu, this));
this.btnDeletePwd = protection.getButton('del-password');
this.btnDeletePwd.render(this.$el.find('#fms-btn-delete-pwd'));
this.btnDeletePwd.on('click', _.bind(this.closeMenu, this));
this.cntPassword = $('#id-fms-view-pwd');
this.btnAddInvisibleSign = protection.getButton('signature');
this.btnAddInvisibleSign.render(this.$el.find('#fms-btn-invisible-sign'));
this.btnAddInvisibleSign.on('click', _.bind(this.closeMenu, this));
this.cntSignature = $('#id-fms-signature');
this.cntSignatureView = $('#id-fms-signature-view');
if (_.isUndefined(this.scroller)) {
this.scroller = new Common.UI.Scroller({
el: $(this.el),
suppressScrollX: true
});
}
this.$el.on('click', '.signature-edit-link', _.bind(this.onEdit, this));
this.$el.on('click', '.signature-view-link', _.bind(this.onView, this));
return this;
},
show: function() {
Common.UI.BaseView.prototype.show.call(this,arguments);
this.updateSignatures();
this.updateEncrypt();
},
setMode: function(mode) {
this.mode = mode;
this.cntSignature.toggleClass('hidden', !this.mode.canProtect);
},
setApi: function(o) {
this.api = o;
return this;
},
closeMenu: function() {
this.menu && this.menu.hide();
},
onEdit: function() {
this.menu && this.menu.hide();
var me = this;
Common.UI.warning({
title: this.notcriticalErrorTitle,
msg: this.txtEditWarning,
buttons: ['ok', 'cancel'],
primary: 'ok',
callback: function(btn) {
if (btn == 'ok') {
me.api.asc_RemoveAllSignatures();
}
}
});
},
onView: function() {
this.menu && this.menu.hide();
SSE.getController('RightMenu').rightmenu.SetActivePane(Common.Utils.documentSettingsType.Signature, true);
},
updateSignatures: function(){
var requested = this.api.asc_getRequestSignatures(),
valid = this.api.asc_getSignatures(),
hasRequested = requested && requested.length>0,
hasValid = false,
hasInvalid = false;
_.each(valid, function(item, index){
if (item.asc_getValid()==0)
hasValid = true;
else
hasInvalid = true;
});
// hasRequested = true;
// hasValid = true;
// hasInvalid = true;
var tipText = (hasInvalid) ? this.txtSignedInvalid : (hasValid ? this.txtSigned : "");
if (hasRequested)
tipText = this.txtRequestedSignatures + (tipText!="" ? "<br><br>" : "")+ tipText;
this.cntSignatureView.html(this.templateSignature({tipText: tipText, hasSigned: (hasValid || hasInvalid), hasRequested: hasRequested}));
},
updateEncrypt: function() {
this.cntPassword.toggleClass('hidden', this.btnAddPwd.isVisible());
},
strProtect: 'Protect Workbook',
strSignature: 'With Signature',
txtView: 'View signatures',
txtEdit: 'Edit workbook',
txtSigned: 'Valid signatures has been added to the workbook. The workbook is protected from editing.',
txtSignedInvalid: 'Some of the digital signatures in workbook are invalid or could not be verified. The workbook is protected from editing.',
txtRequestedSignatures: 'This workbook needs to be signed.',
notcriticalErrorTitle: 'Warning',
txtEditWarning: 'Editing will remove the signatures from the workbook.<br>Are you sure you want to continue?',
strEncrypt: 'With Password',
txtEncrypted: 'This workbook has been protected by password'
}, SSE.Views.FileMenuPanels.ProtectDoc || {}));
}); });

View file

@ -97,7 +97,8 @@ define([
if (xhrObj && lang) { if (xhrObj && lang) {
xhrObj.open('GET', 'resources/formula-lang/' + lang + '_desc.json', false); xhrObj.open('GET', 'resources/formula-lang/' + lang + '_desc.json', false);
xhrObj.send(''); xhrObj.send('');
if (xhrObj.status == 200) if (xhrObj.status==200 ||
(xhrObj.status==0 && !!xhrObj.responseURL && xhrObj.responseURL.startsWith('file://')))
langDescJson[lang] = eval("(" + xhrObj.responseText + ")"); langDescJson[lang] = eval("(" + xhrObj.responseText + ")");
else { else {
xhrObj.open('GET', 'resources/formula-lang/en_desc.json', false); xhrObj.open('GET', 'resources/formula-lang/en_desc.json', false);

View file

@ -55,6 +55,7 @@ define([
'spreadsheeteditor/main/app/view/ShapeSettings', 'spreadsheeteditor/main/app/view/ShapeSettings',
'spreadsheeteditor/main/app/view/TextArtSettings', 'spreadsheeteditor/main/app/view/TextArtSettings',
'spreadsheeteditor/main/app/view/TableSettings', 'spreadsheeteditor/main/app/view/TableSettings',
'spreadsheeteditor/main/app/view/SignatureSettings',
'common/main/lib/component/Scroller' 'common/main/lib/component/Scroller'
], function (menuTemplate, $, _, Backbone) { ], function (menuTemplate, $, _, Backbone) {
'use strict'; 'use strict';
@ -134,7 +135,7 @@ define([
return this; return this;
}, },
render: function () { render: function (mode) {
var el = $(this.el); var el = $(this.el);
this.trigger('render:before', this); this.trigger('render:before', this);
@ -166,6 +167,21 @@ define([
this.textartSettings = new SSE.Views.TextArtSettings(); this.textartSettings = new SSE.Views.TextArtSettings();
this.tableSettings = new SSE.Views.TableSettings(); this.tableSettings = new SSE.Views.TableSettings();
if (mode && mode.canProtect) {
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 SSE.Views.SignatureSettings();
}
if (_.isUndefined(this.scroller)) { if (_.isUndefined(this.scroller)) {
this.scroller = new Common.UI.Scroller({ this.scroller = new Common.UI.Scroller({
el: $(this.el).find('.right-panel'), el: $(this.el).find('.right-panel'),
@ -187,7 +203,7 @@ define([
this.shapeSettings.setApi(api); this.shapeSettings.setApi(api);
this.textartSettings.setApi(api); this.textartSettings.setApi(api);
this.tableSettings.setApi(api); this.tableSettings.setApi(api);
if (this.signatureSettings) this.signatureSettings.setApi(api);
return this; return this;
}, },
@ -264,6 +280,7 @@ define([
txtTextArtSettings: 'Text Art Settings', txtTextArtSettings: 'Text Art Settings',
txtChartSettings: 'Chart Settings', txtChartSettings: 'Chart Settings',
txtSparklineSettings: 'Sparkline Settings', txtSparklineSettings: 'Sparkline Settings',
txtTableSettings: 'Table Settings' txtTableSettings: 'Table Settings',
txtSignatureSettings: 'Signature Settings'
}, SSE.Views.RightMenu || {})); }, SSE.Views.RightMenu || {}));
}); });

View file

@ -0,0 +1,389 @@
/*
*
* (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!spreadsheeteditor/main/app/template/SignatureSettings.template',
'jquery',
'underscore',
'backbone',
'common/main/lib/component/Button'
], function (menuTemplate, $, _, Backbone) {
'use strict';
SSE.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 () {
this._state = {
DisabledEditing: false,
ready: false,
hasValid: false,
hasInvalid: false,
hasRequested: false,
tip: undefined
};
this._locked = false;
this.render();
},
render: function () {
this.$el.html(this.template({
scope: this
}));
var protection = SSE.getController('Common.Controllers.Protection').getView();
this.btnAddInvisibleSign = protection.getButton('signature');
this.btnAddInvisibleSign.render(this.$el.find('#signature-invisible-sign'));
this.viewRequestedList = new Common.UI.DataView({
el: $('#signature-requested-sign'),
enableKeyEvents: false,
itemTemplate: _.template([
'<div id="<%= id %>" class="signature-item requested">',
'<div class="caret img-commonctrl nomargin"></div>',
'<div class="name"><%= Common.Utils.String.htmlEncode(name) %></div>',
'</div>'
].join(''))
});
this.viewValidList = new Common.UI.DataView({
el: $('#signature-valid-sign'),
enableKeyEvents: false,
itemTemplate: _.template([
'<div id="<%= id %>" class="signature-item">',
'<div class="caret img-commonctrl <% if (name == "" || date == "") { %>' + 'nomargin' + '<% } %>"></div>',
'<div class="name"><%= Common.Utils.String.htmlEncode(name) %></div>',
'<div class="date"><%= Common.Utils.String.htmlEncode(date) %></div>',
'</div>'
].join(''))
});
this.viewInvalidList = new Common.UI.DataView({
el: $('#signature-invalid-sign'),
enableKeyEvents: false,
itemTemplate: _.template([
'<div id="<%= id %>" class="signature-item">',
'<div class="caret img-commonctrl <% if (name == "" || date == "") { %>' + 'nomargin' + '<% } %>"></div>',
'<div class="name"><%= Common.Utils.String.htmlEncode(name) %></div>',
'<div class="date"><%= Common.Utils.String.htmlEncode(date) %></div>',
'</div>'
].join(''))
});
this.viewRequestedList.on('item:click', _.bind(this.onSelectSignature, this));
this.viewValidList.on('item:click', _.bind(this.onSelectSignature, this));
this.viewInvalidList.on('item:click', _.bind(this.onSelectSignature, this));
this.signatureMenu = new Common.UI.Menu({
menuAlign : 'tr-br',
items: [
{ caption: this.strSign, value: 0 },
{ caption: this.strDetails,value: 1 },
{ caption: this.strSetup, value: 2 },
{ caption: this.strDelete, value: 3 }
]
});
this.signatureMenu.on('item:click', _.bind(this.onMenuSignatureClick, this));
},
setApi: function(api) {
this.api = api;
if (this.api) {
this.api.asc_registerCallback('asc_onUpdateSignatures', _.bind(this.onApiUpdateSignatures, this));
}
Common.NotificationCenter.on('document:ready', _.bind(this.onDocumentReady, this));
return this;
},
ChangeSettings: function(props) {
if (!this._state.hasRequested && !this._state.hasValid && !this._state.hasInvalid)
this.updateSignatures(this.api.asc_getSignatures(), this.api.asc_getRequestSignatures());
},
setLocked: function (locked) {
this._locked = locked;
},
setMode: function(mode) {
this.mode = mode;
},
onApiUpdateSignatures: function(valid, requested){
if (!this._state.ready) return;
this.updateSignatures(valid, requested);
this.showSignatureTooltip(this._state.hasValid, this._state.hasInvalid);
},
updateSignatures: function(valid, requested){
var me = this,
requestedSignatures = [],
validSignatures = [],
invalidSignatures = [],
name_index = 1;
_.each(requested, function(item, index){
var name = item.asc_getSigner1();
requestedSignatures.push({name: (name !== "") ? name : (me.strSigner + " " + name_index++) , guid: item.asc_getGuid(), requested: true});
});
_.each(valid, function(item, index){
var item_date = item.asc_getDate();
var sign = {name: item.asc_getSigner1(), certificateId: item.asc_getId(), guid: item.asc_getGuid(), date: (!_.isEmpty(item_date)) ? new Date(item_date).toLocaleString() : '', invisible: !item.asc_getVisible()};
(item.asc_getValid()==0) ? validSignatures.push(sign) : invalidSignatures.push(sign);
});
// requestedSignatures = [{name: 'Hammish Mitchell', guid: '123', requested: true}, {name: 'Someone Somewhere', guid: '123', requested: true}, {name: 'Mary White', guid: '123', requested: true}, {name: 'John Black', guid: '123', requested: true}];
// validSignatures = [{name: 'Hammish Mitchell', guid: '123', date: '18/05/2017', invisible: true}, {name: 'Someone Somewhere', guid: '345', date: '18/05/2017'}];
// invalidSignatures = [{name: 'Mary White', guid: '111', date: '18/05/2017'}, {name: 'John Black', guid: '456', date: '18/05/2017'}];
me._state.hasValid = validSignatures.length>0;
me._state.hasInvalid = invalidSignatures.length>0;
me._state.hasRequested = requestedSignatures.length>0;
this.viewRequestedList.store.reset(requestedSignatures);
this.viewValidList.store.reset(validSignatures);
this.viewInvalidList.store.reset(invalidSignatures);
this.$el.find('.requested').toggleClass('hidden', !me._state.hasRequested);
this.$el.find('.valid').toggleClass('hidden', !me._state.hasValid);
this.$el.find('.invalid').toggleClass('hidden', !me._state.hasInvalid);
me.disableEditing(me._state.hasValid || me._state.hasInvalid);
},
onSelectSignature: function(picker, item, record, e){
if (!record) return;
var btn = $(e.target);
if (btn && btn.hasClass('caret')) {
var menu = this.signatureMenu;
if (menu.isVisible()) {
menu.hide();
return;
}
var showPoint, me = this,
currentTarget = $(e.currentTarget),
parent = $(this.el),
offset = currentTarget.offset(),
offsetParent = parent.offset();
showPoint = [offset.left - offsetParent.left + currentTarget.width(), offset.top - offsetParent.top + currentTarget.height()/2];
var menuContainer = parent.find('#menu-signature-container');
if (!menu.rendered) {
if (menuContainer.length < 1) {
menuContainer = $('<div id="menu-signature-container" style="position: absolute; z-index: 10000;"><div class="dropdown-toggle" data-toggle="dropdown"></div></div>', menu.id);
parent.append(menuContainer);
}
menu.render(menuContainer);
menu.cmpEl.attr({tabindex: "-1"});
menu.on({
'show:after': function(cmp) {
if (cmp && cmp.menuAlignEl)
cmp.menuAlignEl.toggleClass('over', true);
},
'hide:after': function(cmp) {
if (cmp && cmp.menuAlignEl)
cmp.menuAlignEl.toggleClass('over', false);
}
});
}
var requested = record.get('requested'),
signed = (this._state.hasValid || this._state.hasInvalid);
menu.items[0].setVisible(requested);
menu.items[1].setVisible(!requested);
menu.items[2].setVisible(requested || !record.get('invisible'));
menu.items[3].setVisible(!requested);
menu.items[0].setDisabled(this._locked);
menu.items[3].setDisabled(this._locked);
menu.items[1].cmpEl.attr('data-value', record.get('certificateId')); // view certificate
menu.items[2].cmpEl.attr('data-value', signed ? 1 : 0); // view or edit signature settings
menu.cmpEl.attr('data-value', record.get('guid'));
menuContainer.css({left: showPoint[0], top: showPoint[1]});
menu.menuAlignEl = currentTarget;
menu.setOffset(-20, -currentTarget.height()/2 + 3);
menu.show();
_.delay(function() {
menu.cmpEl.focus();
}, 10);
e.stopPropagation();
e.preventDefault();
} else {
this.api.asc_gotoSignature(record.get('guid'));
}
},
onMenuSignatureClick: function(menu, item) {
var guid = menu.cmpEl.attr('data-value');
switch (item.value) {
case 0:
Common.NotificationCenter.trigger('protect:sign', guid);
break;
case 1:
this.api.asc_ViewCertificate(item.cmpEl.attr('data-value'));
break;
case 2:
Common.NotificationCenter.trigger('protect:signature', 'visible', !!parseInt(item.cmpEl.attr('data-value')), guid);// can edit settings for requested signature
break;
case 3:
this.api.asc_RemoveSignature(guid);
break;
}
},
onDocumentReady: function() {
this._state.ready = true;
this.updateSignatures(this.api.asc_getSignatures(), this.api.asc_getRequestSignatures());
this.showSignatureTooltip(this._state.hasValid, this._state.hasInvalid, this._state.hasRequested);
},
showSignatureTooltip: function(hasValid, hasInvalid, hasRequested) {
var me = this,
tip = me._state.tip;
if (!hasValid && !hasInvalid && !hasRequested) {
if (tip && tip.isVisible()) {
tip.close();
me._state.tip = undefined;
}
return;
}
var showLink = hasValid || hasInvalid,
tipText = (hasInvalid) ? me.txtSignedInvalid : (hasValid ? me.txtSigned : "");
if (hasRequested)
tipText = me.txtRequestedSignatures + "<br><br>" + tipText;
if (tip && tip.isVisible() && (tipText !== tip.text || showLink !== tip.showLink)) {
tip.close();
me._state.tip = undefined;
}
if (!me._state.tip) {
tip = new Common.UI.SynchronizeTip({
target : SSE.getController('RightMenu').getView('RightMenu').btnSignature.btnEl,
text : tipText,
showLink: showLink,
textLink: this.txtContinueEditing,
placement: 'left'
});
tip.on({
'dontshowclick': function() {
Common.UI.warning({
title: me.notcriticalErrorTitle,
msg: me.txtEditWarning,
buttons: ['ok', 'cancel'],
primary: 'ok',
callback: function(btn) {
if (btn == 'ok') {
tip.close();
me._state.tip = undefined;
me.api.asc_RemoveAllSignatures();
}
}
});
},
'closeclick': function() {
tip.close();
me._state.tip = undefined;
}
});
me._state.tip = tip;
tip.show();
}
},
disableEditing: function(disable) {
if (this._state.DisabledEditing != disable) {
this._state.DisabledEditing = disable;
var rightMenuController = SSE.getController('RightMenu');
if (disable && rightMenuController.rightmenu.GetActivePane() !== 'id-signature-settings')
rightMenuController.rightmenu.clearSelection();
rightMenuController.SetDisabled(disable, true);
SSE.getController('Toolbar').DisableToolbar(disable, disable);
SSE.getController('Statusbar').SetDisabled(disable);
SSE.getController('DocumentHolder').SetDisabled(disable, true);
var leftMenu = SSE.getController('LeftMenu').leftMenu;
leftMenu.btnComments.setDisabled(disable);
var comments = SSE.getController('Common.Controllers.Comments');
if (comments)
comments.setPreviewMode(disable);
}
},
strSignature: 'Signature',
strRequested: 'Requested signatures',
strValid: 'Valid signatures',
strInvalid: 'Invalid signatures',
strSign: 'Sign',
strDetails: 'Signature Details',
strSetup: 'Signature Setup',
txtSigned: 'Valid signatures has been added to the workbook. The workbook is protected from editing.',
txtSignedInvalid: 'Some of the digital signatures in workbook are invalid or could not be verified. The workbook is protected from editing.',
txtRequestedSignatures: 'This workbook needs to be signed.',
txtContinueEditing: 'Edit anyway',
notcriticalErrorTitle: 'Warning',
txtEditWarning: 'Editing will remove the signatures from the workbook.<br>Are you sure you want to continue?',
strDelete: 'Remove Signature',
strSigner: 'Signer'
}, SSE.Views.SignatureSettings || {}));
});

View file

@ -411,6 +411,46 @@ define([
enableToggle: true enableToggle: true
}); });
me.btnStrikeout = new Common.UI.Button({
id: 'id-toolbar-btn-strikeout',
cls: 'btn-toolbar',
iconCls: 'btn-strikeout',
lock : [_set.selImage, _set.editFormula, _set.selRange, _set.coAuth, _set.coAuthText, _set.lostConnect],
enableToggle: true
});
me.btnSubscript = new Common.UI.Button({
id : 'id-toolbar-btn-subscript',
cls : 'btn-toolbar',
iconCls : 'btn-subscript',
icls : 'btn-subscript',
split : true,
enableToggle: true,
lock : [_set.selImage, _set.editFormula, _set.selRange, _set.coAuth, _set.coAuthText, _set.lostConnect],
menu : new Common.UI.Menu({
items: [
{
caption : me.textSubscript,
iconCls : 'mnu-text-subscript',
icls : 'btn-subscript',
checkable : true,
allowDepress: true,
toggleGroup : 'textsubscriptgroup',
value : 'sub'
},
{
caption : me.textSuperscript,
iconCls : 'mnu-text-superscript',
icls : 'btn-superscript',
checkable : true,
allowDepress: true,
toggleGroup : 'textsubscriptgroup',
value : 'super'
}
]
})
});
me.mnuTextColorPicker = dummyCmp(); me.mnuTextColorPicker = dummyCmp();
me.btnTextColor = new Common.UI.Button({ me.btnTextColor = new Common.UI.Button({
id : 'id-toolbar-btn-fontcolor', id : 'id-toolbar-btn-fontcolor',
@ -1199,7 +1239,7 @@ define([
me.lockControls = [ me.lockControls = [
me.cmbFontName, me.cmbFontSize, me.btnIncFontSize, me.btnDecFontSize, me.btnBold, me.cmbFontName, me.cmbFontSize, me.btnIncFontSize, me.btnDecFontSize, me.btnBold,
me.btnItalic, me.btnUnderline, me.btnTextColor, me.btnHorizontalAlign, me.btnAlignLeft, me.btnItalic, me.btnUnderline, me.btnStrikeout, me.btnSubscript, me.btnTextColor, me.btnHorizontalAlign, me.btnAlignLeft,
me.btnAlignCenter,me.btnAlignRight,me.btnAlignJust, me.btnVerticalAlign, me.btnAlignTop, me.btnAlignCenter,me.btnAlignRight,me.btnAlignJust, me.btnVerticalAlign, me.btnAlignTop,
me.btnAlignMiddle, me.btnAlignBottom, me.btnWrap, me.btnTextOrient, me.btnBackColor, me.btnAlignMiddle, me.btnAlignBottom, me.btnWrap, me.btnTextOrient, me.btnBackColor,
me.btnMerge, me.btnInsertFormula, me.btnNamedRange, me.btnIncDecimal, me.btnInsertShape, me.btnInsertEquation, me.btnMerge, me.btnInsertFormula, me.btnNamedRange, me.btnIncDecimal, me.btnInsertShape, me.btnInsertEquation,
@ -1214,7 +1254,7 @@ define([
var _temp_array = [me.cmbFontName, me.cmbFontSize, me.btnAlignLeft,me.btnAlignCenter,me.btnAlignRight,me.btnAlignJust,me.btnAlignTop, var _temp_array = [me.cmbFontName, me.cmbFontSize, me.btnAlignLeft,me.btnAlignCenter,me.btnAlignRight,me.btnAlignJust,me.btnAlignTop,
me.btnAlignMiddle, me.btnAlignBottom, me.btnHorizontalAlign, me.btnVerticalAlign, me.btnAlignMiddle, me.btnAlignBottom, me.btnHorizontalAlign, me.btnVerticalAlign,
me.btnInsertImage, me.btnInsertText, me.btnInsertTextArt, me.btnInsertShape, me.btnInsertEquation, me.btnIncFontSize, me.btnInsertImage, me.btnInsertText, me.btnInsertTextArt, me.btnInsertShape, me.btnInsertEquation, me.btnIncFontSize,
me.btnDecFontSize, me.btnBold, me.btnItalic, me.btnUnderline, me.btnTextColor, me.btnBackColor, me.btnDecFontSize, me.btnBold, me.btnItalic, me.btnUnderline, me.btnStrikeout, me.btnSubscript, me.btnTextColor, me.btnBackColor,
me.btnInsertHyperlink, me.btnBorders, me.btnTextOrient, me.btnPercentStyle, me.btnCurrencyStyle, me.btnColorSchemas, me.btnInsertHyperlink, me.btnBorders, me.btnTextOrient, me.btnPercentStyle, me.btnCurrencyStyle, me.btnColorSchemas,
me.btnSettings, me.btnInsertFormula, me.btnNamedRange, me.btnDecDecimal, me.btnIncDecimal, me.cmbNumberFormat, me.btnWrap, me.btnSettings, me.btnInsertFormula, me.btnNamedRange, me.btnDecDecimal, me.btnIncDecimal, me.cmbNumberFormat, me.btnWrap,
me.btnInsertChart, me.btnMerge, me.btnAddCell, me.btnDeleteCell, me.btnShowMode, me.btnPrint, me.btnInsertChart, me.btnMerge, me.btnAddCell, me.btnDeleteCell, me.btnShowMode, me.btnPrint,
@ -1309,6 +1349,8 @@ define([
_injectComponent('#slot-btn-bold', this.btnBold); _injectComponent('#slot-btn-bold', this.btnBold);
_injectComponent('#slot-btn-italic', this.btnItalic); _injectComponent('#slot-btn-italic', this.btnItalic);
_injectComponent('#slot-btn-underline', this.btnUnderline); _injectComponent('#slot-btn-underline', this.btnUnderline);
_injectComponent('#slot-btn-strikeout', this.btnStrikeout);
_injectComponent('#slot-btn-subscript', this.btnSubscript);
_injectComponent('#slot-btn-fontcolor', this.btnTextColor); _injectComponent('#slot-btn-fontcolor', this.btnTextColor);
_injectComponent('#slot-btn-fillparag', this.btnBackColor); _injectComponent('#slot-btn-fillparag', this.btnBackColor);
_injectComponent('#slot-btn-borders', this.btnBorders); _injectComponent('#slot-btn-borders', this.btnBorders);
@ -1377,6 +1419,8 @@ define([
_updateHint(this.btnBold, this.textBold + Common.Utils.String.platformKey('Ctrl+B')); _updateHint(this.btnBold, this.textBold + Common.Utils.String.platformKey('Ctrl+B'));
_updateHint(this.btnItalic, this.textItalic + Common.Utils.String.platformKey('Ctrl+I')); _updateHint(this.btnItalic, this.textItalic + Common.Utils.String.platformKey('Ctrl+I'));
_updateHint(this.btnUnderline, this.textUnderline + Common.Utils.String.platformKey('Ctrl+U')); _updateHint(this.btnUnderline, this.textUnderline + Common.Utils.String.platformKey('Ctrl+U'));
_updateHint(this.btnStrikeout, this.textStrikeout);
_updateHint(this.btnSubscript, this.textSubSuperscript);
_updateHint(this.btnTextColor, this.tipFontColor); _updateHint(this.btnTextColor, this.tipFontColor);
_updateHint(this.btnBackColor, this.tipPrColor); _updateHint(this.btnBackColor, this.tipPrColor);
_updateHint(this.btnBorders, this.tipBorders); _updateHint(this.btnBorders, this.tipBorders);
@ -1890,6 +1934,10 @@ define([
textBold: 'Bold', textBold: 'Bold',
textItalic: 'Italic', textItalic: 'Italic',
textUnderline: 'Underline', textUnderline: 'Underline',
textStrikeout: 'Strikeout',
textSuperscript: 'Superscript',
textSubscript: 'Subscript',
textSubSuperscript: 'Subscript/Superscript',
tipFontName: 'Font Name', tipFontName: 'Font Name',
tipFontSize: 'Font Size', tipFontSize: 'Font Size',
tipCellStyle: 'Cell Style', tipCellStyle: 'Cell Style',
@ -2078,6 +2126,8 @@ define([
textTabFile: 'File', textTabFile: 'File',
textTabHome: 'Home', textTabHome: 'Home',
textTabInsert: 'Insert', textTabInsert: 'Insert',
textSurface: 'Surface' textSurface: 'Surface',
tipChangeChart: 'Change Chart Type',
textTabProtect: 'Protection'
}, SSE.Views.Toolbar || {})); }, SSE.Views.Toolbar || {}));
}); });

View file

@ -147,7 +147,7 @@ define([
var me = this, var me = this,
rightMenuView = SSE.getController('RightMenu').getView('RightMenu'); rightMenuView = SSE.getController('RightMenu').getView('RightMenu');
me._rightMenu = rightMenuView.render(); me._rightMenu = rightMenuView.render(this.mode);
}, },
setMode: function(mode, delay) { setMode: function(mode, delay) {

View file

@ -149,6 +149,7 @@ require([
'Common.Controllers.Chat', 'Common.Controllers.Chat',
'Common.Controllers.Comments', 'Common.Controllers.Comments',
'Common.Controllers.Plugins' 'Common.Controllers.Plugins'
,'Common.Controllers.Protection'
] ]
}); });
@ -170,12 +171,14 @@ require([
'spreadsheeteditor/main/app/view/ChartSettings', 'spreadsheeteditor/main/app/view/ChartSettings',
'spreadsheeteditor/main/app/view/ShapeSettings', 'spreadsheeteditor/main/app/view/ShapeSettings',
'spreadsheeteditor/main/app/view/TextArtSettings', 'spreadsheeteditor/main/app/view/TextArtSettings',
'spreadsheeteditor/main/app/view/SignatureSettings',
'common/main/lib/util/utils', 'common/main/lib/util/utils',
'common/main/lib/util/LocalStorage', 'common/main/lib/util/LocalStorage',
'common/main/lib/controller/Fonts', 'common/main/lib/controller/Fonts',
'common/main/lib/controller/Comments', 'common/main/lib/controller/Comments',
'common/main/lib/controller/Chat', 'common/main/lib/controller/Chat',
'common/main/lib/controller/Plugins' 'common/main/lib/controller/Plugins'
,'common/main/lib/controller/Protection'
], function() { ], function() {
window.compareVersions = true; window.compareVersions = true;
app.start(); app.start();

View file

@ -102,16 +102,59 @@
"Common.Views.OpenDialog.txtTab": "Tab", "Common.Views.OpenDialog.txtTab": "Tab",
"Common.Views.OpenDialog.txtTitle": "Choose %1 options", "Common.Views.OpenDialog.txtTitle": "Choose %1 options",
"Common.Views.OpenDialog.txtTitleProtected": "Protected File", "Common.Views.OpenDialog.txtTitleProtected": "Protected File",
"Common.Views.PasswordDialog.cancelButtonText": "Cancel",
"Common.Views.PasswordDialog.okButtonText": "OK",
"Common.Views.PasswordDialog.txtDescription": "A password is required to open this document",
"Common.Views.PasswordDialog.txtIncorrectPwd": "Confirmation password is not identical",
"Common.Views.PasswordDialog.txtPassword": "Password",
"Common.Views.PasswordDialog.txtRepeat": "Repeat password",
"Common.Views.PasswordDialog.txtTitle": "Set Password",
"Common.Views.PluginDlg.textLoading": "Loading", "Common.Views.PluginDlg.textLoading": "Loading",
"Common.Views.Plugins.groupCaption": "Plugins", "Common.Views.Plugins.groupCaption": "Plugins",
"Common.Views.Plugins.strPlugins": "Plugins", "Common.Views.Plugins.strPlugins": "Plugins",
"Common.Views.Plugins.textLoading": "Loading", "Common.Views.Plugins.textLoading": "Loading",
"Common.Views.Plugins.textStart": "Start", "Common.Views.Plugins.textStart": "Start",
"Common.Views.Plugins.textStop": "Stop", "Common.Views.Plugins.textStop": "Stop",
"Common.Views.Protection.hintAddPwd": "Encrypt with password",
"Common.Views.Protection.hintPwd": "Change or delete password",
"Common.Views.Protection.hintSignature": "Add digital signature or signature line",
"Common.Views.Protection.txtAddPwd": "Add password",
"Common.Views.Protection.txtChangePwd": "Change password",
"Common.Views.Protection.txtDeletePwd": "Delete password",
"Common.Views.Protection.txtEncrypt": "Encrypt",
"Common.Views.Protection.txtInvisibleSignature": "Add digital signature",
"Common.Views.Protection.txtSignature": "Signature",
"Common.Views.Protection.txtSignatureLine": "Signature line",
"Common.Views.RenameDialog.cancelButtonText": "Cancel", "Common.Views.RenameDialog.cancelButtonText": "Cancel",
"Common.Views.RenameDialog.okButtonText": "Ok", "Common.Views.RenameDialog.okButtonText": "Ok",
"Common.Views.RenameDialog.textName": "File name", "Common.Views.RenameDialog.textName": "File name",
"Common.Views.RenameDialog.txtInvalidName": "The file name cannot contain any of the following characters: ", "Common.Views.RenameDialog.txtInvalidName": "The file name cannot contain any of the following characters: ",
"Common.Views.SignDialog.cancelButtonText": "Cancel",
"Common.Views.SignDialog.okButtonText": "Ok",
"Common.Views.SignDialog.textBold": "Bold",
"Common.Views.SignDialog.textCertificate": "Certificate",
"Common.Views.SignDialog.textChange": "Change",
"Common.Views.SignDialog.textInputName": "Input signer name",
"Common.Views.SignDialog.textItalic": "Italic",
"Common.Views.SignDialog.textPurpose": "Purpose for signing this document",
"Common.Views.SignDialog.textSelectImage": "Select Image",
"Common.Views.SignDialog.textSignature": "Signature looks as",
"Common.Views.SignDialog.textTitle": "Sign Document",
"Common.Views.SignDialog.textUseImage": "or click 'Select Image' to use a picture as signature",
"Common.Views.SignDialog.textValid": "Valid from %1 to %2",
"Common.Views.SignDialog.tipFontName": "Font Name",
"Common.Views.SignDialog.tipFontSize": "Font Size",
"Common.Views.SignSettingsDialog.cancelButtonText": "Cancel",
"Common.Views.SignSettingsDialog.okButtonText": "Ok",
"Common.Views.SignSettingsDialog.textAllowComment": "Allow signer to add comment in the signature dialog",
"Common.Views.SignSettingsDialog.textInfo": "Signer Info",
"Common.Views.SignSettingsDialog.textInfoEmail": "E-mail",
"Common.Views.SignSettingsDialog.textInfoName": "Name",
"Common.Views.SignSettingsDialog.textInfoTitle": "Signer Title",
"Common.Views.SignSettingsDialog.textInstructions": "Instructions for Signer",
"Common.Views.SignSettingsDialog.textShowDate": "Show sign date in signature line",
"Common.Views.SignSettingsDialog.textTitle": "Signature Settings",
"Common.Views.SignSettingsDialog.txtEmpty": "This field is required",
"SSE.Controllers.DocumentHolder.alignmentText": "Alignment", "SSE.Controllers.DocumentHolder.alignmentText": "Alignment",
"SSE.Controllers.DocumentHolder.centerText": "Center", "SSE.Controllers.DocumentHolder.centerText": "Center",
"SSE.Controllers.DocumentHolder.deleteColumnText": "Delete Column", "SSE.Controllers.DocumentHolder.deleteColumnText": "Delete Column",
@ -797,7 +840,7 @@
"SSE.Views.ChartSettings.textArea": "Area", "SSE.Views.ChartSettings.textArea": "Area",
"SSE.Views.ChartSettings.textBar": "Bar", "SSE.Views.ChartSettings.textBar": "Bar",
"SSE.Views.ChartSettings.textBorderSizeErr": "The entered value is incorrect.<br>Please enter a value between 0 pt and 1584 pt.", "SSE.Views.ChartSettings.textBorderSizeErr": "The entered value is incorrect.<br>Please enter a value between 0 pt and 1584 pt.",
"SSE.Views.ChartSettings.textChartType": "Change Chart Type", "SSE.Views.ChartSettings.textChartType": "Change chart type",
"SSE.Views.ChartSettings.textColumn": "Column", "SSE.Views.ChartSettings.textColumn": "Column",
"SSE.Views.ChartSettings.textColumnSpark": "Column", "SSE.Views.ChartSettings.textColumnSpark": "Column",
"SSE.Views.ChartSettings.textEditData": "Edit Data and Location", "SSE.Views.ChartSettings.textEditData": "Edit Data and Location",
@ -1002,6 +1045,10 @@
"SSE.Views.DocumentHolder.selectDataText": "Column Data", "SSE.Views.DocumentHolder.selectDataText": "Column Data",
"SSE.Views.DocumentHolder.selectRowText": "Row", "SSE.Views.DocumentHolder.selectRowText": "Row",
"SSE.Views.DocumentHolder.selectTableText": "Table", "SSE.Views.DocumentHolder.selectTableText": "Table",
"SSE.Views.DocumentHolder.strDelete": "Remove Signature",
"SSE.Views.DocumentHolder.strDetails": "Signature Details",
"SSE.Views.DocumentHolder.strSetup": "Signature Setup",
"SSE.Views.DocumentHolder.strSign": "Sign",
"SSE.Views.DocumentHolder.textArrangeBack": "Send to Background", "SSE.Views.DocumentHolder.textArrangeBack": "Send to Background",
"SSE.Views.DocumentHolder.textArrangeBackward": "Send Backward", "SSE.Views.DocumentHolder.textArrangeBackward": "Send Backward",
"SSE.Views.DocumentHolder.textArrangeForward": "Bring Forward", "SSE.Views.DocumentHolder.textArrangeForward": "Bring Forward",
@ -1070,6 +1117,7 @@
"SSE.Views.FileMenu.btnHelpCaption": "Help...", "SSE.Views.FileMenu.btnHelpCaption": "Help...",
"SSE.Views.FileMenu.btnInfoCaption": "Spreadsheet Info...", "SSE.Views.FileMenu.btnInfoCaption": "Spreadsheet Info...",
"SSE.Views.FileMenu.btnPrintCaption": "Print", "SSE.Views.FileMenu.btnPrintCaption": "Print",
"SSE.Views.FileMenu.btnProtectCaption": "Protect",
"SSE.Views.FileMenu.btnRecentFilesCaption": "Open Recent...", "SSE.Views.FileMenu.btnRecentFilesCaption": "Open Recent...",
"SSE.Views.FileMenu.btnRenameCaption": "Rename...", "SSE.Views.FileMenu.btnRenameCaption": "Rename...",
"SSE.Views.FileMenu.btnReturnCaption": "Back to Spreadsheet", "SSE.Views.FileMenu.btnReturnCaption": "Back to Spreadsheet",
@ -1130,6 +1178,17 @@
"SSE.Views.FileMenuPanels.MainSettingsGeneral.txtPt": "Point", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtPt": "Point",
"SSE.Views.FileMenuPanels.MainSettingsGeneral.txtRu": "Russian", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtRu": "Russian",
"SSE.Views.FileMenuPanels.MainSettingsGeneral.txtWin": "as Windows", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtWin": "as Windows",
"SSE.Views.FileMenuPanels.ProtectDoc.notcriticalErrorTitle": "Warning",
"SSE.Views.FileMenuPanels.ProtectDoc.strEncrypt": "With password",
"SSE.Views.FileMenuPanels.ProtectDoc.strProtect": "Protect Spreadsheet",
"SSE.Views.FileMenuPanels.ProtectDoc.strSignature": "With signature",
"SSE.Views.FileMenuPanels.ProtectDoc.txtEdit": "Edit spreadsheet",
"SSE.Views.FileMenuPanels.ProtectDoc.txtEditWarning": "Editing will remove the signatures from the spreadsheet.<br>Are you sure you want to continue?",
"SSE.Views.FileMenuPanels.ProtectDoc.txtEncrypted": "This spreadsheet has been protected by password",
"SSE.Views.FileMenuPanels.ProtectDoc.txtRequestedSignatures": "This spreadsheet needs to be signed.",
"SSE.Views.FileMenuPanels.ProtectDoc.txtSigned": "Valid signatures has been added to the spreadsheet. The spreadsheet is protected from editing.",
"SSE.Views.FileMenuPanels.ProtectDoc.txtSignedInvalid": "Some of the digital signatures in spreadsheet are invalid or could not be verified. The spreadsheet is protected from editing.",
"SSE.Views.FileMenuPanels.ProtectDoc.txtView": "View signatures",
"SSE.Views.FileMenuPanels.Settings.txtGeneral": "General", "SSE.Views.FileMenuPanels.Settings.txtGeneral": "General",
"SSE.Views.FileMenuPanels.Settings.txtPageSettings": "Page Settings", "SSE.Views.FileMenuPanels.Settings.txtPageSettings": "Page Settings",
"SSE.Views.FormatSettingsDialog.textCancel": "Cancel", "SSE.Views.FormatSettingsDialog.textCancel": "Cancel",
@ -1332,7 +1391,7 @@
"SSE.Views.ParagraphSettingsAdvanced.strStrike": "Strikethrough", "SSE.Views.ParagraphSettingsAdvanced.strStrike": "Strikethrough",
"SSE.Views.ParagraphSettingsAdvanced.strSubscript": "Subscript", "SSE.Views.ParagraphSettingsAdvanced.strSubscript": "Subscript",
"SSE.Views.ParagraphSettingsAdvanced.strSuperscript": "Superscript", "SSE.Views.ParagraphSettingsAdvanced.strSuperscript": "Superscript",
"SSE.Views.ParagraphSettingsAdvanced.strTabs": "Tab", "SSE.Views.ParagraphSettingsAdvanced.strTabs": "Tabs",
"SSE.Views.ParagraphSettingsAdvanced.textAlign": "Alignment", "SSE.Views.ParagraphSettingsAdvanced.textAlign": "Alignment",
"SSE.Views.ParagraphSettingsAdvanced.textCharacterSpacing": "Character Spacing", "SSE.Views.ParagraphSettingsAdvanced.textCharacterSpacing": "Character Spacing",
"SSE.Views.ParagraphSettingsAdvanced.textDefault": "Default Tab", "SSE.Views.ParagraphSettingsAdvanced.textDefault": "Default Tab",
@ -1378,6 +1437,7 @@
"SSE.Views.RightMenu.txtParagraphSettings": "Text settings", "SSE.Views.RightMenu.txtParagraphSettings": "Text settings",
"SSE.Views.RightMenu.txtSettings": "Common Settings", "SSE.Views.RightMenu.txtSettings": "Common Settings",
"SSE.Views.RightMenu.txtShapeSettings": "Shape settings", "SSE.Views.RightMenu.txtShapeSettings": "Shape settings",
"SSE.Views.RightMenu.txtSignatureSettings": "Signature Settings",
"SSE.Views.RightMenu.txtSparklineSettings": "Sparkline Settings", "SSE.Views.RightMenu.txtSparklineSettings": "Sparkline Settings",
"SSE.Views.RightMenu.txtTableSettings": "Table settings", "SSE.Views.RightMenu.txtTableSettings": "Table settings",
"SSE.Views.RightMenu.txtTextArtSettings": "Text Art settings", "SSE.Views.RightMenu.txtTextArtSettings": "Text Art settings",
@ -1461,6 +1521,21 @@
"SSE.Views.ShapeSettingsAdvanced.textTop": "Top", "SSE.Views.ShapeSettingsAdvanced.textTop": "Top",
"SSE.Views.ShapeSettingsAdvanced.textWeightArrows": "Weights & Arrows", "SSE.Views.ShapeSettingsAdvanced.textWeightArrows": "Weights & Arrows",
"SSE.Views.ShapeSettingsAdvanced.textWidth": "Width", "SSE.Views.ShapeSettingsAdvanced.textWidth": "Width",
"SSE.Views.SignatureSettings.notcriticalErrorTitle": "Warning",
"SSE.Views.SignatureSettings.strDelete": "Remove Signature",
"SSE.Views.SignatureSettings.strDetails": "Signature Details",
"SSE.Views.SignatureSettings.strInvalid": "Invalid signatures",
"SSE.Views.SignatureSettings.strRequested": "Requested signatures",
"SSE.Views.SignatureSettings.strSetup": "Signature Setup",
"SSE.Views.SignatureSettings.strSign": "Sign",
"SSE.Views.SignatureSettings.strSignature": "Signature",
"SSE.Views.SignatureSettings.strSigner": "Signer",
"SSE.Views.SignatureSettings.strValid": "Valid signatures",
"SSE.Views.SignatureSettings.txtContinueEditing": "Edit anyway",
"SSE.Views.SignatureSettings.txtEditWarning": "Editing will remove the signatures from the spreadsheet.<br>Are you sure you want to continue?",
"SSE.Views.SignatureSettings.txtRequestedSignatures": "This spreadsheet needs to be signed.",
"SSE.Views.SignatureSettings.txtSigned": "Valid signatures has been added to the spreadsheet. The spreadsheet is protected from editing.",
"SSE.Views.SignatureSettings.txtSignedInvalid": "Some of the digital signatures in spreadsheet are invalid or could not be verified. The spreadsheet is protected from editing.",
"SSE.Views.Statusbar.CopyDialog.itemCopyToEnd": "(Copy to end)", "SSE.Views.Statusbar.CopyDialog.itemCopyToEnd": "(Copy to end)",
"SSE.Views.Statusbar.CopyDialog.itemMoveToEnd": "(Move to end)", "SSE.Views.Statusbar.CopyDialog.itemMoveToEnd": "(Move to end)",
"SSE.Views.Statusbar.CopyDialog.textCopyBefore": "Copy before sheet", "SSE.Views.Statusbar.CopyDialog.textCopyBefore": "Copy before sheet",
@ -1653,8 +1728,13 @@
"SSE.Views.Toolbar.textTabFile": "File", "SSE.Views.Toolbar.textTabFile": "File",
"SSE.Views.Toolbar.textTabHome": "Home", "SSE.Views.Toolbar.textTabHome": "Home",
"SSE.Views.Toolbar.textTabInsert": "Insert", "SSE.Views.Toolbar.textTabInsert": "Insert",
"SSE.Views.Toolbar.textTabProtect": "Protection",
"SSE.Views.Toolbar.textTopBorders": "Top Borders", "SSE.Views.Toolbar.textTopBorders": "Top Borders",
"SSE.Views.Toolbar.textUnderline": "Underline", "SSE.Views.Toolbar.textUnderline": "Underline",
"SSE.Views.Toolbar.textStrikeout": "Strikeout",
"SSE.Views.Toolbar.textSuperscript": "Superscript",
"SSE.Views.Toolbar.textSubscript": "Subscript",
"SSE.Views.Toolbar.textSubSuperscript": "Subscript/Superscript",
"SSE.Views.Toolbar.textWinLossSpark": "Win/Loss", "SSE.Views.Toolbar.textWinLossSpark": "Win/Loss",
"SSE.Views.Toolbar.textZoom": "Zoom", "SSE.Views.Toolbar.textZoom": "Zoom",
"SSE.Views.Toolbar.tipAdvSettings": "Advanced settings", "SSE.Views.Toolbar.tipAdvSettings": "Advanced settings",

View file

@ -102,16 +102,59 @@
"Common.Views.OpenDialog.txtTab": "Tabulazione", "Common.Views.OpenDialog.txtTab": "Tabulazione",
"Common.Views.OpenDialog.txtTitle": "Seleziona parametri %1", "Common.Views.OpenDialog.txtTitle": "Seleziona parametri %1",
"Common.Views.OpenDialog.txtTitleProtected": "File protetto", "Common.Views.OpenDialog.txtTitleProtected": "File protetto",
"Common.Views.PasswordDialog.cancelButtonText": "Annulla",
"Common.Views.PasswordDialog.okButtonText": "OK",
"Common.Views.PasswordDialog.txtDescription": "É richiesta la password per aprire il documento",
"Common.Views.PasswordDialog.txtIncorrectPwd": "la password di conferma non corrisponde",
"Common.Views.PasswordDialog.txtPassword": "Password",
"Common.Views.PasswordDialog.txtRepeat": "Ripeti password",
"Common.Views.PasswordDialog.txtTitle": "Imposta password",
"Common.Views.PluginDlg.textLoading": "Caricamento", "Common.Views.PluginDlg.textLoading": "Caricamento",
"Common.Views.Plugins.groupCaption": "Componenti Aggiuntivi", "Common.Views.Plugins.groupCaption": "Componenti Aggiuntivi",
"Common.Views.Plugins.strPlugins": "Plugin", "Common.Views.Plugins.strPlugins": "Plugin",
"Common.Views.Plugins.textLoading": "Caricamento", "Common.Views.Plugins.textLoading": "Caricamento",
"Common.Views.Plugins.textStart": "Avvio", "Common.Views.Plugins.textStart": "Avvio",
"Common.Views.Plugins.textStop": "Termina", "Common.Views.Plugins.textStop": "Termina",
"Common.Views.Protection.hintAddPwd": "Crittografa con password",
"Common.Views.Protection.hintPwd": "Modifica o rimuovi password",
"Common.Views.Protection.hintSignature": "Aggiungi firma digitale o riga di firma",
"Common.Views.Protection.txtAddPwd": "Aggiungi password",
"Common.Views.Protection.txtChangePwd": "Modifica password",
"Common.Views.Protection.txtDeletePwd": "Elimina password",
"Common.Views.Protection.txtEncrypt": "Crittografare",
"Common.Views.Protection.txtInvisibleSignature": "Aggiungi firma digitale",
"Common.Views.Protection.txtSignature": "Firma",
"Common.Views.Protection.txtSignatureLine": "Riga della firma",
"Common.Views.RenameDialog.cancelButtonText": "Annulla", "Common.Views.RenameDialog.cancelButtonText": "Annulla",
"Common.Views.RenameDialog.okButtonText": "OK", "Common.Views.RenameDialog.okButtonText": "OK",
"Common.Views.RenameDialog.textName": "Nome file", "Common.Views.RenameDialog.textName": "Nome file",
"Common.Views.RenameDialog.txtInvalidName": "Il nome del file non può contenere nessuno dei seguenti caratteri:", "Common.Views.RenameDialog.txtInvalidName": "Il nome del file non può contenere nessuno dei seguenti caratteri:",
"Common.Views.SignDialog.cancelButtonText": "Annulla",
"Common.Views.SignDialog.okButtonText": "OK",
"Common.Views.SignDialog.textBold": "Grassetto",
"Common.Views.SignDialog.textCertificate": "Certificato",
"Common.Views.SignDialog.textChange": "Cambia",
"Common.Views.SignDialog.textInputName": "Inserisci nome firmatario",
"Common.Views.SignDialog.textItalic": "Corsivo",
"Common.Views.SignDialog.textPurpose": "Motivo della firma del documento",
"Common.Views.SignDialog.textSelectImage": "Seleziona Immagine",
"Common.Views.SignDialog.textSignature": "La firma appare come",
"Common.Views.SignDialog.textTitle": "Firma Documento",
"Common.Views.SignDialog.textUseImage": "oppure clicca 'Scegli immagine' per utilizzare un'immagine come firma",
"Common.Views.SignDialog.textValid": "Valido dal %1 al %2",
"Common.Views.SignDialog.tipFontName": "Nome carattere",
"Common.Views.SignDialog.tipFontSize": "Dimensione carattere",
"Common.Views.SignSettingsDialog.cancelButtonText": "Annulla",
"Common.Views.SignSettingsDialog.okButtonText": "OK",
"Common.Views.SignSettingsDialog.textAllowComment": "Consenti al firmatario di aggiungere commenti nella finestra di firma",
"Common.Views.SignSettingsDialog.textInfo": "Informazioni sul Firmatario",
"Common.Views.SignSettingsDialog.textInfoEmail": "E-mail",
"Common.Views.SignSettingsDialog.textInfoName": "Nome",
"Common.Views.SignSettingsDialog.textInfoTitle": "Titolo del Firmatario",
"Common.Views.SignSettingsDialog.textInstructions": "Istruzioni per i Firmatari",
"Common.Views.SignSettingsDialog.textShowDate": "Mostra la data nella riga di Firma",
"Common.Views.SignSettingsDialog.textTitle": "Impostazioni della Firma",
"Common.Views.SignSettingsDialog.txtEmpty": "Campo obbligatorio",
"SSE.Controllers.DocumentHolder.alignmentText": "Allineamento", "SSE.Controllers.DocumentHolder.alignmentText": "Allineamento",
"SSE.Controllers.DocumentHolder.centerText": "Al centro", "SSE.Controllers.DocumentHolder.centerText": "Al centro",
"SSE.Controllers.DocumentHolder.deleteColumnText": "Elimina colonna", "SSE.Controllers.DocumentHolder.deleteColumnText": "Elimina colonna",
@ -250,10 +293,10 @@
"SSE.Controllers.Main.convertationTimeoutText": "E' stato superato il tempo limite della conversione.", "SSE.Controllers.Main.convertationTimeoutText": "E' stato superato il tempo limite della conversione.",
"SSE.Controllers.Main.criticalErrorExtText": "Clicca su \"OK\" per ritornare all'elenco dei documenti.", "SSE.Controllers.Main.criticalErrorExtText": "Clicca su \"OK\" per ritornare all'elenco dei documenti.",
"SSE.Controllers.Main.criticalErrorTitle": "Errore", "SSE.Controllers.Main.criticalErrorTitle": "Errore",
"SSE.Controllers.Main.defaultTitleText": "ONLYOFFICE Spreadsheet Editor", "SSE.Controllers.Main.defaultTitleText": "Editor dei fogli di calcolo ONLYOFFICE® ",
"SSE.Controllers.Main.downloadErrorText": "Download fallito.", "SSE.Controllers.Main.downloadErrorText": "Download fallito.",
"SSE.Controllers.Main.downloadTextText": "Download del foglio elettronico in corso...", "SSE.Controllers.Main.downloadTextText": "Download del foglio di calcolo in corso...",
"SSE.Controllers.Main.downloadTitleText": "Download del foglio elettronico", "SSE.Controllers.Main.downloadTitleText": "Download del foglio di calcolo",
"SSE.Controllers.Main.errorAccessDeny": "Stai tentando di eseguire un'azione per la quale non disponi di permessi sufficienti.<br>Si prega di contattare l'amministratore del Server dei Documenti.", "SSE.Controllers.Main.errorAccessDeny": "Stai tentando di eseguire un'azione per la quale non disponi di permessi sufficienti.<br>Si prega di contattare l'amministratore del Server dei Documenti.",
"SSE.Controllers.Main.errorArgsRange": "Un errore nella formula inserita.<br>È stato utilizzato un intervallo di argomenti non corretto.", "SSE.Controllers.Main.errorArgsRange": "Un errore nella formula inserita.<br>È stato utilizzato un intervallo di argomenti non corretto.",
"SSE.Controllers.Main.errorAutoFilterChange": "Operazione non consentita. Si sta tentando di spostare le celle nella tabella del tuo foglio di lavoro.", "SSE.Controllers.Main.errorAutoFilterChange": "Operazione non consentita. Si sta tentando di spostare le celle nella tabella del tuo foglio di lavoro.",
@ -312,30 +355,30 @@
"SSE.Controllers.Main.loadImagesTitleText": "Caricamento delle immagini", "SSE.Controllers.Main.loadImagesTitleText": "Caricamento delle immagini",
"SSE.Controllers.Main.loadImageTextText": "Caricamento dell'immagine in corso...", "SSE.Controllers.Main.loadImageTextText": "Caricamento dell'immagine in corso...",
"SSE.Controllers.Main.loadImageTitleText": "Caricamento dell'immagine", "SSE.Controllers.Main.loadImageTitleText": "Caricamento dell'immagine",
"SSE.Controllers.Main.loadingDocumentTitleText": "Caricamento del foglio elettronico", "SSE.Controllers.Main.loadingDocumentTitleText": "Caricamento del foglio di calcolo",
"SSE.Controllers.Main.notcriticalErrorTitle": "Avviso", "SSE.Controllers.Main.notcriticalErrorTitle": "Avviso",
"SSE.Controllers.Main.openErrorText": "Si è verificato un errore all'apertura del file", "SSE.Controllers.Main.openErrorText": "Si è verificato un errore all'apertura del file",
"SSE.Controllers.Main.openTextText": "Apertura del foglio elettronico in corso...", "SSE.Controllers.Main.openTextText": "Apertura del foglio di calcolo in corso...",
"SSE.Controllers.Main.openTitleText": "Apertura del foglio elettronico", "SSE.Controllers.Main.openTitleText": "Apertura del foglio di calcolo",
"SSE.Controllers.Main.pastInMergeAreaError": "Impossibile modificare la parte della cella unita", "SSE.Controllers.Main.pastInMergeAreaError": "Impossibile modificare la parte della cella unita",
"SSE.Controllers.Main.printTextText": "Stampa del foglio elettronico in corso...", "SSE.Controllers.Main.printTextText": "Stampa del foglio di calcolo in corso...",
"SSE.Controllers.Main.printTitleText": "Stampa del foglio elettronico", "SSE.Controllers.Main.printTitleText": "Stampa in corso del foglio di calcolo",
"SSE.Controllers.Main.reloadButtonText": "Ricarica pagina", "SSE.Controllers.Main.reloadButtonText": "Ricarica pagina",
"SSE.Controllers.Main.requestEditFailedMessageText": "Qualcuno sta modificando questo documento. Si prega di provare più tardi.", "SSE.Controllers.Main.requestEditFailedMessageText": "Qualcuno sta modificando questo documento. Si prega di provare più tardi.",
"SSE.Controllers.Main.requestEditFailedTitleText": "Accesso vietato", "SSE.Controllers.Main.requestEditFailedTitleText": "Accesso vietato",
"SSE.Controllers.Main.saveErrorText": "Si è verificato un errore al salvataggio del file", "SSE.Controllers.Main.saveErrorText": "Si è verificato un errore al salvataggio del file",
"SSE.Controllers.Main.savePreparingText": "Preparazione al salvataggio ", "SSE.Controllers.Main.savePreparingText": "Preparazione al salvataggio ",
"SSE.Controllers.Main.savePreparingTitle": "Preparazione al salvataggio. Si prega di aspettare...", "SSE.Controllers.Main.savePreparingTitle": "Preparazione al salvataggio. Si prega di aspettare...",
"SSE.Controllers.Main.saveTextText": "Salvataggio del foglio elettronico in corso...", "SSE.Controllers.Main.saveTextText": "Salvataggio del foglio di calcolo in corso...",
"SSE.Controllers.Main.saveTitleText": "Salvataggio del foglio elettronico", "SSE.Controllers.Main.saveTitleText": "Salvataggio del foglio di calcolo",
"SSE.Controllers.Main.textAnonymous": "Anonimo", "SSE.Controllers.Main.textAnonymous": "Anonimo",
"SSE.Controllers.Main.textBuyNow": "Visita il sito web", "SSE.Controllers.Main.textBuyNow": "Visita il sito web",
"SSE.Controllers.Main.textCloseTip": "Clicca per chiudere il consiglio", "SSE.Controllers.Main.textCloseTip": "Clicca per chiudere il consiglio",
"SSE.Controllers.Main.textConfirm": "Conferma", "SSE.Controllers.Main.textConfirm": "Conferma",
"SSE.Controllers.Main.textContactUs": "Contatta il reparto vendite.", "SSE.Controllers.Main.textContactUs": "Contatta il reparto vendite.",
"SSE.Controllers.Main.textLoadingDocument": "Caricamento del foglio elettronico", "SSE.Controllers.Main.textLoadingDocument": "Caricamento del foglio di calcolo",
"SSE.Controllers.Main.textNo": "No", "SSE.Controllers.Main.textNo": "No",
"SSE.Controllers.Main.textNoLicenseTitle": "Versione open source di ONLYOFFICE®", "SSE.Controllers.Main.textNoLicenseTitle": "ONLYOFFICE® limite connessione",
"SSE.Controllers.Main.textPleaseWait": "L'operazione può richiedere più tempo. Per favore, attendi...", "SSE.Controllers.Main.textPleaseWait": "L'operazione può richiedere più tempo. Per favore, attendi...",
"SSE.Controllers.Main.textRecalcFormulas": "Calcolo delle formule in corso...", "SSE.Controllers.Main.textRecalcFormulas": "Calcolo delle formule in corso...",
"SSE.Controllers.Main.textShape": "Forma", "SSE.Controllers.Main.textShape": "Forma",
@ -392,7 +435,8 @@
"SSE.Controllers.Main.warnBrowserIE9": "L'applicazione è poco compatibile con IE9. Usa IE10 o più recente", "SSE.Controllers.Main.warnBrowserIE9": "L'applicazione è poco compatibile con IE9. Usa IE10 o più recente",
"SSE.Controllers.Main.warnBrowserZoom": "Le impostazioni correnti di zoom del tuo browser non sono completamente supportate. Per favore, ritorna allo zoom predefinito premendo Ctrl+0.", "SSE.Controllers.Main.warnBrowserZoom": "Le impostazioni correnti di zoom del tuo browser non sono completamente supportate. Per favore, ritorna allo zoom predefinito premendo Ctrl+0.",
"SSE.Controllers.Main.warnLicenseExp": "La tua licenza è scaduta.<br>Si prega di aggiornare la licenza e ricaricare la pagina.", "SSE.Controllers.Main.warnLicenseExp": "La tua licenza è scaduta.<br>Si prega di aggiornare la licenza e ricaricare la pagina.",
"SSE.Controllers.Main.warnNoLicense": "Stai utilizzando una versione open source di ONLYOFFICE®. La versione presenta delle limitazioni per le connessioni simultanee al server dei documenti (20 connessioni alla volta).<br>Per poterne avere di più, considera l'acquisto di una licenza commerciale.", "SSE.Controllers.Main.warnNoLicense": "Questa versione di ONLYOFFICE® Editors presenta delle limitazioni per le connessioni simultanee al server dei documenti.<br>Se necessiti di avere di più, considera l'acquisto di una licenza commerciale.",
"SSE.Controllers.Main.warnNoLicenseUsers": "Questa versione di ONLYOFFICE® Editors presenta delle limitazioni per le connessioni simultanee al server dei documenti.<br>Se necessiti di avere di più, considera l'acquisto di una licenza commerciale.",
"SSE.Controllers.Main.warnProcessRightsChange": "Ci stato negato il diritto alla modifica del file.", "SSE.Controllers.Main.warnProcessRightsChange": "Ci stato negato il diritto alla modifica del file.",
"SSE.Controllers.Print.strAllSheets": "Tutti i fogli", "SSE.Controllers.Print.strAllSheets": "Tutti i fogli",
"SSE.Controllers.Print.textWarning": "Avviso", "SSE.Controllers.Print.textWarning": "Avviso",
@ -796,7 +840,7 @@
"SSE.Views.ChartSettings.textArea": "Area", "SSE.Views.ChartSettings.textArea": "Area",
"SSE.Views.ChartSettings.textBar": "Barra", "SSE.Views.ChartSettings.textBar": "Barra",
"SSE.Views.ChartSettings.textBorderSizeErr": "Il valore inserito non è corretto.<br>Inserisci un valore tra 0 pt e 1584 pt.", "SSE.Views.ChartSettings.textBorderSizeErr": "Il valore inserito non è corretto.<br>Inserisci un valore tra 0 pt e 1584 pt.",
"SSE.Views.ChartSettings.textChartType": "Cambia tipo grafico", "SSE.Views.ChartSettings.textChartType": "Cambia tipo di grafico",
"SSE.Views.ChartSettings.textColumn": "Colonna", "SSE.Views.ChartSettings.textColumn": "Colonna",
"SSE.Views.ChartSettings.textColumnSpark": "Colonna", "SSE.Views.ChartSettings.textColumnSpark": "Colonna",
"SSE.Views.ChartSettings.textEditData": "Modifica Dati e Posizione", "SSE.Views.ChartSettings.textEditData": "Modifica Dati e Posizione",
@ -1001,6 +1045,10 @@
"SSE.Views.DocumentHolder.selectDataText": "Dati colonna", "SSE.Views.DocumentHolder.selectDataText": "Dati colonna",
"SSE.Views.DocumentHolder.selectRowText": "Riga", "SSE.Views.DocumentHolder.selectRowText": "Riga",
"SSE.Views.DocumentHolder.selectTableText": "Tabella", "SSE.Views.DocumentHolder.selectTableText": "Tabella",
"SSE.Views.DocumentHolder.strDelete": "Rimuovi Firma",
"SSE.Views.DocumentHolder.strDetails": "Dettagli firma",
"SSE.Views.DocumentHolder.strSetup": "Impostazioni firma",
"SSE.Views.DocumentHolder.strSign": "Firma",
"SSE.Views.DocumentHolder.textArrangeBack": "Porta in secondo piano", "SSE.Views.DocumentHolder.textArrangeBack": "Porta in secondo piano",
"SSE.Views.DocumentHolder.textArrangeBackward": "Porta indietro", "SSE.Views.DocumentHolder.textArrangeBackward": "Porta indietro",
"SSE.Views.DocumentHolder.textArrangeForward": "Porta avanti", "SSE.Views.DocumentHolder.textArrangeForward": "Porta avanti",
@ -1067,26 +1115,27 @@
"SSE.Views.FileMenu.btnCreateNewCaption": "Crea nuovo oggetto", "SSE.Views.FileMenu.btnCreateNewCaption": "Crea nuovo oggetto",
"SSE.Views.FileMenu.btnDownloadCaption": "Scarica in...", "SSE.Views.FileMenu.btnDownloadCaption": "Scarica in...",
"SSE.Views.FileMenu.btnHelpCaption": "Guida...", "SSE.Views.FileMenu.btnHelpCaption": "Guida...",
"SSE.Views.FileMenu.btnInfoCaption": "Informazioni foglio...", "SSE.Views.FileMenu.btnInfoCaption": "Informazioni foglio di calcolo...",
"SSE.Views.FileMenu.btnPrintCaption": "Stampa", "SSE.Views.FileMenu.btnPrintCaption": "Stampa",
"SSE.Views.FileMenu.btnProtectCaption": "Proteggi",
"SSE.Views.FileMenu.btnRecentFilesCaption": "Apri recenti...", "SSE.Views.FileMenu.btnRecentFilesCaption": "Apri recenti...",
"SSE.Views.FileMenu.btnRenameCaption": "Rinomina...", "SSE.Views.FileMenu.btnRenameCaption": "Rinomina...",
"SSE.Views.FileMenu.btnReturnCaption": "Torna al foglio", "SSE.Views.FileMenu.btnReturnCaption": "Torna al foglio di calcolo",
"SSE.Views.FileMenu.btnRightsCaption": "Access Rights...", "SSE.Views.FileMenu.btnRightsCaption": "Access Rights...",
"SSE.Views.FileMenu.btnSaveAsCaption": "Salva con", "SSE.Views.FileMenu.btnSaveAsCaption": "Salva con",
"SSE.Views.FileMenu.btnSaveCaption": "Salva", "SSE.Views.FileMenu.btnSaveCaption": "Salva",
"SSE.Views.FileMenu.btnSettingsCaption": "Impostazioni avanzate...", "SSE.Views.FileMenu.btnSettingsCaption": "Impostazioni avanzate...",
"SSE.Views.FileMenu.btnToEditCaption": "Modifica foglio", "SSE.Views.FileMenu.btnToEditCaption": "Modifica foglio di calcolo",
"SSE.Views.FileMenuPanels.CreateNew.fromBlankText": "Da vuoto", "SSE.Views.FileMenuPanels.CreateNew.fromBlankText": "Da vuoto",
"SSE.Views.FileMenuPanels.CreateNew.fromTemplateText": "Da modello", "SSE.Views.FileMenuPanels.CreateNew.fromTemplateText": "Da modello",
"SSE.Views.FileMenuPanels.CreateNew.newDescriptionText": "Crea un nuovo foglio elettronico vuoto che potrai formattare durante la modifica. O scegli uno dei modelli per creare un foglio elettronico di un certo tipo a quale sono già applicati certi stili.", "SSE.Views.FileMenuPanels.CreateNew.newDescriptionText": "Crea un nuovo foglio di calcolo vuoto che potrai formattare durante la modifica. O scegli uno dei modelli per creare un foglio di calcolo di un certo tipo a quale sono già applicati certi stili.",
"SSE.Views.FileMenuPanels.CreateNew.newDocumentText": "Nuovo foglio elettronico", "SSE.Views.FileMenuPanels.CreateNew.newDocumentText": "Nuovo foglio di calcolo",
"SSE.Views.FileMenuPanels.DocumentInfo.txtAuthor": "Autore", "SSE.Views.FileMenuPanels.DocumentInfo.txtAuthor": "Autore",
"SSE.Views.FileMenuPanels.DocumentInfo.txtBtnAccessRights": "Cambia diritti di accesso", "SSE.Views.FileMenuPanels.DocumentInfo.txtBtnAccessRights": "Cambia diritti di accesso",
"SSE.Views.FileMenuPanels.DocumentInfo.txtDate": "Data di creazione", "SSE.Views.FileMenuPanels.DocumentInfo.txtDate": "Data di creazione",
"SSE.Views.FileMenuPanels.DocumentInfo.txtPlacement": "Percorso", "SSE.Views.FileMenuPanels.DocumentInfo.txtPlacement": "Percorso",
"SSE.Views.FileMenuPanels.DocumentInfo.txtRights": "Persone con diritti", "SSE.Views.FileMenuPanels.DocumentInfo.txtRights": "Persone con diritti",
"SSE.Views.FileMenuPanels.DocumentInfo.txtTitle": "Titolo foglio elettronico", "SSE.Views.FileMenuPanels.DocumentInfo.txtTitle": "Titolo foglio di calcolo",
"SSE.Views.FileMenuPanels.DocumentRights.txtBtnAccessRights": "Cambia diritti di accesso", "SSE.Views.FileMenuPanels.DocumentRights.txtBtnAccessRights": "Cambia diritti di accesso",
"SSE.Views.FileMenuPanels.DocumentRights.txtRights": "Persone con diritti", "SSE.Views.FileMenuPanels.DocumentRights.txtRights": "Persone con diritti",
"SSE.Views.FileMenuPanels.MainSettingsGeneral.okButtonText": "Applica", "SSE.Views.FileMenuPanels.MainSettingsGeneral.okButtonText": "Applica",
@ -1100,6 +1149,7 @@
"SSE.Views.FileMenuPanels.MainSettingsGeneral.strForcesave": "Salva sempre sul server (altrimenti salva sul server alla chiusura del documento)", "SSE.Views.FileMenuPanels.MainSettingsGeneral.strForcesave": "Salva sempre sul server (altrimenti salva sul server alla chiusura del documento)",
"SSE.Views.FileMenuPanels.MainSettingsGeneral.strFuncLocale": "Formula Language", "SSE.Views.FileMenuPanels.MainSettingsGeneral.strFuncLocale": "Formula Language",
"SSE.Views.FileMenuPanels.MainSettingsGeneral.strFuncLocaleEx": "Example: SUM; MIN; MAX; COUNT", "SSE.Views.FileMenuPanels.MainSettingsGeneral.strFuncLocaleEx": "Example: SUM; MIN; MAX; COUNT",
"SSE.Views.FileMenuPanels.MainSettingsGeneral.strInputSogou": "Attiva l'input Sogou Pinyin",
"SSE.Views.FileMenuPanels.MainSettingsGeneral.strLiveComment": "Attivare visualizzazione dei commenti", "SSE.Views.FileMenuPanels.MainSettingsGeneral.strLiveComment": "Attivare visualizzazione dei commenti",
"SSE.Views.FileMenuPanels.MainSettingsGeneral.strRegSettings": "Regional Settings", "SSE.Views.FileMenuPanels.MainSettingsGeneral.strRegSettings": "Regional Settings",
"SSE.Views.FileMenuPanels.MainSettingsGeneral.strRegSettingsEx": "Example: ", "SSE.Views.FileMenuPanels.MainSettingsGeneral.strRegSettingsEx": "Example: ",
@ -1120,6 +1170,7 @@
"SSE.Views.FileMenuPanels.MainSettingsGeneral.txtDe": "Deutsch", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtDe": "Deutsch",
"SSE.Views.FileMenuPanels.MainSettingsGeneral.txtEn": "English", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtEn": "English",
"SSE.Views.FileMenuPanels.MainSettingsGeneral.txtInch": "Pollice", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtInch": "Pollice",
"SSE.Views.FileMenuPanels.MainSettingsGeneral.txtInput": "Input alternativo",
"SSE.Views.FileMenuPanels.MainSettingsGeneral.txtLiveComment": "Visualizzazione dei Commenti", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtLiveComment": "Visualizzazione dei Commenti",
"SSE.Views.FileMenuPanels.MainSettingsGeneral.txtMac": "come OS X", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtMac": "come OS X",
"SSE.Views.FileMenuPanels.MainSettingsGeneral.txtNative": "Nativo", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtNative": "Nativo",
@ -1127,6 +1178,17 @@
"SSE.Views.FileMenuPanels.MainSettingsGeneral.txtPt": "Punto", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtPt": "Punto",
"SSE.Views.FileMenuPanels.MainSettingsGeneral.txtRu": "Russian", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtRu": "Russian",
"SSE.Views.FileMenuPanels.MainSettingsGeneral.txtWin": "come Windows", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtWin": "come Windows",
"SSE.Views.FileMenuPanels.ProtectDoc.notcriticalErrorTitle": "Avviso",
"SSE.Views.FileMenuPanels.ProtectDoc.strEncrypt": "con Password",
"SSE.Views.FileMenuPanels.ProtectDoc.strProtect": "Proteggi foglio di calcolo",
"SSE.Views.FileMenuPanels.ProtectDoc.strSignature": "con Firma",
"SSE.Views.FileMenuPanels.ProtectDoc.txtEdit": "Modifica foglio di calcolo",
"SSE.Views.FileMenuPanels.ProtectDoc.txtEditWarning": "La modifica rimuoverà le firme dal foglio di calcolo.<br>Sei sicuro di voler continuare?",
"SSE.Views.FileMenuPanels.ProtectDoc.txtEncrypted": "Questo foglio di calcolo è protetto con password",
"SSE.Views.FileMenuPanels.ProtectDoc.txtRequestedSignatures": "Questo foglio di calcolo necessita di essere firmato.",
"SSE.Views.FileMenuPanels.ProtectDoc.txtSigned": "Le firme valide sono state aggiunte al foglio di calcolo. Il foglio di calcolo è protetto dalla modifica.",
"SSE.Views.FileMenuPanels.ProtectDoc.txtSignedInvalid": "Alcune delle firme digitali presenti nel foglio di calcolo non sono valide o non possono essere verificate. Il foglio di calcolo è protetto dalla modifica.",
"SSE.Views.FileMenuPanels.ProtectDoc.txtView": "Mostra firme",
"SSE.Views.FileMenuPanels.Settings.txtGeneral": "Generale", "SSE.Views.FileMenuPanels.Settings.txtGeneral": "Generale",
"SSE.Views.FileMenuPanels.Settings.txtPageSettings": "Impostazioni Pagina", "SSE.Views.FileMenuPanels.Settings.txtPageSettings": "Impostazioni Pagina",
"SSE.Views.FormatSettingsDialog.textCancel": "Annulla", "SSE.Views.FormatSettingsDialog.textCancel": "Annulla",
@ -1243,6 +1305,7 @@
"SSE.Views.LeftMenu.tipSearch": "Ricerca", "SSE.Views.LeftMenu.tipSearch": "Ricerca",
"SSE.Views.LeftMenu.tipSupport": "Feedback & Support", "SSE.Views.LeftMenu.tipSupport": "Feedback & Support",
"SSE.Views.LeftMenu.txtDeveloper": "MODALITÀ SVILUPPATORE", "SSE.Views.LeftMenu.txtDeveloper": "MODALITÀ SVILUPPATORE",
"SSE.Views.LeftMenu.txtTrial": "Modalità di prova",
"SSE.Views.MainSettingsPrint.okButtonText": "Salva", "SSE.Views.MainSettingsPrint.okButtonText": "Salva",
"SSE.Views.MainSettingsPrint.strBottom": "In basso", "SSE.Views.MainSettingsPrint.strBottom": "In basso",
"SSE.Views.MainSettingsPrint.strLandscape": "Orizzontale", "SSE.Views.MainSettingsPrint.strLandscape": "Orizzontale",
@ -1374,6 +1437,7 @@
"SSE.Views.RightMenu.txtParagraphSettings": "Impostazioni testo", "SSE.Views.RightMenu.txtParagraphSettings": "Impostazioni testo",
"SSE.Views.RightMenu.txtSettings": "Impostazioni generali", "SSE.Views.RightMenu.txtSettings": "Impostazioni generali",
"SSE.Views.RightMenu.txtShapeSettings": "Impostazioni forma", "SSE.Views.RightMenu.txtShapeSettings": "Impostazioni forma",
"SSE.Views.RightMenu.txtSignatureSettings": "Impostazioni della Firma",
"SSE.Views.RightMenu.txtSparklineSettings": "Impostazioni Sparkline", "SSE.Views.RightMenu.txtSparklineSettings": "Impostazioni Sparkline",
"SSE.Views.RightMenu.txtTableSettings": "Impostazioni tabella", "SSE.Views.RightMenu.txtTableSettings": "Impostazioni tabella",
"SSE.Views.RightMenu.txtTextArtSettings": "Text Art Settings", "SSE.Views.RightMenu.txtTextArtSettings": "Text Art Settings",
@ -1457,6 +1521,20 @@
"SSE.Views.ShapeSettingsAdvanced.textTop": "In alto", "SSE.Views.ShapeSettingsAdvanced.textTop": "In alto",
"SSE.Views.ShapeSettingsAdvanced.textWeightArrows": "Spessori e frecce", "SSE.Views.ShapeSettingsAdvanced.textWeightArrows": "Spessori e frecce",
"SSE.Views.ShapeSettingsAdvanced.textWidth": "Larghezza", "SSE.Views.ShapeSettingsAdvanced.textWidth": "Larghezza",
"SSE.Views.SignatureSettings.notcriticalErrorTitle": "Avviso",
"SSE.Views.SignatureSettings.strDelete": "Rimuovi Firma",
"SSE.Views.SignatureSettings.strDetails": "Dettagli firma",
"SSE.Views.SignatureSettings.strInvalid": "Firme non valide",
"SSE.Views.SignatureSettings.strRequested": "Firme Richieste",
"SSE.Views.SignatureSettings.strSetup": "Impostazioni firma",
"SSE.Views.SignatureSettings.strSign": "Firma",
"SSE.Views.SignatureSettings.strSignature": "Firma",
"SSE.Views.SignatureSettings.strValid": "Firme valide",
"SSE.Views.SignatureSettings.txtContinueEditing": "Modifica comunque",
"SSE.Views.SignatureSettings.txtEditWarning": "La modifica rimuoverà le firme dal foglio di calcolo.<br>Sei sicuro di voler continuare?",
"SSE.Views.SignatureSettings.txtRequestedSignatures": "Questo foglio di calcolo necessita di essere firmato.",
"SSE.Views.SignatureSettings.txtSigned": "Le firme valide sono state aggiunte al foglio di calcolo. Il foglio di calcolo è protetto dalla modifica.",
"SSE.Views.SignatureSettings.txtSignedInvalid": "Alcune delle firme digitali presenti nel foglio di calcolo non sono valide o non possono essere verificate. Il foglio di calcolo è protetto dalla modifica.",
"SSE.Views.Statusbar.CopyDialog.itemCopyToEnd": "(Copia alla fine)", "SSE.Views.Statusbar.CopyDialog.itemCopyToEnd": "(Copia alla fine)",
"SSE.Views.Statusbar.CopyDialog.itemMoveToEnd": "(Sposta alla fine)", "SSE.Views.Statusbar.CopyDialog.itemMoveToEnd": "(Sposta alla fine)",
"SSE.Views.Statusbar.CopyDialog.textCopyBefore": "Copia prima del foglio", "SSE.Views.Statusbar.CopyDialog.textCopyBefore": "Copia prima del foglio",
@ -1649,6 +1727,7 @@
"SSE.Views.Toolbar.textTabFile": "File", "SSE.Views.Toolbar.textTabFile": "File",
"SSE.Views.Toolbar.textTabHome": "Home", "SSE.Views.Toolbar.textTabHome": "Home",
"SSE.Views.Toolbar.textTabInsert": "Inserisci", "SSE.Views.Toolbar.textTabInsert": "Inserisci",
"SSE.Views.Toolbar.textTabProtect": "Protezione",
"SSE.Views.Toolbar.textTopBorders": "Bordi superiori", "SSE.Views.Toolbar.textTopBorders": "Bordi superiori",
"SSE.Views.Toolbar.textUnderline": "Sottolineato", "SSE.Views.Toolbar.textUnderline": "Sottolineato",
"SSE.Views.Toolbar.textWinLossSpark": "Vinci/Perdi", "SSE.Views.Toolbar.textWinLossSpark": "Vinci/Perdi",

View file

@ -102,16 +102,59 @@
"Common.Views.OpenDialog.txtTab": "Табуляция", "Common.Views.OpenDialog.txtTab": "Табуляция",
"Common.Views.OpenDialog.txtTitle": "Выбрать параметры %1", "Common.Views.OpenDialog.txtTitle": "Выбрать параметры %1",
"Common.Views.OpenDialog.txtTitleProtected": "Защищенный файл", "Common.Views.OpenDialog.txtTitleProtected": "Защищенный файл",
"Common.Views.PasswordDialog.cancelButtonText": "Отмена",
"Common.Views.PasswordDialog.okButtonText": "OK",
"Common.Views.PasswordDialog.txtDescription": "Для открытия этого документа требуется пароль",
"Common.Views.PasswordDialog.txtIncorrectPwd": "Пароль и его подтверждение не совпадают",
"Common.Views.PasswordDialog.txtPassword": "Пароль",
"Common.Views.PasswordDialog.txtRepeat": "Повторить пароль",
"Common.Views.PasswordDialog.txtTitle": "Установка пароля",
"Common.Views.PluginDlg.textLoading": "Загрузка", "Common.Views.PluginDlg.textLoading": "Загрузка",
"Common.Views.Plugins.groupCaption": "Плагины", "Common.Views.Plugins.groupCaption": "Плагины",
"Common.Views.Plugins.strPlugins": "Плагины", "Common.Views.Plugins.strPlugins": "Плагины",
"Common.Views.Plugins.textLoading": "Загрузка", "Common.Views.Plugins.textLoading": "Загрузка",
"Common.Views.Plugins.textStart": "Запустить", "Common.Views.Plugins.textStart": "Запустить",
"Common.Views.Plugins.textStop": "Остановить", "Common.Views.Plugins.textStop": "Остановить",
"Common.Views.Protection.hintAddPwd": "Зашифровать с помощью пароля",
"Common.Views.Protection.hintPwd": "Изменить или удалить пароль",
"Common.Views.Protection.hintSignature": "Добавить цифровую подпись или строку подписи",
"Common.Views.Protection.txtAddPwd": "Добавить пароль",
"Common.Views.Protection.txtChangePwd": "Изменить пароль",
"Common.Views.Protection.txtDeletePwd": "Удалить пароль",
"Common.Views.Protection.txtEncrypt": "Шифровать",
"Common.Views.Protection.txtInvisibleSignature": "Добавить цифровую подпись",
"Common.Views.Protection.txtSignature": "Подпись",
"Common.Views.Protection.txtSignatureLine": "Строка подписи",
"Common.Views.RenameDialog.cancelButtonText": "Отмена", "Common.Views.RenameDialog.cancelButtonText": "Отмена",
"Common.Views.RenameDialog.okButtonText": "Ok", "Common.Views.RenameDialog.okButtonText": "Ok",
"Common.Views.RenameDialog.textName": "Имя файла", "Common.Views.RenameDialog.textName": "Имя файла",
"Common.Views.RenameDialog.txtInvalidName": "Имя файла не должно содержать следующих символов: ", "Common.Views.RenameDialog.txtInvalidName": "Имя файла не должно содержать следующих символов: ",
"Common.Views.SignDialog.cancelButtonText": "Отмена",
"Common.Views.SignDialog.okButtonText": "Ok",
"Common.Views.SignDialog.textBold": "Жирный",
"Common.Views.SignDialog.textCertificate": "Сертификат",
"Common.Views.SignDialog.textChange": "Изменить",
"Common.Views.SignDialog.textInputName": "Введите имя подписывающего",
"Common.Views.SignDialog.textItalic": "Курсив",
"Common.Views.SignDialog.textPurpose": "Цель подписания документа",
"Common.Views.SignDialog.textSelectImage": "Выбрать изображение",
"Common.Views.SignDialog.textSignature": "Как выглядит подпись:",
"Common.Views.SignDialog.textTitle": "Подписание документа",
"Common.Views.SignDialog.textUseImage": "или нажмите 'Выбрать изображение', чтобы использовать изображение в качестве подписи",
"Common.Views.SignDialog.textValid": "Действителен с %1 по %2",
"Common.Views.SignDialog.tipFontName": "Шрифт",
"Common.Views.SignDialog.tipFontSize": "Размер шрифта",
"Common.Views.SignSettingsDialog.cancelButtonText": "Отмена",
"Common.Views.SignSettingsDialog.okButtonText": "Ok",
"Common.Views.SignSettingsDialog.textAllowComment": "Разрешить подписывающему добавлять примечания в окне подписи",
"Common.Views.SignSettingsDialog.textInfo": "Сведения о подписывающем",
"Common.Views.SignSettingsDialog.textInfoEmail": "Адрес электронной почты",
"Common.Views.SignSettingsDialog.textInfoName": "Имя",
"Common.Views.SignSettingsDialog.textInfoTitle": "Должность подписывающего",
"Common.Views.SignSettingsDialog.textInstructions": "Инструкции для подписывающего",
"Common.Views.SignSettingsDialog.textShowDate": "Показывать дату подписи в строке подписи",
"Common.Views.SignSettingsDialog.textTitle": "Настройка подписи",
"Common.Views.SignSettingsDialog.txtEmpty": "Это поле необходимо заполнить",
"SSE.Controllers.DocumentHolder.alignmentText": "Выравнивание", "SSE.Controllers.DocumentHolder.alignmentText": "Выравнивание",
"SSE.Controllers.DocumentHolder.centerText": "По центру", "SSE.Controllers.DocumentHolder.centerText": "По центру",
"SSE.Controllers.DocumentHolder.deleteColumnText": "Удалить столбец", "SSE.Controllers.DocumentHolder.deleteColumnText": "Удалить столбец",
@ -393,6 +436,7 @@
"SSE.Controllers.Main.warnBrowserZoom": "Текущее значение масштаба страницы в браузере поддерживается не полностью. Вернитесь к масштабу по умолчанию, нажав Ctrl+0", "SSE.Controllers.Main.warnBrowserZoom": "Текущее значение масштаба страницы в браузере поддерживается не полностью. Вернитесь к масштабу по умолчанию, нажав Ctrl+0",
"SSE.Controllers.Main.warnLicenseExp": "Истек срок действия лицензии.<br>Обновите лицензию, а затем обновите страницу.", "SSE.Controllers.Main.warnLicenseExp": "Истек срок действия лицензии.<br>Обновите лицензию, а затем обновите страницу.",
"SSE.Controllers.Main.warnNoLicense": "Эта версия редакторов ONLYOFFICE имеет некоторые ограничения по количеству одновременных подключений к серверу документов.<br>Если требуется больше, рассмотрите вопрос об обновлении текущей лицензии или покупке коммерческой лицензии.", "SSE.Controllers.Main.warnNoLicense": "Эта версия редакторов ONLYOFFICE имеет некоторые ограничения по количеству одновременных подключений к серверу документов.<br>Если требуется больше, рассмотрите вопрос об обновлении текущей лицензии или покупке коммерческой лицензии.",
"SSE.Controllers.Main.warnNoLicenseUsers": "Эта версия редакторов ONLYOFFICE имеет некоторые ограничения по числу одновременно работающих пользователей.<br>Если требуется больше, рассмотрите вопрос об обновлении текущей лицензии или покупке коммерческой лицензии.",
"SSE.Controllers.Main.warnProcessRightsChange": "Вам было отказано в праве на редактирование этого файла.", "SSE.Controllers.Main.warnProcessRightsChange": "Вам было отказано в праве на редактирование этого файла.",
"SSE.Controllers.Print.strAllSheets": "Все листы", "SSE.Controllers.Print.strAllSheets": "Все листы",
"SSE.Controllers.Print.textWarning": "Предупреждение", "SSE.Controllers.Print.textWarning": "Предупреждение",
@ -1001,6 +1045,10 @@
"SSE.Views.DocumentHolder.selectDataText": "Данные столбцов", "SSE.Views.DocumentHolder.selectDataText": "Данные столбцов",
"SSE.Views.DocumentHolder.selectRowText": "Строку", "SSE.Views.DocumentHolder.selectRowText": "Строку",
"SSE.Views.DocumentHolder.selectTableText": "Таблицу", "SSE.Views.DocumentHolder.selectTableText": "Таблицу",
"SSE.Views.DocumentHolder.strDelete": "Удалить подпись",
"SSE.Views.DocumentHolder.strDetails": "Состав подписи",
"SSE.Views.DocumentHolder.strSetup": "Настройка подписи",
"SSE.Views.DocumentHolder.strSign": "Подписать",
"SSE.Views.DocumentHolder.textArrangeBack": "Перенести на задний план", "SSE.Views.DocumentHolder.textArrangeBack": "Перенести на задний план",
"SSE.Views.DocumentHolder.textArrangeBackward": "Перенести назад", "SSE.Views.DocumentHolder.textArrangeBackward": "Перенести назад",
"SSE.Views.DocumentHolder.textArrangeForward": "Перенести вперед", "SSE.Views.DocumentHolder.textArrangeForward": "Перенести вперед",
@ -1069,6 +1117,7 @@
"SSE.Views.FileMenu.btnHelpCaption": "Справка...", "SSE.Views.FileMenu.btnHelpCaption": "Справка...",
"SSE.Views.FileMenu.btnInfoCaption": "Сведения о таблице...", "SSE.Views.FileMenu.btnInfoCaption": "Сведения о таблице...",
"SSE.Views.FileMenu.btnPrintCaption": "Печать", "SSE.Views.FileMenu.btnPrintCaption": "Печать",
"SSE.Views.FileMenu.btnProtectCaption": "Защитить",
"SSE.Views.FileMenu.btnRecentFilesCaption": "Открыть последние...", "SSE.Views.FileMenu.btnRecentFilesCaption": "Открыть последние...",
"SSE.Views.FileMenu.btnRenameCaption": "Переименовать...", "SSE.Views.FileMenu.btnRenameCaption": "Переименовать...",
"SSE.Views.FileMenu.btnReturnCaption": "Вернуться к таблице", "SSE.Views.FileMenu.btnReturnCaption": "Вернуться к таблице",
@ -1129,6 +1178,17 @@
"SSE.Views.FileMenuPanels.MainSettingsGeneral.txtPt": "Пункт", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtPt": "Пункт",
"SSE.Views.FileMenuPanels.MainSettingsGeneral.txtRu": "Русский", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtRu": "Русский",
"SSE.Views.FileMenuPanels.MainSettingsGeneral.txtWin": "как Windows", "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtWin": "как Windows",
"SSE.Views.FileMenuPanels.ProtectDoc.notcriticalErrorTitle": "Внимание",
"SSE.Views.FileMenuPanels.ProtectDoc.strEncrypt": "C помощью пароля",
"SSE.Views.FileMenuPanels.ProtectDoc.strProtect": "Защитить электронную таблицу",
"SSE.Views.FileMenuPanels.ProtectDoc.strSignature": "С помощью подписи",
"SSE.Views.FileMenuPanels.ProtectDoc.txtEdit": "Редактировать таблицу",
"SSE.Views.FileMenuPanels.ProtectDoc.txtEditWarning": "При редактировании из электронной таблицы будут удалены подписи.<br>Вы действительно хотите продолжить?",
"SSE.Views.FileMenuPanels.ProtectDoc.txtEncrypted": "Эта электронная таблица защищена паролем",
"SSE.Views.FileMenuPanels.ProtectDoc.txtRequestedSignatures": "Эту таблицу требуется подписать.",
"SSE.Views.FileMenuPanels.ProtectDoc.txtSigned": "В электронную таблицу добавлены действительные подписи. Таблица защищена от редактирования.",
"SSE.Views.FileMenuPanels.ProtectDoc.txtSignedInvalid": "Некоторые из цифровых подписей в электронной таблице недействительны или их нельзя проверить. Таблица защищена от редактирования.",
"SSE.Views.FileMenuPanels.ProtectDoc.txtView": "Просмотр подписей",
"SSE.Views.FileMenuPanels.Settings.txtGeneral": "Общие", "SSE.Views.FileMenuPanels.Settings.txtGeneral": "Общие",
"SSE.Views.FileMenuPanels.Settings.txtPageSettings": "Параметры страницы", "SSE.Views.FileMenuPanels.Settings.txtPageSettings": "Параметры страницы",
"SSE.Views.FormatSettingsDialog.textCancel": "Отмена", "SSE.Views.FormatSettingsDialog.textCancel": "Отмена",
@ -1377,6 +1437,7 @@
"SSE.Views.RightMenu.txtParagraphSettings": "Параметры текста", "SSE.Views.RightMenu.txtParagraphSettings": "Параметры текста",
"SSE.Views.RightMenu.txtSettings": "Общие настройки", "SSE.Views.RightMenu.txtSettings": "Общие настройки",
"SSE.Views.RightMenu.txtShapeSettings": "Параметры фигуры", "SSE.Views.RightMenu.txtShapeSettings": "Параметры фигуры",
"SSE.Views.RightMenu.txtSignatureSettings": "Настройка подписи",
"SSE.Views.RightMenu.txtSparklineSettings": "Параметры спарклайна", "SSE.Views.RightMenu.txtSparklineSettings": "Параметры спарклайна",
"SSE.Views.RightMenu.txtTableSettings": "Параметры таблицы", "SSE.Views.RightMenu.txtTableSettings": "Параметры таблицы",
"SSE.Views.RightMenu.txtTextArtSettings": "Параметры объектов Text Art", "SSE.Views.RightMenu.txtTextArtSettings": "Параметры объектов Text Art",
@ -1460,6 +1521,20 @@
"SSE.Views.ShapeSettingsAdvanced.textTop": "Сверху", "SSE.Views.ShapeSettingsAdvanced.textTop": "Сверху",
"SSE.Views.ShapeSettingsAdvanced.textWeightArrows": "Линии и стрелки", "SSE.Views.ShapeSettingsAdvanced.textWeightArrows": "Линии и стрелки",
"SSE.Views.ShapeSettingsAdvanced.textWidth": "Ширина", "SSE.Views.ShapeSettingsAdvanced.textWidth": "Ширина",
"SSE.Views.SignatureSettings.notcriticalErrorTitle": "Внимание",
"SSE.Views.SignatureSettings.strDelete": "Удалить подпись",
"SSE.Views.SignatureSettings.strDetails": "Состав подписи",
"SSE.Views.SignatureSettings.strInvalid": "Недействительные подписи",
"SSE.Views.SignatureSettings.strRequested": "Запрошенные подписи",
"SSE.Views.SignatureSettings.strSetup": "Настройка подписи",
"SSE.Views.SignatureSettings.strSign": "Подписать",
"SSE.Views.SignatureSettings.strSignature": "Подпись",
"SSE.Views.SignatureSettings.strValid": "Действительные подписи",
"SSE.Views.SignatureSettings.txtContinueEditing": "Все равно редактировать",
"SSE.Views.SignatureSettings.txtEditWarning": "При редактировании из электронной таблицы будут удалены подписи.<br>Вы действительно хотите продолжить?",
"SSE.Views.SignatureSettings.txtRequestedSignatures": "Эту таблицу требуется подписать.",
"SSE.Views.SignatureSettings.txtSigned": "В электронную таблицу добавлены действительные подписи. Таблица защищена от редактирования.",
"SSE.Views.SignatureSettings.txtSignedInvalid": "Некоторые из цифровых подписей в электронной таблице недействительны или их нельзя проверить. Таблица защищена от редактирования.",
"SSE.Views.Statusbar.CopyDialog.itemCopyToEnd": "(Скопировать в конец)", "SSE.Views.Statusbar.CopyDialog.itemCopyToEnd": "(Скопировать в конец)",
"SSE.Views.Statusbar.CopyDialog.itemMoveToEnd": "(Переместить в конец)", "SSE.Views.Statusbar.CopyDialog.itemMoveToEnd": "(Переместить в конец)",
"SSE.Views.Statusbar.CopyDialog.textCopyBefore": "Скопировать перед листом", "SSE.Views.Statusbar.CopyDialog.textCopyBefore": "Скопировать перед листом",
@ -1652,6 +1727,7 @@
"SSE.Views.Toolbar.textTabFile": "Файл", "SSE.Views.Toolbar.textTabFile": "Файл",
"SSE.Views.Toolbar.textTabHome": "Главная", "SSE.Views.Toolbar.textTabHome": "Главная",
"SSE.Views.Toolbar.textTabInsert": "Вставка", "SSE.Views.Toolbar.textTabInsert": "Вставка",
"SSE.Views.Toolbar.textTabProtect": "Защита",
"SSE.Views.Toolbar.textTopBorders": "Верхние границы", "SSE.Views.Toolbar.textTopBorders": "Верхние границы",
"SSE.Views.Toolbar.textUnderline": "Подчеркнутый", "SSE.Views.Toolbar.textUnderline": "Подчеркнутый",
"SSE.Views.Toolbar.textWinLossSpark": "Выигрыш/проигрыш", "SSE.Views.Toolbar.textWinLossSpark": "Выигрыш/проигрыш",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View file

@ -520,6 +520,25 @@
font: 12px tahoma, arial, verdana, sans-serif; font: 12px tahoma, arial, verdana, sans-serif;
} }
} }
#panel-protect {
label, span {
font-size: 12px;
}
padding: 30px 30px;
.header {
font-weight: bold;
margin: 30px 0 10px;
}
table {
td {
padding: 5px 0;
}
}
}
} }
} }
@ -537,4 +556,4 @@
-webkit-transform: rotate(180deg); -webkit-transform: rotate(180deg);
-o-transform: rotate(180deg); -o-transform: rotate(180deg);
transform: rotate(180deg); transform: rotate(180deg);
} }

View file

@ -23,6 +23,9 @@
/*menuTable*/ /*menuTable*/
.toolbar-btn-icon(btn-menu-table, 80, @toolbar-icon-size); .toolbar-btn-icon(btn-menu-table, 80, @toolbar-icon-size);
/**menuSignature*/
.toolbar-btn-icon(btn-menu-signature, 83, @toolbar-icon-size);
} }
} }
@ -329,6 +332,58 @@ button:active:not(.disabled) .btn-change-shape {background-position: -56px -
background-position: -150px -300px; background-position: -150px -300px;
} }
#table-combo-template .combo-dataview{ #table-combo-template .combo-dataview {
.combo-template(60px); .combo-template(60px);
}
#signature-requested-sign,
#signature-valid-sign,
#signature-invalid-sign {
height: 100%;
overflow: hidden;
margin: 0 -10px 0 -15px;
.item {
display: block;
border: none;
width: 100%;
.box-shadow(none);
margin: 0;
&:hover,
&.over {
background-color: @secondary;
}
}
.signature-item {
padding: 5px 2px 5px 15px;
text-overflow: ellipsis;
min-height: 25px;
.name {
width: 100%;
white-space: nowrap;
overflow: hidden;
cursor: pointer;
max-width: 160px;
text-overflow: ellipsis;
}
.caret {
width: 23px;
height: 14px;
border: 0;
background-position: -43px -150px;
margin: 8px 15px;
display: inline-block;
position: absolute;
right: 0;
&.nomargin {
margin-top: 0;
margin-bottom: 0;
}
}
}
} }

Some files were not shown because too many files have changed in this diff Show more