@easyquery/ui 7.2.5 → 7.3.0-rc01

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 (58) 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 +435 -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 +298 -0
  10. package/dist/easyquery.ui.cjs.js +202 -178
  11. package/dist/easyquery.ui.esm.js +166 -142
  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/querypanel/datetime_expression_render.d.ts +1 -1
  18. package/package.json +5 -5
  19. package/dist/assets/css/eq-icons-default.css +0 -140
  20. package/dist/assets/css/eq-icons-files.css +0 -91
  21. package/dist/assets/css/images/ExportCSV.png +0 -0
  22. package/dist/assets/css/images/ExportExel.png +0 -0
  23. package/dist/assets/css/images/aggr_settings_cancel.png +0 -0
  24. package/dist/assets/css/images/aggr_settings_func.png +0 -0
  25. package/dist/assets/css/images/aggr_settings_group.png +0 -0
  26. package/dist/assets/css/images/ajax-loader.gif +0 -0
  27. package/dist/assets/css/images/chart-settings.png +0 -0
  28. package/dist/assets/css/images/checkbox_checked.png +0 -0
  29. package/dist/assets/css/images/checkbox_unchecked.png +0 -0
  30. package/dist/assets/css/images/clearButton.png +0 -0
  31. package/dist/assets/css/images/colbtn-aggrfunc.png +0 -0
  32. package/dist/assets/css/images/condbtn-addcondition.png +0 -0
  33. package/dist/assets/css/images/condbtn-addpredicate.png +0 -0
  34. package/dist/assets/css/images/condbtn-delete.png +0 -0
  35. package/dist/assets/css/images/condbtn-disabled.png +0 -0
  36. package/dist/assets/css/images/condbtn-enabled.png +0 -0
  37. package/dist/assets/css/images/condbtn-menu.png +0 -0
  38. package/dist/assets/css/images/condbtn-param.png +0 -0
  39. package/dist/assets/css/images/eqjs-ep-add-columns-hover.png +0 -0
  40. package/dist/assets/css/images/eqjs-ep-add-columns.png +0 -0
  41. package/dist/assets/css/images/eqjs-ep-add-cond-hover.png +0 -0
  42. package/dist/assets/css/images/eqjs-ep-add-cond.png +0 -0
  43. package/dist/assets/css/images/eqjs-ep-deselect-all-hover.png +0 -0
  44. package/dist/assets/css/images/eqjs-ep-deselect-all.png +0 -0
  45. package/dist/assets/css/images/eqjs-ep-select-all-hover.png +0 -0
  46. package/dist/assets/css/images/eqjs-ep-select-all.png +0 -0
  47. package/dist/assets/css/images/eqjs-fb-header-icon.png +0 -0
  48. package/dist/assets/css/images/execute.png +0 -0
  49. package/dist/assets/css/images/loadButton.png +0 -0
  50. package/dist/assets/css/images/logo.png +0 -0
  51. package/dist/assets/css/images/node-close.png +0 -0
  52. package/dist/assets/css/images/node-open.png +0 -0
  53. package/dist/assets/css/images/saveButton.png +0 -0
  54. package/dist/assets/css/images/sorting_asc.png +0 -0
  55. package/dist/assets/css/images/sorting_desc.png +0 -0
  56. package/dist/assets/css/images/sorting_none.png +0 -0
  57. package/dist/assets/css/images/ve-loader.gif +0 -0
  58. package/dist/types/utils/browser_utils.d.ts +0 -8
@@ -29,64 +29,9 @@ function safeFocus(element) {
29
29
  }
30
30
  const eqCssPrefix = 'eqjs';
31
31
  const eqCssMobile = 'eqjs-mobile';
32
-
33
- exports.browserUtils = void 0;
34
- (function (browserUtils) {
35
- let _isFirefox = null;
36
- function isIE() {
37
- const ua = window.navigator.userAgent;
38
- return ua.includes('MSIE') || ua.includes('Trident');
39
- }
40
- browserUtils.isIE = isIE;
41
- function isFirefox() {
42
- if (_isFirefox === null) {
43
- const ua = navigator.userAgent;
44
- _isFirefox = ua.toLowerCase().indexOf('firefox') > -1;
45
- }
46
- return _isFirefox;
47
- }
48
- browserUtils.isFirefox = isFirefox;
49
- let _detectedIsMobileMode = false;
50
- let _isMobileMode = undefined;
51
- let detectIsMobileMode = () => {
52
- const oldValue = isMobileMode();
53
- _detectedIsMobileMode = window.matchMedia('only screen and (max-width: 840px)').matches
54
- || window.matchMedia('only screen and (max-height: 420px)').matches;
55
- const newValue = isMobileMode();
56
- if (newValue !== oldValue && mobileModeChangeHandler) {
57
- mobileModeChangeHandler(newValue);
58
- }
59
- };
60
- detectIsMobileMode();
61
- window.addEventListener('resize', () => detectIsMobileMode());
62
- function isMobileMode() {
63
- if (_isMobileMode !== undefined) {
64
- return _isMobileMode;
65
- }
66
- else {
67
- return _detectedIsMobileMode;
68
- }
69
- }
70
- browserUtils.isMobileMode = isMobileMode;
71
- function setIsMobileMode(value) {
72
- const oldValue = isMobileMode();
73
- _isMobileMode = value;
74
- const newValue = isMobileMode();
75
- if (newValue !== oldValue && mobileModeChangeHandler) {
76
- mobileModeChangeHandler(newValue);
77
- }
78
- }
79
- browserUtils.setIsMobileMode = setIsMobileMode;
80
- let mobileModeChangeHandler;
81
- function onMobileModeChanged(callback) {
82
- mobileModeChangeHandler = callback;
83
- }
84
- browserUtils.onMobileModeChanged = onMobileModeChanged;
85
- function getMobileCssClass() {
86
- return isMobileMode() ? eqCssMobile : null;
87
- }
88
- browserUtils.getMobileCssClass = getMobileCssClass;
89
- })(exports.browserUtils || (exports.browserUtils = {}));
32
+ function getMobileCssClass() {
33
+ return ui.browserUtils.isMobileMode() ? eqCssMobile : null;
34
+ }
90
35
 
