Merge pull request #740 from ONLYOFFICE/feature/sse-conditional-formatting

Feature/sse conditional formatting
This commit is contained in:
Julia Radzhabova 2021-03-12 17:34:36 +03:00 committed by GitHub
commit f9d5052638
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
32 changed files with 4594 additions and 26 deletions

View file

@ -279,7 +279,7 @@ define([
Common.UI.ComboBoxColor = Common.UI.ComboBox.extend(_.extend({
template: _.template([
'<div class="input-group combobox input-group-nr <%= cls %>" id="<%= id %>" style="<%= style %>">',
'<div class="input-group combobox combo-color input-group-nr <%= cls %>" id="<%= id %>" style="<%= style %>">',
'<div class="form-control" style="padding:2px 14px 2px 3px; <%= style %> display: block;">',
'<div style="display: inline-block;overflow: hidden;width: 100%;height: 100%;"></div>',
'</div>',
@ -292,7 +292,7 @@ define([
'<li id="<%= item.id %>" data-value="<%= item.value %>"><a tabindex="-1" type="menuitem"><%= scope.getDisplayValue(item) %></a></li>',
'<% } else { %>',
'<li id="<%= item.id %>" data-value="<%= item.value %>">',
'<a tabindex="-1" type="menuitem" style="padding: 5px;"><div style="height: 15px;background-color: #<%= item.value %>"></div></a>',
'<a tabindex="-1" type="menuitem" style="padding: 5px;"><div style="height: 15px;<%= item.styleStr %>"><%= scope.getDisplayValue(item) %></div></a>',
'</li>',
'<% } %>',
'<% }); %>',
@ -319,12 +319,13 @@ define([
updateFormControl: function(record) {
var formcontrol = $(this.el).find('.form-control > div');
formcontrol[0].innerHTML = record.get('displayValue');
if (record.get('value')!=-1) {
formcontrol[0].innerHTML = '';
formcontrol.css({'background': '#' + record.get('value'), 'margin-top': '0'});
formcontrol.css({'margin-top': '0'});
formcontrol.css(record.get('styleObj'));
} else {
formcontrol[0].innerHTML = record.get('displayValue');
formcontrol.css({'background': '', 'margin-top': '1px'});
formcontrol.css({'margin-top': '1px'});
formcontrol.css(record.get('styleObj'));
}
},
@ -339,8 +340,9 @@ define([
$('#' + this._selectedItem.get('id'), $(this.el)).addClass('selected');
} else {
var formcontrol = $(this.el).find('.form-control > div');
formcontrol[0].innerHTML = '';
formcontrol.css('background', '');
formcontrol[0].innerHTML = value;
formcontrol.css('margin-top', '1px');
formcontrol.css({'color': '', 'text-align': '', 'background': '', 'border': ''});
}
},
@ -357,7 +359,7 @@ define([
'<li id="<%= item.id %>" data-value="<%= item.value %>"><a tabindex="-1" type="menuitem"><%= scope.getDisplayValue(item) %></a></li>',
'<% } else { %>',
'<li id="<%= item.id %>" data-value="<%= item.value %>">',
'<a tabindex="-1" type="menuitem" style="padding: 5px;"><div style="height: 15px;background-color: #<%= item.value %>"></div></a>',
'<a tabindex="-1" type="menuitem" style="padding: 5px;"><div style="height: 15px;<%= item.styleStr %>"><%= scope.getDisplayValue(item) %></div></a>',
'</li>',
'<% } %>',
'<% }); %>'
@ -382,4 +384,120 @@ define([
}, Common.UI.ComboBoxColor || {}));
Common.UI.ComboBoxIcons= Common.UI.ComboBox.extend(_.extend({
template: _.template([
'<div class="input-group combobox combo-color input-group-nr <%= cls %>" id="<%= id %>" style="<%= style %>">',
'<div class="form-control" style="padding:2px 0 2px 3px; <%= style %> display: block;">',
'<div style="display: inline-block;overflow: hidden;width: 100%;height: 100%;"></div>',
'</div>',
'<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">',
'<span class="caret"></span>',
'</button>',
'<ul class="dropdown-menu <%= menuCls %>" style="<%= menuStyle %>" role="menu">',
'<% _.each(items, function(item) { %>',
'<% if (item.value==-1) { %>',
'<li id="<%= item.id %>" data-value="<%= item.value %>"><a tabindex="-1" type="menuitem"><%= scope.getDisplayValue(item) %></a></li>',
'<% } else { %>',
'<li id="<%= item.id %>" data-value="<%= item.value %>">',
'<a tabindex="-1" type="menuitem" style="padding: 5px;">',
'<% _.each(item.data.iconSet, function(icon) { %>',
'<img src="<%= item.data.icons.at(icon-1).get(\'icon\') %>" style="width:16px;height:16px;margin-right: 5px;">',
'<% }) %>',
'</a>',
'</li>',
'<% } %>',
'<% }); %>',
'</ul>',
'</div>'
].join('')),
itemClicked: function (e) {
var el = $(e.currentTarget).parent();
this._selectedItem = this.store.findWhere({
id: el.attr('id')
});
if (this._selectedItem) {
$('.selected', $(this.el)).removeClass('selected');
el.addClass('selected');
this.updateFormControl(this._selectedItem);
this.trigger('selected', this, _.extend({}, this._selectedItem.toJSON()), e);
e.preventDefault();
}
},
updateFormControl: function(record) {
var formcontrol = $(this.el).find('.form-control > div');
if (record.get('value')!=-1) {
var str = '';
_.each(record.get('data').iconSet, function(icon) {
str += '<img src="' + record.get('data').icons.at(icon-1).get("icon") + '" style="width:16px;height:16px;margin-right: 5px;">';
});
formcontrol[0].innerHTML = str;
formcontrol.css({'margin-top': '0'});
} else {
formcontrol[0].innerHTML = record.get('displayValue');
formcontrol.css({'margin-top': '1px'});
}
},
setValue: function(value) {
var obj;
this._selectedItem = this.store.findWhere((obj={}, obj[this.valueField]=value, obj));
$('.selected', $(this.el)).removeClass('selected');
if (this._selectedItem) {
this.updateFormControl(this._selectedItem);
$('#' + this._selectedItem.get('id'), $(this.el)).addClass('selected');
} else {
var formcontrol = $(this.el).find('.form-control > div');
formcontrol[0].innerHTML = value;
formcontrol.css({'margin-top': '1px'});
}
},
onResetItems: function() {
if (this.itemsTemplate) {
$(this.el).find('ul').html( $(this.itemsTemplate({
items: this.store.toJSON(),
scope: this
})));
} else {
$(this.el).find('ul').html(_.template([
'<% _.each(items, function(item) { %>',
'<% if (item.value==-1) { %>',
'<li id="<%= item.id %>" data-value="<%= item.value %>"><a tabindex="-1" type="menuitem"><%= scope.getDisplayValue(item) %></a></li>',
'<% } else { %>',
'<li id="<%= item.id %>" data-value="<%= item.value %>">',
'<a tabindex="-1" type="menuitem" style="padding: 5px;">',
'<% _.each(item.data.iconSet, function(icon) { %>',
'<img src="<%= item.data.icons.at(icon-1).get(\'icon\') %>" style="width:16px;height:16px;margin-right: 5px;">',
'<% }) %>',
'</a>',
'</li>',
'<% } %>',
'<% }); %>'
].join(''))({
items: this.store.toJSON(),
scope: this
}));
}
if (!_.isUndefined(this.scroller)) {
this.scroller.destroy();
delete this.scroller;
}
this.scroller = new Common.UI.Scroller(_.extend({
el: $('.dropdown-menu', this.cmpEl),
minScrollbarLength : 40,
includePadding : true,
wheelSpeed: 10,
alwaysVisibleY: this.scrollAlwaysVisible
}, this.options.scroller));
}
}, Common.UI.ComboBoxIcons || {}));
});

View file

@ -541,4 +541,59 @@ define(function(){ 'use strict';
}
}
})(), Common.define.chartData || {});
Common.define.conditionalData = _.extend( new(function() {
return {
textDate: 'Date',
textYesterday: 'Yesterday',
textToday: 'Today',
textTomorrow: 'Tomorrow',
textLast7days: 'In the last 7 days',
textLastWeek: 'Last week',
textThisWeek: 'This week',
textNextWeek: 'Next week',
textLastMonth: 'Last month',
textThisMonth: 'This month',
textNextMonth: 'Next month',
textText: 'Text',
textContains: 'Contains',
textNotContains: 'Does not contain',
textBegins: 'Begins with',
textEnds: 'Ends with',
textAverage: 'Average',
textAbove: 'Above',
textBelow: 'Below',
textEqAbove: 'Equal to or above',
textEqBelow: 'Equal to or below',
text1Above: '1 std dev above',
text1Below: '1 std dev below',
text2Above: '2 std dev above',
text2Below: '2 std dev below',
text3Above: '3 std dev above',
text3Below: '3 std dev below',
textGreater: 'Greater than',
textGreaterEq: 'Greater than or equal to',
textLess: 'Less than',
textLessEq: 'Less than or equal to',
textEqual: 'Equal to',
textNotEqual: 'Not equal to',
textBetween: 'Between',
textNotBetween: 'Not between',
textTop: 'Top',
textBottom: 'Bottom',
textBlank: 'Blank',
textError: 'Error',
textBlanks: 'Contains blanks',
textNotBlanks: 'Does not contain blanks',
textErrors: 'Contains errors',
textNotErrors: 'Does not contain errors',
textDuplicate: 'Duplicate',
textUnique: 'Unique',
textDataBar: 'Data bar',
textIconSets: 'Icon sets',
textFormula: 'Formula',
exampleText: 'AaBbCcYyZz',
noFormatText: 'No format set'
}
})(), Common.define.conditionalData || {});
});

View file

@ -305,7 +305,7 @@ Common.Utils.ThemeColor = new(function() {
},
colorValue2EffectId: function(clr){
if (typeof(clr) == 'object' && clr.effectValue !== undefined && this.effectcolors) {
if (typeof(clr) == 'object' && clr && clr.effectValue !== undefined && this.effectcolors) {
for (var i = 0; i < this.effectcolors.length; i++) {
if (this.effectcolors[i].effectValue===clr.effectValue && clr.color.toUpperCase()===this.effectcolors[i].color.toUpperCase()) {
clr.effectId = this.effectcolors[i].effectId;

View file

@ -53,3 +53,9 @@
}
}
}
.combo-color {
.form-control:not(input) {
cursor: pointer;
}
}

View file

@ -137,7 +137,6 @@ textarea.form-control:focus {
right: 22px;
}
}
input {
padding-right: 20px;
}

View file

@ -634,3 +634,57 @@
border: @scaled-one-px-value solid @border-regular-control;
.background-ximage-v2('toolbar/math.png', 1500px);
}
.item-databar {
.icon {
width: 25px;
height: 25px;
}
svg.icon {
display: inline-block;
vertical-align: middle;
fill: @icon-normal-ie;
fill: @icon-normal;
}
width: 25px;
height: 25px;
}
.item-colorscale {
.icon {
width: 25px;
height: 25px;
}
svg.icon {
display: inline-block;
vertical-align: middle;
fill: @icon-normal-ie;
fill: @icon-normal;
}
width: 25px;
height: 25px;
}
.menu-iconsets {
margin: 5px 5px 0 10px;
.group-items-container > div {
margin-right: 8px !important;
&:not(:hover),
&:not(.selected) {
.box-shadow(none);
}
}
.item-iconset {
img {
margin: 2px;
}
width: 100px;
height: 20px;
}
}

View file

@ -0,0 +1,68 @@
/*
*
* (c) Copyright Ascensio System SIA 2010-2021
*
* 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 20A-12 Ernesta Birznieka-Upisha
* street, Riga, Latvia, EU, LV-1050.
*
* 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
*
*/
/**
* ConditionalFormatIcons.js
*
* Created by Julia Radzhabova on 25.02.21
* Copyright (c) 2021 Ascensio System SIA. All rights reserved.
*
*/
define([
'backbone'
], function(Backbone){ 'use strict';
SSE.Collections.ConditionalFormatIcons = Backbone.Collection.extend({
model: Backbone.Model.extend({
defaults: function() {
return {
id: Common.UI.getId(),
index: 0,
icon: null
}
}
})
});
SSE.Collections.ConditionalFormatIconsPresets = Backbone.Collection.extend({
model: Backbone.Model.extend({
defaults: function() {
return {
id: Common.UI.getId(),
data: 0,
icons: null
}
}
})
});
});

View file

@ -196,6 +196,7 @@ define([
view.pmiSortCells.menu.on('item:click', _.bind(me.onSortCells, me));
view.pmiFilterCells.menu.on('item:click', _.bind(me.onFilterCells, me));
view.pmiReapply.on('click', _.bind(me.onReapply, me));
view.pmiCondFormat.on('click', _.bind(me.onCondFormat, me));
view.pmiClear.menu.on('item:click', _.bind(me.onClear, me));
view.pmiSelectTable.menu.on('item:click', _.bind(me.onSelectTable, me));
view.pmiInsertTable.menu.on('item:click', _.bind(me.onInsertTable, me));
@ -474,6 +475,24 @@ define([
this.api.asc_reapplyAutoFilter(this.documentHolder.ssMenu.formatTableName);
},
onCondFormat: function() {
var me = this,
value = me.api.asc_getLocale();
(!value) && (value = ((me.permissions.lang) ? parseInt(Common.util.LanguageInfo.getLocalLanguageCode(me.permissions.lang)) : 0x0409));
(new SSE.Views.FormatRulesEditDlg({
api: me.api,
props : null,
isEdit : false,
langId : value,
handler : function(result, settings) {
if (result == 'ok' && settings) {
me.api.asc_setCF([settings], []);
}
}
})).show();
},
onClear: function(menu, item) {
if (this.api) {
this.api.asc_emptyCells(item.value);
@ -1881,6 +1900,7 @@ define([
documentHolder.pmiSortCells.menu.items[4].setVisible(!internaleditor);
documentHolder.pmiFilterCells.setVisible(iscellmenu && !iscelledit && !internaleditor);
documentHolder.pmiReapply.setVisible((iscellmenu||isallmenu) && !iscelledit && !internaleditor);
documentHolder.pmiCondFormat.setVisible(!iscelledit && !internaleditor);
documentHolder.ssMenu.items[12].setVisible((iscellmenu||isallmenu||isinsparkline) && !iscelledit);
documentHolder.pmiInsFunction.setVisible(iscellmenu && !iscelledit);
documentHolder.pmiAddNamedRange.setVisible(iscellmenu && !iscelledit && !internaleditor);
@ -1960,6 +1980,7 @@ define([
documentHolder.pmiFilterCells.setDisabled(isCellLocked || isTableLocked|| (filterInfo==null) || inPivot || !filterInfo && !this.permissions.canModifyFilter);
documentHolder.pmiSortCells.setDisabled(isCellLocked || isTableLocked|| (filterInfo==null) || inPivot || !this.permissions.canModifyFilter);
documentHolder.pmiReapply.setDisabled(isCellLocked || isTableLocked|| (isApplyAutoFilter!==true));
documentHolder.pmiCondFormat.setDisabled(isCellLocked || isTableLocked);
documentHolder.menuHyperlink.setDisabled(isCellLocked || inPivot);
documentHolder.menuAddHyperlink.setDisabled(isCellLocked || inPivot);
documentHolder.pmiInsFunction.setDisabled(isCellLocked || inPivot);

View file

@ -55,6 +55,7 @@ define([
'spreadsheeteditor/main/app/collection/ShapeGroups',
'spreadsheeteditor/main/app/collection/TableTemplates',
'spreadsheeteditor/main/app/collection/EquationGroups',
'spreadsheeteditor/main/app/collection/ConditionalFormatIcons',
'spreadsheeteditor/main/app/controller/FormulaDialog'
], function () {
'use strict';
@ -87,6 +88,8 @@ define([
'ShapeGroups',
'EquationGroups',
'TableTemplates',
'ConditionalFormatIcons',
'ConditionalFormatIconsPresets',
'Common.Collections.TextArt'
],
views: [],
@ -2034,7 +2037,35 @@ define([
});
artStore.reset(arr);
},
fillCondFormatIcons: function(icons){
if (_.isEmpty(icons)) return;
var arr = [],
store = this.getCollection('ConditionalFormatIcons');
_.each(icons, function(icon, index){
arr.push({
icon : icon,
index : index
});
});
store.reset(arr);
},
fillCondFormatIconsPresets: function(iconSets){
if (_.isEmpty(iconSets)) return;
var arr = [],
store = this.getCollection('ConditionalFormatIconsPresets');
_.each(iconSets, function(iconSet, index){
arr.push({
icons : iconSet,
data : index
});
});
store.reset(arr);
},
updateThemeColors: function() {
var me = this;
setTimeout(function(){

View file

@ -60,6 +60,7 @@ define([
'spreadsheeteditor/main/app/view/HeaderFooterDialog',
'spreadsheeteditor/main/app/view/PrintTitlesDialog',
'spreadsheeteditor/main/app/view/ScaleDialog',
'spreadsheeteditor/main/app/view/FormatRulesManagerDlg',
'spreadsheeteditor/main/app/view/SlicerAddDialog',
'spreadsheeteditor/main/app/view/AdvancedSeparatorDialog'
], function () { 'use strict';
@ -186,7 +187,8 @@ define([
pgsize: [0, 0],
pgmargins: undefined,
pgorient: undefined,
lock_doc: undefined
lock_doc: undefined,
cf_locked: []
};
this.binding = {};
@ -391,7 +393,13 @@ define([
button.on('click', _.bind(me.onEditHeaderClick, me));
});
toolbar.btnPrintTitles.on('click', _.bind(this.onPrintTitlesClick, this));
if (toolbar.btnCondFormat.rendered) {
toolbar.btnCondFormat.menu.on('show:before', _.bind(this.onShowBeforeCondFormat, this));
toolbar.btnCondFormat.menu.on('item:click', _.bind(this.onCondFormatMenu, this));
toolbar.btnCondFormat.menu.items[7].menu.on('item:click', _.bind(this.onCondFormatMenu, this));
toolbar.btnCondFormat.menu.items[9].menu.on('item:click', _.bind(this.onCondFormatMenu, this));
toolbar.btnCondFormat.menu.items[21].menu.on('item:click', _.bind(this.onCondFormatMenu, this));
}
Common.Gateway.on('insertimage', _.bind(this.insertImage, this));
this.onSetupCopyStyleButton();
@ -414,6 +422,8 @@ define([
this.api.asc_registerCallback('asc_onCoAuthoringDisconnect',_.bind(this.onApiCoAuthoringDisconnect, this));
Common.NotificationCenter.on('api:disconnect', _.bind(this.onApiCoAuthoringDisconnect, this));
this.api.asc_registerCallback('asc_onLockDefNameManager', _.bind(this.onLockDefNameManager, this));
this.api.asc_registerCallback('asc_onLockCFManager', _.bind(this.onLockCFManager, this));
this.api.asc_registerCallback('asc_onUnLockCFManager', _.bind(this.onUnLockCFManager, this));
this.api.asc_registerCallback('asc_onZoomChanged', _.bind(this.onApiZoomChange, this));
Common.NotificationCenter.on('fonts:change', _.bind(this.onApiChangeFont, this));
} else if (config.isRestrictedEdit)
@ -1581,6 +1591,175 @@ define([
}
},
onShowBeforeCondFormat: function() {
if (this.toolbar.mnuDataBars.menu.items.length>0) // menu is inited
return;
var collectionPresets = SSE.getCollection('ConditionalFormatIconsPresets');
if (collectionPresets.length<1)
SSE.getController('Main').fillCondFormatIconsPresets(this.api.asc_getCFIconsByType());
var collectionIcons = SSE.getCollection('ConditionalFormatIcons');
if (collectionIcons.length<1)
SSE.getController('Main').fillCondFormatIcons(this.api.asc_getFullCFIcons());
var me = this;
var menuItem = this.toolbar.mnuDataBars;
menuItem.menu.addItem(new Common.UI.MenuItem({
template: _.template('<div id="id-toolbar-menu-databar" class="menu-shapes" style="margin-left: 5px; width: 203px;"></div>')
}));
var picker = new Common.UI.DataViewSimple({
el: $('#id-toolbar-menu-databar', menuItem.$el),
parentMenu: menuItem.menu,
itemTemplate: _.template('<div class="item-databar" id="<%= id %>"><svg width="25" height="25" class=\"icon\"><use xlink:href=\"#bar-<%= data.name %>\"></use></svg></div>')
});
picker.on('item:click', function(picker, item, record, e) {
if (me.api) {
if (record) {
me.api.asc_setCF([], [], [Asc.c_oAscCFRuleTypeSettings.dataBar, record.get('data').index]);
}
if (e.type !== 'click')
me.toolbar.btnCondFormat.menu.hide();
Common.NotificationCenter.trigger('edit:complete', me.toolbar, me.toolbar.btnCondFormat);
}
});
var arr = [
{ data: {name: 'gradient-blue', index: 0} },
{ data: {name: 'gradient-green', index: 1} },
{ data: {name: 'gradient-red', index: 2} },
{ data: {name: 'gradient-yellow', index: 3} },
{ data: {name: 'gradient-lightblue', index: 4} },
{ data: {name: 'gradient-purple', index: 5} },
{ data: {name: 'solid-blue', index: 6} },
{ data: {name: 'solid-green', index: 7} },
{ data: {name: 'solid-red', index: 8} },
{ data: {name: 'solid-yellow', index: 9} },
{ data: {name: 'solid-lightblue', index: 10} },
{ data: {name: 'solid-purple', index: 11} }
];
picker.setStore(new Common.UI.DataViewStore(arr));
menuItem = this.toolbar.mnuColorScales;
menuItem.menu.addItem(new Common.UI.MenuItem({
template: _.template('<div id="id-toolbar-menu-colorscales" class="menu-shapes" style="margin-left: 5px; width: 136px;"></div>')
}));
picker = new Common.UI.DataViewSimple({
el: $('#id-toolbar-menu-colorscales', menuItem.$el),
parentMenu: menuItem.menu,
itemTemplate: _.template('<div class="item-colorscale" id="<%= id %>"><svg width="25" height="25" class=\"icon\"><use xlink:href=\"#color-scale-<%= data.name %>\"></use></svg></div>')
});
picker.on('item:click', function(picker, item, record, e) {
if (me.api) {
if (record) {
me.api.asc_setCF([], [], [Asc.c_oAscCFRuleTypeSettings.colorScale, record.get('data').index]);
}
if (e.type !== 'click')
me.toolbar.btnCondFormat.menu.hide();
Common.NotificationCenter.trigger('edit:complete', me.toolbar, me.toolbar.btnCondFormat);
}
});
arr = [
{ data: {name: 'green-yellow-red', index: 0} },
{ data: {name: 'red-yellow-green', index: 1} },
{ data: {name: 'green-white-red', index: 2} },
{ data: {name: 'red-white-green', index: 3} },
{ data: {name: 'blue-white-red', index: 4} },
{ data: {name: 'red-white-blue', index: 5} },
{ data: {name: 'white-red', index: 6} },
{ data: {name: 'red-white', index: 7} },
{ data: {name: 'green-white', index: 8} },
{ data: {name: 'white-green', index: 9} },
{ data: {name: 'green-yellow', index: 10} },
{ data: {name: 'yellow-green', index: 11} }
];
picker.setStore(new Common.UI.DataViewStore(arr));
menuItem = this.toolbar.mnuIconSets;
menuItem.menu.addItem(new Common.UI.MenuItem({
template: _.template('<div id="id-toolbar-menu-iconsets" class="menu-iconsets" style="width: 227px;"></div>')
}));
arr = [];
var indexes = [Asc.EIconSetType.Arrows3, Asc.EIconSetType.Arrows3Gray, Asc.EIconSetType.Triangles3, Asc.EIconSetType.Arrows4Gray, Asc.EIconSetType.Arrows4, Asc.EIconSetType.Arrows5Gray, Asc.EIconSetType.Arrows5];
for (var i=0; i<indexes.length; i++) {
arr.push({group: 'menu-iconset-group-direct', data: {index: indexes[i], iconSet: collectionPresets.at([indexes[i]]).get('icons'), icons: collectionIcons}});
}
indexes = [Asc.EIconSetType.Traffic3Lights1, Asc.EIconSetType.Traffic3Lights2, Asc.EIconSetType.Signs3, Asc.EIconSetType.Traffic4Lights, Asc.EIconSetType.RedToBlack4];
for (var i=0; i<indexes.length; i++) {
arr.push({group: 'menu-iconset-group-shape', data: {index: indexes[i], iconSet: collectionPresets.at([indexes[i]]).get('icons'), icons: collectionIcons}});
}
indexes = [Asc.EIconSetType.Symbols3, Asc.EIconSetType.Symbols3_2, Asc.EIconSetType.Flags3];
for (var i=0; i<indexes.length; i++) {
arr.push({group: 'menu-iconset-group-indicator', data: {index: indexes[i], iconSet: collectionPresets.at([indexes[i]]).get('icons'), icons: collectionIcons}});
}
indexes = [Asc.EIconSetType.Stars3, Asc.EIconSetType.Rating4, Asc.EIconSetType.Quarters5, Asc.EIconSetType.Rating5, Asc.EIconSetType.Boxes5];
for (var i=0; i<indexes.length; i++) {
arr.push({group: 'menu-iconset-group-rating', data: {index: indexes[i], iconSet: collectionPresets.at([indexes[i]]).get('icons'), icons: collectionIcons}});
}
picker = new Common.UI.DataView({
el: $('#id-toolbar-menu-iconsets', menuItem.$el),
parentMenu: menuItem.menu,
groups: new Common.UI.DataViewGroupStore([
{id: 'menu-iconset-group-direct', caption: this.textDirectional},
{id: 'menu-iconset-group-shape', caption: this.textShapes},
{id: 'menu-iconset-group-indicator', caption: this.textIndicator},
{id: 'menu-iconset-group-rating', caption: this.textRating}
]),
store: new Common.UI.DataViewStore(arr),
showLast: false,
itemTemplate: _.template('<div class="item-iconset" id="<%= id %>">' +
'<% _.each(data.iconSet, function(icon) { %>' +
'<img src="<%= data.icons.at(icon-1).get(\'icon\') %>" style="width:16px;height:16px;">' +
'<% }) %>' +
'</div>')
});
picker.on('item:click', function(picker, item, record, e) {
if (me.api) {
if (record) {
me.api.asc_setCF([], [], [Asc.c_oAscCFRuleTypeSettings.icons, record.get('data').index]);
}
if (e.type !== 'click')
me.toolbar.btnCondFormat.menu.hide();
Common.NotificationCenter.trigger('edit:complete', me.toolbar, me.toolbar.btnCondFormat);
}
});
},
onCondFormatMenu: function(menu, item) {
var me = this;
var value = this.api.asc_getLocale();
(!value) && (value = ((this.toolbar.mode.lang) ? parseInt(Common.util.LanguageInfo.getLocalLanguageCode(this.toolbar.mode.lang)) : 0x0409));
if (item.value == 'manage') {
(new SSE.Views.FormatRulesManagerDlg({
api: me.api,
langId: value,
locked: !!me._state.cf_locked[this.api.asc_getActiveWorksheetIndex()],
handler: function (result, settings) {
if (me && me.api && result=='ok') {
me.api.asc_setCF(settings.rules, settings.deleted);
}
}
})).show();
} else if (item.value == 'clear') {
me.api.asc_clearCF(item.options.type);
} else {
(new SSE.Views.FormatRulesEditDlg({
api: me.api,
props : null,
type : item.options.type,
subtype : item.value,
isEdit : false,
langId : value,
handler : function(result, settings) {
if (result == 'ok' && settings) {
me.api.asc_setCF([settings], []);
}
}
})).show();
}
},
createDelayedElements: function() {
var me = this;
@ -2870,7 +3049,7 @@ define([
el: $('#id-toolbar-menu-shapegroup' + i, menu.items[i].$el),
store: shapesStore.at(i).get('groupStore'),
parentMenu: menu.items[i].menu,
itemTemplate: _.template('<div class="item-shape" id="<%= id %>"><svg width="20" height="20" class=\"icon\"><use xlink:href=\"#svg-icon-<%= data.shapeType %>\"></use></svg></div>')
itemTemplate: _.template('<div class="item-shape" id="<%= id %>"><svg width="21" height="21" class=\"icon\"><use xlink:href=\"#svg-icon-<%= data.shapeType %>\"></use></svg></div>')
});
shapePicker.on('item:click', function(picker, item, record, e) {
if (me.api) {
@ -3361,6 +3540,14 @@ define([
this.toolbar.lockToolbar(SSE.enumLock.namedRangeLock, this._state.namedrange_locked, {array: [this.toolbar.btnPrintArea.menu.items[0], this.toolbar.btnPrintArea.menu.items[2]]});
},
onLockCFManager: function(index) {
this._state.cf_locked[index] = true;
},
onUnLockCFManager: function(index) {
this._state.cf_locked[index] = false;
},
activateControls: function() {
this.toolbar.lockToolbar(SSE.enumLock.disableOnStart, false, {array: [this.toolbar.btnPrint]});
this._state.activated = true;
@ -4113,7 +4300,11 @@ define([
textInsert: 'Insert',
txtInsertCells: 'Insert Cells',
txtDeleteCells: 'Delete Cells',
errorComboSeries: 'To create a combination chart, select at least two series of data.'
errorComboSeries: 'To create a combination chart, select at least two series of data.',
textDirectional: 'Directional',
textShapes: 'Shapes',
textIndicator: 'Indicators',
textRating: 'Ratings'
}, SSE.Controllers.Toolbar || {}));
});

View file

@ -0,0 +1,212 @@
<div class="settings-panel active">
<div class="inner-content">
<table cols="1" style="width: 100%;">
<tr>
<td class="padding-small">
<div style="width:150px; display: inline-block; margin-right: 10px;vertical-align: top;">
<label class="header"><%= scope.textRule %></label>
<div id="format-rules-edit-combo-category" class="input-group-nr"></div>
</div>
</td>
</tr>
<tr class="hasformat">
<td class="padding-large">
<div id="format-rules-edit-combo-rule" class="input-group-nr" style="display: inline-block;vertical-align: top;margin-right: 10px;"></div><!--
--><div id="format-rules-edit-txt-r1" class="input-row" style="display: inline-block;vertical-align: top;margin-right: 10px;"></div><!--
--><div id="format-rules-edit-txt-r2" class="input-row" style="display: inline-block;vertical-align: top;"></div><!--
--><div id="format-rules-edit-spin-rank" class="input-row" style="display: inline-block;vertical-align: top;margin-right: 10px;"></div><!--
--><div id="format-rules-edit-combo-percent" class="input-row" style="display: inline-block;vertical-align: top;"></div>
</td>
</tr>
<tr class="hasformat">
<td class="padding-small">
<label class="header"><%= scope.textFormat %></label>
<div>
<div id="format-rules-format-preset" class="input-group-nr" style="display: inline-block;vertical-align: middle;"></div>
</div>
</td>
</tr>
<tr class="hasformat">
<td class="padding-large">
<div>
<div id="format-rules-bold" style="display: inline-block;"></div><div id="format-rules-italic" style="display: inline-block;margin-left: 3px;"></div>
<div id="format-rules-underline" style="display: inline-block;margin-left: 3px;"></div><div id="format-rules-strikeout" style="display: inline-block;margin-left: 3px;"></div>
<div id="format-rules-fontcolor" style="display: inline-block;margin-left: 3px;"></div><div id="format-rules-fillcolor" style="display: inline-block;margin-left: 3px;"></div>
<div id="format-rules-borders" style="display: inline-block;margin-left: 3px;"></div>
<div id="format-rules-edit-combo-num-format" class="input-group-nr" style="display: inline-block;vertical-align: middle;margin-left: 3px;"></div><!--
--><button type="button" class="btn btn-text-default auto" id="format-rules-edit-btn-clear" style="display: inline-block;vertical-align: middle;margin-left: 10px;min-width: 80px;"><%= scope.textClear %></button>
</div>
</td>
</tr>
<tr class="hasformat">
<td class="padding-small">
<label class="header"><%= scope.textPreview %></label>
<div style="border: 1px solid #cbcbcb;width: 150px; height: 40px; padding: 3px;">
<div id="format-rules-edit-preview-format" style="width: 100%; height: 100%; position: relative; margin: 0 auto;"></div>
</div>
</td>
</tr>
<tr class="scale">
<td class="padding-large" style="padding-top: 8px;">
<div style="width:150px; display: inline-block; margin-right: 10px;vertical-align: top;">
<label style="display: block;"><%= scope.textMinpoint %></label>
<div id="format-rules-edit-combo-scale-1" class="input-group-nr" style="margin-bottom: 8px;"></div>
<div id="format-rules-edit-txt-scale-1" class="" style="height: 22px;margin-bottom: 8px;"></div>
<div id="format-rules-edit-color-scale-1" style=""></div>
</div><!--
--><div style="width:150px; display: inline-block; margin-right: 10px;">
<label id="format-rules-edit-lbl-scale-2" style="display: block;"><%= scope.textMidpoint %></label>
<div id="format-rules-edit-combo-scale-2" class="input-group-nr" style="margin-bottom: 8px;"></div>
<div id="format-rules-edit-txt-scale-2" class="" style="height: 22px;margin-bottom: 8px;"></div>
<div id="format-rules-edit-color-scale-2" style=""></div>
</div><!--
--><div style="width:150px; display: inline-block;">
<label style="display: block;"><%= scope.textMaxpoint %></label>
<div id="format-rules-edit-combo-scale-3" class="input-group-nr" style="margin-bottom: 8px;"></div>
<div id="format-rules-edit-txt-scale-3" class="" style="height: 22px;margin-bottom: 8px;"></div>
<div id="format-rules-edit-color-scale-3" style=""></div>
</div>
</td>
</tr>
<tr class="scale">
<td colspan="3" class="padding-small">
<label class="header"><%= scope.textPreview %></label>
<div style="border: 1px solid #cbcbcb;width: 100%; height: 40px; padding: 3px;">
<div id="format-rules-edit-preview-scale" style="width: 100%; height: 100%; position: relative; margin: 0 auto;"></div>
</div>
</td>
</tr>
<tr class="databar">
<td class="padding-large" style="padding-top: 8px;">
<div style="width:150px; display: inline-block; margin-right: 10px;vertical-align: top;">
<label style="display: block;"><%= scope.textMinimum %></label>
<div id="format-rules-edit-combo-bar-1" class="input-group-nr" style="margin-bottom: 8px;"></div>
<div id="format-rules-edit-txt-bar-1" class="" style="height: 22px;"></div>
</div><!--
--><div style="width:150px; display: inline-block;">
<label style="display: block;"><%= scope.textMaximum %></label>
<div id="format-rules-edit-combo-bar-2" class="input-group-nr" style="margin-bottom: 8px;"></div>
<div id="format-rules-edit-txt-bar-2" class="" style="height: 22px;"></div>
</div>
</td>
</tr>
<tr class="databar">
<td class="" style="padding-bottom: 4px;">
<label class="header"><%= scope.textAppearance %></label>
</td>
</tr>
<tr class="databar">
<td class="padding-large" style="">
<div style="width:150px; display: inline-block; margin-right: 10px;vertical-align: top;">
<label style="display: block;"><%= scope.textFill %></label>
<div id="format-rules-edit-combo-fill" class="input-group-nr" style="margin-bottom: 8px;"></div>
<div style="width: 100%;margin-bottom: 4px;height: 23px;">
<label style="margin-top: 4px;"><%= scope.textPositive %></label>
<div id="format-rules-edit-color-pos-fill" style="float: right;"></div>
</div>
<div style="width: 100%;margin-bottom: 8px;height: 23px;">
<label style="margin-top: 4px;"><%= scope.textNegative %></label>
<div id="format-rules-edit-color-neg-fill" style="float: right;"></div>
</div>
<div id="format-rules-edit-chk-fill" style=""></div>
</div><!--
--><div style="width:150px; display: inline-block; margin-right: 10px;vertical-align: top;">
<label style="display: block;"><%= scope.textBorder %></label>
<div id="format-rules-edit-combo-border" class="input-group-nr" style="margin-bottom: 8px;"></div>
<div style="width: 100%;margin-bottom: 4px;height: 23px;">
<label style="margin-top: 4px;"><%= scope.textPositive %></label>
<div id="format-rules-edit-color-pos-border" style="float: right;"></div>
</div>
<div style="width: 100%;margin-bottom: 8px;height: 23px;">
<label style="margin-top: 4px;"><%= scope.textNegative %></label>
<div id="format-rules-edit-color-neg-border" style="float: right;"></div>
</div>
<div id="format-rules-edit-chk-border" style=""></div>
</div><!--
--><div style="width:150px; display: inline-block;vertical-align: top;">
<label style="display: block;"><%= scope.textBarDirection %></label>
<div id="format-rules-edit-combo-direction" class="input-group-nr" style="margin-bottom: 8px;"></div>
<div id="format-rules-edit-chk-show-bar" style="margin-top: 12px;"></div>
</div>
</td>
</tr>
<tr class="databar">
<td class="padding-small">
<div style="float:left;">
<label class="header" style="display: block;"><%= scope.textAxis %></label>
<label style="margin-right: 10px;margin-top: 1px;vertical-align: middle;"><%= scope.textPosition %></label>
<div id="format-rules-edit-combo-axis-pos" class="input-group-nr" style="margin-right: 10px;display: inline-block;vertical-align: middle;"></div>
<div id="format-rules-edit-color-axis-color" style="display: inline-block;vertical-align: middle;"></div>
</div>
<div style="float:right; width: 155px;">
<label class="header" style="display: block;"><%= scope.textPreview %></label>
<div style="border: 1px solid #cbcbcb;width: 150px; height: 40px; padding: 3px;">
<div id="format-rules-edit-preview-databar" style="width: 100%; height: 100%; position: relative; margin: 0 auto;"></div>
</div>
</div>
</td>
</tr>
<tr class="iconset">
<td>
<table>
<tr>
<td class="padding-large" style="padding-top: 8px;">
<label class="header"><%= scope.textIconStyle %></label>
<div>
<div id="format-rules-icon-style" class="input-group-nr" style="display: inline-block;vertical-align: middle;"></div>
<div id="format-rules-edit-chk-icon-show" style="margin-left: 10px;display: inline-block;vertical-align: middle;"></div>
<button type="button" class="btn btn-text-default auto" id="format-rules-edit-btn-icon-reverse" style="float:right; display: inline-block;"><%= scope.textReverse %></button>
</div>
</td>
</tr>
<tr class="icons-5">
<td class="padding-small">
<div id="format-rules-combo-icon-5" style="display: inline-block;vertical-align: middle;margin-right: 10px;"></div><!--
--><div id="format-rules-txt-icon-5" class="iconset-label" style="display: inline-block;vertical-align: middle;margin-right: 10px;width: 140px;"></div><!--
--><div id="format-rules-edit-combo-op-5" class="input-group-nr" style="display: inline-block;vertical-align: middle;margin-right: 10px;"></div><!--
--><div id="format-rules-edit-txt-value-5" class="" style="display: inline-block;height: 22px;vertical-align: middle;margin-right: 10px;"></div><!--
--><div id="format-rules-edit-combo-type-5" class="input-group-nr" style="display: inline-block;vertical-align: middle;"></div>
</td>
</tr>
<tr class="icons-4">
<td class="padding-small">
<div id="format-rules-combo-icon-4" style="display: inline-block;vertical-align: middle;margin-right: 10px;"></div><!--
--><div id="format-rules-txt-icon-4" class="iconset-label" style="display: inline-block;vertical-align: middle;margin-right: 10px;width: 140px;"></div><!--
--><div id="format-rules-edit-combo-op-4" class="input-group-nr" style="display: inline-block;vertical-align: middle;margin-right: 10px;"></div><!--
--><div id="format-rules-edit-txt-value-4" class="" style="display: inline-block;height: 22px;vertical-align: middle;margin-right: 10px;"></div><!--
--><div id="format-rules-edit-combo-type-4" class="input-group-nr" style="display: inline-block;vertical-align: middle;"></div>
</td>
</tr>
<tr class="icons-3">
<td class="padding-small">
<div id="format-rules-combo-icon-3" style="display: inline-block;vertical-align: middle;margin-right: 10px;"></div><!--
--><div id="format-rules-txt-icon-3" class="iconset-label" style="display: inline-block;vertical-align: middle;margin-right: 10px;width: 140px;"></div><!--
--><div id="format-rules-edit-combo-op-3" class="input-group-nr" style="display: inline-block;vertical-align: middle;margin-right: 10px;"></div><!--
--><div id="format-rules-edit-txt-value-3" class="" style="display: inline-block;height: 22px;vertical-align: middle;margin-right: 10px;"></div><!--
--><div id="format-rules-edit-combo-type-3" class="input-group-nr" style="display: inline-block;vertical-align: middle;"></div>
</td>
</tr>
<tr class="icons-2">
<td class="padding-small">
<div id="format-rules-combo-icon-2" style="display: inline-block;vertical-align: middle;margin-right: 10px;"></div><!--
--><div id="format-rules-txt-icon-2" class="iconset-label" style="display: inline-block;vertical-align: middle;margin-right: 10px;width: 140px;"></div><!--
--><div id="format-rules-edit-combo-op-2" class="input-group-nr" style="display: inline-block;vertical-align: middle;margin-right: 10px;"></div><!--
--><div id="format-rules-edit-txt-value-2" class="" style="display: inline-block;height: 22px;vertical-align: middle;margin-right: 10px;"></div><!--
--><div id="format-rules-edit-combo-type-2" class="input-group-nr" style="display: inline-block;vertical-align: middle;"></div>
</td>
</tr>
<tr class="icons-1">
<td class="padding-small">
<div id="format-rules-combo-icon-1" style="display: inline-block;vertical-align: middle;margin-right: 10px;"></div><!--
--><div id="format-rules-txt-icon-1" class="iconset-label" style="display: inline-block;vertical-align: middle;margin-right: 10px;width: 140px;"></div><!--
--><div id="format-rules-edit-combo-op-1" class="input-group-nr hidden" style="display: inline-block;vertical-align: middle;margin-right: 10px;"></div><!--
--><div id="format-rules-edit-txt-value-1" class=" hidden" style="display: inline-block;height: 22px;vertical-align: middle;margin-right: 10px;"></div><!--
--><div id="format-rules-edit-combo-type-1" class="input-group-nr hidden" style="display: inline-block;vertical-align: middle;"></div>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</div>

View file

@ -0,0 +1,35 @@
<div class="settings-panel active">
<div class="inner-content">
<table cols="2" style="width: 100%;">
<tr>
<td colspan=2 class="padding-large">
<label><%= scope.textScope %></label>
<div id="format-manager-combo-scope" class="input-group-nr" style="width:185px;"></div>
</td>
</tr>
<tr>
<td colspan=2>
<label id="format-manager-label-column" class="header" style="width: 186px;"><%= scope.textRules %></label>
<label id="format-manager-label-sort" class="header" style="width: 177px;"><%= scope.textApply %></label>
<label class="header" style=""><%= scope.textFormat %></label>
</td>
</tr>
<tr>
<td colspan=2 class="padding-small">
<div id="format-manager-rules-list" class="range-tableview" style="width:100%; height: 151px;"></div>
</td>
</tr>
<tr>
<td class="padding-large">
<button type="button" class="btn btn-text-default" id="format-manager-btn-new" style="min-width: 100px;margin-right:5px;"><%= scope.textNew %></button>
<button type="button" class="btn btn-text-default" id="format-manager-btn-edit" style="min-width: 100px;margin-right:5px;"><%= scope.textEdit %></button>
<div id="format-manager-btn-up" style="display: inline-block;border: 1px solid #cfcfcf;border-radius: 1px;"></div>
<div id="format-manager-btn-down" style="display: inline-block;border: 1px solid #cfcfcf;border-radius: 1px;"></div>
</td>
<td class="padding-large" style="text-align: right;width:90px;">
<button type="button" class="btn btn-text-default" id="format-manager-btn-delete" style="min-width: 100px;"><%= scope.textDelete %></button>
</td>
</tr>
</table>
</div>
</div>

View file

@ -109,7 +109,7 @@
<div class="group">
<div class="elset">
<span class="btn-slot split" id="slot-btn-clear"></span>
<span class="btn-slot split" id="slot-btn-colorschemas"></span>
<span class="btn-slot split" id="slot-btn-condformat"></span>
</div>
<div class="elset">
<span class="btn-slot split" id="slot-btn-copystyle"></span>
@ -167,6 +167,10 @@
<span class="btn-slot text x-huge" id="slot-img-movefrwd"></span>
<span class="btn-slot text x-huge" id="slot-img-movebkwd"></span>
</div>
<div class="separator long"></div>
<div class="group">
<span class="btn-slot text x-huge" id="slot-btn-colorschemas"></span>
</div>
</section>
<section class="panel" data-tab="formula">
<div class="group">

View file

@ -168,7 +168,7 @@ define([
this.settings.argvalues[this.settings.argindex] = val;
this.api.asc_insertArgumentsInFormula(this.settings.argvalues);
} else if (this.settings.type == Asc.c_oAscSelectionDialogType.DataValidation) {
} else if (this.settings.type == Asc.c_oAscSelectionDialogType.DataValidation || this.settings.type == Asc.c_oAscSelectionDialogType.ConditionalFormattingRule) {
this.inputRange.setValue('=' + name);
} else
this.inputRange.setValue(name);

View file

@ -539,6 +539,10 @@ define([
})
});
me.pmiCondFormat = new Common.UI.MenuItem({
caption : me.txtCondFormat
});
me.ssMenu = new Common.UI.Menu({
cls: 'shifted-right',
id : 'id-context-menu-cell',
@ -564,6 +568,7 @@ define([
me.pmiAddComment,
me.pmiCellMenuSeparator,
me.pmiNumFormat,
me.pmiCondFormat,
me.pmiEntriesList,
me.pmiAddNamedRange,
me.pmiInsFunction,
@ -1214,7 +1219,8 @@ define([
textStdDev: 'StdDev',
textVar: 'Var',
textMore: 'More functions',
txtCustomSort: 'Custom sort'
txtCustomSort: 'Custom sort',
txtCondFormat: 'Conditional Formatting'
}, SSE.Views.DocumentHolder || {}));
});

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,874 @@
/*
*
* (c) Copyright Ascensio System SIA 2010-2020
*
* 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 20A-12 Ernesta Birznieka-Upisha
* street, Riga, Latvia, EU, LV-1050.
*
* 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
*
*/
/**
*
* FormatRulesManagerDlg.js
*
* Created by Julia.Radzhabova on 14.04.2020
* Copyright (c) 2020 Ascensio System SIA. All rights reserved.
*
*/
define([ 'text!spreadsheeteditor/main/app/template/FormatRulesManagerDlg.template',
'common/main/lib/view/AdvancedSettingsWindow',
'common/main/lib/component/ComboBox',
'common/main/lib/component/ListView',
'common/main/lib/component/InputField',
'spreadsheeteditor/main/app/view/FormatRulesEditDlg'
], function (contentTemplate) {
'use strict';
SSE.Views = SSE.Views || {};
var _CustomItem = Common.UI.DataViewItem.extend({
initialize : function(options) {
Common.UI.BaseView.prototype.initialize.call(this, options);
var me = this;
me.template = me.options.template || me.template;
me.listenTo(me.model, 'change:name', function() {
me.render();
me.trigger('change', me, me.model);
});
me.listenTo(me.model, 'change:lock', function() {
me.render();
me.trigger('change', me, me.model);
});
me.listenTo(me.model, 'change:tip', function() {
var el = me.$el || $(me.el),
tip = el.data('bs.tooltip');
if (tip) {
var zIndex = tip.options.zIndex;
el.removeData('bs.tooltip');
el.tooltip({
title : me.model.get('tip'),
placement : 'cursor',
zIndex : zIndex
});
}
});
me.listenTo(me.model, 'change:selected', function() {
var el = me.$el || $(me.el);
el.toggleClass('selected', me.model.get('selected') && me.model.get('allowSelected'));
me.onSelectChange(me.model, me.model.get('selected') && me.model.get('allowSelected'));
});
me.listenTo(me.model, 'remove', me.remove);
}
});
SSE.Views.FormatRulesManagerDlg = Common.Views.AdvancedSettingsWindow.extend(_.extend({
options: {
alias: 'FormatRulesManagerDlg',
contentWidth: 510,
height: 361,
buttons: ['ok', 'cancel']
},
initialize: function (options) {
var me = this;
_.extend(this.options, {
title: this.txtTitle,
template: [
'<div class="box" style="height:' + (this.options.height-85) + 'px;">',
'<div class="content-panel" style="padding: 0;">' + _.template(contentTemplate)({scope: this}) + '</div>',
'</div>',
'<div class="separator horizontal"/>'
].join('')
}, options);
this.api = options.api;
this.handler = options.handler;
this.props = options.props;
this.langId = options.langId;
this.rules = [];
this.rulesStores = {};
this.rulesDeleted = [];
this.listSettings = {length: 0, min: 0, max: 0};
this.locked = options.locked || false;
this.userTooltip = true;
this.wrapEvents = {
onLockCFManager: _.bind(this.onLockCFManager, this),
onUnLockCFManager: _.bind(this.onUnLockCFManager, this),
onLockCFRule: _.bind(this.onLockCFRule, this),
onUnLockCFRule: _.bind(this.onUnLockCFRule, this)
};
Common.Views.AdvancedSettingsWindow.prototype.initialize.call(this, this.options);
},
render: function () {
Common.Views.AdvancedSettingsWindow.prototype.render.call(this);
var me = this;
this.cmbScope = new Common.UI.ComboBox({
el : $('#format-manager-combo-scope'),
menuStyle : 'min-width: 100%;max-height: 211px;',
editable : false,
cls : 'input-group-nr',
data : []
}).on('selected', function(combo, record) {
me.refreshRuleList(record);
});
this.rulesList = new Common.UI.ListView({
el: $('#format-manager-rules-list', this.$window),
store: new Common.UI.DataViewStore(),
emptyText: '',
template: _.template(['<div class="listview inner" style=""></div>'].join('')),
itemTemplate: _.template([
'<div class="list-item" style="width: 100%;display:inline-block;" id="format-manager-item-<%= ruleIndex %>">',
'<div style="width:181px;padding-right: 10px;display: inline-block;vertical-align: middle;overflow: hidden; text-overflow: ellipsis; white-space: nowrap;"><%= name %></div>',
'<div style="width:181px;padding-right: 10px;display: inline-block;vertical-align: middle;"><div id="format-manager-txt-rule-<%= ruleIndex %>" style=""></div></div>',
'<div style="width:112px;display: inline-block;vertical-align: middle;"><div id="format-manager-item-preview-<%= ruleIndex %>" style="height:22px;"></div></div>',
'<% if (lock) { %>',
'<div class="lock-user"><%=lockuser%></div>',
'<% } %>',
'</div>'
].join(''))
});
this.rulesList.createNewItem = function(record) {
return new _CustomItem({
template: this.itemTemplate,
model: record
});
};
this.rulesList.on('item:select', _.bind(this.onSelectRule, this))
.on('item:keydown', _.bind(this.onKeyDown, this));
this.btnNew = new Common.UI.Button({
el: $('#format-manager-btn-new')
});
this.btnNew.on('click', _.bind(this.onEditRule, this, false));
this.btnEdit = new Common.UI.Button({
el: $('#format-manager-btn-edit')
});
this.btnEdit.on('click', _.bind(this.onEditRule, this, true));
this.btnDelete = new Common.UI.Button({
el: $('#format-manager-btn-delete')
});
this.btnDelete.on('click', _.bind(this.onDeleteRule, this));
this.btnUp = new Common.UI.Button({
parentEl: $('#format-manager-btn-up'),
cls: 'btn-toolbar',
iconCls: 'caret-up',
hint: this.textUp
});
this.btnUp.on('click', _.bind(this.onMoveClick, this, true));
this.btnDown = new Common.UI.Button({
parentEl: $('#format-manager-btn-down'),
cls: 'btn-toolbar',
iconCls: 'caret-down',
hint: this.textDown
});
this.btnDown.on('click', _.bind(this.onMoveClick, this, false));
this.afterRender();
},
afterRender: function() {
this._setDefaults(this.props);
},
_setDefaults: function (props) {
this.rulesList.on('item:add', _.bind(this.addControls, this));
this.rulesList.on('item:change', _.bind(this.addControls, this));
this.currentSheet = this.api.asc_getActiveWorksheetIndex();
this.refreshScopeList();
this.refreshRuleList(this.cmbScope.getSelectedRecord());
this.api.asc_registerCallback('asc_onLockCFManager', this.wrapEvents.onLockCFManager);
this.api.asc_registerCallback('asc_onUnLockCFManager', this.wrapEvents.onUnLockCFManager);
this.api.asc_registerCallback('asc_onLockCFRule', this.wrapEvents.onLockCFRule);
this.api.asc_registerCallback('asc_onUnLockCFRule', this.wrapEvents.onUnLockCFRule);
},
refreshScopeList: function() {
var wc = this.api.asc_getWorksheetsCount(), i = -1;
var items = [
{ value: Asc.c_oAscSelectionForCFType.selection, displayValue: this.textSelection, sheetIndex: -1 },
{ value: Asc.c_oAscSelectionForCFType.worksheet, displayValue: this.textThisSheet, sheetIndex: -1 },
{ value: Asc.c_oAscSelectionForCFType.table, displayValue: this.textThisTable, sheetIndex: -1 },
{ value: Asc.c_oAscSelectionForCFType.pivot, displayValue: this.textThisPivot, sheetIndex: -1 }
];
if (wc>1) {
while (++i < wc) {
if (!this.api.asc_isWorksheetHidden(i) && i!==this.currentSheet) {
items.push({
displayValue:this.api.asc_getWorksheetName(i),
value: Asc.c_oAscSelectionForCFType.worksheet,
sheetIndex: i
});
}
}
}
this.cmbScope.setData(items);
this.cmbScope.setValue(Asc.c_oAscSelectionForCFType.selection);
},
refreshRuleList: function(scope) {
this.rules = [];
var sheetIndex = (scope.sheetIndex>-1) ? scope.sheetIndex : this.currentSheet;
var ruleStore = this.rulesStores[sheetIndex];
if (!ruleStore) {
ruleStore = new Common.UI.DataViewStore();
this.rulesStores[sheetIndex] = ruleStore;
var obj = this.api.asc_getCF(Asc.c_oAscSelectionForCFType.worksheet, sheetIndex);
var rules = obj[0];
this.currentRange = obj[1];
var arr = [];
if (rules) {
for (var i=0; i<rules.length; i++) {
var rule = rules[i],
name = this.getRuleName(rule),
location = rule.asc_getLocation(),
idlock = rule.asc_getIsLock();
arr.push({
ruleIndex: i, // connect store and list with controls. is not changed
ruleId: rule.asc_getId(),
name: name,
tip: name,
range: location[1],
activeSheet: location[0],
priority: rule.asc_getPriority(), // priority of the rule, is changed when move or when new rule is added
ruleChanged: false, // true if was edited in FormatRulesEditDlg or was created, need to send this rule to sdk if true
props: rule,
lock: (idlock!==null && idlock!==undefined),
lockuser: (idlock) ? this.getUserName(idlock) : this.guestText
});
}
}
ruleStore.reset(arr);
}
if (sheetIndex == this.currentSheet) {
ruleStore.each(function(item){
var hidden = scope.value!==Asc.c_oAscSelectionForCFType.worksheet && !item.get('props').asc_checkScope(scope.value);
item.set('cls', hidden ? 'hidden' : undefined);
});
}
this.rulesList.setStore(ruleStore);
this.rulesList.onResetItems();
this.rulesList.deselectAll();
this.updateRulesCount();
if (this.listSettings.length>0) {
this.rulesList.selectByIndex(this.listSettings.min);
if (this.userTooltip===true && this.rulesList.cmpEl.find('.lock-user').length>0)
this.rulesList.cmpEl.on('mouseover', _.bind(this.onMouseOverLock, this)).on('mouseout', _.bind(this.onMouseOutLock, this));
}
this.updateButtons();
},
onMouseOverLock: function (evt, el, opt) {
if (this.userTooltip===true && $(evt.target).hasClass('lock-user')) {
var me = this,
tipdata = $(evt.target).tooltip({title: this.tipIsLocked,trigger:'manual'}).data('bs.tooltip');
this.userTooltip = tipdata.tip();
this.userTooltip.css('z-index', parseInt(this.$window.css('z-index')) + 10);
tipdata.show();
setTimeout(function() { me.userTipHide(); }, 5000);
}
},
userTipHide: function () {
if (typeof this.userTooltip == 'object') {
this.userTooltip.remove();
this.userTooltip = undefined;
this.rulesList.cmpEl.off('mouseover').off('mouseout');
}
},
onMouseOutLock: function (evt, el, opt) {
if (typeof this.userTooltip == 'object') this.userTipHide();
},
getRuleName: function(rule) {
var name = '';
switch (rule.asc_getType()) {
case Asc.c_oAscCFType.aboveAverage:
name = this.textAbove;
var above = rule.asc_getAboveAverage(),
eq = rule.asc_getEqualAverage(),
stddev = rule.asc_getStdDev();
subtype = (above) ? 0 : 1;
if (eq)
subtype += 2;
else if (stddev) {
subtype += (2 + stddev*2);
}
switch (subtype) {
case 0:
name = this.textAbove;
break;
case 1:
name = this.textBelow;
break;
case 2:
name = this.textEqAbove;
break;
case 3:
name = this.textEqBelow;
break;
case 4:
name = this.text1Above;
break;
case 5:
name = this.text1Below;
break;
case 6:
name = this.text2Above;
break;
case 7:
name = this.text2Below;
break;
case 8:
name = this.text3Above;
break;
case 9:
name = this.text3Below;
break;
}
break;
case Asc.c_oAscCFType.beginsWith:
name = this.textBeginsWith + ' ' + (rule.asc_getContainsText() || '');
break;
case Asc.c_oAscCFType.cellIs:
name = this.textCellValue;
var subtype = rule.asc_getOperator(),
op;
switch (subtype) {
case Asc.c_oAscCFOperator.greaterThan:
op = '>';
name = name + ' ' + op + ' ' + (rule.asc_getValue1() || '');
break;
case Asc.c_oAscCFOperator.greaterThanOrEqual:
op = '>=';
name = name + ' ' + op + ' ' + (rule.asc_getValue1() || '');
break;
case Asc.c_oAscCFOperator.lessThan:
op = '<';
name = name + ' ' + op + ' ' + (rule.asc_getValue1() || '');
break;
case Asc.c_oAscCFOperator.lessThanOrEqual:
op = '<=';
name = name + ' ' + op + ' ' + (rule.asc_getValue1() || '');
break;
case Asc.c_oAscCFOperator.equal:
op = '=';
name = name + ' ' + op + ' ' + (rule.asc_getValue1() || '');
break;
case Asc.c_oAscCFOperator.notEqual:
op = '<>';
name = name + ' ' + op + ' ' + (rule.asc_getValue1() || '');
break;
case Asc.c_oAscCFOperator.between:
name = name + ' ' + Common.Utils.String.format(this.textBetween, (rule.asc_getValue1() || ''), (rule.asc_getValue2() || ''));
break;
case Asc.c_oAscCFOperator.notBetween:
name = name + ' ' + Common.Utils.String.format(this.textNotBetween, (rule.asc_getValue1() || ''), (rule.asc_getValue2() || ''));
break;
}
break;
case Asc.c_oAscCFType.colorScale:
name = this.textColorScale;
break;
case Asc.c_oAscCFType.containsBlanks:
name = this.textContainsBlank;
break;
case Asc.c_oAscCFType.containsErrors:
name = this.textContainsError;
break;
case Asc.c_oAscCFType.containsText:
name = this.textContains + ' ' + (rule.asc_getContainsText() || '');
break;
case Asc.c_oAscCFType.dataBar:
name = Common.define.conditionalData.textDataBar;
break;
case Asc.c_oAscCFType.duplicateValues:
name = this.textDuplicate;
break;
case Asc.c_oAscCFType.expression:
name = Common.define.conditionalData.textFormula + ': ' + (rule.asc_getValue1() || '');
break;
case Asc.c_oAscCFType.iconSet:
name = this.textIconSet;
break;
case Asc.c_oAscCFType.notContainsBlanks:
name = this.textNotContainsBlank;
break;
case Asc.c_oAscCFType.notContainsErrors:
name = this.textNotContainsError;
break;
case Asc.c_oAscCFType.notContainsText:
name = this.textNotContains + ' ' + (rule.asc_getContainsText() || '');
break;
case Asc.c_oAscCFType.timePeriod:
var subtype = rule.asc_getTimePeriod();
switch (subtype) {
case Asc.c_oAscTimePeriod.yesterday:
name = Common.define.conditionalData.textYesterday;
break;
case Asc.c_oAscTimePeriod.today:
name = Common.define.conditionalData.textToday;
break;
case Asc.c_oAscTimePeriod.tomorrow:
name = Common.define.conditionalData.textTomorrow;
break;
case Asc.c_oAscTimePeriod.last7Days:
name = Common.define.conditionalData.textLast7days;
break;
case Asc.c_oAscTimePeriod.lastWeek:
name = Common.define.conditionalData.textLastWeek;
break;
case Asc.c_oAscTimePeriod.thisWeek:
name = Common.define.conditionalData.textThisWeek;
break;
case Asc.c_oAscTimePeriod.nextWeek:
name = Common.define.conditionalData.textNextWeek;
break;
case Asc.c_oAscTimePeriod.lastMonth:
name = Common.define.conditionalData.textLastMonth;
break;
case Asc.c_oAscTimePeriod.thisMonth:
name = Common.define.conditionalData.textThisMonth;
break;
case Asc.c_oAscTimePeriod.nextMonth:
name = Common.define.conditionalData.textNextMonth;
break;
}
break;
case Asc.c_oAscCFType.top10:
name = rule.asc_getBottom() ? Common.define.conditionalData.textBottom : Common.define.conditionalData.textTop;
name = name + ' ' + (rule.asc_getRank()) + (rule.asc_getPercent() ? '%' : '');
break;
case Asc.c_oAscCFType.uniqueValues:
name = this.textUnique;
break;
case Asc.c_oAscCFType.endsWith:
name = this.textEnds + ' ' + (rule.asc_getContainsText() || '');
break;
}
return name;
},
addControls: function(listView, itemView, item) {
if (!item) return;
var me = this,
i = item.get('ruleIndex'),
cmpEl = this.rulesList.cmpEl.find('#format-manager-item-' + i);
if (!this.rules[i])
this.rules[i] = {};
var rule = this.rules[i];
var input = new Common.UI.InputFieldBtn({
el : cmpEl.find('#format-manager-txt-rule-' + i),
name : 'range',
style : 'width: 100%;',
btnHint : this.textSelectData,
allowBlank : true,
disabled : !item.get('activeSheet') || item.get('lock'),
validateOnChange: true
}).on('changed:after', function(input, newValue, oldValue, e) {
if (rule.dataRangeValid !== newValue) {
if (me.isRangeValid(newValue)) {
rule.dataRangeValid = newValue;
item.set('ruleChanged', true);
item.get('props').asc_setLocation(rule.dataRangeValid);
} else
rule.txtDataRange.setValue(rule.dataRangeValid);
}
}).on('button:click', _.bind(this.onSelectData, this, rule, item));
var val = item.get('range');
(val!==null) && input.setValue(val);
rule.txtDataRange = input;
rule.dataRangeValid = val;
rule.previewDiv = 'format-manager-item-preview-' + i;
me.drawRulePreview(item);
cmpEl.on('mousedown', 'input', function(){
me.rulesList.selectRecord(item);
});
},
drawRulePreview: function(rule) {
var props = rule.get('props'),
type = props.asc_getType(),
text = '';
if (type == Asc.c_oAscCFType.containsText || type == Asc.c_oAscCFType.notContainsText || type == Asc.c_oAscCFType.beginsWith ||
type == Asc.c_oAscCFType.endsWith || type == Asc.c_oAscCFType.containsBlanks || type == Asc.c_oAscCFType.notContainsBlanks ||
type == Asc.c_oAscCFType.duplicateValues || type == Asc.c_oAscCFType.uniqueValues ||
type == Asc.c_oAscCFType.containsErrors || type == Asc.c_oAscCFType.notContainsErrors ||
type == Asc.c_oAscCFType.timePeriod || type == Asc.c_oAscCFType.aboveAverage ||
type == Asc.c_oAscCFType.top10 || type == Asc.c_oAscCFType.cellIs || type == Asc.c_oAscCFType.expression) {
text = props.asc_getDxf() ? Common.define.conditionalData.exampleText : Common.define.conditionalData.noFormatText;
}
props.asc_getPreview(this.rules[rule.get('ruleIndex')].previewDiv, text);
},
isRangeValid: function(range) {
return (Asc.c_oAscError.ID.No === this.api.asc_checkDataRange(Asc.c_oAscSelectionDialogType.ConditionalFormattingRule, range, true));
},
onSelectData: function(rule, item) {
var me = this;
if (me.api) {
var handlerDlg = function(dlg, result) {
if (result == 'ok') {
if (me.isRangeValid(dlg.getSettings())) {
rule.dataRangeValid = dlg.getSettings();
item.set('ruleChanged', true);
item.get('props').asc_setLocation(rule.dataRangeValid);
}
rule.txtDataRange.setValue(rule.dataRangeValid);
}
};
var win = new SSE.Views.CellRangeDialog({
handler: handlerDlg
}).on('close', function() {
me.show();
});
var xy = me.$window.offset();
me.hide();
win.show(xy.left + 160, xy.top + 125);
win.setSettings({
api : me.api,
range : !_.isEmpty(rule.txtDataRange.getValue()) ? rule.txtDataRange.getValue() : rule.dataRangeValid,
type : Asc.c_oAscSelectionDialogType.ConditionalFormattingRule,
validation: function() {return true;}
});
}
},
onEditRule: function (isEdit) {
var me = this,
xy = me.$window.offset(),
rec = this.rulesList.getSelectedRec(),
previewRec;
var win = new SSE.Views.FormatRulesEditDlg({
api: me.api,
props : (isEdit && rec) ? rec.get('props') : null,
isEdit : isEdit,
langId : me.langId,
handler : function(result, settings) {
if (result == 'ok' && settings) {
var name = me.getRuleName(settings);
if (isEdit) {
rec.set('name', name);
rec.set('tip', name);
rec.set('ruleChanged', true);
rec.set('props', settings);
previewRec = rec;
} else {
settings.asc_setLocation(me.currentRange);
var ruleStore = me.rulesStores[me.currentSheet];
previewRec = ruleStore.add({
ruleIndex: me.rules.length,
name: name,
tip: name,
range: me.currentRange,
activeSheet: true,
ruleChanged: true,
priority: 1,
props: settings,
lock: false,
lockuser: ''
}, {at: 0});
me.updateRulesPriority(ruleStore);
}
}
}
}).on('close', function() {
me.show();
if (isEdit) {
previewRec && me.drawRulePreview(previewRec);
} else if (previewRec) {
me.cmbScope.setValue(Asc.c_oAscSelectionForCFType.selection);
me.refreshRuleList(me.cmbScope.getSelectedRecord());
}
});
me.hide();
win.show();
},
onDeleteRule: function () {
var store = this.rulesList.store,
rec = this.rulesList.getSelectedRec();
if (rec) {
var id = rec.get('ruleId');
(id!==undefined) && this.rulesDeleted.push(id);
var index = rec.get('ruleIndex');
this.rules[index] = undefined;
index = store.indexOf(rec);
store.remove(rec);
this.updateRulesCount();
(this.listSettings.length>0) && this.rulesList.selectByIndex(index<=this.listSettings.max ? index : this.listSettings.max);
this.rulesList.scrollToRecord(this.rulesList.getSelectedRec());
}
this.updateButtons();
},
onMoveClick: function(up) {
var store = this.rulesList.store,
length = store.length,
rec = this.rulesList.getSelectedRec();
if (rec) {
var index = store.indexOf(rec);
var newrec = store.at(up ? this.getPrevRuleIndex(index) : this.getNextRuleIndex(index)),
prioritynew = newrec.get('priority');
newrec.set('priority', rec.get('priority'));
rec.set('priority', prioritynew);
store.add(store.remove(rec), {at: up ? Math.max(0, index-1) : Math.min(length-1, index+1)});
this.rulesList.selectRecord(rec);
this.rulesList.scrollToRecord(rec);
}
this.updateMoveButtons();
},
onSelectRule: function(lisvView, itemView, record) {
this.userTipHide();
this.updateButtons();
},
updateButtons: function() {
var rec = this.rulesList.getSelectedRec(),
lock = rec ? rec.get('lock') : false;
this.btnNew.setDisabled(this.rulesList.store.length>63 || this.locked);
this.btnDelete.setDisabled(this.listSettings.length<1 || lock);
this.btnEdit.setDisabled(this.listSettings.length<1 || lock);
this.updateMoveButtons();
this.rulesList.scroller && this.rulesList.scroller.update();
},
updateMoveButtons: function() {
var rec = this.rulesList.getSelectedRec(),
index = rec ? this.rulesList.store.indexOf(rec) : -1;
this.btnUp.setDisabled(index<=this.listSettings.min || this.locked);
this.btnDown.setDisabled(index<0 || index==this.listSettings.max || this.locked);
},
getPrevRuleIndex: function(index) {
var store = this.rulesList.store;
if (this.cmbScope.getValue() == Asc.c_oAscSelectionForCFType.worksheet) {
return Math.max(0, index-1);
} else {
for (var i=index-1; i>=this.listSettings.min; i--) {
if (store.at(i).get('cls')!=='hidden') {
return i;
}
}
return this.listSettings.min;
}
},
getNextRuleIndex: function(index) {
var store = this.rulesList.store;
if (this.cmbScope.getValue() == Asc.c_oAscSelectionForCFType.worksheet) {
return Math.min(store.length-1, index+1);
} else {
for (var i=index+1; i<=this.listSettings.max; i++) {
if (store.at(i).get('cls')!=='hidden') {
return i;
}
}
return this.listSettings.max;
}
},
updateRulesCount: function() {
var store = this.rulesList.store;
if (this.cmbScope.getValue() == Asc.c_oAscSelectionForCFType.worksheet) {
this.listSettings = {length: store.length, min: 0, max: store.length-1};
} else {
this.listSettings = {length: 0, min: -1, max: 0};
for (var i=0; i<store.length; i++) {
if (store.at(i).get('cls')!=='hidden') {
this.listSettings.length++;
this.listSettings.max = i;
(this.listSettings.min<0) && (this.listSettings.min=i);
}
}
}
},
updateRulesPriority: function(store) {
for (var i=1; i<store.length; i++) {
var item = store.at(i);
item.set('priority', item.get('priority')+1);
}
},
getSettings: function() {
var sheets = [];
for (var sheet in this.rulesStores) {
if (this.rulesStores.hasOwnProperty(sheet)) {
var store = this.rulesStores[sheet];
var arr = [];
store && store.each(function(item) {
var props = item.get('props');
if (item.get('priority')!==props.asc_getPriority()) {
props.asc_setPriority(item.get('priority'));
item.set('ruleChanged', true);
}
if (item.get('ruleChanged'))
arr.push(props);
});
(arr.length>0) && (sheets[sheet] = arr);
}
}
return {rules: sheets, deleted: this.rulesDeleted};
},
onKeyDown: function (lisvView, record, e) {
if (e.keyCode==Common.UI.Keys.DELETE && !this.btnDelete.isDisabled() && !/form-control/.test(e.target.className))
this.onDeleteRule();
},
close: function () {
this.userTipHide();
this.api.asc_unregisterCallback('asc_onLockCFManager', this.wrapEvents.onLockCFManager);
this.api.asc_unregisterCallback('asc_onUnLockCFManager', this.wrapEvents.onUnLockCFManager);
this.api.asc_unregisterCallback('asc_onLockCFRule', this.wrapEvents.onLockCFRule);
this.api.asc_unregisterCallback('asc_onUnLockCFRule', this.wrapEvents.onUnLockCFRule);
Common.UI.Window.prototype.close.call(this);
},
onLockCFManager: function(index) {
if (this.currentSheet !== index) return;
this.locked = true;
this.updateButtons();
if (this.userTooltip===true && this.rulesList.cmpEl.find('.lock-user').length>0)
this.rulesList.cmpEl.on('mouseover', _.bind(this.onMouseOverLock, this)).on('mouseout', _.bind(this.onMouseOutLock, this));
},
onUnLockCFManager: function(index) {
if (this.currentSheet !== index) return;
this.locked = false;
this.updateButtons();
},
onLockCFRule: function(index, ruleId, userId) {
if (this.currentSheet !== index) return;
var store = this.rulesList.store,
rec = store.findWhere({ruleId: ruleId});
if (rec) {
rec.set('lockuser', (userId) ? this.getUserName(userId) : this.guestText);
rec.set('lock', true);
this.updateButtons();
}
if (this.userTooltip===true && this.rulesList.cmpEl.find('.lock-user').length>0)
this.rulesList.cmpEl.on('mouseover', _.bind(this.onMouseOverLock, this)).on('mouseout', _.bind(this.onMouseOutLock, this));
},
onUnLockCFRule: function(index, ruleId) {
if (this.currentSheet !== index) return;
var store = this.rulesList.store,
rec = store.findWhere({ruleId: ruleId});
if (rec) {
rec.set('lockuser', '');
rec.set('lock', false);
this.updateButtons();
}
},
getUserName: function(id){
var usersStore = SSE.getCollection('Common.Collections.Users');
if (usersStore){
var rec = usersStore.findUser(id);
if (rec)
return Common.Utils.UserInfoParser.getParsedName(rec.get('username'));
}
return this.guestText;
},
txtTitle: 'Conditional Formatting',
textNew: 'New',
textEdit: 'Edit',
textDelete: 'Delete',
textUp: 'Move rule up',
textDown: 'Move rule down',
textSelection: 'Current selection',
textThisSheet: 'This worksheet',
textThisTable: 'This table',
textThisPivot: 'This pivot',
textScope: 'Show formatting rules for',
textRules: 'Rules',
textApply: 'Apply to',
textFormat: 'Format',
textSelectData: 'Select data',
textAbove: 'Above average',
textBelow: 'Below average',
textEqAbove: 'Equal to or above average',
textEqBelow: 'Equal to or below average',
text1Above: '1 std dev above average',
text1Below: '1 std dev below average',
text2Above: '2 std dev above average',
text2Below: '2 std dev below average',
text3Above: '3 std dev above average',
text3Below: '3 std dev below average',
textBeginsWith: 'Cell value begins with',
textCellValue: 'Cell value',
textBetween: 'is between {0} and {1}',
textNotBetween: 'is not between {0} and {1}',
textColorScale: 'Graded color scale',
textContainsBlank: 'Cell contains a blank value',
textContainsError: 'Cell contains an error',
textContains: 'Cell value contains',
textNotContains: 'Cell value does not contain',
textNotContainsError: 'Cell does not contain an error',
textNotContainsBlank: 'Cell does not contain a blank value',
textEnds: 'Cell value ends with',
textIconSet: 'Icon set',
textDuplicate: 'Duplicate values',
textUnique: 'Unique values',
tipIsLocked: 'This element is being edited by another user.',
guestText: 'Guest'
}, SSE.Views.FormatRulesManagerDlg || {}));
});

View file

@ -268,7 +268,7 @@ define([ 'text!spreadsheeteditor/main/app/template/SortDialog.template',
if (item)
color_data.push({
value: Common.Utils.ThemeColor.getHexColor(item.get_r(), item.get_g(), item.get_b()).toLocaleUpperCase(),
displayValue: Common.Utils.ThemeColor.getHexColor(item.get_r(), item.get_g(), item.get_b()).toLocaleUpperCase(),
displayValue: '',
color: item
});
else
@ -555,8 +555,10 @@ define([ 'text!spreadsheeteditor/main/app/template/SortDialog.template',
var value = item ? Common.Utils.ThemeColor.getHexColor(item.get_r(), item.get_g(), item.get_b()).toLocaleUpperCase() : -1,
color_data = {
value: value,
displayValue: item ? value : ((level.cmbSort.getValue()==Asc.c_oAscSortOptions.ByColorFill) ? me.textNone : me.textAuto),
color: item
displayValue: item ? '' : ((level.cmbSort.getValue()==Asc.c_oAscSortOptions.ByColorFill) ? me.textNone : me.textAuto),
color: item,
styleObj: {'background-color': item ? '#' + value : 'transparent' },
styleStr: item ? 'background-color: #' + value + ';' : 'background-color:transparent;'
};
item ? level.color_data.push(color_data) : level.color_data.unshift(color_data);
if (colorValue == color_data.value)

View file

@ -1069,10 +1069,19 @@ define([
})
});
me.btnCondFormat = new Common.UI.Button({
id : 'id-toolbar-btn-condformat',
cls : 'btn-toolbar',
iconCls : 'toolbar__icon btn-cond-format',
lock : [_set.editCell, _set.selChart, _set.selChartText, _set.selShape, _set.selShapeText, _set.selImage, _set.lostConnect, _set.coAuth],
menu : true
});
me.btnColorSchemas = new Common.UI.Button({
id : 'id-toolbar-btn-colorschemas',
cls : 'btn-toolbar',
iconCls : 'toolbar__icon toolbar__icon btn-colorschemas',
cls : 'btn-toolbar x-huge icon-top',
iconCls : 'toolbar__icon btn-colorschemas',
caption : me.capBtnColorSchemas,
lock : [_set.editCell, _set.lostConnect, _set.coAuth],
menu : new Common.UI.Menu({
cls: 'shifted-left',
@ -1450,7 +1459,7 @@ define([
me.btnAlignMiddle, me.btnAlignBottom, me.btnWrap, me.btnTextOrient, me.btnBackColor, me.btnInsertTable,
me.btnMerge, me.btnInsertFormula, me.btnNamedRange, me.btnIncDecimal, me.btnInsertShape, me.btnInsertEquation, me.btnInsertSymbol, me.btnInsertSlicer,
me.btnInsertText, me.btnInsertTextArt, me.btnSortUp, me.btnSortDown, me.btnSetAutofilter, me.btnClearAutofilter,
me.btnTableTemplate, me.btnPercentStyle, me.btnCurrencyStyle, me.btnDecDecimal, me.btnAddCell, me.btnDeleteCell,
me.btnTableTemplate, me.btnPercentStyle, me.btnCurrencyStyle, me.btnDecDecimal, me.btnAddCell, me.btnDeleteCell, me.btnCondFormat,
me.cmbNumberFormat, me.btnBorders, me.btnInsertImage, me.btnInsertHyperlink,
me.btnInsertChart, me.btnColorSchemas,
me.btnCopy, me.btnPaste, me.listStyles, me.btnPrint,
@ -1666,6 +1675,7 @@ define([
_injectComponent('#slot-img-movefrwd', this.btnImgForward);
_injectComponent('#slot-img-movebkwd', this.btnImgBackward);
_injectComponent('#slot-btn-scale', this.btnScale);
_injectComponent('#slot-btn-condformat', this.btnCondFormat);
this.btnsEditHeader = Common.Utils.injectButtons($host.find('.slot-editheader'), 'tlbtn-editheader-', 'toolbar__icon btn-editheader', this.capBtnInsHeader,
[SSE.enumLock.editCell, SSE.enumLock.selRangeEdit, SSE.enumLock.headerLock, SSE.enumLock.lostConnect, SSE.enumLock.coAuth]);
Array.prototype.push.apply(this.lockControls, this.btnsEditHeader);
@ -1740,6 +1750,7 @@ define([
_updateHint(this.btnPrintArea, this.tipPrintArea);
_updateHint(this.btnPrintTitles, this.tipPrintTitles);
_updateHint(this.btnScale, this.tipScale);
_updateHint(this.btnCondFormat, this.tipCondFormat);
this.btnsEditHeader.forEach(function (btn) {
_updateHint(btn, me.tipEditHeader);
});
@ -1930,6 +1941,134 @@ define([
this.btnInsertTextArt.menu.on('show:before', onShowBeforeTextArt);
}
if (this.btnCondFormat && this.btnCondFormat.rendered) {
this.btnCondFormat.setMenu( new Common.UI.Menu({
items: [
{
caption : Common.define.conditionalData.textGreater,
type : Asc.c_oAscCFType.cellIs,
value : Asc.c_oAscCFOperator.greaterThan
},
{
caption : Common.define.conditionalData.textLess,
type : Asc.c_oAscCFType.cellIs,
value : Asc.c_oAscCFOperator.lessThan
},
{
caption : Common.define.conditionalData.textEqual,
type : Asc.c_oAscCFType.cellIs,
value : Asc.c_oAscCFOperator.equal
},
{caption: '--'},
{
caption : Common.define.conditionalData.textBetween,
type : Asc.c_oAscCFType.cellIs,
value : Asc.c_oAscCFOperator.between
},
{
caption : this.textTop10,
type : Asc.c_oAscCFType.top10,
value : 0
},
{caption: '--'},
{
caption : Common.define.conditionalData.textText,
menu : new Common.UI.Menu({
menuAlign : 'tl-tr',
items: [
{ caption: Common.define.conditionalData.textContains, type: Asc.c_oAscCFType.containsText },
{ caption: Common.define.conditionalData.textNotContains, type: Asc.c_oAscCFType.notContainsText },
{ caption: Common.define.conditionalData.textBegins, type: Asc.c_oAscCFType.beginsWith },
{ caption: Common.define.conditionalData.textEnds, type: Asc.c_oAscCFType.endsWith }
]
})
},
{caption: '--'},
{
caption : Common.define.conditionalData.textDate,
menu : new Common.UI.Menu({
menuAlign : 'tl-tr',
items: [
{ caption: Common.define.conditionalData.textYesterday, type: Asc.c_oAscCFType.timePeriod, value: Asc.c_oAscTimePeriod.yesterday },
{ caption: Common.define.conditionalData.textToday, type: Asc.c_oAscCFType.timePeriod, value: Asc.c_oAscTimePeriod.today},
{ caption: Common.define.conditionalData.textTomorrow, type: Asc.c_oAscCFType.timePeriod, value: Asc.c_oAscTimePeriod.tomorrow},
{ caption: Common.define.conditionalData.textLast7days, type: Asc.c_oAscCFType.timePeriod, value: Asc.c_oAscTimePeriod.last7Days},
{ caption: Common.define.conditionalData.textLastWeek, type: Asc.c_oAscCFType.timePeriod, value: Asc.c_oAscTimePeriod.lastWeek},
{ caption: Common.define.conditionalData.textThisWeek, type: Asc.c_oAscCFType.timePeriod, value: Asc.c_oAscTimePeriod.thisWeek},
{ caption: Common.define.conditionalData.textNextWeek, type: Asc.c_oAscCFType.timePeriod, value: Asc.c_oAscTimePeriod.nextWeek},
{ caption: Common.define.conditionalData.textLastMonth, type: Asc.c_oAscCFType.timePeriod, value: Asc.c_oAscTimePeriod.lastMonth},
{ caption: Common.define.conditionalData.textThisMonth, type: Asc.c_oAscCFType.timePeriod, value: Asc.c_oAscTimePeriod.thisMonth},
{ caption: Common.define.conditionalData.textNextMonth, type: Asc.c_oAscCFType.timePeriod, value: Asc.c_oAscTimePeriod.nextMonth}
]
})
},
{caption: '--'},
{
caption : Common.define.conditionalData.textBlank,
type : Asc.c_oAscCFType.containsBlanks
},
{
caption : Common.define.conditionalData.textDuplicate,
type : Asc.c_oAscCFType.duplicateValues
},
{caption: '--'},
this.mnuDataBars = new Common.UI.MenuItem({
caption : this.textDataBars,
type : Asc.c_oAscCFType.dataBar,
menu : new Common.UI.Menu({
menuAlign : 'tl-tr',
style: 'min-width: auto;',
items: []
})
}),
this.mnuColorScales = new Common.UI.MenuItem({
caption : this.textColorScales,
type : Asc.c_oAscCFType.colorScale,
menu : new Common.UI.Menu({
menuAlign : 'tl-tr',
style: 'min-width: auto;',
items: []
})
}),
this.mnuIconSets = new Common.UI.MenuItem({
caption : Common.define.conditionalData.textIconSets,
type : Asc.c_oAscCFType.iconSet,
menu : new Common.UI.Menu({
menuAlign : 'tl-tr',
style: 'min-width: auto;',
items: []
})
}),
{caption: '--'},
{
caption : Common.define.conditionalData.textFormula,
type : Asc.c_oAscCFType.expression
},
{caption: '--'},
{
caption : this.textNewRule,
value : 'new'
},
{
caption : this.textClearRule,
menu : new Common.UI.Menu({
menuAlign : 'tl-tr',
items: [
{ value: 'clear', type: Asc.c_oAscSelectionForCFType.selection, caption: this.textSelection },
{ value: 'clear', type: Asc.c_oAscSelectionForCFType.worksheet, caption: this.textThisSheet },
{ value: 'clear', type: Asc.c_oAscSelectionForCFType.table, caption: this.textThisTable },
{ value: 'clear', type: Asc.c_oAscSelectionForCFType.pivot, caption: this.textThisPivot }
]
})
},
{
caption : this.textManageRule,
value : 'manage'
}
]
}));
}
if (!this.mode.isEditMailMerge && !this.mode.isEditDiagram)
this.updateMetricUnit();
},
@ -2459,6 +2598,18 @@ define([
txtAutosumTip: 'Summation',
capBtnPrintTitles: 'Print Titles',
tipPrintTitles: 'Print titles',
capBtnColorSchemas: 'Color Scheme',
tipCondFormat: 'Conditional formatting',
textTop10: 'Top 10',
textDataBars: 'Data Bars',
textColorScales: 'Color Scales',
textNewRule: 'New Rule',
textClearRule: 'Clear Rules',
textSelection: 'From current selection',
textThisSheet: 'From this worksheet',
textThisTable: 'From this table',
textThisPivot: 'From this pivot',
textManageRule: 'Manage Rules',
capBtnInsSlicer: 'Slicer',
tipInsertSlicer: 'Insert slicer',
textVertical: 'Vertical Text',

View file

@ -342,6 +342,7 @@
<img class="inline-svg" src="../../common/main/resources/img/toolbar/charttypes.svg">
<img class="inline-svg" src="resources/img/recent-file.svg">
<img class="inline-svg" src="resources/img/file-template.svg">
<img class="inline-svg" src="resources/img/cf-icons.svg">
<script>
var svgpoints = document.querySelectorAll('img.inline-svg');
SVGInjector(svgpoints);

View file

@ -372,6 +372,7 @@
<inline src="resources/img/toolbar/charttypes.svg" />
<inline src="resources/img/recent-file.svg" />
<inline src="resources/img/file-template.svg" />
<inline src="resources/img/cf-icons.svg" />
<script src="../../../../../../sdkjs/common/device_scale.js?__inline=true"></script>
<script data-main="app" src="../../../vendor/requirejs/require.js"></script>

View file

@ -264,6 +264,7 @@
<img class="inline-svg" src="../../common/main/resources/img/toolbar/charttypes.svg">
<img class="inline-svg" src="resources/img/recent-file.svg">
<img class="inline-svg" src="resources/img/file-template.svg">
<img class="inline-svg" src="resources/img/cf-icons.svg">
<script>
var svgpoints = document.querySelectorAll('img.inline-svg');
SVGInjector(svgpoints);

View file

@ -315,6 +315,7 @@
<inline src="resources/img/toolbar/charttypes.svg" />
<inline src="resources/img/recent-file.svg" />
<inline src="resources/img/file-template.svg" />
<inline src="resources/img/cf-icons.svg" />
<div id="viewport"></div>

View file

@ -48,6 +48,56 @@
"Common.define.chartData.textStock": "Stock",
"Common.define.chartData.textSurface": "Surface",
"Common.define.chartData.textWinLossSpark": "Win/Loss",
"Common.define.conditionalData.textDate": "Date",
"Common.define.conditionalData.textYesterday": "Yesterday",
"Common.define.conditionalData.textToday": "Today",
"Common.define.conditionalData.textTomorrow": "Tomorrow",
"Common.define.conditionalData.textLast7days": "In the last 7 days",
"Common.define.conditionalData.textLastWeek": "Last week",
"Common.define.conditionalData.textThisWeek": "This week",
"Common.define.conditionalData.textNextWeek": "Next week",
"Common.define.conditionalData.textLastMonth": "Last month",
"Common.define.conditionalData.textThisMonth": "This month",
"Common.define.conditionalData.textNextMonth": "Next month",
"Common.define.conditionalData.textText": "Text",
"Common.define.conditionalData.textContains": "Contains",
"Common.define.conditionalData.textNotContains": "Does not contain",
"Common.define.conditionalData.textBegins": "Begins with",
"Common.define.conditionalData.textEnds": "Ends with",
"Common.define.conditionalData.textAverage": "Average",
"Common.define.conditionalData.textAbove": "Above",
"Common.define.conditionalData.textBelow": "Below",
"Common.define.conditionalData.textEqAbove": "Equal to or above",
"Common.define.conditionalData.textEqBelow": "Equal to or below",
"Common.define.conditionalData.text1Above": "1 std dev above",
"Common.define.conditionalData.text1Below": "1 std dev below",
"Common.define.conditionalData.text2Above": "2 std dev above",
"Common.define.conditionalData.text2Below": "2 std dev below",
"Common.define.conditionalData.text3Above": "3 std dev above",
"Common.define.conditionalData.text3Below": "3 std dev below",
"Common.define.conditionalData.textGreater": "Greater than",
"Common.define.conditionalData.textGreaterEq": "Greater than or equal to",
"Common.define.conditionalData.textLess": "Less than",
"Common.define.conditionalData.textLessEq": "Less than or equal to",
"Common.define.conditionalData.textEqual": "Equal to",
"Common.define.conditionalData.textNotEqual": "Not equal to",
"Common.define.conditionalData.textBetween": "Between",
"Common.define.conditionalData.textNotBetween": "Not between",
"Common.define.conditionalData.textTop": "Top",
"Common.define.conditionalData.textBottom": "Bottom",
"Common.define.conditionalData.textBlank": "Blank",
"Common.define.conditionalData.textError": "Error",
"Common.define.conditionalData.textBlanks": "Contains blanks",
"Common.define.conditionalData.textNotBlanks": "Does not contain blanks",
"Common.define.conditionalData.textErrors": "Contains errors",
"Common.define.conditionalData.textNotErrors": "Does not contain errors",
"Common.define.conditionalData.textDuplicate": "Duplicate",
"Common.define.conditionalData.textUnique": "Unique",
"Common.define.conditionalData.textDataBar": "Data bar",
"Common.define.conditionalData.textIconSets": "Icon sets",
"Common.define.conditionalData.textFormula": "Formula",
"Common.define.conditionalData.exampleText": "AaBbCcYyZz",
"Common.define.conditionalData.noFormatText": "No format set",
"Common.Translation.warnFileLocked": "The file is being edited in another app. You can continue editing and save it as a copy.",
"Common.UI.ColorButton.textAutoColor": "Automatic",
"Common.UI.ColorButton.textNewColor": "Add New Custom Color",
@ -1280,6 +1330,10 @@
"SSE.Controllers.Toolbar.txtTable_TableStyleMedium": "Table Style Medium",
"SSE.Controllers.Toolbar.warnLongOperation": "The operation you are about to perform might take rather much time to complete.<br>Are you sure you want to continue?",
"SSE.Controllers.Toolbar.warnMergeLostData": "Only the data from the upper-left cell will remain in the merged cell. <br>Are you sure you want to continue?",
"SSE.Controllers.Toolbar.textDirectional": "Directional",
"SSE.Controllers.Toolbar.textShapes": "Shapes",
"SSE.Controllers.Toolbar.textIndicator": "Indicators",
"SSE.Controllers.Toolbar.textRating": "Ratings",
"SSE.Controllers.Viewport.textFreezePanes": "Freeze Panes",
"SSE.Controllers.Viewport.textFreezePanesShadow": "Show Frozen Panes Shadow",
"SSE.Controllers.Viewport.textHideFBar": "Hide Formula Bar",
@ -1952,6 +2006,149 @@
"SSE.Views.FileMenuPanels.Settings.txtGeneral": "General",
"SSE.Views.FileMenuPanels.Settings.txtPageSettings": "Page Settings",
"SSE.Views.FileMenuPanels.Settings.txtSpellChecking": "Spell checking",
"SSE.Views.FormatRulesEditDlg.txtTitleNew": "New Formatting Rule",
"SSE.Views.FormatRulesEditDlg.txtTitleEdit": "Edit Formatting Rule",
"SSE.Views.FormatRulesEditDlg.textSelectData": "Select Data",
"SSE.Views.FormatRulesEditDlg.textApply": "Apply to Range",
"SSE.Views.FormatRulesEditDlg.textRule": "Rule",
"SSE.Views.FormatRulesEditDlg.txtEmpty": "This field is required",
"SSE.Views.FormatRulesEditDlg.textInvalidRange": "ERROR! Invalid cells range",
"SSE.Views.FormatRulesEditDlg.notcriticalErrorTitle": "Warning",
"SSE.Views.FormatRulesEditDlg.textFormat": "Format",
"SSE.Views.FormatRulesEditDlg.textValue": "Value is",
"SSE.Views.FormatRulesEditDlg.textRanked": "Ranked",
"SSE.Views.FormatRulesEditDlg.textCustom": "Custom",
"SSE.Views.FormatRulesEditDlg.textBold": "Bold",
"SSE.Views.FormatRulesEditDlg.textItalic": "Italic",
"SSE.Views.FormatRulesEditDlg.textUnderline": "Underline",
"SSE.Views.FormatRulesEditDlg.textStrikeout": "Strikeout",
"SSE.Views.FormatRulesEditDlg.textSuperscript": "Superscript",
"SSE.Views.FormatRulesEditDlg.textSubscript": "Subscript",
"SSE.Views.FormatRulesEditDlg.textColor": "Text color",
"SSE.Views.FormatRulesEditDlg.fillColor": "Background color",
"SSE.Views.FormatRulesEditDlg.textMinpoint": "Minpoint",
"SSE.Views.FormatRulesEditDlg.textMidpoint": "Midpoint",
"SSE.Views.FormatRulesEditDlg.textMaxpoint": "Maxpoint",
"SSE.Views.FormatRulesEditDlg.textMinimum": "Minimum",
"SSE.Views.FormatRulesEditDlg.textMaximum": "Maximum",
"SSE.Views.FormatRulesEditDlg.textAppearance": "Bar Appearance",
"SSE.Views.FormatRulesEditDlg.txtNumber": "Number",
"SSE.Views.FormatRulesEditDlg.txtGeneral": "General",
"SSE.Views.FormatRulesEditDlg.txtCurrency": "Currency",
"SSE.Views.FormatRulesEditDlg.txtAccounting": "Accounting",
"SSE.Views.FormatRulesEditDlg.txtDate": "Date",
"SSE.Views.FormatRulesEditDlg.txtTime": "Time",
"SSE.Views.FormatRulesEditDlg.txtPercentage": "Percentage",
"SSE.Views.FormatRulesEditDlg.txtFraction": "Fraction",
"SSE.Views.FormatRulesEditDlg.txtScientific": "Scientific",
"SSE.Views.FormatRulesEditDlg.txtText": "Text",
"SSE.Views.FormatRulesEditDlg.tipBorders": "Borders",
"SSE.Views.FormatRulesEditDlg.textOutBorders": "Outside Borders",
"SSE.Views.FormatRulesEditDlg.textAllBorders": "All Borders",
"SSE.Views.FormatRulesEditDlg.textTopBorders": "Top Borders",
"SSE.Views.FormatRulesEditDlg.textBottomBorders": "Bottom Borders",
"SSE.Views.FormatRulesEditDlg.textLeftBorders": "Left Borders",
"SSE.Views.FormatRulesEditDlg.textRightBorders": "Right Borders",
"SSE.Views.FormatRulesEditDlg.textNoBorders": "No Borders",
"SSE.Views.FormatRulesEditDlg.textInsideBorders": "Inside Borders",
"SSE.Views.FormatRulesEditDlg.textMiddleBorders": "Inside Horizontal Borders",
"SSE.Views.FormatRulesEditDlg.textCenterBorders": "Inside Vertical Borders",
"SSE.Views.FormatRulesEditDlg.textDiagDownBorder": "Diagonal Down Border",
"SSE.Views.FormatRulesEditDlg.textDiagUpBorder": "Diagonal Up Border",
"SSE.Views.FormatRulesEditDlg.textBordersStyle": "Border Style",
"SSE.Views.FormatRulesEditDlg.textBordersColor": "Borders Color",
"SSE.Views.FormatRulesEditDlg.textNewColor": "Add New Custom Color",
"SSE.Views.FormatRulesEditDlg.tipNumFormat": "Number Format",
"SSE.Views.FormatRulesEditDlg.textPreview": "Preview",
"SSE.Views.FormatRulesEditDlg.text2Scales": "2 Color scale",
"SSE.Views.FormatRulesEditDlg.text3Scales": "3 Color scale",
"SSE.Views.FormatRulesEditDlg.textPercent": "Percent",
"SSE.Views.FormatRulesEditDlg.textFormula": "Formula",
"SSE.Views.FormatRulesEditDlg.textPercentile": "Percentile",
"SSE.Views.FormatRulesEditDlg.textAutomatic": "Automatic",
"SSE.Views.FormatRulesEditDlg.textContext": "Context",
"SSE.Views.FormatRulesEditDlg.textLeft2Right": "Left to right",
"SSE.Views.FormatRulesEditDlg.textRight2Left": "Right to left",
"SSE.Views.FormatRulesEditDlg.textNone": "None",
"SSE.Views.FormatRulesEditDlg.textSolid": "Solid",
"SSE.Views.FormatRulesEditDlg.textCellMidpoint": "Cell midpoint",
"SSE.Views.FormatRulesEditDlg.textGradient": "Gradient",
"SSE.Views.FormatRulesEditDlg.textFill": "Fill",
"SSE.Views.FormatRulesEditDlg.textPositive": "Positive",
"SSE.Views.FormatRulesEditDlg.textNegative": "Negative",
"SSE.Views.FormatRulesEditDlg.textBorder": "Border",
"SSE.Views.FormatRulesEditDlg.textBarDirection": "Bar Direction",
"SSE.Views.FormatRulesEditDlg.textAxis": "Axis",
"SSE.Views.FormatRulesEditDlg.textPosition": "Position",
"SSE.Views.FormatRulesEditDlg.textShowBar": "Show bar only",
"SSE.Views.FormatRulesEditDlg.textSameAs": "Same as positive",
"SSE.Views.FormatRulesEditDlg.textIconStyle": "Icon Style",
"SSE.Views.FormatRulesEditDlg.textReverse": "Reverse Icons Order",
"SSE.Views.FormatRulesEditDlg.textShowIcon": "Show icon only",
"SSE.Views.FormatRulesEditDlg.textIconLabelFirst": "when {0} {1}",
"SSE.Views.FormatRulesEditDlg.textIconLabel": "when {0} {1} and",
"SSE.Views.FormatRulesEditDlg.textIconLabelLast": "when value is",
"SSE.Views.FormatRulesEditDlg.textEmptyText": "Enter a value.",
"SSE.Views.FormatRulesEditDlg.textEmptyFormula": "Enter a valid formula.",
"SSE.Views.FormatRulesEditDlg.textEmptyFormulaExt": "The formula you entered does not evaluate to a number, date, time or string.",
"SSE.Views.FormatRulesEditDlg.textEmptyValue": "The value you entered is not a valid number, date, time or string.",
"SSE.Views.FormatRulesEditDlg.textErrorTop10Between": "Enter a number between {0} and {1}.",
"SSE.Views.FormatRulesEditDlg.textNotValidPercentage": "One or more of the specified values is not a valid percentage.",
"SSE.Views.FormatRulesEditDlg.textNotValidPercentile": "One or more of the specified values is not a valid percentile.",
"SSE.Views.FormatRulesEditDlg.textNotValidPercentageExt": "The specified {0} value is not a valid percentage.",
"SSE.Views.FormatRulesEditDlg.textNotValidPercentileExt": "The specified {0} value is not a valid percentile.",
"SSE.Views.FormatRulesEditDlg.textShortBar": "shortest bar",
"SSE.Views.FormatRulesEditDlg.textLongBar": "longest bar",
"SSE.Views.FormatRulesEditDlg.textCannotAddCF": "Cannot add the conditional formatting.",
"SSE.Views.FormatRulesEditDlg.textIconsOverlap": "One or more icon data ranges overlap.<br>Adjust icon data range values so that the ranges do not overlap.",
"SSE.Views.FormatRulesEditDlg.textSingleRef": "This type of reference cannot be used in a conditional formatting formula.<br>Change the reference to a single cell, or use the reference with a worksheet function, such as =SUM(A1:B5).",
"SSE.Views.FormatRulesEditDlg.textRelativeRef": "You cannot use relative references in conditional formatting criteria for color scales, data bars, and icon sets.",
"SSE.Views.FormatRulesEditDlg.textErrorGreater": "The value for the {0} must be greater than the value for the {1}.",
"SSE.Views.FormatRulesEditDlg.textInvalid": "Invalid data range.",
"SSE.Views.FormatRulesEditDlg.textClear": "Clear",
"SSE.Views.FormatRulesEditDlg.textItem": "Item",
"SSE.Views.FormatRulesManagerDlg.txtTitle": "Conditional Formatting",
"SSE.Views.FormatRulesManagerDlg.textNew": "New",
"SSE.Views.FormatRulesManagerDlg.textEdit": "Edit",
"SSE.Views.FormatRulesManagerDlg.textDelete": "Delete",
"SSE.Views.FormatRulesManagerDlg.textUp": "Move rule up",
"SSE.Views.FormatRulesManagerDlg.textDown": "Move rule down",
"SSE.Views.FormatRulesManagerDlg.textSelection": "Current selection",
"SSE.Views.FormatRulesManagerDlg.textThisSheet": "This worksheet",
"SSE.Views.FormatRulesManagerDlg.textThisTable": "This table",
"SSE.Views.FormatRulesManagerDlg.textThisPivot": "This pivot",
"SSE.Views.FormatRulesManagerDlg.textScope": "Show formatting rules for",
"SSE.Views.FormatRulesManagerDlg.textRules": "Rules",
"SSE.Views.FormatRulesManagerDlg.textApply": "Apply to",
"SSE.Views.FormatRulesManagerDlg.textFormat": "Format",
"SSE.Views.FormatRulesManagerDlg.textSelectData": "Select data",
"SSE.Views.FormatRulesManagerDlg.textAbove": "Above average",
"SSE.Views.FormatRulesManagerDlg.textBelow": "Below average",
"SSE.Views.FormatRulesManagerDlg.textEqAbove": "Equal to or above average",
"SSE.Views.FormatRulesManagerDlg.textEqBelow": "Equal to or below average",
"SSE.Views.FormatRulesManagerDlg.text1Above": "1 std dev above average",
"SSE.Views.FormatRulesManagerDlg.text1Below": "1 std dev below average",
"SSE.Views.FormatRulesManagerDlg.text2Above": "2 std dev above average",
"SSE.Views.FormatRulesManagerDlg.text2Below": "2 std dev below average",
"SSE.Views.FormatRulesManagerDlg.text3Above": "3 std dev above average",
"SSE.Views.FormatRulesManagerDlg.text3Below": "3 std dev below average",
"SSE.Views.FormatRulesManagerDlg.textBeginsWith": "Cell value begins with",
"SSE.Views.FormatRulesManagerDlg.textCellValue": "Cell value",
"SSE.Views.FormatRulesManagerDlg.textBetween": "is between {0} and {1}",
"SSE.Views.FormatRulesManagerDlg.textNotBetween": "is not between {0} and {1}",
"SSE.Views.FormatRulesManagerDlg.textColorScale": "Graded color scale",
"SSE.Views.FormatRulesManagerDlg.textContainsBlank": "Cell contains a blank value",
"SSE.Views.FormatRulesManagerDlg.textContainsError": "Cell contains an error",
"SSE.Views.FormatRulesManagerDlg.textContains": "Cell value contains",
"SSE.Views.FormatRulesManagerDlg.textNotContains": "Cell value does not contain",
"SSE.Views.FormatRulesManagerDlg.textNotContainsError": "Cell does not contain an error",
"SSE.Views.FormatRulesManagerDlg.textNotContainsBlank": "Cell does not contain a blank value",
"SSE.Views.FormatRulesManagerDlg.textEnds": "Cell value ends with",
"SSE.Views.FormatRulesManagerDlg.textIconSet": "Icon set",
"SSE.Views.FormatRulesManagerDlg.textDuplicate": "Duplicate values",
"SSE.Views.FormatRulesManagerDlg.textUnique": "Unique values",
"SSE.Views.FormatRulesManagerDlg.tipIsLocked": "This element is being edited by another user.",
"SSE.Views.FormatRulesManagerDlg.guestText": "Guest",
"SSE.Views.FormatSettingsDialog.textCategory": "Category",
"SSE.Views.FormatSettingsDialog.textDecimal": "Decimal",
"SSE.Views.FormatSettingsDialog.textFormat": "Format",
@ -3036,6 +3233,18 @@
"SSE.Views.Toolbar.txtTime": "Time",
"SSE.Views.Toolbar.txtUnmerge": "Unmerge Cells",
"SSE.Views.Toolbar.txtYen": "¥ Yen",
"SSE.Views.Toolbar.tipCondFormat": "Conditional formatting",
"SSE.Views.Toolbar.textTop10": "Top 10",
"SSE.Views.Toolbar.textDataBars": "Data Bars",
"SSE.Views.Toolbar.textColorScales": "Color Scales",
"SSE.Views.Toolbar.textNewRule": "New Rule",
"SSE.Views.Toolbar.textClearRule": "Clear Rules",
"SSE.Views.Toolbar.textSelection": "From current selection",
"SSE.Views.Toolbar.textThisSheet": "From this worksheet",
"SSE.Views.Toolbar.textThisTable": "From this table",
"SSE.Views.Toolbar.textThisPivot": "From this pivot",
"SSE.Views.Toolbar.textManageRule": "Manage Rules",
"SSE.Views.Toolbar.capBtnColorSchemas": "Color Scheme",
"SSE.Views.Top10FilterDialog.textType": "Show",
"SSE.Views.Top10FilterDialog.txtBottom": "Bottom",
"SSE.Views.Top10FilterDialog.txtBy": "by",

View file

@ -0,0 +1,373 @@
<svg aria-hidden="true" style="position: absolute; width: 0; height: 0; overflow: hidden;" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<symbol id="bar-solid-blue" viewBox="0 0 25 25">
<rect id="Rectangle 874" x="2.5" y="2.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 878" x="2.5" y="7.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 882" x="2.5" y="12.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 879" x="3" y="8" width="5" height="4" fill="#4D82B8"/>
<rect id="Rectangle 883" x="3" y="13" width="10" height="4" fill="#4D82B8"/>
<rect id="Rectangle 880" x="3" y="3" width="14" height="4" fill="#4D82B8"/>
<rect id="Rectangle 882_2" x="2.5" y="17.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 883_2" x="3" y="18" width="19" height="4" fill="#4D82B8"/>
</symbol>
<symbol id="bar-solid-green" viewBox="0 0 25 25">
<rect id="Rectangle 874" x="2.5" y="2.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 878" x="2.5" y="7.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 882" x="2.5" y="12.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 879" x="3" y="8" width="5" height="4" fill="#63C384"/>
<rect id="Rectangle 883" x="3" y="13" width="10" height="4" fill="#63C384"/>
<rect id="Rectangle 880" x="3" y="3" width="14" height="4" fill="#63C384"/>
<rect id="Rectangle 882_2" x="2.5" y="17.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 883_2" x="3" y="18" width="19" height="4" fill="#63C384"/>
</symbol>
<symbol id="bar-solid-lightblue" viewBox="0 0 25 25">
<rect id="Rectangle 874" x="2.5" y="2.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 878" x="2.5" y="7.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 882" x="2.5" y="12.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 879" x="3" y="8" width="5" height="4" fill="#008AEF"/>
<rect id="Rectangle 883" x="3" y="13" width="10" height="4" fill="#008AEF"/>
<rect id="Rectangle 880" x="3" y="3" width="14" height="4" fill="#008AEF"/>
<rect id="Rectangle 882_2" x="2.5" y="17.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 883_2" x="3" y="18" width="19" height="4" fill="#008AEF"/>
</symbol>
<symbol id="bar-solid-purple" viewBox="0 0 25 25">
<rect id="Rectangle 874" x="2.5" y="2.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 878" x="2.5" y="7.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 882" x="2.5" y="12.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 879" x="3" y="8" width="5" height="4" fill="#D6007B"/>
<rect id="Rectangle 883" x="3" y="13" width="10" height="4" fill="#D6007B"/>
<rect id="Rectangle 880" x="3" y="3" width="14" height="4" fill="#D6007B"/>
<rect id="Rectangle 882_2" x="2.5" y="17.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 883_2" x="3" y="18" width="19" height="4" fill="#D6007B"/>
</symbol>
<symbol id="bar-solid-red" viewBox="0 0 25 25">
<rect id="Rectangle 874" x="2.5" y="2.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 878" x="2.5" y="7.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 882" x="2.5" y="12.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 879" x="3" y="8" width="5" height="4" fill="#FF555A"/>
<rect id="Rectangle 883" x="3" y="13" width="10" height="4" fill="#FF555A"/>
<rect id="Rectangle 880" x="3" y="3" width="14" height="4" fill="#FF555A"/>
<rect id="Rectangle 882_2" x="2.5" y="17.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 883_2" x="3" y="18" width="19" height="4" fill="#FF555A"/>
</symbol>
<symbol id="bar-solid-yellow" viewBox="0 0 25 25">
<rect id="Rectangle 874" x="2.5" y="2.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 878" x="2.5" y="7.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 882" x="2.5" y="12.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 879" x="3" y="8" width="5" height="4" fill="#FFB628"/>
<rect id="Rectangle 883" x="3" y="13" width="10" height="4" fill="#FFB628"/>
<rect id="Rectangle 880" x="3" y="3" width="14" height="4" fill="#FFB628"/>
<rect id="Rectangle 882_2" x="2.5" y="17.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 883_2" x="3" y="18" width="19" height="4" fill="#FFB628"/>
</symbol>
<symbol id="color-scale-blue-white-red" viewBox="0 0 25 25">
<rect id="Rectangle 874" x="2.5" y="2.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 878" x="2.5" y="7.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 882" x="2.5" y="12.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 879" x="3" y="8" width="19" height="4" fill="#ABC3E3"/>
<rect id="Rectangle 883" x="3" y="13" width="19" height="4" fill="white"/>
<rect id="Rectangle 880" x="3" y="3" width="19" height="4" fill="#5A8AC6"/>
<rect id="Rectangle 882_2" x="2.5" y="17.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 883_2" x="3" y="18" width="19" height="4" fill="#F8696B"/>
</symbol>
<symbol id="color-scale-green-white" viewBox="0 0 25 25">
<rect id="Rectangle 874" x="2.5" y="2.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 878" x="2.5" y="7.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 882" x="2.5" y="12.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 879" x="3" y="8" width="19" height="4" fill="#8ACE9C"/>
<rect id="Rectangle 883" x="3" y="13" width="19" height="4" fill="#D6EDDE"/>
<rect id="Rectangle 880" x="3" y="3" width="19" height="4" fill="#63BE7B"/>
<rect id="Rectangle 882_2" x="2.5" y="17.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 883_2" x="3" y="18" width="19" height="4" fill="white"/>
</symbol>
<symbol id="color-scale-green-white-red" viewBox="0 0 25 25">
<rect id="Rectangle 874" x="2.5" y="2.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 878" x="2.5" y="7.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 882" x="2.5" y="12.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 879" x="3" y="8" width="19" height="4" fill="#B0DDBD"/>
<rect id="Rectangle 883" x="3" y="13" width="19" height="4" fill="white"/>
<rect id="Rectangle 880" x="3" y="3" width="19" height="4" fill="#63BE7B"/>
<rect id="Rectangle 882_2" x="2.5" y="17.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 883_2" x="3" y="18" width="19" height="4" fill="#F8696B"/>
</symbol>
<symbol id="color-scale-green-yellow" viewBox="0 0 25 25">
<rect id="Rectangle 874" x="2.5" y="2.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 878" x="2.5" y="7.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 882" x="2.5" y="12.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 879" x="3" y="8" width="19" height="4" fill="#8ACB84"/>
<rect id="Rectangle 883" x="3" y="13" width="19" height="4" fill="#D8E394"/>
<rect id="Rectangle 880" x="3" y="3" width="19" height="4" fill="#63BE7B"/>
<rect id="Rectangle 882_2" x="2.5" y="17.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 883_2" x="3" y="18" width="19" height="4" fill="#FFEF9C"/>
</symbol>
<symbol id="color-scale-green-yellow-red" viewBox="0 0 25 25">
<rect id="Rectangle 874" x="2.5" y="2.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 878" x="2.5" y="7.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 882" x="2.5" y="12.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 879" x="3" y="8" width="19" height="4" fill="#FFEB84"/>
<rect id="Rectangle 883" x="3" y="13" width="19" height="4" fill="#FBAA77"/>
<rect id="Rectangle 880" x="3" y="3" width="19" height="4" fill="#63BE7B"/>
<rect id="Rectangle 882_2" x="2.5" y="17.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 883_2" x="3" y="18" width="19" height="4" fill="#F8696B"/>
</symbol>
<symbol id="color-scale-red-white" viewBox="0 0 25 25">
<rect id="Rectangle 874" x="2.5" y="2.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 878" x="2.5" y="7.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 882" x="2.5" y="12.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 879" x="3" y="8" width="19" height="4" fill="#F98E90"/>
<rect id="Rectangle 883" x="3" y="13" width="19" height="4" fill="#FBD8DA"/>
<rect id="Rectangle 880" x="3" y="3" width="19" height="4" fill="#F8696B"/>
<rect id="Rectangle 882_2" x="2.5" y="17.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 883_2" x="3" y="18" width="19" height="4" fill="white"/>
</symbol>
<symbol id="color-scale-red-white-blue" viewBox="0 0 25 25">
<rect id="Rectangle 874" x="2.5" y="2.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 878" x="2.5" y="7.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 882" x="2.5" y="12.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 879" x="3" y="8" width="19" height="4" fill="white"/>
<rect id="Rectangle 883" x="3" y="13" width="19" height="4" fill="#ABC3E3"/>
<rect id="Rectangle 880" x="3" y="3" width="19" height="4" fill="#F8696B"/>
<rect id="Rectangle 882_2" x="2.5" y="17.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 883_2" x="3" y="18" width="19" height="4" fill="#5A8AC6"/>
</symbol>
<symbol id="color-scale-red-white-green" viewBox="0 0 25 25">
<rect id="Rectangle 874" x="2.5" y="2.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 878" x="2.5" y="7.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 882" x="2.5" y="12.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 879" x="3" y="8" width="19" height="4" fill="white"/>
<rect id="Rectangle 883" x="3" y="13" width="19" height="4" fill="#B0DDBD"/>
<rect id="Rectangle 880" x="3" y="3" width="19" height="4" fill="#F8696B"/>
<rect id="Rectangle 882_2" x="2.5" y="17.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 883_2" x="3" y="18" width="19" height="4" fill="#63BE7B"/>
</symbol>
<symbol id="color-scale-red-yellow-green" viewBox="0 0 25 25">
<rect id="Rectangle 874" x="2.5" y="2.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 878" x="2.5" y="7.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 882" x="2.5" y="12.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 879" x="3" y="8" width="19" height="4" fill="#FBAA77"/>
<rect id="Rectangle 883" x="3" y="13" width="19" height="4" fill="#FFEB84"/>
<rect id="Rectangle 880" x="3" y="3" width="19" height="4" fill="#F8696B"/>
<rect id="Rectangle 882_2" x="2.5" y="17.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 883_2" x="3" y="18" width="19" height="4" fill="#63BE7B"/>
</symbol>
<symbol id="color-scale-white-green" viewBox="0 0 25 25">
<rect id="Rectangle 874" x="2.5" y="2.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 878" x="2.5" y="7.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 882" x="2.5" y="12.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 879" x="3" y="8" width="19" height="4" fill="#D6EDDE"/>
<rect id="Rectangle 883" x="3" y="13" width="19" height="4" fill="#8ACE9C"/>
<rect id="Rectangle 880" x="3" y="3" width="19" height="4" fill="white"/>
<rect id="Rectangle 882_2" x="2.5" y="17.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 883_2" x="3" y="18" width="19" height="4" fill="#63BE7B"/>
</symbol>
<symbol id="color-scale-white-red" viewBox="0 0 25 25">
<rect id="Rectangle 874" x="2.5" y="2.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 878" x="2.5" y="7.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 882" x="2.5" y="12.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 879" x="3" y="8" width="19" height="4" fill="#FBD8DA"/>
<rect id="Rectangle 883" x="3" y="13" width="19" height="4" fill="#F98E90"/>
<rect id="Rectangle 880" x="3" y="3" width="19" height="4" fill="white"/>
<rect id="Rectangle 882_2" x="2.5" y="17.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 883_2" x="3" y="18" width="19" height="4" fill="#F8696B"/>
</symbol>
<symbol id="color-scale-yellow-green" viewBox="0 0 25 25">
<rect id="Rectangle 874" x="2.5" y="2.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 878" x="2.5" y="7.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 882" x="2.5" y="12.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 879" x="3" y="8" width="19" height="4" fill="#D8E394"/>
<rect id="Rectangle 883" x="3" y="13" width="19" height="4" fill="#8ACB84"/>
<rect id="Rectangle 880" x="3" y="3" width="19" height="4" fill="#FFEF9C"/>
<rect id="Rectangle 882_2" x="2.5" y="17.5" width="20" height="5" stroke="#888888"/>
<rect id="Rectangle 883_2" x="3" y="18" width="19" height="4" fill="#63BE7B"/>
</symbol>
<symbol id="bar-gradient-blue" viewBox="0 0 25 25">
<rect id="Rectangle 874" x="2.5" y="2.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 878" x="2.5" y="7.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 882" x="2.5" y="12.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 879" x="3" y="8" width="5" height="4" fill="url(#paint0_linear)"/>
<rect id="Rectangle 883" x="3" y="13" width="10" height="4" fill="url(#paint1_linear)"/>
<rect id="Rectangle 880" x="3" y="3" width="14" height="4" fill="url(#paint2_linear)"/>
<rect id="Rectangle 882_2" x="2.5" y="17.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 883_2" x="3" y="18" width="19" height="4" fill="url(#paint3_linear)"/>
<defs>
<linearGradient id="paint0_linear" x1="3.75" y1="10" x2="7.74999" y2="10.0075" gradientUnits="userSpaceOnUse">
<stop stop-color="#4D82B8"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint1_linear" x1="4.5" y1="15" x2="12.4999" y2="15.03" gradientUnits="userSpaceOnUse">
<stop stop-color="#4D82B8"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint2_linear" x1="5.1" y1="5" x2="16.2997" y2="5.05883" gradientUnits="userSpaceOnUse">
<stop stop-color="#4D82B8"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint3_linear" x1="5.85" y1="20" x2="21.0492" y2="20.1084" gradientUnits="userSpaceOnUse">
<stop stop-color="#4D82B8"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
</defs>
</symbol>
<symbol id="bar-gradient-green" viewBox="0 0 25 25">
<rect id="Rectangle 874" x="2.5" y="2.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 878" x="2.5" y="7.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 882" x="2.5" y="12.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 879" x="3" y="8" width="5" height="4" fill="url(#paint10_linear)"/>
<rect id="Rectangle 883" x="3" y="13" width="10" height="4" fill="url(#paint11_linear)"/>
<rect id="Rectangle 880" x="3" y="3" width="14" height="4" fill="url(#paint12_linear)"/>
<rect id="Rectangle 882_2" x="2.5" y="17.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 883_2" x="3" y="18" width="19" height="4" fill="url(#paint13_linear)"/>
<defs>
<linearGradient id="paint10_linear" x1="3.75" y1="10" x2="7.75" y2="10" gradientUnits="userSpaceOnUse">
<stop stop-color="#63C384"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint11_linear" x1="4.5" y1="15" x2="12.5" y2="15" gradientUnits="userSpaceOnUse">
<stop stop-color="#63C384"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint12_linear" x1="5.1" y1="5" x2="16.3" y2="5.00008" gradientUnits="userSpaceOnUse">
<stop stop-color="#63C384"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint13_linear" x1="5.85" y1="20" x2="21.05" y2="20.0002" gradientUnits="userSpaceOnUse">
<stop stop-color="#63C384"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
</defs>
</symbol>
<symbol id="bar-gradient-lightblue" viewBox="0 0 25 25">
<rect id="Rectangle 874" x="2.5" y="2.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 878" x="2.5" y="7.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 882" x="2.5" y="12.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 879" x="3" y="8" width="5" height="4" fill="url(#paint20_linear)"/>
<rect id="Rectangle 883" x="3" y="13" width="10" height="4" fill="url(#paint21_linear)"/>
<rect id="Rectangle 880" x="3" y="3" width="14" height="4" fill="url(#paint22_linear)"/>
<rect id="Rectangle 882_2" x="2.5" y="17.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 883_2" x="3" y="18" width="19" height="4" fill="url(#paint23_linear)"/>
<defs>
<linearGradient id="paint20_linear" x1="3.75" y1="10" x2="7.75" y2="10" gradientUnits="userSpaceOnUse">
<stop stop-color="#008AEF"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint21_linear" x1="4.5" y1="15" x2="12.5" y2="15" gradientUnits="userSpaceOnUse">
<stop stop-color="#008AEF"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint22_linear" x1="5.1" y1="5" x2="16.3" y2="5.00009" gradientUnits="userSpaceOnUse">
<stop stop-color="#008AEF"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint23_linear" x1="5.85" y1="20" x2="21.05" y2="20.0002" gradientUnits="userSpaceOnUse">
<stop stop-color="#008AEF"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
</defs>
</symbol>
<symbol id="bar-gradient-purple" viewBox="0 0 25 25">
<rect id="Rectangle 874" x="2.5" y="2.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 878" x="2.5" y="7.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 882" x="2.5" y="12.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 879" x="3" y="8" width="5" height="4" fill="url(#paint30_linear)"/>
<rect id="Rectangle 883" x="3" y="13" width="10" height="4" fill="url(#paint31_linear)"/>
<rect id="Rectangle 880" x="3" y="3" width="14" height="4" fill="url(#paint32_linear)"/>
<rect id="Rectangle 882_2" x="2.5" y="17.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 883_2" x="3" y="18" width="19" height="4" fill="url(#paint33_linear)"/>
<defs>
<linearGradient id="paint30_linear" x1="3.25" y1="10" x2="7.75" y2="10" gradientUnits="userSpaceOnUse">
<stop stop-color="#D6007B"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint31_linear" x1="3.5" y1="15" x2="12.5" y2="15" gradientUnits="userSpaceOnUse">
<stop stop-color="#D6007B"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint32_linear" x1="3.7" y1="5" x2="16.3" y2="5.00009" gradientUnits="userSpaceOnUse">
<stop stop-color="#D6007B"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint33_linear" x1="3.95" y1="20" x2="21.05" y2="20.0002" gradientUnits="userSpaceOnUse">
<stop stop-color="#D6007B"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
</defs>
</symbol>
<symbol id="bar-gradient-red" viewBox="0 0 25 25">
<rect id="Rectangle 874" x="2.5" y="2.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 878" x="2.5" y="7.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 882" x="2.5" y="12.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 879" x="3" y="8" width="5" height="4" fill="url(#paint40_linear)"/>
<rect id="Rectangle 883" x="3" y="13" width="10" height="4" fill="url(#paint41_linear)"/>
<rect id="Rectangle 880" x="3" y="3" width="14" height="4" fill="url(#paint42_linear)"/>
<rect id="Rectangle 882_2" x="2.5" y="17.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 883_2" x="3" y="18" width="19" height="4" fill="url(#paint43_linear)"/>
<defs>
<linearGradient id="paint40_linear" x1="3.75" y1="10" x2="7.75" y2="10" gradientUnits="userSpaceOnUse">
<stop stop-color="#FF555A"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint41_linear" x1="4.5" y1="15" x2="12.5" y2="15" gradientUnits="userSpaceOnUse">
<stop stop-color="#FF555A"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint42_linear" x1="5.1" y1="5" x2="16.3" y2="5.00006" gradientUnits="userSpaceOnUse">
<stop stop-color="#FF555A"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint43_linear" x1="5.85" y1="20" x2="21.05" y2="20.0001" gradientUnits="userSpaceOnUse">
<stop stop-color="#FF555A"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
</defs>
</symbol>
<symbol id="bar-gradient-yellow" viewBox="0 0 25 25">
<rect id="Rectangle 874" x="2.5" y="2.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 878" x="2.5" y="7.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 882" x="2.5" y="12.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 879" x="3" y="8" width="5" height="4" fill="url(#paint50_linear)"/>
<rect id="Rectangle 883" x="3" y="13" width="10" height="4" fill="url(#paint51_linear)"/>
<rect id="Rectangle 880" x="3" y="3" width="14" height="4" fill="url(#paint52_linear)"/>
<rect id="Rectangle 882_2" x="2.5" y="17.5" width="20" height="5" fill="white" stroke="#888888"/>
<rect id="Rectangle 883_2" x="3" y="18" width="19" height="4" fill="url(#paint53_linear)"/>
<defs>
<linearGradient id="paint50_linear" x1="3.75" y1="10" x2="7.74999" y2="10.0075" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFB628"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint51_linear" x1="4.5" y1="15" x2="12.4999" y2="15.03" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFB628"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint52_linear" x1="5.1" y1="5" x2="16.2997" y2="5.05885" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFB628"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint53_linear" x1="5.85" y1="20" x2="21.0492" y2="20.1084" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFB628"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
</defs>
</symbol>
</svg>

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 489 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 512 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 555 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 450 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 693 B

View file

@ -240,3 +240,15 @@
.box-shadow(none);
}
}
.iconset {
.iconset-label {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.dataview > .item:not(:hover):not(.selected) {
.box-shadow(none);
}
}

View file

@ -74,7 +74,8 @@
display: inline-block;
}
#id-toolbar-mnu-item-border-width {
#id-toolbar-mnu-item-border-width,
#format-rules-borders-border-width {
.border-size-item {
background: ~"url(@{app-image-const-path}/toolbar/BorderSize.png) no-repeat scroll 0 0";
width: 60px;