marty 8.5.0 → 9.3.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.
- checksums.yaml +4 -4
- data/.eslintignore +1 -0
- data/.eslintrc.js +26 -0
- data/.gitignore +3 -0
- data/.gitlab-ci.yml +7 -0
- data/.prettierignore +14 -0
- data/.rubocop_todo.yml +1 -1
- data/Dockerfile.dummy +3 -0
- data/Makefile +1 -0
- data/app/assets/javascripts/marty/cable.js +7 -3
- data/app/assets/javascripts/marty/extjs/extensions/datetime_field/component.js +401 -0
- data/app/assets/javascripts/marty/extjs/extensions/datetime_field/field.js +140 -0
- data/app/assets/javascripts/marty/extjs/extensions/marty.js +845 -781
- data/app/assets/stylesheets/marty/codemirror/codemirror.css +215 -77
- data/app/assets/stylesheets/marty/codemirror/delorean.css +2 -2
- data/app/assets/stylesheets/marty/dark_mode.css +13 -3
- data/app/components/marty/auth_app/client/auth_app.js +107 -102
- data/app/components/marty/base_rule_view/client/base_rule_view.js +10 -8
- data/app/components/marty/data_grid_view/client/data_grid_edit.js +534 -519
- data/app/components/marty/form/client/form.js +3 -3
- data/app/components/marty/grid/client/grid.js +110 -87
- data/app/components/marty/import_view/client/import_view.js +18 -18
- data/app/components/marty/live_search_grid_panel/client/live_search_grid_panel.js +14 -13
- data/app/components/marty/main_auth_app/client/main_auth_app.js +42 -42
- data/app/components/marty/mcfly_grid_panel/client/mcfly_grid_panel.js +27 -18
- data/app/components/marty/new_posting_form/client/new_posting_form.js +3 -3
- data/app/components/marty/panel/client/panel.js +3 -3
- data/app/components/marty/posting_grid/client/posting_grid.js +24 -18
- data/app/components/marty/promise_view/client/promise_view.css +12 -12
- data/app/components/marty/promise_view/client/promise_view.js +46 -38
- data/app/components/marty/report_form/client/report_form.js +30 -28
- data/app/components/marty/report_select/client/report_select.js +28 -23
- data/app/components/marty/reporting/client/reporting.js +3 -3
- data/app/components/marty/script_form/client/script_form.js +29 -23
- data/app/components/marty/script_tester/client/script_tester.js +4 -5
- data/app/components/marty/scripting/client/scripting.js +40 -36
- data/app/components/marty/simple_app/client/simple_app.js +33 -24
- data/app/components/marty/simple_app/client/statusbar_ext.js +1 -1
- data/app/controllers/marty/rpc_controller.rb +3 -0
- data/app/models/marty/promise.rb +10 -2
- data/app/services/marty/data_grid/constraint.rb +2 -1
- data/app/services/marty/jobs/schedule.rb +2 -2
- data/app/services/marty/promises/delorean/create.rb +9 -2
- data/app/services/marty/promises/ruby/create.rb +7 -2
- data/config/initializers/delayed_job_config.rb +1 -0
- data/delorean/blame_report.dl +50 -58
- data/delorean/enum_report.dl +2 -3
- data/delorean/{marty_fields.dl → fields.dl} +16 -0
- data/delorean/styles.dl +216 -0
- data/delorean/table_report.dl +4 -4
- data/lib/marty/monkey.rb +17 -0
- data/lib/marty/promise_job.rb +9 -0
- data/lib/marty/promise_ruby_job.rb +8 -0
- data/lib/marty/version.rb +1 -1
- data/make-lint.mk +19 -0
- data/package.json +16 -0
- data/prettier.config.js +6 -0
- data/spec/controllers/diagnostic/controller_spec.rb +0 -1
- data/spec/controllers/rpc_controller_spec.rb +21 -7
- data/spec/dummy/delorean/data_report.dl +4 -4
- data/spec/dummy/delorean/fields.dl +1 -0
- data/spec/features/data_grid_spec.rb +37 -1
- data/spec/job_helper.rb +6 -0
- data/spec/lib/data_blame_spec.rb +4 -4
- data/spec/lib/data_importer_spec.rb +6 -4
- data/spec/models/promise_spec.rb +31 -0
- data/spec/spec_helper.rb +8 -0
- data/spec/support/download_helper.rb +53 -49
- data/spec/support/json_helper.rb +11 -0
- data/spec/support/shared_connection_db_helpers.rb +1 -0
- data/spec/support/suite.rb +20 -14
- data/yarn.lock +967 -0
- metadata +16 -4
- data/spec/dummy/delorean/marty_fields.dl +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7fd7c45cf6825476a774ee84fe6b3f9bff603e022747ecc5079cda8a037a869b
|
4
|
+
data.tar.gz: 48fdb90df6cb49e720fc4446975f8b55205eaa560a23af60a49b1d02769127cf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 81813549a4614fa1191c466a5506ec2d36796e21e6d45dec4eb8bf054e0614a01c1c2bf1a0539e2afdc980c81e22a32bcdce2749d27634bf65c6f491e058978d
|
7
|
+
data.tar.gz: be097e58e928782e89761d4980218e417c2df6c5fa9a28233c4449feed3df1a5492a244ce7211cb604471e7188e08d5b8e923921948b7614dcc6a873cab60af6
|
data/.eslintignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
app/assets/javascripts/marty/codemirror/*
|
data/.eslintrc.js
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
module.exports = {
|
2
|
+
env: {
|
3
|
+
browser: true,
|
4
|
+
es6: true,
|
5
|
+
},
|
6
|
+
extends: ["eslint:recommended", "prettier"],
|
7
|
+
globals: {
|
8
|
+
RailsApp: "writable",
|
9
|
+
ActionCable: "readonly",
|
10
|
+
Ext: "readonly",
|
11
|
+
CodeMirror: "readonly"
|
12
|
+
},
|
13
|
+
parserOptions: {
|
14
|
+
ecmaVersion: 6,
|
15
|
+
},
|
16
|
+
plugins: ["prettier"],
|
17
|
+
rules: {
|
18
|
+
"no-var": ["error"],
|
19
|
+
"prefer-const": ["error"],
|
20
|
+
"linebreak-style": ["error", "unix"],
|
21
|
+
"quotes": [2, "double", { "avoidEscape": true }],
|
22
|
+
"no-unused-vars": ["error", { "args": "after-used", "argsIgnorePattern": "^_" }],
|
23
|
+
"object-shorthand": ["error", "always"],
|
24
|
+
"no-constant-condition": ["error", { "checkLoops": false }]
|
25
|
+
}
|
26
|
+
};
|
data/.gitignore
CHANGED
data/.gitlab-ci.yml
CHANGED
@@ -14,6 +14,7 @@ before_script:
|
|
14
14
|
interruptible: true
|
15
15
|
# Run only when there is an MR
|
16
16
|
only:
|
17
|
+
- master
|
17
18
|
- merge_requests
|
18
19
|
|
19
20
|
stage: test
|
@@ -30,6 +31,12 @@ rubocop:
|
|
30
31
|
script:
|
31
32
|
- bundle exec rubocop
|
32
33
|
|
34
|
+
eslint-prettier:
|
35
|
+
extends: .base-test
|
36
|
+
script:
|
37
|
+
- yarn
|
38
|
+
- make lint-js
|
39
|
+
|
33
40
|
rspec (controllers):
|
34
41
|
extends: .base-test
|
35
42
|
script:
|
data/.prettierignore
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
# Files ignored by Prettier.
|
2
|
+
.gitignore
|
3
|
+
.dockerignore
|
4
|
+
.editorconfig
|
5
|
+
.prettierignore
|
6
|
+
.browserslistrc
|
7
|
+
.env.local*
|
8
|
+
.ssh-docker/*
|
9
|
+
yarn.lock
|
10
|
+
Makefile
|
11
|
+
Dockerfile
|
12
|
+
docker-compose.yml
|
13
|
+
docker-entrypoint.sh
|
14
|
+
app/assets/javascripts/marty/codemirror/**/*
|
data/.rubocop_todo.yml
CHANGED
@@ -1024,5 +1024,5 @@ Style/WordArray:
|
|
1024
1024
|
# Cop supports --auto-correct.
|
1025
1025
|
# Configuration parameters: AutoCorrect, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
|
1026
1026
|
# URISchemes: http, https
|
1027
|
-
|
1027
|
+
Layout/LineLength:
|
1028
1028
|
Max: 100
|
data/Dockerfile.dummy
CHANGED
@@ -49,6 +49,9 @@ RUN export VERSION="node_${NODE_VER}" DISTRO="$(lsb_release -s -c)" && \
|
|
49
49
|
apt-get -o Acquire::Check-Valid-Until=false update && \
|
50
50
|
apt-get install -qq -y --no-install-recommends nodejs
|
51
51
|
|
52
|
+
# Install Yarn
|
53
|
+
RUN curl -o- -L https://yarnpkg.com/install.sh | bash
|
54
|
+
|
52
55
|
# Install chrome for integration tests
|
53
56
|
RUN curl -L -o google-chrome.deb https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb \
|
54
57
|
&& dpkg -i google-chrome.deb || true \
|
data/Makefile
CHANGED
@@ -5,8 +5,12 @@
|
|
5
5
|
this.RailsApp || (this.RailsApp = {});
|
6
6
|
|
7
7
|
if (window.location.port === "") {
|
8
|
-
RailsApp.cable = ActionCable.createConsumer(
|
8
|
+
RailsApp.cable = ActionCable.createConsumer(
|
9
|
+
`ws://${window.location.hostname}/cable`
|
10
|
+
);
|
9
11
|
} else {
|
10
|
-
RailsApp.cable = ActionCable.createConsumer(
|
12
|
+
RailsApp.cable = ActionCable.createConsumer(
|
13
|
+
`ws://${window.location.hostname}:${window.location.port}/cable`
|
14
|
+
);
|
11
15
|
}
|
12
|
-
}
|
16
|
+
}.call(this));
|
@@ -0,0 +1,401 @@
|
|
1
|
+
/*
|
2
|
+
* File: DateTimePicker.js
|
3
|
+
*
|
4
|
+
* This file requires use of the Ext JS library, under independent license.
|
5
|
+
* This is part of the UX for DateTimeField developed by Guilherme Portela
|
6
|
+
*/
|
7
|
+
|
8
|
+
Ext.define("Ext.ux.DateTimePicker", {
|
9
|
+
extend: "Ext.picker.Date",
|
10
|
+
alias: "widget.datetimepicker",
|
11
|
+
requires: [
|
12
|
+
"Ext.picker.Date",
|
13
|
+
"Ext.slider.Single",
|
14
|
+
"Ext.form.field.Time",
|
15
|
+
"Ext.form.Label"
|
16
|
+
],
|
17
|
+
// <locale>
|
18
|
+
/**
|
19
|
+
* @cfg {String} todayText
|
20
|
+
* The default text that will be displayed in the calendar to pick the curent date.
|
21
|
+
*/
|
22
|
+
todayText: "Current Date",
|
23
|
+
// </locale>
|
24
|
+
// <locale>
|
25
|
+
/**
|
26
|
+
* @cfg {String} hourText
|
27
|
+
* The default text displayed above the hour slider
|
28
|
+
*/
|
29
|
+
hourText: "Hour",
|
30
|
+
// </locale>
|
31
|
+
// <locale>
|
32
|
+
/**
|
33
|
+
* @cfg {String} minuteText
|
34
|
+
* The default text displayed above the minute slider
|
35
|
+
*/
|
36
|
+
minuteText: "Minutes",
|
37
|
+
// </locale>
|
38
|
+
|
39
|
+
/**
|
40
|
+
* @cfg {Object} hourSliderConfig
|
41
|
+
* A config object that will be applied to the hour slider. Any of the config options available for
|
42
|
+
* {@link Ext.slider.Single} can be specified here.
|
43
|
+
*/
|
44
|
+
|
45
|
+
/**
|
46
|
+
* @cfg {Object} minuteSliderConfig
|
47
|
+
* A config object that will be applied to the minute slider. Any of the config options available for
|
48
|
+
* {@link Ext.slider.Single} can be specified here.
|
49
|
+
*/
|
50
|
+
|
51
|
+
/**
|
52
|
+
* @cfg {Object} timePickerConfig
|
53
|
+
* A config object that will be applied to the time picker. Any of the config options available for
|
54
|
+
* {@link Ext.panel.Panel} can be specified here.
|
55
|
+
*/
|
56
|
+
|
57
|
+
initEvents() {
|
58
|
+
const me = this,
|
59
|
+
eDate = Ext.Date,
|
60
|
+
day = eDate.DAY;
|
61
|
+
|
62
|
+
Ext.apply(me.keyNavConfig, {
|
63
|
+
up: (e) => {
|
64
|
+
if (e.ctrlKey) {
|
65
|
+
if (e.shiftKey) {
|
66
|
+
me.minuteSlider.setValue(me.minuteSlider.getValue() + 1);
|
67
|
+
} else {
|
68
|
+
me.showNextYear();
|
69
|
+
}
|
70
|
+
} else {
|
71
|
+
if (e.shiftKey) {
|
72
|
+
me.hourSlider.setValue(me.hourSlider.getValue() + 1);
|
73
|
+
} else {
|
74
|
+
me.update(eDate.add(me.activeDate, day, -7));
|
75
|
+
}
|
76
|
+
}
|
77
|
+
},
|
78
|
+
|
79
|
+
down: (e) => {
|
80
|
+
if (e.ctrlKey) {
|
81
|
+
if (e.shiftKey) {
|
82
|
+
me.minuteSlider.setValue(me.minuteSlider.getValue() - 1);
|
83
|
+
} else {
|
84
|
+
me.showPrevYear();
|
85
|
+
}
|
86
|
+
} else {
|
87
|
+
if (e.shiftKey) {
|
88
|
+
me.hourSlider.setValue(me.hourSlider.getValue() - 1);
|
89
|
+
} else {
|
90
|
+
me.update(eDate.add(me.activeDate, day, 7));
|
91
|
+
}
|
92
|
+
}
|
93
|
+
}
|
94
|
+
});
|
95
|
+
me.callParent();
|
96
|
+
},
|
97
|
+
|
98
|
+
initComponent() {
|
99
|
+
const me = this;
|
100
|
+
|
101
|
+
if (typeof me.value === "string") {
|
102
|
+
me.value = Ext.Date.parse(me.value, me.format);
|
103
|
+
} else if (!me.value) {
|
104
|
+
me.value = new Date();
|
105
|
+
}
|
106
|
+
|
107
|
+
const dtAux = me.value;
|
108
|
+
|
109
|
+
dtAux.setSeconds(0);
|
110
|
+
|
111
|
+
me.timeFormat = me.format.indexOf("h") !== -1 ? "h" : "H";
|
112
|
+
me.hourSlider = new Ext.slider.Single(
|
113
|
+
Ext.Object.merge(
|
114
|
+
{
|
115
|
+
fieldLabel: me.hourText,
|
116
|
+
labelAlign: "top",
|
117
|
+
labelSeparator: " ",
|
118
|
+
padding: "0 0 10 17",
|
119
|
+
focusable: false,
|
120
|
+
value: 0,
|
121
|
+
minValue: 0,
|
122
|
+
maxValue: 23,
|
123
|
+
vertical: true,
|
124
|
+
tipText: (thumb) => {
|
125
|
+
const value = thumb.value;
|
126
|
+
|
127
|
+
if (me.timeFormat === "H") {
|
128
|
+
return value || "0";
|
129
|
+
} else {
|
130
|
+
return value && value - 12 <= 0 ? value : Math.abs(value - 12);
|
131
|
+
}
|
132
|
+
}
|
133
|
+
},
|
134
|
+
me.hourSliderConfig
|
135
|
+
)
|
136
|
+
);
|
137
|
+
|
138
|
+
me.minuteSlider = new Ext.slider.Single(
|
139
|
+
Ext.Object.merge(
|
140
|
+
{
|
141
|
+
fieldLabel: me.minuteText,
|
142
|
+
labelAlign: "top",
|
143
|
+
labelSeparator: " ",
|
144
|
+
padding: "0 10 10 0",
|
145
|
+
focusable: false,
|
146
|
+
value: 0,
|
147
|
+
increment: 1,
|
148
|
+
minValue: 0,
|
149
|
+
maxValue: 59,
|
150
|
+
vertical: true
|
151
|
+
},
|
152
|
+
me.minuteSliderConfig
|
153
|
+
)
|
154
|
+
);
|
155
|
+
|
156
|
+
me.timePicker = new Ext.panel.Panel(
|
157
|
+
Ext.Object.merge(
|
158
|
+
{
|
159
|
+
layout: {
|
160
|
+
type: "hbox",
|
161
|
+
align: "stretch"
|
162
|
+
},
|
163
|
+
border: false,
|
164
|
+
defaults: {
|
165
|
+
flex: 1
|
166
|
+
},
|
167
|
+
width: 130,
|
168
|
+
floating: true,
|
169
|
+
dockedItems: [
|
170
|
+
{
|
171
|
+
xtype: "toolbar",
|
172
|
+
dock: "top",
|
173
|
+
ui: "footer",
|
174
|
+
items: [
|
175
|
+
"->",
|
176
|
+
{
|
177
|
+
xtype: "label",
|
178
|
+
text: me.timeFormat == "h" ? "12:00 AM" : "00:00"
|
179
|
+
},
|
180
|
+
"->"
|
181
|
+
]
|
182
|
+
}
|
183
|
+
],
|
184
|
+
items: [me.hourSlider, me.minuteSlider],
|
185
|
+
onMouseDown: (e) => {
|
186
|
+
e.preventDefault();
|
187
|
+
}
|
188
|
+
},
|
189
|
+
me.timePickerConfig
|
190
|
+
)
|
191
|
+
);
|
192
|
+
|
193
|
+
me.callParent();
|
194
|
+
me.ownerCt = me.up("[floating]");
|
195
|
+
me.timePicker.ownerCt = me.ownerCt;
|
196
|
+
me.registerWithOwnerCt();
|
197
|
+
me.timePicker.registerWithOwnerCt();
|
198
|
+
me.setValue(new Date(dtAux));
|
199
|
+
me.hourSlider.addListener("change", me.changeTimeValue, me);
|
200
|
+
me.minuteSlider.addListener("change", me.changeTimeValue, me);
|
201
|
+
},
|
202
|
+
|
203
|
+
handleTabClick(e) {
|
204
|
+
this.handleDateClick(e, this.activeCell.firstChild, true);
|
205
|
+
},
|
206
|
+
|
207
|
+
getSelectedDate(date) {
|
208
|
+
const me = this,
|
209
|
+
t = Ext.Date.clearTime(date, true).getTime(),
|
210
|
+
cells = me.cells,
|
211
|
+
cls = me.selectedCls,
|
212
|
+
cellItems = cells.elements,
|
213
|
+
cLen = cellItems.length;
|
214
|
+
|
215
|
+
let cell, c;
|
216
|
+
|
217
|
+
cells.removeCls(cls);
|
218
|
+
|
219
|
+
for (c = 0; c < cLen; c++) {
|
220
|
+
cell = cellItems[c].firstChild;
|
221
|
+
if (cell.dateValue === t) {
|
222
|
+
return cell;
|
223
|
+
}
|
224
|
+
}
|
225
|
+
return null;
|
226
|
+
},
|
227
|
+
|
228
|
+
changeTimeValue(slider) {
|
229
|
+
const me = this,
|
230
|
+
label = me.timePicker.down("label"),
|
231
|
+
minutePrefix = me.minuteSlider.getValue() < 10 ? "0" : "";
|
232
|
+
|
233
|
+
let hourDisplay = me.hourSlider.getValue(),
|
234
|
+
pickerValue,
|
235
|
+
timeSufix,
|
236
|
+
auxValue;
|
237
|
+
|
238
|
+
if (me.timeFormat == "h") {
|
239
|
+
timeSufix = me.hourSlider.getValue() < 12 ? " AM" : " PM";
|
240
|
+
hourDisplay =
|
241
|
+
me.hourSlider.getValue() < 13 ? hourDisplay : hourDisplay - 12;
|
242
|
+
hourDisplay = hourDisplay || "12";
|
243
|
+
}
|
244
|
+
|
245
|
+
const hourPrefix = hourDisplay < 10 ? "0" : "";
|
246
|
+
|
247
|
+
label.setText(
|
248
|
+
hourPrefix +
|
249
|
+
hourDisplay +
|
250
|
+
":" +
|
251
|
+
minutePrefix +
|
252
|
+
me.minuteSlider.getValue() +
|
253
|
+
(timeSufix || "")
|
254
|
+
);
|
255
|
+
|
256
|
+
if (me.pickerField && (pickerValue = me.pickerField.getValue())) {
|
257
|
+
auxValue = new Date(
|
258
|
+
pickerValue[slider == me.hourSlider ? "setHours" : "setMinutes"](
|
259
|
+
slider.getValue()
|
260
|
+
)
|
261
|
+
);
|
262
|
+
me.pickerField.setValue(auxValue);
|
263
|
+
me.pickerField.fireEvent("select", me.pickerField, auxValue);
|
264
|
+
}
|
265
|
+
},
|
266
|
+
|
267
|
+
afterShow(animateTarget, callback, scope) {
|
268
|
+
const me = this;
|
269
|
+
|
270
|
+
me.callParent([animateTarget, callback, scope]);
|
271
|
+
me.timePicker.show();
|
272
|
+
|
273
|
+
// this is a workaround for the classic theme, where the time
|
274
|
+
// panel would have a transparent background with the classic theme.
|
275
|
+
const timePickerToolbarEl = me.timePicker.down("toolbar").getEl();
|
276
|
+
const backgroundColor = timePickerToolbarEl.getStyle("background-color");
|
277
|
+
if (backgroundColor == "transparent") {
|
278
|
+
timePickerToolbarEl.setStyle(
|
279
|
+
"background-color",
|
280
|
+
timePickerToolbarEl.getStyle("border-color")
|
281
|
+
);
|
282
|
+
}
|
283
|
+
},
|
284
|
+
|
285
|
+
afterSetPosition(x, y) {
|
286
|
+
this.callParent([x, y]);
|
287
|
+
this.alignTimePicker();
|
288
|
+
},
|
289
|
+
|
290
|
+
alignTimePicker() {
|
291
|
+
const me = this,
|
292
|
+
el = me.el,
|
293
|
+
alignTo = me.getTimePickerSide(),
|
294
|
+
xPos = alignTo == "tl" ? -1 * me.timePicker.getWidth() - 5 : 5;
|
295
|
+
|
296
|
+
me.timePicker.setHeight(el.getHeight());
|
297
|
+
me.timePicker.showBy(me, alignTo, [xPos, 0]);
|
298
|
+
},
|
299
|
+
|
300
|
+
onHide() {
|
301
|
+
const me = this;
|
302
|
+
me.timePicker.hide();
|
303
|
+
me.callParent();
|
304
|
+
},
|
305
|
+
|
306
|
+
beforeDestroy() {
|
307
|
+
const me = this;
|
308
|
+
|
309
|
+
if (me.rendered) {
|
310
|
+
Ext.destroy(me.timePicker, me.minuteSlider, me.hourSlider);
|
311
|
+
}
|
312
|
+
me.callParent();
|
313
|
+
},
|
314
|
+
|
315
|
+
getTimePickerSide() {
|
316
|
+
const el = this.el,
|
317
|
+
body = Ext.getBody(),
|
318
|
+
bodyWidth = body.getViewSize().width;
|
319
|
+
|
320
|
+
return bodyWidth < el.getX() + el.getWidth() + 140 ? "tl" : "tr";
|
321
|
+
},
|
322
|
+
|
323
|
+
setValue(value) {
|
324
|
+
value = value || new Date();
|
325
|
+
|
326
|
+
value.setSeconds(0);
|
327
|
+
this.value = new Date(value);
|
328
|
+
return this.update(this.value);
|
329
|
+
},
|
330
|
+
|
331
|
+
selectToday() {
|
332
|
+
const me = this,
|
333
|
+
btn = me.todayBtn,
|
334
|
+
handler = me.handler,
|
335
|
+
auxDate = new Date();
|
336
|
+
|
337
|
+
if (btn && !btn.disabled) {
|
338
|
+
me.setValue(new Date(auxDate.setSeconds(0)));
|
339
|
+
me.fireEvent("select", me, me.value);
|
340
|
+
if (handler) {
|
341
|
+
handler.call(me.scope || me, me, me.value);
|
342
|
+
}
|
343
|
+
me.onSelect();
|
344
|
+
}
|
345
|
+
return me;
|
346
|
+
},
|
347
|
+
|
348
|
+
handleDateClick(e, t, /*private*/ blockStopEvent) {
|
349
|
+
const me = this,
|
350
|
+
handler = me.handler,
|
351
|
+
hourSet = me.timePicker.items.items[0].getValue(),
|
352
|
+
minuteSet = me.timePicker.items.items[1].getValue(),
|
353
|
+
auxDate = new Date(t.dateValue);
|
354
|
+
|
355
|
+
if (blockStopEvent !== true) {
|
356
|
+
e.stopEvent();
|
357
|
+
}
|
358
|
+
|
359
|
+
if (
|
360
|
+
!me.disabled &&
|
361
|
+
t.dateValue &&
|
362
|
+
!Ext.fly(t.parentNode).hasCls(me.disabledCellCls)
|
363
|
+
) {
|
364
|
+
me.doCancelFocus = me.focusOnSelect === false;
|
365
|
+
auxDate.setHours(hourSet, minuteSet, 0);
|
366
|
+
me.setValue(new Date(auxDate));
|
367
|
+
delete me.doCancelFocus;
|
368
|
+
me.fireEvent("select", me, me.value);
|
369
|
+
if (handler) {
|
370
|
+
handler.call(me.scope || me, me, me.value);
|
371
|
+
}
|
372
|
+
me.onSelect();
|
373
|
+
}
|
374
|
+
},
|
375
|
+
|
376
|
+
selectedUpdate(date) {
|
377
|
+
const me = this,
|
378
|
+
dateOnly = Ext.Date.clearTime(date, true);
|
379
|
+
|
380
|
+
this.callParent([dateOnly]);
|
381
|
+
me.updateSliders();
|
382
|
+
},
|
383
|
+
|
384
|
+
fullUpdate(date) {
|
385
|
+
const me = this,
|
386
|
+
dateOnly = Ext.Date.clearTime(date, true);
|
387
|
+
|
388
|
+
this.callParent([dateOnly]);
|
389
|
+
me.updateSliders();
|
390
|
+
},
|
391
|
+
|
392
|
+
updateSliders() {
|
393
|
+
const me = this,
|
394
|
+
currentDate = (me.pickerField && me.pickerField.getValue()) || new Date();
|
395
|
+
|
396
|
+
if (me.timePicker.rendered) {
|
397
|
+
me.hourSlider.setValue(currentDate.getHours());
|
398
|
+
me.minuteSlider.setValue(currentDate.getMinutes());
|
399
|
+
}
|
400
|
+
}
|
401
|
+
});
|