romo 0.17.0 → 0.17.1
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/assets/css/romo/_vars.scss +2 -0
- data/assets/css/romo/forms.scss +34 -9
- data/assets/css/romo/indicator_text_input.scss +1 -0
- data/assets/css/romo/select.scss +8 -1
- data/assets/js/romo/base.js +70 -1
- data/assets/js/romo/datepicker.js +32 -86
- data/assets/js/romo/dropdown.js +13 -1
- data/assets/js/romo/indicator_text_input.js +26 -16
- data/assets/js/romo/select.js +13 -1
- data/assets/js/romo/select_dropdown.js +189 -64
- data/assets/js/romo/sortable.js +19 -16
- data/lib/romo/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 217361e9543ff348d3315d69454971dce89254f1
|
4
|
+
data.tar.gz: dd28175c1f05929102d1f06b4846b83a6ee1eb34
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f4c569de6a994ed66af85e1e187a1f00aaab08390d550e95eae5816a9a250fba13e490b349f1a26934e6c8bebf27e21afc4abf842d95b76821e696bebf0fd541
|
7
|
+
data.tar.gz: d81fd57f559711ce1f7097ad8204505f627621a2edd4e633d6d234b1917b907d6b75684e5864dd96a0fb6a6caa9875bee4d048466ae15b0d51d2c57575f58cb4
|
data/assets/css/romo/_vars.scss
CHANGED
@@ -27,6 +27,8 @@ $spacingSize0: $spacingSize1 * 0.35;
|
|
27
27
|
$spacingSize2: $spacingSize1 * 2;
|
28
28
|
|
29
29
|
$inputHeight: ($baseLineHeight / 2) * 3; /* 30px */
|
30
|
+
$inputFilterHeight: $baseLineHeight; /* 20px */
|
31
|
+
|
30
32
|
$inputSize1: 220px;
|
31
33
|
$inputSize0: $inputSize1 - 120px;
|
32
34
|
$inputSize2: $inputSize1 + 120px;
|
data/assets/css/romo/forms.scss
CHANGED
@@ -26,7 +26,8 @@ label { display: block; }
|
|
26
26
|
|
27
27
|
.romo-form input,
|
28
28
|
.romo-form select,
|
29
|
-
.romo-form textarea
|
29
|
+
.romo-form textarea,
|
30
|
+
input.romo-select-dropdown-option-filter {
|
30
31
|
font-size: 100%;
|
31
32
|
@include rm-push;
|
32
33
|
@include align-middle;
|
@@ -42,8 +43,15 @@ label { display: block; }
|
|
42
43
|
}
|
43
44
|
}
|
44
45
|
|
45
|
-
.romo-form input
|
46
|
-
.romo-
|
46
|
+
.romo-form input,
|
47
|
+
input.romo-select-dropdown-option-filter {
|
48
|
+
*overflow: visible;
|
49
|
+
line-height: normal;
|
50
|
+
}
|
51
|
+
|
52
|
+
.romo-form textarea {
|
53
|
+
overflow: auto; @include align-top;
|
54
|
+
}
|
47
55
|
|
48
56
|
.romo-form label,
|
49
57
|
.romo-form select,
|
@@ -58,7 +66,9 @@ label { display: block; }
|
|
58
66
|
.romo-form textarea[disabled],
|
59
67
|
.romo-form input[readonly],
|
60
68
|
.romo-form select[readonly],
|
61
|
-
.romo-form textarea[readonly]
|
69
|
+
.romo-form textarea[readonly],
|
70
|
+
input.romo-select-dropdown-option-filter[disabled],
|
71
|
+
input.romo-select-dropdown-option-filter[readonly] { cursor: $notAllowedCursor; }
|
62
72
|
|
63
73
|
.romo-form select {
|
64
74
|
font-weight: normal;
|
@@ -82,7 +92,8 @@ label { display: block; }
|
|
82
92
|
.romo-form input[type="url"],
|
83
93
|
.romo-form input[type="search"],
|
84
94
|
.romo-form input[type="tel"],
|
85
|
-
.romo-form input[type="color"]
|
95
|
+
.romo-form input[type="color"],
|
96
|
+
input.romo-select-dropdown-option-filter {
|
86
97
|
font-weight: normal;
|
87
98
|
background-color: $inputBgColor;
|
88
99
|
@include border1;
|
@@ -104,7 +115,8 @@ label { display: block; }
|
|
104
115
|
.romo-form input[type="url"]:focus,
|
105
116
|
.romo-form input[type="search"]:focus,
|
106
117
|
.romo-form input[type="tel"]:focus,
|
107
|
-
.romo-form input[type="color"]:focus
|
118
|
+
.romo-form input[type="color"]:focus,
|
119
|
+
input.romo-select-dropdown-option-filter:focus {
|
108
120
|
@include input-focus;
|
109
121
|
}
|
110
122
|
|
@@ -113,7 +125,9 @@ label { display: block; }
|
|
113
125
|
.romo-form textarea[disabled],
|
114
126
|
.romo-form input[readonly],
|
115
127
|
.romo-form select[readonly],
|
116
|
-
.romo-form textarea[readonly]
|
128
|
+
.romo-form textarea[readonly],
|
129
|
+
input.romo-select-dropdown-option-filter[disabled],
|
130
|
+
input.romo-select-dropdown-option-filter[readonly] { background-color: $inputDisabledColor; }
|
117
131
|
|
118
132
|
.romo-form input[type="radio"][disabled],
|
119
133
|
.romo-form input[type="checkbox"][disabled],
|
@@ -134,12 +148,17 @@ label { display: block; }
|
|
134
148
|
.romo-form input[type="url"],
|
135
149
|
.romo-form input[type="search"],
|
136
150
|
.romo-form input[type="tel"],
|
137
|
-
.romo-form input[type="color"]
|
151
|
+
.romo-form input[type="color"],
|
152
|
+
input.romo-select-dropdown-option-filter {
|
138
153
|
height: $inputHeight;
|
139
154
|
line-height: $baseLineHeight;
|
140
155
|
@include align-middle;
|
141
156
|
}
|
142
157
|
|
158
|
+
input.romo-select-dropdown-option-filter {
|
159
|
+
height: $inputFilterHeight;
|
160
|
+
}
|
161
|
+
|
143
162
|
.romo-form textarea,
|
144
163
|
.romo-form input[type="text"],
|
145
164
|
.romo-form input[type="password"],
|
@@ -154,12 +173,18 @@ label { display: block; }
|
|
154
173
|
.romo-form input[type="url"],
|
155
174
|
.romo-form input[type="search"],
|
156
175
|
.romo-form input[type="tel"],
|
157
|
-
.romo-form input[type="color"]
|
176
|
+
.romo-form input[type="color"],
|
177
|
+
input.romo-select-dropdown-option-filter {
|
158
178
|
display: inline-block;
|
159
179
|
padding: 4px 6px;
|
160
180
|
color: $inputColor;
|
161
181
|
}
|
162
182
|
|
183
|
+
input.romo-select-dropdown-option-filter {
|
184
|
+
display: block;
|
185
|
+
width: 100%;
|
186
|
+
}
|
187
|
+
|
163
188
|
.romo-form textarea,
|
164
189
|
.romo-form select[multiple],
|
165
190
|
.romo-form select[size] { height: auto; }
|
data/assets/css/romo/select.scss
CHANGED
@@ -22,7 +22,8 @@
|
|
22
22
|
padding-right: 6px;
|
23
23
|
}
|
24
24
|
|
25
|
-
.romo-select:focus
|
25
|
+
.romo-select:focus,
|
26
|
+
.romo-select.romo-select-focus { @include input-focus; }
|
26
27
|
|
27
28
|
.romo-select:active,
|
28
29
|
.romo-select.active {
|
@@ -43,6 +44,12 @@
|
|
43
44
|
vertical-align: middle;
|
44
45
|
}
|
45
46
|
|
47
|
+
.romo-select-dropdown-option-filter-wrapper {
|
48
|
+
@include border1-bottom();
|
49
|
+
padding: 4px 0;
|
50
|
+
margin: 0 4px;
|
51
|
+
}
|
52
|
+
|
46
53
|
.romo-select-option-list {
|
47
54
|
cursor: pointer;
|
48
55
|
font-weight: normal;
|
data/assets/js/romo/base.js
CHANGED
@@ -182,10 +182,79 @@
|
|
182
182
|
// elem handling
|
183
183
|
|
184
184
|
Romo.prototype.toArray = function(elems) {
|
185
|
-
// converts a collection of elements
|
185
|
+
// converts a collection of elements `$()` to an array of nodes
|
186
186
|
return $.map(elems, function(node){ return node; })
|
187
187
|
}
|
188
188
|
|
189
|
+
Romo.prototype.selectNext = function(elem, selector) {
|
190
|
+
// like `$().next()`, but takes a selector; returns first next elem that
|
191
|
+
// matches the given selector or an empty collection if non matches
|
192
|
+
var el = elem.next();
|
193
|
+
while(el.length) {
|
194
|
+
if (selector === undefined || el.is(selector)) {
|
195
|
+
return el;
|
196
|
+
}
|
197
|
+
el = el.next();
|
198
|
+
}
|
199
|
+
return el;
|
200
|
+
}
|
201
|
+
|
202
|
+
Romo.prototype.selectPrev = function(elem, selector) {
|
203
|
+
// like `$().prev()`, but takes a selector; returns first prev elem that
|
204
|
+
// matches the given selector or an empty collection if non matches
|
205
|
+
var el = elem.prev();
|
206
|
+
while(el.length) {
|
207
|
+
if (selector === undefined || el.is(selector)) {
|
208
|
+
return el;
|
209
|
+
}
|
210
|
+
el = el.prev();
|
211
|
+
}
|
212
|
+
return el;
|
213
|
+
}
|
214
|
+
|
215
|
+
// input handling
|
216
|
+
|
217
|
+
Romo.prototype.nonInputTextKeyCodes = function() {
|
218
|
+
// https://css-tricks.com/snippets/javascript/javascript-keycodes/
|
219
|
+
return [
|
220
|
+
9, /* tab */
|
221
|
+
13, /* enter */
|
222
|
+
16, /* shift */
|
223
|
+
17, /* ctrl */
|
224
|
+
18, /* alt */
|
225
|
+
19, /* pausebreak */
|
226
|
+
20, /* capslock */
|
227
|
+
27, /* escape */
|
228
|
+
33, /* pageup */
|
229
|
+
34, /* pagedown */
|
230
|
+
35, /* end */
|
231
|
+
36, /* home */
|
232
|
+
37, /* leftarrow */
|
233
|
+
38, /* uparrow */
|
234
|
+
39, /* rightarrow */
|
235
|
+
40, /* downarrow */
|
236
|
+
45, /* insert */
|
237
|
+
46, /* delete */
|
238
|
+
91, /* leftwindowkey */
|
239
|
+
92, /* rightwindowkey */
|
240
|
+
93, /* selectkey */
|
241
|
+
112, /* f1 */
|
242
|
+
113, /* f2 */
|
243
|
+
114, /* f3 */
|
244
|
+
115, /* f4 */
|
245
|
+
116, /* f5 */
|
246
|
+
117, /* f6 */
|
247
|
+
118, /* f7 */
|
248
|
+
119, /* f8 */
|
249
|
+
120, /* f9 */
|
250
|
+
121, /* f10 */
|
251
|
+
122, /* f11 */
|
252
|
+
123, /* f12 */
|
253
|
+
144, /* numlock */
|
254
|
+
145, /* scrolllock */
|
255
|
+
];
|
256
|
+
}
|
257
|
+
|
189
258
|
// private
|
190
259
|
|
191
260
|
Romo.prototype._addEventCallback = function(name, callback) {
|
@@ -6,20 +6,19 @@ $.fn.romoDatepicker = function() {
|
|
6
6
|
|
7
7
|
var RomoDatepicker = function(element) {
|
8
8
|
this.elem = $(element);
|
9
|
-
this.defaultFormat = 'yyyy-mm-dd'
|
10
9
|
this.monthNames = [
|
11
10
|
"January", "February", "March", "April", "May", "June",
|
12
11
|
"July", "August", "September", "October", "November", "December"
|
13
12
|
]
|
14
|
-
|
15
|
-
this.
|
16
|
-
this.
|
17
|
-
this.
|
18
|
-
this.itemSelector
|
19
|
-
this.calTable
|
20
|
-
this.date
|
21
|
-
this.today
|
22
|
-
this.prevValue
|
13
|
+
|
14
|
+
this.defaultFormat = 'yyyy-mm-dd'
|
15
|
+
this.defaultPrevClass = undefined;
|
16
|
+
this.defaultNextClass = undefined;
|
17
|
+
this.itemSelector = 'TD.romo-datepicker-day:not(.disabled)';
|
18
|
+
this.calTable = $();
|
19
|
+
this.date = undefined;
|
20
|
+
this.today = this._getTodaysDate();
|
21
|
+
this.prevValue = undefined;
|
23
22
|
|
24
23
|
this.doInit();
|
25
24
|
this.doBindElem();
|
@@ -36,47 +35,22 @@ RomoDatepicker.prototype.doInit = function() {
|
|
36
35
|
}
|
37
36
|
|
38
37
|
RomoDatepicker.prototype.doBindElem = function() {
|
39
|
-
var elemWrapper = $('<div class="romo-datepicker-wrapper"></div>');
|
40
|
-
elemWrapper.css({'display': (this.elem.data('romo-datepicker-elem-display') || 'inline-block')});
|
41
|
-
if (this.elem.data('romo-datepicker-btn-group') === true) {
|
42
|
-
elemWrapper.addClass('romo-btn-group');
|
43
|
-
}
|
44
|
-
|
45
|
-
this.elem.before(elemWrapper);
|
46
|
-
elemWrapper.append(this.elem);
|
47
|
-
|
48
|
-
// the elem wrapper should be treated like a child elem. add it to Romo's
|
49
|
-
// parent-child elems so it will be removed when the elem (input) is removed.
|
50
|
-
// delay adding it b/c the `append` statement above is not a "move", it is
|
51
|
-
// a "remove" and "add" so if added immediately the "remove" part will
|
52
|
-
// incorrectly remove the wrapper. Any value will do - I chose 1 arbitrarily.
|
53
|
-
setTimeout($.proxy(function() {
|
54
|
-
Romo.parentChildElems.add(this.elem, [elemWrapper]);
|
55
|
-
}, this), 1);
|
56
|
-
|
57
38
|
this.elem.attr('autocomplete', 'off');
|
58
39
|
|
59
|
-
this.
|
60
|
-
|
61
|
-
if (indicatorClass !== undefined && indicatorClass !== 'none') {
|
62
|
-
this.indicatorElem = $('<i class="romo-datepicker-indicator '+indicatorClass+'"></i>');
|
63
|
-
this.indicatorElem.css({'line-height': this.elem.css('height')});
|
64
|
-
if (this.elem.prop('disabled') === true) {
|
65
|
-
this.indicatorElem.addClass('disabled');
|
66
|
-
}
|
67
|
-
if (this.elem.css('display') === 'none') {
|
68
|
-
this._hide(this.indicatorElem);
|
69
|
-
}
|
70
|
-
this.indicatorElem.on('click', $.proxy(this.onIndicatorClick, this));
|
71
|
-
|
72
|
-
var indicatorWidthPx = this.elem.data('romo-datepicker-indicator-width-px') || this.defaultIndicatorWidthPx;
|
73
|
-
// left-side spacing
|
74
|
-
// + indicator width
|
75
|
-
// + right-side spacing
|
76
|
-
var indicatorPaddingPx = 4 + indicatorWidthPx + 4;
|
77
|
-
this.elem.css({'padding-right': indicatorPaddingPx + 'px'});
|
78
|
-
this.elem.after(this.indicatorElem);
|
40
|
+
if (this.elem.data('romo-datepicker-indicator') !== undefined) {
|
41
|
+
this.elem.attr('data-romo-indicator-text-input-indicator', this.elem.data('romo-datepicker-indicator'));
|
79
42
|
}
|
43
|
+
if (this.elem.data('romo-datepicker-indicator-width-px') !== undefined) {
|
44
|
+
this.elem.attr('data-romo-indicator-text-input-indicator-width-px', this.elem.data('romo-datepicker-indicator-width-px'));
|
45
|
+
}
|
46
|
+
if (this.elem.data('romo-datepicker-btn-group') === true) {
|
47
|
+
this.elem.attr('data-romo-indicator-text-input-btn-group', this.elem.data('romo-datepicker-btn-group'));
|
48
|
+
}
|
49
|
+
if (this.elem.data('romo-datepicker-elem-display') !== undefined) {
|
50
|
+
this.elem.attr('data-romo-indicator-text-input-elem-display', this.elem.data('romo-datepicker-elem-display'));
|
51
|
+
}
|
52
|
+
|
53
|
+
this.elem.romoIndicatorTextInput();
|
80
54
|
|
81
55
|
this.prevValue = this.elem.val();
|
82
56
|
this.elem.on('change', $.proxy(function(e) {
|
@@ -85,18 +59,24 @@ RomoDatepicker.prototype.doBindElem = function() {
|
|
85
59
|
this.prevValue = newValue;
|
86
60
|
}, this));
|
87
61
|
|
62
|
+
this.elem.on('indicatorTextInput:indicatorClick', $.proxy(function(e) {
|
63
|
+
this._clearBlurTimeout();
|
64
|
+
this.elem.trigger('datepicker:triggerPopupOpen');
|
65
|
+
}, this));
|
66
|
+
|
88
67
|
this.elem.on('datepicker:triggerEnable', $.proxy(function(e) {
|
89
|
-
this.
|
68
|
+
this.elem.trigger('indicatorTextInput:triggerEnable', []);
|
90
69
|
}, this));
|
91
70
|
this.elem.on('datepicker:triggerDisable', $.proxy(function(e) {
|
92
|
-
this.
|
71
|
+
this.elem.trigger('indicatorTextInput:triggerDisable', []);
|
93
72
|
}, this));
|
94
73
|
this.elem.on('datepicker:triggerShow', $.proxy(function(e) {
|
95
|
-
this.
|
74
|
+
this.elem.trigger('indicatorTextInput:triggerShow', []);
|
96
75
|
}, this));
|
97
76
|
this.elem.on('datepicker:triggerHide', $.proxy(function(e) {
|
98
|
-
this.
|
77
|
+
this.elem.trigger('indicatorTextInput:triggerHide', []);
|
99
78
|
}, this));
|
79
|
+
|
100
80
|
this.elem.on('datepicker:triggerSetFormat', $.proxy(function(e) {
|
101
81
|
this.doSetFormat();
|
102
82
|
}, this));
|
@@ -117,28 +97,6 @@ RomoDatepicker.prototype.doSetDate = function(value) {
|
|
117
97
|
}
|
118
98
|
}
|
119
99
|
|
120
|
-
RomoDatepicker.prototype.doEnable = function() {
|
121
|
-
this.elem.prop('disabled', false);
|
122
|
-
this.elem.removeClass('disabled');
|
123
|
-
this.indicatorElem.removeClass('disabled');
|
124
|
-
}
|
125
|
-
|
126
|
-
RomoDatepicker.prototype.doDisable = function() {
|
127
|
-
this.elem.prop('disabled', true);
|
128
|
-
this.elem.addClass('disabled');
|
129
|
-
this.indicatorElem.addClass('disabled');
|
130
|
-
}
|
131
|
-
|
132
|
-
RomoDatepicker.prototype.doShow = function() {
|
133
|
-
this._show(this.elem);
|
134
|
-
this._show(this.indicatorElem);
|
135
|
-
}
|
136
|
-
|
137
|
-
RomoDatepicker.prototype.doHide = function() {
|
138
|
-
this._hide(this.elem);
|
139
|
-
this._hide(this.indicatorElem);
|
140
|
-
}
|
141
|
-
|
142
100
|
RomoDatepicker.prototype.doBindDropdown = function() {
|
143
101
|
this.elem.attr('data-romo-dropdown-disable-toggle', 'true');
|
144
102
|
if (this.elem.data('romo-dropdown-width') === undefined) {
|
@@ -283,18 +241,6 @@ RomoDatepicker.prototype.onItemEnter = function(e) {
|
|
283
241
|
this._highlightItem($(e.target));
|
284
242
|
}
|
285
243
|
|
286
|
-
RomoDatepicker.prototype.onIndicatorClick = function(e) {
|
287
|
-
this._clearBlurTimeout();
|
288
|
-
if (e !== undefined) {
|
289
|
-
e.preventDefault();
|
290
|
-
e.stopPropagation();
|
291
|
-
}
|
292
|
-
if (this.elem.prop('disabled') === false) {
|
293
|
-
this.elem.focus();
|
294
|
-
this.elem.trigger('datepicker:triggerPopupOpen');
|
295
|
-
}
|
296
|
-
}
|
297
|
-
|
298
244
|
RomoDatepicker.prototype.onItemClick = function(e) {
|
299
245
|
this._clearBlurTimeout();
|
300
246
|
if (e !== undefined) {
|
data/assets/js/romo/dropdown.js
CHANGED
@@ -278,6 +278,7 @@ RomoDropdown.prototype.onElemKeyUp = function(e) {
|
|
278
278
|
if (this.popupElem.hasClass('romo-dropdown-open')) {
|
279
279
|
if(e.keyCode === 27 /* Esc */ ) {
|
280
280
|
this.doPopupClose();
|
281
|
+
this.elem.trigger('dropdown:popupClosedByEsc', [this]);
|
281
282
|
return false;
|
282
283
|
} else {
|
283
284
|
return true;
|
@@ -321,6 +322,7 @@ RomoDropdown.prototype.doUnBindWindowBodyKeyUp = function() {
|
|
321
322
|
RomoDropdown.prototype.onWindowBodyKeyUp = function(e) {
|
322
323
|
if (e.keyCode === 27 /* Esc */) {
|
323
324
|
this.doPopupClose();
|
325
|
+
this.elem.trigger('dropdown:popupClosedByEsc', [this]);
|
324
326
|
}
|
325
327
|
return true;
|
326
328
|
}
|
@@ -333,7 +335,6 @@ RomoDropdown.prototype.onResizeWindow = function(e) {
|
|
333
335
|
RomoDropdown.prototype.doPlacePopupElem = function() {
|
334
336
|
if (this.elem.parents('.romo-modal-popup').size() !== 0) {
|
335
337
|
this.popupElem.css({'position': 'fixed'});
|
336
|
-
this.popupElem.offset(this.elem.offset());
|
337
338
|
}
|
338
339
|
|
339
340
|
var pos = $.extend({}, this.elem[0].getBoundingClientRect(), this.elem.offset());
|
@@ -360,6 +361,9 @@ RomoDropdown.prototype.doPlacePopupElem = function() {
|
|
360
361
|
configHeight = bottomAvailHeight;
|
361
362
|
}
|
362
363
|
|
364
|
+
// remove any height difference between the popup and content elems
|
365
|
+
// assumes popup height always greater than or equal to content height
|
366
|
+
configHeight = configHeight - (h - this.contentElem[0].offsetHeight);
|
363
367
|
this.contentElem.css({'max-height': configHeight.toString() + 'px'});
|
364
368
|
}
|
365
369
|
|
@@ -386,6 +390,10 @@ RomoDropdown.prototype.doPlacePopupElem = function() {
|
|
386
390
|
break;
|
387
391
|
}
|
388
392
|
|
393
|
+
$.extend(offset, {
|
394
|
+
top: this._roundPosOffsetVal(offset['top']),
|
395
|
+
left: this._roundPosOffsetVal(offset['left'])
|
396
|
+
});
|
389
397
|
this.popupElem.offset(offset);
|
390
398
|
}
|
391
399
|
|
@@ -420,6 +428,10 @@ RomoDropdown.prototype._getPopupMaxHeightDetectPad = function(position) {
|
|
420
428
|
return this.elem.data('romo-dropdown-max-height-detect-pad-'+position) || this.elem.data('romo-dropdown-max-height-detect-pad') || 10;
|
421
429
|
}
|
422
430
|
|
431
|
+
RomoDropdown.prototype._roundPosOffsetVal = function(value) {
|
432
|
+
return Math.round(value*100) / 100;
|
433
|
+
}
|
434
|
+
|
423
435
|
Romo.onInitUI(function(e) {
|
424
436
|
Romo.initUIElems(e, '[data-romo-dropdown-auto="true"]').romoDropdown();
|
425
437
|
});
|
@@ -38,28 +38,17 @@ RomoIndicatorTextInput.prototype.doBindElem = function() {
|
|
38
38
|
Romo.parentChildElems.add(this.elem, [elemWrapper]);
|
39
39
|
}, this), 1);
|
40
40
|
|
41
|
-
this.elem.attr('autocomplete', 'off');
|
42
|
-
|
43
41
|
this.indicatorElem = $();
|
44
42
|
var indicatorClass = this.elem.data('romo-indicator-text-input-indicator') || this.defaultIndicatorClass;
|
45
43
|
if (indicatorClass !== undefined && indicatorClass !== 'none') {
|
46
44
|
this.indicatorElem = $('<i class="romo-indicator-text-input-indicator '+indicatorClass+'"></i>');
|
47
|
-
this.
|
48
|
-
if (this.elem.prop('disabled') === true) {
|
49
|
-
this.indicatorElem.addClass('disabled');
|
50
|
-
}
|
51
|
-
if (this.elem.css('display') === 'none') {
|
52
|
-
this._hide(this.indicatorElem);
|
53
|
-
}
|
45
|
+
this.elem.after(this.indicatorElem);
|
54
46
|
this.indicatorElem.on('click', $.proxy(this.onIndicatorClick, this));
|
47
|
+
this.doPlaceIndicatorElem();
|
55
48
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
// + right-side spacing
|
60
|
-
var indicatorPaddingPx = 4 + indicatorWidthPx + 4;
|
61
|
-
this.elem.css({'padding-right': indicatorPaddingPx + 'px'});
|
62
|
-
this.elem.after(this.indicatorElem);
|
49
|
+
this.elem.on('indicatorTextInput:triggerPlaceIndicator', $.proxy(function(e) {
|
50
|
+
this.doPlaceIndicatorElem();
|
51
|
+
}, this));
|
63
52
|
}
|
64
53
|
|
65
54
|
this.elem.on('indicatorTextInput:triggerEnable', $.proxy(function(e) {
|
@@ -76,6 +65,25 @@ RomoIndicatorTextInput.prototype.doBindElem = function() {
|
|
76
65
|
}, this));
|
77
66
|
}
|
78
67
|
|
68
|
+
RomoIndicatorTextInput.prototype.doPlaceIndicatorElem = function() {
|
69
|
+
if (this.indicatorElem !== undefined) {
|
70
|
+
this.indicatorElem.css({'line-height': this.elem.css('height')});
|
71
|
+
if (this.elem.prop('disabled') === true) {
|
72
|
+
this.indicatorElem.addClass('disabled');
|
73
|
+
}
|
74
|
+
if (this.elem.css('display') === 'none') {
|
75
|
+
this._hide(this.indicatorElem);
|
76
|
+
}
|
77
|
+
|
78
|
+
var indicatorWidthPx = this.elem.data('romo-indicator-text-input-indicator-width-px') || this.defaultIndicatorWidthPx;
|
79
|
+
// left-side spacing
|
80
|
+
// + indicator width
|
81
|
+
// + right-side spacing
|
82
|
+
var indicatorPaddingPx = 4 + indicatorWidthPx + 4;
|
83
|
+
this.elem.css({'padding-right': indicatorPaddingPx + 'px'});
|
84
|
+
}
|
85
|
+
}
|
86
|
+
|
79
87
|
RomoIndicatorTextInput.prototype.doEnable = function() {
|
80
88
|
this.elem.prop('disabled', false);
|
81
89
|
this.elem.removeClass('disabled');
|
@@ -91,6 +99,7 @@ RomoIndicatorTextInput.prototype.doDisable = function() {
|
|
91
99
|
RomoIndicatorTextInput.prototype.doShow = function() {
|
92
100
|
this._show(this.elem);
|
93
101
|
this._show(this.indicatorElem);
|
102
|
+
this.doPlaceIndicatorElem();
|
94
103
|
}
|
95
104
|
|
96
105
|
RomoIndicatorTextInput.prototype.doHide = function() {
|
@@ -105,6 +114,7 @@ RomoIndicatorTextInput.prototype.onIndicatorClick = function(e) {
|
|
105
114
|
}
|
106
115
|
if (this.elem.prop('disabled') === false) {
|
107
116
|
this.elem.focus();
|
117
|
+
this.elem.trigger('indicatorTextInput:indicatorClick');
|
108
118
|
}
|
109
119
|
}
|
110
120
|
|
data/assets/js/romo/select.js
CHANGED
@@ -110,6 +110,18 @@ RomoSelect.prototype._buildSelectDropdownElem = function() {
|
|
110
110
|
if (romoSelectDropdownElem.data('romo-dropdown-max-height') === undefined) {
|
111
111
|
romoSelectDropdownElem.attr('data-romo-dropdown-max-height', 'detect');
|
112
112
|
}
|
113
|
+
if (this.elem.data('romo-select-filter-placeholder') !== undefined) {
|
114
|
+
romoSelectDropdownElem.attr('data-romo-select-dropdown-filter-placeholder', this.elem.data('romo-select-filter-placeholder'));
|
115
|
+
}
|
116
|
+
if (this.elem.data('romo-select-filter-indicator') !== undefined) {
|
117
|
+
romoSelectDropdownElem.attr('data-romo-select-dropdown-filter-indicator', this.elem.data('romo-select-filter-indicator'));
|
118
|
+
}
|
119
|
+
if (this.elem.data('romo-select-filter-indicator-width-px') !== undefined) {
|
120
|
+
romoSelectDropdownElem.attr('data-romo-select-dropdown-filter-indicator-width-px', this.elem.data('romo-select-filter-indicator-width-px'));
|
121
|
+
}
|
122
|
+
if (this.elem.data('romo-select-no-filter') !== undefined) {
|
123
|
+
romoSelectDropdownElem.attr('data-romo-select-dropdown-no-filter', this.elem.data('romo-select-no-filter'));
|
124
|
+
}
|
113
125
|
|
114
126
|
var classList = this.elem.attr('class') !== undefined ? this.elem.attr('class').split(/\s+/) : [];
|
115
127
|
$.each(classList, function(idx, classItem) {
|
@@ -148,7 +160,7 @@ RomoSelect.prototype._buildSelectDropdownElem = function() {
|
|
148
160
|
caret.css({'line-height': romoSelectDropdownElem.css('line-height')});
|
149
161
|
caret.on('click', $.proxy(this.onCaretClick, this));
|
150
162
|
|
151
|
-
var caretWidthPx
|
163
|
+
var caretWidthPx = this.elem.data('romo-select-caret-width-px') || this.defaultCaretWidthPx;
|
152
164
|
// left-side spacing
|
153
165
|
// + caret width
|
154
166
|
// - 1 px select styling optical illusion
|
@@ -5,13 +5,16 @@ $.fn.romoSelectDropdown = function(optionElemsParent) {
|
|
5
5
|
}
|
6
6
|
|
7
7
|
var RomoSelectDropdown = function(element, optionElemsParent) {
|
8
|
-
this.elem
|
9
|
-
this.
|
10
|
-
this.prevValue = '';
|
8
|
+
this.elem = $(element);
|
9
|
+
this.prevValue = '';
|
11
10
|
|
12
|
-
|
13
|
-
this.
|
14
|
-
|
11
|
+
this.filterHiddenClass = 'romo-select-filter-hidden';
|
12
|
+
this.itemSelector = 'LI[data-romo-select-item="opt"]:not(.disabled):not(.'+this.filterHiddenClass+')';
|
13
|
+
|
14
|
+
var optsParent = (optionElemsParent || this.elem.find('.romo-select-dropdown-options-parent'));
|
15
|
+
this.optionElems = optsParent.children();
|
16
|
+
this.optionList = this._buildOptionList(this.optionElems);
|
17
|
+
this.optionFilter = undefined;
|
15
18
|
|
16
19
|
this.doInit();
|
17
20
|
this.doBindDropdown();
|
@@ -44,15 +47,10 @@ RomoSelectDropdown.prototype.doBindDropdown = function() {
|
|
44
47
|
this.romoDropdown = this.elem.romoDropdown()[0];
|
45
48
|
this.romoDropdown.doSetPopupZIndex(this.elem);
|
46
49
|
this.romoDropdown.bodyElem.addClass('romo-select-option-list');
|
50
|
+
|
47
51
|
this.romoDropdown.elem.on('dropdown:popupOpen', $.proxy(this.onPopupOpen, this));
|
48
52
|
this.romoDropdown.elem.on('dropdown:popupClose', $.proxy(this.onPopupClose, this));
|
49
|
-
|
50
|
-
this.blurTimeoutId = setTimeout($.proxy(function() {
|
51
|
-
if (this.popupMouseDown !== true) {
|
52
|
-
this.romoDropdown.elem.trigger('dropdown:triggerPopupClose', []);
|
53
|
-
}
|
54
|
-
}, this), 10);
|
55
|
-
}, this));
|
53
|
+
|
56
54
|
this.romoDropdown.elem.on('keydown', $.proxy(this.onElemKeyDown, this));
|
57
55
|
this.romoDropdown.popupElem.on('keydown', $.proxy(this.onElemKeyDown, this));
|
58
56
|
|
@@ -77,6 +75,15 @@ RomoSelectDropdown.prototype.doBindDropdown = function() {
|
|
77
75
|
}, this));
|
78
76
|
|
79
77
|
this.romoDropdown.bodyElem.html('');
|
78
|
+
|
79
|
+
if (this.elem.data('romo-select-dropdown-no-filter') !== true) {
|
80
|
+
this.optionFilter = this._buildOptionFilter();
|
81
|
+
var optionFilterWrapper = $('<div class="romo-select-dropdown-option-filter-wrapper"></div>');
|
82
|
+
optionFilterWrapper.append(this.optionFilter);
|
83
|
+
this.romoDropdown.popupElem.prepend(optionFilterWrapper);
|
84
|
+
this.doBindDropdownOptionFilter();
|
85
|
+
}
|
86
|
+
|
80
87
|
this.romoDropdown.bodyElem.append(this.optionList);
|
81
88
|
|
82
89
|
this.romoDropdown.bodyElem.find(this.itemSelector).on('mouseenter', $.proxy(this.onItemEnter, this));
|
@@ -86,16 +93,116 @@ RomoSelectDropdown.prototype.doBindDropdown = function() {
|
|
86
93
|
this.romoDropdown.popupElem.on('mouseup', $.proxy(this.onPopupMouseUp, this));
|
87
94
|
}
|
88
95
|
|
96
|
+
RomoSelectDropdown.prototype.doBindDropdownOptionFilter = function() {
|
97
|
+
this.optionFilter.romoIndicatorTextInput();
|
98
|
+
this.optionFilter.romoOnkey();
|
99
|
+
|
100
|
+
this.romoDropdown.elem.on('focus', $.proxy(function(e) {
|
101
|
+
if (this.blurTimeoutId !== undefined) {
|
102
|
+
clearTimeout(this.blurTimeoutId);
|
103
|
+
}
|
104
|
+
// remove any manual elem focus when elem is actually focused
|
105
|
+
this.optionFilterFocused = false;
|
106
|
+
this.romoDropdown.elem.removeClass('romo-select-focus');
|
107
|
+
}, this));
|
108
|
+
this.romoDropdown.elem.on('blur', $.proxy(function(e) {
|
109
|
+
if (this.blurTimeoutId !== undefined) {
|
110
|
+
clearTimeout(this.blurTimeoutId);
|
111
|
+
}
|
112
|
+
// close the dropdown when elem is blurred
|
113
|
+
// remove any manual focus as well
|
114
|
+
this.romoDropdown.elem.removeClass('romo-select-focus');
|
115
|
+
this.blurTimeoutId = setTimeout($.proxy(function() {
|
116
|
+
if (this.popupMouseDown !== true && this.optionFilterFocused !== true) {
|
117
|
+
this.romoDropdown.elem.trigger('dropdown:triggerPopupClose', []);
|
118
|
+
}
|
119
|
+
}, this), 10);
|
120
|
+
}, this));
|
121
|
+
this.optionFilter.on('focus', $.proxy(function(e) {
|
122
|
+
if (this.blurTimeoutId !== undefined) {
|
123
|
+
clearTimeout(this.blurTimeoutId);
|
124
|
+
}
|
125
|
+
// manually make the elem focused when its filter is focused
|
126
|
+
this.optionFilterFocused = true;
|
127
|
+
this.romoDropdown.elem.addClass('romo-select-focus');
|
128
|
+
}, this));
|
129
|
+
this.optionFilter.on('blur', $.proxy(function(e) {
|
130
|
+
// remove any manual elem focus when its filter is blurred
|
131
|
+
this.optionFilterFocused = false;
|
132
|
+
this.romoDropdown.elem.removeClass('romo-select-focus');
|
133
|
+
}, this));
|
134
|
+
|
135
|
+
this.romoDropdown.elem.on('dropdown:popupOpen', $.proxy(function(e, dropdown) {
|
136
|
+
this.optionFilter.trigger('indicatorTextInput:triggerPlaceIndicator');
|
137
|
+
this.optionFilter.focus();
|
138
|
+
this.doFilterOptionElems();
|
139
|
+
}, this));
|
140
|
+
this.romoDropdown.elem.on('dropdown:popupClose', $.proxy(function(e, dropdown) {
|
141
|
+
this.optionFilter.val('');
|
142
|
+
}, this));
|
143
|
+
this.romoDropdown.elem.on('dropdown:popupClosedByEsc', $.proxy(function(e, dropdown) {
|
144
|
+
this.romoDropdown.elem.focus();
|
145
|
+
}, this));
|
146
|
+
this.optionFilter.on('click', $.proxy(function(e) {
|
147
|
+
if (e !== undefined) {
|
148
|
+
e.stopPropagation();
|
149
|
+
}
|
150
|
+
}, this));
|
151
|
+
this.romoDropdown.popupElem.on('click', $.proxy(function(e) {
|
152
|
+
this.optionFilter.focus();
|
153
|
+
}, this));
|
154
|
+
|
155
|
+
this.onkeySearchTimeout = undefined;
|
156
|
+
this.onkeySearchDelay = 100; // 0.1 secs, want it to be really responsive
|
157
|
+
|
158
|
+
this.optionFilter.on('onkey:trigger', $.proxy(function(e, triggerEvent, onkey) {
|
159
|
+
// TODO: incorp this timeout logic into the onkey component so don't have to repeat it
|
160
|
+
clearTimeout(this.onkeySearchTimeout);
|
161
|
+
this.onkeySearchTimeout = setTimeout($.proxy(function() {
|
162
|
+
if (Romo.nonInputTextKeyCodes().indexOf(triggerEvent.keyCode) === -1 /* Input Text */) {
|
163
|
+
this.doFilterOptionElems();
|
164
|
+
}
|
165
|
+
}, this), this.onkeySearchDelay);
|
166
|
+
}, this));
|
167
|
+
}
|
168
|
+
|
169
|
+
RomoSelectDropdown.prototype.doFilterOptionElems = function() {
|
170
|
+
var wbFilter = new RomoWordBoundaryFilter(
|
171
|
+
this.optionFilter.val(),
|
172
|
+
this.romoDropdown.bodyElem.find('LI[data-romo-select-item="opt"]'),
|
173
|
+
function(elem) {
|
174
|
+
return elem[0].textContent;
|
175
|
+
}
|
176
|
+
);
|
177
|
+
|
178
|
+
wbFilter.matchingElems.show();
|
179
|
+
wbFilter.notMatchingElems.hide();
|
180
|
+
wbFilter.matchingElems.removeClass(this.filterHiddenClass);
|
181
|
+
wbFilter.notMatchingElems.addClass(this.filterHiddenClass);
|
182
|
+
|
183
|
+
this.romoDropdown.doPlacePopupElem();
|
184
|
+
if (this.optionFilter.val() !== '') {
|
185
|
+
this._highlightItem(wbFilter.matchingElems.first());
|
186
|
+
this._scrollTopToItem(wbFilter.matchingElems.first());
|
187
|
+
} else {
|
188
|
+
this._highlightItem(this.selectedListing());
|
189
|
+
this._scrollTopToItem(this.selectedListing());
|
190
|
+
}
|
191
|
+
}
|
192
|
+
|
89
193
|
RomoSelectDropdown.prototype.doSelectHighlightedItem = function() {
|
90
|
-
var
|
91
|
-
|
194
|
+
var curr = this._getHighlightedItem();
|
195
|
+
if (curr.length !== 0) {
|
196
|
+
var prevValue = this.prevValue;
|
197
|
+
var newValue = curr.data('romo-select-option-value');
|
92
198
|
|
93
|
-
|
94
|
-
|
199
|
+
this.romoDropdown.doPopupClose();
|
200
|
+
this.elem.trigger('selectDropdown:itemSelected', [newValue, prevValue, this]);
|
95
201
|
|
96
|
-
|
97
|
-
|
98
|
-
|
202
|
+
if (newValue !== prevValue) {
|
203
|
+
this.doSetNewValue(newValue);
|
204
|
+
this.elem.trigger('selectDropdown:change', [newValue, prevValue, this]);
|
205
|
+
}
|
99
206
|
}
|
100
207
|
}
|
101
208
|
|
@@ -172,6 +279,9 @@ RomoSelectDropdown.prototype.onPopupOpenBodyKeyDown = function(e) {
|
|
172
279
|
} else if (e.keyCode === 13 /* Enter */ ) {
|
173
280
|
this.doSelectHighlightedItem();
|
174
281
|
return false;
|
282
|
+
} else if (e.keyCode === 9 /* Tab */ ) {
|
283
|
+
e.preventDefault();
|
284
|
+
return false;
|
175
285
|
} else {
|
176
286
|
return true;
|
177
287
|
}
|
@@ -180,9 +290,19 @@ RomoSelectDropdown.prototype.onPopupOpenBodyKeyDown = function(e) {
|
|
180
290
|
RomoSelectDropdown.prototype.onElemKeyDown = function(e) {
|
181
291
|
if (this.elem.hasClass('disabled') === false) {
|
182
292
|
if (this.romoDropdown.popupElem.hasClass('romo-dropdown-open') === false) {
|
183
|
-
if(e.keyCode === 40 /* Down */ ) {
|
293
|
+
if (e.keyCode === 40 /* Down */ || e.keyCode === 38 /* Up */) {
|
184
294
|
this.romoDropdown.doPopupOpen();
|
185
295
|
return false;
|
296
|
+
} else if (this.optionFilter !== undefined &&
|
297
|
+
Romo.nonInputTextKeyCodes().indexOf(e.keyCode) === -1 /* Input Text */) {
|
298
|
+
if (e.metaKey === false) {
|
299
|
+
// don't prevent default on Cmd-* keys (preserve Cmd-R refresh, etc)
|
300
|
+
e.preventDefault();
|
301
|
+
}
|
302
|
+
e.stopPropagation();
|
303
|
+
this.optionFilter.val(e.key);
|
304
|
+
this.romoDropdown.doPopupOpen();
|
305
|
+
return true;
|
186
306
|
} else {
|
187
307
|
return true;
|
188
308
|
}
|
@@ -258,69 +378,74 @@ RomoSelectDropdown.prototype._buildOptGroupListItem = function(optGroupElem) {
|
|
258
378
|
return item;
|
259
379
|
}
|
260
380
|
|
261
|
-
RomoSelectDropdown.prototype.
|
262
|
-
var
|
263
|
-
var curr = this.romoDropdown.bodyElem.find('LI.romo-select-highlight');
|
264
|
-
var next = this._nextAll(curr, listOrItemSelector).first();
|
381
|
+
RomoSelectDropdown.prototype._buildOptionFilter = function() {
|
382
|
+
var filter = $('<input type="text" class="romo-select-dropdown-option-filter"></input>');
|
265
383
|
|
266
|
-
if (
|
267
|
-
|
384
|
+
if (this.elem.data('romo-select-dropdown-filter-placeholder') !== undefined) {
|
385
|
+
filter.attr('placeholder', this.elem.data('romo-select-dropdown-filter-placeholder'));
|
268
386
|
}
|
269
|
-
|
270
|
-
|
387
|
+
filter.attr('data-romo-indicator-text-input-elem-display', "block");
|
388
|
+
if (this.elem.data('romo-select-dropdown-filter-indicator') !== undefined) {
|
389
|
+
filter.attr('data-romo-indicator-text-input-indicator', this.elem.data('romo-select-dropdown-filter-indicator'));
|
271
390
|
}
|
272
|
-
if (
|
273
|
-
|
391
|
+
if (this.elem.data('romo-select-dropdown-filter-indicator-width-px') !== undefined) {
|
392
|
+
filter.attr('data-romo-indicator-text-input-indicator-width-px', this.elem.data('romo-select-dropdown-filter-indicator-width-px'));
|
274
393
|
}
|
275
|
-
|
276
|
-
|
394
|
+
filter.attr('data-romo-form-disable-enter-submit', "true");
|
395
|
+
filter.attr('data-romo-onkey-on', "keydown");
|
277
396
|
|
278
|
-
|
279
|
-
var listOrItemSelector = 'UL, '+this.itemSelector;
|
280
|
-
var curr = this.romoDropdown.bodyElem.find('LI.romo-select-highlight');
|
281
|
-
var prev = this._prevAll(curr, listOrItemSelector).last();
|
397
|
+
filter.attr('autocomplete', 'off');
|
282
398
|
|
283
|
-
|
284
|
-
prev = this._prevAll(curr.closest('UL'), listOrItemSelector).last();
|
285
|
-
}
|
286
|
-
if (prev.size() !== 0 && prev[0].tagName === 'UL') {
|
287
|
-
prev = prev.find(this.itemSelector).last()
|
288
|
-
}
|
289
|
-
if (prev.size() === 0) {
|
290
|
-
prev = this.romoDropdown.bodyElem.find(this.itemSelector).last();
|
291
|
-
}
|
292
|
-
return prev;
|
399
|
+
return filter;
|
293
400
|
}
|
294
401
|
|
295
|
-
RomoSelectDropdown.prototype.
|
296
|
-
var
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
402
|
+
RomoSelectDropdown.prototype._nextListItem = function() {
|
403
|
+
var curr = this._getHighlightedItem();
|
404
|
+
if (curr.length === 0) {
|
405
|
+
return curr;
|
406
|
+
}
|
407
|
+
var currList = curr.closest('UL');
|
408
|
+
var next = Romo.selectNext(curr, this.itemSelector);
|
409
|
+
|
410
|
+
while (next.length === 0) {
|
411
|
+
currList = Romo.selectNext(currList, 'UL');
|
412
|
+
if (currList.length !== 0) {
|
413
|
+
next = currList.find(this.itemSelector).first();
|
414
|
+
} else {
|
415
|
+
next = this.romoDropdown.bodyElem.find(this.itemSelector).first();
|
301
416
|
}
|
302
|
-
el = el.next();
|
303
417
|
}
|
304
|
-
return
|
418
|
+
return next;
|
305
419
|
}
|
306
420
|
|
307
|
-
RomoSelectDropdown.prototype.
|
308
|
-
var
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
421
|
+
RomoSelectDropdown.prototype._prevListItem = function() {
|
422
|
+
var curr = this._getHighlightedItem();
|
423
|
+
if (curr.length === 0) {
|
424
|
+
return curr;
|
425
|
+
}
|
426
|
+
var currList = curr.closest('UL');
|
427
|
+
var prev = Romo.selectPrev(curr, this.itemSelector);
|
428
|
+
|
429
|
+
while (prev.length === 0) {
|
430
|
+
currList = Romo.selectPrev(currList, 'UL');
|
431
|
+
if (currList.length !== 0) {
|
432
|
+
prev = currList.find(this.itemSelector).last();
|
433
|
+
} else {
|
434
|
+
prev = this.romoDropdown.bodyElem.find(this.itemSelector).last();
|
313
435
|
}
|
314
|
-
el = el.prev();
|
315
436
|
}
|
316
|
-
return
|
437
|
+
return prev;
|
317
438
|
}
|
318
439
|
|
319
440
|
RomoSelectDropdown.prototype._highlightItem = function(item) {
|
320
|
-
this.
|
441
|
+
this._getHighlightedItem().removeClass('romo-select-highlight');
|
321
442
|
item.addClass('romo-select-highlight');
|
322
443
|
}
|
323
444
|
|
445
|
+
RomoSelectDropdown.prototype._getHighlightedItem = function() {
|
446
|
+
return this.romoDropdown.bodyElem.find('LI.romo-select-highlight');
|
447
|
+
}
|
448
|
+
|
324
449
|
Romo.onInitUI(function(e) {
|
325
450
|
Romo.initUIElems(e, '[data-romo-select-dropdown-auto="true"]').romoSelectDropdown();
|
326
451
|
});
|
data/assets/js/romo/sortable.js
CHANGED
@@ -10,15 +10,28 @@ var RomoSortable = function(element) {
|
|
10
10
|
this.draggableSelector = '[data-romo-sortable-item="true"]';
|
11
11
|
this.handleSelector = '[data-romo-sortable-handle="true"]';
|
12
12
|
|
13
|
-
this.
|
14
|
-
this.
|
13
|
+
this.draggedElem = this.draggedIndex = this.draggableSelected = null;
|
14
|
+
this.draggedOverElem = this.dragDirection = this.lastY = null;
|
15
|
+
|
16
|
+
this.doInit();
|
17
|
+
this.doBindDraggables();
|
18
|
+
this.doInitPlaceholder();
|
19
|
+
this._resetGrabClasses();
|
20
|
+
|
21
|
+
this.elem.trigger('sortable:ready', [this]);
|
22
|
+
}
|
23
|
+
|
24
|
+
RomoSortable.prototype.doInit = function() {
|
25
|
+
// override as needed
|
26
|
+
}
|
15
27
|
|
16
|
-
|
17
|
-
this.
|
28
|
+
RomoSortable.prototype.doBindDraggables = function() {
|
29
|
+
this.draggingClass = this.elem.data('romo-sortable-dragging-class') || '';
|
30
|
+
this.dragOverClass = this.elem.data('romo-sortable-dragover-class') || '';
|
18
31
|
this.placeholderClass = this.elem.data('romo-sortable-placeholder-class') || '';
|
19
32
|
|
20
|
-
this.
|
21
|
-
this.
|
33
|
+
this.draggableElems = this.elem.find(this.draggableSelector);
|
34
|
+
this.draggableElems.prop('draggable', 'true');
|
22
35
|
|
23
36
|
this.elem.on('dragenter', $.proxy(this.onDragEnter, this));
|
24
37
|
this.elem.on('dragover', $.proxy(this.onDragOver, this));
|
@@ -36,16 +49,6 @@ var RomoSortable = function(element) {
|
|
36
49
|
handleElems.on('mousedown', $.proxy(this.onHandleMouseDown, this));
|
37
50
|
|
38
51
|
$('body').on('mouseup', $.proxy(this.onWindowBodyMouseUp, this));
|
39
|
-
|
40
|
-
this._resetGrabClasses();
|
41
|
-
this.doInit();
|
42
|
-
this.doInitPlaceholder();
|
43
|
-
|
44
|
-
this.elem.trigger('sortable:ready', [this]);
|
45
|
-
}
|
46
|
-
|
47
|
-
RomoSortable.prototype.doInit = function() {
|
48
|
-
// override as needed
|
49
52
|
}
|
50
53
|
|
51
54
|
RomoSortable.prototype.doInitPlaceholder = function() {
|
data/lib/romo/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: romo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.17.
|
4
|
+
version: 0.17.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kelly Redding
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2016-11-
|
13
|
+
date: 2016-11-08 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: assert
|