@easyquery/ui 7.2.5-rc03 → 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 +211 -186
  11. package/dist/easyquery.ui.esm.js +175 -150
  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 +6 -7
  19. package/dist/assets/css/eq-icons-default.css +0 -140
  20. package/dist/assets/css/eq-icons-files.css +0 -138
  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
@@ -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,13 +128,13 @@ 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({
190
- addUIC: this.options.showAttributes.useInConditions,
135
+ addUIC: this.options.showAttributes.useInConditions && !this.options.syncWithColumns,
191
136
  addUIR: this.options.showAttributes.useInResult,
192
- addUIS: this.options.showAttributes.useInSorting,
137
+ addUIS: this.options.showAttributes.useInSorting && !this.options.syncWithColumns,
193
138
  attrPlacement: this.options.attrPlacement,
194
139
  sortEntities: this.options.sortEntities,
195
140
  includeRootData: true
@@ -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
@@ -288,7 +233,7 @@ class EntitiesPanel extends Widget {
288
233
  const attr = model.getAttributeById(attrId);
289
234
  const column = query.addColumn({
290
235
  attribute: attr
291
- });
236
+ }, true);
292
237
  query.fireColumnsChangedEvent(QueryChangeAction.Add, column);
293
238
  }
294
239
  else {
@@ -320,7 +265,7 @@ class EntitiesPanel extends Widget {
320
265
  attrNode.innerHTML = "";
321
266
  attrNode.appendChild(attrLabel);
322
267
  attrNode.setAttribute('data-id', item.id);
323
- if (this.options.draggableAttributes) {
268
+ if (this.options.draggableAttributes && !this.options.syncWithColumns) {
324
269
  eqDragManager.registerDraggableItem({
325
270
  element: attrNode,
326
271
  scope: "entityAttr",
@@ -391,7 +336,7 @@ class EntitiesPanel extends Widget {
391
336
  }
392
337
  if (element.checked) {
393
338
  for (const attrId of attrList) {
394
- query.addColumn({ attributeId: attrId });
339
+ query.addColumn({ attributeId: attrId }, true);
395
340
  }
396
341
  }
397
342
  else {
@@ -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,7 +1985,7 @@ 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
@@ -2057,7 +2002,7 @@ class ColumnRendererCP {
2057
2002
  .addChild('div', builder => {
2058
2003
  builder
2059
2004
  .addClass(`${eqCssPrefix}-column-buttonsBlock`, `${this.cssPrefix}-buttonsBlock`)
2060
- .addClass(browserUtils.getMobileCssClass());
2005
+ .addClass(getMobileCssClass());
2061
2006
  //start enable button
2062
2007
  if (this.getButtonsToShow().indexOf("enable") >= 0 && !this.column.isReadOnly()) {
2063
2008
  builder.addChildElement(this.renderEnabledButton());
@@ -2084,7 +2029,7 @@ class ColumnRendererCP {
2084
2029
  }
2085
2030
  //end menu button
2086
2031
  });
2087
- //end buttons
2032
+ //end buttons
2088
2033
  if (!browserUtils.isMobileMode()) {
2089
2034
  //start event listeners
2090
2035
  builder
@@ -2099,6 +2044,9 @@ class ColumnRendererCP {
2099
2044
  if (this.panel.options.alwaysShowButtons) {
2100
2045
  this.showButtons();
2101
2046
  }
2047
+ if (this.panel.options.showCheckboxes === false) {
2048
+ builder.addClass("eqjs-no-checkbox");
2049
+ }
2102
2050
  return this.element;
2103
2051
  }
2104
2052
  onMouseClick(ev) {
@@ -2119,7 +2067,7 @@ class ColumnRendererCP {
2119
2067
  renderCaptionBlock() {
2120
2068
  const builder = domel('div')
2121
2069
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-captionelement`)
2122
- .addClass(browserUtils.getMobileCssClass());
2070
+ .addClass(getMobileCssClass());
2123
2071
  if (this.isEditable()) {
2124
2072
  builder
2125
2073
  .addChild('a', builder => builder
@@ -2309,7 +2257,7 @@ class ColumnRendererCP {
2309
2257
  .addClass(`${eqCssPrefix}-button`, `${eqCssPrefix}-column-button`, `${eqCssPrefix}-column-button-menu`)
2310
2258
  .title(i18n$1.getText('ButtonMenu'))
2311
2259
  .attr('tabIndex', '0')
2312
- .on('click', evt => this.buttonMenuHandler(ColumnAction.Menu, evt)) //touchstart
2260
+ .on('click', evt => this.buttonMenuHandler(ColumnAction.Menu, evt)) //touchstart
2313
2261
  .on('keypress', evt => { if (evt.keyCode == 13) {
2314
2262
  evt.target.click();
2315
2263
  } }))
@@ -2739,10 +2687,10 @@ class AttrColumnRendererCP extends ColumnRendererCP {
2739
2687
  renderExpressionBlock() {
2740
2688
  return domel("div")
2741
2689
  .addClass(`${this.cssPrefix}-expr-block`)
2742
- .addClass(browserUtils.getMobileCssClass())
2690
+ .addClass(getMobileCssClass())
2743
2691
  .addChild('div', builder => builder
2744
2692
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-attrelement`)
2745
- .addClass(browserUtils.getMobileCssClass())
2693
+ .addClass(getMobileCssClass())
2746
2694
  .addChildElement(this.renderBaseExpression()))
2747
2695
  .toDOM();
2748
2696
  }
@@ -2912,7 +2860,7 @@ class AggrFuncColumnRendererCP extends AttrColumnRendererCP {
2912
2860
  const model = this.panel.getContext().getModel();
2913
2861
  const exprBlockBuilder = domel("div")
2914
2862
  .addClass(`${this.cssPrefix}-expr-block`, `${this.cssPrefix}-expr-block-aggr`)
2915
- .addClass(browserUtils.getMobileCssClass());
2863
+ .addClass(getMobileCssClass());
2916
2864
  const format = model.getAggrFunctionFormat(this.column.expr.func);
2917
2865
  if (!format || format === '')
2918
2866
  return;
@@ -2948,14 +2896,14 @@ class AggrFuncColumnRendererCP extends AttrColumnRendererCP {
2948
2896
  exprBlockBuilder
2949
2897
  .addChild('div', builder => builder
2950
2898
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-aggrfuncelement`)
2951
- .addClass(browserUtils.getMobileCssClass())
2899
+ .addClass(getMobileCssClass())
2952
2900
  .addChildElement(functionLink.toDOM()));
2953
2901
  }
2954
2902
  else {
2955
2903
  exprBlockBuilder
2956
2904
  .addChild('div', b => b
2957
2905
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-aggrfuncelement`)
2958
- .addClass(browserUtils.getMobileCssClass())
2906
+ .addClass(getMobileCssClass())
2959
2907
  .addChild('span', b => b
2960
2908
  .text(item.text)
2961
2909
  .title(item.text)));
@@ -2965,14 +2913,14 @@ class AggrFuncColumnRendererCP extends AttrColumnRendererCP {
2965
2913
  exprBlockBuilder
2966
2914
  .addChild('div', builder => builder
2967
2915
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-attrelement`)
2968
- .addClass(browserUtils.getMobileCssClass())
2916
+ .addClass(getMobileCssClass())
2969
2917
  .addChildElement(this.renderBaseExpression()));
2970
2918
  }
2971
2919
  else if (item.type === 3) {
2972
2920
  exprBlockBuilder
2973
2921
  .addChild('span', builder => builder
2974
2922
  .addClass(`${this.cssPrefix}-colelement`)
2975
- .addClass(browserUtils.getMobileCssClass())
2923
+ .addClass(getMobileCssClass())
2976
2924
  .text(item.text)
2977
2925
  .title(item.text));
2978
2926
  }
@@ -3054,12 +3002,12 @@ class EditableColumnRendererCP extends AttrColumnRendererCP {
3054
3002
  renderExpressionBlock() {
3055
3003
  const exprBlock = domel("div")
3056
3004
  .addClass(`${this.cssPrefix}-expr-block`)
3057
- .addClass(browserUtils.getMobileCssClass())
3005
+ .addClass(getMobileCssClass())
3058
3006
  .toDOM();
3059
3007
  //Attribute element
3060
3008
  let builder = domel('div', exprBlock)
3061
3009
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-attrelement`)
3062
- .addClass(browserUtils.getMobileCssClass());
3010
+ .addClass(getMobileCssClass());
3063
3011
  if (this.isEditable()) {
3064
3012
  builder
3065
3013
  .addChild('a', b => b
@@ -3135,7 +3083,7 @@ class EditableColumnRendererCP extends AttrColumnRendererCP {
3135
3083
  // DataType element
3136
3084
  builder = domel('div', exprBlock)
3137
3085
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-attrelement`)
3138
- .addClass(browserUtils.getMobileCssClass());
3086
+ .addClass(getMobileCssClass());
3139
3087
  if (this.isEditable()) {
3140
3088
  this.createDataTypeMenu();
3141
3089
  builder
@@ -3385,8 +3333,18 @@ class ColumnsPanel extends Widget {
3385
3333
  const headerBuilder = domel('div', this.slot)
3386
3334
  .hide()
3387
3335
  .addClass(`${this.cssPrefix}-header`)
3388
- .addClass(browserUtils.getMobileCssClass())
3389
- .addChild('div', builder => builder
3336
+ .addClass(getMobileCssClass());
3337
+ if (!this.options.alwaysShowButtons) {
3338
+ headerBuilder.addClass("eqjs-no-buttons");
3339
+ }
3340
+ if (this.options.showCheckboxes) {
3341
+ headerBuilder.addChild('div', builder => builder
3342
+ .setStyle('margin-left', '30px')); //quick fix to adjust title column header when showCheckboxes is on
3343
+ }
3344
+ else {
3345
+ headerBuilder.addClass("eqjs-no-checkbox");
3346
+ }
3347
+ headerBuilder.addChild('div', builder => builder
3390
3348
  .addClass(`${this.cssPrefix}-header-expression`)
3391
3349
  .text(i18n.getText('HeaderExpression')));
3392
3350
  if (this.options.showColumnTitles !== false) {
@@ -3401,13 +3359,13 @@ class ColumnsPanel extends Widget {
3401
3359
  this.columnsBlock =
3402
3360
  domel('div', this.slot)
3403
3361
  .addClass(`${this.cssPrefix}-columns`)
3404
- .addClass(browserUtils.getMobileCssClass())
3362
+ .addClass(getMobileCssClass())
3405
3363
  .toDOM();
3406
3364
  if (this.options.showAddRow) {
3407
3365
  this.addRowElement =
3408
3366
  domel('div', this.slot)
3409
3367
  .addClass(`${eqCssPrefix}-addrow`, `${this.cssPrefix}-addrow`, `${eqCssPrefix}-addrow-empty`)
3410
- .addClass(browserUtils.getMobileCssClass())
3368
+ .addClass(getMobileCssClass())
3411
3369
  .addChild('a', builder => builder
3412
3370
  .attr('href', 'javascript:void(0)')
3413
3371
  .text(i18n.getText('CmdClickToAddColumn'))
@@ -3629,7 +3587,7 @@ class ColumnsPanel extends Widget {
3629
3587
  this.agjustHeaderVisibility();
3630
3588
  domel(this.slot)
3631
3589
  .removeClass(eqCssMobile)
3632
- .addClass(browserUtils.getMobileCssClass());
3590
+ .addClass(getMobileCssClass());
3633
3591
  const query = this.context.getQuery();
3634
3592
  const columns = query.getColumns();
3635
3593
  for (let column of columns) {
@@ -3947,7 +3905,7 @@ class ColumnsPanel extends Widget {
3947
3905
  renderProgressBlock() {
3948
3906
  this.progressBlock = document.createElement('div');
3949
3907
  this.progressBlock.classList.add(`${eqCssPrefix}-progress-win8`);
3950
- this.progressBlock.classList.add(browserUtils.getMobileCssClass());
3908
+ this.progressBlock.classList.add(getMobileCssClass());
3951
3909
  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
3910
  }
3953
3911
  }
@@ -3997,7 +3955,7 @@ class ColumnRendererCB {
3997
3955
  }
3998
3956
  builder
3999
3957
  .addClass(this.getClassesToAdd())
4000
- .addClass(browserUtils.getMobileCssClass())
3958
+ .addClass(getMobileCssClass())
4001
3959
  .addChildElement(this.renderCaptionBlock())
4002
3960
  .addChildElement(this.renderSortingImage());
4003
3961
  if (!browserUtils.isMobileMode()) {
@@ -4038,7 +3996,7 @@ class ColumnRendererCB {
4038
3996
  if (!this.isEditable()) {
4039
3997
  return domel('div')
4040
3998
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-captionelement`)
4041
- .addClass(browserUtils.getMobileCssClass())
3999
+ .addClass(getMobileCssClass())
4042
4000
  .addChild('div', b => b
4043
4001
  .title(caption)
4044
4002
  .text(caption)
@@ -4072,7 +4030,7 @@ class ColumnRendererCB {
4072
4030
  }); //TO DO:add localization and input field);
4073
4031
  return domel('div')
4074
4032
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-captionelement`)
4075
- .addClass(browserUtils.getMobileCssClass())
4033
+ .addClass(getMobileCssClass())
4076
4034
  .addChild('a', builder => builder
4077
4035
  .attr('href', 'javascript:void(0)')
4078
4036
  .title(this.column.caption)
@@ -4148,7 +4106,7 @@ class ColumnRendererCB {
4148
4106
  else {
4149
4107
  return domel('div')
4150
4108
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-sortimage-placeholder`)
4151
- .addClass(browserUtils.getMobileCssClass())
4109
+ .addClass(getMobileCssClass())
4152
4110
  .addChild('div', builder => builder
4153
4111
  .addClass(`${this.cssPrefix}-img-sorting`, sortButtonDirectionCssClass)
4154
4112
  .title(i18n.getText('ButtonSorting')))
@@ -4640,6 +4598,7 @@ class ColumnsBar extends Widget {
4640
4598
  sortEntities: false,
4641
4599
  columnRenderedCallback: null,
4642
4600
  customExpressionText: 0,
4601
+ showAddAllForEntity: false
4643
4602
  };
4644
4603
  this.landingSlot = domel('div')
4645
4604
  .addClass(`${eqCssPrefix}-highlight`)
@@ -4659,7 +4618,7 @@ class ColumnsBar extends Widget {
4659
4618
  ];
4660
4619
  domel(this.slot)
4661
4620
  .addClass(`${this.cssPrefix}-panel`)
4662
- .addClass(browserUtils.getMobileCssClass());
4621
+ .addClass(getMobileCssClass());
4663
4622
  this.group = WidgetGroup.Query;
4664
4623
  this.customQuery = customQuery;
4665
4624
  }
@@ -4878,7 +4837,7 @@ class ColumnsBar extends Widget {
4878
4837
  renderAddRowButton() {
4879
4838
  domel(this.addRowButton)
4880
4839
  .addClass(`${eqCssPrefix}-addrow`, `${this.cssPrefix}-addrow`, `${eqCssPrefix}-addrow-empty`)
4881
- .addClass(browserUtils.getMobileCssClass())
4840
+ .addClass(getMobileCssClass())
4882
4841
  .title(i18n.getText('CmdClickToAddColumn'))
4883
4842
  .addChild('a', builder => builder
4884
4843
  .attr('href', 'javascript:void(0)')
@@ -4888,8 +4847,13 @@ class ColumnsBar extends Widget {
4888
4847
  anchor: e.target,
4889
4848
  selectedIds: null,
4890
4849
  itemSelectedCallback: (data, items) => {
4891
- const attrid = data.id;
4892
- this.addNewColumn(attrid);
4850
+ if (data.id === '__AddAll__' && data.extra && Array.isArray(data.extra.ids)) {
4851
+ data.extra.ids.forEach(attrId => this.addNewColumn(attrId));
4852
+ }
4853
+ else {
4854
+ const attrid = data.id;
4855
+ this.addNewColumn(attrid);
4856
+ }
4893
4857
  return false;
4894
4858
  }
4895
4859
  });
@@ -4908,7 +4872,7 @@ class ColumnsBar extends Widget {
4908
4872
  this.columnsBlock =
4909
4873
  domel('div')
4910
4874
  .addClass(`${this.cssPrefix}-columns`)
4911
- .addClass(browserUtils.getMobileCssClass())
4875
+ .addClass(getMobileCssClass())
4912
4876
  .toDOM();
4913
4877
  if (this.options.showAddRow) {
4914
4878
  this.addRowButton =
@@ -4938,7 +4902,7 @@ class ColumnsBar extends Widget {
4938
4902
  this.columnButtonsBlockMobileArrow = domel('i').toDOM();
4939
4903
  this.columnButtonsBlockMobile = domel('div')
4940
4904
  .addClass(`${this.cssPrefix}-column-buttonsBlock`)
4941
- .addClass(browserUtils.getMobileCssClass())
4905
+ .addClass(getMobileCssClass())
4942
4906
  .addChildElement(this.columnButtonsBlockMobileArrow)
4943
4907
  .hide()
4944
4908
  .toDOM();
@@ -5158,6 +5122,23 @@ class ColumnsBar extends Widget {
5158
5122
  showEntitiesMenu(menuOptions) {
5159
5123
  this.entitiesMenu && this.entitiesMenu.showMenu(menuOptions);
5160
5124
  }
5125
+ addAllColumnsToEntitiesList(list) {
5126
+ const attrIds = list.filter(item => !item.isEntity).map(item => item.id);
5127
+ if (attrIds.length > 0) {
5128
+ list.unshift({
5129
+ id: '__AddAll__',
5130
+ text: i18n.getText('AddAllForEntityText'),
5131
+ extra: {
5132
+ ids: attrIds
5133
+ }
5134
+ });
5135
+ }
5136
+ list.forEach(item => {
5137
+ if (item.items) {
5138
+ this.addAllColumnsToEntitiesList(item.items);
5139
+ }
5140
+ });
5141
+ }
5161
5142
  createEntitiesMenu() {
5162
5143
  const model = this.getContext().getModel();
5163
5144
  if (!model || model.isEmpty())
@@ -5167,6 +5148,10 @@ class ColumnsBar extends Widget {
5167
5148
  menuId += '-EntitiesMenu';
5168
5149
  }
5169
5150
  const entitiesList = model.getEntitiesTree({ addUIC: false, addUIR: true, addUIS: false, attrPlacement: this.options.attrPlacement, sortEntities: this.options.sortEntities });
5151
+ // add [Add all columns] items
5152
+ if (this.options.showAddAllForEntity) {
5153
+ this.addAllColumnsToEntitiesList(entitiesList);
5154
+ }
5170
5155
  const options = { items: entitiesList, adjustHeight: this.options.adjustEntitiesMenuHeight, id: menuId, domWriteItemsId: this.options.domWriteItemsId };
5171
5156
  utils.assign(options, this.options.menuOptions);
5172
5157
  this.entitiesMenu = new PopupMenu(options);
@@ -5295,7 +5280,7 @@ class ColumnRendererSB {
5295
5280
  }
5296
5281
  builder
5297
5282
  .addClass(this.getClassesToAdd())
5298
- .addClass(browserUtils.getMobileCssClass())
5283
+ .addClass(getMobileCssClass())
5299
5284
  .addChildElement(this.renderCaptionBlock());
5300
5285
  if (this.isEditable()) {
5301
5286
  builder
@@ -5333,7 +5318,7 @@ class ColumnRendererSB {
5333
5318
  }
5334
5319
  return domel('div')
5335
5320
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-captionelement`)
5336
- .addClass(browserUtils.getMobileCssClass())
5321
+ .addClass(getMobileCssClass())
5337
5322
  .addChild('div', b => b
5338
5323
  .title(this.column.caption)
5339
5324
  .text(text))
@@ -5355,7 +5340,7 @@ class ColumnRendererSB {
5355
5340
  }
5356
5341
  const builder = domel('div')
5357
5342
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-sortimage-placeholder`)
5358
- .addClass(browserUtils.getMobileCssClass())
5343
+ .addClass(getMobileCssClass())
5359
5344
  .addChild('div', builder => builder
5360
5345
  .addClass(`${this.cssPrefix}-img-sorting`, sortButtonDirectionCssClass)
5361
5346
  .title(i18n.getText('ButtonSorting')))
@@ -5446,7 +5431,7 @@ class SortingBar extends Widget {
5446
5431
  this.landingIndex = -1;
5447
5432
  domel(this.slot)
5448
5433
  .addClass(`${this.cssPrefix}-panel`)
5449
- .addClass(browserUtils.getMobileCssClass());
5434
+ .addClass(getMobileCssClass());
5450
5435
  this.group = WidgetGroup.Query;
5451
5436
  }
5452
5437
  getWidgetType() {
@@ -5529,7 +5514,7 @@ class SortingBar extends Widget {
5529
5514
  renderAddRowButton() {
5530
5515
  domel(this.addRowButton)
5531
5516
  .addClass(`${eqCssPrefix}-addrow`, `${this.cssPrefix}-addrow`, `${eqCssPrefix}-addrow-empty`)
5532
- .addClass(browserUtils.getMobileCssClass())
5517
+ .addClass(getMobileCssClass())
5533
5518
  .title(i18n.getText('CmdClickToAddColumn'))
5534
5519
  .addChild('a', builder => builder
5535
5520
  .attr('href', 'javascript:void(0)')
@@ -5585,7 +5570,7 @@ class SortingBar extends Widget {
5585
5570
  this.columnsBlock =
5586
5571
  domel('div')
5587
5572
  .addClass(`${this.cssPrefix}-columns`)
5588
- .addClass(browserUtils.getMobileCssClass())
5573
+ .addClass(getMobileCssClass())
5589
5574
  .toDOM();
5590
5575
  if (this.options.showAddRow) {
5591
5576
  this.addRowButton =
@@ -5617,7 +5602,7 @@ class SortingBar extends Widget {
5617
5602
  attributeId: attrId,
5618
5603
  justsorted: true,
5619
5604
  sorting: SortDirection.Ascending
5620
- });
5605
+ }, true);
5621
5606
  query.fireChangedEvent({
5622
5607
  part: QueryChangePart.SortingColumns,
5623
5608
  action: QueryChangeAction.Add,
@@ -5766,7 +5751,7 @@ class TextRenderer {
5766
5751
  domel(this.element)
5767
5752
  .html('')
5768
5753
  .addClass(this.getClassesToAdd())
5769
- .addClass(browserUtils.getMobileCssClass())
5754
+ .addClass(getMobileCssClass())
5770
5755
  .addChild('span', builder => builder
5771
5756
  .text(this.text)
5772
5757
  .title(this.text))
@@ -5852,7 +5837,7 @@ class SimpleConditionRenderer extends ConditionRenderer {
5852
5837
  this.element = builder.toDOM();
5853
5838
  builder
5854
5839
  .addClass(this.getClassesToAdd())
5855
- .addClass(browserUtils.getMobileCssClass())
5840
+ .addClass(getMobileCssClass())
5856
5841
  .data('id', this.condition.id)
5857
5842
  .data('condrow', '')
5858
5843
  .addChildElement(this.renderCheckbox())
@@ -6126,7 +6111,7 @@ class SimpleConditionRenderer extends ConditionRenderer {
6126
6111
  };
6127
6112
  const builder = domel("div")
6128
6113
  .addClass(`${this.cssPrefix}-condition-buttonsBlock`)
6129
- .addClass(browserUtils.getMobileCssClass());
6114
+ .addClass(getMobileCssClass());
6130
6115
  this.buttonsBlock = builder.toDOM();
6131
6116
  if (this.condition.isReadOnly()) {
6132
6117
  return this.buttonsBlock;
@@ -6290,7 +6275,7 @@ class ConditionGroupRenderer extends ConditionRenderer {
6290
6275
  coreRender(autoAppear) {
6291
6276
  domel(this.element)
6292
6277
  .addClass(this.getClassesToAdd())
6293
- .addClass(browserUtils.getMobileCssClass())
6278
+ .addClass(getMobileCssClass())
6294
6279
  .addChildElement(this.renderGroupRow())
6295
6280
  .addChildElement(this.renderConditions(autoAppear))
6296
6281
  .data('id', this.condition.id)
@@ -6308,7 +6293,7 @@ class ConditionGroupRenderer extends ConditionRenderer {
6308
6293
  const builder = domel('div');
6309
6294
  builder
6310
6295
  .addClass(`${this.cssPrefix}-conditions`)
6311
- .addClass(`${browserUtils.getMobileCssClass()}`)
6296
+ .addClass(`${getMobileCssClass()}`)
6312
6297
  .data('conditions', '');
6313
6298
  if (this.isRoot) {
6314
6299
  builder.addClass(`${this.cssPrefix}-conditions-root`);
@@ -6350,7 +6335,7 @@ class ConditionGroupRowRenderer extends SimpleConditionRenderer {
6350
6335
  coreRender(autoAppear) {
6351
6336
  const builder = domel(this.element)
6352
6337
  .addClass(this.getClassesToAdd())
6353
- .addClass(browserUtils.getMobileCssClass())
6338
+ .addClass(getMobileCssClass())
6354
6339
  .data('group-row', '')
6355
6340
  .addChildElement(this.renderCheckbox())
6356
6341
  .addChildElement(this.renderConjunction());
@@ -6486,7 +6471,7 @@ class BaseElementRenderer {
6486
6471
  domel(this.element)
6487
6472
  .html('')
6488
6473
  .addClass(this.getClassesToAdd())
6489
- .addClass(browserUtils.getMobileCssClass())
6474
+ .addClass(getMobileCssClass())
6490
6475
  .addChildElement(this.labelElement);
6491
6476
  if (this.isEditable()) {
6492
6477
  this.renderEditor();
@@ -7244,7 +7229,7 @@ class DateTimeExpressionRenderer extends ExpressionRenderer {
7244
7229
  dateTime = model.getTimeMacroValue(value);
7245
7230
  }
7246
7231
  else {
7247
- dateTime = this.convertFromInternalFormat(value);
7232
+ dateTime = this.convertFromInternalFormat(value, new Date());
7248
7233
  }
7249
7234
  this.dtp.setDateTime(dateTime);
7250
7235
  this.dtp.show(this.element);
@@ -7274,8 +7259,13 @@ class DateTimeExpressionRenderer extends ExpressionRenderer {
7274
7259
  return super.isEditable()
7275
7260
  && ((this.panel.options.editableParts & QPEditablePart.Value) === QPEditablePart.Value);
7276
7261
  }
7277
- convertFromInternalFormat(dateTime) {
7278
- return utils.strToDateTime(dateTime, this.internalDateFormat + ' ' + this.internalTimeFormat);
7262
+ convertFromInternalFormat(dateTimeStr, defautValue) {
7263
+ try {
7264
+ return utils.strToDateTime(dateTimeStr, this.internalDateFormat + ' ' + this.internalTimeFormat);
7265
+ }
7266
+ catch (_a) {
7267
+ return defautValue || new Date();
7268
+ }
7279
7269
  }
7280
7270
  convertToInternalFormat(dateTime) {
7281
7271
  return i18n.dateTimeToStr(dateTime, this.internalDateFormat + ' ' + this.internalTimeFormat);
@@ -7807,7 +7797,7 @@ class QueryPanel extends Widget {
7807
7797
  .toDOM();
7808
7798
  domel(this.slot)
7809
7799
  .removeClass(eqCssMobile)
7810
- .addClass(browserUtils.getMobileCssClass());
7800
+ .addClass(getMobileCssClass());
7811
7801
  const query = this.getQuery();
7812
7802
  const root = query.getRootCondition();
7813
7803
  const renderer = this.getConditionRenderer(root, this.rootContainer);
@@ -8126,7 +8116,7 @@ class QueryPanel extends Widget {
8126
8116
  renderProgressBlock() {
8127
8117
  this.progressBlock = document.createElement('div');
8128
8118
  this.progressBlock.classList.add(`${eqCssPrefix}-progress-win8`);
8129
- this.progressBlock.classList.add(browserUtils.getMobileCssClass());
8119
+ this.progressBlock.classList.add(getMobileCssClass());
8130
8120
  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
8121
  }
8132
8122
  clonePanel(slot, query) {
@@ -8242,7 +8232,7 @@ class FilterBar extends Widget {
8242
8232
  render() {
8243
8233
  domel(this.slot)
8244
8234
  .addClass(`${this.cssPrefix}-container`)
8245
- .addClass(browserUtils.getMobileCssClass())
8235
+ .addClass(getMobileCssClass())
8246
8236
  .addChild('div', builder => this.headerElement = builder
8247
8237
  .addClass(`${this.cssPrefix}-header`)
8248
8238
  .addChild('div', builder => this.headerIconElement = builder
@@ -8288,14 +8278,14 @@ class FilterBar extends Widget {
8288
8278
  .toDOM())
8289
8279
  .addChild('div', builder => this.qpBlock = builder
8290
8280
  .addClass(`${this.cssPrefix}-querypanelblock`)
8291
- .addClass(browserUtils.getMobileCssClass())
8281
+ .addClass(getMobileCssClass())
8292
8282
  .hide()
8293
8283
  .addChildElement(this.qpElement)
8294
8284
  .toDOM());
8295
8285
  if (this.options.showApplyButton || this.options.showClearButton) {
8296
8286
  this.buttonsBlock = domel('div', this.qpBlock)
8297
8287
  .addClass(`${this.cssPrefix}-buttonsblock`)
8298
- .addClass(browserUtils.getMobileCssClass())
8288
+ .addClass(getMobileCssClass())
8299
8289
  .toDOM();
8300
8290
  }
8301
8291
  if (this.options.showApplyButton) {
@@ -8756,7 +8746,7 @@ class EasyGridWidget extends Grid {
8756
8746
  const query = this.getContext().getQuery();
8757
8747
  const col = query.addColumn({
8758
8748
  attributeId: attrId
8759
- });
8749
+ }, true);
8760
8750
  query.fireChangedEvent({
8761
8751
  part: QueryChangePart.Columns,
8762
8752
  action: QueryChangeAction.Add,
@@ -10084,6 +10074,7 @@ class PivotTableFacet extends ResultFacet {
10084
10074
  this.title = i18n.getText('Facets', 'Pivot', 'FacetTitle');
10085
10075
  this.dialogTitle = i18n.getText('Facets', 'Pivot', 'DlgTitle');
10086
10076
  this.pivotTable = new EasyDataTable();
10077
+ this.settings = {};
10087
10078
  }
10088
10079
  init(slot) {
10089
10080
  super.init(slot);
@@ -10364,14 +10355,14 @@ class PivotTableFacet extends ResultFacet {
10364
10355
  saveToData() {
10365
10356
  const data = super.saveToData();
10366
10357
  if (this.settings) {
10367
- utils.assignDeep(data, this.settings);
10358
+ utils.assign(data, this.settings);
10368
10359
  }
10369
10360
  return data;
10370
10361
  }
10371
10362
  loadFromData(data) {
10372
10363
  super.loadFromData(data);
10373
10364
  if (data) {
10374
- this.settings = utils.assignDeep(this.settings, data);
10365
+ this.settings = utils.assign(this.settings, data);
10375
10366
  if (this.settings.aggrFunc == 'AVERAGE') {
10376
10367
  this.settings.aggrFunc = AggrFunc.Average;
10377
10368
  }
@@ -10960,7 +10951,7 @@ class ResultFacetsPanel extends FacetContainer {
10960
10951
  this._processBlock = domel('div')
10961
10952
  .addClass(`${this.cssPrefix}-spinner`)
10962
10953
  .addChild('div', b => b
10963
- .addClass(`${eqCssPrefix}-progress-win8`, browserUtils.getMobileCssClass())
10954
+ .addClass(`${eqCssPrefix}-progress-win8`, getMobileCssClass())
10964
10955
  .addHtml(html))
10965
10956
  .toDOM();
10966
10957
  }
@@ -11732,7 +11723,8 @@ class AggrSettingsRenderer {
11732
11723
  const funcs = this.query.getModel().getAggrFunctions();
11733
11724
  const items = [];
11734
11725
  for (const func of funcs) {
11735
- if (!func)
11726
+ //add all functions except those we don't process
11727
+ if (!func || func.id == 'MIN' || func.id == 'MAX' || func.id == 'CNTDST')
11736
11728
  continue;
11737
11729
  this.funcMap[func.id] = func;
11738
11730
  const funcCaption = model
@@ -11931,7 +11923,7 @@ class AggregationBar extends Widget {
11931
11923
  }
11932
11924
  render() {
11933
11925
  this.slot.classList.add(`${this.cssPrefix}-panel`);
11934
- const mobClass = browserUtils.getMobileCssClass();
11926
+ const mobClass = getMobileCssClass();
11935
11927
  if (mobClass) {
11936
11928
  this.slot.classList.add(mobClass);
11937
11929
  }
@@ -12064,7 +12056,7 @@ class QueryNameWidget extends Widget {
12064
12056
  }
12065
12057
  render() {
12066
12058
  this.slot.classList.add(`${this.cssPrefix}`);
12067
- const mobClass = browserUtils.getMobileCssClass();
12059
+ const mobClass = getMobileCssClass();
12068
12060
  if (mobClass) {
12069
12061
  this.slot.classList.add(mobClass);
12070
12062
  }
@@ -12172,7 +12164,7 @@ class View {
12172
12164
  }
12173
12165
  initOptions(options) {
12174
12166
  options = utils.assignDeep(this.defaultViewOptions, options);
12175
- // support old format
12167
+ // support old format
12176
12168
  if (!options.widgets.easyGrid) {
12177
12169
  options.widgets.easyGrid = options.widgets.resultGrid || {};
12178
12170
  }
@@ -12402,7 +12394,7 @@ class View {
12402
12394
  this._spinnerDiv = domel('div')
12403
12395
  .addClass(`eqjs-result-spinner`)
12404
12396
  .addChild('div', b => b
12405
- .addClass(`${eqCssPrefix}-progress-win8`, browserUtils.getMobileCssClass())
12397
+ .addClass(`${eqCssPrefix}-progress-win8`, getMobileCssClass())
12406
12398
  .addHtml(html))
12407
12399
  .toDOM();
12408
12400
  }
@@ -12626,6 +12618,9 @@ class View {
12626
12618
  this.domRoots = [document];
12627
12619
  this.resetContext();
12628
12620
  }
12621
+ refreshWidgets(groups) {
12622
+ this.context.refreshWidgets(groups);
12623
+ }
12629
12624
  }
12630
12625
 
12631
12626
  /**
@@ -12903,8 +12898,12 @@ class AdvancedSearchView extends View {
12903
12898
  });
12904
12899
  }
12905
12900
  clearQueryButtonClick() {
12906
- this.context.clearQuery();
12907
- this.context.refreshWidgets(WidgetGroup.Statement);
12901
+ this.showQueryClearDialog((result) => {
12902
+ if (result) {
12903
+ this.context.clearQuery();
12904
+ this.context.refreshWidgets(WidgetGroup.Statement);
12905
+ }
12906
+ });
12908
12907
  }
12909
12908
  createNewQuery(options) {
12910
12909
  return this.context.newQuery(options);
@@ -12934,22 +12933,43 @@ class AdvancedSearchView extends View {
12934
12933
  saveCurrentQuery(copyQuery = false, callback) {
12935
12934
  const query = this.context.getQuery();
12936
12935
  if (query.isNewbie || copyQuery) {
12937
- this.showSaveQueryDialog((result) => new Promise(resolve => {
12938
- if (!result)
12936
+ this.showSaveQueryDialog((newQueryName) => new Promise(resolve => {
12937
+ if (!newQueryName)
12939
12938
  return;
12940
- query.regenerateId();
12941
- query.setName(result);
12942
- query.fireChangedEvent({
12943
- part: QueryChangePart.Properties,
12944
- wasModified: true
12945
- });
12946
- this.saveQuery(() => { resolve({ success: true }); }, (error) => resolve({ success: false, message: error }));
12939
+ this.checkSaveQueryName(newQueryName)
12940
+ .then(() => {
12941
+ query.regenerateId();
12942
+ query.setName(newQueryName);
12943
+ query.fireChangedEvent({
12944
+ part: QueryChangePart.Properties,
12945
+ wasModified: true
12946
+ });
12947
+ this.saveQuery(() => { resolve({ success: true }); }, (error) => resolve({ success: false, message: error }));
12948
+ }, (message) => resolve({ success: false, message }));
12947
12949
  }));
12948
12950
  }
12949
12951
  else {
12950
12952
  this.saveQuery(callback);
12951
12953
  }
12952
12954
  }
12955
+ checkSaveQueryName(name) {
12956
+ return new Promise((resolve, reject) => {
12957
+ this.context.loadQueryList({
12958
+ success: (queryList) => {
12959
+ const found = queryList.filter(item => item.name.toLowerCase() == name.toLowerCase());
12960
+ if (found.length == 0) {
12961
+ resolve();
12962
+ }
12963
+ else {
12964
+ reject("Can't save the query. A query with this name already exists.");
12965
+ }
12966
+ },
12967
+ error: (message) => {
12968
+ reject(message);
12969
+ }
12970
+ });
12971
+ });
12972
+ }
12953
12973
  checkIfQueryModified(callback) {
12954
12974
  if (this.context.getQuery().isModified()
12955
12975
  && !this.viewOptions.disableConfirmationOnQueryChange) {
@@ -13028,6 +13048,10 @@ class AdvancedSearchView extends View {
13028
13048
  }
13029
13049
  });
13030
13050
  }
13051
+ showQueryClearDialog(callback) {
13052
+ const ds = this.getDialogService();
13053
+ ds.openConfirm(i18n.getText('QueryChangedTitle'), i18n.getText('QueryClearContent'), callback);
13054
+ }
13031
13055
  showQueryChangedDialog(callback) {
13032
13056
  const ds = this.getDialogService();
13033
13057
  ds.openConfirm(i18n.getText('QueryChangedTitle'), i18n.getText('QueryChangedContent'), callback);
@@ -14234,6 +14258,7 @@ function addEasyQueryUITexts() {
14234
14258
  SaveQueryDefName: '{queryName} copy',
14235
14259
  QueryChangedTitle: 'Confirmation',
14236
14260
  QueryChangedContent: 'The query was changed. Do you want to save it first?',
14261
+ QueryClearContent: 'The query will cleared. Do you want to continue?',
14237
14262
  UpdateQuerySelector: '[click here to load the query]',
14238
14263
  FileNameLabel: 'File name: ',
14239
14264
  SaveQueryToFileDlgTitle: 'Save query to file',
@@ -14375,4 +14400,4 @@ if (!Array.prototype.findIndex) {
14375
14400
  };
14376
14401
  }
14377
14402
 
14378
- 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 };
14403
+ 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 };