91
36
  /**
92
37
  * The entities panel wiget, implemented without JQuery.
@@ -185,7 +130,7 @@ class EntitiesPanel extends core.Widget {
185
130
  let model = this.context.getModel();
186
131
  this.clear();
187
132
  this.panel.classList.add(`${this.cssPrefix}-panel`);
188
- this.panel.classList.add(exports.browserUtils.getMobileCssClass());
133
+ this.panel.classList.add(getMobileCssClass());
189
134
  this.rootEntityBlock = document.createElement('div');
190
135
  if (model != null && !model.isEmpty()) {
191
136
  let entTree = model.getEntitiesTree({
@@ -216,10 +161,10 @@ class EntitiesPanel extends core.Widget {
216
161
  let entityBlock;
217
162
  let entityNode = document.createElement('div');
218
163
  entityNode.classList.add(`${this.cssPrefix}-entity-node`);
219
- entityNode.classList.add(exports.browserUtils.getMobileCssClass());
164
+ entityNode.classList.add(getMobileCssClass());
220
165
  let entityChildren = document.createElement('div');
221
166
  entityChildren.classList.add(`${this.cssPrefix}-entity-children`);
222
- entityChildren.classList.add(exports.browserUtils.getMobileCssClass());
167
+ entityChildren.classList.add(getMobileCssClass());
223
168
  let nodeLabel = document.createElement('label');
224
169
  nodeLabel.classList.add(`${this.cssPrefix}-entity-node-label`);
225
170
  let nodeInput = document.createElement('input');
@@ -243,7 +188,7 @@ class EntitiesPanel extends core.Widget {
243
188
  entityBlock = document.createElement('div');
244
189
  }
245
190
  entityBlock.classList.add(`${this.cssPrefix}-entity`);
246
- entityBlock.classList.add(exports.browserUtils.getMobileCssClass());
191
+ entityBlock.classList.add(getMobileCssClass());
247
192
  if (entity.id && entity.id != "") {
248
193
  nodeLabel.innerText = entity.text;
249
194
  entityNode.appendChild(nodeLabel); //caption
@@ -414,7 +359,7 @@ class EntitiesPanel extends core.Widget {
414
359
  createFilterBox() {
415
360
  this.filterBoxBlock = document.createElement('div');
416
361
  this.filterBoxBlock.classList.add(`${this.cssPrefix}-filter-box`);
417
- this.filterBoxBlock.classList.add(exports.browserUtils.getMobileCssClass());
362
+ this.filterBoxBlock.classList.add(getMobileCssClass());
418
363
  this.filterBoxInput = document.createElement('input');
419
364
  this.filterBoxInput.classList.add(`${this.cssPrefix}-filter-box-input`);
420
365
  this.filterBoxInput.addEventListener('input', (e) => {
@@ -447,7 +392,7 @@ class EntitiesPanel extends core.Widget {
447
392
  let defClass = `${this.cssPrefix}-tool-panel`;
448
393
  let toolPanelBlock = document.createElement('div');
449
394
  toolPanelBlock.classList.add(defClass);
450
- toolPanelBlock.classList.add(exports.browserUtils.getMobileCssClass());
395
+ toolPanelBlock.classList.add(getMobileCssClass());
451
396
  let toolSelectAll = document.createElement('div');
452
397
  toolSelectAll.classList.add(`${defClass}-select-all`);
453
398
  toolSelectAll.title = 'Select all';
@@ -660,7 +605,7 @@ class EntitiesPanel extends core.Widget {
660
605
  renderProgressBlock() {
661
606
  this.progressBlock = document.createElement('div');
662
607
  this.progressBlock.classList.add(`${eqCssPrefix}-progress-win8`);
663
- this.progressBlock.classList.add(exports.browserUtils.getMobileCssClass());
608
+ this.progressBlock.classList.add(getMobileCssClass());
664
609
  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>';
665
610
  }
666
611
  clear() {
@@ -717,7 +662,7 @@ class MenuLevel {
717
662
  const isSubQuery = this.parentMenu.options.isSubQuery;
718
663
  //add base DIV element which is also used to show the shadow
719
664
  const baseDivBuilder = ui.domel('div')
720
- .addClass(exports.browserUtils.getMobileCssClass());
665
+ .addClass(getMobileCssClass());
721
666
  if (this.parentMenu.options.useDefaultStyles) {
722
667
  baseDivBuilder
723
668
  .setStyle('backgroundColor', itemBgColor)
@@ -841,7 +786,7 @@ class MenuLevel {
841
786
  scrollDiv.tabIndex = 1;
842
787
  ui.domel(scrollDiv)
843
788
  .addClass(`${this.cssPrefix}-scrollDiv`)
844
- .addClass(exports.browserUtils.getMobileCssClass());
789
+ .addClass(getMobileCssClass());
845
790
  scrollDiv.style.overflowX = "hidden";
846
791
  scrollDiv.style.overflowY = "auto";
847
792
  scrollDiv.style.position = "relative";
@@ -893,7 +838,7 @@ class MenuLevel {
893
838
  event.preventDefault(); // prevent the default action (scroll / move caret)
894
839
  };
895
840
  scrollDiv.addEventListener("keydown", scrollDivKeyDownHandler);
896
- if (exports.browserUtils.isMobileMode()) {
841
+ if (ui.browserUtils.isMobileMode()) {
897
842
  this.closeDiv =
898
843
  ui.domel('div', baseDiv)
899
844
  .addClass('eqjs-menu-close-btn')
@@ -1038,7 +983,7 @@ class MenuLevel {
1038
983
  const itemDiv = document.createElement("div");
1039
984
  ui.domel(itemDiv)
1040
985
  .addClass(`${this.cssPrefix}-itemDiv`)
1041
- .addClass(exports.browserUtils.getMobileCssClass());
986
+ .addClass(getMobileCssClass());
1042
987
  if (item.selected && this.showSelected && !multiselect) {
1043
988
  itemDiv.classList.add(`${this.cssPrefix}-selected`);
1044
989
  }
@@ -1221,7 +1166,7 @@ class MenuLevel {
1221
1166
  const itemDiv = document.createElement("div");
1222
1167
  ui.domel(itemDiv)
1223
1168
  .addClass(`${this.cssPrefix}-itemDiv`)
1224
- .addClass(exports.browserUtils.getMobileCssClass());
1169
+ .addClass(getMobileCssClass());
1225
1170
  itemDiv.style.marginLeft = `${level * 10}px`;
1226
1171
  if (item.selected && !multiselect) {
1227
1172
  itemDiv.classList.add(`${this.cssPrefix}-selected`);
@@ -1356,7 +1301,7 @@ class MenuLevel {
1356
1301
  return content;
1357
1302
  }
1358
1303
  renderItems(filter) {
1359
- if (!filter && !exports.browserUtils.isMobileMode()) {
1304
+ if (!filter && !ui.browserUtils.isMobileMode()) {
1360
1305
  this.renderItemsWithoutFilter();
1361
1306
  }
1362
1307
  else {
@@ -1566,7 +1511,7 @@ class MenuLevel {
1566
1511
  this.parentElement.appendChild(this.levelDiv);
1567
1512
  ui.domel(this.levelDiv)
1568
1513
  .addClass(`${this.cssPrefix}-levelDiv`)
1569
- .addClass(exports.browserUtils.getMobileCssClass());
1514
+ .addClass(getMobileCssClass());
1570
1515
  this.initialized = true;
1571
1516
  }
1572
1517
  }
@@ -1813,7 +1758,7 @@ class PopupMenu {
1813
1758
  }
1814
1759
  this.active = true;
1815
1760
  this.setSelectedItems(this.options.items, selectedIds);
1816
- if (exports.browserUtils.isMobileMode()) {
1761
+ if (ui.browserUtils.isMobileMode()) {
1817
1762
  this.rootLevel.showAt(0, 0, true, true);
1818
1763
  this.rootLevel.levelDiv.style.top = '0px';
1819
1764
  this.rootLevel.levelDiv.style.bottom = '0px';
@@ -2009,7 +1954,7 @@ class ColumnRendererCP {
2009
1954
  .replaceChild(builder.toDOM(), this.element);
2010
1955
  }
2011
1956
  this.element = builder.toDOM();
2012
- if (this.panel.options.allowDragDrop && !exports.browserUtils.isMobileMode()) {
1957
+ if (this.panel.options.allowDragDrop && !ui.browserUtils.isMobileMode()) {
2013
1958
  ui.eqDragManager.registerDraggableItem({
2014
1959
  element: this.element,
2015
1960
  scope: "entityAttrSort",
@@ -2042,7 +1987,7 @@ class ColumnRendererCP {
2042
1987
  this.createButtonMenu();
2043
1988
  builder
2044
1989
  .addClass(this.getClassesToAdd())
2045
- .addClass(exports.browserUtils.getMobileCssClass())
1990
+ .addClass(getMobileCssClass())
2046
1991
  .addChildElement(this.renderCheckbox())
2047
1992
  //start sort button
2048
1993
  .addChild('div', builder => builder
@@ -2050,7 +1995,7 @@ class ColumnRendererCP {
2050
1995
  .addChildElement(this.sortingButton))
2051
1996
  // end sort button
2052
1997
  .addChildElement(this.renderExpressionBlock());
2053
- if (this.panel.options.showColumnTitles !== false && !exports.browserUtils.isMobileMode()) {
1998
+ if (this.panel.options.showColumnTitles !== false && !ui.browserUtils.isMobileMode()) {
2054
1999
  builder
2055
2000
  .addChildElement(this.renderCaptionBlock());
2056
2001
  }
@@ -2059,7 +2004,7 @@ class ColumnRendererCP {
2059
2004
  .addChild('div', builder => {
2060
2005
  builder
2061
2006
  .addClass(`${eqCssPrefix}-column-buttonsBlock`, `${this.cssPrefix}-buttonsBlock`)
2062
- .addClass(exports.browserUtils.getMobileCssClass());
2007
+ .addClass(getMobileCssClass());
2063
2008
  //start enable button
2064
2009
  if (this.getButtonsToShow().indexOf("enable") >= 0 && !this.column.isReadOnly()) {
2065
2010
  builder.addChildElement(this.renderEnabledButton());
@@ -2086,28 +2031,31 @@ class ColumnRendererCP {
2086
2031
  }
2087
2032
  //end menu button
2088
2033
  });
2089
- //end buttons
2090
- if (!exports.browserUtils.isMobileMode()) {
2034
+ //end buttons
2035
+ if (!ui.browserUtils.isMobileMode()) {
2091
2036
  //start event listeners
2092
2037
  builder
2093
2038
  .on('mouseenter', this.onMouseEnter.bind(this))
2094
2039
  .on('mouseleave', this.onMouseLeave.bind(this));
2095
2040
  //end event listeners
2096
2041
  }
2097
- if (this.panel.options.accentActiveColumn || exports.browserUtils.isMobileMode()) {
2042
+ if (this.panel.options.accentActiveColumn || ui.browserUtils.isMobileMode()) {
2098
2043
  builder
2099
2044
  .on('click', this.onMouseClick.bind(this)); //touchstart
2100
2045
  }
2101
2046
  if (this.panel.options.alwaysShowButtons) {
2102
2047
  this.showButtons();
2103
2048
  }
2049
+ if (this.panel.options.showCheckboxes === false) {
2050
+ builder.addClass("eqjs-no-checkbox");
2051
+ }
2104
2052
  return this.element;
2105
2053
  }
2106
2054
  onMouseClick(ev) {
2107
2055
  ev.stopPropagation();
2108
2056
  this.panel.toggleColumnPicked(this.column);
2109
2057
  this.adjustButtonsVisibility();
2110
- if (!exports.browserUtils.isMobileMode()) {
2058
+ if (!ui.browserUtils.isMobileMode()) {
2111
2059
  this.element.dispatchEvent(ui.createBrowserEvent("mouseenter"));
2112
2060
  }
2113
2061
  return false;
@@ -2121,7 +2069,7 @@ class ColumnRendererCP {
2121
2069
  renderCaptionBlock() {
2122
2070
  const builder = ui.domel('div')
2123
2071
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-captionelement`)
2124
- .addClass(exports.browserUtils.getMobileCssClass());
2072
+ .addClass(getMobileCssClass());
2125
2073
  if (this.isEditable()) {
2126
2074
  builder
2127
2075
  .addChild('a', builder => builder
@@ -2311,7 +2259,7 @@ class ColumnRendererCP {
2311
2259
  .addClass(`${eqCssPrefix}-button`, `${eqCssPrefix}-column-button`, `${eqCssPrefix}-column-button-menu`)
2312
2260
  .title(core.i18n.getText('ButtonMenu'))
2313
2261
  .attr('tabIndex', '0')
2314
- .on('click', evt => this.buttonMenuHandler(exports.ColumnAction.Menu, evt)) //touchstart
2262
+ .on('click', evt => this.buttonMenuHandler(exports.ColumnAction.Menu, evt)) //touchstart
2315
2263
  .on('keypress', evt => { if (evt.keyCode == 13) {
2316
2264
  evt.target.click();
2317
2265
  } }))
@@ -2444,7 +2392,7 @@ class ColumnRendererCP {
2444
2392
  }
2445
2393
  adjustButtonsVisibility() {
2446
2394
  if (this.panel.options.alwaysShowButtons ||
2447
- ((this.panel.options.accentActiveColumn || exports.browserUtils.isMobileMode())
2395
+ ((this.panel.options.accentActiveColumn || ui.browserUtils.isMobileMode())
2448
2396
  && this.isColumnActive())) {
2449
2397
  this.showButtons();
2450
2398
  }
@@ -2741,10 +2689,10 @@ class AttrColumnRendererCP extends ColumnRendererCP {
2741
2689
  renderExpressionBlock() {
2742
2690
  return ui.domel("div")
2743
2691
  .addClass(`${this.cssPrefix}-expr-block`)
2744
- .addClass(exports.browserUtils.getMobileCssClass())
2692
+ .addClass(getMobileCssClass())
2745
2693
  .addChild('div', builder => builder
2746
2694
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-attrelement`)
2747
- .addClass(exports.browserUtils.getMobileCssClass())
2695
+ .addClass(getMobileCssClass())
2748
2696
  .addChildElement(this.renderBaseExpression()))
2749
2697
  .toDOM();
2750
2698
  }
@@ -2914,7 +2862,7 @@ class AggrFuncColumnRendererCP extends AttrColumnRendererCP {
2914
2862
  const model = this.panel.getContext().getModel();
2915
2863
  const exprBlockBuilder = ui.domel("div")
2916
2864
  .addClass(`${this.cssPrefix}-expr-block`, `${this.cssPrefix}-expr-block-aggr`)
2917
- .addClass(exports.browserUtils.getMobileCssClass());
2865
+ .addClass(getMobileCssClass());
2918
2866
  const format = model.getAggrFunctionFormat(this.column.expr.func);
2919
2867
  if (!format || format === '')
2920
2868
  return;
@@ -2950,14 +2898,14 @@ class AggrFuncColumnRendererCP extends AttrColumnRendererCP {
2950
2898
  exprBlockBuilder
2951
2899
  .addChild('div', builder => builder
2952
2900
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-aggrfuncelement`)
2953
- .addClass(exports.browserUtils.getMobileCssClass())
2901
+ .addClass(getMobileCssClass())
2954
2902
  .addChildElement(functionLink.toDOM()));
2955
2903
  }
2956
2904
  else {
2957
2905
  exprBlockBuilder
2958
2906
  .addChild('div', b => b
2959
2907
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-aggrfuncelement`)
2960
- .addClass(exports.browserUtils.getMobileCssClass())
2908
+ .addClass(getMobileCssClass())
2961
2909
  .addChild('span', b => b
2962
2910
  .text(item.text)
2963
2911
  .title(item.text)));
@@ -2967,14 +2915,14 @@ class AggrFuncColumnRendererCP extends AttrColumnRendererCP {
2967
2915
  exprBlockBuilder
2968
2916
  .addChild('div', builder => builder
2969
2917
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-attrelement`)
2970
- .addClass(exports.browserUtils.getMobileCssClass())
2918
+ .addClass(getMobileCssClass())
2971
2919
  .addChildElement(this.renderBaseExpression()));
2972
2920
  }
2973
2921
  else if (item.type === 3) {
2974
2922
  exprBlockBuilder
2975
2923
  .addChild('span', builder => builder
2976
2924
  .addClass(`${this.cssPrefix}-colelement`)
2977
- .addClass(exports.browserUtils.getMobileCssClass())
2925
+ .addClass(getMobileCssClass())
2978
2926
  .text(item.text)
2979
2927
  .title(item.text));
2980
2928
  }
@@ -3056,12 +3004,12 @@ class EditableColumnRendererCP extends AttrColumnRendererCP {
3056
3004
  renderExpressionBlock() {
3057
3005
  const exprBlock = ui.domel("div")
3058
3006
  .addClass(`${this.cssPrefix}-expr-block`)
3059
- .addClass(exports.browserUtils.getMobileCssClass())
3007
+ .addClass(getMobileCssClass())
3060
3008
  .toDOM();
3061
3009
  //Attribute element
3062
3010
  let builder = ui.domel('div', exprBlock)
3063
3011
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-attrelement`)
3064
- .addClass(exports.browserUtils.getMobileCssClass());
3012
+ .addClass(getMobileCssClass());
3065
3013
  if (this.isEditable()) {
3066
3014
  builder
3067
3015
  .addChild('a', b => b
@@ -3137,7 +3085,7 @@ class EditableColumnRendererCP extends AttrColumnRendererCP {
3137
3085
  // DataType element
3138
3086
  builder = ui.domel('div', exprBlock)
3139
3087
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-attrelement`)
3140
- .addClass(exports.browserUtils.getMobileCssClass());
3088
+ .addClass(getMobileCssClass());
3141
3089
  if (this.isEditable()) {
3142
3090
  this.createDataTypeMenu();
3143
3091
  builder
@@ -3387,8 +3335,18 @@ class ColumnsPanel extends core.Widget {
3387
3335
  const headerBuilder = ui.domel('div', this.slot)
3388
3336
  .hide()
3389
3337
  .addClass(`${this.cssPrefix}-header`)
3390
- .addClass(exports.browserUtils.getMobileCssClass())
3391
- .addChild('div', builder => builder
3338
+ .addClass(getMobileCssClass());
3339
+ if (!this.options.alwaysShowButtons) {
3340
+ headerBuilder.addClass("eqjs-no-buttons");
3341
+ }
3342
+ if (this.options.showCheckboxes) {
3343
+ headerBuilder.addChild('div', builder => builder
3344
+ .setStyle('margin-left', '30px')); //quick fix to adjust title column header when showCheckboxes is on
3345
+ }
3346
+ else {
3347
+ headerBuilder.addClass("eqjs-no-checkbox");
3348
+ }
3349
+ headerBuilder.addChild('div', builder => builder
3392
3350
  .addClass(`${this.cssPrefix}-header-expression`)
3393
3351
  .text(core$1.i18n.getText('HeaderExpression')));
3394
3352
  if (this.options.showColumnTitles !== false) {
@@ -3403,13 +3361,13 @@ class ColumnsPanel extends core.Widget {
3403
3361
  this.columnsBlock =
3404
3362
  ui.domel('div', this.slot)
3405
3363
  .addClass(`${this.cssPrefix}-columns`)
3406
- .addClass(exports.browserUtils.getMobileCssClass())
3364
+ .addClass(getMobileCssClass())
3407
3365
  .toDOM();
3408
3366
  if (this.options.showAddRow) {
3409
3367
  this.addRowElement =
3410
3368
  ui.domel('div', this.slot)
3411
3369
  .addClass(`${eqCssPrefix}-addrow`, `${this.cssPrefix}-addrow`, `${eqCssPrefix}-addrow-empty`)
3412
- .addClass(exports.browserUtils.getMobileCssClass())
3370
+ .addClass(getMobileCssClass())
3413
3371
  .addChild('a', builder => builder
3414
3372
  .attr('href', 'javascript:void(0)')
3415
3373
  .text(core$1.i18n.getText('CmdClickToAddColumn'))
@@ -3599,7 +3557,7 @@ class ColumnsPanel extends core.Widget {
3599
3557
  if (options.titleElementFormat) {
3600
3558
  this.context.options.columnTitleFormat = options.titleElementFormat;
3601
3559
  }
3602
- if (exports.browserUtils.isMobileMode()) {
3560
+ if (ui.browserUtils.isMobileMode()) {
3603
3561
  this.options.buttons = ["menu"];
3604
3562
  this.options.showHeader = false;
3605
3563
  }
@@ -3631,7 +3589,7 @@ class ColumnsPanel extends core.Widget {
3631
3589
  this.agjustHeaderVisibility();
3632
3590
  ui.domel(this.slot)
3633
3591
  .removeClass(eqCssMobile)
3634
- .addClass(exports.browserUtils.getMobileCssClass());
3592
+ .addClass(getMobileCssClass());
3635
3593
  const query = this.context.getQuery();
3636
3594
  const columns = query.getColumns();
3637
3595
  for (let column of columns) {
@@ -3949,7 +3907,7 @@ class ColumnsPanel extends core.Widget {
3949
3907
  renderProgressBlock() {
3950
3908
  this.progressBlock = document.createElement('div');
3951
3909
  this.progressBlock.classList.add(`${eqCssPrefix}-progress-win8`);
3952
- this.progressBlock.classList.add(exports.browserUtils.getMobileCssClass());
3910
+ this.progressBlock.classList.add(getMobileCssClass());
3953
3911
  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>';
3954
3912
  }
3955
3913
  }
@@ -3999,10 +3957,10 @@ class ColumnRendererCB {
3999
3957
  }
4000
3958
  builder
4001
3959
  .addClass(this.getClassesToAdd())
4002
- .addClass(exports.browserUtils.getMobileCssClass())
3960
+ .addClass(getMobileCssClass())
4003
3961
  .addChildElement(this.renderCaptionBlock())
4004
3962
  .addChildElement(this.renderSortingImage());
4005
- if (!exports.browserUtils.isMobileMode()) {
3963
+ if (!ui.browserUtils.isMobileMode()) {
4006
3964
  builder
4007
3965
  .addChildElement(this.renderButtonsBlock());
4008
3966
  }
@@ -4011,7 +3969,7 @@ class ColumnRendererCB {
4011
3969
  .on('mouseenter', this.onMouseEnter.bind(this))
4012
3970
  .on('mouseleave', this.onMouseLeave.bind(this));
4013
3971
  //end event listeners
4014
- if (this.bar.options.accentActiveColumn || exports.browserUtils.isMobileMode()) {
3972
+ if (this.bar.options.accentActiveColumn || ui.browserUtils.isMobileMode()) {
4015
3973
  builder
4016
3974
  .on('touchstart click', this.onMouseClick.bind(this));
4017
3975
  }
@@ -4040,7 +3998,7 @@ class ColumnRendererCB {
4040
3998
  if (!this.isEditable()) {
4041
3999
  return ui.domel('div')
4042
4000
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-captionelement`)
4043
- .addClass(exports.browserUtils.getMobileCssClass())
4001
+ .addClass(getMobileCssClass())
4044
4002
  .addChild('div', b => b
4045
4003
  .title(caption)
4046
4004
  .text(caption)
@@ -4074,7 +4032,7 @@ class ColumnRendererCB {
4074
4032
  }); //TO DO:add localization and input field);
4075
4033
  return ui.domel('div')
4076
4034
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-captionelement`)
4077
- .addClass(exports.browserUtils.getMobileCssClass())
4035
+ .addClass(getMobileCssClass())
4078
4036
  .addChild('a', builder => builder
4079
4037
  .attr('href', 'javascript:void(0)')
4080
4038
  .title(this.column.caption)
@@ -4150,7 +4108,7 @@ class ColumnRendererCB {
4150
4108
  else {
4151
4109
  return ui.domel('div')
4152
4110
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-sortimage-placeholder`)
4153
- .addClass(exports.browserUtils.getMobileCssClass())
4111
+ .addClass(getMobileCssClass())
4154
4112
  .addChild('div', builder => builder
4155
4113
  .addClass(`${this.cssPrefix}-img-sorting`, sortButtonDirectionCssClass)
4156
4114
  .title(core$1.i18n.getText('ButtonSorting')))
@@ -4327,7 +4285,7 @@ class ColumnRendererCB {
4327
4285
  this.adjustButtonsVisibility();
4328
4286
  }
4329
4287
  onMouseEnter(e) {
4330
- if (exports.browserUtils.isMobileMode())
4288
+ if (ui.browserUtils.isMobileMode())
4331
4289
  return;
4332
4290
  this.isMouseOverBlock = true;
4333
4291
  this.enterButtonBlock();
@@ -4335,7 +4293,7 @@ class ColumnRendererCB {
4335
4293
  return false;
4336
4294
  }
4337
4295
  onMouseLeave(e) {
4338
- if (exports.browserUtils.isMobileMode())
4296
+ if (ui.browserUtils.isMobileMode())
4339
4297
  return;
4340
4298
  this.isMouseOverBlock = false;
4341
4299
  this.leaveButtonBlock();
@@ -4346,7 +4304,7 @@ class ColumnRendererCB {
4346
4304
  return this.element.classList.contains("active");
4347
4305
  }
4348
4306
  hideButtons() {
4349
- if (exports.browserUtils.isMobileMode()) {
4307
+ if (ui.browserUtils.isMobileMode()) {
4350
4308
  if (this.onHideButtonsMobile) {
4351
4309
  this.onHideButtonsMobile();
4352
4310
  }
@@ -4356,7 +4314,7 @@ class ColumnRendererCB {
4356
4314
  }
4357
4315
  }
4358
4316
  showButtons() {
4359
- if (exports.browserUtils.isMobileMode()) {
4317
+ if (ui.browserUtils.isMobileMode()) {
4360
4318
  if (this.onShowButtonsMobile) {
4361
4319
  this.onShowButtonsMobile();
4362
4320
  }
@@ -4367,7 +4325,7 @@ class ColumnRendererCB {
4367
4325
  }
4368
4326
  adjustButtonsVisibility() {
4369
4327
  if (this.bar.options.alwaysShowButtons
4370
- || ((this.bar.options.accentActiveColumn || exports.browserUtils.isMobileMode())
4328
+ || ((this.bar.options.accentActiveColumn || ui.browserUtils.isMobileMode())
4371
4329
  && this.isColumnActive())) {
4372
4330
  this.showButtons();
4373
4331
  }
@@ -4642,6 +4600,7 @@ class ColumnsBar extends core.Widget {
4642
4600
  sortEntities: false,
4643
4601
  columnRenderedCallback: null,
4644
4602
  customExpressionText: 0,
4603
+ showAddAllForEntity: false
4645
4604
  };
4646
4605
  this.landingSlot = ui.domel('div')
4647
4606
  .addClass(`${eqCssPrefix}-highlight`)
@@ -4661,7 +4620,7 @@ class ColumnsBar extends core.Widget {
4661
4620
  ];
4662
4621
  ui.domel(this.slot)
4663
4622
  .addClass(`${this.cssPrefix}-panel`)
4664
- .addClass(exports.browserUtils.getMobileCssClass());
4623
+ .addClass(getMobileCssClass());
4665
4624
  this.group = core.WidgetGroup.Query;
4666
4625
  this.customQuery = customQuery;
4667
4626
  }
@@ -4880,7 +4839,7 @@ class ColumnsBar extends core.Widget {
4880
4839
  renderAddRowButton() {
4881
4840
  ui.domel(this.addRowButton)
4882
4841
  .addClass(`${eqCssPrefix}-addrow`, `${this.cssPrefix}-addrow`, `${eqCssPrefix}-addrow-empty`)
4883
- .addClass(exports.browserUtils.getMobileCssClass())
4842
+ .addClass(getMobileCssClass())
4884
4843
  .title(core$1.i18n.getText('CmdClickToAddColumn'))
4885
4844
  .addChild('a', builder => builder
4886
4845
  .attr('href', 'javascript:void(0)')
@@ -4890,13 +4849,18 @@ class ColumnsBar extends core.Widget {
4890
4849
  anchor: e.target,
4891
4850
  selectedIds: null,
4892
4851
  itemSelectedCallback: (data, items) => {
4893
- const attrid = data.id;
4894
- this.addNewColumn(attrid);
4852
+ if (data.id === '__AddAll__' && data.extra && Array.isArray(data.extra.ids)) {
4853
+ data.extra.ids.forEach(attrId => this.addNewColumn(attrId));
4854
+ }
4855
+ else {
4856
+ const attrid = data.id;
4857
+ this.addNewColumn(attrid);
4858
+ }
4895
4859
  return false;
4896
4860
  }
4897
4861
  });
4898
4862
  }));
4899
- if (exports.browserUtils.isMobileMode()) {
4863
+ if (ui.browserUtils.isMobileMode()) {
4900
4864
  ui.domel(this.columnsBlock)
4901
4865
  .addChildElement(this.addRowButton);
4902
4866
  }
@@ -4910,13 +4874,13 @@ class ColumnsBar extends core.Widget {
4910
4874
  this.columnsBlock =
4911
4875
  ui.domel('div')
4912
4876
  .addClass(`${this.cssPrefix}-columns`)
4913
- .addClass(exports.browserUtils.getMobileCssClass())
4877
+ .addClass(getMobileCssClass())
4914
4878
  .toDOM();
4915
4879
  if (this.options.showAddRow) {
4916
4880
  this.addRowButton =
4917
4881
  ui.domel('div')
4918
4882
  .toDOM();
4919
- if (exports.browserUtils.isMobileMode()) {
4883
+ if (ui.browserUtils.isMobileMode()) {
4920
4884
  ui.domel(this.columnsBlock)
4921
4885
  .addChildElement(this.addRowButton);
4922
4886
  }
@@ -4940,7 +4904,7 @@ class ColumnsBar extends core.Widget {
4940
4904
  this.columnButtonsBlockMobileArrow = ui.domel('i').toDOM();
4941
4905
  this.columnButtonsBlockMobile = ui.domel('div')
4942
4906
  .addClass(`${this.cssPrefix}-column-buttonsBlock`)
4943
- .addClass(exports.browserUtils.getMobileCssClass())
4907
+ .addClass(getMobileCssClass())
4944
4908
  .addChildElement(this.columnButtonsBlockMobileArrow)
4945
4909
  .hide()
4946
4910
  .toDOM();
@@ -5160,6 +5124,23 @@ class ColumnsBar extends core.Widget {
5160
5124
  showEntitiesMenu(menuOptions) {
5161
5125
  this.entitiesMenu && this.entitiesMenu.showMenu(menuOptions);
5162
5126
  }
5127
+ addAllColumnsToEntitiesList(list) {
5128
+ const attrIds = list.filter(item => !item.isEntity).map(item => item.id);
5129
+ if (attrIds.length > 0) {
5130
+ list.unshift({
5131
+ id: '__AddAll__',
5132
+ text: core$1.i18n.getText('AddAllForEntityText'),
5133
+ extra: {
5134
+ ids: attrIds
5135
+ }
5136
+ });
5137
+ }
5138
+ list.forEach(item => {
5139
+ if (item.items) {
5140
+ this.addAllColumnsToEntitiesList(item.items);
5141
+ }
5142
+ });
5143
+ }
5163
5144
  createEntitiesMenu() {
5164
5145
  const model = this.getContext().getModel();
5165
5146
  if (!model || model.isEmpty())
@@ -5169,6 +5150,10 @@ class ColumnsBar extends core.Widget {
5169
5150
  menuId += '-EntitiesMenu';
5170
5151
  }
5171
5152
  const entitiesList = model.getEntitiesTree({ addUIC: false, addUIR: true, addUIS: false, attrPlacement: this.options.attrPlacement, sortEntities: this.options.sortEntities });
5153
+ // add [Add all columns] items
5154
+ if (this.options.showAddAllForEntity) {
5155
+ this.addAllColumnsToEntitiesList(entitiesList);
5156
+ }
5172
5157
  const options = { items: entitiesList, adjustHeight: this.options.adjustEntitiesMenuHeight, id: menuId, domWriteItemsId: this.options.domWriteItemsId };
5173
5158
  core$1.utils.assign(options, this.options.menuOptions);
5174
5159
  this.entitiesMenu = new PopupMenu(options);
@@ -5297,7 +5282,7 @@ class ColumnRendererSB {
5297
5282
  }
5298
5283
  builder
5299
5284
  .addClass(this.getClassesToAdd())
5300
- .addClass(exports.browserUtils.getMobileCssClass())
5285
+ .addClass(getMobileCssClass())
5301
5286
  .addChildElement(this.renderCaptionBlock());
5302
5287
  if (this.isEditable()) {
5303
5288
  builder
@@ -5335,7 +5320,7 @@ class ColumnRendererSB {
5335
5320
  }
5336
5321
  return ui.domel('div')
5337
5322
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-captionelement`)
5338
- .addClass(exports.browserUtils.getMobileCssClass())
5323
+ .addClass(getMobileCssClass())
5339
5324
  .addChild('div', b => b
5340
5325
  .title(this.column.caption)
5341
5326
  .text(text))
@@ -5357,7 +5342,7 @@ class ColumnRendererSB {
5357
5342
  }
5358
5343
  const builder = ui.domel('div')
5359
5344
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-sortimage-placeholder`)
5360
- .addClass(exports.browserUtils.getMobileCssClass())
5345
+ .addClass(getMobileCssClass())
5361
5346
  .addChild('div', builder => builder
5362
5347
  .addClass(`${this.cssPrefix}-img-sorting`, sortButtonDirectionCssClass)
5363
5348
  .title(core$1.i18n.getText('ButtonSorting')))
@@ -5448,7 +5433,7 @@ class SortingBar extends core.Widget {
5448
5433
  this.landingIndex = -1;
5449
5434
  ui.domel(this.slot)
5450
5435
  .addClass(`${this.cssPrefix}-panel`)
5451
- .addClass(exports.browserUtils.getMobileCssClass());
5436
+ .addClass(getMobileCssClass());
5452
5437
  this.group = core.WidgetGroup.Query;
5453
5438
  }
5454
5439
  getWidgetType() {
@@ -5531,7 +5516,7 @@ class SortingBar extends core.Widget {
5531
5516
  renderAddRowButton() {
5532
5517
  ui.domel(this.addRowButton)
5533
5518
  .addClass(`${eqCssPrefix}-addrow`, `${this.cssPrefix}-addrow`, `${eqCssPrefix}-addrow-empty`)
5534
- .addClass(exports.browserUtils.getMobileCssClass())
5519
+ .addClass(getMobileCssClass())
5535
5520
  .title(core$1.i18n.getText('CmdClickToAddColumn'))
5536
5521
  .addChild('a', builder => builder
5537
5522
  .attr('href', 'javascript:void(0)')
@@ -5547,7 +5532,7 @@ class SortingBar extends core.Widget {
5547
5532
  }
5548
5533
  });
5549
5534
  }));
5550
- if (exports.browserUtils.isMobileMode()) {
5535
+ if (ui.browserUtils.isMobileMode()) {
5551
5536
  ui.domel(this.columnsBlock)
5552
5537
  .addChildElement(this.addRowButton);
5553
5538
  }
@@ -5587,13 +5572,13 @@ class SortingBar extends core.Widget {
5587
5572
  this.columnsBlock =
5588
5573
  ui.domel('div')
5589
5574
  .addClass(`${this.cssPrefix}-columns`)
5590
- .addClass(exports.browserUtils.getMobileCssClass())
5575
+ .addClass(getMobileCssClass())
5591
5576
  .toDOM();
5592
5577
  if (this.options.showAddRow) {
5593
5578
  this.addRowButton =
5594
5579
  ui.domel('div')
5595
5580
  .toDOM();
5596
- if (exports.browserUtils.isMobileMode()) {
5581
+ if (ui.browserUtils.isMobileMode()) {
5597
5582
  ui.domel(this.columnsBlock)
5598
5583
  .addChildElement(this.addRowButton);
5599
5584
  }
@@ -5768,7 +5753,7 @@ class TextRenderer {
5768
5753
  ui.domel(this.element)
5769
5754
  .html('')
5770
5755
  .addClass(this.getClassesToAdd())
5771
- .addClass(exports.browserUtils.getMobileCssClass())
5756
+ .addClass(getMobileCssClass())
5772
5757
  .addChild('span', builder => builder
5773
5758
  .text(this.text)
5774
5759
  .title(this.text))
@@ -5829,7 +5814,7 @@ class SimpleConditionRenderer extends ConditionRenderer {
5829
5814
  let result = `${this.cssPrefix}-row ${this.cssPrefix}-row-condition`;
5830
5815
  result += this.condition.isInJoin() ? ` ${this.cssPrefix}-condition-injoin` : '';
5831
5816
  result += this.condition.isParameterized() ? ` ${this.cssPrefix}-condition-parameterized` : '';
5832
- if (!exports.browserUtils.isMobileMode()) {
5817
+ if (!ui.browserUtils.isMobileMode()) {
5833
5818
  const level = this.condition.getLevel();
5834
5819
  if (level > 0)
5835
5820
  result += ` ${this.cssPrefix}-level-${level}`;
@@ -5854,7 +5839,7 @@ class SimpleConditionRenderer extends ConditionRenderer {
5854
5839
  this.element = builder.toDOM();
5855
5840
  builder
5856
5841
  .addClass(this.getClassesToAdd())
5857
- .addClass(exports.browserUtils.getMobileCssClass())
5842
+ .addClass(getMobileCssClass())
5858
5843
  .data('id', this.condition.id)
5859
5844
  .data('condrow', '')
5860
5845
  .addChildElement(this.renderCheckbox())
@@ -5887,12 +5872,12 @@ class SimpleConditionRenderer extends ConditionRenderer {
5887
5872
  builder.addChildElement(new TextRenderer(this.panel, item.text).render());
5888
5873
  }
5889
5874
  }
5890
- if (this.panel.options.accentActiveCondition || exports.browserUtils.isMobileMode()) {
5875
+ if (this.panel.options.accentActiveCondition || ui.browserUtils.isMobileMode()) {
5891
5876
  builder.on('click', ev => {
5892
5877
  ev.stopPropagation();
5893
5878
  this.panel.toggleConditionPicked(this.condition);
5894
5879
  this.adjustButtonsVisibility();
5895
- if (!exports.browserUtils.isMobileMode()) {
5880
+ if (!ui.browserUtils.isMobileMode()) {
5896
5881
  this.element.dispatchEvent(ui.createBrowserEvent("mouseenter"));
5897
5882
  }
5898
5883
  return false;
@@ -5900,7 +5885,7 @@ class SimpleConditionRenderer extends ConditionRenderer {
5900
5885
  }
5901
5886
  builder
5902
5887
  .addChildElement(this.renderButtonsBlock());
5903
- if (!exports.browserUtils.isMobileMode()) {
5888
+ if (!ui.browserUtils.isMobileMode()) {
5904
5889
  builder
5905
5890
  .on('mouseenter', event => {
5906
5891
  this.isMouseOverBlock = true;
@@ -6128,7 +6113,7 @@ class SimpleConditionRenderer extends ConditionRenderer {
6128
6113
  };
6129
6114
  const builder = ui.domel("div")
6130
6115
  .addClass(`${this.cssPrefix}-condition-buttonsBlock`)
6131
- .addClass(exports.browserUtils.getMobileCssClass());
6116
+ .addClass(getMobileCssClass());
6132
6117
  this.buttonsBlock = builder.toDOM();
6133
6118
  if (this.condition.isReadOnly()) {
6134
6119
  return this.buttonsBlock;
@@ -6221,7 +6206,7 @@ class SimpleConditionRenderer extends ConditionRenderer {
6221
6206
  .data("button", "")
6222
6207
  .title(core$1.i18n.getText('ButtonMenu'))
6223
6208
  .on('click', evt => this.conditionMenuHandler(exports.ConditionAction.Menu, evt));
6224
- if (!exports.browserUtils.isMobileMode()) {
6209
+ if (!ui.browserUtils.isMobileMode()) {
6225
6210
  b
6226
6211
  .on('keypress', evt => { if (evt.keyCode == 13) {
6227
6212
  evt.target.click();
@@ -6292,7 +6277,7 @@ class ConditionGroupRenderer extends ConditionRenderer {
6292
6277
  coreRender(autoAppear) {
6293
6278
  ui.domel(this.element)
6294
6279
  .addClass(this.getClassesToAdd())
6295
- .addClass(exports.browserUtils.getMobileCssClass())
6280
+ .addClass(getMobileCssClass())
6296
6281
  .addChildElement(this.renderGroupRow())
6297
6282
  .addChildElement(this.renderConditions(autoAppear))
6298
6283
  .data('id', this.condition.id)
@@ -6310,7 +6295,7 @@ class ConditionGroupRenderer extends ConditionRenderer {
6310
6295
  const builder = ui.domel('div');
6311
6296
  builder
6312
6297
  .addClass(`${this.cssPrefix}-conditions`)
6313
- .addClass(`${exports.browserUtils.getMobileCssClass()}`)
6298
+ .addClass(`${getMobileCssClass()}`)
6314
6299
  .data('conditions', '');
6315
6300
  if (this.isRoot) {
6316
6301
  builder.addClass(`${this.cssPrefix}-conditions-root`);
@@ -6352,7 +6337,7 @@ class ConditionGroupRowRenderer extends SimpleConditionRenderer {
6352
6337
  coreRender(autoAppear) {
6353
6338
  const builder = ui.domel(this.element)
6354
6339
  .addClass(this.getClassesToAdd())
6355
- .addClass(exports.browserUtils.getMobileCssClass())
6340
+ .addClass(getMobileCssClass())
6356
6341
  .data('group-row', '')
6357
6342
  .addChildElement(this.renderCheckbox())
6358
6343
  .addChildElement(this.renderConjunction());
@@ -6364,14 +6349,14 @@ class ConditionGroupRowRenderer extends SimpleConditionRenderer {
6364
6349
  builder.on('click', ev => {
6365
6350
  this.panel.toggleConditionPicked(this.condition);
6366
6351
  this.adjustButtonsVisibility();
6367
- if (!exports.browserUtils.isMobileMode()) {
6352
+ if (!ui.browserUtils.isMobileMode()) {
6368
6353
  builder.toDOM().dispatchEvent(ui.createBrowserEvent("mouseenter"));
6369
6354
  }
6370
6355
  });
6371
6356
  }
6372
6357
  builder
6373
6358
  .addChildElement(this.renderButtonsBlock());
6374
- if (!exports.browserUtils.isMobileMode()) {
6359
+ if (!ui.browserUtils.isMobileMode()) {
6375
6360
  builder
6376
6361
  .on('mouseenter', event => {
6377
6362
  this.isMouseOverBlock = true;
@@ -6391,7 +6376,7 @@ class ConditionGroupRowRenderer extends SimpleConditionRenderer {
6391
6376
  }
6392
6377
  getGroupTitle() {
6393
6378
  let result;
6394
- if (this.isRoot && !exports.browserUtils.isMobileMode()) {
6379
+ if (this.isRoot && !ui.browserUtils.isMobileMode()) {
6395
6380
  result = core$1.i18n.getText('RootConditionGroupTitle');
6396
6381
  if (!result) {
6397
6382
  //to support old text key
@@ -6488,7 +6473,7 @@ class BaseElementRenderer {
6488
6473
  ui.domel(this.element)
6489
6474
  .html('')
6490
6475
  .addClass(this.getClassesToAdd())
6491
- .addClass(exports.browserUtils.getMobileCssClass())
6476
+ .addClass(getMobileCssClass())
6492
6477
  .addChildElement(this.labelElement);
6493
6478
  if (this.isEditable()) {
6494
6479
  this.renderEditor();
@@ -6652,7 +6637,7 @@ class InputExpressionRenderer extends ExpressionRenderer {
6652
6637
  }
6653
6638
  showEditor() {
6654
6639
  const MIN_WIDTH = 200;
6655
- if (!exports.browserUtils.isMobileMode()) {
6640
+ if (!ui.browserUtils.isMobileMode()) {
6656
6641
  let left = this.element.offsetLeft;
6657
6642
  let width = this.element.offsetWidth > MIN_WIDTH ? this.element.offsetWidth : MIN_WIDTH;
6658
6643
  let maxWidth = this.element.parentElement.clientWidth - left - 55;
@@ -7040,7 +7025,7 @@ class AttributeExpressionRenderer extends ListExpressionRenderer {
7040
7025
  return `${this.cssPrefix}-condelement ${this.cssPrefix}-attrelement`;
7041
7026
  }
7042
7027
  adjustWidth() {
7043
- if (exports.browserUtils.isMobileMode()) {
7028
+ if (ui.browserUtils.isMobileMode()) {
7044
7029
  return;
7045
7030
  }
7046
7031
  const elWidth = this.element.clientWidth;
@@ -7246,7 +7231,7 @@ class DateTimeExpressionRenderer extends ExpressionRenderer {
7246
7231
  dateTime = model.getTimeMacroValue(value);
7247
7232
  }
7248
7233
  else {
7249
- dateTime = this.convertFromInternalFormat(value);
7234
+ dateTime = this.convertFromInternalFormat(value, new Date());
7250
7235
  }
7251
7236
  this.dtp.setDateTime(dateTime);
7252
7237
  this.dtp.show(this.element);
@@ -7276,8 +7261,13 @@ class DateTimeExpressionRenderer extends ExpressionRenderer {
7276
7261
  return super.isEditable()
7277
7262
  && ((this.panel.options.editableParts & exports.QPEditablePart.Value) === exports.QPEditablePart.Value);
7278
7263
  }
7279
- convertFromInternalFormat(dateTime) {
7280
- return core$1.utils.strToDateTime(dateTime, this.internalDateFormat + ' ' + this.internalTimeFormat);
7264
+ convertFromInternalFormat(dateTimeStr, defautValue) {
7265
+ try {
7266
+ return core$1.utils.strToDateTime(dateTimeStr, this.internalDateFormat + ' ' + this.internalTimeFormat);
7267
+ }
7268
+ catch (_a) {
7269
+ return defautValue || new Date();
7270
+ }
7281
7271
  }
7282
7272
  convertToInternalFormat(dateTime) {
7283
7273
  return core$1.i18n.dateTimeToStr(dateTime, this.internalDateFormat + ' ' + this.internalTimeFormat);
@@ -7791,7 +7781,7 @@ class QueryPanel extends core.Widget {
7791
7781
  if (typeof this.options.editableParts === "undefined") {
7792
7782
  this.options.editableParts = exports.QPEditablePart.All;
7793
7783
  }
7794
- if (exports.browserUtils.isMobileMode()) {
7784
+ if (ui.browserUtils.isMobileMode()) {
7795
7785
  this.options.buttons = this.options.buttons || {};
7796
7786
  this.options.buttons.condition = ["menu"];
7797
7787
  this.options.buttons.group = ["menu"];
@@ -7809,7 +7799,7 @@ class QueryPanel extends core.Widget {
7809
7799
  .toDOM();
7810
7800
  ui.domel(this.slot)
7811
7801
  .removeClass(eqCssMobile)
7812
- .addClass(exports.browserUtils.getMobileCssClass());
7802
+ .addClass(getMobileCssClass());
7813
7803
  const query = this.getQuery();
7814
7804
  const root = query.getRootCondition();
7815
7805
  const renderer = this.getConditionRenderer(root, this.rootContainer);
@@ -8128,7 +8118,7 @@ class QueryPanel extends core.Widget {
8128
8118
  renderProgressBlock() {
8129
8119
  this.progressBlock = document.createElement('div');
8130
8120
  this.progressBlock.classList.add(`${eqCssPrefix}-progress-win8`);
8131
- this.progressBlock.classList.add(exports.browserUtils.getMobileCssClass());
8121
+ this.progressBlock.classList.add(getMobileCssClass());
8132
8122
  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>';
8133
8123
  }
8134
8124
  clonePanel(slot, query) {
@@ -8244,7 +8234,7 @@ class FilterBar extends core.Widget {
8244
8234
  render() {
8245
8235
  ui.domel(this.slot)
8246
8236
  .addClass(`${this.cssPrefix}-container`)
8247
- .addClass(exports.browserUtils.getMobileCssClass())
8237
+ .addClass(getMobileCssClass())
8248
8238
  .addChild('div', builder => this.headerElement = builder
8249
8239
  .addClass(`${this.cssPrefix}-header`)
8250
8240
  .addChild('div', builder => this.headerIconElement = builder
@@ -8290,14 +8280,14 @@ class FilterBar extends core.Widget {
8290
8280
  .toDOM())
8291
8281
  .addChild('div', builder => this.qpBlock = builder
8292
8282
  .addClass(`${this.cssPrefix}-querypanelblock`)
8293
- .addClass(exports.browserUtils.getMobileCssClass())
8283
+ .addClass(getMobileCssClass())
8294
8284
  .hide()
8295
8285
  .addChildElement(this.qpElement)
8296
8286
  .toDOM());
8297
8287
  if (this.options.showApplyButton || this.options.showClearButton) {
8298
8288
  this.buttonsBlock = ui.domel('div', this.qpBlock)
8299
8289
  .addClass(`${this.cssPrefix}-buttonsblock`)
8300
- .addClass(exports.browserUtils.getMobileCssClass())
8290
+ .addClass(getMobileCssClass())
8301
8291
  .toDOM();
8302
8292
  }
8303
8293
  if (this.options.showApplyButton) {
@@ -9082,7 +9072,7 @@ class ResultFacet {
9082
9072
  let b = ui.domel('div')
9083
9073
  .addClass('kfrm-form')
9084
9074
  .addChild('div', b => fieldsContainer = b
9085
- .addClass(`${exports.browserUtils.isIE()
9075
+ .addClass(`${ui.browserUtils.isIE()
9086
9076
  ? 'kfrm-fields-ie col-ie-1-4 label-align-right'
9087
9077
  : 'kfrm-fields col-a-1 label-align-right'}`)
9088
9078
  .toDOM());
@@ -9091,7 +9081,7 @@ class ResultFacet {
9091
9081
  }
9092
9082
  renderFormFields(form, fieldsContainer) {
9093
9083
  let cont = fieldsContainer;
9094
- if (exports.browserUtils.isIE()) {
9084
+ if (ui.browserUtils.isIE()) {
9095
9085
  cont = ui.domel('div', fieldsContainer)
9096
9086
  .addClass('kfrm-field-ie')
9097
9087
  .toDOM();
@@ -9894,7 +9884,7 @@ class ChartFacet extends ResultFacet {
9894
9884
  }
9895
9885
  renderFormFields(form, fieldsContainer) {
9896
9886
  super.renderFormFields(form, fieldsContainer);
9897
- const isIE = exports.browserUtils.isIE();
9887
+ const isIE = ui.browserUtils.isIE();
9898
9888
  const horizClass = isIE ? 'kfrm-fields-ie is-horizontal' : 'kfrm-fields is-horizontal';
9899
9889
  // Chart type
9900
9890
  let chartTypeSelector = document.createElement('select');
@@ -10086,6 +10076,7 @@ class PivotTableFacet extends ResultFacet {
10086
10076
  this.title = core$1.i18n.getText('Facets', 'Pivot', 'FacetTitle');
10087
10077
  this.dialogTitle = core$1.i18n.getText('Facets', 'Pivot', 'DlgTitle');
10088
10078
  this.pivotTable = new core$1.EasyDataTable();
10079
+ this.settings = {};
10089
10080
  }
10090
10081
  init(slot) {
10091
10082
  super.init(slot);
@@ -10218,7 +10209,7 @@ class PivotTableFacet extends ResultFacet {
10218
10209
  core$1.DataType.Int64, core$1.DataType.Word, core$1.DataType.Byte];
10219
10210
  const fieldTypes = [core$1.DataType.String, core$1.DataType.Float, core$1.DataType.Int32,
10220
10211
  core$1.DataType.Int64, core$1.DataType.Word, core$1.DataType.Byte, core$1.DataType.Currency];
10221
- const isIE = exports.browserUtils.isIE();
10212
+ const isIE = ui.browserUtils.isIE();
10222
10213
  let current = fieldsContainer;
10223
10214
  const horizClass = isIE ? 'kfrm-fields-ie is-horizontal' : 'kfrm-fields is-horizontal';
10224
10215
  const getCurrent = () => {
@@ -10366,14 +10357,14 @@ class PivotTableFacet extends ResultFacet {
10366
10357
  saveToData() {
10367
10358
  const data = super.saveToData();
10368
10359
  if (this.settings) {
10369
- core$1.utils.assignDeep(data, this.settings);
10360
+ core$1.utils.assign(data, this.settings);
10370
10361
  }
10371
10362
  return data;
10372
10363
  }
10373
10364
  loadFromData(data) {
10374
10365
  super.loadFromData(data);
10375
10366
  if (data) {
10376
- this.settings = core$1.utils.assignDeep(this.settings, data);
10367
+ this.settings = core$1.utils.assign(this.settings, data);
10377
10368
  if (this.settings.aggrFunc == 'AVERAGE') {
10378
10369
  this.settings.aggrFunc = AggrFunc.Average;
10379
10370
  }
@@ -10962,7 +10953,7 @@ class ResultFacetsPanel extends FacetContainer {
10962
10953
  this._processBlock = ui.domel('div')
10963
10954
  .addClass(`${this.cssPrefix}-spinner`)
10964
10955
  .addChild('div', b => b
10965
- .addClass(`${eqCssPrefix}-progress-win8`, exports.browserUtils.getMobileCssClass())
10956
+ .addClass(`${eqCssPrefix}-progress-win8`, getMobileCssClass())
10966
10957
  .addHtml(html))
10967
10958
  .toDOM();
10968
10959
  }
@@ -11934,7 +11925,7 @@ class AggregationBar extends core.Widget {
11934
11925
  }
11935
11926
  render() {
11936
11927
  this.slot.classList.add(`${this.cssPrefix}-panel`);
11937
- const mobClass = exports.browserUtils.getMobileCssClass();
11928
+ const mobClass = getMobileCssClass();
11938
11929
  if (mobClass) {
11939
11930
  this.slot.classList.add(mobClass);
11940
11931
  }
@@ -12067,7 +12058,7 @@ class QueryNameWidget extends core.Widget {
12067
12058
  }
12068
12059
  render() {
12069
12060
  this.slot.classList.add(`${this.cssPrefix}`);
12070
- const mobClass = exports.browserUtils.getMobileCssClass();
12061
+ const mobClass = getMobileCssClass();
12071
12062
  if (mobClass) {
12072
12063
  this.slot.classList.add(mobClass);
12073
12064
  }
@@ -12175,7 +12166,7 @@ class View {
12175
12166
  }
12176
12167
  initOptions(options) {
12177
12168
  options = core$1.utils.assignDeep(this.defaultViewOptions, options);
12178
- // support old format
12169
+ // support old format
12179
12170
  if (!options.widgets.easyGrid) {
12180
12171
  options.widgets.easyGrid = options.widgets.resultGrid || {};
12181
12172
  }
@@ -12405,7 +12396,7 @@ class View {
12405
12396
  this._spinnerDiv = ui.domel('div')
12406
12397
  .addClass(`eqjs-result-spinner`)
12407
12398
  .addChild('div', b => b
12408
- .addClass(`${eqCssPrefix}-progress-win8`, exports.browserUtils.getMobileCssClass())
12399
+ .addClass(`${eqCssPrefix}-progress-win8`, getMobileCssClass())
12409
12400
  .addHtml(html))
12410
12401
  .toDOM();
12411
12402
  }
@@ -12629,6 +12620,9 @@ class View {
12629
12620
  this.domRoots = [document];
12630
12621
  this.resetContext();
12631
12622
  }
12623
+ refreshWidgets(groups) {
12624
+ this.context.refreshWidgets(groups);
12625
+ }
12632
12626
  }
12633
12627
 
12634
12628
  /**
@@ -12906,8 +12900,12 @@ class AdvancedSearchView extends View {
12906
12900
  });
12907
12901
  }
12908
12902
  clearQueryButtonClick() {
12909
- this.context.clearQuery();
12910
- this.context.refreshWidgets(core.WidgetGroup.Statement);
12903
+ this.showQueryClearDialog((result) => {
12904
+ if (result) {
12905
+ this.context.clearQuery();
12906
+ this.context.refreshWidgets(core.WidgetGroup.Statement);
12907
+ }
12908
+ });
12911
12909
  }
12912
12910
  createNewQuery(options) {
12913
12911
  return this.context.newQuery(options);
@@ -12937,22 +12935,43 @@ class AdvancedSearchView extends View {
12937
12935
  saveCurrentQuery(copyQuery = false, callback) {
12938
12936
  const query = this.context.getQuery();
12939
12937
  if (query.isNewbie || copyQuery) {
12940
- this.showSaveQueryDialog((result) => new Promise(resolve => {
12941
- if (!result)
12938
+ this.showSaveQueryDialog((newQueryName) => new Promise(resolve => {
12939
+ if (!newQueryName)
12942
12940
  return;
12943
- query.regenerateId();
12944
- query.setName(result);
12945
- query.fireChangedEvent({
12946
- part: core.QueryChangePart.Properties,
12947
- wasModified: true
12948
- });
12949
- this.saveQuery(() => { resolve({ success: true }); }, (error) => resolve({ success: false, message: error }));
12941
+ this.checkSaveQueryName(newQueryName)
12942
+ .then(() => {
12943
+ query.regenerateId();
12944
+ query.setName(newQueryName);
12945
+ query.fireChangedEvent({
12946
+ part: core.QueryChangePart.Properties,
12947
+ wasModified: true
12948
+ });
12949
+ this.saveQuery(() => { resolve({ success: true }); }, (error) => resolve({ success: false, message: error }));
12950
+ }, (message) => resolve({ success: false, message }));
12950
12951
  }));
12951
12952
  }
12952
12953
  else {
12953
12954
  this.saveQuery(callback);
12954
12955
  }
12955
12956
  }
12957
+ checkSaveQueryName(name) {
12958
+ return new Promise((resolve, reject) => {
12959
+ this.context.loadQueryList({
12960
+ success: (queryList) => {
12961
+ const found = queryList.filter(item => item.name.toLowerCase() == name.toLowerCase());
12962
+ if (found.length == 0) {
12963
+ resolve();
12964
+ }
12965
+ else {
12966
+ reject("Can't save the query. A query with this name already exists.");
12967
+ }
12968
+ },
12969
+ error: (message) => {
12970
+ reject(message);
12971
+ }
12972
+ });
12973
+ });
12974
+ }
12956
12975
  checkIfQueryModified(callback) {
12957
12976
  if (this.context.getQuery().isModified()
12958
12977
  && !this.viewOptions.disableConfirmationOnQueryChange) {
@@ -13031,6 +13050,10 @@ class AdvancedSearchView extends View {
13031
13050
  }
13032
13051
  });
13033
13052
  }
13053
+ showQueryClearDialog(callback) {
13054
+ const ds = this.getDialogService();
13055
+ ds.openConfirm(core$1.i18n.getText('QueryChangedTitle'), core$1.i18n.getText('QueryClearContent'), callback);
13056
+ }
13034
13057
  showQueryChangedDialog(callback) {
13035
13058
  const ds = this.getDialogService();
13036
13059
  ds.openConfirm(core$1.i18n.getText('QueryChangedTitle'), core$1.i18n.getText('QueryChangedContent'), callback);
@@ -13124,7 +13147,7 @@ class AdvancedSearchView extends View {
13124
13147
  });
13125
13148
  }
13126
13149
  renderSaveToFileDialogBody(name, format = "json") {
13127
- const isIE = exports.browserUtils.isIE();
13150
+ const isIE = ui.browserUtils.isIE();
13128
13151
  const fieldsClass = isIE
13129
13152
  ? 'kfrm-fields-ie col-ie-1-4 label-align-right'
13130
13153
  : 'kfrm-fields col-a-1 label-align-right';
@@ -13419,7 +13442,7 @@ class ReportView extends View {
13419
13442
  this.saveReportButtonClickHandler = this.saveReportButtonClick.bind(this);
13420
13443
  this.removeReportButtonClickHandler = this.removeReportButtonClick.bind(this);
13421
13444
  this.reloadReportDataButtonClickHandler = this.reloadReportDataButtonClick.bind(this);
13422
- exports.browserUtils.onMobileModeChanged(_ => {
13445
+ ui.browserUtils.onMobileModeChanged(_ => {
13423
13446
  document.location.reload();
13424
13447
  });
13425
13448
  }
@@ -14237,6 +14260,7 @@ function addEasyQueryUITexts() {
14237
14260
  SaveQueryDefName: '{queryName} copy',
14238
14261
  QueryChangedTitle: 'Confirmation',
14239
14262
  QueryChangedContent: 'The query was changed. Do you want to save it first?',
14263
+ QueryClearContent: 'The query will cleared. Do you want to continue?',
14240
14264
  UpdateQuerySelector: '[click here to load the query]',
14241
14265
  FileNameLabel: 'File name: ',
14242
14266
  SaveQueryToFileDlgTitle: 'Save query to file',