romo 0.19.10 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/assets/css/romo/buttons.scss +1 -0
- data/assets/css/romo/modal.scss +5 -0
- data/assets/js/romo/ajax.js +75 -89
- data/assets/js/romo/base.js +699 -274
- data/assets/js/romo/currency_text_input.js +93 -83
- data/assets/js/romo/date.js +3 -3
- data/assets/js/romo/datepicker.js +227 -234
- data/assets/js/romo/dropdown.js +235 -344
- data/assets/js/romo/dropdown_form.js +77 -76
- data/assets/js/romo/form.js +215 -159
- data/assets/js/romo/indicator_text_input.js +64 -95
- data/assets/js/romo/inline.js +66 -59
- data/assets/js/romo/inline_form.js +74 -73
- data/assets/js/romo/modal.js +218 -294
- data/assets/js/romo/modal_form.js +83 -82
- data/assets/js/romo/onkey.js +25 -22
- data/assets/js/romo/option_list_dropdown.js +318 -298
- data/assets/js/romo/picker.js +175 -181
- data/assets/js/romo/select.js +177 -165
- data/assets/js/romo/select_dropdown.js +86 -93
- data/assets/js/romo/selected_options_list.js +66 -76
- data/assets/js/romo/sortable.js +154 -120
- data/assets/js/romo/{indicator.js → spinner.js} +74 -89
- data/assets/js/romo/tooltip.js +257 -271
- data/assets/js/romo/word_boundary_filter.js +7 -10
- data/lib/romo/dassets.rb +1 -1
- data/lib/romo/version.rb +1 -1
- data/test/unit/dassets_tests.rb +1 -1
- metadata +3 -3
data/assets/js/romo/sortable.js
CHANGED
@@ -1,97 +1,120 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
return new RomoSortable(element);
|
4
|
-
});
|
5
|
-
}
|
6
|
-
|
7
|
-
var RomoSortable = function(element) {
|
8
|
-
this.elem = $(element);
|
1
|
+
var RomoSortable = RomoComponent(function(elem) {
|
2
|
+
this.elem = elem;
|
9
3
|
|
10
4
|
this.draggableSelector = '[data-romo-sortable-item="true"]';
|
11
|
-
this.handleSelector
|
5
|
+
this.handleSelector = '[data-romo-sortable-handle="true"]';
|
12
6
|
|
13
|
-
this.draggedElem
|
14
|
-
this.
|
7
|
+
this.draggedElem = undefined;
|
8
|
+
this.draggedIndex = undefined;
|
9
|
+
this.draggableSelected = undefined;
|
10
|
+
this.draggedOverElem = undefined;
|
11
|
+
this.dragDirection = undefined;
|
12
|
+
this.lastY = undefined;
|
15
13
|
|
16
14
|
this.doInit();
|
17
|
-
this.
|
18
|
-
|
19
|
-
this.
|
15
|
+
this._bindElem();
|
16
|
+
|
17
|
+
Romo.trigger(this.elem, 'romoSortable:ready', [this]);
|
18
|
+
});
|
20
19
|
|
21
|
-
|
20
|
+
RomoSortable.prototype.draggingClass = function() {
|
21
|
+
return Romo.data(this.elem, 'romo-sortable-dragging-class');
|
22
22
|
}
|
23
23
|
|
24
|
-
RomoSortable.prototype.
|
25
|
-
|
24
|
+
RomoSortable.prototype.dragOverClass = function() {
|
25
|
+
return Romo.data(this.elem, 'romo-sortable-dragover-class');
|
26
26
|
}
|
27
27
|
|
28
|
-
RomoSortable.prototype.
|
29
|
-
|
30
|
-
|
31
|
-
|
28
|
+
RomoSortable.prototype.placeholderClass = function() {
|
29
|
+
return Romo.data(this.elem, 'romo-sortable-placeholder-class');
|
30
|
+
}
|
31
|
+
|
32
|
+
// private
|
33
|
+
|
34
|
+
RomoSortable.prototype._bindElem = function() {
|
35
|
+
this.draggableElems = [];
|
36
|
+
this._bindDraggableElems(Romo.find(this.elem, this.draggableSelector));
|
32
37
|
|
33
|
-
this.
|
34
|
-
this.doBindDraggableElems(this.elem.find(this.draggableSelector));
|
38
|
+
Romo.on(this.elem, 'romoSortable:bindDraggableElems', Romo.proxy(this._onBindDraggableElems, this));
|
35
39
|
|
36
|
-
this.elem
|
40
|
+
Romo.on(this.elem, 'dragenter', Romo.proxy(this._onDragEnter, this));
|
41
|
+
Romo.on(this.elem, 'dragover', Romo.proxy(this._onDragOver, this));
|
42
|
+
Romo.on(this.elem, 'dragend', Romo.proxy(this._onDragEnd, this));
|
43
|
+
Romo.on(this.elem, 'drop', Romo.proxy(this._onDragDrop, this));
|
37
44
|
|
38
|
-
|
39
|
-
this.elem.on('dragover', $.proxy(this.onDragOver, this));
|
40
|
-
this.elem.on('dragend', $.proxy(this.onDragEnd, this));
|
41
|
-
this.elem.on('drop', $.proxy(this.onDragDrop, this));
|
45
|
+
Romo.on(Romo.f('body')[0], 'mouseup', Romo.proxy(this._onWindowBodyMouseUp, this));
|
42
46
|
|
43
|
-
|
47
|
+
this._bindPlaceholder();
|
48
|
+
this._resetGrabClasses();
|
44
49
|
}
|
45
50
|
|
46
|
-
RomoSortable.prototype.
|
47
|
-
|
51
|
+
RomoSortable.prototype._bindPlaceholder = function() {
|
52
|
+
var tag = undefined;
|
53
|
+
try {
|
54
|
+
tag = this.draggableElems[0].tagName;
|
55
|
+
} catch(e) {
|
56
|
+
tag = /^ul|ol$/i.test(this.elem.tagName) ? 'li' : 'div';
|
57
|
+
}
|
58
|
+
this.placeholderElem = Romo.elems('<' + tag + '/>')[0];
|
59
|
+
if (this.placeholderClass() !== undefined) {
|
60
|
+
Romo.addClass(this.placeholderElem, this.placeholderClass());
|
61
|
+
}
|
62
|
+
|
63
|
+
Romo.on(this.placeholderElem, 'dragover', Romo.proxy(this._onDragOver, this));
|
64
|
+
Romo.on(this.placeholderElem, 'drop', Romo.proxy(this._onDragDrop, this));
|
48
65
|
}
|
49
66
|
|
50
|
-
RomoSortable.prototype.
|
51
|
-
draggableElems.
|
67
|
+
RomoSortable.prototype._bindDraggableElems = function(draggableElems) {
|
68
|
+
draggableElems.forEach(Romo.proxy(function(draggableElem) {
|
69
|
+
draggableElem.draggable = true;
|
52
70
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
71
|
+
Romo.on(draggableElem, 'dragstart', Romo.proxy(this._onDragStart, this));
|
72
|
+
Romo.on(draggableElem, 'dragenter', Romo.proxy(this._onDragEnter, this));
|
73
|
+
Romo.on(draggableElem, 'dragover', Romo.proxy(this._onDragOver, this));
|
74
|
+
Romo.on(draggableElem, 'dragend', Romo.proxy(this._onDragEnd, this));
|
75
|
+
Romo.on(draggableElem, 'drop', Romo.proxy(this._onDragDrop, this));
|
76
|
+
Romo.on(draggableElem, 'mousedown', Romo.proxy(this._onDraggableMouseDown, this));
|
59
77
|
|
60
|
-
|
61
|
-
|
78
|
+
var handleElem = Romo.find(draggableElem, this.handleSelector)[0];
|
79
|
+
Romo.on(handleElem, 'mousedown', Romo.proxy(this._onHandleMouseDown, this));
|
80
|
+
}, this));
|
62
81
|
|
63
|
-
this.draggableElems = this.draggableElems.
|
82
|
+
this.draggableElems = this.draggableElems.concat(draggableElems);
|
64
83
|
this._resetGrabClasses();
|
65
84
|
}
|
66
85
|
|
67
|
-
RomoSortable.prototype.
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
this
|
75
|
-
|
86
|
+
RomoSortable.prototype._resetGrabClasses = function() {
|
87
|
+
this.draggableElems.forEach(Romo.proxy(function(draggableElem) {
|
88
|
+
handleElem = Romo.find(draggableElem, this.handleSelector)[0];
|
89
|
+
if(handleElem === undefined){ handleElem = draggableElem; }
|
90
|
+
|
91
|
+
Romo.addClass(handleElem, 'romo-sortable-grab');
|
92
|
+
Romo.removeClass(handleElem, 'romo-sortable-grabbing');
|
93
|
+
}, this));
|
94
|
+
}
|
76
95
|
|
77
|
-
|
78
|
-
|
96
|
+
// event functions
|
97
|
+
|
98
|
+
RomoSortable.prototype.romoEvFn._onBindDraggableElems = function(e, draggableElems) {
|
99
|
+
this._bindDraggableElems(draggableElems);
|
79
100
|
}
|
80
101
|
|
81
|
-
RomoSortable.prototype.
|
102
|
+
RomoSortable.prototype.romoEvFn._onDragStart = function(e) {
|
82
103
|
if(!this.draggableSelected){ return false; }
|
83
104
|
|
84
105
|
e.stopPropagation();
|
85
|
-
e.
|
106
|
+
e.dataTransfer.effectAllowed = 'move';
|
86
107
|
|
87
108
|
// IE fix
|
88
109
|
try {
|
89
110
|
// FF fix, it won't drag without some data being set
|
90
|
-
e.
|
111
|
+
e.dataTransfer.setData('text/plain', null);
|
91
112
|
} catch(e) {}
|
92
113
|
|
93
|
-
this.draggedElem =
|
94
|
-
|
114
|
+
this.draggedElem = e.target;
|
115
|
+
if (this.draggingClass() !== undefined) {
|
116
|
+
Romo.addClass(this.draggedElem, this.draggingClass());
|
117
|
+
}
|
95
118
|
|
96
119
|
// we need to disable Romo's parentRemovedObserver mutation
|
97
120
|
// observer which would remove any child elems (ie modal,
|
@@ -102,137 +125,148 @@ RomoSortable.prototype.onDragStart = function(e) {
|
|
102
125
|
// the drag is finished.
|
103
126
|
// we manually enable the mutation observer for the dragged
|
104
127
|
// elem below after we do the `insertBefore` call.
|
105
|
-
this.draggedElem
|
128
|
+
Romo.setData(this.draggedElem, 'romo-parent-removed-observer-disabled', true);
|
106
129
|
|
107
|
-
|
130
|
+
var elems = Romo.children(Romo.parent(this.draggedElem));
|
131
|
+
this.draggedIndex = elems.indexOf(this.draggedElem);
|
108
132
|
|
109
|
-
this.placeholderElem
|
133
|
+
Romo.setStyle(this.placeholderElem, 'height', Romo.css(this.draggedElem, 'height'));
|
110
134
|
|
111
|
-
this.elem
|
135
|
+
Romo.trigger(this.elem, 'romoSortable:dragStart', [this.draggedElem, this]);
|
112
136
|
}
|
113
137
|
|
114
|
-
RomoSortable.prototype.
|
138
|
+
RomoSortable.prototype.romoEvFn._onDragEnter = function(e) {
|
115
139
|
e.preventDefault();
|
116
140
|
e.stopPropagation();
|
117
141
|
|
118
142
|
// return if event is fired on the placeholder
|
119
|
-
if(this.placeholderElem
|
143
|
+
if(this.placeholderElem === e.currentTarget){ return; }
|
120
144
|
|
121
|
-
this.placeholderElem
|
122
|
-
this.draggedElem
|
145
|
+
Romo.show(this.placeholderElem);
|
146
|
+
Romo.hide(this.draggedElem);
|
123
147
|
|
124
148
|
// if event is not fired on the sortable
|
125
|
-
var overSortableElem = this.elem
|
126
|
-
var clientX
|
127
|
-
var clientY
|
149
|
+
var overSortableElem = this.elem === e.currentTarget;
|
150
|
+
var clientX = e.clientX;
|
151
|
+
var clientY = e.clientY;
|
128
152
|
if (!overSortableElem) {
|
129
153
|
// if we are in the same elem and moving the same direction, exit out
|
130
|
-
var overSameElem
|
131
|
-
|
154
|
+
var overSameElem = this.draggedOverElem !== undefined &&
|
155
|
+
this.draggedOverElem === e.currentTarget;
|
132
156
|
var sameDirection = (this.dragDirection === 'down' && clientY > this.lastY) ||
|
133
157
|
(this.dragDirection === 'up' && clientY < this.lastY);
|
134
158
|
if(overSameElem && sameDirection){ return; }
|
135
159
|
|
136
160
|
// remove dragged over classes from previous elem
|
137
|
-
if(this.draggedOverElem
|
138
|
-
|
139
|
-
|
140
|
-
this.draggedOverElem.
|
161
|
+
if(this.draggedOverElem !== undefined && this.dragOverClass() !== undefined) {
|
162
|
+
Romo.removeClass(this.draggedOverElem, this.dragOverClass());
|
163
|
+
}
|
164
|
+
this.draggedOverElem = e.currentTarget;
|
165
|
+
this.lastY = clientY;
|
166
|
+
if (this.dragOverClass() !== undefined) {
|
167
|
+
Romo.addClass(this.draggedOverElem, this.dragOverClass());
|
168
|
+
}
|
141
169
|
|
142
170
|
// insert the placeholder according to the dragging direction
|
143
|
-
|
171
|
+
var elems = Romo.children(Romo.parent(this.placeholderElem));
|
172
|
+
var placeholderIndex = elems.indexOf(this.placeholderElem);
|
173
|
+
|
174
|
+
elems = Romo.children(Romo.parent(this.draggedOverElem));
|
175
|
+
var draggedOverIndex = elems.indexOf(this.draggedOverElem);
|
176
|
+
|
177
|
+
if (placeholderIndex < draggedOverIndex) {
|
144
178
|
this.dragDirection = 'down';
|
145
179
|
} else {
|
146
180
|
this.dragDirection = 'up';
|
147
181
|
}
|
182
|
+
|
148
183
|
var insertMethod = this.dragDirection === 'down' ? 'after' : 'before';
|
149
|
-
|
184
|
+
Romo[insertMethod](this.draggedOverElem, this.placeholderElem);
|
150
185
|
}
|
151
186
|
|
152
|
-
this.elem
|
187
|
+
Romo.trigger(this.elem, 'romoSortable:dragMove', [clientX, clientY, this.draggedElem, this]);
|
153
188
|
}
|
154
189
|
|
155
|
-
RomoSortable.prototype.
|
190
|
+
RomoSortable.prototype.romoEvFn._onDragOver = function(e) {
|
156
191
|
// This is how you allow an element to receive a drop event.
|
157
192
|
e.preventDefault();
|
158
193
|
e.stopPropagation();
|
159
194
|
}
|
160
195
|
|
161
|
-
RomoSortable.prototype.
|
196
|
+
RomoSortable.prototype.romoEvFn._onDragEnd = function(e) {
|
162
197
|
e.stopPropagation();
|
163
198
|
e.preventDefault();
|
164
199
|
|
165
|
-
if(
|
200
|
+
if(this.draggedElem === undefined){ return; }
|
166
201
|
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
this.
|
202
|
+
if (this.dragOverClass() !== undefined) {
|
203
|
+
Romo.removeClass(this.draggableElems, this.dragOverClass());
|
204
|
+
}
|
205
|
+
if (this.draggingClass() !== undefined) {
|
206
|
+
Romo.removeClass(this.draggedElem, this.draggingClass());
|
207
|
+
}
|
208
|
+
Romo.show(this.draggedElem);
|
209
|
+
Romo.hide(this.placeholderElem);
|
171
210
|
this._resetGrabClasses();
|
172
211
|
|
173
|
-
this.elem
|
212
|
+
Romo.trigger(this.elem, 'romoSortable:dragStop', [this.draggedElem, this]);
|
174
213
|
|
175
|
-
this.draggedElem
|
176
|
-
this.
|
214
|
+
this.draggedElem = undefined;
|
215
|
+
this.draggedIndex = undefined;
|
216
|
+
this.draggableSelected = undefined;
|
217
|
+
this.draggedOverElem = undefined;
|
218
|
+
this.dragDirection = undefined;
|
219
|
+
this.lastY = undefined;
|
177
220
|
}
|
178
221
|
|
179
|
-
RomoSortable.prototype.
|
222
|
+
RomoSortable.prototype.romoEvFn._onDragDrop = function(e) {
|
180
223
|
e.stopPropagation();
|
181
224
|
e.preventDefault();
|
182
225
|
|
183
|
-
if(
|
226
|
+
if(this.draggedElem === undefined){ return; }
|
184
227
|
|
185
|
-
|
186
|
-
this.draggedElem
|
228
|
+
Romo.before(this.placeholderElem, this.draggedElem);
|
229
|
+
Romo.show(this.draggedElem);
|
187
230
|
|
188
231
|
// manually enable Romo's parentRemovedObserver mutation
|
189
232
|
// observer which resumes removing any child elems (ie modal,
|
190
233
|
// dropdown, tooltip popups) like normal.
|
191
234
|
// we have to put this in a timeout so the reactor loop has a
|
192
235
|
// chance to run the mutation observer before we re-enable
|
193
|
-
|
194
|
-
this.draggedElem
|
195
|
-
}, this)
|
236
|
+
Romo.pushFn(Romo.proxy(function() {
|
237
|
+
Romo.setData(this.draggedElem, 'romo-parent-removed-observer-disabled', false);
|
238
|
+
}, this));
|
196
239
|
|
197
|
-
var
|
240
|
+
var elems = Romo.children(Romo.parent(this.draggedElem));
|
241
|
+
var newIndex = elems.indexOf(this.draggedElem);
|
198
242
|
if (newIndex !== this.draggedIndex) {
|
199
|
-
this.elem
|
243
|
+
Romo.trigger(this.elem, 'romoSortable:change', [this.draggedElem, this]);
|
200
244
|
}
|
201
|
-
this.elem
|
245
|
+
Romo.trigger(this.elem, 'romoSortable:dragDrop', [this.draggedElem, this]);
|
202
246
|
}
|
203
247
|
|
204
|
-
RomoSortable.prototype.
|
248
|
+
RomoSortable.prototype.romoEvFn._onDraggableMouseDown = function(e) {
|
205
249
|
// if our draggable elem doesn't have a handle then it's draggable
|
206
|
-
var draggableElem =
|
207
|
-
if(
|
208
|
-
|
209
|
-
|
250
|
+
var draggableElem = e.currentTarget;
|
251
|
+
if(Romo.find(draggableElem, this.handleSelector).length === 0) {
|
252
|
+
Romo.removeClass(draggableElem, 'romo-sortable-grab');
|
253
|
+
Romo.addClass(draggableElem, 'romo-sortable-grabbing');
|
210
254
|
this.draggableSelected = true;
|
211
255
|
}
|
212
256
|
}
|
213
257
|
|
214
|
-
RomoSortable.prototype.
|
258
|
+
RomoSortable.prototype.romoEvFn._onHandleMouseDown = function(e) {
|
215
259
|
this.draggableSelected = true;
|
216
|
-
var handleElem =
|
217
|
-
|
218
|
-
|
260
|
+
var handleElem = e.currentTarget;
|
261
|
+
Romo.removeClass(handleElem, 'romo-sortable-grab');
|
262
|
+
Romo.addClass(handleElem, 'romo-sortable-grabbing');
|
219
263
|
}
|
220
264
|
|
221
|
-
RomoSortable.prototype.
|
265
|
+
RomoSortable.prototype.romoEvFn._onWindowBodyMouseUp = function(e) {
|
222
266
|
this.draggableSelected = false;
|
223
267
|
this._resetGrabClasses();
|
224
268
|
}
|
225
269
|
|
226
|
-
|
227
|
-
this.draggableElems.each($.proxy(function(index, item) {
|
228
|
-
draggableElem = $(item);
|
229
|
-
handleElem = draggableElem.find(this.handleSelector);
|
230
|
-
if(handleElem.size() === 0){ handleElem = draggableElem; }
|
231
|
-
handleElem.addClass('romo-sortable-grab');
|
232
|
-
handleElem.removeClass('romo-sortable-grabbing');
|
233
|
-
}, this));
|
234
|
-
}
|
270
|
+
// init
|
235
271
|
|
236
|
-
Romo.
|
237
|
-
$(e.target).find('[data-romo-sortable-auto="true"]').romoSortable();
|
238
|
-
});
|
272
|
+
Romo.addElemsInitSelector('[data-romo-sortable-auto="true"]', RomoSortable);
|
@@ -1,113 +1,98 @@
|
|
1
1
|
//fgnass.github.com/spin.js#v2.0.1
|
2
2
|
!function(a,b){"object"==typeof exports?module.exports=b():"function"==typeof define&&define.amd?define(b):a.Spinner=b()}(this,function(){"use strict";function a(a,b){var c,d=document.createElement(a||"div");for(c in b)d[c]=b[c];return d}function b(a){for(var b=1,c=arguments.length;c>b;b++)a.appendChild(arguments[b]);return a}function c(a,b,c,d){var e=["opacity",b,~~(100*a),c,d].join("-"),f=.01+c/d*100,g=Math.max(1-(1-a)/b*(100-f),a),h=j.substring(0,j.indexOf("Animation")).toLowerCase(),i=h&&"-"+h+"-"||"";return l[e]||(m.insertRule("@"+i+"keyframes "+e+"{0%{opacity:"+g+"}"+f+"%{opacity:"+a+"}"+(f+.01)+"%{opacity:1}"+(f+b)%100+"%{opacity:"+a+"}100%{opacity:"+g+"}}",m.cssRules.length),l[e]=1),e}function d(a,b){var c,d,e=a.style;for(b=b.charAt(0).toUpperCase()+b.slice(1),d=0;d<k.length;d++)if(c=k[d]+b,void 0!==e[c])return c;return void 0!==e[b]?b:void 0}function e(a,b){for(var c in b)a.style[d(a,c)||c]=b[c];return a}function f(a){for(var b=1;b<arguments.length;b++){var c=arguments[b];for(var d in c)void 0===a[d]&&(a[d]=c[d])}return a}function g(a,b){return"string"==typeof a?a:a[b%a.length]}function h(a){this.opts=f(a||{},h.defaults,n)}function i(){function c(b,c){return a("<"+b+' xmlns="urn:schemas-microsoft.com:vml" class="spin-vml">',c)}m.addRule(".spin-vml","behavior:url(#default#VML)"),h.prototype.lines=function(a,d){function f(){return e(c("group",{coordsize:k+" "+k,coordorigin:-j+" "+-j}),{width:k,height:k})}function h(a,h,i){b(m,b(e(f(),{rotation:360/d.lines*a+"deg",left:~~h}),b(e(c("roundrect",{arcsize:d.corners}),{width:j,height:d.width,left:d.radius,top:-d.width>>1,filter:i}),c("fill",{color:g(d.color,a),opacity:d.opacity}),c("stroke",{opacity:0}))))}var i,j=d.length+d.width,k=2*j,l=2*-(d.width+d.length)+"px",m=e(f(),{position:"absolute",top:l,left:l});if(d.shadow)for(i=1;i<=d.lines;i++)h(i,-2,"progid:DXImageTransform.Microsoft.Blur(pixelradius=2,makeshadow=1,shadowopacity=.3)");for(i=1;i<=d.lines;i++)h(i);return b(a,m)},h.prototype.opacity=function(a,b,c,d){var e=a.firstChild;d=d.shadow&&d.lines||0,e&&b+d<e.childNodes.length&&(e=e.childNodes[b+d],e=e&&e.firstChild,e=e&&e.firstChild,e&&(e.opacity=c))}}var j,k=["webkit","Moz","ms","O"],l={},m=function(){var c=a("style",{type:"text/css"});return b(document.getElementsByTagName("head")[0],c),c.sheet||c.styleSheet}(),n={lines:12,length:7,width:5,radius:10,rotate:0,corners:1,color:"#000",direction:1,speed:1,trail:100,opacity:.25,fps:20,zIndex:2e9,className:"spinner",top:"50%",left:"50%",position:"absolute"};h.defaults={},f(h.prototype,{spin:function(b){this.stop();{var c=this,d=c.opts,f=c.el=e(a(0,{className:d.className}),{position:d.position,width:0,zIndex:d.zIndex});d.radius+d.length+d.width}if(e(f,{left:d.left,top:d.top}),b&&b.insertBefore(f,b.firstChild||null),f.setAttribute("role","progressbar"),c.lines(f,c.opts),!j){var g,h=0,i=(d.lines-1)*(1-d.direction)/2,k=d.fps,l=k/d.speed,m=(1-d.opacity)/(l*d.trail/100),n=l/d.lines;!function o(){h++;for(var a=0;a<d.lines;a++)g=Math.max(1-(h+(d.lines-a)*n)%l*m,d.opacity),c.opacity(f,a*d.direction+i,g,d);c.timeout=c.el&&setTimeout(o,~~(1e3/k))}()}return c},stop:function(){var a=this.el;return a&&(clearTimeout(this.timeout),a.parentNode&&a.parentNode.removeChild(a),this.el=void 0),this},lines:function(d,f){function h(b,c){return e(a(),{position:"absolute",width:f.length+f.width+"px",height:f.width+"px",background:b,boxShadow:c,transformOrigin:"left",transform:"rotate("+~~(360/f.lines*k+f.rotate)+"deg) translate("+f.radius+"px,0)",borderRadius:(f.corners*f.width>>1)+"px"})}for(var i,k=0,l=(f.lines-1)*(1-f.direction)/2;k<f.lines;k++)i=e(a(),{position:"absolute",top:1+~(f.width/2)+"px",transform:f.hwaccel?"translate3d(0,0,0)":"",opacity:f.opacity,animation:j&&c(f.opacity,f.trail,l+k*f.direction,f.lines)+" "+1/f.speed+"s linear infinite"}),f.shadow&&b(i,e(h("#000","0 0 4px #000"),{top:"2px"})),b(d,b(i,h(g(f.color,k),"0 0 1px rgba(0,0,0,.1)")));return d},opacity:function(a,b,c){b<a.childNodes.length&&(a.childNodes[b].style.opacity=c)}});var o=e(a("group"),{behavior:"url(#default#VML)"});return!d(o,"transform")&&o.adj?i():j=d(o,"animation"),h});
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
return new RomoIndicator(element);
|
7
|
-
});
|
8
|
-
}
|
9
|
-
|
10
|
-
var RomoIndicator = function(element) {
|
11
|
-
this.elem = $(element);
|
12
|
-
this.elemStyle = this.elem.attr('style');
|
4
|
+
var RomoSpinner = RomoComponent(function(elem) {
|
5
|
+
this.elem = elem;
|
13
6
|
|
14
7
|
this.doInit();
|
8
|
+
this._bindElem();
|
15
9
|
|
16
|
-
this.elem
|
17
|
-
|
18
|
-
|
19
|
-
if (this.elem.data('romo-indicator-stop-on-pageshow') !== false) {
|
20
|
-
$(window).on("pageshow", $.proxy(function(e) {
|
21
|
-
this.elem.trigger('indicator:triggerStop');
|
22
|
-
}, this));
|
23
|
-
}
|
24
|
-
|
25
|
-
this.elem.trigger('indicator:ready', [this]);
|
26
|
-
}
|
27
|
-
|
28
|
-
RomoIndicator.prototype.doInit = function() {
|
29
|
-
// override as needed
|
30
|
-
}
|
31
|
-
|
32
|
-
RomoIndicator.prototype.onStart = function(e, basisSize) {
|
33
|
-
if (e !== undefined) {
|
34
|
-
e.preventDefault();
|
35
|
-
}
|
36
|
-
|
37
|
-
this.doStart(basisSize);
|
38
|
-
}
|
39
|
-
|
40
|
-
RomoIndicator.prototype.onStop = function(e) {
|
41
|
-
if (e !== undefined) {
|
42
|
-
e.preventDefault();
|
43
|
-
}
|
44
|
-
|
45
|
-
this.doStop();
|
46
|
-
}
|
10
|
+
Romo.trigger(this.elem, 'romoSpinner:ready', [this]);
|
11
|
+
});
|
47
12
|
|
48
|
-
|
49
|
-
var basisSize =
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
basisSize = Math.min(
|
55
|
-
parseInt(Romo.getComputedStyle(this.elem[0], "width")),
|
56
|
-
parseInt(Romo.getComputedStyle(this.elem[0], "height"))
|
57
|
-
)
|
58
|
-
}
|
13
|
+
RomoSpinner.prototype.doStart = function(customBasisSize) {
|
14
|
+
var basisSize = (
|
15
|
+
customBasisSize ||
|
16
|
+
Romo.data(this.elem, 'romo-spinner-basis-size') ||
|
17
|
+
Math.min(parseInt(Romo.css(this.elem, "width"), 10), parseInt(Romo.css(this.elem, "height"), 10))
|
18
|
+
);
|
59
19
|
|
60
20
|
var spinnerOpts = {
|
61
|
-
lines:
|
62
|
-
width:
|
63
|
-
length:
|
64
|
-
radius:
|
65
|
-
corners:
|
66
|
-
rotate:
|
67
|
-
direction: 1,
|
68
|
-
color:
|
69
|
-
speed:
|
70
|
-
trail:
|
71
|
-
shadow:
|
72
|
-
hwaccel:
|
73
|
-
className: 'spinner',
|
74
|
-
zIndex:
|
75
|
-
top:
|
76
|
-
left:
|
21
|
+
lines: 11, // The number of lines to draw
|
22
|
+
width: 2, // The line thickness
|
23
|
+
length: parseInt(basisSize, 10) / 4.5, // The length of each line
|
24
|
+
radius: parseInt(basisSize, 10) / 5.5, // The radius of the inner circle
|
25
|
+
corners: 1, // Corner roundness (0..1)
|
26
|
+
rotate: 0, // The rotation offset
|
27
|
+
direction: 1, // 1: clockwise, -1: counterclockwise
|
28
|
+
color: Romo.css(this.elem, 'color'), // #rgb or #rrggbb or array of colors
|
29
|
+
speed: 1, // Rounds per second
|
30
|
+
trail: 60, // Afterglow percentage
|
31
|
+
shadow: false, // Whether to render a shadow
|
32
|
+
hwaccel: false, // Whether to use hardware acceleration
|
33
|
+
className: 'spinner', // The CSS class to assign to the spinner
|
34
|
+
zIndex: 1000, // The z-index (defaults to 2000000000)
|
35
|
+
top: '50%', // Top position relative to parent
|
36
|
+
left: '50%' // Left position relative to parent
|
77
37
|
};
|
78
38
|
this.spinner = new Spinner(spinnerOpts);
|
79
39
|
|
80
|
-
this.elemHtml = this.elem.
|
81
|
-
this.elemStyle = this.elem
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
this.elem
|
88
|
-
this.spinner.spin(this.elem
|
89
|
-
|
40
|
+
this.elemHtml = this.elem.innerHTML;
|
41
|
+
this.elemStyle = Romo.attr(this.elem, 'style');
|
42
|
+
|
43
|
+
Romo.setStyle(this.elem, 'position', 'relative');
|
44
|
+
Romo.setStyle(this.elem, 'width', Romo.css(this.elem, 'width'));
|
45
|
+
Romo.setStyle(this.elem, 'height', Romo.css(this.elem, 'height'));
|
46
|
+
|
47
|
+
Romo.updateHtml(this.elem, '');
|
48
|
+
this.spinner.spin(this.elem);
|
49
|
+
|
50
|
+
Romo.trigger(this.elem, 'romoSpinner:start', [this]);
|
90
51
|
}
|
91
52
|
|
92
|
-
|
53
|
+
RomoSpinner.prototype.doStop = function() {
|
93
54
|
if (this.spinner !== undefined) {
|
94
55
|
this.spinner.stop();
|
95
56
|
this.spinner = undefined;
|
96
57
|
}
|
97
58
|
if (this.elemHtml !== undefined) {
|
98
|
-
this.elem.
|
59
|
+
this.elem.innerHTML = this.elemHtml;
|
99
60
|
}
|
100
|
-
this.elem
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
});
|
61
|
+
Romo.rmStyle(this.elem, 'position');
|
62
|
+
Romo.rmStyle(this.elem, 'width');
|
63
|
+
Romo.rmStyle(this.elem, 'height');
|
64
|
+
|
105
65
|
if (this.elemStyle !== undefined) {
|
106
|
-
this.elem
|
66
|
+
Romo.setAttr(this.elem, 'style', this.elemStyle);
|
107
67
|
}
|
108
|
-
this.elem
|
68
|
+
Romo.trigger(this.elem, 'romoSpinner:stop', [this]);
|
109
69
|
}
|
110
70
|
|
111
|
-
|
112
|
-
|
113
|
-
|
71
|
+
// private
|
72
|
+
|
73
|
+
RomoSpinner.prototype._bindElem = function() {
|
74
|
+
this.elemStyle = Romo.attr(this.elem, 'style');
|
75
|
+
|
76
|
+
Romo.on(this.elem, 'romoSpinner:triggerStart', Romo.proxy(this._onStart, this));
|
77
|
+
Romo.on(this.elem, 'romoSpinner:triggerStop', Romo.proxy(this._onStop, this));
|
78
|
+
|
79
|
+
if (Romo.data(this.elem, 'romo-spinner-stop-on-pageshow') !== false) {
|
80
|
+
Romo.on(window, "pageshow", Romo.proxy(function(e) {
|
81
|
+
Romo.trigger(this.elem, 'romoSpinner:triggerStop');
|
82
|
+
}, this));
|
83
|
+
}
|
84
|
+
}
|
85
|
+
|
86
|
+
// event functions
|
87
|
+
|
88
|
+
RomoSpinner.prototype.romoEvFn._onStart = function(e, basisSize) {
|
89
|
+
this.doStart(basisSize);
|
90
|
+
}
|
91
|
+
|
92
|
+
RomoSpinner.prototype.romoEvFn._onStop = function(e) {
|
93
|
+
this.doStop();
|
94
|
+
}
|
95
|
+
|
96
|
+
// init
|
97
|
+
|
98
|
+
Romo.addElemsInitSelector('[data-romo-spinner-auto="true"]', RomoSpinner);
|