rasputin 0.5.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.
@@ -0,0 +1,40 @@
1
+
2
+ (function(exports) {
3
+
4
+ if ('I18n' in window) {
5
+
6
+ SC.I18n = I18n;
7
+
8
+ SC.String.loc = function(scope, options) {
9
+ return SC.I18n.translate(scope, options);
10
+ };
11
+
12
+ SC.STRINGS = SC.I18n.translations;
13
+
14
+ Handlebars.registerHelper('loc', function(property) {
15
+ return SC.String.loc(property);
16
+ });
17
+
18
+ if (SC.EXTEND_PROTOTYPES) {
19
+
20
+ String.prototype.loc = function(options) {
21
+ return SC.String.loc(this, options);
22
+ };
23
+
24
+ }
25
+
26
+ }
27
+
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
+ })({});
@@ -0,0 +1,732 @@
1
+
2
+ (function(exports) {
3
+ if ('undefined' === typeof JUI) {
4
+
5
+ /**
6
+ @namespace
7
+ @name JUI
8
+ @version 1.0.alpha
9
+ */
10
+ JUI = {};
11
+
12
+ // aliases needed to keep minifiers from removing the global context
13
+ if ('undefined' !== typeof window) {
14
+ window.JUI = JUI;
15
+ }
16
+
17
+ }
18
+
19
+ /**
20
+ @static
21
+ @type String
22
+ @default '1.0.alpha'
23
+ @constant
24
+ */
25
+ JUI.VERSION = '1.0.alpha';
26
+
27
+ })({});
28
+
29
+
30
+ (function(exports) {
31
+
32
+ var get = SC.get, set = SC.set, none = SC.none;
33
+
34
+ /**
35
+ @mixin
36
+ @since SproutCore JUI 1.0
37
+ @extends JUI.Widget
38
+ */
39
+ JUI.Widget = SC.Mixin.create({
40
+
41
+ uiWidget: function() {
42
+ return jQuery.ui[this.get('uiType')];
43
+ }.property().cacheable(),
44
+
45
+ didInsertElement: function() {
46
+ this._super();
47
+ var options = this._gatherOptions();
48
+ this._gatherEvents(options);
49
+
50
+ var ui = get(this, 'uiWidget')(options, get(this, 'element'));
51
+ set(this, 'ui', ui);
52
+
53
+ this._defineMethods();
54
+ },
55
+
56
+ willDestroyElement: function() {
57
+ var ui = get(this, 'ui');
58
+ if (ui) {
59
+ var observers = this._observers;
60
+ for (var prop in observers) {
61
+ if (observers.hasOwnProperty(prop)) {
62
+ this.removeObserver(prop, observers[prop]);
63
+ }
64
+ }
65
+ ui._destroy();
66
+ }
67
+ },
68
+
69
+ didCreateWidget: SC.K,
70
+
71
+ concatenatedProperties: ['uiEvents', 'uiOptions', 'uiMethods'],
72
+
73
+ uiEvents: ['create'],
74
+ uiOptions: ['disabled'],
75
+ uiMethods: [],
76
+
77
+ _gatherEvents: function(options) {
78
+ var uiEvents = get(this, 'uiEvents');
79
+
80
+ uiEvents.forEach(function(eventType) {
81
+ var eventHandler = eventType === 'create' ? this.didCreateWidget : this[eventType];
82
+ if (eventHandler) {
83
+ options[eventType] = $.proxy(function(event, ui) {
84
+ eventHandler.call(this, event, ui);
85
+ }, this);
86
+ }
87
+ }, this);
88
+ },
89
+
90
+ _gatherOptions: function() {
91
+ var uiOptions = get(this, 'uiOptions'),
92
+ options = {},
93
+ defaultOptions = get(this, 'uiWidget').prototype.options;
94
+
95
+ uiOptions.forEach(function(key) {
96
+ var value = get(this, key),
97
+ uiKey = key.replace(/^_/, '');
98
+ if (!none(value)) {
99
+ options[uiKey] = value;
100
+ } else {
101
+ set(this, key, defaultOptions[uiKey]);
102
+ }
103
+
104
+ var observer = function() {
105
+ var value = get(this, key);
106
+ ui = get(this, 'ui');
107
+ if (ui.options[uiKey] != value) {
108
+ ui._setOption(uiKey, value);
109
+ }
110
+ };
111
+
112
+ this.addObserver(key, observer);
113
+ this._observers = this._observers || {};
114
+ this._observers[key] = observer;
115
+ }, this);
116
+
117
+ return options;
118
+ },
119
+
120
+ _defineMethods: function() {
121
+ var uiMethods = get(this, 'uiMethods'),
122
+ methods = {};
123
+ uiMethods.forEach(function(methodName) {
124
+ methods[methodName] = function() {
125
+ var ui = get(this, 'ui');
126
+ return ui[methodName].apply(ui, arguments);
127
+ };
128
+ });
129
+ this.reopen(methods);
130
+ }
131
+ });
132
+
133
+ })({});
134
+
135
+
136
+ (function(exports) {
137
+
138
+ /**
139
+ @class
140
+ @since SproutCore JUI 1.0
141
+ @extends JUI.Button
142
+ */
143
+ JUI.Button = SC.Button.extend(JUI.Widget, {
144
+ uiType: 'button',
145
+ uiOptions: ['label'],
146
+
147
+ isActiveBinding: SC.Binding.oneWay('.disabled')
148
+ });
149
+
150
+ })({});
151
+
152
+
153
+ (function(exports) {
154
+
155
+ var set = SC.set;
156
+
157
+ /**
158
+ @class
159
+ @since SproutCore JUI 1.0
160
+ @extends JUI.Slider
161
+ */
162
+ JUI.Slider = SC.View.extend(JUI.Widget, {
163
+ uiType: 'slider',
164
+ uiOptions: ['value', 'min', 'max', 'step', 'orientation', 'range'],
165
+ uiEvents: ['slide', 'start', 'stop'],
166
+
167
+ slide: function(event, ui) {
168
+ set(this, 'value', ui.value);
169
+ }
170
+ });
171
+
172
+ })({});
173
+
174
+
175
+ (function(exports) {
176
+
177
+ var set = SC.set;
178
+
179
+ /**
180
+ @class
181
+ @since SproutCore JUI 1.0
182
+ @extends JUI.Spinner
183
+ */
184
+ JUI.Spinner = SC.TextField.extend(JUI.Widget, {
185
+ uiType: 'spinner',
186
+ uiOptions: ['value', 'min', 'max', 'step'],
187
+ uiEvents: ['spin', 'start', 'stop'],
188
+ uiMethods: ['pageDown', 'pageUp', 'stepDown', 'stepUp'],
189
+
190
+ spin: function(event, ui) {
191
+ set(this, 'value', ui.value);
192
+ }
193
+ });
194
+
195
+ })({});
196
+
197
+
198
+ (function(exports) {
199
+
200
+ var get = SC.get, set = SC.set, none = SC.none;
201
+
202
+ /**
203
+ @class
204
+ @since SproutCore JUI 1.0
205
+ @extends JUI.ProgressBar
206
+ */
207
+ JUI.ProgressBar = SC.View.extend(JUI.Widget, {
208
+ uiType: 'progressbar',
209
+ uiOptions: ['_value', 'max'],
210
+ uiEvents: ['change', 'complete'],
211
+
212
+ _value: function(key, value) {
213
+ if (!none(value)) {
214
+ set(this, 'value', parseInt(value));
215
+ }
216
+ return parseInt(get(this, 'value'));
217
+ }.property('value').cacheable()
218
+ });
219
+
220
+ })({});
221
+
222
+
223
+ (function(exports) {
224
+
225
+ var get = SC.get;
226
+
227
+ /**
228
+ @class
229
+ @since SproutCore JUI 1.0
230
+ @extends JUI.Menu
231
+ */
232
+ JUI.Menu = SC.CollectionView.extend(JUI.Widget, {
233
+ uiType: 'menu',
234
+ uiEvents: ['select'],
235
+
236
+ tagName: 'ul',
237
+
238
+ arrayDidChange: function(content, start, removed, added) {
239
+ this._super(content, start, removed, added);
240
+
241
+ var ui = get(this, 'ui');
242
+ if (ui) { ui.refresh(); }
243
+ }
244
+ });
245
+
246
+ })({});
247
+
248
+
249
+ (function(exports) {
250
+ /*
251
+ * jQuery UI Dialog Auto Reposition Extension
252
+ *
253
+ * Copyright 2010, Scott González (http://scottgonzalez.com)
254
+ * Dual licensed under the MIT or GPL Version 2 licenses.
255
+ *
256
+ * http://github.com/scottgonzalez/jquery-ui-extensions
257
+ */
258
+
259
+ $.ui.dialog.prototype.options.autoReposition = true;
260
+ jQuery(window).resize(function() {
261
+ $('.ui-dialog-content:visible').each(function() {
262
+ var dialog = $(this).data('dialog');
263
+ if (dialog.options.autoReposition) {
264
+ dialog.option('position', dialog.options.position);
265
+ }
266
+ });
267
+ });
268
+
269
+ })({});
270
+
271
+
272
+ (function(exports) {
273
+
274
+ var get = SC.get;
275
+
276
+ /**
277
+ @mixin
278
+ @since SproutCore JUI 1.0
279
+ @extends JUI.TargetSupport
280
+ */
281
+ JUI.TargetSupport = SC.Mixin.create({
282
+
283
+ // @private
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(),
293
+
294
+ // @private
295
+ executeAction: function() {
296
+ var args = SC.$.makeArray(arguments),
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
+ }
305
+ }
306
+
307
+ });
308
+
309
+ })({});
310
+
311
+
312
+ (function(exports) {
313
+
314
+
315
+
316
+ var get = SC.get, set = SC.set;
317
+
318
+ /**
319
+ @class
320
+ @since SproutCore JUI 1.0
321
+ @extends JUI.Dialog
322
+ */
323
+ JUI.Dialog = SC.View.extend(JUI.Widget, JUI.TargetSupport, {
324
+ uiType: 'dialog',
325
+ uiEvents: ['beforeClose'],
326
+ uiOptions: ['title', '_buttons', 'position', 'closeOnEscape',
327
+ 'modal', 'draggable', 'resizable', 'autoReposition',
328
+ 'width', 'height', 'maxWidth', 'maxHeight', 'minWidth', 'minHeight'],
329
+ uiMethods: ['open', 'close'],
330
+
331
+ isOpen: false,
332
+
333
+ message: '',
334
+ icon: null,
335
+ buttons: [],
336
+
337
+ _iconClassNames: function() {
338
+ var icon = get(this, 'icon');
339
+ if (icon) {
340
+ return "ui-icon ui-icon-%@".fmt(icon === 'error' ? 'alert' : icon);
341
+ }
342
+ return '';
343
+ }.property('icon').cacheable(),
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';
351
+ }
352
+ return '';
353
+ }.property('icon').cacheable(),
354
+
355
+ defaultTemplate: SC.Handlebars.compile('<p {{bindAttr class="_stateClassNames"}}>\
356
+ <span {{bindAttr class="_iconClassNames"}}></span>{{message}}</p>'),
357
+
358
+ _buttons: function() {
359
+ var buttons = [],
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;
377
+ }.property('buttons').cacheable(),
378
+
379
+ _open: function() {
380
+ set(this, 'isOpen', true);
381
+ this.didOpenDialog();
382
+ },
383
+
384
+ _close: function() {
385
+ set(this, 'isOpen', false);
386
+ this.didCloseDialog();
387
+ },
388
+
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
+ didOpenDialog: SC.K,
404
+ didCloseDialog: SC.K
405
+ });
406
+
407
+ JUI.Dialog.close = function() {
408
+ $('.ui-dialog-content:visible').dialog('close');
409
+ };
410
+
411
+ var alertDialog, confirmDialog;
412
+
413
+ JUI.AlertDialog = JUI.Dialog.extend({
414
+ buttons: [{label: 'OK', action: 'close'}],
415
+ resizable: false,
416
+ draggable: false,
417
+ modal: true
418
+ });
419
+
420
+ JUI.AlertDialog.reopenClass({
421
+ open: function(message, title, type) {
422
+ if (!alertDialog) {
423
+ alertDialog = JUI.AlertDialog.create();
424
+ }
425
+ set(alertDialog, 'title', title ? title : null);
426
+ set(alertDialog, 'message', message);
427
+ set(alertDialog, 'icon', type);
428
+ alertDialog.open();
429
+ },
430
+
431
+ info: function(message, title) {
432
+ JUI.AlertDialog.open(message, title, 'info');
433
+ },
434
+
435
+ error: function(message, title) {
436
+ JUI.AlertDialog.open(message, title, 'error');
437
+ }
438
+ });
439
+
440
+ JUI.ConfirmDialog = JUI.AlertDialog.extend({
441
+ buttons: [
442
+ {label: 'YES', action: 'didConfirm'},
443
+ {label: 'NO', action: 'close'}
444
+ ],
445
+ didConfirm: function() {
446
+ get(this, 'answer').resolve();
447
+ this.close();
448
+ },
449
+ didCloseDialog: function() {
450
+ var answer = get(this, 'answer');
451
+ if (answer && !answer.isResolved()) {
452
+ answer.reject();
453
+ }
454
+ set(this, 'answer', null);
455
+ }
456
+ });
457
+
458
+ JUI.ConfirmDialog.reopenClass({
459
+ open: function(message, title) {
460
+ if (!confirmDialog) {
461
+ confirmDialog = JUI.ConfirmDialog.create();
462
+ }
463
+ var answer = SC.$.Deferred();
464
+ set(confirmDialog, 'answer', answer);
465
+ set(confirmDialog, 'title', title ? title : null);
466
+ set(confirmDialog, 'message', message);
467
+ confirmDialog.open();
468
+ return answer.promise();
469
+ }
470
+ });
471
+
472
+ })({});
473
+
474
+
475
+ (function(exports) {
476
+
477
+ var get = SC.get, set = SC.set, none = SC.none;
478
+
479
+ /**
480
+ @class
481
+ @since SproutCore JUI 1.0
482
+ @extends JUI.Datepicker
483
+ */
484
+ JUI.Datepicker = SC.TextField.extend(JUI.Widget, {
485
+ uiType: 'datepicker',
486
+ uiOptions: ['dateFormat', 'maxDate', 'minDate', 'defaultDate'],
487
+ uiEvents: ['onSelect'],
488
+
489
+ date: function(key, value) {
490
+ var ui = get(this, 'ui');
491
+ if (!none(value)) {
492
+ ui.setDate(value);
493
+ }
494
+ return ui.getDate();
495
+ }.property('value').cacheable(),
496
+
497
+ open: function() {
498
+ get(this, 'ui').show();
499
+ },
500
+
501
+ close: function() {
502
+ get(this, 'ui').hide();
503
+ },
504
+
505
+ // @private
506
+ uiWidget: function() {
507
+ var datepicker = function(options, elem) {
508
+ return SC.$(elem).datepicker(options).datepicker('widget');
509
+ };
510
+ datepicker.prototype.options = SC.$.datepicker._defaults;
511
+ return datepicker;
512
+ }.property().cacheable(),
513
+
514
+ // @private
515
+ onSelect: function(dateText, ui) {
516
+ this.select();
517
+ },
518
+
519
+ select: SC.K
520
+ });
521
+
522
+ JUI.Datepicker.formatDate = SC.$.datepicker.formatDate;
523
+ JUI.Datepicker.parseDate = SC.$.datepicker.parseDate;
524
+
525
+ })({});
526
+
527
+
528
+ (function(exports) {
529
+
530
+ var get = SC.get, set = SC.set;
531
+
532
+ /**
533
+ @mixin
534
+ @since SproutCore JUI 1.0
535
+ @extends JUI.Tooltip
536
+ */
537
+ JUI.Tooltip = SC.Mixin.create({
538
+ tooltip: '',
539
+ hasTooltip: false,
540
+
541
+ // @private
542
+ toggleTooltip: function() {
543
+ var flag = get(this, 'hasTooltip'),
544
+ ui = get(this, 'tooltipWidget');
545
+ if (flag && !ui) {
546
+ ui = this.$().tooltip({
547
+ content: get(this, 'tooltipTemplate')
548
+ }).tooltip('widget');
549
+ set(this, 'tooltipWidget', ui);
550
+ } else if (ui) {
551
+ ui._destroy();
552
+ }
553
+ }.observes('hasTooltip'),
554
+
555
+ // @private
556
+ tooltipTemplate: function() {
557
+ return SC.Handlebars.compile(get(this, 'tooltip'));
558
+ }.property('tooltip').cacheable()
559
+
560
+ });
561
+
562
+ })({});
563
+
564
+
565
+ (function(exports) {
566
+
567
+ var get = SC.get, set = SC.set;
568
+
569
+ /**
570
+ @class
571
+ @since SproutCore JUI 1.0
572
+ @extends JUI.SortableCollectionView
573
+ */
574
+ JUI.SortableCollectionView = SC.CollectionView.extend(JUI.Widget, {
575
+ uiType: 'sortable',
576
+ uiEvents: ['start', 'stop'],
577
+
578
+ draggedStartPos: null,
579
+
580
+ start: function(event, ui) {
581
+ set(this, 'dragging', true);
582
+ set(this, 'draggedStartPos', ui.item.index());
583
+ },
584
+
585
+ stop: function(event, ui) {
586
+ var oldIdx = get(this, 'draggedStartPos');
587
+ var newIdx = ui.item.index();
588
+ if (oldIdx != newIdx) {
589
+ var content = get(this, 'content');
590
+ content.beginPropertyChanges();
591
+ var el = content.objectAt(oldIdx);
592
+ content.removeAt(oldIdx);
593
+ content.insertAt(newIdx, el);
594
+ content.endPropertyChanges();
595
+ }
596
+ set(this, 'dragging', false);
597
+ },
598
+
599
+ // @private
600
+ // Overriding these to prevent CollectionView from reapplying content array modifications
601
+ arrayWillChange: function(content, start, removedCount, addedCount) {
602
+ if (get(this, 'dragging')) {
603
+ //this._super(content, 0, 0, 0);
604
+ } else {
605
+ this._super(content, start, removedCount, addedCount);
606
+ }
607
+ },
608
+
609
+ // @private
610
+ arrayDidChange: function(content, start, removedCount, addedCount) {
611
+ if (get(this, 'dragging')) {
612
+ //this._super(content, 0, 0, 0);
613
+ } else {
614
+ this._super(content, start, removedCount, addedCount);
615
+ }
616
+ }
617
+ });
618
+
619
+ })({});
620
+
621
+
622
+ (function(exports) {
623
+
624
+ /**
625
+ @class
626
+ @since SproutCore JUI 1.0
627
+ @extends JUI.ResizableView
628
+ */
629
+ JUI.ResizableView = SC.View.extend(JUI.Widget, {
630
+ uiType: 'resizable',
631
+ uiEvents: ['start', 'stop', 'resize'],
632
+ uiOptions: ['aspectRatio', 'maxHeight', 'maxWidth', 'minHeight', 'minWidth', 'containment', 'autoHide']
633
+ });
634
+
635
+ })({});
636
+
637
+
638
+ (function(exports) {
639
+
640
+
641
+
642
+
643
+
644
+
645
+
646
+
647
+
648
+
649
+ })({});
650
+
651
+
652
+ (function(exports) {
653
+ /*
654
+ * jQuery UI Autocomplete HTML Extension
655
+ *
656
+ * Copyright 2010, Scott González (http://scottgonzalez.com)
657
+ * Dual licensed under the MIT or GPL Version 2 licenses.
658
+ *
659
+ * http://github.com/scottgonzalez/jquery-ui-extensions
660
+ */
661
+
662
+ var proto = jQuery.ui.autocomplete.prototype,
663
+ initSource = proto._initSource,
664
+ escapeRegex = jQuery.ui.autocomplete.escapeRegex;
665
+
666
+ function filter(array, term) {
667
+ var matcher = new RegExp(escapeRegex(term), 'i');
668
+ return jQuery.grep(array, function(value) {
669
+ return matcher.test(jQuery('<div>').html(value.label || value.value || value).text());
670
+ });
671
+ }
672
+
673
+ jQuery.extend(proto, {
674
+ _initSource: function() {
675
+ if (this.options.html && jQuery.isArray(this.options.source)) {
676
+ this.source = function(request, response) {
677
+ response(filter( this.options.source, request.term));
678
+ };
679
+ } else {
680
+ initSource.call(this);
681
+ }
682
+ },
683
+
684
+ _renderItem: function(ul, item) {
685
+ return jQuery('<li></li>')
686
+ .data('item.autocomplete', item)
687
+ .append(jQuery('<a></a>')[this.options.html ? 'html' : 'text'](item.label))
688
+ .appendTo(ul);
689
+ }
690
+ });
691
+
692
+ })({});
693
+
694
+
695
+ (function(exports) {
696
+
697
+
698
+
699
+ var get = SC.get;
700
+
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
+
711
+ select: function(event, ui) {
712
+ if (ui.item) {
713
+ this.executeAction(get(this, 'action'), ui.item.value);
714
+ event.target.value = '';
715
+ event.preventDefault();
716
+ }
717
+ }
718
+ });
719
+
720
+ })({});
721
+
722
+
723
+ (function(exports) {
724
+ // ==========================================================================
725
+ // Project: SproutCore JUI
726
+ // Copyright: ©2011 Paul Chavard
727
+ // License: Licensed under MIT license (see license.js)
728
+ // ==========================================================================
729
+
730
+
731
+
732
+ })({});