rasputin 0.5.4 → 0.6.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.
- data/README.md +8 -2
- data/lib/rasputin/version.rb +1 -1
- data/vendor/assets/javascripts/sproutcore-i18n.js +5 -23
- data/vendor/assets/javascripts/sproutcore-jui.js +430 -189
- data/vendor/assets/javascripts/sproutcore.js +37 -25
- metadata +2 -2
data/README.md
CHANGED
@@ -11,9 +11,9 @@ It provide direct requires for official sproutcore packages :
|
|
11
11
|
|
12
12
|
And it also provides some unnoficial packages :
|
13
13
|
|
14
|
-
* sproutcore-ajax (backport form sc 1.x API but using jQuery $.ajax)
|
15
14
|
* sproutcore-jui (jQuery UI wrappers for sc 2.0)
|
16
|
-
* sproutcore-
|
15
|
+
* sproutcore-ajax (backport form sc 1.x API but using jQuery $.ajax)
|
16
|
+
* sproutcore-i18n (integration with i18n-js gem)
|
17
17
|
|
18
18
|
Rasputin also provide sprockets engine for handlebars templates. Any template in your
|
19
19
|
javascript assets folder with extention handlebars will be availabel in sproutcore.
|
@@ -22,3 +22,9 @@ Examples :
|
|
22
22
|
|
23
23
|
todos/templates/item.handlebars >> SC.TEMPLATES['todos_item']
|
24
24
|
todos/ui/templates/stats.handlebars >> SC.TEMPLATES['todos_ui_stats']
|
25
|
+
|
26
|
+
Changelog :
|
27
|
+
|
28
|
+
0.6.0 :
|
29
|
+
- update to lates sproutcore 2 (beta3)
|
30
|
+
- lots of fixes for sproutcore-jui
|
data/lib/rasputin/version.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
|
2
|
-
(function(
|
3
|
-
|
4
|
-
if ('I18n' in window) {
|
2
|
+
(function() {
|
5
3
|
|
6
4
|
SC.I18n = I18n;
|
7
5
|
|
@@ -16,25 +14,9 @@ Handlebars.registerHelper('loc', function(property) {
|
|
16
14
|
});
|
17
15
|
|
18
16
|
if (SC.EXTEND_PROTOTYPES) {
|
19
|
-
|
20
|
-
String.
|
21
|
-
|
22
|
-
};
|
23
|
-
|
24
|
-
}
|
25
|
-
|
17
|
+
String.prototype.loc = function(options) {
|
18
|
+
return SC.String.loc(String(this), options);
|
19
|
+
};
|
26
20
|
}
|
27
21
|
|
28
|
-
})(
|
29
|
-
|
30
|
-
|
31
|
-
(function(exports) {
|
32
|
-
// ==========================================================================
|
33
|
-
// Project: SproutCore I18N
|
34
|
-
// Copyright: ©2011 Paul Chavard
|
35
|
-
// License: Licensed under MIT license (see license.js)
|
36
|
-
// ==========================================================================
|
37
|
-
|
38
|
-
if ('undefined' === typeof I18n) require('i18n');
|
39
|
-
|
40
|
-
})({});
|
22
|
+
})();
|
@@ -1,4 +1,20 @@
|
|
1
1
|
|
2
|
+
(function(exports) {
|
3
|
+
/*
|
4
|
+
* jQuery UI Autocomplete SC Extension
|
5
|
+
*/
|
6
|
+
|
7
|
+
$.widget('ui.sc_autocomplete', $.ui.autocomplete, {
|
8
|
+
_renderItem: function(ul, item) {
|
9
|
+
var view = this.options.itemViewClass.create({content:item, widget: this});
|
10
|
+
view.appendTo(ul);
|
11
|
+
return view.$();
|
12
|
+
}
|
13
|
+
});
|
14
|
+
|
15
|
+
})({});
|
16
|
+
|
17
|
+
|
2
18
|
(function(exports) {
|
3
19
|
if ('undefined' === typeof JUI) {
|
4
20
|
|
@@ -22,7 +38,7 @@ if ('undefined' !== typeof window) {
|
|
22
38
|
@default '1.0.alpha'
|
23
39
|
@constant
|
24
40
|
*/
|
25
|
-
JUI.VERSION = '1.0.
|
41
|
+
JUI.VERSION = '1.0.beta.1.pre';
|
26
42
|
|
27
43
|
})({});
|
28
44
|
|
@@ -49,8 +65,6 @@ JUI.Widget = SC.Mixin.create({
|
|
49
65
|
|
50
66
|
var ui = get(this, 'uiWidget')(options, get(this, 'element'));
|
51
67
|
set(this, 'ui', ui);
|
52
|
-
|
53
|
-
this._defineMethods();
|
54
68
|
},
|
55
69
|
|
56
70
|
willDestroyElement: function() {
|
@@ -110,23 +124,122 @@ JUI.Widget = SC.Mixin.create({
|
|
110
124
|
};
|
111
125
|
|
112
126
|
this.addObserver(key, observer);
|
113
|
-
this._observers = this._observers || {};
|
114
|
-
this._observers[key] = observer;
|
127
|
+
//this._observers = this._observers || {};
|
128
|
+
//this._observers[key] = observer;
|
115
129
|
}, this);
|
116
130
|
|
117
131
|
return options;
|
118
|
-
}
|
132
|
+
}
|
133
|
+
});
|
119
134
|
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
135
|
+
})({});
|
136
|
+
|
137
|
+
|
138
|
+
(function(exports) {
|
139
|
+
|
140
|
+
var get = SC.get;
|
141
|
+
|
142
|
+
/**
|
143
|
+
@mixin
|
144
|
+
@since SproutCore JUI 1.0
|
145
|
+
@extends JUI.TargetSupport
|
146
|
+
*/
|
147
|
+
JUI.TargetSupport = SC.Mixin.create({
|
148
|
+
|
149
|
+
// @private
|
150
|
+
targetObject: function() {
|
151
|
+
var target = get(this, 'target');
|
152
|
+
|
153
|
+
if (SC.typeOf(target) === 'string') {
|
154
|
+
return SC.getPath(this, target);
|
155
|
+
} else {
|
156
|
+
return target;
|
157
|
+
}
|
158
|
+
}.property('target').cacheable(),
|
159
|
+
|
160
|
+
// @private
|
161
|
+
executeAction: function() {
|
162
|
+
var args = SC.$.makeArray(arguments),
|
163
|
+
action = args.shift(),
|
164
|
+
target = get(this, 'targetObject');
|
165
|
+
if (target && action) {
|
166
|
+
if (SC.typeOf(action) === 'string') {
|
167
|
+
action = target[action];
|
168
|
+
}
|
169
|
+
action.apply(target, args);
|
170
|
+
}
|
171
|
+
}
|
172
|
+
|
173
|
+
});
|
174
|
+
|
175
|
+
})({});
|
176
|
+
|
177
|
+
|
178
|
+
(function(exports) {
|
179
|
+
|
180
|
+
|
181
|
+
|
182
|
+
var get = SC.get;
|
183
|
+
|
184
|
+
/**
|
185
|
+
@class
|
186
|
+
@since SproutCore JUI 1.0
|
187
|
+
@extends JUI.AutocompleteItem
|
188
|
+
*/
|
189
|
+
JUI.AutocompleteItem = SC.View.extend({
|
190
|
+
tagName: 'li',
|
191
|
+
defaultTemplate: SC.Handlebars.compile('<a>{{content.label}}</a>'),
|
192
|
+
didInsertElement: function() {
|
193
|
+
this._super();
|
194
|
+
this.$().data('item.autocomplete', {
|
195
|
+
value: this.getPath('content.value'),
|
196
|
+
label: this.getPath('content.label')
|
128
197
|
});
|
129
|
-
this.
|
198
|
+
this.get('widget').menu.refresh();
|
199
|
+
}
|
200
|
+
});
|
201
|
+
|
202
|
+
/**
|
203
|
+
@class
|
204
|
+
@since SproutCore JUI 1.0
|
205
|
+
@extends JUI.AutocompleteTextField
|
206
|
+
*/
|
207
|
+
JUI.AutocompleteTextField = SC.TextField.extend(JUI.Widget, JUI.TargetSupport, {
|
208
|
+
uiType: 'sc_autocomplete',
|
209
|
+
uiOptions: ['_source', 'delay', 'autoFocus', 'position', 'minLength', 'itemViewClass'],
|
210
|
+
uiEvents: ['select', 'focus', 'open', 'close'],
|
211
|
+
|
212
|
+
itemViewClass: JUI.AutocompleteItem,
|
213
|
+
requestContent: SC.K,
|
214
|
+
content: [],
|
215
|
+
|
216
|
+
_source: function() {
|
217
|
+
var source = this.get('source');
|
218
|
+
if (source) {
|
219
|
+
this.set('content', source);
|
220
|
+
return source;
|
221
|
+
} else {
|
222
|
+
return $.proxy(this, '_requestContent');
|
223
|
+
}
|
224
|
+
}.property('source').cacheable(),
|
225
|
+
|
226
|
+
_requestContent: function (data, callback) {
|
227
|
+
this._lastCallback = callback;
|
228
|
+
this.requestContent(data);
|
229
|
+
},
|
230
|
+
|
231
|
+
_contentDidChange: function() {
|
232
|
+
if (this._lastCallback) {
|
233
|
+
this._lastCallback(this.get('content'));
|
234
|
+
this._lastCallback = null;
|
235
|
+
}
|
236
|
+
}.observes('content'),
|
237
|
+
|
238
|
+
select: function(event, ui) {
|
239
|
+
if (ui.item) {
|
240
|
+
this.executeAction(get(this, 'action'), ui.item.value);
|
241
|
+
event.preventDefault();
|
242
|
+
}
|
130
243
|
}
|
131
244
|
});
|
132
245
|
|
@@ -135,6 +248,8 @@ JUI.Widget = SC.Mixin.create({
|
|
135
248
|
|
136
249
|
(function(exports) {
|
137
250
|
|
251
|
+
var get = SC.get;
|
252
|
+
|
138
253
|
/**
|
139
254
|
@class
|
140
255
|
@since SproutCore JUI 1.0
|
@@ -142,9 +257,18 @@ JUI.Widget = SC.Mixin.create({
|
|
142
257
|
*/
|
143
258
|
JUI.Button = SC.Button.extend(JUI.Widget, {
|
144
259
|
uiType: 'button',
|
145
|
-
uiOptions: ['label'],
|
260
|
+
uiOptions: ['label', '_icons'],
|
261
|
+
|
262
|
+
isActiveBinding: SC.Binding.oneWay('.disabled'),
|
146
263
|
|
147
|
-
|
264
|
+
_icons: function() {
|
265
|
+
var icons = {};
|
266
|
+
icons.primary = get(this, 'icon');
|
267
|
+
if (icons.primary) {
|
268
|
+
icons.primary = 'ui-icon-'.fmt(icons.primary);
|
269
|
+
}
|
270
|
+
return icons;
|
271
|
+
}.property('icon').cacheable()
|
148
272
|
});
|
149
273
|
|
150
274
|
})({});
|
@@ -271,50 +395,18 @@ jQuery(window).resize(function() {
|
|
271
395
|
|
272
396
|
(function(exports) {
|
273
397
|
|
274
|
-
var get = SC.get;
|
275
398
|
|
276
|
-
/**
|
277
|
-
@mixin
|
278
|
-
@since SproutCore JUI 1.0
|
279
|
-
@extends JUI.TargetSupport
|
280
|
-
*/
|
281
|
-
JUI.TargetSupport = SC.Mixin.create({
|
282
399
|
|
283
|
-
|
284
|
-
targetObject: function() {
|
285
|
-
var target = get(this, 'target');
|
286
|
-
|
287
|
-
if (SC.typeOf(target) === 'string') {
|
288
|
-
return SC.getPath(this, target);
|
289
|
-
} else {
|
290
|
-
return target;
|
291
|
-
}
|
292
|
-
}.property('target').cacheable(),
|
400
|
+
var get = SC.get, set = SC.set;
|
293
401
|
|
294
|
-
|
402
|
+
JUI.DialogButton = SC.Object.extend(JUI.TargetSupport, {
|
403
|
+
label: 'OK',
|
404
|
+
action: 'close',
|
295
405
|
executeAction: function() {
|
296
|
-
|
297
|
-
action = args.shift(),
|
298
|
-
target = get(this, 'targetObject');
|
299
|
-
if (target && action) {
|
300
|
-
if (SC.typeOf(action) === 'string') {
|
301
|
-
action = target[action];
|
302
|
-
}
|
303
|
-
action.apply(target, args);
|
304
|
-
}
|
406
|
+
this._super(get(this, 'action'));
|
305
407
|
}
|
306
|
-
|
307
408
|
});
|
308
409
|
|
309
|
-
})({});
|
310
|
-
|
311
|
-
|
312
|
-
(function(exports) {
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
var get = SC.get, set = SC.set;
|
317
|
-
|
318
410
|
/**
|
319
411
|
@class
|
320
412
|
@since SproutCore JUI 1.0
|
@@ -326,56 +418,50 @@ JUI.Dialog = SC.View.extend(JUI.Widget, JUI.TargetSupport, {
|
|
326
418
|
uiOptions: ['title', '_buttons', 'position', 'closeOnEscape',
|
327
419
|
'modal', 'draggable', 'resizable', 'autoReposition',
|
328
420
|
'width', 'height', 'maxWidth', 'maxHeight', 'minWidth', 'minHeight'],
|
329
|
-
uiMethods: ['open', 'close'],
|
330
421
|
|
331
422
|
isOpen: false,
|
332
|
-
|
333
423
|
message: '',
|
334
|
-
icon: null,
|
335
424
|
buttons: [],
|
336
425
|
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
_stateClassNames: function() {
|
346
|
-
var icon = get(this, 'icon');
|
347
|
-
if (icon === 'error') {
|
348
|
-
return 'ui-state-error';
|
349
|
-
} else if (icon === 'info') {
|
350
|
-
return 'ui-state-highlight';
|
426
|
+
defaultTemplate: SC.Handlebars.compile('<p>{{message}}</p>'),
|
427
|
+
|
428
|
+
open: function() {
|
429
|
+
if (get(this, 'state') !== 'inDOM') {
|
430
|
+
this._insertElementLater(SC.K);
|
431
|
+
} else {
|
432
|
+
get(this, 'ui').open();
|
351
433
|
}
|
352
|
-
|
353
|
-
}.property('icon').cacheable(),
|
434
|
+
},
|
354
435
|
|
355
|
-
|
356
|
-
|
436
|
+
close: function() {
|
437
|
+
get(this, 'ui').close();
|
438
|
+
},
|
439
|
+
|
440
|
+
didInsertElement: function() {
|
441
|
+
this._super();
|
442
|
+
get(this, 'ui')._bind({
|
443
|
+
dialogopen: $.proxy(this._open, this),
|
444
|
+
dialogclose: $.proxy(this._close, this)
|
445
|
+
});
|
446
|
+
},
|
357
447
|
|
358
448
|
_buttons: function() {
|
359
|
-
|
360
|
-
target = get(this, 'targetObject');
|
361
|
-
get(this, 'buttons').forEach(function(button) {
|
362
|
-
var action = button.action,
|
363
|
-
context = this;
|
364
|
-
if (!this[action] && target) {
|
365
|
-
context = target;
|
366
|
-
}
|
367
|
-
buttons.push({
|
368
|
-
text: button.label,
|
369
|
-
click: function(event) {
|
370
|
-
if (context && context[action]) {
|
371
|
-
context[action].call(context, event);
|
372
|
-
}
|
373
|
-
}
|
374
|
-
});
|
375
|
-
}, this);
|
376
|
-
return buttons;
|
449
|
+
return get(this, 'buttons').map(this._buildButton, this);
|
377
450
|
}.property('buttons').cacheable(),
|
378
451
|
|
452
|
+
_buildButton: function(buttonPath) {
|
453
|
+
var button = this.getPath(buttonPath);
|
454
|
+
if (!button.isInstance) {
|
455
|
+
button = button.create({
|
456
|
+
target: get(this, 'targetObject') || this
|
457
|
+
});
|
458
|
+
set(this, buttonPath, button);
|
459
|
+
}
|
460
|
+
var props = {text: get(button, 'label')};
|
461
|
+
props.click = $.proxy(button, 'executeAction')
|
462
|
+
return props;
|
463
|
+
},
|
464
|
+
|
379
465
|
_open: function() {
|
380
466
|
set(this, 'isOpen', true);
|
381
467
|
this.didOpenDialog();
|
@@ -386,20 +472,6 @@ JUI.Dialog = SC.View.extend(JUI.Widget, JUI.TargetSupport, {
|
|
386
472
|
this.didCloseDialog();
|
387
473
|
},
|
388
474
|
|
389
|
-
open: function() {
|
390
|
-
this._insertElementLater(SC.K);
|
391
|
-
this._open();
|
392
|
-
},
|
393
|
-
|
394
|
-
didInsertElement: function() {
|
395
|
-
this._super();
|
396
|
-
get(this, 'ui')._bind({
|
397
|
-
dialogopen: $.proxy(this._open, this),
|
398
|
-
dialogclose: $.proxy(this._close, this)
|
399
|
-
});
|
400
|
-
},
|
401
|
-
|
402
|
-
close: SC.K,
|
403
475
|
didOpenDialog: SC.K,
|
404
476
|
didCloseDialog: SC.K
|
405
477
|
});
|
@@ -408,40 +480,36 @@ JUI.Dialog.close = function() {
|
|
408
480
|
$('.ui-dialog-content:visible').dialog('close');
|
409
481
|
};
|
410
482
|
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
buttons: [{label: 'OK', action: 'close'}],
|
483
|
+
JUI.ModalDialog = JUI.Dialog.extend({
|
484
|
+
buttons: ['ok'],
|
485
|
+
ok: JUI.DialogButton,
|
415
486
|
resizable: false,
|
416
487
|
draggable: false,
|
417
488
|
modal: true
|
418
489
|
});
|
419
490
|
|
420
|
-
JUI.AlertDialog.
|
491
|
+
JUI.AlertDialog = JUI.ModalDialog.create({
|
421
492
|
open: function(message, title, type) {
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
set(alertDialog, 'message', message);
|
427
|
-
set(alertDialog, 'icon', type);
|
428
|
-
alertDialog.open();
|
493
|
+
set(this, 'title', title);
|
494
|
+
set(this, 'message', message);
|
495
|
+
set(this, 'icon', type);
|
496
|
+
this._super();
|
429
497
|
},
|
430
|
-
|
431
498
|
info: function(message, title) {
|
432
|
-
|
499
|
+
this.open(message, title, 'info');
|
433
500
|
},
|
434
|
-
|
435
501
|
error: function(message, title) {
|
436
|
-
|
502
|
+
this.open(message, title, 'error');
|
437
503
|
}
|
438
504
|
});
|
439
505
|
|
440
|
-
JUI.ConfirmDialog = JUI.
|
441
|
-
buttons: [
|
442
|
-
|
443
|
-
|
444
|
-
|
506
|
+
JUI.ConfirmDialog = JUI.ModalDialog.create({
|
507
|
+
buttons: ['yes', 'no'],
|
508
|
+
yes: JUI.DialogButton.extend({
|
509
|
+
label: 'YES',
|
510
|
+
action: 'didConfirm'
|
511
|
+
}),
|
512
|
+
no: JUI.DialogButton.extend({label: 'NO'}),
|
445
513
|
didConfirm: function() {
|
446
514
|
get(this, 'answer').resolve();
|
447
515
|
this.close();
|
@@ -452,19 +520,13 @@ JUI.ConfirmDialog = JUI.AlertDialog.extend({
|
|
452
520
|
answer.reject();
|
453
521
|
}
|
454
522
|
set(this, 'answer', null);
|
455
|
-
}
|
456
|
-
});
|
457
|
-
|
458
|
-
JUI.ConfirmDialog.reopenClass({
|
523
|
+
},
|
459
524
|
open: function(message, title) {
|
460
|
-
if (!confirmDialog) {
|
461
|
-
confirmDialog = JUI.ConfirmDialog.create();
|
462
|
-
}
|
463
525
|
var answer = SC.$.Deferred();
|
464
|
-
set(
|
465
|
-
set(
|
466
|
-
set(
|
467
|
-
|
526
|
+
set(this, 'answer', answer);
|
527
|
+
set(this, 'title', title);
|
528
|
+
set(this, 'message', message);
|
529
|
+
this._super();
|
468
530
|
return answer.promise();
|
469
531
|
}
|
470
532
|
});
|
@@ -636,57 +698,247 @@ JUI.ResizableView = SC.View.extend(JUI.Widget, {
|
|
636
698
|
|
637
699
|
|
638
700
|
(function(exports) {
|
701
|
+
/*!
|
702
|
+
* jQuery UI Throbber
|
703
|
+
*
|
704
|
+
* Copyright (c) 2011 Paul Chavard
|
705
|
+
* Licensed under the MIT license
|
706
|
+
*
|
707
|
+
* Author: Paul Chavard [paul at chavard dot net]
|
708
|
+
* Version: 0.5.0
|
709
|
+
*
|
710
|
+
* Credits: Felix Gnass [fgnass at neteye dot de]
|
711
|
+
*
|
712
|
+
*/
|
639
713
|
|
714
|
+
(function($, undefined) {
|
715
|
+
|
716
|
+
$.widget('ui.throbber', {
|
717
|
+
options: {
|
718
|
+
segments: 12,
|
719
|
+
space: 3,
|
720
|
+
length: 7,
|
721
|
+
width: 4,
|
722
|
+
speed: 1.2,
|
723
|
+
align: 'center',
|
724
|
+
valign: 'center',
|
725
|
+
padding: 4,
|
726
|
+
autoStart: false,
|
727
|
+
outside: true
|
728
|
+
},
|
640
729
|
|
730
|
+
_create: function() {
|
731
|
+
this.options = $.extend({color: this.element.css('color')}, this.options);
|
732
|
+
this._prepare();
|
733
|
+
if (this.options.autoStart) {
|
734
|
+
this._activate();
|
735
|
+
}
|
736
|
+
},
|
641
737
|
|
738
|
+
_setOption: function(key, value) {
|
739
|
+
this.options[key] = value;
|
642
740
|
|
741
|
+
if (key === 'disabled') {
|
742
|
+
if (this.throbber) {
|
743
|
+
clearInterval(this.interval);
|
744
|
+
this.throbber.remove();
|
745
|
+
}
|
746
|
+
if (value === false) {
|
747
|
+
this._activate();
|
748
|
+
}
|
749
|
+
}
|
643
750
|
|
751
|
+
return this;
|
752
|
+
},
|
644
753
|
|
754
|
+
_activate: function() {
|
755
|
+
var options = this.options;
|
756
|
+
this.throbber = this._render().css('position', 'absolute').prependTo(options.outside ? 'body' : this.element);
|
757
|
+
var h = this.element.outerHeight() - this.throbber.height();
|
758
|
+
var w = this.element.outerWidth() - this.throbber.width();
|
759
|
+
var margin = {
|
760
|
+
top: options.valign == 'top' ? options.padding : options.valign == 'bottom' ? h - options.padding : Math.floor(h / 2),
|
761
|
+
left: options.align == 'left' ? options.padding : options.align == 'right' ? w - options.padding : Math.floor(w / 2)
|
762
|
+
};
|
763
|
+
var offset = this.element.offset();
|
764
|
+
if (options.outside) {
|
765
|
+
this.throbber.css({top: offset.top + 'px', left: offset.left + 'px'});
|
766
|
+
} else {
|
767
|
+
margin.top -= this.throbber.offset().top - offset.top;
|
768
|
+
margin.left -= this.throbber.offset().left - offset.left;
|
769
|
+
}
|
770
|
+
this.throbber.css({marginTop: margin.top + 'px', marginLeft: margin.left + 'px'});
|
771
|
+
this._animate(options.segments, Math.round(10 / options.speed) / 10);
|
772
|
+
},
|
645
773
|
|
774
|
+
_prepare: function() {
|
775
|
+
if ($.ui.throbber.renderMethod) {
|
776
|
+
this.renderMethod = $.ui.throbber.renderMethod;
|
777
|
+
this.animateMethod = $.ui.throbber.animateMethod;
|
778
|
+
return;
|
779
|
+
}
|
780
|
+
if (document.createElementNS && document.createElementNS( "http://www.w3.org/2000/svg", "svg").createSVGRect) {
|
781
|
+
$.ui.throbber.renderMethod = 'SVG';
|
782
|
+
if (document.createElement('div').style.WebkitAnimationName !== undefined) {
|
783
|
+
$.ui.throbber.animateMethod = 'CSS';
|
784
|
+
} else {
|
785
|
+
$.ui.throbber.animateMethod = 'SVG';
|
786
|
+
}
|
787
|
+
} else if (this._prepareVML()) {
|
788
|
+
$.ui.throbber.renderMethod = $.ui.throbber.animateMethod = 'VML';
|
789
|
+
} else {
|
790
|
+
$.ui.throbber.renderMethod = $.ui.throbber.animateMethod = 'DOM';
|
791
|
+
}
|
792
|
+
this.renderMethod = $.ui.throbber.renderMethod;
|
793
|
+
this.animateMethod = $.ui.throbber.animateMethod;
|
794
|
+
},
|
646
795
|
|
796
|
+
_prepareVML: function() {
|
797
|
+
var s = $('<shape>').css('behavior', 'url(#default#VML)');
|
798
|
+
var ok = false;
|
799
|
+
$('body').append(s);
|
800
|
+
if (s.get(0).adj) {
|
801
|
+
// VML support detected. Insert CSS rules for group, shape and stroke.
|
802
|
+
var sheet = document.createStyleSheet();
|
803
|
+
$.each(['group', 'shape', 'stroke'], function() {
|
804
|
+
sheet.addRule(this, "behavior:url(#default#VML);");
|
805
|
+
});
|
806
|
+
ok = true;
|
807
|
+
}
|
808
|
+
$(s).remove();
|
809
|
+
return ok;
|
810
|
+
},
|
647
811
|
|
812
|
+
_getOpacity: function(i) {
|
813
|
+
var steps = this.options.steps || this.options.segments-1;
|
814
|
+
var end = this.options.opacity !== undefined ? this.options.opacity : 1/steps;
|
815
|
+
return 1 - Math.min(i, steps) * (1 - end) / steps;
|
816
|
+
},
|
648
817
|
|
649
|
-
|
818
|
+
_render: function() {
|
819
|
+
return this['_render'+this.renderMethod]();
|
820
|
+
},
|
650
821
|
|
822
|
+
_renderDOM: function() {
|
823
|
+
return $('<div>').addClass('ui-throbber');
|
824
|
+
},
|
651
825
|
|
652
|
-
|
653
|
-
|
654
|
-
|
655
|
-
|
656
|
-
|
657
|
-
|
658
|
-
|
659
|
-
|
660
|
-
|
826
|
+
_renderSVG: function() {
|
827
|
+
var o = this.options;
|
828
|
+
var innerRadius = o.width*2 + o.space;
|
829
|
+
var r = (innerRadius + o.length + Math.ceil(o.width / 2) + 1);
|
830
|
+
|
831
|
+
var el = svg().width(r*2).height(r*2);
|
832
|
+
|
833
|
+
var g = svg('g', {
|
834
|
+
'stroke-width': o.width,
|
835
|
+
'stroke-linecap': 'round',
|
836
|
+
stroke: o.color
|
837
|
+
}).appendTo(svg('g', {transform: 'translate('+ r +','+ r +')'}).appendTo(el));
|
838
|
+
|
839
|
+
for (var i = 0; i < o.segments; i++) {
|
840
|
+
g.append(svg('line', {
|
841
|
+
x1: 0,
|
842
|
+
y1: innerRadius,
|
843
|
+
x2: 0,
|
844
|
+
y2: innerRadius + o.length,
|
845
|
+
transform: 'rotate(' + (360 / o.segments * i) + ', 0, 0)',
|
846
|
+
opacity: this._getOpacity(i)
|
847
|
+
}));
|
848
|
+
}
|
849
|
+
return $('<div>').append(el).width(2*r).height(2*r);
|
850
|
+
},
|
661
851
|
|
662
|
-
|
663
|
-
|
664
|
-
|
852
|
+
_renderVML: function() {
|
853
|
+
var o = this.options;
|
854
|
+
var innerRadius = o.width*2 + o.space;
|
855
|
+
var r = (innerRadius + o.length + Math.ceil(o.width / 2) + 1);
|
856
|
+
var s = r*2;
|
857
|
+
var c = -Math.ceil(s/2);
|
858
|
+
|
859
|
+
var el = $('<group>', {coordsize: s + ' ' + s, coordorigin: c + ' ' + c}).css({top: c, left: c, width: s, height: s});
|
860
|
+
for (var i = 0; i < o.segments; i++) {
|
861
|
+
el.append($('<shape>', {path: 'm ' + innerRadius + ',0 l ' + (innerRadius + o.length) + ',0'}).css({
|
862
|
+
width: s,
|
863
|
+
height: s,
|
864
|
+
rotation: (360 / o.segments * i) + 'deg'
|
865
|
+
}).append($('<stroke>', {color: o.color, weight: o.width + 'px', endcap: 'round', opacity: this._getOpacity(i)})));
|
866
|
+
}
|
867
|
+
return $('<group>', {coordsize: s + ' ' + s}).css({width: s, height: s, overflow: 'hidden'}).append(el);
|
868
|
+
},
|
665
869
|
|
666
|
-
function
|
667
|
-
|
668
|
-
|
669
|
-
return matcher.test(jQuery('<div>').html(value.label || value.value || value).text());
|
670
|
-
});
|
671
|
-
}
|
870
|
+
_animate: function(steps, duration) {
|
871
|
+
this['_animate'+this.animateMethod](steps, duration);
|
872
|
+
},
|
672
873
|
|
673
|
-
|
674
|
-
|
675
|
-
|
676
|
-
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
|
874
|
+
_animateCSS: function(steps, duration) {
|
875
|
+
if (!animations[steps]) {
|
876
|
+
var name = 'spin' + steps;
|
877
|
+
var rule = '@-webkit-keyframes '+ name +' {';
|
878
|
+
for (var i=0; i < steps; i++) {
|
879
|
+
var p1 = Math.round(100000 / steps * i) / 1000;
|
880
|
+
var p2 = Math.round(100000 / steps * (i+1) - 1) / 1000;
|
881
|
+
var value = '% { -webkit-transform:rotate(' + Math.round(360 / steps * i) + 'deg); }\n';
|
882
|
+
rule += p1 + value + p2 + value;
|
883
|
+
}
|
884
|
+
rule += '100% { -webkit-transform:rotate(100deg); }\n}';
|
885
|
+
document.styleSheets[0].insertRule(rule);
|
886
|
+
animations[steps] = name;
|
681
887
|
}
|
888
|
+
this.throbber.css('-webkit-animation', animations[steps] + ' ' + duration +'s linear infinite');
|
682
889
|
},
|
683
890
|
|
684
|
-
|
685
|
-
|
686
|
-
|
687
|
-
|
688
|
-
.
|
891
|
+
_animateSVG: function(steps, duration) {
|
892
|
+
var rotation = 0;
|
893
|
+
var g = this.throbber.find('g g').get(0);
|
894
|
+
this.interval = setInterval(function() {
|
895
|
+
g.setAttributeNS(null, 'transform', 'rotate(' + (++rotation % steps * (360 / steps)) + ')');
|
896
|
+
}, duration * 1000 / steps);
|
897
|
+
},
|
898
|
+
|
899
|
+
_animateVML: function(steps, duration) {
|
900
|
+
var rotation = 0;
|
901
|
+
var g = this.throbber.get(0);
|
902
|
+
this.interval = setInterval(function() {
|
903
|
+
g.style.rotation = ++rotation % steps * (360 / steps);
|
904
|
+
}, duration * 1000 / steps);
|
905
|
+
},
|
906
|
+
|
907
|
+
_animateDOM: function(steps, duration) {}
|
908
|
+
|
909
|
+
});
|
910
|
+
|
911
|
+
/**
|
912
|
+
* Utility function to create elements in the SVG namespace.
|
913
|
+
*/
|
914
|
+
function svg(tag, attr) {
|
915
|
+
var el = document.createElementNS("http://www.w3.org/2000/svg", tag || 'svg');
|
916
|
+
if (attr) {
|
917
|
+
$.each(attr, function(k, v) {
|
918
|
+
el.setAttributeNS(null, k, v);
|
919
|
+
});
|
689
920
|
}
|
921
|
+
return $(el);
|
922
|
+
}
|
923
|
+
|
924
|
+
var animations = {};
|
925
|
+
|
926
|
+
})(jQuery);
|
927
|
+
|
928
|
+
})({});
|
929
|
+
|
930
|
+
|
931
|
+
(function(exports) {
|
932
|
+
|
933
|
+
|
934
|
+
/*
|
935
|
+
* JUI.Throbber
|
936
|
+
*/
|
937
|
+
|
938
|
+
JUI.Throbber = SC.View.extend(JUI.Widget, {
|
939
|
+
uiType: 'throbber',
|
940
|
+
uiOptions: ['segments', 'space', 'length', 'width',
|
941
|
+
'speed', 'align', 'valign', 'padding', 'autoStart', 'outside']
|
690
942
|
});
|
691
943
|
|
692
944
|
})({});
|
@@ -696,26 +948,14 @@ jQuery.extend(proto, {
|
|
696
948
|
|
697
949
|
|
698
950
|
|
699
|
-
var get = SC.get;
|
700
951
|
|
701
|
-
/**
|
702
|
-
@class
|
703
|
-
@since SproutCore JUI 1.0
|
704
|
-
@extends JUI.AutocompleteTextField
|
705
|
-
*/
|
706
|
-
JUI.AutocompleteTextField = SC.TextField.extend(JUI.Widget, JUI.TargetSupport, {
|
707
|
-
uiType: 'autocomplete',
|
708
|
-
uiOptions: ['source', 'delay', 'position', 'minLength', 'html'],
|
709
|
-
uiEvents: ['select', 'focus', 'open', 'close'],
|
710
952
|
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
|
715
|
-
|
716
|
-
|
717
|
-
}
|
718
|
-
});
|
953
|
+
|
954
|
+
|
955
|
+
|
956
|
+
|
957
|
+
|
958
|
+
|
719
959
|
|
720
960
|
})({});
|
721
961
|
|
@@ -727,6 +967,7 @@ JUI.AutocompleteTextField = SC.TextField.extend(JUI.Widget, JUI.TargetSupport, {
|
|
727
967
|
// License: Licensed under MIT license (see license.js)
|
728
968
|
// ==========================================================================
|
729
969
|
|
970
|
+
//require('jquery-ui');
|
730
971
|
|
731
972
|
|
732
973
|
})({});
|
@@ -1,7 +1,9 @@
|
|
1
1
|
|
2
2
|
(function(exports) {
|
3
3
|
// lib/handlebars/base.js
|
4
|
-
Handlebars = {};
|
4
|
+
var Handlebars = {};
|
5
|
+
|
6
|
+
window.Handlebars = Handlebars;
|
5
7
|
|
6
8
|
Handlebars.VERSION = "1.0.beta.2";
|
7
9
|
|
@@ -1573,7 +1575,7 @@ if ('undefined' === typeof SC) {
|
|
1573
1575
|
/**
|
1574
1576
|
@namespace
|
1575
1577
|
@name SC
|
1576
|
-
@version 2.0.
|
1578
|
+
@version 2.0.beta.3
|
1577
1579
|
|
1578
1580
|
All SproutCore methods and functions are defined inside of this namespace.
|
1579
1581
|
You generally should not add new properties to this namespace as it may be
|
@@ -1602,10 +1604,10 @@ if ('undefined' !== typeof window) {
|
|
1602
1604
|
/**
|
1603
1605
|
@static
|
1604
1606
|
@type String
|
1605
|
-
@default '2.0.
|
1607
|
+
@default '2.0.beta.3'
|
1606
1608
|
@constant
|
1607
1609
|
*/
|
1608
|
-
SC.VERSION = '2.0.
|
1610
|
+
SC.VERSION = '2.0.beta.3';
|
1609
1611
|
|
1610
1612
|
/**
|
1611
1613
|
@static
|
@@ -2645,7 +2647,7 @@ Dp.set = function(obj, keyName, value) {
|
|
2645
2647
|
@returns {Object} the current value
|
2646
2648
|
*/
|
2647
2649
|
Dp.get = function(obj, keyName) {
|
2648
|
-
return obj
|
2650
|
+
return w_get(obj, keyName, obj);
|
2649
2651
|
};
|
2650
2652
|
|
2651
2653
|
/**
|
@@ -2722,11 +2724,12 @@ var WATCHED_DESC = {
|
|
2722
2724
|
set: SC.Descriptor.MUST_USE_SETTER
|
2723
2725
|
};
|
2724
2726
|
|
2725
|
-
function w_get(obj, keyName) {
|
2726
|
-
|
2727
|
+
function w_get(obj, keyName, values) {
|
2728
|
+
values = values || meta(obj, false).values;
|
2727
2729
|
|
2728
2730
|
if (values) {
|
2729
|
-
|
2731
|
+
var ret = values[keyName];
|
2732
|
+
if (ret !== undefined) { return ret; }
|
2730
2733
|
if (obj.unknownProperty) { return obj.unknownProperty(keyName); }
|
2731
2734
|
}
|
2732
2735
|
|
@@ -2814,7 +2817,7 @@ if (SC.platform.hasPropertyAccessors) {
|
|
2814
2817
|
};
|
2815
2818
|
|
2816
2819
|
}
|
2817
|
-
|
2820
|
+
|
2818
2821
|
/**
|
2819
2822
|
The default descriptor for simple properties. Pass as the third argument
|
2820
2823
|
to SC.defineProperty() along with a value to set a simple value.
|
@@ -4778,7 +4781,7 @@ SC.Enumerable = SC.Mixin.create( /** @lends SC.Enumerable */ {
|
|
4778
4781
|
to nextObject for the current iteration. This is a useful way to
|
4779
4782
|
manage iteration if you are tracing a linked list, for example.
|
4780
4783
|
|
4781
|
-
Finally the context
|
4784
|
+
Finally the context parameter will always contain a hash you can use as
|
4782
4785
|
a "scratchpad" to maintain any other state you need in order to iterate
|
4783
4786
|
properly. The context object is reused and is not reset between
|
4784
4787
|
iterations so make sure you setup the context with a fresh state whenever
|
@@ -8857,7 +8860,10 @@ function getTransformedValue(binding, val, obj, dir) {
|
|
8857
8860
|
len = transforms ? transforms.length : 0,
|
8858
8861
|
idx;
|
8859
8862
|
|
8860
|
-
for(idx=0;idx<len;idx++) {
|
8863
|
+
for(idx=0;idx<len;idx++) {
|
8864
|
+
var transform = transforms[idx][dir];
|
8865
|
+
if (transform) { val = transform.call(this, val, obj); }
|
8866
|
+
}
|
8861
8867
|
return val;
|
8862
8868
|
}
|
8863
8869
|
|
@@ -8871,6 +8877,11 @@ function getTransformedFromValue(obj, binding) {
|
|
8871
8877
|
return getTransformedValue(binding, fromValue, obj, 'to');
|
8872
8878
|
}
|
8873
8879
|
|
8880
|
+
function getTransformedToValue(obj, binding) {
|
8881
|
+
var toValue = getPath(obj, binding._to);
|
8882
|
+
return getTransformedValue(binding, toValue, obj, 'from');
|
8883
|
+
}
|
8884
|
+
|
8874
8885
|
var AND_OPERATION = function(obj, left, right) {
|
8875
8886
|
return getPath(obj, left) && getPath(obj, right);
|
8876
8887
|
};
|
@@ -9134,7 +9145,9 @@ var Binding = SC.Object.extend({
|
|
9134
9145
|
@returns {SC.Binding} this
|
9135
9146
|
*/
|
9136
9147
|
transform: function(transform) {
|
9137
|
-
|
9148
|
+
if ('function' === typeof transform) {
|
9149
|
+
transform = { to: transform };
|
9150
|
+
}
|
9138
9151
|
|
9139
9152
|
if (!this._transforms) this._transforms = [];
|
9140
9153
|
this._transforms.push(transform);
|
@@ -9386,7 +9399,7 @@ var Binding = SC.Object.extend({
|
|
9386
9399
|
|
9387
9400
|
// apply any operations to the object, then apply transforms
|
9388
9401
|
var fromValue = getTransformedFromValue(obj, this);
|
9389
|
-
var toValue
|
9402
|
+
var toValue = getTransformedToValue(obj, this);
|
9390
9403
|
|
9391
9404
|
if (toValue === fromValue) { return; }
|
9392
9405
|
|
@@ -10923,18 +10936,18 @@ SC.View = SC.Object.extend(
|
|
10923
10936
|
// Loop through all of the configured bindings. These will be either
|
10924
10937
|
// property names ('isUrgent') or property paths relative to the view
|
10925
10938
|
// ('content.isUrgent')
|
10926
|
-
classBindings.forEach(function(
|
10939
|
+
classBindings.forEach(function(binding) {
|
10927
10940
|
|
10928
10941
|
// Variable in which the old class value is saved. The observer function
|
10929
10942
|
// closes over this variable, so it knows which string to remove when
|
10930
10943
|
// the property changes.
|
10931
|
-
var oldClass;
|
10944
|
+
var oldClass, property;
|
10932
10945
|
|
10933
10946
|
// Set up an observer on the context. If the property changes, toggle the
|
10934
10947
|
// class name.
|
10935
10948
|
var observer = function() {
|
10936
10949
|
// Get the current value of the property
|
10937
|
-
newClass = this._classStringForProperty(
|
10950
|
+
newClass = this._classStringForProperty(binding);
|
10938
10951
|
elem = this.$();
|
10939
10952
|
|
10940
10953
|
// If we had previously added a class to the element, remove it.
|
@@ -10952,10 +10965,8 @@ SC.View = SC.Object.extend(
|
|
10952
10965
|
}
|
10953
10966
|
};
|
10954
10967
|
|
10955
|
-
addObserver(this, property, observer);
|
10956
|
-
|
10957
10968
|
// Get the class name for the property at its current value
|
10958
|
-
dasherizedClass = this._classStringForProperty(
|
10969
|
+
dasherizedClass = this._classStringForProperty(binding);
|
10959
10970
|
|
10960
10971
|
if (dasherizedClass) {
|
10961
10972
|
// Ensure that it gets into the classNames array
|
@@ -10967,6 +10978,10 @@ SC.View = SC.Object.extend(
|
|
10967
10978
|
// been closed over by the observer.
|
10968
10979
|
oldClass = dasherizedClass;
|
10969
10980
|
}
|
10981
|
+
|
10982
|
+
// Extract just the property name from bindings like 'foo:bar'
|
10983
|
+
property = binding.split(':')[0];
|
10984
|
+
addObserver(this, property, observer);
|
10970
10985
|
}, this);
|
10971
10986
|
},
|
10972
10987
|
|
@@ -11419,13 +11434,9 @@ SC.View = SC.Object.extend(
|
|
11419
11434
|
|
11420
11435
|
viewMeta.lengthBeforeRender = getPath(this, 'childViews.length');
|
11421
11436
|
|
11422
|
-
SC.beginPropertyChanges(this);
|
11423
|
-
|
11424
11437
|
this.applyAttributesToBuffer(buffer);
|
11425
11438
|
this.render(buffer);
|
11426
11439
|
|
11427
|
-
SC.endPropertyChanges(this);
|
11428
|
-
|
11429
11440
|
viewMeta.lengthAfterRender = getPath(this, 'childViews.length');
|
11430
11441
|
|
11431
11442
|
return buffer;
|
@@ -11590,9 +11601,10 @@ SC.View = SC.Object.extend(
|
|
11590
11601
|
var view;
|
11591
11602
|
|
11592
11603
|
if ('string' === typeof viewName) {
|
11593
|
-
view = this
|
11604
|
+
view = get(this, viewName);
|
11594
11605
|
view = this.createChildView(view);
|
11595
|
-
childViews[idx] =
|
11606
|
+
childViews[idx] = view;
|
11607
|
+
set(this, viewName, view);
|
11596
11608
|
} else if (viewName.isClass) {
|
11597
11609
|
view = this.createChildView(viewName);
|
11598
11610
|
childViews[idx] = view;
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: rasputin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.
|
5
|
+
version: 0.6.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Paul Chavard
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-08-
|
13
|
+
date: 2011-08-13 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: railties
|