datavis-glide 4.0.0-PRE.0

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 (62) hide show
  1. package/LICENSE +45 -0
  2. package/README.md +129 -0
  3. package/datavis.js +101 -0
  4. package/dist/wcdatavis.css +1957 -0
  5. package/dist/wcdatavis.min.js +1 -0
  6. package/global-jquery.js +4 -0
  7. package/ie-fixes.js +13 -0
  8. package/index.js +70 -0
  9. package/meteor.js +1 -0
  10. package/package.json +102 -0
  11. package/src/flags.js +6 -0
  12. package/src/graph.js +1079 -0
  13. package/src/graph_renderer.js +85 -0
  14. package/src/grid.js +2777 -0
  15. package/src/grid_control.js +1957 -0
  16. package/src/grid_filter.js +1073 -0
  17. package/src/grid_renderer.js +276 -0
  18. package/src/group_fun_win.js +121 -0
  19. package/src/lang/en-US.js +188 -0
  20. package/src/lang/es-MX.js +188 -0
  21. package/src/lang/fr-FR.js +188 -0
  22. package/src/lang/id-ID.js +188 -0
  23. package/src/lang/nl-NL.js +188 -0
  24. package/src/lang/pt-BR.js +188 -0
  25. package/src/lang/ru-RU.js +188 -0
  26. package/src/lang/th-TH.js +188 -0
  27. package/src/lang/vi-VN.js +188 -0
  28. package/src/lang/zh-Hans-CN.js +188 -0
  29. package/src/operations_palette.js +176 -0
  30. package/src/prefs_modules.js +132 -0
  31. package/src/reg/graph_renderer.js +17 -0
  32. package/src/renderers/graph/chartjs.js +457 -0
  33. package/src/renderers/graph/google.js +584 -0
  34. package/src/renderers/graph/jit.js +61 -0
  35. package/src/renderers/graph/svelte-gantt.js +168 -0
  36. package/src/renderers/grid/dummy.js +79 -0
  37. package/src/renderers/grid/handlebars.js +217 -0
  38. package/src/renderers/grid/squirrelly.js +215 -0
  39. package/src/renderers/grid/table/group_detail.js +1404 -0
  40. package/src/renderers/grid/table/group_summary.js +380 -0
  41. package/src/renderers/grid/table/pivot.js +915 -0
  42. package/src/renderers/grid/table/plain.js +1592 -0
  43. package/src/renderers/grid/table.js +2510 -0
  44. package/src/trans.js +101 -0
  45. package/src/ui/collapsible.js +234 -0
  46. package/src/ui/filters/date.js +283 -0
  47. package/src/ui/grid_filter.js +398 -0
  48. package/src/ui/popup_menu.js +224 -0
  49. package/src/ui/popup_window.js +572 -0
  50. package/src/ui/slider.js +156 -0
  51. package/src/ui/tabs.js +202 -0
  52. package/src/ui/templates.js +131 -0
  53. package/src/ui/toolbar.js +63 -0
  54. package/src/ui/toolbars/grid.js +873 -0
  55. package/src/ui/windows/col_config.js +341 -0
  56. package/src/ui/windows/debug.js +164 -0
  57. package/src/ui/windows/grid_table_opts.js +139 -0
  58. package/src/util/handlebars.js +158 -0
  59. package/src/util/jquery.js +630 -0
  60. package/src/util/misc.js +1058 -0
  61. package/src/util/squirrelly.js +155 -0
  62. package/wcdatavis.css +1601 -0
