romo 0.19.7 → 0.19.8
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 +5 -5
- data/assets/js/romo/base.js +563 -216
- data/assets/js/romo/option_list_dropdown.js +4 -2
- data/assets/js/romo/picker.js +7 -4
- data/lib/romo/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 97d1c8900aee3e16f65d499f0837bb74f6225033
|
4
|
-
data.tar.gz: 17737178b8474f79671d577bd173db8fffdfb817
|
5
2
|
SHA512:
|
6
|
-
|
7
|
-
|
3
|
+
data.tar.gz: 5eea8c90486df3910adfb7ec8c509ad7b905b00b75cd254dbe0b2ef5717e9af0f4d75274cd674af2c4788c335eec7c1bda863e62ec9f5fb07bd2c79ed98613b7
|
4
|
+
metadata.gz: 7677d14e707541385b4bae0f61963fafd0d05ac14ac49cdcf3b0796cac5d473e68a7ea1e71a62238399587d6b43bc1a3676aa3d2babf3fbdbcd5f5ef4506b8d4
|
5
|
+
SHA1:
|
6
|
+
data.tar.gz: 796333f88f138aaba75067ce59915e6aa5f5bf4c
|
7
|
+
metadata.gz: 9a0f573b36b64a154382beb9a02ee6d51351a0db
|
data/assets/js/romo/base.js
CHANGED
@@ -1,274 +1,612 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
}
|
1
|
+
var Romo = function() {
|
2
|
+
this._eventCallbacks = [];
|
3
|
+
}
|
5
4
|
|
6
|
-
|
7
|
-
|
5
|
+
// TODO: rework w/o jQuery
|
6
|
+
Romo.prototype.doInit = function() {
|
7
|
+
this.parentChildElems = new RomoParentChildElems();
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
$.each(this._eventCallbacks, function(idx, eventCallback) {
|
10
|
+
$('body').on(eventCallback.eventName, eventCallback.callback);
|
11
|
+
});
|
12
12
|
|
13
|
-
|
14
|
-
|
13
|
+
this.triggerInitUI($('body'));
|
14
|
+
}
|
15
15
|
|
16
|
-
|
16
|
+
// element finders
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
Romo.prototype.f = function(selector) {
|
19
|
+
return this.array(document.querySelectorAll(selector));
|
20
|
+
}
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
|
22
|
+
Romo.prototype.find = function(parentElem, selector) {
|
23
|
+
return this.array(parentElem.querySelectorAll(selector));
|
24
|
+
}
|
25
|
+
|
26
|
+
Romo.prototype.children = function(parentElem) {
|
27
|
+
return this.array(parentElem.children);
|
28
|
+
}
|
25
29
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
+
Romo.prototype.parent = function(childElem) {
|
31
|
+
return childElem.parentNode;
|
32
|
+
}
|
33
|
+
|
34
|
+
Romo.prototype.siblings = function(elem) {
|
35
|
+
return Array.prototype.filter.call(elem.parentNode.children, function(childElem) {
|
36
|
+
return childElem !== elem;
|
37
|
+
});
|
38
|
+
}
|
39
|
+
|
40
|
+
Romo.prototype.prev = function(fromElem) {
|
41
|
+
return fromElem.previousElementSibling;
|
42
|
+
}
|
43
|
+
|
44
|
+
Romo.prototype.next = function(fromElem) {
|
45
|
+
return fromElem.nextElementSibling;
|
46
|
+
}
|
47
|
+
|
48
|
+
Romo.prototype.closest = function(fromElem, selector) {
|
49
|
+
if (fromElem.closest) {
|
50
|
+
return fromElem.closest(selector);
|
51
|
+
} else {
|
52
|
+
var matchesSelector = fromElem.matches ||
|
53
|
+
fromElem.webkitMatchesSelector ||
|
54
|
+
fromElem.mozMatchesSelector ||
|
55
|
+
fromElem.msMatchesSelector;
|
56
|
+
while (fromElem) {
|
57
|
+
if (matchesSelector.call(fromElem, selector)) {
|
58
|
+
return fromElem;
|
59
|
+
} else {
|
60
|
+
fromElem = fromElem.parentElement;
|
61
|
+
}
|
30
62
|
}
|
31
|
-
return
|
63
|
+
return undefined;
|
32
64
|
}
|
65
|
+
}
|
33
66
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
67
|
+
// TODO: rework w/o jQuery
|
68
|
+
Romo.prototype.selectNext = function(elem, selector) {
|
69
|
+
// like `$().next()`, but takes a selector; returns first next elem that
|
70
|
+
// matches the given selector or an empty collection if non matches
|
71
|
+
var el = elem.next();
|
72
|
+
while(el.length) {
|
73
|
+
if (selector === undefined || el.is(selector)) {
|
74
|
+
return el;
|
75
|
+
}
|
76
|
+
el = el.next();
|
40
77
|
}
|
78
|
+
return el;
|
79
|
+
}
|
41
80
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
81
|
+
// TODO: rework w/o jQuery
|
82
|
+
Romo.prototype.selectPrev = function(elem, selector) {
|
83
|
+
// like `$().prev()`, but takes a selector; returns first prev elem that
|
84
|
+
// matches the given selector or an empty collection if non matches
|
85
|
+
var el = elem.prev();
|
86
|
+
while(el.length) {
|
87
|
+
if (selector === undefined || el.is(selector)) {
|
88
|
+
return el;
|
89
|
+
}
|
90
|
+
el = el.prev();
|
48
91
|
}
|
92
|
+
return el;
|
93
|
+
}
|
49
94
|
|
50
|
-
|
51
|
-
elems.each($.proxy(function(index, elem) {
|
52
|
-
var prependedElem = $(data);
|
53
|
-
$(elem).prepend(prependedElem);
|
54
|
-
this.triggerInitUI(prependedElem);
|
55
|
-
}, this));
|
56
|
-
}
|
95
|
+
// attributes, styles, classes
|
57
96
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
97
|
+
Romo.prototype.attr = function(elem, attrName) {
|
98
|
+
return elem.getAttribute ? elem.getAttribute(attrName) : undefined;
|
99
|
+
}
|
100
|
+
|
101
|
+
Romo.prototype.setAttr = function(elem, attrName, attrValue) {
|
102
|
+
if (elem.setAttribute) {
|
103
|
+
elem.setAttribute(attrName, attrValue);
|
64
104
|
}
|
105
|
+
return attrValue;
|
106
|
+
}
|
65
107
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
108
|
+
Romo.prototype.style = function(elem, styleName) {
|
109
|
+
return elem.style[styleName];
|
110
|
+
}
|
111
|
+
|
112
|
+
Romo.prototype.setStyle = function(elem, styleName, styleValue) {
|
113
|
+
elem.style[styleName] = styleValue;
|
114
|
+
return styleValue;
|
115
|
+
}
|
116
|
+
|
117
|
+
Romo.prototype.css = function(elem, styleName) {
|
118
|
+
return window.getComputedStyle(elem, null).getPropertyValue(styleName);
|
119
|
+
}
|
120
|
+
|
121
|
+
Romo.prototype.addClass = function(elem, className) {
|
122
|
+
elem.classList.add(className);
|
123
|
+
return className;
|
124
|
+
}
|
125
|
+
|
126
|
+
Romo.prototype.removeClass = function(elem, className) {
|
127
|
+
elem.classList.remove(className);
|
128
|
+
return className;
|
129
|
+
}
|
130
|
+
|
131
|
+
Romo.prototype.toggleClass = function(elem, className) {
|
132
|
+
elem.classList.toggle(className);
|
133
|
+
return className;
|
134
|
+
}
|
135
|
+
|
136
|
+
Romo.prototype.hasClass = function(elem, className) {
|
137
|
+
return elem.classList.contains(className);
|
138
|
+
}
|
139
|
+
|
140
|
+
Romo.prototype.show = function(elem) {
|
141
|
+
elem.style.display = '';
|
142
|
+
}
|
143
|
+
|
144
|
+
Romo.prototype.hide = function(elem) {
|
145
|
+
elem.style.display = 'none';
|
146
|
+
}
|
147
|
+
|
148
|
+
Romo.prototype.offset = function(elem) {
|
149
|
+
var rect = elem.getBoundingClientRect();
|
150
|
+
return {
|
151
|
+
top: rect.top + document.body.scrollTop,
|
152
|
+
left: rect.left + document.body.scrollLeft
|
153
|
+
};
|
154
|
+
}
|
155
|
+
|
156
|
+
Romo.prototype.scrollTop = function(elem) {
|
157
|
+
return ('scrollTop' in elem) ? elem.scrollTop : elem.pageYOffset;
|
158
|
+
}
|
159
|
+
|
160
|
+
Romo.prototype.scrollLeft = function(elem) {
|
161
|
+
return ('scrollLeft' in elem) ? elem.scrollLeft : elem.pageXOffset;
|
162
|
+
}
|
163
|
+
|
164
|
+
Romo.prototype.setScrollTop = function(elem, value) {
|
165
|
+
if ('scrollTop' in elem) {
|
166
|
+
elem.scrollTop = value;
|
167
|
+
} else {
|
168
|
+
elem.scrollTo(elem.scrollX, value);
|
72
169
|
}
|
170
|
+
}
|
73
171
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
}, this));
|
172
|
+
Romo.prototype.setScrollLeft = function(elem, value) {
|
173
|
+
if ('scrollLeft' in elem) {
|
174
|
+
elem.scrollLeft = value;
|
175
|
+
} else {
|
176
|
+
elem.scrollTo(value, elem.scrollY);
|
80
177
|
}
|
178
|
+
}
|
81
179
|
|
82
|
-
|
180
|
+
// TODO: rework w/o jQuery
|
181
|
+
Romo.prototype.getComputedStyle = function(node, styleName) {
|
182
|
+
return window.getComputedStyle(node, null).getPropertyValue(styleName);
|
183
|
+
}
|
83
184
|
|
84
|
-
|
85
|
-
|
185
|
+
// TODO: rework w/o jQuery
|
186
|
+
Romo.prototype.parseZIndex = function(elem) {
|
187
|
+
// for the case where z-index is set directly on the elem
|
188
|
+
var val = this.parseElemZIndex(elem);
|
189
|
+
if (val !== 0) {
|
190
|
+
return val;
|
86
191
|
}
|
87
192
|
|
88
|
-
|
89
|
-
|
193
|
+
// for the case where z-index is inherited from a parent elem
|
194
|
+
var parentIndexes = this.toArray(elem.parents()).reduce($.proxy(function(prev, curr) {
|
195
|
+
var pval = this.parseElemZIndex($(curr));
|
196
|
+
if (pval !== 0) {
|
197
|
+
prev.push(pval);
|
198
|
+
}
|
199
|
+
return prev;
|
200
|
+
}, this), []);
|
201
|
+
parentIndexes.push(0); // in case z-index is 'auto' all the way up
|
202
|
+
return parentIndexes[0];
|
203
|
+
}
|
204
|
+
|
205
|
+
// TODO: rework w/o jQuery
|
206
|
+
Romo.prototype.parseElemZIndex = function(elem) {
|
207
|
+
var val = parseInt(this.getComputedStyle(elem[0], "z-index"));
|
208
|
+
if (!isNaN(val)) {
|
209
|
+
return val;
|
90
210
|
}
|
211
|
+
return 0;
|
212
|
+
}
|
91
213
|
|
92
|
-
|
214
|
+
// DOM manipulation
|
93
215
|
|
94
|
-
|
95
|
-
|
216
|
+
Romo.prototype.elems = function(htmlString) {
|
217
|
+
var context = document.implementation.createHTMLDocument();
|
96
218
|
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
})
|
103
|
-
}
|
219
|
+
// Set the base href for the created document so any parsed
|
220
|
+
// elements with URLs are based on the document's URL
|
221
|
+
var base = context.createElement('base');
|
222
|
+
base.href = document.location.href;
|
223
|
+
context.head.appendChild(base);
|
104
224
|
|
105
|
-
|
225
|
+
context.body.innerHTML = htmlString;
|
226
|
+
return this.array(context.body.children);
|
227
|
+
}
|
106
228
|
|
107
|
-
|
108
|
-
|
109
|
-
|
229
|
+
Romo.prototype.remove = function(elem) {
|
230
|
+
return elem.parentNode.removeChild(elem);
|
231
|
+
}
|
110
232
|
|
111
|
-
|
112
|
-
|
233
|
+
Romo.prototype.replace = function(elem, replacementElem) {
|
234
|
+
elem.parentNode.replaceChild(replacementElem, elem);
|
235
|
+
return replacementElem;
|
236
|
+
}
|
113
237
|
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
}, string);
|
118
|
-
}
|
238
|
+
Romo.prototype.replaceHtml = function(elem, htmlString) {
|
239
|
+
return this.replace(elem, this.elems(htmlString)[0]);
|
240
|
+
}
|
119
241
|
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
242
|
+
Romo.prototype.update = function(elem, childElems) {
|
243
|
+
elem.innerHTML = '';
|
244
|
+
return childElems.map(function(childElem) {
|
245
|
+
return elem.appendChild(childElem);
|
246
|
+
});
|
247
|
+
}
|
248
|
+
|
249
|
+
Romo.prototype.updateHtml = function(elem, htmlString) {
|
250
|
+
return this.update(elem, this.elems(htmlString));
|
251
|
+
}
|
252
|
+
|
253
|
+
Romo.prototype.prepend = function(elem, childElems) {
|
254
|
+
var refElem = elem.firstChild;
|
255
|
+
return childElems.reverse().map(function(childElem) {
|
256
|
+
refElem = elem.insertBefore(childElem, refElem);
|
257
|
+
return refElem;
|
258
|
+
}).reverse();
|
259
|
+
}
|
260
|
+
|
261
|
+
Romo.prototype.prependHtml = function(elem, htmlString) {
|
262
|
+
return this.prepend(elem, this.elems(htmlString));
|
263
|
+
}
|
264
|
+
|
265
|
+
Romo.prototype.append = function(elem, childElems) {
|
266
|
+
return childElems.map(function(childElem) {
|
267
|
+
return elem.appendChild(childElem);
|
268
|
+
});
|
269
|
+
}
|
270
|
+
|
271
|
+
Romo.prototype.appendHtml = function(elem, htmlString) {
|
272
|
+
return this.append(elem, this.elems(htmlString));
|
273
|
+
}
|
274
|
+
|
275
|
+
Romo.prototype.before = function(elem, siblingElems) {
|
276
|
+
var refElem = elem;
|
277
|
+
var parentElem = elem.parentNode;
|
278
|
+
return siblingElems.reverse().map(function(siblingElem) {
|
279
|
+
refElem = parentElem.insertBefore(siblingElem, refElem);
|
280
|
+
return refElem;
|
281
|
+
}).reverse();
|
282
|
+
}
|
283
|
+
|
284
|
+
Romo.prototype.beforeHtml = function(elem, htmlString) {
|
285
|
+
return this.before(elem, this.elems(htmlString));
|
286
|
+
}
|
287
|
+
|
288
|
+
Romo.prototype.after = function(elem, siblingElems) {
|
289
|
+
var refElem = this.next(elem);
|
290
|
+
var parentElem = elem.parentNode;
|
291
|
+
return siblingElems.map(function(siblingElem) {
|
292
|
+
return parentElem.insertBefore(siblingElem, refElem);
|
293
|
+
});
|
294
|
+
}
|
295
|
+
|
296
|
+
Romo.prototype.afterHtml = function(elem, htmlString) {
|
297
|
+
return this.after(elem, this.elems(htmlString));
|
298
|
+
}
|
299
|
+
|
300
|
+
// init UI (TODO: rework w/o jQuery)
|
301
|
+
|
302
|
+
Romo.prototype.onInitUI = function(callback) {
|
303
|
+
this._addEventCallback('romo:initUI', callback);
|
304
|
+
}
|
148
305
|
|
149
|
-
|
306
|
+
Romo.prototype.triggerInitUI = function(elems) {
|
307
|
+
elems.trigger('romo:initUI');
|
308
|
+
}
|
150
309
|
|
151
|
-
|
152
|
-
|
310
|
+
Romo.prototype.initUIElems = function(e, selector) {
|
311
|
+
var elems = $(e.target).find(selector).get();
|
312
|
+
if ($(e.target).is(selector)) {
|
313
|
+
elems.push(e.target)
|
153
314
|
}
|
315
|
+
return $(elems);
|
316
|
+
}
|
154
317
|
|
155
|
-
|
156
|
-
|
157
|
-
var
|
158
|
-
|
159
|
-
|
160
|
-
|
318
|
+
Romo.prototype.initHtml = function(elems, data) {
|
319
|
+
elems.each($.proxy(function(index, elem) {
|
320
|
+
var htmlElems = $(data)
|
321
|
+
$(elem).html(htmlElems);
|
322
|
+
this.triggerInitUI(htmlElems);
|
323
|
+
}, this));
|
324
|
+
}
|
325
|
+
|
326
|
+
Romo.prototype.initReplace = function(elems, data) {
|
327
|
+
elems.each($.proxy(function(index, elem) {
|
328
|
+
var replacementElem = $(data);
|
329
|
+
$(elem).replaceWith(replacementElem);
|
330
|
+
this.triggerInitUI(replacementElem);
|
331
|
+
}, this));
|
332
|
+
}
|
333
|
+
|
334
|
+
Romo.prototype.initPrepend = function(elems, data) {
|
335
|
+
elems.each($.proxy(function(index, elem) {
|
336
|
+
var prependedElem = $(data);
|
337
|
+
$(elem).prepend(prependedElem);
|
338
|
+
this.triggerInitUI(prependedElem);
|
339
|
+
}, this));
|
340
|
+
}
|
341
|
+
|
342
|
+
Romo.prototype.initAppend = function(elems, data) {
|
343
|
+
elems.each($.proxy(function(index, elem) {
|
344
|
+
var appendedElem = $(data);
|
345
|
+
$(elem).append(appendedElem);
|
346
|
+
this.triggerInitUI(appendedElem);
|
347
|
+
}, this));
|
348
|
+
}
|
349
|
+
|
350
|
+
Romo.prototype.initBefore = function(elems, data) {
|
351
|
+
elems.each($.proxy(function(index, elem) {
|
352
|
+
var insertedElem = $(data);
|
353
|
+
$(elem).before(insertedElem);
|
354
|
+
this.triggerInitUI(insertedElem);
|
355
|
+
}, this));
|
356
|
+
}
|
357
|
+
|
358
|
+
Romo.prototype.initAfter = function(elems, data) {
|
359
|
+
elems.each($.proxy(function(index, elem) {
|
360
|
+
var insertedElem = $(data);
|
361
|
+
$(elem).after(insertedElem);
|
362
|
+
this.triggerInitUI(insertedElem);
|
363
|
+
}, this));
|
364
|
+
}
|
365
|
+
|
366
|
+
// page handling
|
161
367
|
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
368
|
+
Romo.prototype.reloadPage = function() {
|
369
|
+
window.location = window.location;
|
370
|
+
}
|
371
|
+
|
372
|
+
Romo.prototype.redirectPage = function(redirectUrl) {
|
373
|
+
window.location = redirectUrl;
|
374
|
+
}
|
375
|
+
|
376
|
+
// param serialization (TODO: rework w/o jQuery)
|
377
|
+
|
378
|
+
Romo.prototype.param = function(data, opts) {
|
379
|
+
var paramData = $.extend({}, data);
|
380
|
+
|
381
|
+
if (opts && opts.removeEmpty) {
|
382
|
+
$.each(paramData, function(key, value) {
|
383
|
+
if (value === '') {
|
384
|
+
delete paramData[key];
|
167
385
|
}
|
168
|
-
|
169
|
-
}, this), []);
|
170
|
-
parentIndexes.push(0); // in case z-index is 'auto' all the way up
|
171
|
-
return parentIndexes[0];
|
386
|
+
})
|
172
387
|
}
|
173
388
|
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
}
|
179
|
-
return 0;
|
389
|
+
var paramString = $.param(paramData);
|
390
|
+
|
391
|
+
if (opts && opts.decodeValues) {
|
392
|
+
paramString = this.decodeParam(paramString);
|
180
393
|
}
|
181
394
|
|
182
|
-
|
395
|
+
return paramString;
|
396
|
+
}
|
183
397
|
|
184
|
-
|
185
|
-
|
186
|
-
return
|
187
|
-
}
|
398
|
+
Romo.prototype.decodeParam = function(string) {
|
399
|
+
return this.decodeParamMap.reduce(function(prev, curr) {
|
400
|
+
return prev.replace(curr[0], curr[1]);
|
401
|
+
}, string);
|
402
|
+
}
|
188
403
|
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
404
|
+
Romo.prototype.decodeParamMap = [
|
405
|
+
[/%20/g, '+'],
|
406
|
+
[/%21/g, '!'],
|
407
|
+
[/%24/g, '$'],
|
408
|
+
[/%28/g, '('],
|
409
|
+
[/%29/g, ')'],
|
410
|
+
[/%2A/g, '*'],
|
411
|
+
[/%2B/g, '+'],
|
412
|
+
[/%2C/g, ','],
|
413
|
+
[/%2D/g, '-'],
|
414
|
+
[/%2E/g, '.'],
|
415
|
+
[/%2F/g, '/'],
|
416
|
+
[/%5B/g, '['],
|
417
|
+
[/%5C/g, '\\'],
|
418
|
+
[/%5D/g, ']'],
|
419
|
+
[/%3A/g, ':'],
|
420
|
+
[/%3C/g, '<'],
|
421
|
+
[/%3E/g, '>'],
|
422
|
+
[/%3F/g, '?'],
|
423
|
+
[/%40/g, '@'],
|
424
|
+
[/%5E/g, '^'],
|
425
|
+
[/%5F/g, '_'],
|
426
|
+
[/%60/g, '`'],
|
427
|
+
[/%7B/g, '{'],
|
428
|
+
[/%7C/g, '|'],
|
429
|
+
[/%7D/g, '}'],
|
430
|
+
[/%7E/g, '~']
|
431
|
+
];
|
432
|
+
|
433
|
+
// AJAX
|
434
|
+
|
435
|
+
Romo.prototype.ajax = function(settings) {
|
436
|
+
var xhr = new XMLHttpRequest();
|
437
|
+
xhr.open(settings.type || 'GET', settings.url, true, settings.username, settings.password);
|
438
|
+
if (settings.responseType === 'arraybuffer' || settings.responseType === 'blob') {
|
439
|
+
xhr.responseType = settings.responseType;
|
200
440
|
}
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
441
|
+
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
|
442
|
+
for (name in settings.headers) {
|
443
|
+
xhr.setRequestHeader(name, settings.headers[name]);
|
444
|
+
}
|
445
|
+
if (settings.contentType) {
|
446
|
+
xhr.setRequestHeader('Content-Type', settings.contentType);
|
447
|
+
}
|
448
|
+
xhr.onreadystatechange = function() {
|
449
|
+
if (xhr.readyState === 4) {
|
450
|
+
if ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304) {
|
451
|
+
if (xhr.responseType === 'arraybuffer' || xhr.responseType === 'blob') {
|
452
|
+
settings.success.call(window, xhr.response, xhr.status, xhr, settings);
|
453
|
+
} else {
|
454
|
+
settings.success.call(window, xhr.responseText, xhr.status, xhr, settings);
|
455
|
+
}
|
456
|
+
} else {
|
457
|
+
settings.error.call(window, xhr.statusText || null, xhr.status, xhr, settings);
|
209
458
|
}
|
210
|
-
el = el.prev();
|
211
459
|
}
|
212
|
-
|
213
|
-
|
460
|
+
};
|
461
|
+
xhr.send(settings.data ? settings.data : null);
|
462
|
+
},
|
463
|
+
|
464
|
+
// events
|
465
|
+
|
466
|
+
Romo.prototype.on = function(elem, eventName, fn) {
|
467
|
+
// var proxyFn = function(e) {
|
468
|
+
// var result = fn.apply(elem, e.detail === undefined ? [e] : [e].concat(e.detail));
|
469
|
+
// if (result === false) {
|
470
|
+
// e.preventDefault();
|
471
|
+
// e.stopPropagation();
|
472
|
+
// }
|
473
|
+
// return result;
|
474
|
+
// }
|
475
|
+
// proxyFn._romofid = this._fn(fn)._romofid;
|
476
|
+
|
477
|
+
// var key = this._handlerKey(elem, eventName, proxyFn);
|
478
|
+
// if (!this._handlers[key]) {
|
479
|
+
// elem.addEventListener(eventName, proxyFn);
|
480
|
+
// this._handlers[key] = proxyFn;
|
481
|
+
// }
|
482
|
+
|
483
|
+
// Giant Hack to temporarily support jQuery and non-jQuery triggers
|
484
|
+
// see: https://bugs.jquery.com/ticket/11047
|
485
|
+
$(elem).on(eventName, fn);
|
486
|
+
}
|
214
487
|
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
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
|
-
}
|
488
|
+
Romo.prototype.off = function(elem, eventName, fn) {
|
489
|
+
// var key = this._handlerKey(elem, eventName, fn);
|
490
|
+
// var proxyFn = this._handlers[key];
|
491
|
+
// if (proxyFn) {
|
492
|
+
// elem.removeEventListener(eventName, proxyFn);
|
493
|
+
// this._handlers[key] = undefined;
|
494
|
+
// }
|
495
|
+
|
496
|
+
// Giant Hack to temporarily support jQuery and non-jQuery triggers
|
497
|
+
// see: https://bugs.jquery.com/ticket/11047
|
498
|
+
$(elem).off(eventName, fn);
|
499
|
+
}
|
257
500
|
|
258
|
-
|
501
|
+
Romo.prototype.trigger = function(elem, customEventName, args) {
|
502
|
+
// var event = undefined;
|
503
|
+
// if (typeof window.CustomEvent === "function") {
|
504
|
+
// event = new CustomEvent(customEventName, { detail: args });
|
505
|
+
// } else {
|
506
|
+
// event = document.createEvent('CustomEvent');
|
507
|
+
// event.initCustomEvent(customEventName, false, false, args);
|
508
|
+
// }
|
509
|
+
// elem.dispatchEvent(event);
|
510
|
+
$(elem).trigger(customEventName, args);
|
511
|
+
}
|
259
512
|
|
260
|
-
|
261
|
-
|
513
|
+
Romo.prototype.ready = function(eventHandlerFn) {
|
514
|
+
if (document.readyState === 'complete' || document.readyState !== 'loading') {
|
515
|
+
eventHandlerFn();
|
516
|
+
} else {
|
517
|
+
this.on(document, 'DOMContentLoaded', eventHandlerFn);
|
262
518
|
}
|
519
|
+
}
|
263
520
|
|
264
|
-
|
265
|
-
})();
|
521
|
+
// utils
|
266
522
|
|
267
|
-
|
523
|
+
Romo.prototype.array = function(collection) {
|
524
|
+
return Array.prototype.slice.call(collection);
|
525
|
+
}
|
268
526
|
|
269
|
-
|
527
|
+
Romo.prototype.proxy = function(fn, context) {
|
528
|
+
var proxyFn = fn.bind(context);
|
529
|
+
proxyFn._romofid = this._fn(fn)._romofid;
|
270
530
|
|
271
|
-
|
531
|
+
return proxyFn;
|
532
|
+
}
|
533
|
+
|
534
|
+
// TODO: rework w/o jQuery
|
535
|
+
Romo.prototype.toArray = function(elems) {
|
536
|
+
// converts a collection of elements `$()` to an array of nodes
|
537
|
+
return $.map(elems, function(node){ return node; })
|
538
|
+
}
|
539
|
+
|
540
|
+
Romo.prototype.nonInputTextKeyCodes = function() {
|
541
|
+
// https://css-tricks.com/snippets/javascript/javascript-keycodes/
|
542
|
+
return [
|
543
|
+
9, /* tab */
|
544
|
+
13, /* enter */
|
545
|
+
16, /* shift */
|
546
|
+
17, /* ctrl */
|
547
|
+
18, /* alt */
|
548
|
+
19, /* pausebreak */
|
549
|
+
20, /* capslock */
|
550
|
+
27, /* escape */
|
551
|
+
33, /* pageup */
|
552
|
+
34, /* pagedown */
|
553
|
+
35, /* end */
|
554
|
+
36, /* home */
|
555
|
+
37, /* leftarrow */
|
556
|
+
38, /* uparrow */
|
557
|
+
39, /* rightarrow */
|
558
|
+
40, /* downarrow */
|
559
|
+
45, /* insert */
|
560
|
+
46, /* delete */
|
561
|
+
91, /* leftwindowkey */
|
562
|
+
92, /* rightwindowkey */
|
563
|
+
93, /* selectkey */
|
564
|
+
112, /* f1 */
|
565
|
+
113, /* f2 */
|
566
|
+
114, /* f3 */
|
567
|
+
115, /* f4 */
|
568
|
+
116, /* f5 */
|
569
|
+
117, /* f6 */
|
570
|
+
118, /* f7 */
|
571
|
+
119, /* f8 */
|
572
|
+
120, /* f9 */
|
573
|
+
121, /* f10 */
|
574
|
+
122, /* f11 */
|
575
|
+
123, /* f12 */
|
576
|
+
144, /* numlock */
|
577
|
+
145, /* scrolllock */
|
578
|
+
];
|
579
|
+
}
|
580
|
+
|
581
|
+
// private helpers
|
582
|
+
|
583
|
+
Romo.prototype._eid = 1;
|
584
|
+
Romo.prototype._fid = 1;
|
585
|
+
|
586
|
+
Romo.prototype._el = function(elem) {
|
587
|
+
elem._romoeid || (
|
588
|
+
elem._romoeid = (this.attr(elem, 'data-romo-eid') || this.setAttr(elem, 'data-romo-eid', this._eid++))
|
589
|
+
);
|
590
|
+
return elem;
|
591
|
+
}
|
592
|
+
|
593
|
+
Romo.prototype._fn = function(fn) {
|
594
|
+
fn._romofid || (fn._romofid = this._fid++);
|
595
|
+
return fn;
|
596
|
+
}
|
597
|
+
|
598
|
+
Romo.prototype._handlers = {};
|
599
|
+
|
600
|
+
Romo.prototype._handlerKey = function(elem, eventName, fn) {
|
601
|
+
return 'eid--'+this._el(elem)._romoeid+'--'+eventName+'--fid--'+this._fn(fn)._romofid;
|
602
|
+
}
|
603
|
+
|
604
|
+
// TODO: rework w/o jQuery
|
605
|
+
Romo.prototype._addEventCallback = function(name, callback) {
|
606
|
+
this._eventCallbacks.push({ eventName: name, callback: callback });
|
607
|
+
}
|
608
|
+
|
609
|
+
// RomoParentChildElems (TODO: rework w/o jQuery)
|
272
610
|
|
273
611
|
var RomoParentChildElems = function() {
|
274
612
|
this.attrName = 'romo-parent-elem-id';
|
@@ -306,7 +644,7 @@ RomoParentChildElems.prototype.remove = function(nodeElem) {
|
|
306
644
|
}
|
307
645
|
}
|
308
646
|
|
309
|
-
// private
|
647
|
+
// private RomoParentChildElems
|
310
648
|
|
311
649
|
RomoParentChildElems.prototype._removeChildElems = function(parentElem) {
|
312
650
|
$.each(this._pop(parentElem.data(this.attrName)), function(idx, elem) {
|
@@ -330,3 +668,12 @@ RomoParentChildElems.prototype._pop = function(id) {
|
|
330
668
|
delete this.elems[id];
|
331
669
|
return items || [];
|
332
670
|
}
|
671
|
+
|
672
|
+
// Init
|
673
|
+
|
674
|
+
window.Romo = new Romo();
|
675
|
+
|
676
|
+
// TODO: rework w/o jQuery
|
677
|
+
$(function() {
|
678
|
+
Romo.doInit();
|
679
|
+
})
|
@@ -481,10 +481,12 @@ RomoOptionListDropdown.prototype._onElemKeyDown = function(e) {
|
|
481
481
|
return false;
|
482
482
|
} else if (this.optionFilterElem !== undefined &&
|
483
483
|
Romo.nonInputTextKeyCodes().indexOf(e.keyCode) === -1 /* Input Text */) {
|
484
|
+
// don't prevent default on Cmd-* keys (preserve Cmd-R refresh, etc)
|
484
485
|
if (e.metaKey === false) {
|
485
|
-
// don't prevent default on Cmd-* keys (preserve Cmd-R refresh, etc)
|
486
486
|
e.preventDefault();
|
487
|
-
|
487
|
+
if (e.keyCode !== 8) { /* Backspace */
|
488
|
+
this.optionFilterElem.val(e.key);
|
489
|
+
}
|
488
490
|
this.romoDropdown.doPopupOpen();
|
489
491
|
}
|
490
492
|
e.stopPropagation();
|
data/assets/js/romo/picker.js
CHANGED
@@ -70,11 +70,14 @@ RomoPicker.prototype.doSetValueDatas = function(valueDatas) {
|
|
70
70
|
this._setValuesAndDisplayText(values, '');
|
71
71
|
this.romoSelectedOptionsList.doSetItems(datas);
|
72
72
|
} else {
|
73
|
-
|
74
|
-
|
75
|
-
|
73
|
+
var displayText = displayTexts[0] ||
|
74
|
+
this.elem.data('romo-picker-empty-option-display-text') ||
|
75
|
+
'';
|
76
|
+
this._setValuesAndDisplayText(values, displayText);
|
77
|
+
this.romoOptionListDropdown.doSetSelectedValueAndText(
|
78
|
+
values[0],
|
79
|
+
displayText
|
76
80
|
);
|
77
|
-
this.romoOptionListDropdown.doSetSelectedItem(values[0]);
|
78
81
|
}
|
79
82
|
this._refreshUI();
|
80
83
|
}
|
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.19.
|
4
|
+
version: 0.19.8
|
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: 2017-09-
|
13
|
+
date: 2017-09-26 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: assert
|