2017-07-11 11:02:16 +00:00
|
|
|
/*
|
|
|
|
*
|
2019-01-17 13:05:03 +00:00
|
|
|
* (c) Copyright Ascensio System SIA 2010-2019
|
2017-07-11 11:02:16 +00:00
|
|
|
*
|
|
|
|
* 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
|
|
|
|
*
|
2019-01-17 13:00:34 +00:00
|
|
|
* You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha
|
|
|
|
* street, Riga, Latvia, EU, LV-1050.
|
2017-07-11 11:02:16 +00:00
|
|
|
*
|
|
|
|
* 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
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* PivotSettings.js
|
|
|
|
*
|
|
|
|
* Created by Julia Radzhabova on 7/10/17
|
2018-03-01 12:16:38 +00:00
|
|
|
* Copyright (c) 2018 Ascensio System SIA. All rights reserved.
|
2017-07-11 11:02:16 +00:00
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
define([
|
|
|
|
'text!spreadsheeteditor/main/app/template/PivotSettings.template',
|
|
|
|
'jquery',
|
|
|
|
'underscore',
|
|
|
|
'backbone',
|
|
|
|
'common/main/lib/component/Button',
|
2017-07-14 14:10:09 +00:00
|
|
|
'common/main/lib/component/ListView',
|
2017-07-17 14:18:52 +00:00
|
|
|
'spreadsheeteditor/main/app/view/FieldSettingsDialog',
|
2017-07-18 08:44:12 +00:00
|
|
|
'spreadsheeteditor/main/app/view/ValueFieldSettingsDialog',
|
|
|
|
'spreadsheeteditor/main/app/view/PivotSettingsAdvanced'
|
2017-07-11 11:02:16 +00:00
|
|
|
], function (menuTemplate, $, _, Backbone, Sortable) {
|
|
|
|
'use strict';
|
|
|
|
|
|
|
|
SSE.Views.PivotSettings = Backbone.View.extend(_.extend({
|
|
|
|
el: '#id-pivot-settings',
|
|
|
|
|
|
|
|
// Compile our stats template
|
|
|
|
template: _.template(menuTemplate),
|
|
|
|
|
|
|
|
// Delegated events for creating new items, and clearing completed ones.
|
|
|
|
events: {
|
|
|
|
},
|
|
|
|
|
|
|
|
options: {
|
|
|
|
alias: 'PivotSettings'
|
|
|
|
},
|
|
|
|
|
|
|
|
initialize: function () {
|
|
|
|
this._initSettings = true;
|
|
|
|
|
|
|
|
this._state = {
|
2017-07-14 14:10:09 +00:00
|
|
|
names: [],
|
2017-07-18 08:44:12 +00:00
|
|
|
DisabledControls: false,
|
|
|
|
field: {}
|
2017-07-11 11:02:16 +00:00
|
|
|
};
|
|
|
|
this.lockedControls = [];
|
|
|
|
this._locked = false;
|
|
|
|
|
|
|
|
this._originalProps = null;
|
|
|
|
this._noApply = false;
|
|
|
|
|
|
|
|
this.render();
|
|
|
|
},
|
|
|
|
|
|
|
|
render: function () {
|
|
|
|
var el = $(this.el);
|
|
|
|
el.html(this.template({
|
|
|
|
scope: this
|
|
|
|
}));
|
|
|
|
|
2017-07-18 08:44:12 +00:00
|
|
|
this.linkAdvanced = $('#pivot-advanced-link');
|
2017-07-11 11:02:16 +00:00
|
|
|
},
|
|
|
|
|
|
|
|
setApi: function(o) {
|
|
|
|
this.api = o;
|
|
|
|
return this;
|
|
|
|
},
|
|
|
|
|
|
|
|
createDelayedControls: function() {
|
|
|
|
var me = this;
|
|
|
|
this.fieldsList = new Common.UI.ListView({
|
|
|
|
el: $('#pivot-list-fields'),
|
|
|
|
store: new Common.UI.DataViewStore(),
|
|
|
|
simpleAddMode: true,
|
|
|
|
template: _.template(['<div class="listview inner" style=""></div>'].join('')),
|
|
|
|
itemTemplate: _.template([
|
|
|
|
'<div>',
|
|
|
|
'<label class="checkbox-indeterminate" style="position:absolute;">',
|
|
|
|
'<% if (check) { %>',
|
|
|
|
'<input type="button" class="checked img-commonctrl"/>',
|
|
|
|
'<% } else { %>',
|
|
|
|
'<input type="button" class="img-commonctrl"/>',
|
|
|
|
'<% } %>',
|
|
|
|
'</label>',
|
2017-07-12 12:15:11 +00:00
|
|
|
'<div id="<%= id %>" class="list-item" style="pointer-events:none;"><%= Common.Utils.String.htmlEncode(value) %></div>',
|
2017-07-13 12:37:38 +00:00
|
|
|
'<div class="listitem-icon img-commonctrl"></div>',
|
2017-07-11 11:02:16 +00:00
|
|
|
'</div>'
|
|
|
|
].join(''))
|
|
|
|
});
|
2017-07-13 12:37:38 +00:00
|
|
|
this.fieldsList.on('item:click', _.bind(this.onFieldsCheck, this));
|
2017-07-11 11:02:16 +00:00
|
|
|
// this.fieldsList.onKeyDown = _.bind(this.onFieldsListKeyDown, this);
|
|
|
|
this.lockedControls.push(this.fieldsList);
|
|
|
|
|
|
|
|
// Sortable.create(this.fieldsList.$el.find('.listview')[0], {});
|
|
|
|
|
2017-07-13 12:37:38 +00:00
|
|
|
var itemTemplate = _.template([
|
|
|
|
'<div id="<%= id %>" class="list-item" style="display:inline-block;">',
|
|
|
|
'<div style=""><%= Common.Utils.String.htmlEncode(value) %></div>',
|
|
|
|
'<div class="listitem-icon img-commonctrl"></div>',
|
|
|
|
'</div>'
|
|
|
|
].join(''));
|
2017-07-11 11:02:16 +00:00
|
|
|
this.columnsList = new Common.UI.ListView({
|
|
|
|
el: $('#pivot-list-columns'),
|
|
|
|
store: new Common.UI.DataViewStore(),
|
|
|
|
simpleAddMode: true,
|
|
|
|
template: _.template(['<div class="listview inner" style=""></div>'].join('')),
|
2017-07-13 12:37:38 +00:00
|
|
|
itemTemplate: itemTemplate
|
2017-07-11 11:02:16 +00:00
|
|
|
});
|
2017-07-13 12:37:38 +00:00
|
|
|
this.columnsList.on('item:click', _.bind(this.onColumnsSelect, this, 0));
|
2017-07-11 11:02:16 +00:00
|
|
|
// this.columnsList.onKeyDown = _.bind(this.onColumnsListKeyDown, this);
|
|
|
|
this.lockedControls.push(this.columnsList);
|
|
|
|
|
|
|
|
this.rowsList = new Common.UI.ListView({
|
|
|
|
el: $('#pivot-list-rows'),
|
|
|
|
store: new Common.UI.DataViewStore(),
|
|
|
|
simpleAddMode: true,
|
|
|
|
template: _.template(['<div class="listview inner" style=""></div>'].join('')),
|
2017-07-13 12:37:38 +00:00
|
|
|
itemTemplate: itemTemplate
|
2017-07-11 11:02:16 +00:00
|
|
|
});
|
2017-07-13 12:37:38 +00:00
|
|
|
this.rowsList.on('item:click', _.bind(this.onColumnsSelect, this, 1));
|
2017-07-11 11:02:16 +00:00
|
|
|
// this.rowsList.onKeyDown = _.bind(this.onRowsListKeyDown, this);
|
|
|
|
this.lockedControls.push(this.rowsList);
|
|
|
|
|
|
|
|
this.valuesList = new Common.UI.ListView({
|
|
|
|
el: $('#pivot-list-values'),
|
|
|
|
store: new Common.UI.DataViewStore(),
|
|
|
|
simpleAddMode: true,
|
|
|
|
template: _.template(['<div class="listview inner" style=""></div>'].join('')),
|
2017-07-13 12:37:38 +00:00
|
|
|
itemTemplate: itemTemplate
|
2017-07-11 11:02:16 +00:00
|
|
|
});
|
2017-07-13 12:37:38 +00:00
|
|
|
this.valuesList.on('item:click', _.bind(this.onColumnsSelect, this, 2));
|
2017-07-11 11:02:16 +00:00
|
|
|
// this.valuesList.onKeyDown = _.bind(this.onValuesListKeyDown, this);
|
|
|
|
this.lockedControls.push(this.valuesList);
|
|
|
|
|
|
|
|
this.filtersList = new Common.UI.ListView({
|
|
|
|
el: $('#pivot-list-filters'),
|
|
|
|
store: new Common.UI.DataViewStore(),
|
|
|
|
simpleAddMode: true,
|
|
|
|
template: _.template(['<div class="listview inner" style=""></div>'].join('')),
|
2017-07-13 12:37:38 +00:00
|
|
|
itemTemplate: itemTemplate
|
2017-07-11 11:02:16 +00:00
|
|
|
});
|
2017-07-13 12:37:38 +00:00
|
|
|
this.filtersList.on('item:click', _.bind(this.onColumnsSelect, this,3));
|
2017-07-11 11:02:16 +00:00
|
|
|
// this.filtersList.onKeyDown = _.bind(this.onFiltersListKeyDown, this);
|
|
|
|
this.lockedControls.push(this.filtersList);
|
|
|
|
|
|
|
|
$(this.el).on('click', '#pivot-advanced-link', _.bind(this.openAdvancedSettings, this));
|
|
|
|
|
|
|
|
this._initSettings = false;
|
|
|
|
},
|
|
|
|
|
|
|
|
openAdvancedSettings: function(e) {
|
|
|
|
if (this.linkAdvanced.hasClass('disabled')) return;
|
|
|
|
|
|
|
|
var me = this;
|
|
|
|
var win;
|
|
|
|
if (me.api && !this._locked){
|
2017-07-18 08:44:12 +00:00
|
|
|
(new SSE.Views.PivotSettingsAdvanced(
|
2017-07-11 11:02:16 +00:00
|
|
|
{
|
2017-07-18 08:44:12 +00:00
|
|
|
props: me._originalProps,
|
2017-07-11 11:02:16 +00:00
|
|
|
api: me.api,
|
|
|
|
handler: function(result, value) {
|
|
|
|
if (result == 'ok' && me.api && value) {
|
2017-07-21 07:35:19 +00:00
|
|
|
me._originalProps.asc_set(me.api, value);
|
2017-07-11 11:02:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
Common.NotificationCenter.trigger('edit:complete', me);
|
|
|
|
}
|
|
|
|
})).show();
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
ChangeSettings: function(props) {
|
|
|
|
if (this._initSettings)
|
|
|
|
this.createDelayedControls();
|
|
|
|
|
|
|
|
this.disableControls(this._locked); // need to update combodataview after disabled state
|
|
|
|
|
|
|
|
if (props )//formatTableInfo
|
|
|
|
{
|
|
|
|
this._originalProps = props;
|
|
|
|
|
|
|
|
this._state.TableName=props.asc_getName();
|
|
|
|
|
2017-07-12 12:15:11 +00:00
|
|
|
var me = this,
|
|
|
|
cache_names = props.asc_getCacheFields(),
|
2017-07-14 14:10:09 +00:00
|
|
|
pivot_names = props.asc_getPivotFields();
|
|
|
|
|
|
|
|
this._state.names = [];
|
2017-07-12 08:28:44 +00:00
|
|
|
pivot_names.forEach(function (item, index) {
|
2017-07-14 14:10:09 +00:00
|
|
|
me._state.names[index] = item.asc_getName() || cache_names[index].asc_getName();
|
2017-07-12 08:28:44 +00:00
|
|
|
});
|
|
|
|
|
2017-07-11 11:02:16 +00:00
|
|
|
var arr = [], isChecked = [],
|
|
|
|
value = props.asc_getColumnFields();
|
2017-07-13 12:37:38 +00:00
|
|
|
value && value.forEach(function (item, index) {
|
|
|
|
var pivotIndex = item.asc_getIndex();
|
|
|
|
if (pivotIndex>-1 || pivotIndex == -2) {
|
2017-07-14 14:10:09 +00:00
|
|
|
var name = (pivotIndex>-1) ? me._state.names[pivotIndex] : me.textValues;
|
2017-07-12 08:28:44 +00:00
|
|
|
arr.push(new Common.UI.DataViewModel({
|
|
|
|
selected : false,
|
2017-07-13 12:37:38 +00:00
|
|
|
allowSelected : false,
|
|
|
|
pivotIndex : pivotIndex,
|
2017-07-12 08:28:44 +00:00
|
|
|
index : index,
|
2017-07-13 12:37:38 +00:00
|
|
|
value : name,
|
2017-07-12 12:15:11 +00:00
|
|
|
tip : (name.length>10) ? name : ''
|
2017-07-12 08:28:44 +00:00
|
|
|
}));
|
|
|
|
isChecked[name] = true;
|
|
|
|
}
|
2017-07-11 11:02:16 +00:00
|
|
|
});
|
|
|
|
this.columnsList.store.reset(arr);
|
|
|
|
this.columnsList.scroller.update({minScrollbarLength : 40, alwaysVisibleY: true, suppressScrollX: true});
|
|
|
|
|
|
|
|
arr = [];
|
|
|
|
value = props.asc_getRowFields();
|
2017-07-13 12:37:38 +00:00
|
|
|
value && value.forEach(function (item, index) {
|
|
|
|
var pivotIndex = item.asc_getIndex();
|
|
|
|
if (pivotIndex>-1 || pivotIndex == -2) {
|
2017-07-14 14:10:09 +00:00
|
|
|
var name = (pivotIndex>-1) ? me._state.names[pivotIndex] : me.textValues;
|
2017-07-12 08:28:44 +00:00
|
|
|
arr.push(new Common.UI.DataViewModel({
|
|
|
|
selected : false,
|
2017-07-13 12:37:38 +00:00
|
|
|
allowSelected : false,
|
|
|
|
pivotIndex : pivotIndex,
|
2017-07-12 08:28:44 +00:00
|
|
|
index : index,
|
2017-07-12 12:15:11 +00:00
|
|
|
value : name,
|
|
|
|
tip : (name.length>10) ? name : ''
|
2017-07-12 08:28:44 +00:00
|
|
|
}));
|
|
|
|
isChecked[name] = true;
|
|
|
|
}
|
2017-07-11 11:02:16 +00:00
|
|
|
});
|
|
|
|
this.rowsList.store.reset(arr);
|
|
|
|
this.rowsList.scroller.update({minScrollbarLength : 40, alwaysVisibleY: true, suppressScrollX: true});
|
|
|
|
|
|
|
|
arr = [];
|
|
|
|
value = props.asc_getDataFields();
|
2017-07-13 12:37:38 +00:00
|
|
|
value && value.forEach(function (item, index) {
|
|
|
|
var pivotIndex = item.asc_getIndex();
|
|
|
|
if (pivotIndex>-1) {
|
2017-07-12 12:15:11 +00:00
|
|
|
var name = item.asc_getName();
|
2017-07-12 08:28:44 +00:00
|
|
|
arr.push(new Common.UI.DataViewModel({
|
|
|
|
selected : false,
|
2017-07-13 12:37:38 +00:00
|
|
|
allowSelected : false,
|
|
|
|
pivotIndex : pivotIndex,
|
2017-07-12 08:28:44 +00:00
|
|
|
index : index,
|
2017-07-12 12:15:11 +00:00
|
|
|
value : name,
|
|
|
|
tip : (name.length>10) ? name : ''
|
2017-07-12 08:28:44 +00:00
|
|
|
}));
|
2017-07-14 14:10:09 +00:00
|
|
|
isChecked[me._state.names[pivotIndex]] = true;
|
2017-07-12 08:28:44 +00:00
|
|
|
}
|
2017-07-11 11:02:16 +00:00
|
|
|
});
|
|
|
|
this.valuesList.store.reset(arr);
|
|
|
|
this.valuesList.scroller.update({minScrollbarLength : 40, alwaysVisibleY: true, suppressScrollX: true});
|
|
|
|
|
|
|
|
arr = [];
|
|
|
|
value = props.asc_getPageFields();
|
2017-07-13 12:37:38 +00:00
|
|
|
value && value.forEach(function (item, index) {
|
|
|
|
var pivotIndex = item.asc_getIndex();
|
|
|
|
if (pivotIndex>-1) {
|
2017-07-14 14:10:09 +00:00
|
|
|
var name = me._state.names[pivotIndex];
|
2017-07-12 08:28:44 +00:00
|
|
|
arr.push(new Common.UI.DataViewModel({
|
|
|
|
selected : false,
|
2017-07-13 12:37:38 +00:00
|
|
|
allowSelected : false,
|
|
|
|
pivotIndex : pivotIndex,
|
2017-07-12 08:28:44 +00:00
|
|
|
index : index,
|
2017-07-12 12:15:11 +00:00
|
|
|
value : name,
|
|
|
|
tip : (name.length>10) ? name : ''
|
2017-07-12 08:28:44 +00:00
|
|
|
}));
|
|
|
|
isChecked[name] = true;
|
|
|
|
}
|
2017-07-11 11:02:16 +00:00
|
|
|
});
|
|
|
|
this.filtersList.store.reset(arr);
|
|
|
|
this.filtersList.scroller.update({minScrollbarLength : 40, alwaysVisibleY: true, suppressScrollX: true});
|
|
|
|
|
|
|
|
arr = [];
|
2017-07-14 14:10:09 +00:00
|
|
|
me._state.names.forEach(function (item, index) {
|
2017-07-11 11:02:16 +00:00
|
|
|
arr.push(new Common.UI.DataViewModel({
|
|
|
|
selected : false,
|
2017-07-13 12:37:38 +00:00
|
|
|
allowSelected : false,
|
2017-07-11 11:02:16 +00:00
|
|
|
value : item,
|
2017-07-13 12:37:38 +00:00
|
|
|
index : index,
|
2017-07-14 14:10:09 +00:00
|
|
|
tip : (item.length>25) ? item : '',
|
2017-07-11 11:02:16 +00:00
|
|
|
check : isChecked[item]
|
|
|
|
}));
|
|
|
|
});
|
|
|
|
this.fieldsList.store.reset(arr);
|
|
|
|
this.fieldsList.scroller.update({minScrollbarLength : 40, alwaysVisibleY: true, suppressScrollX: true});
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
onFieldsCheck: function (listView, itemView, record) {
|
|
|
|
if (this.checkCellTrigerBlock)
|
|
|
|
return;
|
|
|
|
|
|
|
|
var target = '', type = '', isLabel = false, bound = null;
|
|
|
|
|
|
|
|
var event = window.event ? window.event : window._event;
|
|
|
|
if (event) {
|
2017-07-13 12:37:38 +00:00
|
|
|
|
|
|
|
var btn = $(event.target);
|
|
|
|
if (btn && btn.hasClass('listitem-icon')) {
|
2017-07-21 08:46:12 +00:00
|
|
|
this._state.field = {record: record};
|
2017-07-13 12:37:38 +00:00
|
|
|
if (this.pivotFieldsMenu) {
|
|
|
|
if (this.pivotFieldsMenu.isVisible()) {
|
|
|
|
this.pivotFieldsMenu.hide();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
this.miAddFilter = new Common.UI.MenuItem({
|
|
|
|
caption : this.txtAddFilter,
|
|
|
|
checkable : false
|
|
|
|
});
|
2017-07-21 08:46:12 +00:00
|
|
|
this.miAddFilter.on('click', _.bind(this.onAddFilter, this));
|
2017-07-13 12:37:38 +00:00
|
|
|
this.miAddRow = new Common.UI.MenuItem({
|
|
|
|
caption : this.txtAddRow,
|
|
|
|
checkable : false
|
|
|
|
});
|
2019-09-30 15:54:37 +00:00
|
|
|
this.miAddRow.on('click', _.bind(this.onAddRow, this));
|
2017-07-13 12:37:38 +00:00
|
|
|
this.miAddColumn = new Common.UI.MenuItem({
|
|
|
|
caption : this.txtAddColumn,
|
|
|
|
checkable : false
|
|
|
|
});
|
2019-09-30 15:54:37 +00:00
|
|
|
this.miAddColumn.on('click', _.bind(this.onAddColumn, this));
|
2017-07-13 12:37:38 +00:00
|
|
|
this.miAddValues = new Common.UI.MenuItem({
|
|
|
|
caption : this.txtAddValues,
|
|
|
|
checkable : false
|
|
|
|
});
|
2019-09-30 15:54:37 +00:00
|
|
|
this.miAddValues.on('click', _.bind(this.onAddValues, this));
|
2017-07-13 12:37:38 +00:00
|
|
|
|
|
|
|
this.pivotFieldsMenu = new Common.UI.Menu({
|
|
|
|
menuAlign: 'tr-br',
|
|
|
|
items: [
|
|
|
|
this.miAddFilter,
|
|
|
|
this.miAddRow,
|
|
|
|
this.miAddColumn,
|
|
|
|
this.miAddValues
|
|
|
|
]
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
var recIndex = (record != undefined) ? record.get('index') : -1;
|
|
|
|
|
|
|
|
var menu = this.pivotFieldsMenu,
|
|
|
|
showPoint, me = this,
|
|
|
|
currentTarget = $(event.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-pivot-fields-container');
|
|
|
|
if (!menu.rendered) {
|
|
|
|
if (menuContainer.length < 1) {
|
|
|
|
menuContainer = $('<div id="menu-pivot-fields-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);
|
|
|
|
}).on('hide:after', function(cmp) {
|
|
|
|
if (cmp && cmp.menuAlignEl)
|
|
|
|
cmp.menuAlignEl.toggleClass('over', false);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
menu.menuAlignEl = currentTarget;
|
|
|
|
menu.setOffset(-20, -currentTarget.height()/2 - 3);
|
|
|
|
menu.show();
|
|
|
|
_.delay(function() {
|
|
|
|
menu.cmpEl.focus();
|
|
|
|
}, 10);
|
|
|
|
event.stopPropagation();
|
|
|
|
event.preventDefault();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2017-07-11 11:02:16 +00:00
|
|
|
type = event.target.type;
|
|
|
|
target = $(event.currentTarget).find('.list-item');
|
|
|
|
|
|
|
|
if (target.length) {
|
|
|
|
bound = target.get(0).getBoundingClientRect();
|
|
|
|
var _clientX = event.clientX*Common.Utils.zoom(),
|
|
|
|
_clientY = event.clientY*Common.Utils.zoom();
|
|
|
|
if (bound.left < _clientX && _clientX < bound.right &&
|
|
|
|
bound.top < _clientY && _clientY < bound.bottom) {
|
|
|
|
isLabel = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (type === 'button' || isLabel) {
|
|
|
|
this.updateFieldCheck(listView, record);
|
|
|
|
|
|
|
|
_.delay(function () {
|
|
|
|
listView.$el.find('.listview').focus();
|
|
|
|
}, 100, this);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
updateFieldCheck: function (listView, record) {
|
|
|
|
if (record && listView) {
|
|
|
|
listView.isSuspendEvents = true;
|
|
|
|
|
|
|
|
record.set('check', !record.get('check'));
|
2019-09-30 15:54:37 +00:00
|
|
|
if (this.api && !this._locked){
|
|
|
|
if (record.get('check')) {
|
|
|
|
this._originalProps.asc_addField(this.api, record.get('index'));
|
|
|
|
} else {
|
|
|
|
this._originalProps.asc_removeField(this.api, record.get('index'));
|
|
|
|
}
|
|
|
|
}
|
2017-07-11 11:02:16 +00:00
|
|
|
|
|
|
|
listView.isSuspendEvents = false;
|
|
|
|
listView.scroller.update({minScrollbarLength : 40, alwaysVisibleY: true, suppressScrollX: true});
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2017-07-13 12:37:38 +00:00
|
|
|
onColumnsSelect: function(type, picker, item, record, e){
|
|
|
|
var btn = $(e.target);
|
|
|
|
if (btn && btn.hasClass('listitem-icon')) {
|
2017-07-18 08:44:12 +00:00
|
|
|
this._state.field = {record: record, type: type};
|
2017-07-13 12:37:38 +00:00
|
|
|
if (this.fieldsMenu) {
|
|
|
|
if (this.fieldsMenu.isVisible()) {
|
|
|
|
this.fieldsMenu.hide();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
this.miMoveUp = new Common.UI.MenuItem({
|
|
|
|
caption : this.txtMoveUp,
|
|
|
|
checkable : false
|
|
|
|
});
|
|
|
|
// this.miMoveUp.on('click', _.bind(this.onMoveUp, this));
|
|
|
|
this.miMoveDown = new Common.UI.MenuItem({
|
|
|
|
caption : this.txtMoveDown,
|
|
|
|
checkable : false
|
|
|
|
});
|
|
|
|
// this.miMoveDown.on('click', _.bind(this.onMoveDown, this));
|
|
|
|
this.miMoveBegin = new Common.UI.MenuItem({
|
|
|
|
caption : this.txtMoveBegin,
|
|
|
|
checkable : false
|
|
|
|
});
|
|
|
|
// this.miMoveBegin.on('click', _.bind(this.onMoveBegin, this));
|
|
|
|
this.miMoveEnd = new Common.UI.MenuItem({
|
|
|
|
caption : this.txtMoveEnd,
|
|
|
|
checkable : false
|
|
|
|
});
|
|
|
|
// this.miMoveEnd.on('click', _.bind(this.onMoveEnd, this));
|
|
|
|
|
|
|
|
this.miMoveFilter = new Common.UI.MenuItem({
|
|
|
|
caption : this.txtMoveFilter,
|
|
|
|
checkable : false
|
|
|
|
});
|
|
|
|
// this.miMoveFilter.on('click', _.bind(this.onMoveFilter, this));
|
|
|
|
this.miMoveRow = new Common.UI.MenuItem({
|
|
|
|
caption : this.txtMoveRow,
|
|
|
|
checkable : false
|
|
|
|
});
|
|
|
|
// this.miMoveRow.on('click', _.bind(this.onMoveRow, this));
|
|
|
|
this.miMoveColumn = new Common.UI.MenuItem({
|
|
|
|
caption : this.txtMoveColumn,
|
|
|
|
checkable : false
|
|
|
|
});
|
|
|
|
// this.miMoveColumn.on('click', _.bind(this.onMoveColumn, this));
|
|
|
|
this.miMoveValues = new Common.UI.MenuItem({
|
|
|
|
caption : this.txtMoveValues,
|
|
|
|
checkable : false
|
|
|
|
});
|
|
|
|
// this.miMoveValues.on('click', _.bind(this.onMoveValues, this));
|
|
|
|
|
|
|
|
this.miRemove = new Common.UI.MenuItem({
|
|
|
|
caption : this.txtRemove,
|
|
|
|
checkable : false
|
|
|
|
});
|
2017-07-21 14:41:40 +00:00
|
|
|
this.miRemove.on('click', _.bind(this.onRemove, this));
|
2017-07-13 12:37:38 +00:00
|
|
|
|
|
|
|
this.miFieldSettings = new Common.UI.MenuItem({
|
|
|
|
caption : this.txtFieldSettings,
|
|
|
|
checkable : false
|
|
|
|
});
|
2017-07-18 08:44:12 +00:00
|
|
|
this.miFieldSettings.on('click', _.bind(this.onFieldSettings, this));
|
2017-07-13 12:37:38 +00:00
|
|
|
|
|
|
|
this.fieldsMenu = new Common.UI.Menu({
|
|
|
|
menuAlign: 'tr-br',
|
|
|
|
items: [
|
|
|
|
this.miMoveUp,
|
|
|
|
this.miMoveDown,
|
|
|
|
this.miMoveBegin,
|
|
|
|
this.miMoveEnd,
|
|
|
|
{caption : '--'},
|
|
|
|
this.miMoveFilter,
|
|
|
|
this.miMoveRow,
|
|
|
|
this.miMoveColumn,
|
|
|
|
this.miMoveValues,
|
|
|
|
{caption : '--'},
|
|
|
|
this.miRemove,
|
|
|
|
{caption : '--'},
|
|
|
|
this.miFieldSettings
|
|
|
|
]
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
this.miMoveFilter.setDisabled(type == 3); // menu for filter
|
|
|
|
this.miMoveRow.setDisabled(type == 1); // menu for row
|
|
|
|
this.miMoveColumn.setDisabled(type == 0); // menu for column
|
|
|
|
this.miMoveValues.setDisabled(type == 2); // menu for value
|
|
|
|
|
|
|
|
var recIndex = (record != undefined) ? record.get('index') : -1,
|
|
|
|
len = picker.store.length;
|
|
|
|
this.miMoveUp.setDisabled(recIndex<1);
|
|
|
|
this.miMoveDown.setDisabled(recIndex>len-2 || recIndex<0);
|
|
|
|
this.miMoveBegin.setDisabled(recIndex<1);
|
|
|
|
this.miMoveEnd.setDisabled(recIndex>len-2 || recIndex<0);
|
|
|
|
|
|
|
|
this.miFieldSettings.setDisabled(record.get('pivotIndex')==-2);
|
|
|
|
|
|
|
|
var menu = this.fieldsMenu,
|
|
|
|
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-pivot-container');
|
|
|
|
if (!menu.rendered) {
|
|
|
|
if (menuContainer.length < 1) {
|
|
|
|
menuContainer = $('<div id="menu-pivot-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);
|
|
|
|
}).on('hide:after', function(cmp) {
|
|
|
|
if (cmp && cmp.menuAlignEl)
|
|
|
|
cmp.menuAlignEl.toggleClass('over', false);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
menu.menuAlignEl = currentTarget;
|
|
|
|
menu.setOffset(-20, -currentTarget.height()/2 - 3);
|
|
|
|
menu.show();
|
|
|
|
_.delay(function() {
|
|
|
|
menu.cmpEl.focus();
|
|
|
|
}, 10);
|
|
|
|
e.stopPropagation();
|
|
|
|
e.preventDefault();
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2017-07-11 11:02:16 +00:00
|
|
|
setLocked: function (locked) {
|
|
|
|
this._locked = locked;
|
|
|
|
},
|
|
|
|
|
2017-07-14 14:10:09 +00:00
|
|
|
onFieldSettings: function(record, type, e) {
|
2017-07-13 12:37:38 +00:00
|
|
|
var me = this;
|
|
|
|
var win;
|
2017-07-18 08:44:12 +00:00
|
|
|
if (me.api && !this._locked && me._state.field){
|
|
|
|
if (me._state.field.type == 2) { // value field
|
2017-07-19 11:29:21 +00:00
|
|
|
var field = me._originalProps.asc_getDataFields()[me._state.field.record.get('index')];
|
2017-07-14 14:10:09 +00:00
|
|
|
(new SSE.Views.ValueFieldSettingsDialog(
|
2017-07-13 12:37:38 +00:00
|
|
|
{
|
2017-07-14 14:10:09 +00:00
|
|
|
props: me._originalProps,
|
2017-07-19 11:29:21 +00:00
|
|
|
field: field,
|
2017-07-14 14:10:09 +00:00
|
|
|
names: me._state.names,
|
2017-07-13 12:37:38 +00:00
|
|
|
api: me.api,
|
|
|
|
handler: function(result, value) {
|
|
|
|
if (result == 'ok' && me.api && value) {
|
2017-07-19 11:29:21 +00:00
|
|
|
field.asc_set(me.api, me._originalProps, value);
|
2017-07-13 12:37:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
Common.NotificationCenter.trigger('edit:complete', me);
|
|
|
|
}
|
|
|
|
})).show();
|
2017-07-17 14:18:52 +00:00
|
|
|
} else {
|
2019-09-30 15:54:37 +00:00
|
|
|
var pivotField = me._originalProps.asc_getPivotFields()[me._state.field.record.get('pivotIndex')];
|
2017-07-17 14:18:52 +00:00
|
|
|
(new SSE.Views.FieldSettingsDialog(
|
|
|
|
{
|
|
|
|
props: me._originalProps,
|
2017-08-04 14:09:58 +00:00
|
|
|
fieldIndex: me._state.field.record.get('pivotIndex'),
|
2017-07-17 14:18:52 +00:00
|
|
|
names: me._state.names,
|
|
|
|
api: me.api,
|
2017-07-18 08:44:12 +00:00
|
|
|
type: me._state.field.type,
|
2017-07-17 14:18:52 +00:00
|
|
|
handler: function(result, value) {
|
|
|
|
if (result == 'ok' && me.api && value) {
|
2019-09-30 15:54:37 +00:00
|
|
|
pivotField.asc_set(me.api, me._originalProps, value);
|
2017-07-17 14:18:52 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
Common.NotificationCenter.trigger('edit:complete', me);
|
|
|
|
}
|
|
|
|
})).show();
|
|
|
|
}
|
2017-07-13 12:37:38 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2017-07-21 08:46:12 +00:00
|
|
|
onAddFilter: function() {
|
|
|
|
if (this.api && !this._locked && this._state.field){
|
|
|
|
this._originalProps.asc_addPageField(this.api, this._state.field.record.get('index'));
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2019-09-30 15:54:37 +00:00
|
|
|
onAddRow: function() {
|
|
|
|
if (this.api && !this._locked && this._state.field){
|
|
|
|
this._originalProps.asc_addRowField(this.api, this._state.field.record.get('index'));
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
onAddColumn: function() {
|
|
|
|
if (this.api && !this._locked && this._state.field){
|
|
|
|
this._originalProps.asc_addColField(this.api, this._state.field.record.get('index'));
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
onAddValues: function() {
|
|
|
|
if (this.api && !this._locked && this._state.field){
|
|
|
|
this._originalProps.asc_addDataField(this.api, this._state.field.record.get('index'));
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2017-07-21 14:41:40 +00:00
|
|
|
onRemove: function() {
|
|
|
|
if (this.api && !this._locked && this._state.field){
|
|
|
|
this._originalProps.asc_removeField(this.api, this._state.field.record.get('pivotIndex'));
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2017-07-11 11:02:16 +00:00
|
|
|
disableControls: function(disable) {
|
|
|
|
if (this._initSettings) return;
|
|
|
|
|
|
|
|
if (this._state.DisabledControls!==disable) {
|
|
|
|
this._state.DisabledControls = disable;
|
|
|
|
_.each(this.lockedControls, function(item) {
|
|
|
|
item.setDisabled(disable);
|
|
|
|
});
|
|
|
|
this.linkAdvanced.toggleClass('disabled', disable);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
textFields: 'Select Fields',
|
|
|
|
textOK : 'OK',
|
|
|
|
textCancel : 'Cancel',
|
|
|
|
textValues : 'Values',
|
|
|
|
textRows : 'Rows',
|
|
|
|
textColumns : 'Columns',
|
|
|
|
textFilters : 'Filters',
|
|
|
|
notcriticalErrorTitle : 'Warning',
|
2017-07-13 12:37:38 +00:00
|
|
|
textAdvanced: 'Show advanced settings',
|
|
|
|
txtMoveUp: 'Move Up',
|
|
|
|
txtMoveDown: 'Move Down',
|
|
|
|
txtMoveBegin: 'Move to Beginning',
|
|
|
|
txtMoveEnd: 'Move to End',
|
|
|
|
txtMoveFilter: 'Move to Filters',
|
|
|
|
txtMoveRow: 'Move to Rows',
|
|
|
|
txtMoveColumn: 'Move to Columns',
|
|
|
|
txtMoveValues: 'Move to Values',
|
|
|
|
txtRemove: 'Remove Field',
|
|
|
|
txtFieldSettings: 'Field Settings',
|
|
|
|
txtAddFilter: 'Add to Filters',
|
|
|
|
txtAddRow: 'Add to Rows',
|
|
|
|
txtAddColumn: 'Add to Columns',
|
2017-07-21 14:41:40 +00:00
|
|
|
txtAddValues: 'Add to Values'
|
2017-07-11 11:02:16 +00:00
|
|
|
|
|
|
|
}, SSE.Views.PivotSettings || {}));
|
|
|
|
});
|