@easyquery/ui 7.2.5 → 7.3.0-rc02

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/dist/assets/css/aggr-settings.css +4 -8
  2. package/dist/assets/css/easychart.css +1 -3
  3. package/dist/assets/css/easyfacets.css +9 -5
  4. package/dist/assets/css/easyquery.css +36 -297
  5. package/dist/assets/css/easyquery.ui.css +480 -209
  6. package/dist/assets/css/eq-icons.css +81 -0
  7. package/dist/assets/css/eqview.css +6 -13
  8. package/dist/assets/css/themes.css +12 -0
  9. package/dist/assets/css/upgrade.css +343 -0
  10. package/dist/easyquery.ui.cjs.js +252 -192
  11. package/dist/easyquery.ui.esm.js +216 -156
  12. package/dist/types/public_api.d.ts +0 -1
  13. package/dist/types/utils/utils.d.ts +1 -0
  14. package/dist/types/views/adv_search_view.d.ts +2 -0
  15. package/dist/types/views/view.d.ts +2 -1
  16. package/dist/types/widgets/columns_bar.d.ts +1 -0
  17. package/dist/types/widgets/renderers/columnspanel/column_renderer_cp.d.ts +1 -0
  18. package/dist/types/widgets/renderers/querypanel/datetime_expression_render.d.ts +1 -1
  19. package/package.json +5 -5
  20. package/dist/assets/css/eq-icons-default.css +0 -140
  21. package/dist/assets/css/eq-icons-files.css +0 -91
  22. package/dist/assets/css/images/ExportCSV.png +0 -0
  23. package/dist/assets/css/images/ExportExel.png +0 -0
  24. package/dist/assets/css/images/aggr_settings_cancel.png +0 -0
  25. package/dist/assets/css/images/aggr_settings_func.png +0 -0
  26. package/dist/assets/css/images/aggr_settings_group.png +0 -0
  27. package/dist/assets/css/images/ajax-loader.gif +0 -0
  28. package/dist/assets/css/images/chart-settings.png +0 -0
  29. package/dist/assets/css/images/checkbox_checked.png +0 -0
  30. package/dist/assets/css/images/checkbox_unchecked.png +0 -0
  31. package/dist/assets/css/images/clearButton.png +0 -0
  32. package/dist/assets/css/images/colbtn-aggrfunc.png +0 -0
  33. package/dist/assets/css/images/condbtn-addcondition.png +0 -0
  34. package/dist/assets/css/images/condbtn-addpredicate.png +0 -0
  35. package/dist/assets/css/images/condbtn-delete.png +0 -0
  36. package/dist/assets/css/images/condbtn-disabled.png +0 -0
  37. package/dist/assets/css/images/condbtn-enabled.png +0 -0
  38. package/dist/assets/css/images/condbtn-menu.png +0 -0
  39. package/dist/assets/css/images/condbtn-param.png +0 -0
  40. package/dist/assets/css/images/eqjs-ep-add-columns-hover.png +0 -0
  41. package/dist/assets/css/images/eqjs-ep-add-columns.png +0 -0
  42. package/dist/assets/css/images/eqjs-ep-add-cond-hover.png +0 -0
  43. package/dist/assets/css/images/eqjs-ep-add-cond.png +0 -0
  44. package/dist/assets/css/images/eqjs-ep-deselect-all-hover.png +0 -0
  45. package/dist/assets/css/images/eqjs-ep-deselect-all.png +0 -0
  46. package/dist/assets/css/images/eqjs-ep-select-all-hover.png +0 -0
  47. package/dist/assets/css/images/eqjs-ep-select-all.png +0 -0
  48. package/dist/assets/css/images/eqjs-fb-header-icon.png +0 -0
  49. package/dist/assets/css/images/execute.png +0 -0
  50. package/dist/assets/css/images/loadButton.png +0 -0
  51. package/dist/assets/css/images/logo.png +0 -0
  52. package/dist/assets/css/images/node-close.png +0 -0
  53. package/dist/assets/css/images/node-open.png +0 -0
  54. package/dist/assets/css/images/saveButton.png +0 -0
  55. package/dist/assets/css/images/sorting_asc.png +0 -0
  56. package/dist/assets/css/images/sorting_desc.png +0 -0
  57. package/dist/assets/css/images/sorting_none.png +0 -0
  58. package/dist/assets/css/images/ve-loader.gif +0 -0
  59. package/dist/types/utils/browser_utils.d.ts +0 -8
@@ -1,6 +1,6 @@
1
1
  import { utils, i18n, DataType, EasyDataTable, AggregationSettings } from '@easydata/core';
2
2
  import { Widget, WidgetGroup, QueryChangePart, QueryChangeAction, ExprTag, SortDirection, i18n as i18n$1, equtils, eqconsts, ConditionPart, DataKind, Query, Expression, CondTag, EqEditorTag, EqValueEditor, EqServiceProvider, createEqContext } from '@easyquery/core';
3
- import { eqDragManager, getElementAbsolutePos, getScrollPos, getWinSize, getViewportSize, domel, DropEffect, createBrowserEvent, DomElementBuilder, DefaultDateTimePicker, slideDown, slideUp, EasyGrid, addCssClass, hideElement, showElement, isVisible, toggleVisibility, addElement, DefaultDialogService } from '@easydata/ui';
3
+ import { browserUtils, eqDragManager, getElementAbsolutePos, getScrollPos, getWinSize, getViewportSize, domel, DropEffect, createBrowserEvent, DomElementBuilder, DefaultDateTimePicker, slideDown, slideUp, EasyGrid, addCssClass, hideElement, showElement, isVisible, toggleVisibility, addElement, DefaultDialogService } from '@easydata/ui';
4
4
 