package/src/trans.js ADDED
@@ -0,0 +1,101 @@
1
+ import {sprintf} from 'sprintf-js';
2
+ import { OrdMap } from 'datavis-ace';
3
+
4
+ import trans_enUs from './lang/en-US.js';
5
+ import trans_esMx from './lang/es-MX.js';
6
+ import trans_frFr from './lang/fr-FR.js';
7
+ import trans_idId from './lang/id-ID.js';
8
+ import trans_nlNl from './lang/nl-NL.js';
9
+ import trans_ptBr from './lang/pt-BR.js';
10
+ import trans_ruRu from './lang/ru-RU.js';
11
+ import trans_thTh from './lang/th-TH.js';
12
+ import trans_viVn from './lang/vi-VN.js';
13
+ import trans_zhHansCn from './lang/zh-Hans-CN.js';
14
+
15
+ var TRANSLATION_REGISTRY = new OrdMap();
16
+
17
+ TRANSLATION_REGISTRY.set('EN', trans_enUs);
18
+ TRANSLATION_REGISTRY.set('EN-US', trans_enUs);
19
+
20
+ TRANSLATION_REGISTRY.set('ES', trans_esMx);
21
+ TRANSLATION_REGISTRY.set('ES-MX', trans_esMx);
22
+
23
+ TRANSLATION_REGISTRY.set('FR', trans_frFr);
24
+ TRANSLATION_REGISTRY.set('FR-FR', trans_frFr);
25
+
26
+ TRANSLATION_REGISTRY.set('ID', trans_idId);
27
+ TRANSLATION_REGISTRY.set('ID-ID', trans_idId);
28
+
29
+ TRANSLATION_REGISTRY.set('NL', trans_nlNl);
30
+ TRANSLATION_REGISTRY.set('NL-NL', trans_nlNl);
31
+
32
+ TRANSLATION_REGISTRY.set('PT', trans_ptBr);
33
+ TRANSLATION_REGISTRY.set('PT-BR', trans_ptBr);
34
+
35
+ TRANSLATION_REGISTRY.set('RU', trans_ruRu);
36
+ TRANSLATION_REGISTRY.set('RU-RU', trans_ruRu);
37
+
38
+ TRANSLATION_REGISTRY.set('TH', trans_thTh);
39
+ TRANSLATION_REGISTRY.set('TH-TH', trans_thTh);
40
+
41
+ TRANSLATION_REGISTRY.set('VI', trans_viVn);
42
+ TRANSLATION_REGISTRY.set('VI-VN', trans_viVn);
43
+
44
+ TRANSLATION_REGISTRY.set('ZH', trans_zhHansCn);
45
+ TRANSLATION_REGISTRY.set('ZH-HANS', trans_zhHansCn);
46
+ TRANSLATION_REGISTRY.set('ZH-HANS-CN', trans_zhHansCn);
47
+
48
+ var trans = (function () {
49
+ var alreadyWarnedAboutLang = {};
50
+
51
+ return function () {
52
+ var args = Array.prototype.slice.call(arguments);
53
+ var k = args.shift()
54
+ , lang = window.DATAVIS_LANG;
55
+
56
+ //if (lang == null && window.Intl && window.Intl.Locale) {
57
+ // lang = window.Intl.Locale().language;
58
+ //}
59
+
60
+ if (lang == null) {
61
+ // Check for the region-specific language first.
62
+ if (TRANSLATION_REGISTRY.isSet(navigator.language.toUpperCase())) {
63
+ lang = navigator.language;
64
+ }
65
+ else {
66
+ lang = navigator.language.split('-')[0];
67
+ }
68
+ }
69
+
70
+ if (!TRANSLATION_REGISTRY.isSet(lang.toUpperCase())) {
71
+ if (!alreadyWarnedAboutLang[lang]) {
72
+ console.error('Missing DataVis translation info for language "' + lang + '"');
73
+ alreadyWarnedAboutLang[lang] = true;
74
+ }
75
+ }
76
+ else if (TRANSLATION_REGISTRY.get(lang.toUpperCase())[k] == null) {
77
+ console.error('Missing DataVis translation for key "' + k + '" in locale "' + lang + '"');
78
+ }
79
+
80
+ var s = (TRANSLATION_REGISTRY.get(lang.toUpperCase()) || {})[k]
81
+ || (TRANSLATION_REGISTRY.get('EN') || {})[k]
82
+ || k;
83
+
84
+ if (args.length > 0) {
85
+ args.unshift(s);
86
+ s = sprintf.apply(null, args);
87
+ }
88
+
89
+ if (lang === 'xx') {
90
+ // x-ing a paragrab
91
+ s = s.replace(/[A-Za-z]/g, 'x');
92
+ }
93
+
94
+ return s;
95
+ };
96
+ })();
97
+
98
+ export {
99
+ trans,
100
+ TRANSLATION_REGISTRY,
101
+ };
@@ -0,0 +1,234 @@
1
+ import jQuery from 'jquery';
2
+ import {
3
+ icon,
4
+ makeSubclass,
5
+ } from '../util/misc.js';
6
+
7
+ // Collapsible {{{1
8
+
9
+ /**
10
+ * A lightweight accordion-style collapsible sections widget.
11
+ *
12
+ * Sections are added via {@link Collapsible#addSection}. By default, clicking a header
13
+ * calls {@link Collapsible#switchSection} which closes all other sections and opens the
14
+ * clicked one (exclusive / accordion behavior).
15
+ *
16
+ * @class
17
+ *
18
+ * @param {Element|jQuery} container
19
+ * The element the collapsible widget will be built inside.
20
+ *
21
+ * @property {object} ui
22
+ * @property {jQuery} ui.root
23
+ */
24
+
25
+ var Collapsible = makeSubclass('Collapsible', Object, function (container) {
26
+ var self = this;
27
+
28
+ self._container = jQuery(container);
29
+ self._sections = [];
30
+ self._idPrefix = 'wcdv-coll-' + Math.random().toString(36).substr(2, 9);
31
+ self.ui = {};
32
+
33
+ self._build();
34
+ });
35
+
36
+ // #_build {{{2
37
+
38
+ /**
39
+ * Build the DOM skeleton for the collapsible widget.
40
+ * @private
41
+ */
42
+
43
+ Collapsible.prototype._build = function () {
44
+ var self = this;
45
+
46
+ self.ui.root = jQuery('<div>', {
47
+ 'class': 'wcdv-collapsible'
48
+ });
49
+
50
+ self._container.append(self.ui.root);
51
+ };
52
+
53
+ // #addSection {{{2
54
+
55
+ /**
56
+ * Add a new collapsible section.
57
+ *
58
+ * @param {string} label
59
+ * The text shown on the section header.
60
+ *
61
+ * @param {Element|jQuery} contentElt
62
+ * The content element placed into the panel.
63
+ *
64
+ * @returns {number}
65
+ * The zero-based index of the new section.
66
+ */
67
+
68
+ Collapsible.prototype.addSection = function (label, contentElt) {
69
+ var self = this;
70
+
71
+ var index = self._sections.length;
72
+ var headerId = self._idPrefix + '-header-' + index;
73
+ var panelId = self._idPrefix + '-panel-' + index;
74
+
75
+ var iconEl = jQuery('<span>', {
76
+ 'class': 'wcdv-collapsible-icon'
77
+ }).append(icon('chevron-right'));
78
+
79
+ var title = jQuery('<span>', {
80
+ 'class': 'wcdv-collapsible-title'
81
+ }).text(label);
82
+
83
+ var header = jQuery('<div>', {
84
+ 'class': 'wcdv-collapsible-header',
85
+ id: headerId,
86
+ role: 'button',
87
+ 'aria-expanded': 'false',
88
+ 'aria-controls': panelId,
89
+ tabindex: '0'
90
+ }).append(iconEl)
91
+ .append(title);
92
+
93
+ (function (idx) {
94
+ header.on('click', function () {
95
+ self.switchSection(idx);
96
+ });
97
+ header.on('keydown', function (e) {
98
+ var key = e.which || e.keyCode;
99
+ // Enter = 13, Space = 32
100
+ if (key === 13 || key === 32) {
101
+ e.preventDefault();
102
+ self.switchSection(idx);
103
+ }
104
+ });
105
+ })(index);
106
+
107
+ var panel = jQuery('<div>', {
108
+ 'class': 'wcdv-collapsible-panel',
109
+ role: 'region',
110
+ id: panelId,
111
+ 'aria-labelledby': headerId
112
+ }).append(jQuery(contentElt));
113
+
114
+ var section = jQuery('<div>', {
115
+ 'class': 'wcdv-collapsible-section'
116
+ }).append(header)
117
+ .append(panel);
118
+
119
+ self.ui.root.append(section);
120
+
121
+ self._sections.push({
122
+ label: label,
123
+ sectionEl: section,
124
+ headerEl: header,
125
+ panelEl: panel,
126
+ isOpen: false
127
+ });
128
+
129
+ // Auto-open first section.
130
+ if (self._sections.length === 1) {
131
+ self.openSection(0);
132
+ }
133
+
134
+ return index;
135
+ };
136
+
137
+ // #openSection {{{2
138
+
139
+ /**
140
+ * Expand the section at the given index.
141
+ *
142
+ * @param {number} index
143
+ * Zero-based section index.
144
+ */
145
+
146
+ Collapsible.prototype.openSection = function (index) {
147
+ var self = this;
148
+
149
+ if (index < 0 || index >= self._sections.length) {
150
+ return;
151
+ }
152
+
153
+ var sec = self._sections[index];
154
+ if (sec.isOpen) {
155
+ return;
156
+ }
157
+
158
+ sec.sectionEl.addClass('wcdv-collapsible-section-open');
159
+ sec.headerEl.attr('aria-expanded', 'true');
160
+ sec.isOpen = true;
161
+ };
162
+
163
+ // #closeSection {{{2
164
+
165
+ /**
166
+ * Collapse the section at the given index.
167
+ *
168
+ * @param {number} index
169
+ * Zero-based section index.
170
+ */
171
+
172
+ Collapsible.prototype.closeSection = function (index) {
173
+ var self = this;
174
+
175
+ if (index < 0 || index >= self._sections.length) {
176
+ return;
177
+ }
178
+
179
+ var sec = self._sections[index];
180
+ if (!sec.isOpen) {
181
+ return;
182
+ }
183
+
184
+ sec.sectionEl.removeClass('wcdv-collapsible-section-open');
185
+ sec.headerEl.attr('aria-expanded', 'false');
186
+ sec.isOpen = false;
187
+ };
188
+
189
+ // #switchSection {{{2
190
+
191
+ /**
192
+ * Exclusive switch: close all other sections and open the specified one.
193
+ * If the section is already the only one open, this is a no-op.
194
+ *
195
+ * @param {number} index
196
+ * Zero-based section index.
197
+ */
198
+
199
+ Collapsible.prototype.switchSection = function (index) {
200
+ var self = this;
201
+
202
+ if (index < 0 || index >= self._sections.length) {
203
+ return;
204
+ }
205
+
206
+ for (var i = 0; i < self._sections.length; i++) {
207
+ if (i !== index) {
208
+ self.closeSection(i);
209
+ }
210
+ }
211
+
212
+ self.openSection(index);
213
+ };
214
+
215
+ // #destroy {{{2
216
+
217
+ /**
218
+ * Remove all DOM created by this widget and release references.
219
+ */
220
+
221
+ Collapsible.prototype.destroy = function () {
222
+ var self = this;
223
+
224
+ if (self.ui.root) {
225
+ self.ui.root.remove();
226
+ self.ui.root = null;
227
+ }
228
+ self._sections = [];
229
+ self._container = null;
230
+ };
231
+
232
+ export {
233
+ Collapsible
234
+ };
@@ -0,0 +1,283 @@
1
+ import _ from 'underscore';
2
+ import moment from 'moment';
3
+ import jQuery from 'jquery';
4
+
5
+ import { makeSubclass } from '../../util/misc.js';
6
+ import { trans } from '../../trans.js';
7
+
8
+ import GridFilter from '../grid_filter.js';
9
+
10
+ var DateFilter = makeSubclass('DateFilter', GridFilter, function () {
11
+ var self = this;
12
+
13
+ GridFilter.apply(self, arguments);
14
+
15
+ self.limit = 1;
16
+
17
+ self.operatorDrop = self.makeOperatorDrop();
18
+
19
+ var everyOpts = {
20
+ day: [
21
+ 'MONDAY'
22
+ , 'TUESDAY'
23
+ , 'WEDNESDAY'
24
+ , 'THURSDAY'
25
+ , 'FRIDAY'
26
+ , 'SATURDAY'
27
+ , 'SUNDAY'
28
+ ],
29
+ month: [
30
+ 'JANUARY'
31
+ , 'FEBRUARY'
32
+ , 'MARCH'
33
+ , 'APRIL'
34
+ , 'MAY'
35
+ , 'JUNE'
36
+ , 'JULY'
37
+ , 'AUGUST'
38
+ , 'SEPTEMBER'
39
+ , 'OCTOBER'
40
+ , 'NOVEMBER'
41
+ , 'DECEMBER'
42
+ ]
43
+ };
44
+ var lastOpts = [
45
+ 'DATE'
46
+ , 'WEEK'
47
+ , 'MONTH'
48
+ , 'QUARTER'
49
+ , 'YEAR'
50
+ ];
51
+ self.inputs = {};
52
+ // used for: on, before, after
53
+ self.inputs.single = jQuery('<input>').attr({
54
+ type: self.typeInfo.type === 'date' ? 'date' : 'datetime-local'
55
+ }).on('blur', function () {
56
+ self.gridFilterSet.update(false);
57
+ });
58
+ // used for: between
59
+ self.inputs.range = jQuery('<div>');
60
+ self.inputs.rangeStart = jQuery('<input>').attr({
61
+ type: self.typeInfo.type === 'date' ? 'date' : 'datetime-local'
62
+ }).on('blur', function () {
63
+ self.gridFilterSet.update(false);
64
+ });
65
+ self.inputs.rangeEnd = jQuery('<input>').attr({
66
+ type: self.typeInfo.type === 'date' ? 'date' : 'datetime-local'
67
+ }).on('blur', function () {
68
+ self.gridFilterSet.update(false);
69
+ });
70
+ self.inputs.range
71
+ .append(self.inputs.rangeStart)
72
+ .append(' – ')
73
+ .append(self.inputs.rangeEnd);
74
+ // used for: every
75
+ self.inputs.every = jQuery('<div>');
76
+ self.inputs.everyDay = jQuery('<select>').on('change', function () {
77
+ self.gridFilterSet.update(false);
78
+ });
79
+ self.inputs.everyMonth = jQuery('<select>').on('change', function () {
80
+ self.gridFilterSet.update(false);
81
+ });
82
+ _.each(everyOpts.day, function (v) {
83
+ self.inputs.everyDay.append(jQuery('<option>', {value: v}).text(trans('CALENDAR.DAY.' + v)));
84
+ });
85
+ _.each(everyOpts.month, function (v) {
86
+ self.inputs.everyMonth.append(jQuery('<option>', {value: v}).text(trans('CALENDAR.MONTH.' + v)));
87
+ });
88
+ self.inputs.everyDropdown = jQuery('<select>')
89
+ .css({'margin-right': '0.5em'})
90
+ .append(jQuery('<option>', {value: 'DAY'}).text(trans('CALENDAR.DAY')))
91
+ .append(jQuery('<option>', {value: 'MONTH'}).text(trans('CALENDAR.MONTH')))
92
+ .on('change', function () {
93
+ self.inputs.everyDay.hide();
94
+ self.inputs.everyMonth.hide();
95
+ switch (this.value) {
96
+ case 'DAY':
97
+ self.inputs.everyDay.show();
98
+ break;
99
+ case 'MONTH':
100
+ self.inputs.everyMonth.show();
101
+ break;
102
+ }
103
+ self.gridFilterSet.update(false);
104
+ });
105
+ self.inputs.every
106
+ .append(self.inputs.everyDropdown.show())
107
+ .append(self.inputs.everyDay.show())
108
+ .append(self.inputs.everyMonth.hide());
109
+ // used for: this, last
110
+ self.inputs.last = jQuery('<select>').on('change', function () {
111
+ self.gridFilterSet.update(false);
112
+ });
113
+ _.each(lastOpts, function (v) {
114
+ self.inputs.last.append(jQuery('<option>', {value: v}).text(trans('CALENDAR.' + v)));
115
+ });
116
+
117
+ self.div
118
+ .append(self.operatorDrop)
119
+ .append(self.inputs.single.show())
120
+ .append(self.inputs.range.hide())
121
+ .append(self.inputs.every.hide())
122
+ .append(self.inputs.last.hide());
123
+
124
+ if (self.removeBtn) {
125
+ self.div.append(self.removeBtn);
126
+ }
127
+ });
128
+
129
+ DateFilter.prototype.makeOperatorDrop = function () {
130
+ var self = this;
131
+
132
+ var operators = [
133
+ ['$eq', 'ON'],
134
+ ['$bet', 'BETWEEN'],
135
+ ['$lte', 'BEFORE'],
136
+ ['$gte', 'AFTER'],
137
+ ['$every', 'EVERY'],
138
+ ['$this', 'CURRENT'],
139
+ ['$last', 'LAST'],
140
+ ];
141
+
142
+ var operatorDrop = jQuery('<select>');
143
+
144
+ operatorDrop.css({'margin-right': '0.5em'});
145
+
146
+ _.each(operators, function (op) {
147
+ var value = op[0]
148
+ , name = op[1];
149
+ operatorDrop.append(jQuery('<option>', { value: value }).text(trans('FILTER.DATE.OPERATOR.' + name)));
150
+ });
151
+
152
+ operatorDrop.on('change', function () {
153
+ self.inputs.single.hide();
154
+ self.inputs.range.hide();
155
+ self.inputs.every.hide();
156
+ self.inputs.last.hide();
157
+
158
+ switch (this.value) {
159
+ case '$eq':
160
+ case '$ne':
161
+ case '$lte':
162
+ case '$gte':
163
+ self.inputs.single.show();
164
+ break;
165
+ case '$bet':
166
+ self.inputs.range.show();
167
+ break;
168
+ case '$every':
169
+ self.inputs.every.show();
170
+ break;
171
+ case '$this':
172
+ case '$last':
173
+ self.inputs.last.show();
174
+ break;
175
+ }
176
+
177
+ self.gridFilterSet.update();
178
+ });
179
+
180
+ return operatorDrop;
181
+ };
182
+
183
+ DateFilter.prototype.getValue = function () {
184
+ var self = this
185
+ , result;
186
+
187
+ switch (self.getOperator()) {
188
+ case '$eq':
189
+ case '$ne':
190
+ case '$gte':
191
+ case '$lte':
192
+ if (self.inputs.single.val() === '') {
193
+ // User hasn't entered a complete value in the date input.
194
+ break;
195
+ }
196
+ result = self.typeInfo.type === 'date' ? self.inputs.single.val()
197
+ : self.inputs.single.val().replace('T', ' ');
198
+ if (self.typeInfo.internalType === 'moment') {
199
+ result = moment(result);
200
+ }
201
+ break;
202
+ case '$bet':
203
+ if (self.inputs.rangeStart.val() === '' || self.inputs.rangeEnd.val() === '') {
204
+ // User hasn't entered a complete value in the date input.
205
+ break;
206
+ }
207
+
208
+ switch (self.typeInfo.type) {
209
+ case 'date':
210
+ result = [
211
+ self.inputs.rangeStart.val()
212
+ , self.inputs.rangeEnd.val()
213
+ ];
214
+ break;
215
+ case 'datetime':
216
+ result = [
217
+ self.inputs.rangeStart.val().replace('T', ' ')
218
+ , self.inputs.rangeEnd.val().replace('T', ' ')
219
+ ];
220
+ break;
221
+ }
222
+
223
+ if (self.typeInfo.internalType === 'moment') {
224
+ result[0] = moment(result[0]);
225
+ result[1] = moment(result[1]);
226
+ }
227
+
228
+ break;
229
+ case '$every':
230
+ result = self.inputs.everyDropdown.val() === 'DAY' ? self.inputs.everyDay.val()
231
+ : self.inputs.everyDropdown.val() === 'MONTH' ? self.inputs.everyMonth.val()
232
+ : null;
233
+ break;
234
+ case '$this':
235
+ case '$last':
236
+ result = self.inputs.last.val();
237
+ break;
238
+ }
239
+
240
+ return result;
241
+ };
242
+
243
+ DateFilter.prototype.setValue = function (val1, val2) {
244
+ var self = this;
245
+
246
+ switch (self.getOperator()) {
247
+ case '$bet':
248
+ self.inputs.rangeStart.val(val1);
249
+ self.inputs.rangeEnd.val(val2);
250
+ break;
251
+ case '$eq':
252
+ case '$ne':
253
+ case '$lte':
254
+ case '$gte':
255
+ self.inputs.single.val(val1);
256
+ break;
257
+ case '$every':
258
+ var days = ['MONDAY', 'TUESDAY', 'WEDNESDAY', 'THURSDAY', 'FRIDAY', 'SATURDAY', 'SUNDAY'];
259
+ var months = ['JANUARY', 'FEBRUARY', 'MARCH', 'APRIL', 'MAY', 'JUNE', 'JULY', 'AUGUST', 'SEPTEMBER', 'OCTOBER', 'NOVEMBER', 'DECEMBER'];
260
+
261
+ var dayIdx = days.indexOf(val1);
262
+ var monthIdx = months.indexOf(val1);
263
+
264
+ if (dayIdx >= 0) {
265
+ self.inputs.everyDropdown.val('DAY').change();
266
+ self.inputs.everyDay.val(val1);
267
+ }
268
+ else if (monthIdx >= 0) {
269
+ self.inputs.everyDropdown.val('MONTH').change();
270
+ self.inputs.everyMonth.val(val1);
271
+ }
272
+ else {
273
+ console.error('Invalid filter for operator "' + self.getOperator() + '" and value "' + val1 + '"');
274
+ }
275
+ break;
276
+ case '$this':
277
+ case '$last':
278
+ self.inputs.last.val(val1);
279
+ break;
280
+ }
281
+ };
282
+
283
+ export default DateFilter;