@easyquery/ui 7.2.5 → 7.3.0-rc02

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/dist/assets/css/aggr-settings.css +4 -8
  2. package/dist/assets/css/easychart.css +1 -3
  3. package/dist/assets/css/easyfacets.css +9 -5
  4. package/dist/assets/css/easyquery.css +36 -297
  5. package/dist/assets/css/easyquery.ui.css +480 -209
  6. package/dist/assets/css/eq-icons.css +81 -0
  7. package/dist/assets/css/eqview.css +6 -13
  8. package/dist/assets/css/themes.css +12 -0
  9. package/dist/assets/css/upgrade.css +343 -0
  10. package/dist/easyquery.ui.cjs.js +252 -192
  11. package/dist/easyquery.ui.esm.js +216 -156
  12. package/dist/types/public_api.d.ts +0 -1
  13. package/dist/types/utils/utils.d.ts +1 -0
  14. package/dist/types/views/adv_search_view.d.ts +2 -0
  15. package/dist/types/views/view.d.ts +2 -1
  16. package/dist/types/widgets/columns_bar.d.ts +1 -0
  17. package/dist/types/widgets/renderers/columnspanel/column_renderer_cp.d.ts +1 -0
  18. package/dist/types/widgets/renderers/querypanel/datetime_expression_render.d.ts +1 -1
  19. package/package.json +5 -5
  20. package/dist/assets/css/eq-icons-default.css +0 -140
  21. package/dist/assets/css/eq-icons-files.css +0 -91
  22. package/dist/assets/css/images/ExportCSV.png +0 -0
  23. package/dist/assets/css/images/ExportExel.png +0 -0
  24. package/dist/assets/css/images/aggr_settings_cancel.png +0 -0
  25. package/dist/assets/css/images/aggr_settings_func.png +0 -0
  26. package/dist/assets/css/images/aggr_settings_group.png +0 -0
  27. package/dist/assets/css/images/ajax-loader.gif +0 -0
  28. package/dist/assets/css/images/chart-settings.png +0 -0
  29. package/dist/assets/css/images/checkbox_checked.png +0 -0
  30. package/dist/assets/css/images/checkbox_unchecked.png +0 -0
  31. package/dist/assets/css/images/clearButton.png +0 -0
  32. package/dist/assets/css/images/colbtn-aggrfunc.png +0 -0
  33. package/dist/assets/css/images/condbtn-addcondition.png +0 -0
  34. package/dist/assets/css/images/condbtn-addpredicate.png +0 -0
  35. package/dist/assets/css/images/condbtn-delete.png +0 -0
  36. package/dist/assets/css/images/condbtn-disabled.png +0 -0
  37. package/dist/assets/css/images/condbtn-enabled.png +0 -0
  38. package/dist/assets/css/images/condbtn-menu.png +0 -0
  39. package/dist/assets/css/images/condbtn-param.png +0 -0
  40. package/dist/assets/css/images/eqjs-ep-add-columns-hover.png +0 -0
  41. package/dist/assets/css/images/eqjs-ep-add-columns.png +0 -0
  42. package/dist/assets/css/images/eqjs-ep-add-cond-hover.png +0 -0
  43. package/dist/assets/css/images/eqjs-ep-add-cond.png +0 -0
  44. package/dist/assets/css/images/eqjs-ep-deselect-all-hover.png +0 -0
  45. package/dist/assets/css/images/eqjs-ep-deselect-all.png +0 -0
  46. package/dist/assets/css/images/eqjs-ep-select-all-hover.png +0 -0
  47. package/dist/assets/css/images/eqjs-ep-select-all.png +0 -0
  48. package/dist/assets/css/images/eqjs-fb-header-icon.png +0 -0
  49. package/dist/assets/css/images/execute.png +0 -0
  50. package/dist/assets/css/images/loadButton.png +0 -0
  51. package/dist/assets/css/images/logo.png +0 -0
  52. package/dist/assets/css/images/node-close.png +0 -0
  53. package/dist/assets/css/images/node-open.png +0 -0
  54. package/dist/assets/css/images/saveButton.png +0 -0
  55. package/dist/assets/css/images/sorting_asc.png +0 -0
  56. package/dist/assets/css/images/sorting_desc.png +0 -0
  57. package/dist/assets/css/images/sorting_none.png +0 -0
  58. package/dist/assets/css/images/ve-loader.gif +0 -0
  59. package/dist/types/utils/browser_utils.d.ts +0 -8
@@ -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,75 +1987,95 @@ 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
2049
1994
  .addClass(`${eqCssPrefix}-button-placeholder`, `${this.cssPrefix}-button-placeholder`, `${this.cssPrefix}-colelement`, `${this.cssPrefix}-sortbutton-placeholder`)
2050
- .addChildElement(this.sortingButton))
2051
- // end sort button
2052
- .addChildElement(this.renderExpressionBlock());
2053
- if (this.panel.options.showColumnTitles !== false && !exports.browserUtils.isMobileMode()) {
1995
+ .addChildElement(this.sortingButton));
1996
+ // end sort button
1997
+ builder.addChildElement(this.renderExpressionBlock());
1998
+ if (this.panel.options.showColumnTitles !== false && !ui.browserUtils.isMobileMode()) {
2054
1999
  builder
2055
2000
  .addChildElement(this.renderCaptionBlock());
2056
2001
  }
2002
+ let buttonsIndex = 0;
2003
+ let buttonsList = '';
2057
2004
  builder
2058
2005
  //start buttons
2059
2006
  .addChild('div', builder => {
2060
2007
  builder
2061
2008
  .addClass(`${eqCssPrefix}-column-buttonsBlock`, `${this.cssPrefix}-buttonsBlock`)
2062
- .addClass(exports.browserUtils.getMobileCssClass());
2009
+ .addClass(getMobileCssClass());
2063
2010
  //start enable button
2064
2011
  if (this.getButtonsToShow().indexOf("enable") >= 0 && !this.column.isReadOnly()) {
2065
2012
  builder.addChildElement(this.renderEnabledButton());
2013
+ buttonsIndex++;
2014
+ buttonsList += 'Enable';
2066
2015
  }
2067
2016
  //end enable button
2068
2017
  //start aggr func button
2069
2018
  if (this.getButtonsToShow().indexOf("type") >= 0 && this.columnEnabled) {
2070
2019
  builder.addChildElement(this.renderColumnTypeButton());
2020
+ buttonsIndex++;
2021
+ buttonsList += 'Type';
2071
2022
  }
2072
2023
  //end aggr func button
2073
2024
  //start format selector button
2074
2025
  if (this.getButtonsToShow().indexOf("format") >= 0 && this.columnEnabled) {
2075
2026
  builder.addChildElement(this.renderColumnFormatButton());
2027
+ buttonsIndex++;
2028
+ buttonsList += 'Format';
2076
2029
  }
2077
2030
  //end format selector button
2078
2031
  //start delete button
2079
2032
  if (this.getButtonsToShow().indexOf("delete") >= 0 && !this.column.isReadOnly()) {
2080
2033
  builder.addChildElement(this.renderDeleteButton());
2034
+ buttonsIndex++;
2035
+ buttonsList += 'Delete';
2081
2036
  }
2082
2037
  //end delete button
2083
2038
  //start menu button
2084
2039
  if (this.getButtonsToShow().indexOf("menu") >= 0 && !this.column.isReadOnly()) {
2085
2040
  builder.addChildElement(this.renderMenuButton());
2041
+ buttonsIndex++;
2042
+ buttonsList += 'Menu';
2086
2043
  }
2087
2044
  //end menu button
2088
2045
  });