5
5
  function findHighestZIndex(elem) {
6
6
  let highest = 0;
@@ -27,64 +27,9 @@ function safeFocus(element) {
27
27
  }
28
28
  const eqCssPrefix = 'eqjs';
29
29
  const eqCssMobile = 'eqjs-mobile';
30
-
31
- var browserUtils;
32
- (function (browserUtils) {
33
- let _isFirefox = null;
34
- function isIE() {
35
- const ua = window.navigator.userAgent;
36
- return ua.includes('MSIE') || ua.includes('Trident');
37
- }
38
- browserUtils.isIE = isIE;
39
- function isFirefox() {
40
- if (_isFirefox === null) {
41
- const ua = navigator.userAgent;
42
- _isFirefox = ua.toLowerCase().indexOf('firefox') > -1;
43
- }
44
- return _isFirefox;
45
- }
46
- browserUtils.isFirefox = isFirefox;
47
- let _detectedIsMobileMode = false;
48
- let _isMobileMode = undefined;
49
- let detectIsMobileMode = () => {
50
- const oldValue = isMobileMode();
51
- _detectedIsMobileMode = window.matchMedia('only screen and (max-width: 840px)').matches
52
- || window.matchMedia('only screen and (max-height: 420px)').matches;
53
- const newValue = isMobileMode();
54
- if (newValue !== oldValue && mobileModeChangeHandler) {
55
- mobileModeChangeHandler(newValue);
56
- }
57
- };
58
- detectIsMobileMode();
59
- window.addEventListener('resize', () => detectIsMobileMode());
60
- function isMobileMode() {
61
- if (_isMobileMode !== undefined) {
62
- return _isMobileMode;
63
- }
64
- else {
65
- return _detectedIsMobileMode;
66
- }
67
- }
68
- browserUtils.isMobileMode = isMobileMode;
69
- function setIsMobileMode(value) {
70
- const oldValue = isMobileMode();
71
- _isMobileMode = value;
72
- const newValue = isMobileMode();
73
- if (newValue !== oldValue && mobileModeChangeHandler) {
74
- mobileModeChangeHandler(newValue);
75
- }
76
- }
77
- browserUtils.setIsMobileMode = setIsMobileMode;
78
- let mobileModeChangeHandler;
79
- function onMobileModeChanged(callback) {
80
- mobileModeChangeHandler = callback;
81
- }
82
- browserUtils.onMobileModeChanged = onMobileModeChanged;
83
- function getMobileCssClass() {
84
- return isMobileMode() ? eqCssMobile : null;
85
- }
86
- browserUtils.getMobileCssClass = getMobileCssClass;
87
- })(browserUtils || (browserUtils = {}));
30
+ function getMobileCssClass() {
31
+ return browserUtils.isMobileMode() ? eqCssMobile : null;
32
+ }
88
33
 
89
34
  /**
90
35
  * The entities panel wiget, implemented without JQuery.
@@ -183,7 +128,7 @@ class EntitiesPanel extends Widget {
183
128
  let model = this.context.getModel();
184
129
  this.clear();
185
130
  this.panel.classList.add(`${this.cssPrefix}-panel`);
186
- this.panel.classList.add(browserUtils.getMobileCssClass());
131
+ this.panel.classList.add(getMobileCssClass());
187
132
  this.rootEntityBlock = document.createElement('div');
188
133
  if (model != null && !model.isEmpty()) {
189
134
  let entTree = model.getEntitiesTree({
@@ -214,10 +159,10 @@ class EntitiesPanel extends Widget {
214
159
  let entityBlock;
215
160
  let entityNode = document.createElement('div');
216
161
  entityNode.classList.add(`${this.cssPrefix}-entity-node`);
217
- entityNode.classList.add(browserUtils.getMobileCssClass());
162
+ entityNode.classList.add(getMobileCssClass());
218
163
  let entityChildren = document.createElement('div');
219
164
  entityChildren.classList.add(`${this.cssPrefix}-entity-children`);
220
- entityChildren.classList.add(browserUtils.getMobileCssClass());
165
+ entityChildren.classList.add(getMobileCssClass());
221
166
  let nodeLabel = document.createElement('label');
222
167
  nodeLabel.classList.add(`${this.cssPrefix}-entity-node-label`);
223
168
  let nodeInput = document.createElement('input');
@@ -241,7 +186,7 @@ class EntitiesPanel extends Widget {
241
186
  entityBlock = document.createElement('div');
242
187
  }
243
188
  entityBlock.classList.add(`${this.cssPrefix}-entity`);
244
- entityBlock.classList.add(browserUtils.getMobileCssClass());
189
+ entityBlock.classList.add(getMobileCssClass());
245
190
  if (entity.id && entity.id != "") {
246
191
  nodeLabel.innerText = entity.text;
247
192
  entityNode.appendChild(nodeLabel); //caption
@@ -412,7 +357,7 @@ class EntitiesPanel extends Widget {
412
357
  createFilterBox() {
413
358
  this.filterBoxBlock = document.createElement('div');
414
359
  this.filterBoxBlock.classList.add(`${this.cssPrefix}-filter-box`);
415
- this.filterBoxBlock.classList.add(browserUtils.getMobileCssClass());
360
+ this.filterBoxBlock.classList.add(getMobileCssClass());
416
361
  this.filterBoxInput = document.createElement('input');
417
362
  this.filterBoxInput.classList.add(`${this.cssPrefix}-filter-box-input`);
418
363
  this.filterBoxInput.addEventListener('input', (e) => {
@@ -445,7 +390,7 @@ class EntitiesPanel extends Widget {
445
390
  let defClass = `${this.cssPrefix}-tool-panel`;
446
391
  let toolPanelBlock = document.createElement('div');
447
392
  toolPanelBlock.classList.add(defClass);
448
- toolPanelBlock.classList.add(browserUtils.getMobileCssClass());
393
+ toolPanelBlock.classList.add(getMobileCssClass());
449
394
  let toolSelectAll = document.createElement('div');
450
395
  toolSelectAll.classList.add(`${defClass}-select-all`);
451
396
  toolSelectAll.title = 'Select all';
@@ -658,7 +603,7 @@ class EntitiesPanel extends Widget {
658
603
  renderProgressBlock() {
659
604
  this.progressBlock = document.createElement('div');
660
605
  this.progressBlock.classList.add(`${eqCssPrefix}-progress-win8`);
661
- this.progressBlock.classList.add(browserUtils.getMobileCssClass());
606
+ this.progressBlock.classList.add(getMobileCssClass());
662
607
  this.progressBlock.innerHTML = '<div class="wBall" id="wBall_1"><div class="wInnerBall"></div></div><div class="wBall" id="wBall_2"><div class="wInnerBall"></div></div><div class="wBall" id="wBall_3"><div class="wInnerBall"></div></div><div class="wBall" id="wBall_4"><div class="wInnerBall"></div></div><div class="wBall" id="wBall_5"><div class="wInnerBall"></div></div>';
663
608
  }
664
609
  clear() {
@@ -715,7 +660,7 @@ class MenuLevel {
715
660
  const isSubQuery = this.parentMenu.options.isSubQuery;
716
661
  //add base DIV element which is also used to show the shadow
717
662
  const baseDivBuilder = domel('div')
718
- .addClass(browserUtils.getMobileCssClass());
663
+ .addClass(getMobileCssClass());
719
664
  if (this.parentMenu.options.useDefaultStyles) {
720
665
  baseDivBuilder
721
666
  .setStyle('backgroundColor', itemBgColor)
@@ -839,7 +784,7 @@ class MenuLevel {
839
784
  scrollDiv.tabIndex = 1;
840
785
  domel(scrollDiv)
841
786
  .addClass(`${this.cssPrefix}-scrollDiv`)
842
- .addClass(browserUtils.getMobileCssClass());
787
+ .addClass(getMobileCssClass());
843
788
  scrollDiv.style.overflowX = "hidden";
844
789
  scrollDiv.style.overflowY = "auto";
845
790
  scrollDiv.style.position = "relative";
@@ -1036,7 +981,7 @@ class MenuLevel {
1036
981
  const itemDiv = document.createElement("div");
1037
982
  domel(itemDiv)
1038
983
  .addClass(`${this.cssPrefix}-itemDiv`)
1039
- .addClass(browserUtils.getMobileCssClass());
984
+ .addClass(getMobileCssClass());
1040
985
  if (item.selected && this.showSelected && !multiselect) {
1041
986
  itemDiv.classList.add(`${this.cssPrefix}-selected`);
1042
987
  }
@@ -1219,7 +1164,7 @@ class MenuLevel {
1219
1164
  const itemDiv = document.createElement("div");
1220
1165
  domel(itemDiv)
1221
1166
  .addClass(`${this.cssPrefix}-itemDiv`)
1222
- .addClass(browserUtils.getMobileCssClass());
1167
+ .addClass(getMobileCssClass());
1223
1168
  itemDiv.style.marginLeft = `${level * 10}px`;
1224
1169
  if (item.selected && !multiselect) {
1225
1170
  itemDiv.classList.add(`${this.cssPrefix}-selected`);
@@ -1564,7 +1509,7 @@ class MenuLevel {
1564
1509
  this.parentElement.appendChild(this.levelDiv);
1565
1510
  domel(this.levelDiv)
1566
1511
  .addClass(`${this.cssPrefix}-levelDiv`)
1567
- .addClass(browserUtils.getMobileCssClass());
1512
+ .addClass(getMobileCssClass());
1568
1513
  this.initialized = true;
1569
1514
  }
1570
1515
  }
@@ -2040,51 +1985,65 @@ class ColumnRendererCP {
2040
1985
  this.createButtonMenu();
2041
1986
  builder
2042
1987
  .addClass(this.getClassesToAdd())
2043
- .addClass(browserUtils.getMobileCssClass())
1988
+ .addClass(getMobileCssClass())
2044
1989
  .addChildElement(this.renderCheckbox())
2045
1990
  //start sort button
2046
1991
  .addChild('div', builder => builder
2047
1992
  .addClass(`${eqCssPrefix}-button-placeholder`, `${this.cssPrefix}-button-placeholder`, `${this.cssPrefix}-colelement`, `${this.cssPrefix}-sortbutton-placeholder`)
2048
- .addChildElement(this.sortingButton))
2049
- // end sort button
2050
- .addChildElement(this.renderExpressionBlock());
1993
+ .addChildElement(this.sortingButton));
1994
+ // end sort button
1995
+ builder.addChildElement(this.renderExpressionBlock());
2051
1996
  if (this.panel.options.showColumnTitles !== false && !browserUtils.isMobileMode()) {
2052
1997
  builder
2053
1998
  .addChildElement(this.renderCaptionBlock());
2054
1999
  }
2000
+ let buttonsIndex = 0;
2001
+ let buttonsList = '';
2055
2002
  builder
2056
2003
  //start buttons
2057
2004
  .addChild('div', builder => {
2058
2005
  builder
2059
2006
  .addClass(`${eqCssPrefix}-column-buttonsBlock`, `${this.cssPrefix}-buttonsBlock`)
2060
- .addClass(browserUtils.getMobileCssClass());
2007
+ .addClass(getMobileCssClass());
2061
2008
  //start enable button
2062
2009
  if (this.getButtonsToShow().indexOf("enable") >= 0 && !this.column.isReadOnly()) {
2063
2010
  builder.addChildElement(this.renderEnabledButton());
2011
+ buttonsIndex++;
2012
+ buttonsList += 'Enable';
2064
2013
  }
2065
2014
  //end enable button
2066
2015
  //start aggr func button
2067
2016
  if (this.getButtonsToShow().indexOf("type") >= 0 && this.columnEnabled) {
2068
2017
  builder.addChildElement(this.renderColumnTypeButton());
2018
+ buttonsIndex++;
2019
+ buttonsList += 'Type';
2069
2020
  }
2070
2021
  //end aggr func button
2071
2022
  //start format selector button
2072
2023
  if (this.getButtonsToShow().indexOf("format") >= 0 && this.columnEnabled) {
2073
2024
  builder.addChildElement(this.renderColumnFormatButton());
2025
+ buttonsIndex++;
2026
+ buttonsList += 'Format';
2074
2027
  }
2075
2028
  //end format selector button
2076
2029
  //start delete button
2077
2030
  if (this.getButtonsToShow().indexOf("delete") >= 0 && !this.column.isReadOnly()) {
2078
2031
  builder.addChildElement(this.renderDeleteButton());
2032
+ buttonsIndex++;
2033
+ buttonsList += 'Delete';
2079
2034
  }
2080
2035
  //end delete button
2081
2036
  //start menu button
2082
2037
  if (this.getButtonsToShow().indexOf("menu") >= 0 && !this.column.isReadOnly()) {
2083
2038
  builder.addChildElement(this.renderMenuButton());
2039
+ buttonsIndex++;
2040
+ buttonsList += 'Menu';
2084
2041
  }
2085
2042
  //end menu button
2086
2043
  });
2087
- //end buttons
2044
+ //end buttons
2045
+ builder.addClass(`eqjs-buttons-in-block-${buttonsIndex}`);
2046
+ builder.addClass(`eqjs-buttons-in-block-${buttonsList}`);
2088
2047
  if (!browserUtils.isMobileMode()) {
2089
2048
  //start event listeners
2090
2049
  builder
@@ -2099,16 +2058,22 @@ class ColumnRendererCP {
2099
2058
  if (this.panel.options.alwaysShowButtons) {
2100
2059
  this.showButtons();
2101
2060
  }
2061
+ if (this.panel.options.showCheckboxes === false) {
2062
+ builder.addClass("eqjs-no-checkbox");
2063
+ }
2102
2064
  return this.element;
2103
2065
  }
2104
2066
  onMouseClick(ev) {
2105
2067
  ev.stopPropagation();
2068
+ this.activate();
2069
+ return false;
2070
+ }
2071
+ activate() {
2106
2072
  this.panel.toggleColumnPicked(this.column);
2107
2073
  this.adjustButtonsVisibility();
2108
2074
  if (!browserUtils.isMobileMode()) {
2109
2075
  this.element.dispatchEvent(createBrowserEvent("mouseenter"));
2110
2076
  }
2111
- return false;
2112
2077
  }
2113
2078
  fireColumnChanged() {
2114
2079
  this.column.fireChangedEvent();
@@ -2119,7 +2084,7 @@ class ColumnRendererCP {
2119
2084
  renderCaptionBlock() {
2120
2085
  const builder = domel('div')
2121
2086
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-captionelement`)
2122
- .addClass(browserUtils.getMobileCssClass());
2087
+ .addClass(getMobileCssClass());
2123
2088
  if (this.isEditable()) {
2124
2089
  builder
2125
2090
  .addChild('a', builder => builder
@@ -2128,6 +2093,7 @@ class ColumnRendererCP {
2128
2093
  .text(this.column.caption)
2129
2094
  .on('click', (ev) => {
2130
2095
  ev.stopPropagation();
2096
+ this.activate();
2131
2097
  const element = ev.target;
2132
2098
  const inputEl = element.parentElement.querySelector('input');
2133
2099
  if (inputEl) {
@@ -2202,7 +2168,7 @@ class ColumnRendererCP {
2202
2168
  sortButtonDirectionCssClass = `${sortButtonCssClass}-none`;
2203
2169
  break;
2204
2170
  }
2205
- if (!this.isEditable()) {
2171
+ if (!this.isEditable() || browserUtils.isMobileMode()) {
2206
2172
  if (sorting === SortDirection.Ascending
2207
2173
  || sorting === SortDirection.Descending)
2208
2174
  return domel('div')
@@ -2218,11 +2184,12 @@ class ColumnRendererCP {
2218
2184
  .attr('tabIndex', '0')
2219
2185
  .on('click', (ev) => {
2220
2186
  ev.stopPropagation();
2187
+ this.activate();
2221
2188
  this.keepShowingButtons = true;
2222
2189
  const menu = this.getUIS() ? this.panel.sortMenu || this.panel.moveMenu : this.panel.moveMenu;
2223
2190
  menu.showMenu({
2224
2191
  anchor: this.sortingButton,
2225
- selectedIds: this.column.isHidden() ? ['IsHidden'] : null,
2192
+ selectedIds: this.getButtonMenuSelectedItems(), // this.column.isHidden() ? ['IsHidden'] : null,
2226
2193
  itemSelectedCallback: (data, items) => {
2227
2194
  let action;
2228
2195
  switch (data.id) {
@@ -2309,7 +2276,7 @@ class ColumnRendererCP {
2309
2276
  .addClass(`${eqCssPrefix}-button`, `${eqCssPrefix}-column-button`, `${eqCssPrefix}-column-button-menu`)
2310
2277
  .title(i18n$1.getText('ButtonMenu'))
2311
2278
  .attr('tabIndex', '0')
2312
- .on('click', evt => this.buttonMenuHandler(ColumnAction.Menu, evt)) //touchstart
2279
+ .on('click', evt => this.buttonMenuHandler(ColumnAction.Menu, evt)) //touchstart
2313
2280
  .on('keypress', evt => { if (evt.keyCode == 13) {
2314
2281
  evt.target.click();
2315
2282
  } }))
@@ -2335,6 +2302,7 @@ class ColumnRendererCP {
2335
2302
  .attr('tabIndex', '0')
2336
2303
  .on('click', (ev) => {
2337
2304
  ev.stopPropagation();
2305
+ this.activate();
2338
2306
  this.keepShowingButtons = true;
2339
2307
  this.changeTypeHandler(ev);
2340
2308
  })
@@ -2543,6 +2511,7 @@ class ColumnRendererCP {
2543
2511
  curQuery.fireColumnsChangedEvent(QueryChangeAction.Delete, this.column);
2544
2512
  break;
2545
2513
  case ColumnAction.Enable:
2514
+ this.activate();
2546
2515
  this.columnEnabled = !this.columnEnabled;
2547
2516
  this.fireColumnChanged();
2548
2517
  break;
@@ -2577,6 +2546,7 @@ class ColumnRendererCP {
2577
2546
  case ColumnAction.Menu:
2578
2547
  const colMenu = this.buttonMenu;
2579
2548
  this.keepShowingButtons = true;
2549
+ this.activate();
2580
2550
  colMenu.showMenu({
2581
2551
  anchor: evt ? evt.target : null,
2582
2552
  selectedIds: this.getButtonMenuSelectedItems(),
@@ -2611,7 +2581,7 @@ class ColumnRendererCP {
2611
2581
  action = ColumnAction.SortingAsc;
2612
2582
  break;
2613
2583
  case "Descending":
2614
- action = ColumnAction.SortingAsc;
2584
+ action = ColumnAction.SortingDesc;
2615
2585
  break;
2616
2586
  }
2617
2587
  this.buttonMenuHandler(action, evt);
@@ -2641,26 +2611,26 @@ class ColumnRendererCP {
2641
2611
  if (menuId) {
2642
2612
  menuId += '-ButtonMenu';
2643
2613
  }
2644
- const common = [];
2645
- common.push({
2614
+ const Appearance = [];
2615
+ Appearance.push({
2646
2616
  id: "enable",
2647
2617
  text: i18n$1.getText('MenuEnable')
2648
2618
  });
2649
2619
  if (this.panel.options.allowHiddenColumns) {
2650
- common.push({
2620
+ Appearance.push({
2651
2621
  id: "hidden",
2652
2622
  text: i18n$1.getText('CmdHiddenColumn')
2653
2623
  });
2654
2624
  }
2655
- common.push({
2625
+ Appearance.push({
2656
2626
  id: "delete",
2657
2627
  text: i18n$1.getText('CmdDelete')
2658
2628
  });
2659
2629
  let items = [];
2660
2630
  items.push({
2661
2631
  id: '__group',
2662
- text: ' ',
2663
- items: common
2632
+ text: i18n$1.getText('CmdGroupAppearance'),
2633
+ items: Appearance
2664
2634
  });
2665
2635
  const sortItems = this.panel.options.allowSorting ?
2666
2636
  [
@@ -2719,6 +2689,17 @@ class ColumnRendererCP {
2719
2689
  if (this.column.isHidden()) {
2720
2690
  arrSelected.push("hidden");
2721
2691
  }
2692
+ switch (this.column.sorting) {
2693
+ case SortDirection.None:
2694
+ arrSelected.push("None");
2695
+ break;
2696
+ case SortDirection.Ascending:
2697
+ arrSelected.push("Ascending");
2698
+ break;
2699
+ case SortDirection.Descending:
2700
+ arrSelected.push("Descending");
2701
+ break;
2702
+ }
2722
2703
  const formats = this.panel
2723
2704
  .getContext()
2724
2705
  .getModel()
@@ -2739,10 +2720,10 @@ class AttrColumnRendererCP extends ColumnRendererCP {
2739
2720
  renderExpressionBlock() {
2740
2721
  return domel("div")
2741
2722
  .addClass(`${this.cssPrefix}-expr-block`)
2742
- .addClass(browserUtils.getMobileCssClass())
2723
+ .addClass(getMobileCssClass())
2743
2724
  .addChild('div', builder => builder
2744
2725
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-attrelement`)
2745
- .addClass(browserUtils.getMobileCssClass())
2726
+ .addClass(getMobileCssClass())
2746
2727
  .addChildElement(this.renderBaseExpression()))
2747
2728
  .toDOM();
2748
2729
  }
@@ -2760,6 +2741,7 @@ class AttrColumnRendererCP extends ColumnRendererCP {
2760
2741
  .text(attrCaption) //TO DO:add localization
2761
2742
  .on('click', (ev) => {
2762
2743
  ev.stopPropagation();
2744
+ this.activate();
2763
2745
  this.panel.showEntitiesMenu({
2764
2746
  anchor: ev.target,
2765
2747
  selectedIds: null,
@@ -2912,7 +2894,7 @@ class AggrFuncColumnRendererCP extends AttrColumnRendererCP {
2912
2894
  const model = this.panel.getContext().getModel();
2913
2895
  const exprBlockBuilder = domel("div")
2914
2896
  .addClass(`${this.cssPrefix}-expr-block`, `${this.cssPrefix}-expr-block-aggr`)
2915
- .addClass(browserUtils.getMobileCssClass());
2897
+ .addClass(getMobileCssClass());
2916
2898
  const format = model.getAggrFunctionFormat(this.column.expr.func);
2917
2899
  if (!format || format === '')
2918
2900
  return;
@@ -2930,6 +2912,7 @@ class AggrFuncColumnRendererCP extends AttrColumnRendererCP {
2930
2912
  .text(item.text)
2931
2913
  .on('click', (ev) => {
2932
2914
  ev.stopPropagation();
2915
+ this.activate();
2933
2916
  this.functionMenu.showMenu({
2934
2917
  anchor: functionLink.toDOM(),
2935
2918
  selectedIds: null,
@@ -2948,14 +2931,14 @@ class AggrFuncColumnRendererCP extends AttrColumnRendererCP {
2948
2931
  exprBlockBuilder
2949
2932
  .addChild('div', builder => builder
2950
2933
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-aggrfuncelement`)
2951
- .addClass(browserUtils.getMobileCssClass())
2934
+ .addClass(getMobileCssClass())
2952
2935
  .addChildElement(functionLink.toDOM()));
2953
2936
  }
2954
2937
  else {
2955
2938
  exprBlockBuilder
2956
2939
  .addChild('div', b => b
2957
2940
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-aggrfuncelement`)
2958
- .addClass(browserUtils.getMobileCssClass())
2941
+ .addClass(getMobileCssClass())
2959
2942
  .addChild('span', b => b
2960
2943
  .text(item.text)
2961
2944
  .title(item.text)));
@@ -2965,14 +2948,14 @@ class AggrFuncColumnRendererCP extends AttrColumnRendererCP {
2965
2948
  exprBlockBuilder
2966
2949
  .addChild('div', builder => builder
2967
2950
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-attrelement`)
2968
- .addClass(browserUtils.getMobileCssClass())
2951
+ .addClass(getMobileCssClass())
2969
2952
  .addChildElement(this.renderBaseExpression()));
2970
2953
  }
2971
2954
  else if (item.type === 3) {
2972
2955
  exprBlockBuilder
2973
2956
  .addChild('span', builder => builder
2974
2957
  .addClass(`${this.cssPrefix}-colelement`)
2975
- .addClass(browserUtils.getMobileCssClass())
2958
+ .addClass(getMobileCssClass())
2976
2959
  .text(item.text)
2977
2960
  .title(item.text));
2978
2961
  }
@@ -3054,12 +3037,12 @@ class EditableColumnRendererCP extends AttrColumnRendererCP {
3054
3037
  renderExpressionBlock() {
3055
3038
  const exprBlock = domel("div")
3056
3039
  .addClass(`${this.cssPrefix}-expr-block`)
3057
- .addClass(browserUtils.getMobileCssClass())
3040
+ .addClass(getMobileCssClass())
3058
3041
  .toDOM();
3059
3042
  //Attribute element
3060
3043
  let builder = domel('div', exprBlock)
3061
3044
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-attrelement`)
3062
- .addClass(browserUtils.getMobileCssClass());
3045
+ .addClass(getMobileCssClass());
3063
3046
  if (this.isEditable()) {
3064
3047
  builder
3065
3048
  .addChild('a', b => b
@@ -3135,7 +3118,7 @@ class EditableColumnRendererCP extends AttrColumnRendererCP {
3135
3118
  // DataType element
3136
3119
  builder = domel('div', exprBlock)
3137
3120
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-attrelement`)
3138
- .addClass(browserUtils.getMobileCssClass());
3121
+ .addClass(getMobileCssClass());
3139
3122
  if (this.isEditable()) {
3140
3123
  this.createDataTypeMenu();
3141
3124
  builder
@@ -3385,8 +3368,18 @@ class ColumnsPanel extends Widget {
3385
3368
  const headerBuilder = domel('div', this.slot)
3386
3369
  .hide()
3387
3370
  .addClass(`${this.cssPrefix}-header`)
3388
- .addClass(browserUtils.getMobileCssClass())
3389
- .addChild('div', builder => builder
3371
+ .addClass(getMobileCssClass());
3372
+ if (!this.options.alwaysShowButtons) {
3373
+ headerBuilder.addClass("eqjs-no-buttons");
3374
+ }
3375
+ if (this.options.showCheckboxes) {
3376
+ headerBuilder.addChild('div', builder => builder
3377
+ .setStyle('margin-left', '30px')); //quick fix to adjust title column header when showCheckboxes is on
3378
+ }
3379
+ else {
3380
+ headerBuilder.addClass("eqjs-no-checkbox");
3381
+ }
3382
+ headerBuilder.addChild('div', builder => builder
3390
3383
  .addClass(`${this.cssPrefix}-header-expression`)
3391
3384
  .text(i18n.getText('HeaderExpression')));
3392
3385
  if (this.options.showColumnTitles !== false) {
@@ -3401,13 +3394,13 @@ class ColumnsPanel extends Widget {
3401
3394
  this.columnsBlock =
3402
3395
  domel('div', this.slot)
3403
3396
  .addClass(`${this.cssPrefix}-columns`)
3404
- .addClass(browserUtils.getMobileCssClass())
3397
+ .addClass(getMobileCssClass())
3405
3398
  .toDOM();
3406
3399
  if (this.options.showAddRow) {
3407
3400
  this.addRowElement =
3408
3401
  domel('div', this.slot)
3409
3402
  .addClass(`${eqCssPrefix}-addrow`, `${this.cssPrefix}-addrow`, `${eqCssPrefix}-addrow-empty`)
3410
- .addClass(browserUtils.getMobileCssClass())
3403
+ .addClass(getMobileCssClass())
3411
3404
  .addChild('a', builder => builder
3412
3405
  .attr('href', 'javascript:void(0)')
3413
3406
  .text(i18n.getText('CmdClickToAddColumn'))
@@ -3598,7 +3591,7 @@ class ColumnsPanel extends Widget {
3598
3591
  this.context.options.columnTitleFormat = options.titleElementFormat;
3599
3592
  }
3600
3593
  if (browserUtils.isMobileMode()) {
3601
- this.options.buttons = ["menu"];
3594
+ this.options.buttons = ["menu", "sorting"];
3602
3595
  this.options.showHeader = false;
3603
3596
  }
3604
3597
  }
@@ -3629,7 +3622,7 @@ class ColumnsPanel extends Widget {
3629
3622
  this.agjustHeaderVisibility();
3630
3623
  domel(this.slot)
3631
3624
  .removeClass(eqCssMobile)
3632
- .addClass(browserUtils.getMobileCssClass());
3625
+ .addClass(getMobileCssClass());
3633
3626
  const query = this.context.getQuery();
3634
3627
  const columns = query.getColumns();
3635
3628
  for (let column of columns) {
@@ -3947,7 +3940,7 @@ class ColumnsPanel extends Widget {
3947
3940
  renderProgressBlock() {
3948
3941
  this.progressBlock = document.createElement('div');
3949
3942
  this.progressBlock.classList.add(`${eqCssPrefix}-progress-win8`);
3950
- this.progressBlock.classList.add(browserUtils.getMobileCssClass());
3943
+ this.progressBlock.classList.add(getMobileCssClass());
3951
3944
  this.progressBlock.innerHTML = '<div class="wBall" id="wBall_1"><div class="wInnerBall"></div></div><div class="wBall" id="wBall_2"><div class="wInnerBall"></div></div><div class="wBall" id="wBall_3"><div class="wInnerBall"></div></div><div class="wBall" id="wBall_4"><div class="wInnerBall"></div></div><div class="wBall" id="wBall_5"><div class="wInnerBall"></div></div>';
3952
3945
  }
3953
3946
  }
@@ -3997,7 +3990,7 @@ class ColumnRendererCB {
3997
3990
  }
3998
3991
  builder
3999
3992
  .addClass(this.getClassesToAdd())
4000
- .addClass(browserUtils.getMobileCssClass())
3993
+ .addClass(getMobileCssClass())
4001
3994
  .addChildElement(this.renderCaptionBlock())
4002
3995
  .addChildElement(this.renderSortingImage());
4003
3996
  if (!browserUtils.isMobileMode()) {
@@ -4038,7 +4031,7 @@ class ColumnRendererCB {
4038
4031
  if (!this.isEditable()) {
4039
4032
  return domel('div')
4040
4033
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-captionelement`)
4041
- .addClass(browserUtils.getMobileCssClass())
4034
+ .addClass(getMobileCssClass())
4042
4035
  .addChild('div', b => b
4043
4036
  .title(caption)
4044
4037
  .text(caption)
@@ -4072,7 +4065,7 @@ class ColumnRendererCB {
4072
4065
  }); //TO DO:add localization and input field);
4073
4066
  return domel('div')
4074
4067
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-captionelement`)
4075
- .addClass(browserUtils.getMobileCssClass())
4068
+ .addClass(getMobileCssClass())
4076
4069
  .addChild('a', builder => builder
4077
4070
  .attr('href', 'javascript:void(0)')
4078
4071
  .title(this.column.caption)
@@ -4148,7 +4141,7 @@ class ColumnRendererCB {
4148
4141
  else {
4149
4142
  return domel('div')
4150
4143
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-sortimage-placeholder`)
4151
- .addClass(browserUtils.getMobileCssClass())
4144
+ .addClass(getMobileCssClass())
4152
4145
  .addChild('div', builder => builder
4153
4146
  .addClass(`${this.cssPrefix}-img-sorting`, sortButtonDirectionCssClass)
4154
4147
  .title(i18n.getText('ButtonSorting')))
@@ -4640,6 +4633,7 @@ class ColumnsBar extends Widget {
4640
4633
  sortEntities: false,
4641
4634
  columnRenderedCallback: null,
4642
4635
  customExpressionText: 0,
4636
+ showAddAllForEntity: false
4643
4637
  };
4644
4638
  this.landingSlot = domel('div')
4645
4639
  .addClass(`${eqCssPrefix}-highlight`)
@@ -4659,7 +4653,7 @@ class ColumnsBar extends Widget {
4659
4653
  ];
4660
4654
  domel(this.slot)
4661
4655
  .addClass(`${this.cssPrefix}-panel`)
4662
- .addClass(browserUtils.getMobileCssClass());
4656
+ .addClass(getMobileCssClass());
4663
4657
  this.group = WidgetGroup.Query;
4664
4658
  this.customQuery = customQuery;
4665
4659
  }
@@ -4878,7 +4872,7 @@ class ColumnsBar extends Widget {
4878
4872
  renderAddRowButton() {
4879
4873
  domel(this.addRowButton)
4880
4874
  .addClass(`${eqCssPrefix}-addrow`, `${this.cssPrefix}-addrow`, `${eqCssPrefix}-addrow-empty`)
4881
- .addClass(browserUtils.getMobileCssClass())
4875
+ .addClass(getMobileCssClass())
4882
4876
  .title(i18n.getText('CmdClickToAddColumn'))
4883
4877
  .addChild('a', builder => builder
4884
4878
  .attr('href', 'javascript:void(0)')
@@ -4888,8 +4882,13 @@ class ColumnsBar extends Widget {
4888
4882
  anchor: e.target,
4889
4883
  selectedIds: null,
4890
4884
  itemSelectedCallback: (data, items) => {
4891
- const attrid = data.id;
4892
- this.addNewColumn(attrid);
4885
+ if (data.id === '__AddAll__' && data.extra && Array.isArray(data.extra.ids)) {
4886
+ data.extra.ids.forEach(attrId => this.addNewColumn(attrId));
4887
+ }
4888
+ else {
4889
+ const attrid = data.id;
4890
+ this.addNewColumn(attrid);
4891
+ }
4893
4892
  return false;
4894
4893
  }
4895
4894
  });
@@ -4908,7 +4907,7 @@ class ColumnsBar extends Widget {
4908
4907
  this.columnsBlock =
4909
4908
  domel('div')
4910
4909
  .addClass(`${this.cssPrefix}-columns`)
4911
- .addClass(browserUtils.getMobileCssClass())
4910
+ .addClass(getMobileCssClass())
4912
4911
  .toDOM();
4913
4912
  if (this.options.showAddRow) {
4914
4913
  this.addRowButton =
@@ -4938,7 +4937,7 @@ class ColumnsBar extends Widget {
4938
4937
  this.columnButtonsBlockMobileArrow = domel('i').toDOM();
4939
4938
  this.columnButtonsBlockMobile = domel('div')
4940
4939
  .addClass(`${this.cssPrefix}-column-buttonsBlock`)
4941
- .addClass(browserUtils.getMobileCssClass())
4940
+ .addClass(getMobileCssClass())
4942
4941
  .addChildElement(this.columnButtonsBlockMobileArrow)
4943
4942
  .hide()
4944
4943
  .toDOM();
@@ -5158,6 +5157,23 @@ class ColumnsBar extends Widget {
5158
5157
  showEntitiesMenu(menuOptions) {
5159
5158
  this.entitiesMenu && this.entitiesMenu.showMenu(menuOptions);
5160
5159
  }
5160
+ addAllColumnsToEntitiesList(list) {
5161
+ const attrIds = list.filter(item => !item.isEntity).map(item => item.id);
5162
+ if (attrIds.length > 0) {
5163
+ list.unshift({
5164
+ id: '__AddAll__',
5165
+ text: i18n.getText('AddAllForEntityText'),
5166
+ extra: {
5167
+ ids: attrIds
5168
+ }
5169
+ });
5170
+ }
5171
+ list.forEach(item => {
5172
+ if (item.items) {
5173
+ this.addAllColumnsToEntitiesList(item.items);
5174
+ }
5175
+ });
5176
+ }
5161
5177
  createEntitiesMenu() {
5162
5178
  const model = this.getContext().getModel();
5163
5179
  if (!model || model.isEmpty())
@@ -5167,6 +5183,10 @@ class ColumnsBar extends Widget {
5167
5183
  menuId += '-EntitiesMenu';
5168
5184
  }
5169
5185
  const entitiesList = model.getEntitiesTree({ addUIC: false, addUIR: true, addUIS: false, attrPlacement: this.options.attrPlacement, sortEntities: this.options.sortEntities });
5186
+ // add [Add all columns] items
5187
+ if (this.options.showAddAllForEntity) {
5188
+ this.addAllColumnsToEntitiesList(entitiesList);
5189
+ }
5170
5190
  const options = { items: entitiesList, adjustHeight: this.options.adjustEntitiesMenuHeight, id: menuId, domWriteItemsId: this.options.domWriteItemsId };
5171
5191
  utils.assign(options, this.options.menuOptions);
5172
5192
  this.entitiesMenu = new PopupMenu(options);
@@ -5295,7 +5315,7 @@ class ColumnRendererSB {
5295
5315
  }
5296
5316
  builder
5297
5317
  .addClass(this.getClassesToAdd())
5298
- .addClass(browserUtils.getMobileCssClass())
5318
+ .addClass(getMobileCssClass())
5299
5319
  .addChildElement(this.renderCaptionBlock());
5300
5320
  if (this.isEditable()) {
5301
5321
  builder
@@ -5333,7 +5353,7 @@ class ColumnRendererSB {
5333
5353
  }
5334
5354
  return domel('div')
5335
5355
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-captionelement`)
5336
- .addClass(browserUtils.getMobileCssClass())
5356
+ .addClass(getMobileCssClass())
5337
5357
  .addChild('div', b => b
5338
5358
  .title(this.column.caption)
5339
5359
  .text(text))
@@ -5355,7 +5375,7 @@ class ColumnRendererSB {
5355
5375
  }
5356
5376
  const builder = domel('div')
5357
5377
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-sortimage-placeholder`)
5358
- .addClass(browserUtils.getMobileCssClass())
5378
+ .addClass(getMobileCssClass())
5359
5379
  .addChild('div', builder => builder
5360
5380
  .addClass(`${this.cssPrefix}-img-sorting`, sortButtonDirectionCssClass)
5361
5381
  .title(i18n.getText('ButtonSorting')))
@@ -5446,7 +5466,7 @@ class SortingBar extends Widget {
5446
5466
  this.landingIndex = -1;
5447
5467
  domel(this.slot)
5448
5468
  .addClass(`${this.cssPrefix}-panel`)
5449
- .addClass(browserUtils.getMobileCssClass());
5469
+ .addClass(getMobileCssClass());
5450
5470
  this.group = WidgetGroup.Query;
5451
5471
  }
5452
5472
  getWidgetType() {
@@ -5529,7 +5549,7 @@ class SortingBar extends Widget {
5529
5549
  renderAddRowButton() {
5530
5550
  domel(this.addRowButton)
5531
5551
  .addClass(`${eqCssPrefix}-addrow`, `${this.cssPrefix}-addrow`, `${eqCssPrefix}-addrow-empty`)
5532
- .addClass(browserUtils.getMobileCssClass())
5552
+ .addClass(getMobileCssClass())
5533
5553
  .title(i18n.getText('CmdClickToAddColumn'))
5534
5554
  .addChild('a', builder => builder
5535
5555
  .attr('href', 'javascript:void(0)')
@@ -5585,7 +5605,7 @@ class SortingBar extends Widget {
5585
5605
  this.columnsBlock =
5586
5606
  domel('div')
5587
5607
  .addClass(`${this.cssPrefix}-columns`)
5588
- .addClass(browserUtils.getMobileCssClass())
5608
+ .addClass(getMobileCssClass())
5589
5609
  .toDOM();
5590
5610
  if (this.options.showAddRow) {
5591
5611
  this.addRowButton =
@@ -5766,7 +5786,7 @@ class TextRenderer {
5766
5786
  domel(this.element)
5767
5787
  .html('')
5768
5788
  .addClass(this.getClassesToAdd())
5769
- .addClass(browserUtils.getMobileCssClass())
5789
+ .addClass(getMobileCssClass())
5770
5790
  .addChild('span', builder => builder
5771
5791
  .text(this.text)
5772
5792
  .title(this.text))
@@ -5852,7 +5872,7 @@ class SimpleConditionRenderer extends ConditionRenderer {
5852
5872
  this.element = builder.toDOM();
5853
5873
  builder
5854
5874
  .addClass(this.getClassesToAdd())
5855
- .addClass(browserUtils.getMobileCssClass())
5875
+ .addClass(getMobileCssClass())
5856
5876
  .data('id', this.condition.id)
5857
5877
  .data('condrow', '')
5858
5878
  .addChildElement(this.renderCheckbox())
@@ -6126,7 +6146,7 @@ class SimpleConditionRenderer extends ConditionRenderer {
6126
6146
  };
6127
6147
  const builder = domel("div")
6128
6148
  .addClass(`${this.cssPrefix}-condition-buttonsBlock`)
6129
- .addClass(browserUtils.getMobileCssClass());
6149
+ .addClass(getMobileCssClass());
6130
6150
  this.buttonsBlock = builder.toDOM();
6131
6151
  if (this.condition.isReadOnly()) {
6132
6152
  return this.buttonsBlock;
@@ -6290,7 +6310,7 @@ class ConditionGroupRenderer extends ConditionRenderer {
6290
6310
  coreRender(autoAppear) {
6291
6311
  domel(this.element)
6292
6312
  .addClass(this.getClassesToAdd())
6293
- .addClass(browserUtils.getMobileCssClass())
6313
+ .addClass(getMobileCssClass())
6294
6314
  .addChildElement(this.renderGroupRow())
6295
6315
  .addChildElement(this.renderConditions(autoAppear))
6296
6316
  .data('id', this.condition.id)
@@ -6308,7 +6328,7 @@ class ConditionGroupRenderer extends ConditionRenderer {
6308
6328
  const builder = domel('div');
6309
6329
  builder
6310
6330
  .addClass(`${this.cssPrefix}-conditions`)
6311
- .addClass(`${browserUtils.getMobileCssClass()}`)
6331
+ .addClass(`${getMobileCssClass()}`)
6312
6332
  .data('conditions', '');
6313
6333
  if (this.isRoot) {
6314
6334
  builder.addClass(`${this.cssPrefix}-conditions-root`);
@@ -6350,7 +6370,7 @@ class ConditionGroupRowRenderer extends SimpleConditionRenderer {
6350
6370
  coreRender(autoAppear) {
6351
6371
  const builder = domel(this.element)
6352
6372
  .addClass(this.getClassesToAdd())
6353
- .addClass(browserUtils.getMobileCssClass())
6373
+ .addClass(getMobileCssClass())
6354
6374
  .data('group-row', '')
6355
6375
  .addChildElement(this.renderCheckbox())
6356
6376
  .addChildElement(this.renderConjunction());
@@ -6486,7 +6506,7 @@ class BaseElementRenderer {
6486
6506
  domel(this.element)
6487
6507
  .html('')
6488
6508
  .addClass(this.getClassesToAdd())
6489
- .addClass(browserUtils.getMobileCssClass())
6509
+ .addClass(getMobileCssClass())
6490
6510
  .addChildElement(this.labelElement);
6491
6511
  if (this.isEditable()) {
6492
6512
  this.renderEditor();
@@ -7244,7 +7264,7 @@ class DateTimeExpressionRenderer extends ExpressionRenderer {
7244
7264
  dateTime = model.getTimeMacroValue(value);
7245
7265
  }
7246
7266
  else {
7247
- dateTime = this.convertFromInternalFormat(value);
7267
+ dateTime = this.convertFromInternalFormat(value, new Date());
7248
7268
  }
7249
7269
  this.dtp.setDateTime(dateTime);
7250
7270
  this.dtp.show(this.element);
@@ -7274,8 +7294,13 @@ class DateTimeExpressionRenderer extends ExpressionRenderer {
7274
7294
  return super.isEditable()
7275
7295
  && ((this.panel.options.editableParts & QPEditablePart.Value) === QPEditablePart.Value);
7276
7296
  }
7277
- convertFromInternalFormat(dateTime) {
7278
- return utils.strToDateTime(dateTime, this.internalDateFormat + ' ' + this.internalTimeFormat);
7297
+ convertFromInternalFormat(dateTimeStr, defautValue) {
7298
+ try {
7299
+ return utils.strToDateTime(dateTimeStr, this.internalDateFormat + ' ' + this.internalTimeFormat);
7300
+ }
7301
+ catch (_a) {
7302
+ return defautValue || new Date();
7303
+ }
7279
7304
  }
7280
7305
  convertToInternalFormat(dateTime) {
7281
7306
  return i18n.dateTimeToStr(dateTime, this.internalDateFormat + ' ' + this.internalTimeFormat);
@@ -7807,7 +7832,7 @@ class QueryPanel extends Widget {
7807
7832
  .toDOM();
7808
7833
  domel(this.slot)
7809
7834
  .removeClass(eqCssMobile)
7810
- .addClass(browserUtils.getMobileCssClass());
7835
+ .addClass(getMobileCssClass());
7811
7836
  const query = this.getQuery();
7812
7837
  const root = query.getRootCondition();
7813
7838
  const renderer = this.getConditionRenderer(root, this.rootContainer);
@@ -8126,7 +8151,7 @@ class QueryPanel extends Widget {
8126
8151
  renderProgressBlock() {
8127
8152
  this.progressBlock = document.createElement('div');
8128
8153
  this.progressBlock.classList.add(`${eqCssPrefix}-progress-win8`);
8129
- this.progressBlock.classList.add(browserUtils.getMobileCssClass());
8154
+ this.progressBlock.classList.add(getMobileCssClass());
8130
8155
  this.progressBlock.innerHTML = '<div class="wBall" id="wBall_1"><div class="wInnerBall"></div></div><div class="wBall" id="wBall_2"><div class="wInnerBall"></div></div><div class="wBall" id="wBall_3"><div class="wInnerBall"></div></div><div class="wBall" id="wBall_4"><div class="wInnerBall"></div></div><div class="wBall" id="wBall_5"><div class="wInnerBall"></div></div>';
8131
8156
  }
8132
8157
  clonePanel(slot, query) {
@@ -8242,7 +8267,7 @@ class FilterBar extends Widget {
8242
8267
  render() {
8243
8268
  domel(this.slot)
8244
8269
  .addClass(`${this.cssPrefix}-container`)
8245
- .addClass(browserUtils.getMobileCssClass())
8270
+ .addClass(getMobileCssClass())
8246
8271
  .addChild('div', builder => this.headerElement = builder
8247
8272
  .addClass(`${this.cssPrefix}-header`)
8248
8273
  .addChild('div', builder => this.headerIconElement = builder
@@ -8288,14 +8313,14 @@ class FilterBar extends Widget {
8288
8313
  .toDOM())
8289
8314
  .addChild('div', builder => this.qpBlock = builder
8290
8315
  .addClass(`${this.cssPrefix}-querypanelblock`)
8291
- .addClass(browserUtils.getMobileCssClass())
8316
+ .addClass(getMobileCssClass())
8292
8317
  .hide()
8293
8318
  .addChildElement(this.qpElement)
8294
8319
  .toDOM());
8295
8320
  if (this.options.showApplyButton || this.options.showClearButton) {
8296
8321
  this.buttonsBlock = domel('div', this.qpBlock)
8297
8322
  .addClass(`${this.cssPrefix}-buttonsblock`)
8298
- .addClass(browserUtils.getMobileCssClass())
8323
+ .addClass(getMobileCssClass())
8299
8324
  .toDOM();
8300
8325
  }
8301
8326
  if (this.options.showApplyButton) {
@@ -10084,6 +10109,7 @@ class PivotTableFacet extends ResultFacet {
10084
10109
  this.title = i18n.getText('Facets', 'Pivot', 'FacetTitle');
10085
10110
  this.dialogTitle = i18n.getText('Facets', 'Pivot', 'DlgTitle');
10086
10111
  this.pivotTable = new EasyDataTable();
10112
+ this.settings = {};
10087
10113
  }
10088
10114
  init(slot) {
10089
10115
  super.init(slot);
@@ -10364,14 +10390,14 @@ class PivotTableFacet extends ResultFacet {
10364
10390
  saveToData() {
10365
10391
  const data = super.saveToData();
10366
10392
  if (this.settings) {
10367
- utils.assignDeep(data, this.settings);
10393
+ utils.assign(data, this.settings);
10368
10394
  }
10369
10395
  return data;
10370
10396
  }
10371
10397
  loadFromData(data) {
10372
10398
  super.loadFromData(data);
10373
10399
  if (data) {
10374
- this.settings = utils.assignDeep(this.settings, data);
10400
+ this.settings = utils.assign(this.settings, data);
10375
10401
  if (this.settings.aggrFunc == 'AVERAGE') {
10376
10402
  this.settings.aggrFunc = AggrFunc.Average;
10377
10403
  }
@@ -10960,7 +10986,7 @@ class ResultFacetsPanel extends FacetContainer {
10960
10986
  this._processBlock = domel('div')
10961
10987
  .addClass(`${this.cssPrefix}-spinner`)
10962
10988
  .addChild('div', b => b
10963
- .addClass(`${eqCssPrefix}-progress-win8`, browserUtils.getMobileCssClass())
10989
+ .addClass(`${eqCssPrefix}-progress-win8`, getMobileCssClass())
10964
10990
  .addHtml(html))
10965
10991
  .toDOM();
10966
10992
  }
@@ -11932,7 +11958,7 @@ class AggregationBar extends Widget {
11932
11958
  }
11933
11959
  render() {
11934
11960
  this.slot.classList.add(`${this.cssPrefix}-panel`);
11935
- const mobClass = browserUtils.getMobileCssClass();
11961
+ const mobClass = getMobileCssClass();
11936
11962
  if (mobClass) {
11937
11963
  this.slot.classList.add(mobClass);
11938
11964
  }
@@ -12065,7 +12091,7 @@ class QueryNameWidget extends Widget {
12065
12091
  }
12066
12092
  render() {
12067
12093
  this.slot.classList.add(`${this.cssPrefix}`);
12068
- const mobClass = browserUtils.getMobileCssClass();
12094
+ const mobClass = getMobileCssClass();
12069
12095
  if (mobClass) {
12070
12096
  this.slot.classList.add(mobClass);
12071
12097
  }
@@ -12173,7 +12199,7 @@ class View {
12173
12199
  }
12174
12200
  initOptions(options) {
12175
12201
  options = utils.assignDeep(this.defaultViewOptions, options);
12176
- // support old format
12202
+ // support old format
12177
12203
  if (!options.widgets.easyGrid) {
12178
12204
  options.widgets.easyGrid = options.widgets.resultGrid || {};
12179
12205
  }
@@ -12403,7 +12429,7 @@ class View {
12403
12429
  this._spinnerDiv = domel('div')
12404
12430
  .addClass(`eqjs-result-spinner`)
12405
12431
  .addChild('div', b => b
12406
- .addClass(`${eqCssPrefix}-progress-win8`, browserUtils.getMobileCssClass())
12432
+ .addClass(`${eqCssPrefix}-progress-win8`, getMobileCssClass())
12407
12433
  .addHtml(html))
12408
12434
  .toDOM();
12409
12435
  }
@@ -12627,6 +12653,9 @@ class View {
12627
12653
  this.domRoots = [document];
12628
12654
  this.resetContext();
12629
12655
  }
12656
+ refreshWidgets(groups) {
12657
+ this.context.refreshWidgets(groups);
12658
+ }
12630
12659
  }
12631
12660
 
12632
12661
  /**
@@ -12904,8 +12933,12 @@ class AdvancedSearchView extends View {
12904
12933
  });
12905
12934
  }
12906
12935
  clearQueryButtonClick() {
12907
- this.context.clearQuery();
12908
- this.context.refreshWidgets(WidgetGroup.Statement);
12936
+ this.showQueryClearDialog((result) => {
12937
+ if (result) {
12938
+ this.context.clearQuery();
12939
+ this.context.refreshWidgets(WidgetGroup.Statement);
12940
+ }
12941
+ });
12909
12942
  }
12910
12943
  createNewQuery(options) {
12911
12944
  return this.context.newQuery(options);
@@ -12935,22 +12968,43 @@ class AdvancedSearchView extends View {
12935
12968
  saveCurrentQuery(copyQuery = false, callback) {
12936
12969
  const query = this.context.getQuery();
12937
12970
  if (query.isNewbie || copyQuery) {
12938
- this.showSaveQueryDialog((result) => new Promise(resolve => {
12939
- if (!result)
12971
+ this.showSaveQueryDialog((newQueryName) => new Promise(resolve => {
12972
+ if (!newQueryName)
12940
12973
  return;
12941
- query.regenerateId();
12942
- query.setName(result);
12943
- query.fireChangedEvent({
12944
- part: QueryChangePart.Properties,
12945
- wasModified: true
12946
- });
12947
- this.saveQuery(() => { resolve({ success: true }); }, (error) => resolve({ success: false, message: error }));
12974
+ this.checkSaveQueryName(newQueryName)
12975
+ .then(() => {
12976
+ query.regenerateId();
12977
+ query.setName(newQueryName);
12978
+ query.fireChangedEvent({
12979
+ part: QueryChangePart.Properties,
12980
+ wasModified: true
12981
+ });
12982
+ this.saveQuery(() => { resolve({ success: true }); }, (error) => resolve({ success: false, message: error }));
12983
+ }, (message) => resolve({ success: false, message }));
12948
12984
  }));
12949
12985
  }
12950
12986
  else {
12951
12987
  this.saveQuery(callback);
12952
12988
  }
12953
12989
  }
12990
+ checkSaveQueryName(name) {
12991
+ return new Promise((resolve, reject) => {
12992
+ this.context.loadQueryList({
12993
+ success: (queryList) => {
12994
+ const found = queryList.filter(item => item.name.toLowerCase() == name.toLowerCase());
12995
+ if (found.length == 0) {
12996
+ resolve();
12997
+ }
12998
+ else {
12999
+ reject("Can't save the query. A query with this name already exists.");
13000
+ }
13001
+ },
13002
+ error: (message) => {
13003
+ reject(message);
13004
+ }
13005
+ });
13006
+ });
13007
+ }
12954
13008
  checkIfQueryModified(callback) {
12955
13009
  if (this.context.getQuery().isModified()
12956
13010
  && !this.viewOptions.disableConfirmationOnQueryChange) {
@@ -13029,6 +13083,10 @@ class AdvancedSearchView extends View {
13029
13083
  }
13030
13084
  });
13031
13085
  }
13086
+ showQueryClearDialog(callback) {
13087
+ const ds = this.getDialogService();
13088
+ ds.openConfirm(i18n.getText('QueryChangedTitle'), i18n.getText('QueryClearContent'), callback);
13089
+ }
13032
13090
  showQueryChangedDialog(callback) {
13033
13091
  const ds = this.getDialogService();
13034
13092
  ds.openConfirm(i18n.getText('QueryChangedTitle'), i18n.getText('QueryChangedContent'), callback);
@@ -14188,6 +14246,7 @@ function addEasyQueryUITexts() {
14188
14246
  CmdDeleteColumn: 'Delete column',
14189
14247
  CmdDeleteSorting: 'Delete sorting',
14190
14248
  CmdDescending: 'Descending',
14249
+ CmdGroupAppearance: 'Appearance',
14191
14250
  CmdGroupSort: 'Sorting',
14192
14251
  CmdGroupFormat: 'Display format',
14193
14252
  CmdNotSorted: 'Not sorted',
@@ -14235,6 +14294,7 @@ function addEasyQueryUITexts() {
14235
14294
  SaveQueryDefName: '{queryName} copy',
14236
14295
  QueryChangedTitle: 'Confirmation',
14237
14296
  QueryChangedContent: 'The query was changed. Do you want to save it first?',
14297
+ QueryClearContent: 'The query will cleared. Do you want to continue?',
14238
14298
  UpdateQuerySelector: '[click here to load the query]',
14239
14299
  FileNameLabel: 'File name: ',
14240
14300
  SaveQueryToFileDlgTitle: 'Save query to file',
@@ -14376,4 +14436,4 @@ if (!Array.prototype.findIndex) {
14376
14436
  };
14377
14437
  }
14378
14438
 
14379
- export { AddRowRenderer, AdvancedSearchView, AggrFuncColumnRendererCB, AggrFuncColumnRendererCP, AggrSettingsDialog, AggrSettingsRenderer, AggregationBar, AttrColumnRendererCB, AttrColumnRendererCP, AttributeExpressionRenderer, BaseElementRenderer, ChartFacet, ChartJsWidget, ChartType, ChartWidget, ColumnAction, ColumnRendererCB, ColumnRendererCP, ColumnsBar, ColumnsPanel, ConditionAction, ConditionGroupRenderer, ConditionGroupRowRenderer, ConditionRenderer, ConstColumnRendererCP, CustomListExpressionRenderer, CustomSqlColumnRendererCP, DataFilterView, DataTableFacet, DateTimeExpressionRenderer, DomDropDownElementBuilder, DropDownRenderer, EasyGridWidget, EntitiesPanel, EqHtmlGrid, ExportDialog, ExportWidget, ExpressionRenderer, FacetContainer, FacetType, FilterBar, GoogleChartWidget, Grid, HtmlContentWidget, HtmlDataFilterView, InputExpressionRenderer, ListExpressionRenderer, ManageDrillDownWidget, OperatorRenderer, PivotTableFacet, PopupMenu, ProcessWidget, QPEditablePart, QueryPanel, ReportView, ResultFacet, ResultFacetsPanel, SimpleConditionRenderer, SortingBar, SqlListExpressionRenderer, StatementPanel, SubQueryExpressionRenderer, TextRenderer, View, browserUtils, dropdown };
14439
+ export { AddRowRenderer, AdvancedSearchView, AggrFuncColumnRendererCB, AggrFuncColumnRendererCP, AggrSettingsDialog, AggrSettingsRenderer, AggregationBar, AttrColumnRendererCB, AttrColumnRendererCP, AttributeExpressionRenderer, BaseElementRenderer, ChartFacet, ChartJsWidget, ChartType, ChartWidget, ColumnAction, ColumnRendererCB, ColumnRendererCP, ColumnsBar, ColumnsPanel, ConditionAction, ConditionGroupRenderer, ConditionGroupRowRenderer, ConditionRenderer, ConstColumnRendererCP, CustomListExpressionRenderer, CustomSqlColumnRendererCP, DataFilterView, DataTableFacet, DateTimeExpressionRenderer, DomDropDownElementBuilder, DropDownRenderer, EasyGridWidget, EntitiesPanel, EqHtmlGrid, ExportDialog, ExportWidget, ExpressionRenderer, FacetContainer, FacetType, FilterBar, GoogleChartWidget, Grid, HtmlContentWidget, HtmlDataFilterView, InputExpressionRenderer, ListExpressionRenderer, ManageDrillDownWidget, OperatorRenderer, PivotTableFacet, PopupMenu, ProcessWidget, QPEditablePart, QueryPanel, ReportView, ResultFacet, ResultFacetsPanel, SimpleConditionRenderer, SortingBar, SqlListExpressionRenderer, StatementPanel, SubQueryExpressionRenderer, TextRenderer, View, dropdown };