[DE] Add tab Forms in the fill forms mode. Add prev/next, submit buttons

This commit is contained in:
Julia Radzhabova 2021-02-04 23:19:43 +03:00
parent 310c00b245
commit 85f899410d
6 changed files with 278 additions and 158 deletions

View file

@ -79,8 +79,10 @@ define([
setConfig: function(config) {
this.toolbar = config.toolbar;
this.appConfig = config.config;
this.view = this.createView('FormsTab', {
toolbar: this.toolbar.toolbar
toolbar: this.toolbar.toolbar,
config: config.config
});
this.addListeners({
'FormsTab': {
@ -89,7 +91,9 @@ define([
'forms:clear': this.onClearClick,
'forms:no-color': this.onNoControlsColor,
'forms:select-color': this.onSelectControlsColor,
'forms:mode': this.onModeClick
'forms:mode': this.onModeClick,
'forms:goto': this.onGoTo,
'forms:submit': this.onSubmitClick
}
});
},
@ -98,6 +102,10 @@ define([
this.view && this.view.SetDisabled(state);
},
createToolbarPanel: function() {
return this.view.getPanel();
},
getView: function(name) {
return !name && this.view ?
this.view : Backbone.Controller.prototype.getView.call(this, name);
@ -108,7 +116,7 @@ define([
},
onApiFocusObject: function(selectedObjects) {
if (!this.toolbar.editMode) return;
if (!this.toolbar.editMode || this.appConfig.isRestrictedEdit) return;
var pr, i = -1, type,
paragraph_locked = false,
@ -215,6 +223,16 @@ define([
Common.NotificationCenter.trigger('edit:complete', this.toolbar);
},
onGoTo: function(type) {
// (type=='prev') ? this.api.asc_GoToPrevForm() : this.api.asc_GoToNextForm();
Common.NotificationCenter.trigger('edit:complete', this.toolbar);
},
onSubmitClick: function() {
// this.api.asc_SubmitForm();
Common.NotificationCenter.trigger('edit:complete', this.toolbar);
},
disableEditing: function(disable) {
if (this._state.DisabledEditing != disable) {
this._state.DisabledEditing = disable;
@ -242,7 +260,7 @@ define([
(new Promise(function (accept, reject) {
accept();
})).then(function(){
if (config.canEditContentControl) {
if (config.canEditContentControl && me.view.btnHighlight) {
var clr = me.api.asc_GetSpecialFormsHighlightColor();
clr && (clr = Common.Utils.ThemeColor.getHexColor(clr.get_r(), clr.get_g(), clr.get_b()));
me.view.btnHighlight.currentColor = clr;

View file

@ -1291,6 +1291,7 @@ define([
this.appOptions.canProtect = (this.appOptions.isSignatureSupport || this.appOptions.isPasswordSupport);
this.appOptions.canEditContentControl = (this.permissions.modifyContentControl!==false);
this.appOptions.canHelp = !((typeof (this.editorConfig.customization) == 'object') && this.editorConfig.customization.help===false);
this.appOptions.canSubmitForms = this.appOptions.canLicense && (typeof (this.editorConfig.customization) == 'object') && !!this.editorConfig.customization.submitForm;
this.appOptions.canFillForms = this.appOptions.canLicense && ((this.permissions.fillForms===undefined) ? this.appOptions.isEdit : this.permissions.fillForms) && (this.editorConfig.mode !== 'view');
this.appOptions.isRestrictedEdit = !this.appOptions.isEdit && (this.appOptions.canComments || this.appOptions.canFillForms);
if (this.appOptions.isRestrictedEdit && this.appOptions.canComments && this.appOptions.canFillForms) // must be one restricted mode, priority for filling forms

View file

@ -3098,15 +3098,19 @@ define([
var links = me.getApplication().getController('Links');
links.setApi(me.api).setConfig({toolbar: me});
Array.prototype.push.apply(me.toolbar.toolbarControls, links.getView('Links').getButtons());
if (config.canFeatureContentControl) {
tab = {caption: me.textTabForms, action: 'forms'};
var forms = me.getApplication().getController('FormsTab');
forms.setApi(me.api).setConfig({toolbar: me});
}
if ( config.isEdit && config.canFeatureContentControl || config.isRestrictedEdit && config.canFillForms ) {
tab = {caption: me.textTabForms, action: 'forms'};
var forms = me.getApplication().getController('FormsTab');
forms.setApi(me.api).setConfig({toolbar: me, config: config});
$panel = forms.createToolbarPanel();
if ($panel) {
me.toolbar.addTab(tab, $panel, 4);
me.toolbar.setVisible('forms', true);
Array.prototype.push.apply(me.toolbar.toolbarControls, forms.getView('FormsTab').getButtons());
me.onChangeSdtGlobalSettings();
if (config.isEdit && config.canFeatureContentControl) {
Array.prototype.push.apply(me.toolbar.toolbarControls, forms.getView('FormsTab').getButtons());
me.onChangeSdtGlobalSettings();
}
}
}
},

View file

@ -174,29 +174,6 @@
</div>
</div>
</section>
<section class="panel" data-tab="forms">
<div class="group">
<span class="btn-slot text x-huge" id="slot-btn-form-field"></span>
<span class="btn-slot text x-huge" id="slot-btn-form-combobox"></span>
<span class="btn-slot text x-huge" id="slot-btn-form-dropdown"></span>
<span class="btn-slot text x-huge" id="slot-btn-form-checkbox"></span>
<span class="btn-slot text x-huge" id="slot-btn-form-radiobox"></span>
<span class="btn-slot text x-huge" id="slot-btn-form-image"></span>
</div>
<div class="separator long"></div>
<div class="group no-group-mask form-view">
<div class="elset">
<span class="btn-slot text" id="slot-form-clear-fields"></span>
</div>
<div class="elset">
<span class="btn-slot text" id="slot-form-highlight"></span>
</div>
</div>
<div class="separator long"></div>
<div class="group no-group-mask form-view">
<span class="btn-slot text x-huge" id="slot-btn-form-view"></span>
</div>
</section>
</section>
</section>
</div>

View file

@ -47,33 +47,67 @@ define([
'use strict';
DE.Views.FormsTab = Common.UI.BaseView.extend(_.extend((function(){
var template =
'<section class="panel" data-tab="forms">' +
'<div class="group">' +
'<span class="btn-slot text x-huge" id="slot-btn-form-field"></span>' +
'<span class="btn-slot text x-huge" id="slot-btn-form-combobox"></span>' +
'<span class="btn-slot text x-huge" id="slot-btn-form-dropdown"></span>' +
'<span class="btn-slot text x-huge" id="slot-btn-form-checkbox"></span>' +
'<span class="btn-slot text x-huge" id="slot-btn-form-radiobox"></span>' +
'<span class="btn-slot text x-huge" id="slot-btn-form-image"></span>' +
'</div>' +
'<div class="separator long forms"></div>' +
'<div class="group no-group-mask form-view">' +
'<div class="elset">' +
'<span class="btn-slot text" id="slot-form-clear-fields"></span>' +
'</div>' +
'<div class="elset">' +
'<span class="btn-slot text" id="slot-form-highlight"></span>' +
'</div>' +
'</div>' +
'<div class="group no-group-mask form-view">' +
'<span class="btn-slot text x-huge" id="slot-btn-form-clear"></span>' +
'<span class="btn-slot text x-huge" id="slot-btn-form-prev"></span>' +
'<span class="btn-slot text x-huge" id="slot-btn-form-next"></span>' +
'</div>' +
'<div class="separator long submit"></div>' +
'<div class="group no-group-mask form-view">' +
'<span class="btn-slot text x-huge" id="slot-btn-form-view"></span>' +
'<span class="btn-slot text x-huge" id="slot-btn-form-submit"></span>' +
'</div>' +
'</section>';
function setEvents() {
var me = this;
this.btnTextField.on('click', function (b, e) {
this.btnTextField && this.btnTextField.on('click', function (b, e) {
me.fireEvent('forms:insert', ['text']);
});
this.btnComboBox.on('click', function (b, e) {
this.btnComboBox && this.btnComboBox.on('click', function (b, e) {
me.fireEvent('forms:insert', ['combobox']);
});
this.btnDropDown.on('click', function (b, e) {
this.btnDropDown && this.btnDropDown.on('click', function (b, e) {
me.fireEvent('forms:insert', ['dropdown']);
});
this.btnCheckBox.on('click', function (b, e) {
this.btnCheckBox && this.btnCheckBox.on('click', function (b, e) {
me.fireEvent('forms:insert', ['checkbox']);
});
this.btnRadioBox.on('click', function (b, e) {
this.btnRadioBox && this.btnRadioBox.on('click', function (b, e) {
me.fireEvent('forms:insert', ['radiobox']);
});
this.btnImageField.on('click', function (b, e) {
this.btnImageField && this.btnImageField.on('click', function (b, e) {
me.fireEvent('forms:insert', ['picture']);
});
this.btnViewForm.on('click', function (b, e) {
this.btnViewForm && this.btnViewForm.on('click', function (b, e) {
me.fireEvent('forms:mode', [b.pressed]);
});
this.btnClearFields && this.btnClearFields.on('click', function (b, e) {
me.fireEvent('forms:clear');
});
this.btnClear && this.btnClear.on('click', function (b, e) {
me.fireEvent('forms:clear');
});
if (this.mnuFormsColorPicker) {
this.btnClearFields.on('click', function (b, e) {
me.fireEvent('forms:clear');
});
$('#id-toolbar-menu-new-form-color').on('click', function (b, e) {
me.fireEvent('forms:new-color');
});
@ -87,6 +121,15 @@ define([
me.fireEvent('forms:open-color', [color]);
});
}
this.btnPrevForm && this.btnPrevForm.on('click', function (b, e) {
me.fireEvent('forms:goto', ['prev']);
});
this.btnNextForm && this.btnNextForm.on('click', function (b, e) {
me.fireEvent('forms:goto', ['next']);
});
this.btnSubmit && this.btnSubmit.on('click', function (b, e) {
me.fireEvent('forms:submit');
});
}
return {
@ -96,148 +139,211 @@ define([
initialize: function (options) {
Common.UI.BaseView.prototype.initialize.call(this);
this.toolbar = options.toolbar;
this.appConfig = options.config;
this.paragraphControls = [];
var me = this,
$host = me.toolbar.$el;
var me = this;
this.btnTextField = new Common.UI.Button({
parentEl: $host.find('#slot-btn-form-field'),
if (this.appConfig.isRestrictedEdit && this.appConfig.canFillForms) {
this.btnClear = new Common.UI.Button({
cls: 'btn-toolbar x-huge icon-top',
iconCls: 'toolbar__icon btn-clear',
caption: this.textClear
});
} else {
this.btnTextField = new Common.UI.Button({
cls: 'btn-toolbar x-huge icon-top',
iconCls: 'toolbar__icon btn-text-field',
caption: this.capBtnText,
disabled: true
});
this.paragraphControls.push(this.btnTextField);
this.btnComboBox = new Common.UI.Button({
cls: 'btn-toolbar x-huge icon-top',
iconCls: 'toolbar__icon btn-combo-box',
caption: this.capBtnComboBox,
disabled: true
});
this.paragraphControls.push(this.btnComboBox);
this.btnDropDown = new Common.UI.Button({
cls: 'btn-toolbar x-huge icon-top',
iconCls: 'toolbar__icon btn-dropdown',
caption: this.capBtnDropDown,
disabled: true
});
this.paragraphControls.push(this.btnDropDown);
this.btnCheckBox = new Common.UI.Button({
cls: 'btn-toolbar x-huge icon-top',
iconCls: 'toolbar__icon btn-checkbox',
caption: this.capBtnCheckBox,
disabled: true
});
this.paragraphControls.push(this.btnCheckBox);
this.btnRadioBox = new Common.UI.Button({
cls: 'btn-toolbar x-huge icon-top',
iconCls: 'toolbar__icon btn-radio-button',
caption: this.capBtnRadioBox,
disabled: true
});
this.paragraphControls.push(this.btnRadioBox);
this.btnImageField = new Common.UI.Button({
cls: 'btn-toolbar x-huge icon-top',
iconCls: 'toolbar__icon btn-insertimage',
caption: this.capBtnImage,
disabled: true
});
this.paragraphControls.push(this.btnImageField);
this.btnViewForm = new Common.UI.Button({
cls: 'btn-toolbar x-huge icon-top',
iconCls: 'toolbar__icon btn-sheet-view',
caption: this.capBtnView,
enableToggle: true,
disabled: true
});
this.paragraphControls.push(this.btnViewForm);
this.btnClearFields = new Common.UI.Button({
cls : 'btn-toolbar',
iconCls : 'toolbar__icon btn-clearstyle',
caption : this.textClearFields,
disabled: true
});
this.paragraphControls.push(this.btnClearFields);
this.btnHighlight = new Common.UI.ButtonColored({
cls : 'btn-toolbar',
iconCls : 'toolbar__icon btn-highlight',
caption : this.textHighlight,
menu : true,
disabled: true
});
this.paragraphControls.push(this.btnHighlight);
}
this.btnPrevForm = new Common.UI.Button({
cls: 'btn-toolbar x-huge icon-top',
iconCls: 'toolbar__icon btn-text-field',
caption: this.capBtnText,
disabled: true
iconCls: 'toolbar__icon btn-review-prev',
caption: this.capBtnPrev
});
this.paragraphControls.push(this.btnTextField);
this.paragraphControls.push(this.btnPrevForm);
this.btnComboBox = new Common.UI.Button({
parentEl: $host.find('#slot-btn-form-combobox'),
this.btnNextForm = new Common.UI.Button({
cls: 'btn-toolbar x-huge icon-top',
iconCls: 'toolbar__icon btn-combo-box',
caption: this.capBtnComboBox,
disabled: true
iconCls: 'toolbar__icon btn-review-next',
caption: this.capBtnNext
});
this.paragraphControls.push(this.btnComboBox);
this.paragraphControls.push(this.btnNextForm);
this.btnDropDown = new Common.UI.Button({
parentEl: $host.find('#slot-btn-form-dropdown'),
cls: 'btn-toolbar x-huge icon-top',
iconCls: 'toolbar__icon btn-dropdown',
caption: this.capBtnDropDown,
disabled: true
});
this.paragraphControls.push(this.btnDropDown);
this.btnCheckBox = new Common.UI.Button({
parentEl: $host.find('#slot-btn-form-checkbox'),
cls: 'btn-toolbar x-huge icon-top',
iconCls: 'toolbar__icon btn-checkbox',
caption: this.capBtnCheckBox,
disabled: true
});
this.paragraphControls.push(this.btnCheckBox);
this.btnRadioBox = new Common.UI.Button({
parentEl: $host.find('#slot-btn-form-radiobox'),
cls: 'btn-toolbar x-huge icon-top',
iconCls: 'toolbar__icon btn-radio-button',
caption: this.capBtnRadioBox,
disabled: true
});
this.paragraphControls.push(this.btnRadioBox);
this.btnImageField = new Common.UI.Button({
parentEl: $host.find('#slot-btn-form-image'),
cls: 'btn-toolbar x-huge icon-top',
iconCls: 'toolbar__icon btn-insertimage',
caption: this.capBtnImage,
disabled: true
});
this.paragraphControls.push(this.btnImageField);
this.btnViewForm = new Common.UI.Button({
parentEl: $host.find('#slot-btn-form-view'),
cls: 'btn-toolbar x-huge icon-top',
iconCls: 'toolbar__icon btn-sheet-view',
caption: this.capBtnView,
enableToggle: true,
disabled: true
});
this.paragraphControls.push(this.btnViewForm);
this.btnClearFields = new Common.UI.Button({
parentEl : $host.find('#slot-form-clear-fields'),
cls : 'btn-toolbar',
iconCls : 'toolbar__icon btn-clearstyle',
caption : this.textClearFields,
disabled: true
});
this.paragraphControls.push(this.btnClearFields);
this.btnHighlight = new Common.UI.ButtonColored({
parentEl : $host.find('#slot-form-highlight'),
cls : 'btn-toolbar',
iconCls : 'toolbar__icon btn-highlight',
caption : this.textHighlight,
menu : true,
disabled: true
});
this.paragraphControls.push(this.btnHighlight);
if (this.appConfig.canSubmitForms) {
this.btnSubmit = new Common.UI.Button({
cls: 'btn-toolbar x-huge icon-top',
iconCls: 'toolbar__icon btn-form-submit',
caption: this.capBtnSubmit
});
this.paragraphControls.push(this.btnSubmit);
}
this._state = {disabled: false};
Common.NotificationCenter.on('app:ready', this.onAppReady.bind(this));
},
render: function (el) {
if ( el ) el.html( this.getPanel() );
return this;
},
onAppReady: function (config) {
var me = this;
(new Promise(function (accept, reject) {
accept();
})).then(function(){
if (config.canEditContentControl) {
me.btnHighlight.setMenu(new Common.UI.Menu({
items: [
me.mnuNoFormsColor = new Common.UI.MenuItem({
id: 'id-toolbar-menu-no-highlight-form',
caption: me.textNoHighlight,
checkable: true,
checked: me.btnHighlight.currentColor === null
}),
{caption: '--'},
{template: _.template('<div id="id-toolbar-menu-form-color" style="width: 169px; height: 94px; margin: 10px;"></div>')},
{template: _.template('<a id="id-toolbar-menu-new-form-color" style="padding-left:12px;">' + me.textNewColor + '</a>')}
]
}));
me.mnuFormsColorPicker = new Common.UI.ThemeColorPalette({
el: $('#id-toolbar-menu-form-color'),
colors: ['000000', '993300', '333300', '003300', '003366', '000080', '333399', '333333', '800000', 'FF6600',
'808000', '00FF00', '008080', '0000FF', '666699', '808080', 'FF0000', 'FF9900', '99CC00', '339966',
'33CCCC', '3366FF', '800080', '999999', 'FF00FF', 'FFCC00', 'FFFF00', '00FF00', '00FFFF', '00CCFF',
'993366', 'C0C0C0', 'FF99CC', 'FFCC99', 'FFFF99', 'CCFFCC', 'CCFFFF', '99CCFF', 'CC99FF', 'FFFFFF'
],
value: me.btnHighlight.currentColor
});
me.btnHighlight.setColor(me.btnHighlight.currentColor || 'transparent');
} else {
me.btnHighlight.cmpEl.parents('.group').hide().prev('.separator').hide();
}
if (config.isEdit && config.canFeatureContentControl) {
if (config.canEditContentControl) {
me.btnHighlight.setMenu(new Common.UI.Menu({
items: [
me.mnuNoFormsColor = new Common.UI.MenuItem({
id: 'id-toolbar-menu-no-highlight-form',
caption: me.textNoHighlight,
checkable: true,
checked: me.btnHighlight.currentColor === null
}),
{caption: '--'},
{template: _.template('<div id="id-toolbar-menu-form-color" style="width: 169px; height: 94px; margin: 10px;"></div>')},
{template: _.template('<a id="id-toolbar-menu-new-form-color" style="padding-left:12px;">' + me.textNewColor + '</a>')}
]
}));
me.mnuFormsColorPicker = new Common.UI.ThemeColorPalette({
el: $('#id-toolbar-menu-form-color'),
colors: ['000000', '993300', '333300', '003300', '003366', '000080', '333399', '333333', '800000', 'FF6600',
'808000', '00FF00', '008080', '0000FF', '666699', '808080', 'FF0000', 'FF9900', '99CC00', '339966',
'33CCCC', '3366FF', '800080', '999999', 'FF00FF', 'FFCC00', 'FFFF00', '00FF00', '00FFFF', '00CCFF',
'993366', 'C0C0C0', 'FF99CC', 'FFCC99', 'FFFF99', 'CCFFCC', 'CCFFFF', '99CCFF', 'CC99FF', 'FFFFFF'
],
value: me.btnHighlight.currentColor
});
me.btnHighlight.setColor(me.btnHighlight.currentColor || 'transparent');
} else {
me.btnHighlight.cmpEl.parents('.group').hide().prev('.separator').hide();
}
me.btnTextField.updateHint(me.tipTextField);
me.btnComboBox.updateHint(me.tipComboBox);
me.btnDropDown.updateHint(me.tipDropDown);
me.btnCheckBox.updateHint(me.tipCheckBox);
me.btnRadioBox.updateHint(me.tipRadioBox);
me.btnImageField.updateHint(me.tipImageField);
me.btnViewForm.updateHint(me.tipViewForm);
me.btnTextField.updateHint(me.tipTextField);
me.btnComboBox.updateHint(me.tipComboBox);
me.btnDropDown.updateHint(me.tipDropDown);
me.btnCheckBox.updateHint(me.tipCheckBox);
me.btnRadioBox.updateHint(me.tipRadioBox);
me.btnImageField.updateHint(me.tipImageField);
me.btnViewForm.updateHint(me.tipViewForm);
} else {
me.btnClear.updateHint(me.textClearFields);
var separator_forms = me.$el.find('.separator.forms');
separator_forms.prev('.group').hide();
separator_forms.hide().next('.group').hide();
!me.btnSubmit && me.$el.find('.separator.submit').hide().next('.group').hide();
}
me.btnPrevForm.updateHint(me.tipPrevForm);
me.btnNextForm.updateHint(me.tipNextForm);
me.btnSubmit && me.btnSubmit.updateHint(me.tipSubmit);
setEvents.call(me);
});
},
getPanel: function () {
this.$el = $(_.template(template)( {} ));
var $host = this.$el;
if (this.appConfig.isRestrictedEdit && this.appConfig.canFillForms) {
this.btnClear.render($host.find('#slot-btn-form-clear'));
} else {
this.btnTextField.render($host.find('#slot-btn-form-field'));
this.btnComboBox.render($host.find('#slot-btn-form-combobox'));
this.btnDropDown.render($host.find('#slot-btn-form-dropdown'));
this.btnCheckBox.render($host.find('#slot-btn-form-checkbox'));
this.btnRadioBox.render($host.find('#slot-btn-form-radiobox'));
this.btnImageField.render($host.find('#slot-btn-form-image'));
this.btnViewForm.render($host.find('#slot-btn-form-view'));
this.btnClearFields.render($host.find('#slot-form-clear-fields'));
this.btnHighlight.render($host.find('#slot-form-highlight'));
}
this.btnPrevForm.render($host.find('#slot-btn-form-prev'));
this.btnNextForm.render($host.find('#slot-btn-form-next'));
if (this.appConfig.canSubmitForms) {
this.btnSubmit.render($host.find('#slot-btn-form-submit'));
}
return this.$el;
},
show: function () {
Common.UI.BaseView.prototype.show.call(this);
this.fireEvent('show', this);
@ -273,7 +379,14 @@ define([
tipImageField: 'Insert image',
tipViewForm: 'Fill form mode',
textNoHighlight: 'No highlighting',
textNewColor: 'Add New Custom Color'
textNewColor: 'Add New Custom Color',
textClear: 'Clear Fields',
capBtnPrev: 'Previous Field',
capBtnNext: 'Next Field',
capBtnSubmit: 'Submit',
tipPrevForm: 'Go to the previous field',
tipNextForm: 'Go to the next field',
tipSubmit: 'Submit form'
}
}()), DE.Views.FormsTab || {}));
});

View file

@ -1739,6 +1739,13 @@
"DE.Views.FormsTab.tipRadioBox": "Insert radio button",
"DE.Views.FormsTab.tipTextField": "Insert text field",
"DE.Views.FormsTab.tipViewForm": "Fill form mode",
"DE.Views.FormsTab.textClear": "Clear Fields",
"DE.Views.FormsTab.capBtnPrev": "Previous Field",
"DE.Views.FormsTab.capBtnNext": "Next Field",
"DE.Views.FormsTab.capBtnSubmit": "Submit",
"DE.Views.FormsTab.tipPrevForm": "Go to the previous field",
"DE.Views.FormsTab.tipNextForm": "Go to the next field",
"DE.Views.FormsTab.tipSubmit": "Submit form",
"DE.Views.HeaderFooterSettings.textBottomCenter": "Bottom center",
"DE.Views.HeaderFooterSettings.textBottomLeft": "Bottom left",
"DE.Views.HeaderFooterSettings.textBottomPage": "Bottom of Page",