2089
- //end buttons
2090
- if (!exports.browserUtils.isMobileMode()) {
2046
+ //end buttons
2047
+ builder.addClass(`eqjs-buttons-in-block-${buttonsIndex}`);
2048
+ builder.addClass(`eqjs-buttons-in-block-${buttonsList}`);
2049
+ if (!ui.browserUtils.isMobileMode()) {
2091
2050
  //start event listeners
2092
2051
  builder
2093
2052
  .on('mouseenter', this.onMouseEnter.bind(this))
2094
2053
  .on('mouseleave', this.onMouseLeave.bind(this));
2095
2054
  //end event listeners
2096
2055
  }
2097
- if (this.panel.options.accentActiveColumn || exports.browserUtils.isMobileMode()) {
2056
+ if (this.panel.options.accentActiveColumn || ui.browserUtils.isMobileMode()) {
2098
2057
  builder
2099
2058
  .on('click', this.onMouseClick.bind(this)); //touchstart
2100
2059
  }
2101
2060
  if (this.panel.options.alwaysShowButtons) {
2102
2061
  this.showButtons();
2103
2062
  }
2063
+ if (this.panel.options.showCheckboxes === false) {
2064
+ builder.addClass("eqjs-no-checkbox");
2065
+ }
2104
2066
  return this.element;
2105
2067
  }
2106
2068
  onMouseClick(ev) {
2107
2069
  ev.stopPropagation();
2070
+ this.activate();
2071
+ return false;
2072
+ }
2073
+ activate() {
2108
2074
  this.panel.toggleColumnPicked(this.column);
2109
2075
  this.adjustButtonsVisibility();
2110
- if (!exports.browserUtils.isMobileMode()) {
2076
+ if (!ui.browserUtils.isMobileMode()) {
2111
2077
  this.element.dispatchEvent(ui.createBrowserEvent("mouseenter"));
2112
2078
  }
2113
- return false;
2114
2079
  }
2115
2080
  fireColumnChanged() {
2116
2081
  this.column.fireChangedEvent();
@@ -2121,7 +2086,7 @@ class ColumnRendererCP {
2121
2086
  renderCaptionBlock() {
2122
2087
  const builder = ui.domel('div')
2123
2088
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-captionelement`)
2124
- .addClass(exports.browserUtils.getMobileCssClass());
2089
+ .addClass(getMobileCssClass());
2125
2090
  if (this.isEditable()) {
2126
2091
  builder
2127
2092
  .addChild('a', builder => builder
@@ -2130,6 +2095,7 @@ class ColumnRendererCP {
2130
2095
  .text(this.column.caption)
2131
2096
  .on('click', (ev) => {
2132
2097
  ev.stopPropagation();
2098
+ this.activate();
2133
2099
  const element = ev.target;
2134
2100
  const inputEl = element.parentElement.querySelector('input');
2135
2101
  if (inputEl) {
@@ -2204,7 +2170,7 @@ class ColumnRendererCP {
2204
2170
  sortButtonDirectionCssClass = `${sortButtonCssClass}-none`;
2205
2171
  break;
2206
2172
  }
2207
- if (!this.isEditable()) {
2173
+ if (!this.isEditable() || ui.browserUtils.isMobileMode()) {
2208
2174
  if (sorting === core.SortDirection.Ascending
2209
2175
  || sorting === core.SortDirection.Descending)
2210
2176
  return ui.domel('div')
@@ -2220,11 +2186,12 @@ class ColumnRendererCP {
2220
2186
  .attr('tabIndex', '0')
2221
2187
  .on('click', (ev) => {
2222
2188
  ev.stopPropagation();
2189
+ this.activate();
2223
2190
  this.keepShowingButtons = true;
2224
2191
  const menu = this.getUIS() ? this.panel.sortMenu || this.panel.moveMenu : this.panel.moveMenu;
2225
2192
  menu.showMenu({
2226
2193
  anchor: this.sortingButton,
2227
- selectedIds: this.column.isHidden() ? ['IsHidden'] : null,
2194
+ selectedIds: this.getButtonMenuSelectedItems(), // this.column.isHidden() ? ['IsHidden'] : null,
2228
2195
  itemSelectedCallback: (data, items) => {
2229
2196
  let action;
2230
2197
  switch (data.id) {
@@ -2311,7 +2278,7 @@ class ColumnRendererCP {
2311
2278
  .addClass(`${eqCssPrefix}-button`, `${eqCssPrefix}-column-button`, `${eqCssPrefix}-column-button-menu`)
2312
2279
  .title(core.i18n.getText('ButtonMenu'))
2313
2280
  .attr('tabIndex', '0')
2314
- .on('click', evt => this.buttonMenuHandler(exports.ColumnAction.Menu, evt)) //touchstart
2281
+ .on('click', evt => this.buttonMenuHandler(exports.ColumnAction.Menu, evt)) //touchstart
2315
2282
  .on('keypress', evt => { if (evt.keyCode == 13) {
2316
2283
  evt.target.click();
2317
2284
  } }))
@@ -2337,6 +2304,7 @@ class ColumnRendererCP {
2337
2304
  .attr('tabIndex', '0')
2338
2305
  .on('click', (ev) => {
2339
2306
  ev.stopPropagation();
2307
+ this.activate();
2340
2308
  this.keepShowingButtons = true;
2341
2309
  this.changeTypeHandler(ev);
2342
2310
  })
@@ -2444,7 +2412,7 @@ class ColumnRendererCP {
2444
2412
  }
2445
2413
  adjustButtonsVisibility() {
2446
2414
  if (this.panel.options.alwaysShowButtons ||
2447
- ((this.panel.options.accentActiveColumn || exports.browserUtils.isMobileMode())
2415
+ ((this.panel.options.accentActiveColumn || ui.browserUtils.isMobileMode())
2448
2416
  && this.isColumnActive())) {
2449
2417
  this.showButtons();
2450
2418
  }
@@ -2545,6 +2513,7 @@ class ColumnRendererCP {
2545
2513
  curQuery.fireColumnsChangedEvent(core.QueryChangeAction.Delete, this.column);
2546
2514
  break;
2547
2515
  case exports.ColumnAction.Enable:
2516
+ this.activate();
2548
2517
  this.columnEnabled = !this.columnEnabled;
2549
2518
  this.fireColumnChanged();
2550
2519
  break;
@@ -2579,6 +2548,7 @@ class ColumnRendererCP {
2579
2548
  case exports.ColumnAction.Menu:
2580
2549
  const colMenu = this.buttonMenu;
2581
2550
  this.keepShowingButtons = true;
2551
+ this.activate();
2582
2552
  colMenu.showMenu({
2583
2553
  anchor: evt ? evt.target : null,
2584
2554
  selectedIds: this.getButtonMenuSelectedItems(),
@@ -2613,7 +2583,7 @@ class ColumnRendererCP {
2613
2583
  action = exports.ColumnAction.SortingAsc;
2614
2584
  break;
2615
2585
  case "Descending":
2616
- action = exports.ColumnAction.SortingAsc;
2586
+ action = exports.ColumnAction.SortingDesc;
2617
2587
  break;
2618
2588
  }
2619
2589
  this.buttonMenuHandler(action, evt);
@@ -2643,26 +2613,26 @@ class ColumnRendererCP {
2643
2613
  if (menuId) {
2644
2614
  menuId += '-ButtonMenu';
2645
2615
  }
2646
- const common = [];
2647
- common.push({
2616
+ const Appearance = [];
2617
+ Appearance.push({
2648
2618
  id: "enable",
2649
2619
  text: core.i18n.getText('MenuEnable')
2650
2620
  });
2651
2621
  if (this.panel.options.allowHiddenColumns) {
2652
- common.push({
2622
+ Appearance.push({
2653
2623
  id: "hidden",
2654
2624
  text: core.i18n.getText('CmdHiddenColumn')
2655
2625
  });
2656
2626
  }
2657
- common.push({
2627
+ Appearance.push({
2658
2628
  id: "delete",
2659
2629
  text: core.i18n.getText('CmdDelete')
2660
2630
  });
2661
2631
  let items = [];
2662
2632
  items.push({
2663
2633
  id: '__group',
2664
- text: ' ',
2665
- items: common
2634
+ text: core.i18n.getText('CmdGroupAppearance'),
2635
+ items: Appearance
2666
2636
  });
2667
2637
  const sortItems = this.panel.options.allowSorting ?
2668
2638
  [
@@ -2721,6 +2691,17 @@ class ColumnRendererCP {
2721
2691
  if (this.column.isHidden()) {
2722
2692
  arrSelected.push("hidden");
2723
2693
  }
2694
+ switch (this.column.sorting) {
2695
+ case core.SortDirection.None:
2696
+ arrSelected.push("None");
2697
+ break;
2698
+ case core.SortDirection.Ascending:
2699
+ arrSelected.push("Ascending");
2700
+ break;
2701
+ case core.SortDirection.Descending:
2702
+ arrSelected.push("Descending");
2703
+ break;
2704
+ }
2724
2705
  const formats = this.panel
2725
2706
  .getContext()
2726
2707
  .getModel()
@@ -2741,10 +2722,10 @@ class AttrColumnRendererCP extends ColumnRendererCP {
2741
2722
  renderExpressionBlock() {
2742
2723
  return ui.domel("div")
2743
2724
  .addClass(`${this.cssPrefix}-expr-block`)
2744
- .addClass(exports.browserUtils.getMobileCssClass())
2725
+ .addClass(getMobileCssClass())
2745
2726
  .addChild('div', builder => builder
2746
2727
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-attrelement`)
2747
- .addClass(exports.browserUtils.getMobileCssClass())
2728
+ .addClass(getMobileCssClass())
2748
2729
  .addChildElement(this.renderBaseExpression()))
2749
2730
  .toDOM();
2750
2731
  }
@@ -2762,6 +2743,7 @@ class AttrColumnRendererCP extends ColumnRendererCP {
2762
2743
  .text(attrCaption) //TO DO:add localization
2763
2744
  .on('click', (ev) => {
2764
2745
  ev.stopPropagation();
2746
+ this.activate();
2765
2747
  this.panel.showEntitiesMenu({
2766
2748
  anchor: ev.target,
2767
2749
  selectedIds: null,
@@ -2914,7 +2896,7 @@ class AggrFuncColumnRendererCP extends AttrColumnRendererCP {
2914
2896
  const model = this.panel.getContext().getModel();
2915
2897
  const exprBlockBuilder = ui.domel("div")
2916
2898
  .addClass(`${this.cssPrefix}-expr-block`, `${this.cssPrefix}-expr-block-aggr`)
2917
- .addClass(exports.browserUtils.getMobileCssClass());
2899
+ .addClass(getMobileCssClass());
2918
2900
  const format = model.getAggrFunctionFormat(this.column.expr.func);
2919
2901
  if (!format || format === '')
2920
2902
  return;
@@ -2932,6 +2914,7 @@ class AggrFuncColumnRendererCP extends AttrColumnRendererCP {
2932
2914
  .text(item.text)
2933
2915
  .on('click', (ev) => {
2934
2916
  ev.stopPropagation();
2917
+ this.activate();
2935
2918
  this.functionMenu.showMenu({
2936
2919
  anchor: functionLink.toDOM(),
2937
2920
  selectedIds: null,
@@ -2950,14 +2933,14 @@ class AggrFuncColumnRendererCP extends AttrColumnRendererCP {
2950
2933
  exprBlockBuilder
2951
2934
  .addChild('div', builder => builder
2952
2935
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-aggrfuncelement`)
2953
- .addClass(exports.browserUtils.getMobileCssClass())
2936
+ .addClass(getMobileCssClass())
2954
2937
  .addChildElement(functionLink.toDOM()));
2955
2938
  }
2956
2939
  else {
2957
2940
  exprBlockBuilder
2958
2941
  .addChild('div', b => b
2959
2942
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-aggrfuncelement`)
2960
- .addClass(exports.browserUtils.getMobileCssClass())
2943
+ .addClass(getMobileCssClass())
2961
2944
  .addChild('span', b => b
2962
2945
  .text(item.text)
2963
2946
  .title(item.text)));
@@ -2967,14 +2950,14 @@ class AggrFuncColumnRendererCP extends AttrColumnRendererCP {
2967
2950
  exprBlockBuilder
2968
2951
  .addChild('div', builder => builder
2969
2952
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-attrelement`)
2970
- .addClass(exports.browserUtils.getMobileCssClass())
2953
+ .addClass(getMobileCssClass())
2971
2954
  .addChildElement(this.renderBaseExpression()));
2972
2955
  }
2973
2956
  else if (item.type === 3) {
2974
2957
  exprBlockBuilder
2975
2958
  .addChild('span', builder => builder
2976
2959
  .addClass(`${this.cssPrefix}-colelement`)
2977
- .addClass(exports.browserUtils.getMobileCssClass())
2960
+ .addClass(getMobileCssClass())
2978
2961
  .text(item.text)
2979
2962
  .title(item.text));
2980
2963
  }
@@ -3056,12 +3039,12 @@ class EditableColumnRendererCP extends AttrColumnRendererCP {
3056
3039
  renderExpressionBlock() {
3057
3040
  const exprBlock = ui.domel("div")
3058
3041
  .addClass(`${this.cssPrefix}-expr-block`)
3059
- .addClass(exports.browserUtils.getMobileCssClass())
3042
+ .addClass(getMobileCssClass())
3060
3043
  .toDOM();
3061
3044
  //Attribute element
3062
3045
  let builder = ui.domel('div', exprBlock)
3063
3046
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-attrelement`)
3064
- .addClass(exports.browserUtils.getMobileCssClass());
3047
+ .addClass(getMobileCssClass());
3065
3048
  if (this.isEditable()) {
3066
3049
  builder
3067
3050
  .addChild('a', b => b
@@ -3137,7 +3120,7 @@ class EditableColumnRendererCP extends AttrColumnRendererCP {
3137
3120
  // DataType element
3138
3121
  builder = ui.domel('div', exprBlock)
3139
3122
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-attrelement`)
3140
- .addClass(exports.browserUtils.getMobileCssClass());
3123
+ .addClass(getMobileCssClass());
3141
3124
  if (this.isEditable()) {
3142
3125
  this.createDataTypeMenu();
3143
3126
  builder
@@ -3387,8 +3370,18 @@ class ColumnsPanel extends core.Widget {
3387
3370
  const headerBuilder = ui.domel('div', this.slot)
3388
3371
  .hide()
3389
3372
  .addClass(`${this.cssPrefix}-header`)
3390
- .addClass(exports.browserUtils.getMobileCssClass())
3391
- .addChild('div', builder => builder
3373
+ .addClass(getMobileCssClass());
3374
+ if (!this.options.alwaysShowButtons) {
3375
+ headerBuilder.addClass("eqjs-no-buttons");
3376
+ }
3377
+ if (this.options.showCheckboxes) {
3378
+ headerBuilder.addChild('div', builder => builder
3379
+ .setStyle('margin-left', '30px')); //quick fix to adjust title column header when showCheckboxes is on
3380
+ }
3381
+ else {
3382
+ headerBuilder.addClass("eqjs-no-checkbox");
3383
+ }
3384
+ headerBuilder.addChild('div', builder => builder
3392
3385
  .addClass(`${this.cssPrefix}-header-expression`)
3393
3386
  .text(core$1.i18n.getText('HeaderExpression')));
3394
3387
  if (this.options.showColumnTitles !== false) {
@@ -3403,13 +3396,13 @@ class ColumnsPanel extends core.Widget {
3403
3396
  this.columnsBlock =
3404
3397
  ui.domel('div', this.slot)
3405
3398
  .addClass(`${this.cssPrefix}-columns`)
3406
- .addClass(exports.browserUtils.getMobileCssClass())
3399
+ .addClass(getMobileCssClass())
3407
3400
  .toDOM();
3408
3401
  if (this.options.showAddRow) {
3409
3402
  this.addRowElement =
3410
3403
  ui.domel('div', this.slot)
3411
3404
  .addClass(`${eqCssPrefix}-addrow`, `${this.cssPrefix}-addrow`, `${eqCssPrefix}-addrow-empty`)
3412
- .addClass(exports.browserUtils.getMobileCssClass())
3405
+ .addClass(getMobileCssClass())
3413
3406
  .addChild('a', builder => builder
3414
3407
  .attr('href', 'javascript:void(0)')
3415
3408
  .text(core$1.i18n.getText('CmdClickToAddColumn'))
@@ -3599,8 +3592,8 @@ class ColumnsPanel extends core.Widget {
3599
3592
  if (options.titleElementFormat) {
3600
3593
  this.context.options.columnTitleFormat = options.titleElementFormat;
3601
3594
  }
3602
- if (exports.browserUtils.isMobileMode()) {
3603
- this.options.buttons = ["menu"];
3595
+ if (ui.browserUtils.isMobileMode()) {
3596
+ this.options.buttons = ["menu", "sorting"];
3604
3597
  this.options.showHeader = false;
3605
3598
  }
3606
3599
  }
@@ -3631,7 +3624,7 @@ class ColumnsPanel extends core.Widget {
3631
3624
  this.agjustHeaderVisibility();
3632
3625
  ui.domel(this.slot)
3633
3626
  .removeClass(eqCssMobile)
3634
- .addClass(exports.browserUtils.getMobileCssClass());
3627
+ .addClass(getMobileCssClass());
3635
3628
  const query = this.context.getQuery();
3636
3629
  const columns = query.getColumns();
3637
3630
  for (let column of columns) {
@@ -3949,7 +3942,7 @@ class ColumnsPanel extends core.Widget {
3949
3942
  renderProgressBlock() {
3950
3943
  this.progressBlock = document.createElement('div');
3951
3944
  this.progressBlock.classList.add(`${eqCssPrefix}-progress-win8`);
3952
- this.progressBlock.classList.add(exports.browserUtils.getMobileCssClass());
3945
+ this.progressBlock.classList.add(getMobileCssClass());
3953
3946
  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
3947
  }
3955
3948
  }
@@ -3999,10 +3992,10 @@ class ColumnRendererCB {
3999
3992
  }
4000
3993
  builder
4001
3994
  .addClass(this.getClassesToAdd())
4002
- .addClass(exports.browserUtils.getMobileCssClass())
3995
+ .addClass(getMobileCssClass())
4003
3996
  .addChildElement(this.renderCaptionBlock())
4004
3997
  .addChildElement(this.renderSortingImage());
4005
- if (!exports.browserUtils.isMobileMode()) {
3998
+ if (!ui.browserUtils.isMobileMode()) {
4006
3999
  builder
4007
4000
  .addChildElement(this.renderButtonsBlock());
4008
4001
  }
@@ -4011,7 +4004,7 @@ class ColumnRendererCB {
4011
4004
  .on('mouseenter', this.onMouseEnter.bind(this))
4012
4005
  .on('mouseleave', this.onMouseLeave.bind(this));
4013
4006
  //end event listeners
4014
- if (this.bar.options.accentActiveColumn || exports.browserUtils.isMobileMode()) {
4007
+ if (this.bar.options.accentActiveColumn || ui.browserUtils.isMobileMode()) {
4015
4008
  builder
4016
4009
  .on('touchstart click', this.onMouseClick.bind(this));
4017
4010
  }
@@ -4040,7 +4033,7 @@ class ColumnRendererCB {
4040
4033
  if (!this.isEditable()) {
4041
4034
  return ui.domel('div')
4042
4035
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-captionelement`)
4043
- .addClass(exports.browserUtils.getMobileCssClass())
4036
+ .addClass(getMobileCssClass())
4044
4037
  .addChild('div', b => b
4045
4038
  .title(caption)
4046
4039
  .text(caption)
@@ -4074,7 +4067,7 @@ class ColumnRendererCB {
4074
4067
  }); //TO DO:add localization and input field);
4075
4068
  return ui.domel('div')
4076
4069
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-captionelement`)
4077
- .addClass(exports.browserUtils.getMobileCssClass())
4070
+ .addClass(getMobileCssClass())
4078
4071
  .addChild('a', builder => builder
4079
4072
  .attr('href', 'javascript:void(0)')
4080
4073
  .title(this.column.caption)
@@ -4150,7 +4143,7 @@ class ColumnRendererCB {
4150
4143
  else {
4151
4144
  return ui.domel('div')
4152
4145
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-sortimage-placeholder`)
4153
- .addClass(exports.browserUtils.getMobileCssClass())
4146
+ .addClass(getMobileCssClass())
4154
4147
  .addChild('div', builder => builder
4155
4148
  .addClass(`${this.cssPrefix}-img-sorting`, sortButtonDirectionCssClass)
4156
4149
  .title(core$1.i18n.getText('ButtonSorting')))
@@ -4327,7 +4320,7 @@ class ColumnRendererCB {
4327
4320
  this.adjustButtonsVisibility();
4328
4321
  }
4329
4322
  onMouseEnter(e) {
4330
- if (exports.browserUtils.isMobileMode())
4323
+ if (ui.browserUtils.isMobileMode())
4331
4324
  return;
4332
4325
  this.isMouseOverBlock = true;
4333
4326
  this.enterButtonBlock();
@@ -4335,7 +4328,7 @@ class ColumnRendererCB {
4335
4328
  return false;
4336
4329
  }
4337
4330
  onMouseLeave(e) {
4338
- if (exports.browserUtils.isMobileMode())
4331
+ if (ui.browserUtils.isMobileMode())
4339
4332
  return;
4340
4333
  this.isMouseOverBlock = false;
4341
4334
  this.leaveButtonBlock();
@@ -4346,7 +4339,7 @@ class ColumnRendererCB {
4346
4339
  return this.element.classList.contains("active");
4347
4340
  }
4348
4341
  hideButtons() {
4349
- if (exports.browserUtils.isMobileMode()) {
4342
+ if (ui.browserUtils.isMobileMode()) {
4350
4343
  if (this.onHideButtonsMobile) {
4351
4344
  this.onHideButtonsMobile();
4352
4345
  }
@@ -4356,7 +4349,7 @@ class ColumnRendererCB {
4356
4349
  }
4357
4350
  }
4358
4351
  showButtons() {
4359
- if (exports.browserUtils.isMobileMode()) {
4352
+ if (ui.browserUtils.isMobileMode()) {
4360
4353
  if (this.onShowButtonsMobile) {
4361
4354
  this.onShowButtonsMobile();
4362
4355
  }
@@ -4367,7 +4360,7 @@ class ColumnRendererCB {
4367
4360
  }
4368
4361
  adjustButtonsVisibility() {
4369
4362
  if (this.bar.options.alwaysShowButtons
4370
- || ((this.bar.options.accentActiveColumn || exports.browserUtils.isMobileMode())
4363
+ || ((this.bar.options.accentActiveColumn || ui.browserUtils.isMobileMode())
4371
4364
  && this.isColumnActive())) {
4372
4365
  this.showButtons();
4373
4366
  }
@@ -4642,6 +4635,7 @@ class ColumnsBar extends core.Widget {
4642
4635
  sortEntities: false,
4643
4636
  columnRenderedCallback: null,
4644
4637
  customExpressionText: 0,
4638
+ showAddAllForEntity: false
4645
4639
  };
4646
4640
  this.landingSlot = ui.domel('div')
4647
4641
  .addClass(`${eqCssPrefix}-highlight`)
@@ -4661,7 +4655,7 @@ class ColumnsBar extends core.Widget {
4661
4655
  ];
4662
4656
  ui.domel(this.slot)
4663
4657
  .addClass(`${this.cssPrefix}-panel`)
4664
- .addClass(exports.browserUtils.getMobileCssClass());
4658
+ .addClass(getMobileCssClass());
4665
4659
  this.group = core.WidgetGroup.Query;
4666
4660
  this.customQuery = customQuery;
4667
4661
  }
@@ -4880,7 +4874,7 @@ class ColumnsBar extends core.Widget {
4880
4874
  renderAddRowButton() {
4881
4875
  ui.domel(this.addRowButton)
4882
4876
  .addClass(`${eqCssPrefix}-addrow`, `${this.cssPrefix}-addrow`, `${eqCssPrefix}-addrow-empty`)
4883
- .addClass(exports.browserUtils.getMobileCssClass())
4877
+ .addClass(getMobileCssClass())
4884
4878
  .title(core$1.i18n.getText('CmdClickToAddColumn'))
4885
4879
  .addChild('a', builder => builder
4886
4880
  .attr('href', 'javascript:void(0)')
@@ -4890,13 +4884,18 @@ class ColumnsBar extends core.Widget {
4890
4884
  anchor: e.target,
4891
4885
  selectedIds: null,
4892
4886
  itemSelectedCallback: (data, items) => {
4893
- const attrid = data.id;
4894
- this.addNewColumn(attrid);
4887
+ if (data.id === '__AddAll__' && data.extra && Array.isArray(data.extra.ids)) {
4888
+ data.extra.ids.forEach(attrId => this.addNewColumn(attrId));
4889
+ }
4890
+ else {
4891
+ const attrid = data.id;
4892
+ this.addNewColumn(attrid);
4893
+ }
4895
4894
  return false;
4896
4895
  }
4897
4896
  });
4898
4897
  }));
4899
- if (exports.browserUtils.isMobileMode()) {
4898
+ if (ui.browserUtils.isMobileMode()) {
4900
4899
  ui.domel(this.columnsBlock)
4901
4900
  .addChildElement(this.addRowButton);
4902
4901
  }
@@ -4910,13 +4909,13 @@ class ColumnsBar extends core.Widget {
4910
4909
  this.columnsBlock =
4911
4910
  ui.domel('div')
4912
4911
  .addClass(`${this.cssPrefix}-columns`)
4913
- .addClass(exports.browserUtils.getMobileCssClass())
4912
+ .addClass(getMobileCssClass())
4914
4913
  .toDOM();
4915
4914
  if (this.options.showAddRow) {
4916
4915
  this.addRowButton =
4917
4916
  ui.domel('div')
4918
4917
  .toDOM();
4919
- if (exports.browserUtils.isMobileMode()) {
4918
+ if (ui.browserUtils.isMobileMode()) {
4920
4919
  ui.domel(this.columnsBlock)
4921
4920
  .addChildElement(this.addRowButton);
4922
4921
  }
@@ -4940,7 +4939,7 @@ class ColumnsBar extends core.Widget {
4940
4939
  this.columnButtonsBlockMobileArrow = ui.domel('i').toDOM();
4941
4940
  this.columnButtonsBlockMobile = ui.domel('div')
4942
4941
  .addClass(`${this.cssPrefix}-column-buttonsBlock`)
4943
- .addClass(exports.browserUtils.getMobileCssClass())
4942
+ .addClass(getMobileCssClass())
4944
4943
  .addChildElement(this.columnButtonsBlockMobileArrow)
4945
4944
  .hide()
4946
4945
  .toDOM();
@@ -5160,6 +5159,23 @@ class ColumnsBar extends core.Widget {
5160
5159
  showEntitiesMenu(menuOptions) {
5161
5160
  this.entitiesMenu && this.entitiesMenu.showMenu(menuOptions);
5162
5161
  }
5162
+ addAllColumnsToEntitiesList(list) {
5163
+ const attrIds = list.filter(item => !item.isEntity).map(item => item.id);
5164
+ if (attrIds.length > 0) {
5165
+ list.unshift({
5166
+ id: '__AddAll__',
5167
+ text: core$1.i18n.getText('AddAllForEntityText'),
5168
+ extra: {
5169
+ ids: attrIds
5170
+ }
5171
+ });
5172
+ }
5173
+ list.forEach(item => {
5174
+ if (item.items) {
5175
+ this.addAllColumnsToEntitiesList(item.items);
5176
+ }
5177
+ });
5178
+ }
5163
5179
  createEntitiesMenu() {
5164
5180
  const model = this.getContext().getModel();
5165
5181
  if (!model || model.isEmpty())
@@ -5169,6 +5185,10 @@ class ColumnsBar extends core.Widget {
5169
5185
  menuId += '-EntitiesMenu';
5170
5186
  }
5171
5187
  const entitiesList = model.getEntitiesTree({ addUIC: false, addUIR: true, addUIS: false, attrPlacement: this.options.attrPlacement, sortEntities: this.options.sortEntities });
5188
+ // add [Add all columns] items
5189
+ if (this.options.showAddAllForEntity) {
5190
+ this.addAllColumnsToEntitiesList(entitiesList);
5191
+ }
5172
5192
  const options = { items: entitiesList, adjustHeight: this.options.adjustEntitiesMenuHeight, id: menuId, domWriteItemsId: this.options.domWriteItemsId };
5173
5193
  core$1.utils.assign(options, this.options.menuOptions);
5174
5194
  this.entitiesMenu = new PopupMenu(options);
@@ -5297,7 +5317,7 @@ class ColumnRendererSB {
5297
5317
  }
5298
5318
  builder
5299
5319
  .addClass(this.getClassesToAdd())
5300
- .addClass(exports.browserUtils.getMobileCssClass())
5320
+ .addClass(getMobileCssClass())
5301
5321
  .addChildElement(this.renderCaptionBlock());
5302
5322
  if (this.isEditable()) {
5303
5323
  builder
@@ -5335,7 +5355,7 @@ class ColumnRendererSB {
5335
5355
  }
5336
5356
  return ui.domel('div')
5337
5357
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-captionelement`)
5338
- .addClass(exports.browserUtils.getMobileCssClass())
5358
+ .addClass(getMobileCssClass())
5339
5359
  .addChild('div', b => b
5340
5360
  .title(this.column.caption)
5341
5361
  .text(text))
@@ -5357,7 +5377,7 @@ class ColumnRendererSB {
5357
5377
  }
5358
5378
  const builder = ui.domel('div')
5359
5379
  .addClass(`${this.cssPrefix}-colelement`, `${this.cssPrefix}-sortimage-placeholder`)
5360
- .addClass(exports.browserUtils.getMobileCssClass())
5380
+ .addClass(getMobileCssClass())
5361
5381
  .addChild('div', builder => builder
5362
5382
  .addClass(`${this.cssPrefix}-img-sorting`, sortButtonDirectionCssClass)
5363
5383
  .title(core$1.i18n.getText('ButtonSorting')))
@@ -5448,7 +5468,7 @@ class SortingBar extends core.Widget {
5448
5468
  this.landingIndex = -1;
5449
5469
  ui.domel(this.slot)
5450
5470
  .addClass(`${this.cssPrefix}-panel`)
5451
- .addClass(exports.browserUtils.getMobileCssClass());
5471
+ .addClass(getMobileCssClass());
5452
5472
  this.group = core.WidgetGroup.Query;
5453
5473
  }
5454
5474
  getWidgetType() {
@@ -5531,7 +5551,7 @@ class SortingBar extends core.Widget {
5531
5551
  renderAddRowButton() {
5532
5552
  ui.domel(this.addRowButton)
5533
5553
  .addClass(`${eqCssPrefix}-addrow`, `${this.cssPrefix}-addrow`, `${eqCssPrefix}-addrow-empty`)
5534
- .addClass(exports.browserUtils.getMobileCssClass())
5554
+ .addClass(getMobileCssClass())
5535
5555
  .title(core$1.i18n.getText('CmdClickToAddColumn'))
5536
5556
  .addChild('a', builder => builder
5537
5557
  .attr('href', 'javascript:void(0)')
@@ -5547,7 +5567,7 @@ class SortingBar extends core.Widget {
5547
5567
  }
5548
5568
  });
5549
5569
  }));
5550
- if (exports.browserUtils.isMobileMode()) {
5570
+ if (ui.browserUtils.isMobileMode()) {
5551
5571
  ui.domel(this.columnsBlock)
5552
5572
  .addChildElement(this.addRowButton);
5553
5573
  }
@@ -5587,13 +5607,13 @@ class SortingBar extends core.Widget {
5587
5607
  this.columnsBlock =
5588
5608
  ui.domel('div')
5589
5609
  .addClass(`${this.cssPrefix}-columns`)
5590
- .addClass(exports.browserUtils.getMobileCssClass())
5610
+ .addClass(getMobileCssClass())
5591
5611
  .toDOM();
5592
5612
  if (this.options.showAddRow) {
5593
5613
  this.addRowButton =
5594
5614
  ui.domel('div')
5595
5615
  .toDOM();
5596
- if (exports.browserUtils.isMobileMode()) {
5616
+ if (ui.browserUtils.isMobileMode()) {
5597
5617
  ui.domel(this.columnsBlock)
5598
5618
  .addChildElement(this.addRowButton);
5599
5619
  }
@@ -5768,7 +5788,7 @@ class TextRenderer {
5768
5788
  ui.domel(this.element)
5769
5789
  .html('')
5770
5790
  .addClass(this.getClassesToAdd())
5771
- .addClass(exports.browserUtils.getMobileCssClass())
5791
+ .addClass(getMobileCssClass())
5772
5792
  .addChild('span', builder => builder
5773
5793
  .text(this.text)
5774
5794
  .title(this.text))
@@ -5829,7 +5849,7 @@ class SimpleConditionRenderer extends ConditionRenderer {
5829
5849
  let result = `${this.cssPrefix}-row ${this.cssPrefix}-row-condition`;
5830
5850
  result += this.condition.isInJoin() ? ` ${this.cssPrefix}-condition-injoin` : '';
5831
5851
  result += this.condition.isParameterized() ? ` ${this.cssPrefix}-condition-parameterized` : '';
5832
- if (!exports.browserUtils.isMobileMode()) {
5852
+ if (!ui.browserUtils.isMobileMode()) {
5833
5853
  const level = this.condition.getLevel();
5834
5854
  if (level > 0)
5835
5855
  result += ` ${this.cssPrefix}-level-${level}`;
@@ -5854,7 +5874,7 @@ class SimpleConditionRenderer extends ConditionRenderer {
5854
5874
  this.element = builder.toDOM();
5855
5875
  builder
5856
5876
  .addClass(this.getClassesToAdd())
5857
- .addClass(exports.browserUtils.getMobileCssClass())
5877
+ .addClass(getMobileCssClass())
5858
5878
  .data('id', this.condition.id)
5859
5879
  .data('condrow', '')
5860
5880
  .addChildElement(this.renderCheckbox())
@@ -5887,12 +5907,12 @@ class SimpleConditionRenderer extends ConditionRenderer {
5887
5907
  builder.addChildElement(new TextRenderer(this.panel, item.text).render());
5888
5908
  }
5889
5909
  }
5890
- if (this.panel.options.accentActiveCondition || exports.browserUtils.isMobileMode()) {
5910
+ if (this.panel.options.accentActiveCondition || ui.browserUtils.isMobileMode()) {
5891
5911
  builder.on('click', ev => {
5892
5912
  ev.stopPropagation();
5893
5913
  this.panel.toggleConditionPicked(this.condition);
5894
5914
  this.adjustButtonsVisibility();
5895
- if (!exports.browserUtils.isMobileMode()) {
5915
+ if (!ui.browserUtils.isMobileMode()) {
5896
5916
  this.element.dispatchEvent(ui.createBrowserEvent("mouseenter"));
5897
5917
  }
5898
5918
  return false;
@@ -5900,7 +5920,7 @@ class SimpleConditionRenderer extends ConditionRenderer {
5900
5920
  }
5901
5921
  builder
5902
5922
  .addChildElement(this.renderButtonsBlock());
5903
- if (!exports.browserUtils.isMobileMode()) {
5923
+ if (!ui.browserUtils.isMobileMode()) {
5904
5924
  builder
5905
5925
  .on('mouseenter', event => {
5906
5926
  this.isMouseOverBlock = true;
@@ -6128,7 +6148,7 @@ class SimpleConditionRenderer extends ConditionRenderer {
6128
6148
  };
6129
6149
  const builder = ui.domel("div")
6130
6150
  .addClass(`${this.cssPrefix}-condition-buttonsBlock`)
6131
- .addClass(exports.browserUtils.getMobileCssClass());
6151
+ .addClass(getMobileCssClass());
6132
6152
  this.buttonsBlock = builder.toDOM();
6133
6153
  if (this.condition.isReadOnly()) {
6134
6154
  return this.buttonsBlock;
@@ -6221,7 +6241,7 @@ class SimpleConditionRenderer extends ConditionRenderer {
6221
6241
  .data("button", "")
6222
6242
  .title(core$1.i18n.getText('ButtonMenu'))
6223
6243
  .on('click', evt => this.conditionMenuHandler(exports.ConditionAction.Menu, evt));
6224
- if (!exports.browserUtils.isMobileMode()) {
6244
+ if (!ui.browserUtils.isMobileMode()) {
6225
6245
  b
6226
6246
  .on('keypress', evt => { if (evt.keyCode == 13) {
6227
6247
  evt.target.click();
@@ -6292,7 +6312,7 @@ class ConditionGroupRenderer extends ConditionRenderer {
6292
6312
  coreRender(autoAppear) {
6293
6313
  ui.domel(this.element)
6294
6314
  .addClass(this.getClassesToAdd())
6295
- .addClass(exports.browserUtils.getMobileCssClass())
6315
+ .addClass(getMobileCssClass())
6296
6316
  .addChildElement(this.renderGroupRow())
6297
6317
  .addChildElement(this.renderConditions(autoAppear))
6298
6318
  .data('id', this.condition.id)
@@ -6310,7 +6330,7 @@ class ConditionGroupRenderer extends ConditionRenderer {
6310
6330
  const builder = ui.domel('div');
6311
6331
  builder
6312
6332
  .addClass(`${this.cssPrefix}-conditions`)
6313
- .addClass(`${exports.browserUtils.getMobileCssClass()}`)
6333
+ .addClass(`${getMobileCssClass()}`)
6314
6334
  .data('conditions', '');
6315
6335
  if (this.isRoot) {
6316
6336
  builder.addClass(`${this.cssPrefix}-conditions-root`);
@@ -6352,7 +6372,7 @@ class ConditionGroupRowRenderer extends SimpleConditionRenderer {
6352
6372
  coreRender(autoAppear) {
6353
6373
  const builder = ui.domel(this.element)
6354
6374
  .addClass(this.getClassesToAdd())
6355
- .addClass(exports.browserUtils.getMobileCssClass())
6375
+ .addClass(getMobileCssClass())
6356
6376
  .data('group-row', '')
6357
6377
  .addChildElement(this.renderCheckbox())
6358
6378
  .addChildElement(this.renderConjunction());
@@ -6364,14 +6384,14 @@ class ConditionGroupRowRenderer extends SimpleConditionRenderer {
6364
6384
  builder.on('click', ev => {
6365
6385
  this.panel.toggleConditionPicked(this.condition);
6366
6386
  this.adjustButtonsVisibility();
6367
- if (!exports.browserUtils.isMobileMode()) {
6387
+ if (!ui.browserUtils.isMobileMode()) {
6368
6388
  builder.toDOM().dispatchEvent(ui.createBrowserEvent("mouseenter"));
6369
6389
  }
6370
6390
  });
6371
6391
  }
6372
6392
  builder
6373
6393
  .addChildElement(this.renderButtonsBlock());
6374
- if (!exports.browserUtils.isMobileMode()) {
6394
+ if (!ui.browserUtils.isMobileMode()) {
6375
6395
  builder
6376
6396
  .on('mouseenter', event => {
6377
6397
  this.isMouseOverBlock = true;
@@ -6391,7 +6411,7 @@ class ConditionGroupRowRenderer extends SimpleConditionRenderer {
6391
6411
  }
6392
6412
  getGroupTitle() {
6393
6413
  let result;
6394
- if (this.isRoot && !exports.browserUtils.isMobileMode()) {
6414
+ if (this.isRoot && !ui.browserUtils.isMobileMode()) {
6395
6415
  result = core$1.i18n.getText('RootConditionGroupTitle');
6396
6416
  if (!result) {
6397
6417
  //to support old text key
@@ -6488,7 +6508,7 @@ class BaseElementRenderer {
6488
6508
  ui.domel(this.element)
6489
6509
  .html('')
6490
6510
  .addClass(this.getClassesToAdd())
6491
- .addClass(exports.browserUtils.getMobileCssClass())
6511
+ .addClass(getMobileCssClass())
6492
6512
  .addChildElement(this.labelElement);
6493
6513
  if (this.isEditable()) {
6494
6514
  this.renderEditor();
@@ -6652,7 +6672,7 @@ class InputExpressionRenderer extends ExpressionRenderer {
6652
6672
  }
6653
6673
  showEditor() {
6654
6674
  const MIN_WIDTH = 200;
6655
- if (!exports.browserUtils.isMobileMode()) {
6675
+ if (!ui.browserUtils.isMobileMode()) {
6656
6676
  let left = this.element.offsetLeft;
6657
6677
  let width = this.element.offsetWidth > MIN_WIDTH ? this.element.offsetWidth : MIN_WIDTH;
6658
6678
  let maxWidth = this.element.parentElement.clientWidth - left - 55;
@@ -7040,7 +7060,7 @@ class AttributeExpressionRenderer extends ListExpressionRenderer {
7040
7060
  return `${this.cssPrefix}-condelement ${this.cssPrefix}-attrelement`;
7041
7061
  }
7042
7062
  adjustWidth() {
7043
- if (exports.browserUtils.isMobileMode()) {
7063
+ if (ui.browserUtils.isMobileMode()) {
7044
7064
  return;
7045
7065
  }
7046
7066
  const elWidth = this.element.clientWidth;
@@ -7246,7 +7266,7 @@ class DateTimeExpressionRenderer extends ExpressionRenderer {
7246
7266
  dateTime = model.getTimeMacroValue(value);
7247
7267
  }
7248
7268
  else {
7249
- dateTime = this.convertFromInternalFormat(value);
7269
+ dateTime = this.convertFromInternalFormat(value, new Date());
7250
7270
  }
7251
7271
  this.dtp.setDateTime(dateTime);
7252
7272
  this.dtp.show(this.element);
@@ -7276,8 +7296,13 @@ class DateTimeExpressionRenderer extends ExpressionRenderer {
7276
7296
  return super.isEditable()
7277
7297
  && ((this.panel.options.editableParts & exports.QPEditablePart.Value) === exports.QPEditablePart.Value);
7278
7298
  }
7279
- convertFromInternalFormat(dateTime) {
7280
- return core$1.utils.strToDateTime(dateTime, this.internalDateFormat + ' ' + this.internalTimeFormat);
7299
+ convertFromInternalFormat(dateTimeStr, defautValue) {
7300
+ try {
7301
+ return core$1.utils.strToDateTime(dateTimeStr, this.internalDateFormat + ' ' + this.internalTimeFormat);
7302
+ }
7303
+ catch (_a) {
7304
+ return defautValue || new Date();
7305
+ }
7281
7306
  }
7282
7307
  convertToInternalFormat(dateTime) {
7283
7308
  return core$1.i18n.dateTimeToStr(dateTime, this.internalDateFormat + ' ' + this.internalTimeFormat);
@@ -7791,7 +7816,7 @@ class QueryPanel extends core.Widget {
7791
7816
  if (typeof this.options.editableParts === "undefined") {
7792
7817
  this.options.editableParts = exports.QPEditablePart.All;
7793
7818
  }
7794
- if (exports.browserUtils.isMobileMode()) {
7819
+ if (ui.browserUtils.isMobileMode()) {
7795
7820
  this.options.buttons = this.options.buttons || {};
7796
7821
  this.options.buttons.condition = ["menu"];
7797
7822
  this.options.buttons.group = ["menu"];
@@ -7809,7 +7834,7 @@ class QueryPanel extends core.Widget {
7809
7834
  .toDOM();
7810
7835
  ui.domel(this.slot)
7811
7836
  .removeClass(eqCssMobile)
7812
- .addClass(exports.browserUtils.getMobileCssClass());
7837
+ .addClass(getMobileCssClass());
7813
7838
  const query = this.getQuery();
7814
7839
  const root = query.getRootCondition();
7815
7840
  const renderer = this.getConditionRenderer(root, this.rootContainer);
@@ -8128,7 +8153,7 @@ class QueryPanel extends core.Widget {
8128
8153
  renderProgressBlock() {
8129
8154
  this.progressBlock = document.createElement('div');
8130
8155
  this.progressBlock.classList.add(`${eqCssPrefix}-progress-win8`);
8131
- this.progressBlock.classList.add(exports.browserUtils.getMobileCssClass());
8156
+ this.progressBlock.classList.add(getMobileCssClass());
8132
8157
  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
8158
  }
8134
8159
  clonePanel(slot, query) {
@@ -8244,7 +8269,7 @@ class FilterBar extends core.Widget {
8244
8269
  render() {
8245
8270
  ui.domel(this.slot)
8246
8271
  .addClass(`${this.cssPrefix}-container`)
8247
- .addClass(exports.browserUtils.getMobileCssClass())
8272
+ .addClass(getMobileCssClass())
8248
8273
  .addChild('div', builder => this.headerElement = builder
8249
8274
  .addClass(`${this.cssPrefix}-header`)
8250
8275
  .addChild('div', builder => this.headerIconElement = builder
@@ -8290,14 +8315,14 @@ class FilterBar extends core.Widget {
8290
8315
  .toDOM())
8291
8316
  .addChild('div', builder => this.qpBlock = builder
8292
8317
  .addClass(`${this.cssPrefix}-querypanelblock`)
8293
- .addClass(exports.browserUtils.getMobileCssClass())
8318
+ .addClass(getMobileCssClass())
8294
8319
  .hide()
8295
8320
  .addChildElement(this.qpElement)
8296
8321
  .toDOM());
8297
8322
  if (this.options.showApplyButton || this.options.showClearButton) {
8298
8323
  this.buttonsBlock = ui.domel('div', this.qpBlock)
8299
8324
  .addClass(`${this.cssPrefix}-buttonsblock`)
8300
- .addClass(exports.browserUtils.getMobileCssClass())
8325
+ .addClass(getMobileCssClass())
8301
8326
  .toDOM();
8302
8327
  }
8303
8328
  if (this.options.showApplyButton) {
@@ -9082,7 +9107,7 @@ class ResultFacet {
9082
9107
  let b = ui.domel('div')
9083
9108
  .addClass('kfrm-form')
9084
9109
  .addChild('div', b => fieldsContainer = b
9085
- .addClass(`${exports.browserUtils.isIE()
9110
+ .addClass(`${ui.browserUtils.isIE()
9086
9111
  ? 'kfrm-fields-ie col-ie-1-4 label-align-right'
9087
9112
  : 'kfrm-fields col-a-1 label-align-right'}`)
9088
9113
  .toDOM());
@@ -9091,7 +9116,7 @@ class ResultFacet {
9091
9116
  }
9092
9117
  renderFormFields(form, fieldsContainer) {
9093
9118
  let cont = fieldsContainer;
9094
- if (exports.browserUtils.isIE()) {
9119
+ if (ui.browserUtils.isIE()) {
9095
9120
  cont = ui.domel('div', fieldsContainer)
9096
9121
  .addClass('kfrm-field-ie')
9097
9122
  .toDOM();
@@ -9894,7 +9919,7 @@ class ChartFacet extends ResultFacet {
9894
9919
  }
9895
9920
  renderFormFields(form, fieldsContainer) {
9896
9921
  super.renderFormFields(form, fieldsContainer);
9897
- const isIE = exports.browserUtils.isIE();
9922
+ const isIE = ui.browserUtils.isIE();
9898
9923
  const horizClass = isIE ? 'kfrm-fields-ie is-horizontal' : 'kfrm-fields is-horizontal';
9899
9924
  // Chart type
9900
9925
  let chartTypeSelector = document.createElement('select');
@@ -10086,6 +10111,7 @@ class PivotTableFacet extends ResultFacet {
10086
10111
  this.title = core$1.i18n.getText('Facets', 'Pivot', 'FacetTitle');
10087
10112
  this.dialogTitle = core$1.i18n.getText('Facets', 'Pivot', 'DlgTitle');
10088
10113
  this.pivotTable = new core$1.EasyDataTable();
10114
+ this.settings = {};
10089
10115
  }
10090
10116
  init(slot) {
10091
10117
  super.init(slot);
@@ -10218,7 +10244,7 @@ class PivotTableFacet extends ResultFacet {
10218
10244
  core$1.DataType.Int64, core$1.DataType.Word, core$1.DataType.Byte];
10219
10245
  const fieldTypes = [core$1.DataType.String, core$1.DataType.Float, core$1.DataType.Int32,
10220
10246
  core$1.DataType.Int64, core$1.DataType.Word, core$1.DataType.Byte, core$1.DataType.Currency];
10221
- const isIE = exports.browserUtils.isIE();
10247
+ const isIE = ui.browserUtils.isIE();
10222
10248
  let current = fieldsContainer;
10223
10249
  const horizClass = isIE ? 'kfrm-fields-ie is-horizontal' : 'kfrm-fields is-horizontal';
10224
10250
  const getCurrent = () => {
@@ -10366,14 +10392,14 @@ class PivotTableFacet extends ResultFacet {
10366
10392
  saveToData() {
10367
10393
  const data = super.saveToData();
10368
10394
  if (this.settings) {
10369
- core$1.utils.assignDeep(data, this.settings);
10395
+ core$1.utils.assign(data, this.settings);
10370
10396
  }
10371
10397
  return data;
10372
10398
  }
10373
10399
  loadFromData(data) {
10374
10400
  super.loadFromData(data);
10375
10401
  if (data) {
10376
- this.settings = core$1.utils.assignDeep(this.settings, data);
10402
+ this.settings = core$1.utils.assign(this.settings, data);
10377
10403
  if (this.settings.aggrFunc == 'AVERAGE') {
10378
10404
  this.settings.aggrFunc = AggrFunc.Average;
10379
10405
  }
@@ -10962,7 +10988,7 @@ class ResultFacetsPanel extends FacetContainer {
10962
10988
  this._processBlock = ui.domel('div')
10963
10989
  .addClass(`${this.cssPrefix}-spinner`)
10964
10990
  .addChild('div', b => b
10965
- .addClass(`${eqCssPrefix}-progress-win8`, exports.browserUtils.getMobileCssClass())
10991
+ .addClass(`${eqCssPrefix}-progress-win8`, getMobileCssClass())
10966
10992
  .addHtml(html))
10967
10993
  .toDOM();
10968
10994
  }
@@ -11934,7 +11960,7 @@ class AggregationBar extends core.Widget {
11934
11960
  }
11935
11961
  render() {
11936
11962
  this.slot.classList.add(`${this.cssPrefix}-panel`);
11937
- const mobClass = exports.browserUtils.getMobileCssClass();
11963
+ const mobClass = getMobileCssClass();
11938
11964
  if (mobClass) {
11939
11965
  this.slot.classList.add(mobClass);
11940
11966
  }
@@ -12067,7 +12093,7 @@ class QueryNameWidget extends core.Widget {
12067
12093
  }
12068
12094
  render() {
12069
12095
  this.slot.classList.add(`${this.cssPrefix}`);
12070
- const mobClass = exports.browserUtils.getMobileCssClass();
12096
+ const mobClass = getMobileCssClass();
12071
12097
  if (mobClass) {
12072
12098
  this.slot.classList.add(mobClass);
12073
12099
  }
@@ -12175,7 +12201,7 @@ class View {
12175
12201
  }
12176
12202
  initOptions(options) {
12177
12203
  options = core$1.utils.assignDeep(this.defaultViewOptions, options);
12178
- // support old format
12204
+ // support old format
12179
12205
  if (!options.widgets.easyGrid) {
12180
12206
  options.widgets.easyGrid = options.widgets.resultGrid || {};
12181
12207
  }
@@ -12405,7 +12431,7 @@ class View {
12405
12431
  this._spinnerDiv = ui.domel('div')
12406
12432
  .addClass(`eqjs-result-spinner`)
12407
12433
  .addChild('div', b => b
12408
- .addClass(`${eqCssPrefix}-progress-win8`, exports.browserUtils.getMobileCssClass())
12434
+ .addClass(`${eqCssPrefix}-progress-win8`, getMobileCssClass())
12409
12435
  .addHtml(html))
12410
12436
  .toDOM();
12411
12437
  }
@@ -12629,6 +12655,9 @@ class View {
12629
12655
  this.domRoots = [document];
12630
12656
  this.resetContext();
12631
12657
  }
12658
+ refreshWidgets(groups) {
12659
+ this.context.refreshWidgets(groups);
12660
+ }
12632
12661
  }
12633
12662
 
12634
12663
  /**
@@ -12906,8 +12935,12 @@ class AdvancedSearchView extends View {
12906
12935
  });
12907
12936
  }
12908
12937
  clearQueryButtonClick() {
12909
- this.context.clearQuery();
12910
- this.context.refreshWidgets(core.WidgetGroup.Statement);
12938
+ this.showQueryClearDialog((result) => {
12939
+ if (result) {
12940
+ this.context.clearQuery();
12941
+ this.context.refreshWidgets(core.WidgetGroup.Statement);
12942
+ }
12943
+ });
12911
12944
  }
12912
12945
  createNewQuery(options) {
12913
12946
  return this.context.newQuery(options);
@@ -12937,22 +12970,43 @@ class AdvancedSearchView extends View {
12937
12970
  saveCurrentQuery(copyQuery = false, callback) {
12938
12971
  const query = this.context.getQuery();
12939
12972
  if (query.isNewbie || copyQuery) {
12940
- this.showSaveQueryDialog((result) => new Promise(resolve => {
12941
- if (!result)
12973
+ this.showSaveQueryDialog((newQueryName) => new Promise(resolve => {
12974
+ if (!newQueryName)
12942
12975
  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 }));
12976
+ this.checkSaveQueryName(newQueryName)
12977
+ .then(() => {
12978
+ query.regenerateId();
12979
+ query.setName(newQueryName);
12980
+ query.fireChangedEvent({
12981
+ part: core.QueryChangePart.Properties,
12982
+ wasModified: true
12983
+ });
12984
+ this.saveQuery(() => { resolve({ success: true }); }, (error) => resolve({ success: false, message: error }));
12985
+ }, (message) => resolve({ success: false, message }));
12950
12986
  }));
12951
12987
  }
12952
12988
  else {
12953
12989
  this.saveQuery(callback);
12954
12990
  }
12955
12991
  }
12992
+ checkSaveQueryName(name) {
12993
+ return new Promise((resolve, reject) => {
12994
+ this.context.loadQueryList({
12995
+ success: (queryList) => {
12996
+ const found = queryList.filter(item => item.name.toLowerCase() == name.toLowerCase());
12997
+ if (found.length == 0) {
12998
+ resolve();
12999
+ }
13000
+ else {
13001
+ reject("Can't save the query. A query with this name already exists.");
13002
+ }
13003
+ },
13004
+ error: (message) => {
13005
+ reject(message);
13006
+ }
13007
+ });
13008
+ });
13009
+ }
12956
13010
  checkIfQueryModified(callback) {
12957
13011
  if (this.context.getQuery().isModified()
12958
13012
  && !this.viewOptions.disableConfirmationOnQueryChange) {
@@ -13031,6 +13085,10 @@ class AdvancedSearchView extends View {
13031
13085
  }
13032
13086
  });
13033
13087
  }
13088
+ showQueryClearDialog(callback) {
13089
+ const ds = this.getDialogService();
13090
+ ds.openConfirm(core$1.i18n.getText('QueryChangedTitle'), core$1.i18n.getText('QueryClearContent'), callback);
13091
+ }
13034
13092
  showQueryChangedDialog(callback) {
13035
13093
  const ds = this.getDialogService();
13036
13094
  ds.openConfirm(core$1.i18n.getText('QueryChangedTitle'), core$1.i18n.getText('QueryChangedContent'), callback);
@@ -13124,7 +13182,7 @@ class AdvancedSearchView extends View {
13124
13182
  });
13125
13183
  }
13126
13184
  renderSaveToFileDialogBody(name, format = "json") {
13127
- const isIE = exports.browserUtils.isIE();
13185
+ const isIE = ui.browserUtils.isIE();
13128
13186
  const fieldsClass = isIE
13129
13187
  ? 'kfrm-fields-ie col-ie-1-4 label-align-right'
13130
13188
  : 'kfrm-fields col-a-1 label-align-right';
@@ -13419,7 +13477,7 @@ class ReportView extends View {
13419
13477
  this.saveReportButtonClickHandler = this.saveReportButtonClick.bind(this);
13420
13478
  this.removeReportButtonClickHandler = this.removeReportButtonClick.bind(this);
13421
13479
  this.reloadReportDataButtonClickHandler = this.reloadReportDataButtonClick.bind(this);
13422
- exports.browserUtils.onMobileModeChanged(_ => {
13480
+ ui.browserUtils.onMobileModeChanged(_ => {
13423
13481
  document.location.reload();
13424
13482
  });
13425
13483
  }
@@ -14190,6 +14248,7 @@ function addEasyQueryUITexts() {
14190
14248
  CmdDeleteColumn: 'Delete column',
14191
14249
  CmdDeleteSorting: 'Delete sorting',
14192
14250
  CmdDescending: 'Descending',
14251
+ CmdGroupAppearance: 'Appearance',
14193
14252
  CmdGroupSort: 'Sorting',
14194
14253
  CmdGroupFormat: 'Display format',
14195
14254
  CmdNotSorted: 'Not sorted',
@@ -14237,6 +14296,7 @@ function addEasyQueryUITexts() {
14237
14296
  SaveQueryDefName: '{queryName} copy',
14238
14297
  QueryChangedTitle: 'Confirmation',
14239
14298
  QueryChangedContent: 'The query was changed. Do you want to save it first?',
14299
+ QueryClearContent: 'The query will cleared. Do you want to continue?',
14240
14300
  UpdateQuerySelector: '[click here to load the query]',
14241
14301
  FileNameLabel: 'File name: ',
14242
14302
  SaveQueryToFileDlgTitle: 'Save query to file',