@componyx/ui 0.0.0-stage → 1.0.4
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.
- package/AppSkin/AppSkin.css +1268 -0
- package/AppSkin/AppSkin.js +2748 -0
- package/AppSkin/Themes/Default.css +241 -0
- package/Base/Base.js +3407 -0
- package/Base/ComponentIcons.css +66 -0
- package/Base/Font/ComponentIcons.woff +0 -0
- package/Base/Font/UI.woff +0 -0
- package/Base/Library.js +8432 -0
- package/Base/NavigationManager.js +462 -0
- package/Base/ResponsiveTemplates.js +371 -0
- package/Base/Sanitizer.js +288 -0
- package/Base/Themes/Default.css +255 -0
- package/Base/UI.css +618 -0
- package/Base/UIResourcePath.js +6 -0
- package/Bindary/Bindary.js +2011 -0
- package/Bindary/Modules/Connection.js +216 -0
- package/Bindary/Modules/Core.js +854 -0
- package/Bindary/Modules/DataUpdater.js +351 -0
- package/Bindary/Modules/ExpressionEngine.js +347 -0
- package/Bindary/Modules/ProxyManager.js +482 -0
- package/Bindary/Modules/Renderer.js +605 -0
- package/Bindary/Modules/Router.js +291 -0
- package/Bindary/Modules/Scroller.js +89 -0
- package/Bindary/Modules/Template.js +1273 -0
- package/BookmarkSpy/BookmarkSpy.js +430 -0
- package/Box/Box.css +36 -0
- package/Box/Box.js +1685 -0
- package/Button/Button.css +470 -0
- package/Button/Button.js +1398 -0
- package/Button/Themes/Default.css +200 -0
- package/Carousel/Carousel.css +273 -0
- package/Carousel/Carousel.js +607 -0
- package/ColorButton/ColorButton.css +39 -0
- package/ColorButton/ColorButton.js +336 -0
- package/ColorPicker/ColorPicker.css +359 -0
- package/ColorPicker/ColorPicker.js +972 -0
- package/ComboBox/ComboBox.css +357 -0
- package/ComboBox/ComboBox.js +2342 -0
- package/ComboBox/Themes/Default.css +23 -0
- package/DataPager/DataPager.css +72 -0
- package/DataPager/DataPager.js +674 -0
- package/DatePicker/DatePicker.css +227 -0
- package/DatePicker/DatePicker.js +1531 -0
- package/DatePicker/Themes/Default.css +26 -0
- package/Dialog/Dialog.css +106 -0
- package/Dialog/Dialog.js +572 -0
- package/Dialog/Themes/Default.css +10 -0
- package/Editor/Data/Emoji.json +8285 -0
- package/Editor/Data/Special.json +1042 -0
- package/Editor/Editor.css +1562 -0
- package/Editor/Editor.js +4058 -0
- package/Editor/Font/Editor.woff +0 -0
- package/Editor/Modules/ComponentFactory.js +565 -0
- package/Editor/Modules/ContentManager.js +748 -0
- package/Editor/Modules/DialogManager.js +1234 -0
- package/Editor/Modules/EventManager.js +458 -0
- package/Editor/Modules/Format.js +950 -0
- package/Editor/Modules/History.js +191 -0
- package/Editor/Modules/LayoutState.js +379 -0
- package/Editor/Modules/ListManager.js +296 -0
- package/Editor/Modules/MenuManager.js +388 -0
- package/Editor/Modules/NodeManager.js +681 -0
- package/Editor/Modules/ParagraphButtons.js +122 -0
- package/Editor/Modules/Resizer.js +176 -0
- package/Editor/Modules/SelectionRange.js +564 -0
- package/Editor/Modules/SourceViewBuilder.js +212 -0
- package/Editor/Modules/SymbolPicker.js +208 -0
- package/Editor/Modules/Table.js +2327 -0
- package/Editor/Modules/TableDialog.js +757 -0
- package/Editor/Modules/Toolbar.js +375 -0
- package/Editor/Modules/TooltipMenu.js +125 -0
- package/Editor/Modules/Utility.js +131 -0
- package/Editor/Themes/Default.css +204 -0
- package/FileUpload/FileUpload.css +156 -0
- package/FileUpload/FileUpload.js +898 -0
- package/FileUpload/Themes/Default.css +17 -0
- package/Form/Form.css +1934 -0
- package/Form/Form.js +4943 -0
- package/Form/Modules/ActionManager.js +368 -0
- package/Form/Modules/BuildPanelManager.js +319 -0
- package/Form/Modules/ComponentFactory.js +468 -0
- package/Form/Modules/ComponentPanel.js +265 -0
- package/Form/Modules/ConfigPanelManager.js +685 -0
- package/Form/Modules/DataBinder.js +602 -0
- package/Form/Modules/DataObserver.js +717 -0
- package/Form/Modules/Draggable.js +756 -0
- package/Form/Modules/OptionsPanel.js +342 -0
- package/Form/Modules/Renderer.js +1889 -0
- package/Form/Modules/RuleEngine.js +585 -0
- package/Form/Modules/RulesPanel.js +1158 -0
- package/Form/Modules/Types.js +1709 -0
- package/Form/Modules/ValidationManager.js +194 -0
- package/Form/Themes/Default.css +216 -0
- package/FormField/FormField.css +468 -0
- package/FormField/FormField.js +576 -0
- package/FormField/Themes/Default.css +99 -0
- package/Grid/Grid.css +544 -0
- package/Grid/Grid.js +3761 -0
- package/Grid/Themes/Default.css +43 -0
- package/LICENSE +126 -0
- package/MaskedTextBox/MaskedTextBox.css +28 -0
- package/MaskedTextBox/MaskedTextBox.js +642 -0
- package/MaskedTextBox/Themes/Default.css +6 -0
- package/Menu/Menu.css +328 -0
- package/Menu/Menu.js +2386 -0
- package/Menu/Themes/Default.css +24 -0
- package/NumericBox/NumericBox.css +120 -0
- package/NumericBox/NumericBox.js +984 -0
- package/PanelBar/PanelBar.css +123 -0
- package/PanelBar/PanelBar.js +505 -0
- package/PanelBar/Themes/Default.css +51 -0
- package/PieChart/PieChart.css +95 -0
- package/PieChart/PieChart.js +820 -0
- package/PieChart/Themes/Default.css +9 -0
- package/README.md +178 -3
- package/Slider/Slider.css +348 -0
- package/Slider/Slider.js +1306 -0
- package/Slider/Themes/Default.css +44 -0
- package/TabStrip/TabStrip.css +52 -0
- package/TabStrip/TabStrip.js +362 -0
- package/TabStrip/Themes/Default.css +35 -0
- package/TimePicker/Themes/Default.css +30 -0
- package/TimePicker/TimePicker.css +253 -0
- package/TimePicker/TimePicker.js +1485 -0
- package/TooltipManager/Themes/Default.css +21 -0
- package/TooltipManager/TooltipManager.css +227 -0
- package/TooltipManager/TooltipManager.js +791 -0
- package/Validator/Validator.css +54 -0
- package/Validator/Validator.js +2508 -0
- package/componyx.html-data.json +619 -0
- package/index.js +27 -0
- package/package.json +43 -4
- package/types/AppSkin.d.ts +842 -0
- package/types/Base.d.ts +1034 -0
- package/types/Bindary.d.ts +1196 -0
- package/types/BookmarkSpy.d.ts +112 -0
- package/types/Box.d.ts +374 -0
- package/types/Button.d.ts +455 -0
- package/types/Carousel.d.ts +136 -0
- package/types/ColorButton.d.ts +120 -0
- package/types/ColorPicker.d.ts +225 -0
- package/types/ComboBox.d.ts +507 -0
- package/types/DataPager.d.ts +152 -0
- package/types/DatePicker.d.ts +354 -0
- package/types/Dialog.d.ts +160 -0
- package/types/Editor.d.ts +1289 -0
- package/types/FileUpload.d.ts +206 -0
- package/types/Form.d.ts +3078 -0
- package/types/FormField.d.ts +204 -0
- package/types/Grid.d.ts +911 -0
- package/types/Library.d.ts +1899 -0
- package/types/MaskedTextBox.d.ts +91 -0
- package/types/Menu.d.ts +577 -0
- package/types/NumericBox.d.ts +310 -0
- package/types/PanelBar.d.ts +223 -0
- package/types/PieChart.d.ts +224 -0
- package/types/ResponsiveTemplates.d.ts +108 -0
- package/types/Slider.d.ts +227 -0
- package/types/TabStrip.d.ts +185 -0
- package/types/TimePicker.d.ts +265 -0
- package/types/TooltipManager.d.ts +178 -0
- package/types/UI.d.ts +29 -0
- package/types/Validator.d.ts +653 -0
- package/types/index.d.ts +59 -0
- package/ui.css +11783 -0
- package/ui.js +79477 -0
- package/ui.min.css +138 -0
- package/ui.min.js +264 -0
- package/ui.min.js.map +1 -0
package/Slider/Slider.js
ADDED
|
@@ -0,0 +1,1306 @@
|
|
|
1
|
+
/*! Componyx.UI | (c) E.H. Daanen / Componyx | BUSL-1.1 | componyx.com/license */
|
|
2
|
+
import '../Base/Base.js';
|
|
3
|
+
import '../Base/Library.js';
|
|
4
|
+
|
|
5
|
+
(function (window)
|
|
6
|
+
{
|
|
7
|
+
/**
|
|
8
|
+
* Slider class.
|
|
9
|
+
* @class
|
|
10
|
+
* @memberof componyx.UI
|
|
11
|
+
* @augments componyx.UI.base.Component
|
|
12
|
+
* @mixes componyx.UI.base.methods
|
|
13
|
+
* @param {String} id The id of the component.
|
|
14
|
+
* @param {Object|HTMLElement} properties The properties used to initialize the component or the container element.
|
|
15
|
+
* @returns {Object} An instance of the component.
|
|
16
|
+
*/
|
|
17
|
+
componyx.UI.Slider = function Slider(id, properties)
|
|
18
|
+
{
|
|
19
|
+
// define private properties
|
|
20
|
+
var _instance = this,
|
|
21
|
+
_content, _track, _range, _decreaseButton, _increaseButton, _tooltipManager, _value, _startValue, _draggableHandle, _draggableStartHandle,
|
|
22
|
+
_handlerId = [], _holdTimerId, _tooltipTimerId, _select, _cancelSelect, _selectedTicks = [], _animation, _dragging, _event,
|
|
23
|
+
_tickMarkSideOption = componyx.UI.Slider.TickMarkSideOption, _hidden, _hiddenStart, _hiddenRange;
|
|
24
|
+
$base.static.ThemeOption;
|
|
25
|
+
var _classOption =
|
|
26
|
+
{
|
|
27
|
+
ANIMATION: 'animation',
|
|
28
|
+
VERTICAL: 'vertical',
|
|
29
|
+
REVERSED: 'reversed',
|
|
30
|
+
DISABLED: 'disabled',
|
|
31
|
+
CONTENT: 'content',
|
|
32
|
+
TICK_SIDE_BEFORE: 'tick-side-before',
|
|
33
|
+
TICK_SIDE_AFTER: 'tick-side-after',
|
|
34
|
+
TICKS: 'ticks',
|
|
35
|
+
TICK_MARK: 'tick',
|
|
36
|
+
MINOR: 'minor',
|
|
37
|
+
MAJOR: 'major',
|
|
38
|
+
TRACK: 'track',
|
|
39
|
+
FIXED_TRACK_SIZE: 'fixed-track-size',
|
|
40
|
+
RANGE: 'range',
|
|
41
|
+
HANDLE: 'handle',
|
|
42
|
+
START_HANDLE: 'handle start',
|
|
43
|
+
SELECTED: 'selected',
|
|
44
|
+
SELECTED_START: 'selected-start',
|
|
45
|
+
DECREASE_BUTTON: 'button decrease',
|
|
46
|
+
INCREASE_BUTTON: 'button increase',
|
|
47
|
+
EXPAND_ICON: 'expand-icon'
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
// define public properties
|
|
51
|
+
/**
|
|
52
|
+
* Gets or sets a value indicating if the slider is rendered vertically.
|
|
53
|
+
* @type {Boolean}
|
|
54
|
+
*/
|
|
55
|
+
this.vertical = false;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Gets or sets a value indicating if the slider has a start- and end-handle to set a range.
|
|
59
|
+
* @type {Boolean}
|
|
60
|
+
*/
|
|
61
|
+
this.range = false;
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Gets or sets a value indicating if the increase and decrease buttons are displayed.
|
|
65
|
+
* @type {Boolean}
|
|
66
|
+
*/
|
|
67
|
+
this.showButtons = true;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Gets or sets a value indicating if tooltips are displayed when there are value changes.
|
|
71
|
+
* @type {Boolean}
|
|
72
|
+
*/
|
|
73
|
+
this.showTooltips = true;
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Gets or sets a value indicating if the slider is rendered in reverse direction.
|
|
77
|
+
* @type {Boolean}
|
|
78
|
+
*/
|
|
79
|
+
this.reversed = false;
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Gets or sets a value indicating if the css animation is activated when the track is selected.
|
|
83
|
+
* @type {Boolean}
|
|
84
|
+
*/
|
|
85
|
+
this.animation = true;
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Gets or sets a value indicating if the slider is disabled.
|
|
89
|
+
* @type {Boolean}
|
|
90
|
+
*/
|
|
91
|
+
this.disabled = false;
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Gets or sets a value indicating where the tickmark side is rendered.
|
|
95
|
+
* @type {componyx.UI.Slider.TickMarkSideOption}
|
|
96
|
+
*/
|
|
97
|
+
this.tickMarkSide = _tickMarkSideOption.NONE;
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Gets or sets a value indicating where the tickmark values are rendered.
|
|
101
|
+
* @type {componyx.UI.Slider.TickMarkSideOption}
|
|
102
|
+
*/
|
|
103
|
+
this.tickMarkValueSide = _tickMarkSideOption.NONE;
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Gets or sets the track size. If a track size is defined the CSS class 'fixed-track-size' is appended to the root element. You can also control the slider’s dimensions via CSS, either on the track or the root element.
|
|
107
|
+
* @type {String|Number}
|
|
108
|
+
*/
|
|
109
|
+
this.trackSize = '';
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Gets or sets the decimal separator used when displaying tickmark values.
|
|
113
|
+
* @type {String}
|
|
114
|
+
*/
|
|
115
|
+
this.decimalSeparator = '.';
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Gets or sets the decimal places used when displaying tickmark values.
|
|
119
|
+
* @type {Number}
|
|
120
|
+
*/
|
|
121
|
+
this.decimalPlaces = 0;
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Gets or sets the minimum value.
|
|
125
|
+
* @type {Number}
|
|
126
|
+
*/
|
|
127
|
+
this.minValue = 0;
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Gets or sets the maximum value.
|
|
131
|
+
* @type {Number}
|
|
132
|
+
*/
|
|
133
|
+
this.maxValue = 100;
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Gets or sets the minimum change in value.
|
|
137
|
+
* @type {Number}
|
|
138
|
+
*/
|
|
139
|
+
this.minChange = 1;
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Gets or sets the maximum change in value. If a maximum value is not set the handle can move to any clicked position in the track.
|
|
143
|
+
* @type {Number}
|
|
144
|
+
*/
|
|
145
|
+
this.maxChange = 0;
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Gets or sets the start value of the range slider.
|
|
149
|
+
* @type {Number}
|
|
150
|
+
*/
|
|
151
|
+
this.startValue = 0;
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Gets or sets the value (end value in range) of the slider. If range is set to true and this value is not set it will take the maxValue by default, otherwise it defaults to the minValue or 0.
|
|
155
|
+
* @type {Number|null}
|
|
156
|
+
*/
|
|
157
|
+
this.value = null;
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Gets or sets the amount of rendered tickmarks.
|
|
161
|
+
* @type {Number}
|
|
162
|
+
*/
|
|
163
|
+
this.tickMarks = 10;
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Gets or sets the tickmark step on which a value is rendered. 0 means never, 1 means every item, 2 means every 2nd item.
|
|
167
|
+
* @type {Number}
|
|
168
|
+
*/
|
|
169
|
+
this.tickMarkValueStep = 1;
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Gets or sets the tickmark step on which a minor tick is rendered. 0 means never, 1 means every item, 2 means every 2nd item and so on.
|
|
173
|
+
* @type {Number}
|
|
174
|
+
*/
|
|
175
|
+
this.minorTickMarkStep = 0;
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Gets or sets the tickmark step on which a major tick is rendered. 0 means never, 1 means every item, 2 means every 2nd item and so on.
|
|
179
|
+
* @type {Number}
|
|
180
|
+
*/
|
|
181
|
+
this.majorTickMarkStep = 0;
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Gets or sets the tickmark labels when text instead of a numeric value is desired.
|
|
185
|
+
* @type {Object.<number, string>}
|
|
186
|
+
*/
|
|
187
|
+
this.tickMarkLabels = {};
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Gets or sets the id of the decrease button from which the settings are cloned.
|
|
191
|
+
* @type {String|null}
|
|
192
|
+
*/
|
|
193
|
+
this.decreaseButtonId = null;
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Gets or sets the id of the increase button from which the settings are cloned.
|
|
197
|
+
* @type {String|null}
|
|
198
|
+
*/
|
|
199
|
+
this.increaseButtonId = null;
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Gets or sets the id of the tooltip manager from which the settings are cloned.
|
|
203
|
+
* @type {String|null}
|
|
204
|
+
*/
|
|
205
|
+
this.tooltipManagerId = null;
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Gets or sets the id of the hidden input from which the attributes and properties are cloned. The hidden input contains the selected value.
|
|
209
|
+
* @type {String|null}
|
|
210
|
+
*/
|
|
211
|
+
this.hiddenInputId = null;
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Gets or sets the id of the range-start hidden input from which the attributes and properties are cloned. The hidden input contains the selected range start value.
|
|
215
|
+
* @type {String|null}
|
|
216
|
+
*/
|
|
217
|
+
this.startHiddenInputId = null;
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Gets or sets the id of the range hidden input from which the attributes and properties are cloned. The hidden input contains both the selected range start and end value.
|
|
221
|
+
* @type {String|null}
|
|
222
|
+
*/
|
|
223
|
+
this.rangeHiddenInputId = null;
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* @class
|
|
228
|
+
* @augments componyx.UI.base.Events
|
|
229
|
+
* @memberof componyx.UI.Slider
|
|
230
|
+
* @property {componyx.UI.base.Event} onFocus - Event which fires when the component is focused.
|
|
231
|
+
* @property {componyx.UI.base.Event} onBlur - Event which fires when the component is blurred.
|
|
232
|
+
* @property {componyx.UI.base.Event} onChange - Event which fires when the value or start value is changed. @see {@link componyx.UI.Slider.ChangeEventArgs}
|
|
233
|
+
* @see {@link componyx.UI.base.Events}
|
|
234
|
+
*/
|
|
235
|
+
function SliderEvents(events)
|
|
236
|
+
{
|
|
237
|
+
Object.assign(this, events);
|
|
238
|
+
this.onFocus = $base.static.createEvent('onFocus');
|
|
239
|
+
this.onBlur = $base.static.createEvent('onBlur');
|
|
240
|
+
this.onChange = $base.static.createEvent('onChange');
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Slider events
|
|
245
|
+
* @type {componyx.UI.Slider.SliderEvents}
|
|
246
|
+
*/
|
|
247
|
+
this.events = new SliderEvents(this.events);
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* Slider change event arguments.
|
|
251
|
+
* @typedef {Object} ChangeEventArgs
|
|
252
|
+
* @memberof componyx.UI.Slider
|
|
253
|
+
* @property {Boolean} isStart - A value indicating if the range start value changed instead of the (end) value.
|
|
254
|
+
* @property {Number|null} value - The new value.
|
|
255
|
+
*/
|
|
256
|
+
|
|
257
|
+
// inherit base instance members
|
|
258
|
+
$base.Component.apply(this, [id, properties]);
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* Sets the value template. The template supports the below listed interpolations.
|
|
262
|
+
* - {value} This value will be replaced with the selected value or label text.
|
|
263
|
+
* @param {HTMLElement|HTMLElement[]|DocumentFragment|String} content The HTML template.
|
|
264
|
+
*/
|
|
265
|
+
this.setValueTemplate = function (content)
|
|
266
|
+
{
|
|
267
|
+
_instance.addTemplate('Value', content, false);
|
|
268
|
+
};
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Sets the start value template. The template supports the below listed interpolations.
|
|
272
|
+
* - {value} This value will be replaced with the selected value or label text.
|
|
273
|
+
* @param {HTMLElement|HTMLElement[]|DocumentFragment|String} content The HTML template.
|
|
274
|
+
*/
|
|
275
|
+
this.setStartValueTemplate = function (content)
|
|
276
|
+
{
|
|
277
|
+
_instance.addTemplate('StartValue', content, false);
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* Gets the selected slider value(s).
|
|
282
|
+
* @returns {Number|Number[]} The value for a slider or the range start and end values for a range slider.
|
|
283
|
+
*/
|
|
284
|
+
this.getValue = function ()
|
|
285
|
+
{
|
|
286
|
+
if (_instance.range)
|
|
287
|
+
return [_startValue, _value];
|
|
288
|
+
else
|
|
289
|
+
return _value;
|
|
290
|
+
};
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* Sets the (end) value.
|
|
294
|
+
* @param {Number} value The value to set.
|
|
295
|
+
*/
|
|
296
|
+
this.setValue = function (value)
|
|
297
|
+
{
|
|
298
|
+
setValue(value);
|
|
299
|
+
};
|
|
300
|
+
|
|
301
|
+
/**
|
|
302
|
+
* Sets the start value in a range slider.
|
|
303
|
+
* @param {Number} value The start value to set.
|
|
304
|
+
*/
|
|
305
|
+
this.setStartValue = function (value)
|
|
306
|
+
{
|
|
307
|
+
setStartValue(value);
|
|
308
|
+
};
|
|
309
|
+
|
|
310
|
+
/**
|
|
311
|
+
* Renders the component
|
|
312
|
+
*/
|
|
313
|
+
this.render = function ()
|
|
314
|
+
{
|
|
315
|
+
if (_instance.renderState != $base.static.RenderState.RENDERING)
|
|
316
|
+
{
|
|
317
|
+
// call base render and return
|
|
318
|
+
$base.methods.render.call(_instance, preRender, 'slider');
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
// create default templates
|
|
323
|
+
if (!_instance.hasTemplate('Value'))
|
|
324
|
+
_instance.addTemplate('Value', '{value}', true);
|
|
325
|
+
|
|
326
|
+
if (!_instance.hasTemplate('StartValue'))
|
|
327
|
+
_instance.addTemplate('StartValue', '{value}', true);
|
|
328
|
+
|
|
329
|
+
// render logic after loading resources
|
|
330
|
+
if ($lib.isEmpty(_instance.value))
|
|
331
|
+
{
|
|
332
|
+
if (_instance.range)
|
|
333
|
+
_instance.value = _instance.maxValue || 0;
|
|
334
|
+
else
|
|
335
|
+
_instance.value = _instance.minValue || 0;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
draw();
|
|
339
|
+
};
|
|
340
|
+
|
|
341
|
+
/**
|
|
342
|
+
* Handles the post render procedure.
|
|
343
|
+
*/
|
|
344
|
+
this.postRender = function ()
|
|
345
|
+
{
|
|
346
|
+
if (_instance.renderState != $base.static.RenderState.RENDERING) // extra safety to never execute a postRender when the component state is incorrect
|
|
347
|
+
return;
|
|
348
|
+
|
|
349
|
+
if (!$base.methods.postRender.call(_instance)) // component got destroyed on postrender event
|
|
350
|
+
return;
|
|
351
|
+
|
|
352
|
+
setValue(_instance.value);
|
|
353
|
+
|
|
354
|
+
if (_instance.range)
|
|
355
|
+
setStartValue(_instance.startValue);
|
|
356
|
+
else
|
|
357
|
+
updateHandleSettings();
|
|
358
|
+
};
|
|
359
|
+
|
|
360
|
+
/**
|
|
361
|
+
* Destroys the component.
|
|
362
|
+
* @see {@link componyx.UI.base.methods#destroy}
|
|
363
|
+
*/
|
|
364
|
+
this.destroy = function (...args)
|
|
365
|
+
{
|
|
366
|
+
dispose();
|
|
367
|
+
$base.methods.destroy.call(this, ...args);
|
|
368
|
+
};
|
|
369
|
+
|
|
370
|
+
function preRender()
|
|
371
|
+
{
|
|
372
|
+
return ['Slider'];
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
function draw()
|
|
376
|
+
{
|
|
377
|
+
var tickMarkValueSide = _instance.tickMarkValueSide,
|
|
378
|
+
range = _instance.range,
|
|
379
|
+
reversed = _instance.reversed;
|
|
380
|
+
|
|
381
|
+
_hidden = _instance.createSyncedInput(_instance.hiddenInputId, function ()
|
|
382
|
+
{
|
|
383
|
+
var value = this.value;
|
|
384
|
+
setValue(($lib.isEmpty(value)) ? null : parseFloat(value));
|
|
385
|
+
});
|
|
386
|
+
|
|
387
|
+
if (range)
|
|
388
|
+
{
|
|
389
|
+
_hiddenStart = _instance.createSyncedInput(_instance.startHiddenInputId, function ()
|
|
390
|
+
{
|
|
391
|
+
var value = this.value;
|
|
392
|
+
setStartValue(($lib.isEmpty(value)) ? null : parseFloat(value));
|
|
393
|
+
});
|
|
394
|
+
|
|
395
|
+
_hiddenRange = _instance.createSyncedInput(_instance.rangeHiddenInputId, function ()
|
|
396
|
+
{
|
|
397
|
+
var value = this.value;
|
|
398
|
+
|
|
399
|
+
if ($lib.isEmpty(value))
|
|
400
|
+
{
|
|
401
|
+
setValue(null);
|
|
402
|
+
setStartValue(null);
|
|
403
|
+
}
|
|
404
|
+
else
|
|
405
|
+
{
|
|
406
|
+
var values = value.split(',').map(v => v.trim()),
|
|
407
|
+
start = values[0] !== undefined && !isNaN(values[0]) ? parseFloat(values[0]) : null,
|
|
408
|
+
end = values[1] !== undefined && !isNaN(values[1]) ? parseFloat(values[1]) : null;
|
|
409
|
+
|
|
410
|
+
setStartValue(start);
|
|
411
|
+
setValue(end);
|
|
412
|
+
}
|
|
413
|
+
});
|
|
414
|
+
|
|
415
|
+
if ($lib.isEmpty(_instance.startValue) && !$lib.isEmpty(_hiddenStart.value) && !isNaN(_hiddenStart.value))
|
|
416
|
+
_instance.startValue = parseFloat(_hiddenStart.value);
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
if (_instance.vertical)
|
|
420
|
+
$lib.addClass(_instance.element, _classOption.VERTICAL);
|
|
421
|
+
|
|
422
|
+
if (reversed)
|
|
423
|
+
$lib.addClass(_instance.element, _classOption.REVERSED);
|
|
424
|
+
|
|
425
|
+
if (range)
|
|
426
|
+
$lib.addClass(_instance.element, _classOption.RANGE);
|
|
427
|
+
|
|
428
|
+
if (_instance.disabled)
|
|
429
|
+
$lib.addClass(_instance.element, _classOption.DISABLED);
|
|
430
|
+
|
|
431
|
+
if (_instance.tickMarkSide === _tickMarkSideOption.BEFORE)
|
|
432
|
+
$lib.addClass(_instance.element, _classOption.TICK_SIDE_BEFORE);
|
|
433
|
+
else if (_instance.tickMarkSide === _tickMarkSideOption.AFTER)
|
|
434
|
+
$lib.addClass(_instance.element, _classOption.TICK_SIDE_AFTER);
|
|
435
|
+
|
|
436
|
+
if (_instance.showButtons)
|
|
437
|
+
{
|
|
438
|
+
if (reversed)
|
|
439
|
+
createIncreaseButton(_instance.element);
|
|
440
|
+
else
|
|
441
|
+
createDecreaseButton(_instance.element);
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
_content = $lib.element(_instance.element, null, '', null, { "class": _classOption.CONTENT });
|
|
445
|
+
|
|
446
|
+
if (_instance.majorTickMarkStep)
|
|
447
|
+
$lib.addClass(_instance.element, _classOption.MAJOR);
|
|
448
|
+
|
|
449
|
+
if (_instance.minorTickMarkStep)
|
|
450
|
+
$lib.addClass(_instance.element, _classOption.MINOR);
|
|
451
|
+
|
|
452
|
+
createTicks(tickMarkValueSide === _tickMarkSideOption.BOTH || tickMarkValueSide === _tickMarkSideOption.BEFORE, '');
|
|
453
|
+
|
|
454
|
+
createTrack();
|
|
455
|
+
createRange();
|
|
456
|
+
|
|
457
|
+
if (range)
|
|
458
|
+
_draggableStartHandle = createDraggableHandle(_classOption.START_HANDLE, dragStartHandle);
|
|
459
|
+
|
|
460
|
+
_draggableHandle = createDraggableHandle(_classOption.HANDLE, dragHandle);
|
|
461
|
+
|
|
462
|
+
if (range && reversed)
|
|
463
|
+
switchHandles(true);
|
|
464
|
+
|
|
465
|
+
createTicks(tickMarkValueSide === _tickMarkSideOption.BOTH || tickMarkValueSide === _tickMarkSideOption.AFTER, ' after');
|
|
466
|
+
|
|
467
|
+
if (_instance.showButtons)
|
|
468
|
+
{
|
|
469
|
+
if (reversed)
|
|
470
|
+
createDecreaseButton(_instance.element);
|
|
471
|
+
else
|
|
472
|
+
createIncreaseButton(_instance.element);
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
if (_instance.showTooltips)
|
|
476
|
+
createTooltipManager();
|
|
477
|
+
|
|
478
|
+
if ($lib.isEmpty(_instance.value) && !$lib.isEmpty(_hidden.value) && !isNaN(_hidden.value))
|
|
479
|
+
_instance.value = parseFloat(_hidden.value);
|
|
480
|
+
|
|
481
|
+
bindEvents();
|
|
482
|
+
_instance.renderChildren();
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
function createTicks(withValues, cssAfter)
|
|
486
|
+
{
|
|
487
|
+
if (!_instance.tickMarks || _instance.tickMarkSide === _tickMarkSideOption.NONE)
|
|
488
|
+
return;
|
|
489
|
+
|
|
490
|
+
var ul = $lib.element(_content, null, 'ul', null, { "class": _classOption.TICKS + cssAfter }),
|
|
491
|
+
reversed = _instance.reversed,
|
|
492
|
+
ticks = _instance.tickMarks,
|
|
493
|
+
minorStep = _instance.minorTickMarkStep,
|
|
494
|
+
majorStep = _instance.majorTickMarkStep,
|
|
495
|
+
value = null, index = 0;
|
|
496
|
+
|
|
497
|
+
if ((cssAfter && _instance.tickMarkSide === _tickMarkSideOption.BEFORE) || (!cssAfter && _instance.tickMarkSide === _tickMarkSideOption.AFTER))
|
|
498
|
+
return;
|
|
499
|
+
|
|
500
|
+
if (reversed)
|
|
501
|
+
index = ticks;
|
|
502
|
+
|
|
503
|
+
for (index; (reversed) ? index >= 0 : index <= ticks; (reversed) ? --index : ++index)
|
|
504
|
+
{
|
|
505
|
+
if (withValues)
|
|
506
|
+
{
|
|
507
|
+
value = (reversed) ? _instance.maxValue - ((getValueDelta() / (ticks)) * (ticks - index)) : _instance.minValue + ((getValueDelta() / (ticks)) * index);
|
|
508
|
+
value = $.formatNumber(value, false, true, _instance.decimalPlaces, false, _instance.decimalSeparator);
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
createTickMark(ul, (withValues && index % _instance.tickMarkValueStep == 0) ? value : null, (minorStep && (index % minorStep == 0)), (majorStep && (index % majorStep == 0)));
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
function createTickMark(container, value, minorStep, majorStep)
|
|
516
|
+
{
|
|
517
|
+
var cssClass = '';
|
|
518
|
+
|
|
519
|
+
if (value != null)
|
|
520
|
+
value = ((_instance.tickMarkLabels) ? _instance.tickMarkLabels[value] || value : value).toString();
|
|
521
|
+
|
|
522
|
+
if (majorStep)
|
|
523
|
+
cssClass = ' ' + _classOption.MAJOR;
|
|
524
|
+
else if (minorStep)
|
|
525
|
+
cssClass = ' ' + _classOption.MINOR;
|
|
526
|
+
|
|
527
|
+
$lib.element(container, null, 'li', (value != null) ? $lib.element(null, null, 'b', value) : null, { "class": _classOption.TICK_MARK + cssClass });
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
function createTrack()
|
|
531
|
+
{
|
|
532
|
+
_track = $lib.element(_content, null, '', null, { "class": _classOption.TRACK });
|
|
533
|
+
|
|
534
|
+
if (_instance.trackSize)
|
|
535
|
+
{
|
|
536
|
+
_instance.element.classList.add(_classOption.FIXED_TRACK_SIZE);
|
|
537
|
+
|
|
538
|
+
if (_instance.vertical)
|
|
539
|
+
_content.style.height = $lib.unit(_instance.trackSize);
|
|
540
|
+
else
|
|
541
|
+
_content.style.width = $lib.unit(_instance.trackSize);
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
function createRange()
|
|
546
|
+
{
|
|
547
|
+
_range = $lib.element(_track, null, '', null, { "class": _classOption.RANGE });
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
function createDraggableHandle(cssClass, drag)
|
|
551
|
+
{
|
|
552
|
+
var handle = $lib.element(_content, null, 'span', null, { "class": cssClass, "tabindex": (_instance.disabled) ? '' : '0' }),
|
|
553
|
+
vertical = _instance.vertical, settings = {
|
|
554
|
+
boundaryZone: _track,
|
|
555
|
+
onDrag: function ()
|
|
556
|
+
{
|
|
557
|
+
if (!_instance.disabled)
|
|
558
|
+
$lib.defer(drag);
|
|
559
|
+
},
|
|
560
|
+
onDragEnd: function ()
|
|
561
|
+
{
|
|
562
|
+
handle.focus();
|
|
563
|
+
},
|
|
564
|
+
dragX: !_instance.disabled && !vertical,
|
|
565
|
+
dragY: !_instance.disabled && vertical,
|
|
566
|
+
ignoreBoundaryBorders: true
|
|
567
|
+
};
|
|
568
|
+
|
|
569
|
+
if ($lib.styleValue(handle, 'box-sizing', true) != 'border-box')
|
|
570
|
+
handle.style.boxSizing = 'border-box';
|
|
571
|
+
|
|
572
|
+
if (!_instance.disabled)
|
|
573
|
+
bindHandleEvents(handle);
|
|
574
|
+
|
|
575
|
+
return $lib.draggable(handle, settings);
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
function createDecreaseButton(container)
|
|
579
|
+
{
|
|
580
|
+
var direction = (_instance.vertical) ? ' up' : ' left';
|
|
581
|
+
|
|
582
|
+
if (_instance.reversed)
|
|
583
|
+
direction = (_instance.vertical) ? ' down' : ' right';
|
|
584
|
+
|
|
585
|
+
_decreaseButton = createButton(container, _instance.id + '_decrease', _classOption.DECREASE_BUTTON + direction);
|
|
586
|
+
_decreaseButton.events.onCommandClick.priorityAdd(function ()
|
|
587
|
+
{
|
|
588
|
+
if ($lib.event.type == 'keydown')
|
|
589
|
+
{
|
|
590
|
+
decrease();
|
|
591
|
+
stop();
|
|
592
|
+
}
|
|
593
|
+
});
|
|
594
|
+
|
|
595
|
+
_decreaseButton.events.onPointerDown.priorityAdd(function () { decrease(); });
|
|
596
|
+
_decreaseButton.events.onPointerUp.priorityAdd(stop);
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
function createIncreaseButton(container)
|
|
600
|
+
{
|
|
601
|
+
var direction = (_instance.vertical) ? ' down' : ' right';
|
|
602
|
+
|
|
603
|
+
if (_instance.reversed)
|
|
604
|
+
direction = (_instance.vertical) ? ' up' : ' left';
|
|
605
|
+
|
|
606
|
+
_increaseButton = createButton(container, _instance.id + '_increase', _classOption.INCREASE_BUTTON + direction);
|
|
607
|
+
_increaseButton.events.onCommandClick.priorityAdd(function ()
|
|
608
|
+
{
|
|
609
|
+
if ($lib.event.type == 'keydown')
|
|
610
|
+
{
|
|
611
|
+
increase();
|
|
612
|
+
stop();
|
|
613
|
+
}
|
|
614
|
+
});
|
|
615
|
+
|
|
616
|
+
_increaseButton.events.onPointerDown.priorityAdd(function () { increase(); });
|
|
617
|
+
_increaseButton.events.onPointerUp.priorityAdd(stop);
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
function createButton(container, id, cssClass)
|
|
621
|
+
{
|
|
622
|
+
var button = $UI.createComponent(componyx.UI.Button, { id: id, containerElement: container });
|
|
623
|
+
|
|
624
|
+
button.transparent = button.transparentBorder = button.hasIcon = true;
|
|
625
|
+
button.cssClassIcon = _classOption.EXPAND_ICON;
|
|
626
|
+
button.primary = false;
|
|
627
|
+
button.cssClass = cssClass;
|
|
628
|
+
button.clone($UI.store[_instance.buttonId], _instance);
|
|
629
|
+
button.disabled = _instance.disabled;
|
|
630
|
+
button.events.onPostRender.priorityAdd(function () { _instance.isReady.apply(_instance); }, null);
|
|
631
|
+
button.delegateFocusEvents(_instance);
|
|
632
|
+
button.showing = true;
|
|
633
|
+
|
|
634
|
+
return button;
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
function createTooltipManager()
|
|
638
|
+
{
|
|
639
|
+
var id = _instance.id + '_TooltipManager';
|
|
640
|
+
|
|
641
|
+
_tooltipManager = $UI.createComponent(componyx.UI.TooltipManager, { id: id, containerElement: _instance.element });
|
|
642
|
+
_tooltipManager.singleBoxInstance = false; // use separate box for range start and end tooltips
|
|
643
|
+
_tooltipManager.clone($UI.store[_instance.tooltipManagerId], _instance, true, true, { triggers: '' });
|
|
644
|
+
|
|
645
|
+
if (!_tooltipManager.boxId)
|
|
646
|
+
{
|
|
647
|
+
var box = $UI.createComponent(componyx.UI.Box, { id: id + '_Box', containerElement: _instance.element });
|
|
648
|
+
box.autoPosition = componyx.UI.Box.AutoPositionOption.EXPAND;
|
|
649
|
+
|
|
650
|
+
if (_instance.vertical)
|
|
651
|
+
{
|
|
652
|
+
box.alignY = componyx.UI.Box.AlignXOption.CENTER;
|
|
653
|
+
box.expandDirection = componyx.UI.Box.ExpandDirectionOption.LEFT;
|
|
654
|
+
}
|
|
655
|
+
else
|
|
656
|
+
{
|
|
657
|
+
box.alignX = componyx.UI.Box.AlignXOption.CENTER;
|
|
658
|
+
box.expandDirection = componyx.UI.Box.ExpandDirectionOption.UP;
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
|
|
662
|
+
box.autoInvertFit = true;
|
|
663
|
+
_tooltipManager.boxId = box.id;
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
_tooltipManager.showing = true;
|
|
667
|
+
_tooltipManager.events.onPostRender.priorityAdd(function () { _instance.isReady.apply(_instance); }, null);
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
function bindEvents()
|
|
671
|
+
{
|
|
672
|
+
if (_instance.showTooltips)
|
|
673
|
+
{
|
|
674
|
+
_instance.events.onFocus.priorityAdd(function ()
|
|
675
|
+
{
|
|
676
|
+
_tooltipManager.allowHide(false);
|
|
677
|
+
clearTimeout(_tooltipTimerId);
|
|
678
|
+
|
|
679
|
+
_tooltipTimerId = setTimeout(function ()
|
|
680
|
+
{
|
|
681
|
+
_tooltipManager.showTooltip(_draggableHandle.element);
|
|
682
|
+
|
|
683
|
+
if (_instance.range)
|
|
684
|
+
_tooltipManager.showTooltip(_draggableStartHandle.element);
|
|
685
|
+
}, 0);
|
|
686
|
+
});
|
|
687
|
+
|
|
688
|
+
_instance.events.onBlur.priorityAdd(function ()
|
|
689
|
+
{
|
|
690
|
+
clearTimeout(_tooltipTimerId);
|
|
691
|
+
|
|
692
|
+
_tooltipTimerId = setTimeout(function ()
|
|
693
|
+
{
|
|
694
|
+
if (_select)
|
|
695
|
+
return;
|
|
696
|
+
|
|
697
|
+
_tooltipManager.allowHide(true);
|
|
698
|
+
_tooltipManager.hideTooltip(_draggableHandle.element);
|
|
699
|
+
|
|
700
|
+
if (_instance.range)
|
|
701
|
+
_tooltipManager.hideTooltip(_draggableStartHandle.element);
|
|
702
|
+
}, 0);
|
|
703
|
+
});
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
_handlerId.push([window, 'resize', $lib.on(window, 'resize', function ()
|
|
707
|
+
{
|
|
708
|
+
var currentValue = _value;
|
|
709
|
+
_value = null; // force change
|
|
710
|
+
setValue(currentValue);
|
|
711
|
+
|
|
712
|
+
if (_draggableStartHandle)
|
|
713
|
+
{
|
|
714
|
+
currentValue = _startValue;
|
|
715
|
+
_startValue = null;
|
|
716
|
+
setStartValue(_startValue);
|
|
717
|
+
}
|
|
718
|
+
})]);
|
|
719
|
+
|
|
720
|
+
if (!_instance.disabled)
|
|
721
|
+
{
|
|
722
|
+
var eventType = 'mouseup';
|
|
723
|
+
$lib.on(document, eventType, cancelSelectState, false);
|
|
724
|
+
$lib.on(document, eventType, stop);
|
|
725
|
+
_handlerId.push([document, 'mouseup', $lib.on(document, 'mouseup', function ()
|
|
726
|
+
{
|
|
727
|
+
if (_select)
|
|
728
|
+
_select.focus();
|
|
729
|
+
|
|
730
|
+
_select = null;
|
|
731
|
+
})]);
|
|
732
|
+
|
|
733
|
+
$lib.on(_content, 'mousedown', function (e) { $lib.defer(select.bind(_instance, e)); });
|
|
734
|
+
}
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
function bindHandleEvents(handle)
|
|
738
|
+
{
|
|
739
|
+
$lib.on(handle, 'focus', _instance.onFocus, _instance, _instance);
|
|
740
|
+
$lib.on(handle, 'blur', _instance.onBlur, _instance, _instance);
|
|
741
|
+
$lib.on(handle, 'keydown', key);
|
|
742
|
+
$lib.on(handle, 'keyup', stop);
|
|
743
|
+
$lib.on(handle, 'mousedown', cancelSelectState, true);
|
|
744
|
+
$lib.on(handle, 'mousedown', animationState, false);
|
|
745
|
+
}
|
|
746
|
+
|
|
747
|
+
function showTooltip(el, value, templateId)
|
|
748
|
+
{
|
|
749
|
+
if (!_instance.showTooltips)
|
|
750
|
+
return;
|
|
751
|
+
|
|
752
|
+
var id = _instance.id + '_' + templateId,
|
|
753
|
+
div = $lib.element();
|
|
754
|
+
|
|
755
|
+
if (_instance.tickMarkLabels && _instance.tickMarkLabels[value])
|
|
756
|
+
value = _instance.tickMarkLabels[value];
|
|
757
|
+
|
|
758
|
+
_instance.applyTemplate(div, templateId, { value: value });
|
|
759
|
+
_tooltipManager.addTooltip(id, div.innerHTML); // add or update
|
|
760
|
+
|
|
761
|
+
if (!_tooltipManager.triggers.get(el))
|
|
762
|
+
_tooltipManager.addTrigger(el, id);
|
|
763
|
+
|
|
764
|
+
if (_instance.__focus || _select)
|
|
765
|
+
_tooltipManager.showTooltip(el);
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
function animationState(state)
|
|
769
|
+
{
|
|
770
|
+
if (!_instance.animation)
|
|
771
|
+
return;
|
|
772
|
+
|
|
773
|
+
_animation = state;
|
|
774
|
+
|
|
775
|
+
if (state)
|
|
776
|
+
$lib.addClass(_instance.element, _classOption.ANIMATION);
|
|
777
|
+
else
|
|
778
|
+
$lib.removeClass(_instance.element, _classOption.ANIMATION);
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
function cancelSelectState(state)
|
|
782
|
+
{
|
|
783
|
+
_cancelSelect = state;
|
|
784
|
+
}
|
|
785
|
+
|
|
786
|
+
function key(e)
|
|
787
|
+
{
|
|
788
|
+
var keyCode = e.key,
|
|
789
|
+
vertical = _instance.vertical,
|
|
790
|
+
reversed = _instance.reversed,
|
|
791
|
+
draggable = (this === _draggableHandle.element) ? _draggableHandle : _draggableStartHandle,
|
|
792
|
+
up = (keyCode == 'ArrowUp'), down = (keyCode == 'ArrowDown'),
|
|
793
|
+
left = (keyCode == 'ArrowLeft'), right = (keyCode == 'ArrowRight');
|
|
794
|
+
|
|
795
|
+
if (!(up || down || left || right))
|
|
796
|
+
return;
|
|
797
|
+
|
|
798
|
+
if ((!reversed && !vertical && (right || up)) ||
|
|
799
|
+
(!reversed && vertical && (right || down)) ||
|
|
800
|
+
(reversed && !vertical && (left || down)) ||
|
|
801
|
+
(reversed && vertical && (left || up)))
|
|
802
|
+
increase(draggable);
|
|
803
|
+
else
|
|
804
|
+
decrease(draggable);
|
|
805
|
+
|
|
806
|
+
if (up || down)
|
|
807
|
+
e.preventDefault(); // stop default page scroll
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
function select(e)
|
|
811
|
+
{
|
|
812
|
+
if (e.button > 0 || _cancelSelect)
|
|
813
|
+
return;
|
|
814
|
+
|
|
815
|
+
var vertical = _instance.vertical,
|
|
816
|
+
reversed = _instance.reversed,
|
|
817
|
+
maxChange = _instance.maxChange,
|
|
818
|
+
scroll = $lib.getScrollPosition(),
|
|
819
|
+
cursorPos = (vertical) ? $lib.clientY(e) + scroll.scrollTop : $lib.clientX(e) + scroll.scrollLeft,
|
|
820
|
+
contentPos = $lib.getPos(_content),
|
|
821
|
+
handlePos = getHandlePosition(_draggableHandle),
|
|
822
|
+
startHandlePos = (_draggableStartHandle) ? getHandlePosition(_draggableStartHandle) : null,
|
|
823
|
+
pos = cursorPos, diff, startDiff, value;
|
|
824
|
+
|
|
825
|
+
pos -= (vertical) ? contentPos.top : contentPos.left;
|
|
826
|
+
diff = Math.abs(pos - handlePos);
|
|
827
|
+
|
|
828
|
+
if (_draggableStartHandle)
|
|
829
|
+
startDiff = Math.abs(pos - startHandlePos);
|
|
830
|
+
|
|
831
|
+
value = positionToValue(pos);
|
|
832
|
+
animationState(true);
|
|
833
|
+
_dragging = false;
|
|
834
|
+
_event = e;
|
|
835
|
+
|
|
836
|
+
if (_draggableStartHandle && (startDiff < diff || (startDiff === diff && pos < startHandlePos && !reversed))) // start-handle is closer to clicked position or handles are at same position and click position was before handle
|
|
837
|
+
{
|
|
838
|
+
if (maxChange && Math.abs(_startValue - value) > maxChange)
|
|
839
|
+
value += (pos > startHandlePos && !reversed) ? maxChange : maxChange * -1; // move back or forwards
|
|
840
|
+
|
|
841
|
+
_select = _draggableStartHandle.element;
|
|
842
|
+
setStartValue(value);
|
|
843
|
+
}
|
|
844
|
+
else
|
|
845
|
+
{
|
|
846
|
+
if (maxChange && Math.abs(_value - value) > maxChange)
|
|
847
|
+
value += (pos > handlePos && !reversed) ? maxChange : maxChange * -1; // move back or forwards
|
|
848
|
+
|
|
849
|
+
_select = _draggableHandle.element;
|
|
850
|
+
setValue(value);
|
|
851
|
+
}
|
|
852
|
+
}
|
|
853
|
+
|
|
854
|
+
function dragStartHandle()
|
|
855
|
+
{
|
|
856
|
+
setDragHandle(_draggableStartHandle, setStartValue);
|
|
857
|
+
}
|
|
858
|
+
|
|
859
|
+
function dragHandle()
|
|
860
|
+
{
|
|
861
|
+
setDragHandle(_draggableHandle, setValue);
|
|
862
|
+
}
|
|
863
|
+
|
|
864
|
+
function setDragHandle(draggable, setValue)
|
|
865
|
+
{
|
|
866
|
+
let el = draggable.element,
|
|
867
|
+
elPos = $lib.getPos(el),
|
|
868
|
+
transform = el.style.transform,
|
|
869
|
+
left = el.style.left,
|
|
870
|
+
top = el.style.top;
|
|
871
|
+
|
|
872
|
+
el.style.transform = "";
|
|
873
|
+
el.style.left = el.style.top = '';
|
|
874
|
+
$.setPos(el, { left: elPos.left, top: elPos.top }); // force element at position
|
|
875
|
+
setValue(positionToValue(getHandlePosition(draggable)));
|
|
876
|
+
el.style.transform = transform;
|
|
877
|
+
el.style.left = left;
|
|
878
|
+
el.style.top = top;
|
|
879
|
+
}
|
|
880
|
+
|
|
881
|
+
function switchHandles(reverse)
|
|
882
|
+
{
|
|
883
|
+
var startHandle = _draggableStartHandle.element,
|
|
884
|
+
handle = _draggableHandle.element;
|
|
885
|
+
|
|
886
|
+
if (reverse)
|
|
887
|
+
_content.insertBefore(startHandle, handle);
|
|
888
|
+
else
|
|
889
|
+
_content.insertBefore(handle, startHandle);
|
|
890
|
+
}
|
|
891
|
+
|
|
892
|
+
function getHandlePosition(draggable)
|
|
893
|
+
{
|
|
894
|
+
var style = draggable.element.style,
|
|
895
|
+
pos = (_instance.vertical) ? style.top : style.left;
|
|
896
|
+
|
|
897
|
+
return Math.round(getNumericValue(pos));
|
|
898
|
+
}
|
|
899
|
+
|
|
900
|
+
function setStartValue(value)
|
|
901
|
+
{
|
|
902
|
+
value = validateValue(value);
|
|
903
|
+
|
|
904
|
+
if (_value != null && value > _value)
|
|
905
|
+
value = _value;
|
|
906
|
+
|
|
907
|
+
var pos = valueToPosition(value),
|
|
908
|
+
el = _draggableStartHandle.element,
|
|
909
|
+
nextEl = el.nextElementSibling,
|
|
910
|
+
change = (value != _startValue);
|
|
911
|
+
|
|
912
|
+
if (!change)
|
|
913
|
+
return;
|
|
914
|
+
|
|
915
|
+
_startValue = value;
|
|
916
|
+
setPosition(el, pos);
|
|
917
|
+
|
|
918
|
+
if (_value == _instance.maxValue && _startValue == _value && nextEl === _draggableHandle.element) // put start-handle above end-handle to allow backwards movement
|
|
919
|
+
{
|
|
920
|
+
switchHandles();
|
|
921
|
+
el.focus();
|
|
922
|
+
}
|
|
923
|
+
else if (_value == _instance.maxValue && _startValue != _value && nextEl !== _draggableHandle.element)
|
|
924
|
+
{
|
|
925
|
+
switchHandles(true);
|
|
926
|
+
el.focus();
|
|
927
|
+
}
|
|
928
|
+
|
|
929
|
+
if (_animation)
|
|
930
|
+
{
|
|
931
|
+
$lib.on(_range, 'transitionend animationend', valueChanged, [true, el, value, _select, _event]);
|
|
932
|
+
showTooltip(el, value, 'StartValue');
|
|
933
|
+
setRangeStart(pos);
|
|
934
|
+
}
|
|
935
|
+
else
|
|
936
|
+
{
|
|
937
|
+
setRangeStart(pos);
|
|
938
|
+
valueChanged(true, el, value, _select, _event);
|
|
939
|
+
}
|
|
940
|
+
}
|
|
941
|
+
|
|
942
|
+
function setValue(value)
|
|
943
|
+
{
|
|
944
|
+
value = validateValue(value);
|
|
945
|
+
|
|
946
|
+
if (_startValue != null && value < _startValue)
|
|
947
|
+
value = _startValue;
|
|
948
|
+
|
|
949
|
+
var pos = valueToPosition(value),
|
|
950
|
+
el = _draggableHandle.element;
|
|
951
|
+
el.nextElementSibling;
|
|
952
|
+
var change = (value != _value);
|
|
953
|
+
|
|
954
|
+
if (!change)
|
|
955
|
+
return;
|
|
956
|
+
|
|
957
|
+
_value = value;
|
|
958
|
+
setPosition(el, pos);
|
|
959
|
+
|
|
960
|
+
if (_animation)
|
|
961
|
+
{
|
|
962
|
+
$lib.on(_range, 'transitionend animationend', valueChanged, [false, el, value, _select, _event]);
|
|
963
|
+
showTooltip(el, value, 'Value');
|
|
964
|
+
setRange(pos);
|
|
965
|
+
}
|
|
966
|
+
else
|
|
967
|
+
{
|
|
968
|
+
setRange(pos);
|
|
969
|
+
valueChanged(false, el, value, _select, _event);
|
|
970
|
+
}
|
|
971
|
+
}
|
|
972
|
+
|
|
973
|
+
function valueChanged(start, el, value, select, event)
|
|
974
|
+
{
|
|
975
|
+
$lib.off(_range, 'transitionend animationend', valueChanged);
|
|
976
|
+
selectTickMark(value, start);
|
|
977
|
+
showTooltip(el, value, (start) ? 'StartValue' : 'Value');
|
|
978
|
+
animationState(false);
|
|
979
|
+
|
|
980
|
+
if (start)
|
|
981
|
+
updateHandleSettings();
|
|
982
|
+
else
|
|
983
|
+
updateStartHandleSettings();
|
|
984
|
+
|
|
985
|
+
if (start)
|
|
986
|
+
_hiddenStart.__setValue(value);
|
|
987
|
+
else
|
|
988
|
+
_hidden.__setValue(value);
|
|
989
|
+
|
|
990
|
+
if (_instance.range)
|
|
991
|
+
{
|
|
992
|
+
let startValue = _hiddenStart.value,
|
|
993
|
+
endValue = _hidden.value,
|
|
994
|
+
rangeValue = `${startValue || ''},${endValue || ''}`;
|
|
995
|
+
|
|
996
|
+
_hiddenRange.__setValue(rangeValue);
|
|
997
|
+
}
|
|
998
|
+
|
|
999
|
+
_instance.events.onChange.fire(_instance, { isStart: start, value: value });
|
|
1000
|
+
|
|
1001
|
+
if (select && select === _select && !_dragging)
|
|
1002
|
+
{
|
|
1003
|
+
_dragging = true;
|
|
1004
|
+
|
|
1005
|
+
if (start)
|
|
1006
|
+
_draggableStartHandle.startDrag(event);
|
|
1007
|
+
else
|
|
1008
|
+
_draggableHandle.startDrag(event);
|
|
1009
|
+
}
|
|
1010
|
+
}
|
|
1011
|
+
|
|
1012
|
+
function setPosition(handle, pos)
|
|
1013
|
+
{
|
|
1014
|
+
pos = $lib.unit(pos);
|
|
1015
|
+
|
|
1016
|
+
if (_instance.vertical && handle.style.top != pos)
|
|
1017
|
+
handle.style.top = pos;
|
|
1018
|
+
else if (!_instance.vertical && handle.style.left != pos)
|
|
1019
|
+
handle.style.left = $lib.unit(pos);
|
|
1020
|
+
}
|
|
1021
|
+
|
|
1022
|
+
function setRangeStart(pos)
|
|
1023
|
+
{
|
|
1024
|
+
var vertical = _instance.vertical,
|
|
1025
|
+
reversed = _instance.reversed,
|
|
1026
|
+
trackSize = (_instance.vertical) ? _track.offsetHeight : _track.offsetWidth,
|
|
1027
|
+
sizeProp = (vertical) ? 'height' : 'width',
|
|
1028
|
+
marginProp = (vertical) ? 'marginTop' : 'marginLeft',
|
|
1029
|
+
size = getNumericValue(_range.style[sizeProp]),
|
|
1030
|
+
margin;
|
|
1031
|
+
|
|
1032
|
+
if (reversed)
|
|
1033
|
+
{
|
|
1034
|
+
marginProp = (vertical) ? 'marginBottom' : 'marginRight';
|
|
1035
|
+
pos = trackSize - pos;
|
|
1036
|
+
}
|
|
1037
|
+
|
|
1038
|
+
margin = getNumericValue(_range.style[marginProp]);
|
|
1039
|
+
_range.style[marginProp] = $lib.unit(pos);
|
|
1040
|
+
|
|
1041
|
+
if (pos == margin)
|
|
1042
|
+
return;
|
|
1043
|
+
|
|
1044
|
+
if (pos > margin)
|
|
1045
|
+
_range.style[sizeProp] = $lib.unit(size - (pos - margin));
|
|
1046
|
+
else
|
|
1047
|
+
_range.style[sizeProp] = $lib.unit(size + (margin - pos));
|
|
1048
|
+
}
|
|
1049
|
+
|
|
1050
|
+
function setRange(pos)
|
|
1051
|
+
{
|
|
1052
|
+
var vertical = _instance.vertical,
|
|
1053
|
+
reversed = _instance.reversed,
|
|
1054
|
+
trackSize = (_instance.vertical) ? _track.offsetHeight : _track.offsetWidth,
|
|
1055
|
+
marginProp = (vertical) ? 'marginTop' : 'marginLeft',
|
|
1056
|
+
margin;
|
|
1057
|
+
|
|
1058
|
+
if (reversed)
|
|
1059
|
+
marginProp = (vertical) ? 'marginBottom' : 'marginRight';
|
|
1060
|
+
|
|
1061
|
+
if (_instance.reversed)
|
|
1062
|
+
pos = trackSize - pos;
|
|
1063
|
+
|
|
1064
|
+
margin = getNumericValue(_range.style[marginProp]);
|
|
1065
|
+
pos = pos - margin;
|
|
1066
|
+
pos = $lib.unit((pos < 0) ? 0 : pos);
|
|
1067
|
+
|
|
1068
|
+
if (_instance.vertical)
|
|
1069
|
+
_range.style.height = pos;
|
|
1070
|
+
else
|
|
1071
|
+
_range.style.width = pos;
|
|
1072
|
+
}
|
|
1073
|
+
|
|
1074
|
+
function selectTickMark(value, start)
|
|
1075
|
+
{
|
|
1076
|
+
if (!_instance.tickMarks || _instance.tickMarkSide === _tickMarkSideOption.NONE)
|
|
1077
|
+
return;
|
|
1078
|
+
|
|
1079
|
+
var cssClass = (start) ? _classOption.SELECTED_START : _classOption.SELECTED;
|
|
1080
|
+
_instance.tickMarkSide;
|
|
1081
|
+
var ticks = _instance.tickMarks,
|
|
1082
|
+
tickStep = getValueDelta() / ticks,
|
|
1083
|
+
step = value / tickStep;
|
|
1084
|
+
|
|
1085
|
+
if (_selectedTicks)
|
|
1086
|
+
{
|
|
1087
|
+
var index = _selectedTicks.length, li;
|
|
1088
|
+
|
|
1089
|
+
while (--index >= 0)
|
|
1090
|
+
{
|
|
1091
|
+
li = _selectedTicks[index];
|
|
1092
|
+
|
|
1093
|
+
if ($lib.hasClass(li, cssClass))
|
|
1094
|
+
$lib.removeClass(li, cssClass);
|
|
1095
|
+
|
|
1096
|
+
if (!$lib.hasClass(li, _classOption.SELECTED_START) && !$lib.hasClass(li, _classOption.SELECTED))
|
|
1097
|
+
_selectedTicks.splice(index, 0); // remove from selected
|
|
1098
|
+
}
|
|
1099
|
+
}
|
|
1100
|
+
|
|
1101
|
+
if (value % tickStep > 0) // value not on tickmark
|
|
1102
|
+
step = Math.floor(value / tickStep); // select ticks before current position
|
|
1103
|
+
|
|
1104
|
+
var uls = $lib(null, _content, 'ul');
|
|
1105
|
+
|
|
1106
|
+
$lib.each(uls, function (ul)
|
|
1107
|
+
{
|
|
1108
|
+
if (ul.childNodes.length > 0)
|
|
1109
|
+
{
|
|
1110
|
+
var li = (_instance.reversed) ? ul.childNodes[(ul.childNodes.length - 1) - step] : ul.childNodes[step];
|
|
1111
|
+
$lib.addClass(li, cssClass);
|
|
1112
|
+
|
|
1113
|
+
if ($lib.indexOf(_selectedTicks, li) == -1)
|
|
1114
|
+
_selectedTicks.push(li);
|
|
1115
|
+
}
|
|
1116
|
+
});
|
|
1117
|
+
}
|
|
1118
|
+
|
|
1119
|
+
function getNumericValue(text)
|
|
1120
|
+
{
|
|
1121
|
+
return parseFloat(text.replace(/[^0-9\.\-]/g, '')) || 0;
|
|
1122
|
+
}
|
|
1123
|
+
|
|
1124
|
+
function decrease(draggable, hold)
|
|
1125
|
+
{
|
|
1126
|
+
if (!draggable)
|
|
1127
|
+
draggable = (_instance.range) ? _draggableStartHandle : _draggableHandle;
|
|
1128
|
+
|
|
1129
|
+
change(draggable);
|
|
1130
|
+
_holdTimerId = setTimeout(decrease.bind(this, draggable, true), (hold) ? 40 : 500);
|
|
1131
|
+
}
|
|
1132
|
+
|
|
1133
|
+
function increase(draggable, hold)
|
|
1134
|
+
{
|
|
1135
|
+
draggable = draggable || _draggableHandle;
|
|
1136
|
+
|
|
1137
|
+
change(draggable, true);
|
|
1138
|
+
_holdTimerId = setTimeout(increase.bind(this, draggable, true), (hold) ? 40 : 500);
|
|
1139
|
+
}
|
|
1140
|
+
|
|
1141
|
+
function change(draggable, increase)
|
|
1142
|
+
{
|
|
1143
|
+
var pos = getHandlePosition(draggable),
|
|
1144
|
+
value = positionToValue(pos),
|
|
1145
|
+
minChange = _instance.minChange;
|
|
1146
|
+
|
|
1147
|
+
stop();
|
|
1148
|
+
|
|
1149
|
+
if (increase)
|
|
1150
|
+
value += minChange;
|
|
1151
|
+
else
|
|
1152
|
+
value -= minChange;
|
|
1153
|
+
|
|
1154
|
+
if (draggable === _draggableStartHandle)
|
|
1155
|
+
setStartValue(value);
|
|
1156
|
+
else
|
|
1157
|
+
setValue(value);
|
|
1158
|
+
}
|
|
1159
|
+
|
|
1160
|
+
function stop()
|
|
1161
|
+
{
|
|
1162
|
+
clearTimeout(_holdTimerId);
|
|
1163
|
+
}
|
|
1164
|
+
|
|
1165
|
+
function positionToValue(pos)
|
|
1166
|
+
{
|
|
1167
|
+
var reversed = _instance.reversed,
|
|
1168
|
+
trackSize = (_instance.vertical) ? _track.offsetHeight : _track.offsetWidth,
|
|
1169
|
+
value = (_instance.minValue + (getValueDelta() * (pos / trackSize))),
|
|
1170
|
+
minChange = _instance.minChange;
|
|
1171
|
+
|
|
1172
|
+
if (reversed)
|
|
1173
|
+
value = (_instance.maxValue - (getValueDelta() * (pos / trackSize)));
|
|
1174
|
+
|
|
1175
|
+
if (value % minChange > 0)
|
|
1176
|
+
value = Math.round(value / minChange) * minChange; // fix value if it is not a multiplication of the minimum change value
|
|
1177
|
+
|
|
1178
|
+
return validateValue(value);
|
|
1179
|
+
}
|
|
1180
|
+
|
|
1181
|
+
function validateValue(value)
|
|
1182
|
+
{
|
|
1183
|
+
if (value == null)
|
|
1184
|
+
return value;
|
|
1185
|
+
|
|
1186
|
+
if (value < _instance.minValue)
|
|
1187
|
+
return _instance.minValue
|
|
1188
|
+
else if (value > _instance.maxValue)
|
|
1189
|
+
return _instance.maxValue
|
|
1190
|
+
else
|
|
1191
|
+
return value;
|
|
1192
|
+
}
|
|
1193
|
+
|
|
1194
|
+
function valueToPosition(value)
|
|
1195
|
+
{
|
|
1196
|
+
var reversed = _instance.reversed,
|
|
1197
|
+
trackSize = (_instance.vertical) ? _track.offsetHeight : _track.offsetWidth,
|
|
1198
|
+
minValue = _instance.minValue;
|
|
1199
|
+
|
|
1200
|
+
if (reversed)
|
|
1201
|
+
return trackSize - (((value - minValue) / getValueDelta()) * trackSize);
|
|
1202
|
+
else
|
|
1203
|
+
return ((value - minValue) / getValueDelta()) * trackSize;
|
|
1204
|
+
}
|
|
1205
|
+
|
|
1206
|
+
function getValueDelta()
|
|
1207
|
+
{
|
|
1208
|
+
return _instance.maxValue - _instance.minValue;
|
|
1209
|
+
}
|
|
1210
|
+
|
|
1211
|
+
function updateHandleSettings()
|
|
1212
|
+
{
|
|
1213
|
+
var settings = _draggableHandle.settings,
|
|
1214
|
+
reversed = _instance.reversed,
|
|
1215
|
+
trackSize = (_instance.vertical) ? _track.offsetHeight : _track.offsetWidth,
|
|
1216
|
+
tickValue = (_instance.minChange / getValueDelta()) * trackSize,
|
|
1217
|
+
overshoot = getOvershoot(_draggableHandle.element),
|
|
1218
|
+
prop = 'boundaryOvershoot';
|
|
1219
|
+
|
|
1220
|
+
if (tickValue > 1)
|
|
1221
|
+
settings.tickY = settings.tickX = tickValue;
|
|
1222
|
+
|
|
1223
|
+
settings[prop + 'Top'] = settings[prop + 'Bottom'] = settings[prop + 'Left'] = settings[prop + 'Right'] = overshoot;
|
|
1224
|
+
|
|
1225
|
+
if (_instance.range && _startValue != null) // limit end-handle position at the start-handle position
|
|
1226
|
+
{
|
|
1227
|
+
var pos = valueToPosition(_startValue);
|
|
1228
|
+
|
|
1229
|
+
if (reversed)
|
|
1230
|
+
settings[prop + 'Bottom'] = settings[prop + 'Right'] = ((trackSize - pos) - overshoot) * -1;
|
|
1231
|
+
else
|
|
1232
|
+
settings[prop + 'Top'] = settings[prop + 'Left'] = (pos - overshoot) * -1;
|
|
1233
|
+
}
|
|
1234
|
+
}
|
|
1235
|
+
|
|
1236
|
+
function updateStartHandleSettings()
|
|
1237
|
+
{
|
|
1238
|
+
if (!_instance.range)
|
|
1239
|
+
return;
|
|
1240
|
+
|
|
1241
|
+
var settings = _draggableStartHandle.settings,
|
|
1242
|
+
reversed = _instance.reversed,
|
|
1243
|
+
trackSize = (_instance.vertical) ? _track.offsetHeight : _track.offsetWidth,
|
|
1244
|
+
tickValue = (_instance.minChange / getValueDelta()) * trackSize,
|
|
1245
|
+
prop = 'boundaryOvershoot',
|
|
1246
|
+
overshoot = getOvershoot(_draggableStartHandle.element),
|
|
1247
|
+
pos = valueToPosition(_value);
|
|
1248
|
+
|
|
1249
|
+
if (tickValue > 1)
|
|
1250
|
+
settings.tickY = settings.tickX = tickValue;
|
|
1251
|
+
|
|
1252
|
+
settings[prop + 'Top'] = settings[prop + 'Bottom'] = settings[prop + 'Left'] = settings[prop + 'Right'] = overshoot;
|
|
1253
|
+
|
|
1254
|
+
// limit start-handle position at the end-handle position
|
|
1255
|
+
if (reversed)
|
|
1256
|
+
settings[prop + 'Top'] = settings[prop + 'Left'] = (pos - overshoot) * -1;
|
|
1257
|
+
else
|
|
1258
|
+
settings[prop + 'Bottom'] = settings[prop + 'Right'] = ((trackSize - pos) - overshoot) * -1;
|
|
1259
|
+
}
|
|
1260
|
+
|
|
1261
|
+
function getOvershoot(handle)
|
|
1262
|
+
{
|
|
1263
|
+
return (_instance.vertical) ? Math.round(handle.offsetHeight / 2) : Math.round(handle.offsetWidth / 2);
|
|
1264
|
+
}
|
|
1265
|
+
|
|
1266
|
+
function dispose()
|
|
1267
|
+
{
|
|
1268
|
+
$lib.each(_handlerId, function (item)
|
|
1269
|
+
{
|
|
1270
|
+
$lib.off(item[0], item[1], item[2]);
|
|
1271
|
+
});
|
|
1272
|
+
|
|
1273
|
+
$lib.off(document, 'mouseup', cancelSelectState);
|
|
1274
|
+
$lib.off(document, 'mouseup', stop);
|
|
1275
|
+
|
|
1276
|
+
_startValue = _value = _select = null;
|
|
1277
|
+
_handlerId = [];
|
|
1278
|
+
_selectedTicks = [];
|
|
1279
|
+
_draggableHandle = _draggableStartHandle = null;
|
|
1280
|
+
}
|
|
1281
|
+
};
|
|
1282
|
+
|
|
1283
|
+
/**
|
|
1284
|
+
* @see {@link componyx.UI.base.methods}
|
|
1285
|
+
*/
|
|
1286
|
+
componyx.UI.Slider.prototype = Object.create($base.methods);
|
|
1287
|
+
componyx.UI.Slider.prototype.constructor = componyx.UI.Slider;
|
|
1288
|
+
|
|
1289
|
+
|
|
1290
|
+
/**
|
|
1291
|
+
* TickMarkSideOption
|
|
1292
|
+
* @readonly
|
|
1293
|
+
* @enum {number}
|
|
1294
|
+
*/
|
|
1295
|
+
componyx.UI.Slider.TickMarkSideOption =
|
|
1296
|
+
{
|
|
1297
|
+
NONE: 0,
|
|
1298
|
+
BEFORE: 1,
|
|
1299
|
+
AFTER: 2,
|
|
1300
|
+
BOTH: 3
|
|
1301
|
+
};
|
|
1302
|
+
})(window);
|
|
1303
|
+
|
|
1304
|
+
const Slider = componyx.UI.Slider;
|
|
1305
|
+
|
|
1306
|
+
export { Slider };
|