[DE] Change signature settings layout in the right panel.
This commit is contained in:
parent
4da0fe1938
commit
d48e76e5c6
|
@ -92,6 +92,7 @@ define([
|
|||
if (this.appConfig.canProtect) {
|
||||
this.api.asc_registerCallback('asc_onSignatureClick', _.bind(this.onApiSignatureClick, this));
|
||||
Common.NotificationCenter.on('protect:sign', _.bind(this.onApiSignatureClick, this));
|
||||
Common.NotificationCenter.on('protect:signature', _.bind(this.onSignatureClick, this));
|
||||
this.api.asc_registerCallback('asc_onUpdateSignatures', _.bind(this.onApiUpdateSignatures, this));
|
||||
}
|
||||
}
|
||||
|
@ -126,10 +127,10 @@ define([
|
|||
Common.NotificationCenter.trigger('edit:complete', this.view);
|
||||
},
|
||||
|
||||
onSignatureClick: function(btn, opts){
|
||||
switch (opts) {
|
||||
onSignatureClick: function(type, signed, guid){
|
||||
switch (type) {
|
||||
case 'invisible': this.addInvisibleSignature(); break;
|
||||
case 'visible': this.addVisibleSignature(); break;
|
||||
case 'visible': this.addVisibleSignature(signed, guid); break;
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -144,7 +145,7 @@ define([
|
|||
|
||||
onAppReady: function (config) {
|
||||
var me = this;
|
||||
// this.onApiUpdateSignatures([{name: 'Hammish Mitchell', guid: '123', date: '18/05/2017'}, {name: 'Someone Somewhere', guid: '345', date: '18/05/2017'}]);
|
||||
// this.onApiUpdateSignatures([{name: 'Hammish Mitchell', guid: '123', date: '18/05/2017'}, {name: 'Someone Somewhere', guid: '345', date: '18/05/2017'}], [{name: 'Hammish Mitchell', guid: '123', date: '18/05/2017'}, {name: 'Someone Somewhere', guid: '345', date: '18/05/2017'}]);
|
||||
// this.onDocumentPassword(true);
|
||||
},
|
||||
|
||||
|
@ -168,7 +169,7 @@ define([
|
|||
this.api.asc_resetPassword();
|
||||
},
|
||||
|
||||
addInvisibleSignature: function(btn) {
|
||||
addInvisibleSignature: function() {
|
||||
var me = this,
|
||||
win = new Common.Views.SignDialog({
|
||||
api: me.api,
|
||||
|
@ -185,11 +186,12 @@ define([
|
|||
win.show();
|
||||
},
|
||||
|
||||
addVisibleSignature: function(btn) {
|
||||
addVisibleSignature: function(signed, guid) {
|
||||
var me = this,
|
||||
win = new Common.Views.SignSettingsDialog({
|
||||
type: (!signed) ? 'edit' : 'view',
|
||||
handler: function(dlg, result) {
|
||||
if (result == 'ok') {
|
||||
if (!signed && result == 'ok') {
|
||||
me.api.asc_AddSignatureLine2(dlg.getSettings());
|
||||
}
|
||||
Common.NotificationCenter.trigger('edit:complete');
|
||||
|
@ -197,6 +199,16 @@ define([
|
|||
});
|
||||
|
||||
win.show();
|
||||
|
||||
// var props = new AscCommon.asc_CSignatureLine();
|
||||
// props.asc_setSigner1("s1");
|
||||
// props.asc_setSigner2("s2");
|
||||
// props.asc_setEmail('email');
|
||||
// props.asc_setInstructions('instructions');
|
||||
// props.asc_setShowDate(true);
|
||||
|
||||
if (guid)
|
||||
win.setSettings(this.api.asc_getSignatureSetup(guid));
|
||||
},
|
||||
|
||||
signVisibleSignature: function(guid, width, height) {
|
||||
|
|
|
@ -84,12 +84,12 @@ define([
|
|||
|
||||
if (me.appConfig.canProtect) {
|
||||
this.btnSignature.menu.on('item:click', function (menu, item, e) {
|
||||
me.fireEvent('protect:signature', [menu, item.value]);
|
||||
me.fireEvent('protect:signature', [item.value, false]);
|
||||
});
|
||||
|
||||
this.btnsInvisibleSignature.forEach(function(button) {
|
||||
button.on('click', function (b, e) {
|
||||
me.fireEvent('protect:signature', [b, 'invisible']);
|
||||
me.fireEvent('protect:signature', ['invisible']);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
|
@ -53,7 +53,8 @@ define([
|
|||
options: {
|
||||
width: 350,
|
||||
style: 'min-width: 350px;',
|
||||
cls: 'modal-dlg'
|
||||
cls: 'modal-dlg',
|
||||
type: 'edit'
|
||||
},
|
||||
|
||||
initialize : function(options) {
|
||||
|
@ -86,12 +87,15 @@ define([
|
|||
'</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.options.tpl = _.template(this.template)(this.options);
|
||||
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);
|
||||
},
|
||||
|
@ -104,17 +108,20 @@ define([
|
|||
|
||||
me.inputName = new Common.UI.InputField({
|
||||
el : $('#id-dlg-sign-settings-name'),
|
||||
style : 'width: 100%;'
|
||||
style : 'width: 100%;',
|
||||
disabled : this.type=='view'
|
||||
});
|
||||
|
||||
me.inputTitle = new Common.UI.InputField({
|
||||
el : $('#id-dlg-sign-settings-title'),
|
||||
style : 'width: 100%;'
|
||||
style : 'width: 100%;',
|
||||
disabled : this.type=='view'
|
||||
});
|
||||
|
||||
me.inputEmail = new Common.UI.InputField({
|
||||
el : $('#id-dlg-sign-settings-email'),
|
||||
style : 'width: 100%;'
|
||||
style : 'width: 100%;',
|
||||
disabled : this.type=='view'
|
||||
});
|
||||
|
||||
me.textareaInstructions = this.$window.find('textarea');
|
||||
|
@ -123,10 +130,13 @@ define([
|
|||
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
|
||||
labelText: this.textShowDate,
|
||||
disabled: this.type=='view'
|
||||
});
|
||||
|
||||
$window.find('.dlg-btn').on('click', _.bind(this.onBtnClick, this));
|
||||
|
@ -146,15 +156,15 @@ define([
|
|||
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());
|
||||
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());
|
||||
}
|
||||
},
|
||||
|
||||
|
|
|
@ -9,14 +9,33 @@
|
|||
<div id="signature-invisible-sign" style="width:100%;"></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="signature-requested-sign">
|
||||
<td></td>
|
||||
<tr class="requested">
|
||||
<td class="padding-small">
|
||||
<label class="header"><%= scope.strRequested %></label>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="signature-valid-sign">
|
||||
<td></td>
|
||||
<tr class="requested">
|
||||
<td class="padding-large">
|
||||
<div id="signature-requested-sign"></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="signature-invalid-sign">
|
||||
<td></td>
|
||||
<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>
|
|
@ -120,12 +120,58 @@ define([
|
|||
this.btnAddInvisibleSign = protection.getButton('signature');
|
||||
this.btnAddInvisibleSign.render(this.$el.find('#signature-invisible-sign'));
|
||||
|
||||
this.cntRequestedSign = $('#signature-requested-sign');
|
||||
this.cntValidSign = $('#signature-valid-sign');
|
||||
this.cntInvalidSign = $('#signature-invalid-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"></div>',
|
||||
'<div class="name"><%= Common.Utils.String.htmlEncode(name) %></div>',
|
||||
'</div>',
|
||||
'</div>'
|
||||
].join(''))
|
||||
});
|
||||
|
||||
this.$el.on('click', '.signature-sign-link', _.bind(this.onSign, this));
|
||||
this.$el.on('click', '.signature-view-link', _.bind(this.onViewSignature, this));
|
||||
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"></div>',
|
||||
'<div class="name"><%= Common.Utils.String.htmlEncode(name) %></div>',
|
||||
'<div class="date"><%= Common.Utils.String.htmlEncode(date) %></div>',
|
||||
'</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"></div>',
|
||||
'<div class="name"><%= Common.Utils.String.htmlEncode(name) %></div>',
|
||||
'<div class="date"><%= Common.Utils.String.htmlEncode(date) %></div>',
|
||||
'</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) {
|
||||
|
@ -174,45 +220,108 @@ define([
|
|||
me._state.invalidSignatures = [];
|
||||
|
||||
_.each(requested, function(item, index){
|
||||
me._state.requestedSignatures.push({name: item.asc_getSigner1(), guid: item.asc_getGuid()});
|
||||
me._state.requestedSignatures.push({name: item.asc_getSigner1(), guid: item.asc_getGuid(), requested: true});
|
||||
});
|
||||
_.each(valid, function(item, index){
|
||||
var sign = {name: item.asc_getSigner1(), guid: item.asc_getId(), date: '18/05/2017'};
|
||||
(item.asc_getValid()==0) ? me._state.validSignatures.push(sign) : me._state.invalidSignatures.push(sign);
|
||||
});
|
||||
|
||||
// me._state.requestedSignatures = [{name: 'Hammish Mitchell', guid: '123'}, {name: 'Someone Somewhere', guid: '123'}, {name: 'Mary White', guid: '123'}, {name: 'John Black', guid: '123'}];
|
||||
// me._state.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}];
|
||||
// me._state.validSignatures = [{name: 'Hammish Mitchell', guid: '123', date: '18/05/2017'}, {name: 'Someone Somewhere', guid: '345', date: '18/05/2017'}];
|
||||
// me._state.invalidSignatures = [{name: 'Mary White', guid: '111', date: '18/05/2017'}, {name: 'John Black', guid: '456', date: '18/05/2017'}];
|
||||
|
||||
this.cntRequestedSign.html(this.templateRequested({signatures: me._state.requestedSignatures, header: this.strRequested}));
|
||||
this.cntValidSign.html(this.templateValid({signatures: me._state.validSignatures, header: this.strValid}));
|
||||
this.cntInvalidSign.html(this.templateValid({signatures: me._state.invalidSignatures, header: this.strInvalid}));
|
||||
this.viewRequestedList.store.reset(me._state.requestedSignatures);
|
||||
this.viewValidList.store.reset(me._state.validSignatures);
|
||||
this.viewInvalidList.store.reset(me._state.invalidSignatures);
|
||||
|
||||
this.$linksSign = $('.signature-sign-link', this.$el);
|
||||
var width = this.$linksSign.width();
|
||||
$('.signature-sign-name', this.cntRequestedSign).css('max-width', 170-width);
|
||||
|
||||
this.$linksView = $('.signature-view-link', this.$el);
|
||||
width = this.$linksView.width();
|
||||
$('.signature-sign-name', this.cntValidSign).css('max-width', 170-width);
|
||||
$('.signature-sign-name', this.cntInvalidSign).css('max-width', 170-width);
|
||||
this.$el.find('.requested').toggleClass('hidden', me._state.requestedSignatures.length<1);
|
||||
this.$el.find('.valid').toggleClass('hidden', me._state.validSignatures.length<1);
|
||||
this.$el.find('.invalid').toggleClass('hidden', me._state.invalidSignatures.length<1);
|
||||
|
||||
me.disableEditing(me._state.validSignatures.length>0 || me._state.invalidSignatures.length>0);
|
||||
},
|
||||
|
||||
onSign: function(event) {
|
||||
var target = $(event.currentTarget);
|
||||
if (target.hasClass('disabled')) return;
|
||||
onSelectSignature: function(picker, item, record, e){
|
||||
if (!record) return;
|
||||
|
||||
Common.NotificationCenter.trigger('protect:sign', target.attr('data-value'));
|
||||
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.validSignatures.length>0 || this._state.invalidSignatures.length>0);
|
||||
menu.items[0].setVisible(requested);
|
||||
menu.items[1].setVisible(!requested);
|
||||
menu.items[3].setVisible(!requested);
|
||||
menu.items[0].setDisabled(this._locked);
|
||||
menu.items[3].setDisabled(this._locked);
|
||||
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'));
|
||||
}
|
||||
},
|
||||
|
||||
onViewSignature: function(event) {
|
||||
var target = $(event.currentTarget);
|
||||
if (target.hasClass('disabled')) return;
|
||||
|
||||
this.api.asc_ViewCertificate(target.attr('data-value'));
|
||||
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(guid);
|
||||
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_DeleteSign(guid);
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
onDocumentReady: function() {
|
||||
|
@ -285,13 +394,15 @@ define([
|
|||
strValid: 'Valid signatures',
|
||||
strInvalid: 'Invalid signatures',
|
||||
strSign: 'Sign',
|
||||
strView: 'View',
|
||||
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?'
|
||||
txtEditWarning: 'Editing will remove the signatures from the document.<br>Are you sure you want to continue?',
|
||||
strDelete: 'Remove Signature'
|
||||
|
||||
}, DE.Views.SignatureSettings || {}));
|
||||
});
|
|
@ -1418,7 +1418,9 @@
|
|||
"DE.Views.SignatureSettings.strValid": "Valid signatures",
|
||||
"DE.Views.SignatureSettings.strInvalid": "Invalid signatures",
|
||||
"DE.Views.SignatureSettings.strSign": "Sign",
|
||||
"DE.Views.SignatureSettings.strView": "View",
|
||||
"DE.Views.SignatureSettings.strDetails": "Signature Details",
|
||||
"DE.Views.SignatureSettings.strDelete": "Remove Signature",
|
||||
"DE.Views.SignatureSettings.strSetup": "Signature Setup",
|
||||
"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.SignatureSettings.txtRequestedSignatures": "This document needs to be signed.",
|
||||
|
|
|
@ -270,8 +270,54 @@ button:active:not(.disabled) .btn-change-shape {background-position: -56px -
|
|||
background-position: -100px -150px;
|
||||
}
|
||||
|
||||
.signature-sign-name {
|
||||
#signature-requested-sign,
|
||||
#signature-valid-sign,
|
||||
#signature-invalid-sign {
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
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;
|
||||
|
||||
.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;
|
||||
}
|
||||
|
||||
&.requested {
|
||||
.caret {
|
||||
margin: 0 15px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue