rasputin 0.10.2 → 0.10.3

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.
@@ -9537,6 +9537,43 @@ SC.Comparable = SC.Mixin.create( /** @scope SC.Comparable.prototype */{
9537
9537
  })({});
9538
9538
 
9539
9539
 
9540
+ (function(exports) {
9541
+ var get = SC.get, set = SC.set;
9542
+
9543
+ SC.TargetActionSupport = SC.Mixin.create({
9544
+ target: null,
9545
+ action: null,
9546
+
9547
+ targetObject: function() {
9548
+ var target = get(this, 'target');
9549
+
9550
+ if (SC.typeOf(target) === "string") {
9551
+ return SC.getPath(this, target);
9552
+ } else {
9553
+ return target;
9554
+ }
9555
+ }.property('target').cacheable(),
9556
+
9557
+ triggerAction: function() {
9558
+ var action = get(this, 'action'),
9559
+ target = get(this, 'targetObject');
9560
+
9561
+ if (target && action) {
9562
+ if (typeof target.send === 'function') {
9563
+ target.send(action, this);
9564
+ } else {
9565
+ if (typeof action === 'string') {
9566
+ action = target[action];
9567
+ }
9568
+ action.call(target, this);
9569
+ }
9570
+ }
9571
+ }
9572
+ });
9573
+
9574
+ })({});
9575
+
9576
+
9540
9577
  (function(exports) {
9541
9578
  // ==========================================================================
9542
9579
  // Project: SproutCore Runtime
@@ -11064,11 +11101,11 @@ SC.View = SC.Object.extend(
11064
11101
 
11065
11102
  type = typeof attributeValue;
11066
11103
 
11067
- if ((type === 'string' || type === 'number') && attributeValue !== currentValue) {
11104
+ if ((type === 'string' || (type === 'number' && !isNaN(attributeValue))) && attributeValue !== currentValue) {
11068
11105
  elem.attr(attribute, attributeValue);
11069
11106
  } else if (attributeValue && type === 'boolean') {
11070
11107
  elem.attr(attribute, attribute);
11071
- } else if (attributeValue === NO) {
11108
+ } else if (!attributeValue) {
11072
11109
  elem.removeAttr(attribute);
11073
11110
  }
11074
11111
  };
@@ -11948,7 +11985,7 @@ SC.View.reopen({
11948
11985
  // License: Licensed under MIT license (see license.js)
11949
11986
  // ==========================================================================
11950
11987
  SC.View.states.preRender = {
11951
- parentState: SC.View.states.default,
11988
+ parentState: SC.View.states['default'],
11952
11989
 
11953
11990
  // a view leaves the preRender state once its element has been
11954
11991
  // created (createElement).
@@ -11992,7 +12029,7 @@ SC.View.states.preRender = {
11992
12029
  var get = SC.get, set = SC.set, meta = SC.meta;
11993
12030
 
11994
12031
  SC.View.states.inBuffer = {
11995
- parentState: SC.View.states.default,
12032
+ parentState: SC.View.states['default'],
11996
12033
 
11997
12034
  $: function(view, sel) {
11998
12035
  // if we don't have an element yet, someone calling this.$() is
@@ -12069,7 +12106,7 @@ SC.View.states.inBuffer = {
12069
12106
  var get = SC.get, set = SC.set, meta = SC.meta;
12070
12107
 
12071
12108
  SC.View.states.hasElement = {
12072
- parentState: SC.View.states.default,
12109
+ parentState: SC.View.states['default'],
12073
12110
 
12074
12111
  $: function(view, sel) {
12075
12112
  var elem = get(view, 'element');
@@ -12137,7 +12174,7 @@ SC.View.states.inDOM = {
12137
12174
  var destroyedError = "You can't call %@ on a destroyed view", fmt = SC.String.fmt;
12138
12175
 
12139
12176
  SC.View.states.destroyed = {
12140
- parentState: SC.View.states.default,
12177
+ parentState: SC.View.states['default'],
12141
12178
 
12142
12179
  appendChild: function() {
12143
12180
  throw fmt(destroyedError, ['appendChild']);
@@ -12452,7 +12489,7 @@ SC.CollectionView = SC.ContainerView.extend(
12452
12489
  var content = get(this, 'content');
12453
12490
 
12454
12491
  if (content) {
12455
- sc_assert(fmt("an ArrayController's content must implement SC.Array. You passed %@", [content]), content.addArrayObserver != null);
12492
+ sc_assert(fmt("an SC.CollectionView's content must implement SC.Array. You passed %@", [content]), content.addArrayObserver != null);
12456
12493
  content.addArrayObserver(this);
12457
12494
  }
12458
12495
 
@@ -13102,21 +13139,17 @@ SC.Checkbox = SC.View.extend({
13102
13139
 
13103
13140
  var get = SC.get, set = SC.set;
13104
13141
 
13105
- SC.TextField = SC.View.extend(
13106
- /** @scope SC.TextField.prototype */ {
13142
+ SC.TextSupport = SC.Mixin.create({
13107
13143
 
13108
- classNames: ['sc-text-field'],
13109
-
13110
- insertNewline: SC.K,
13111
- cancel: SC.K,
13112
-
13113
- tagName: "input",
13114
- attributeBindings: ['type', 'placeholder', 'value', 'disabled'],
13115
- type: "text",
13116
13144
  value: "",
13145
+
13146
+ attributeBindings: ['placeholder', 'disabled'],
13117
13147
  placeholder: null,
13118
13148
  disabled: false,
13119
13149
 
13150
+ insertNewline: SC.K,
13151
+ cancel: SC.K,
13152
+
13120
13153
  focusOut: function(event) {
13121
13154
  this._elementValueDidChange();
13122
13155
  return false;
@@ -13136,28 +13169,24 @@ SC.TextField = SC.View.extend(
13136
13169
  @private
13137
13170
  */
13138
13171
  interpretKeyEvents: function(event) {
13139
- var map = SC.TextField.KEY_EVENTS;
13172
+ var map = SC.TextSupport.KEY_EVENTS;
13140
13173
  var method = map[event.keyCode];
13141
13174
 
13175
+ this._elementValueDidChange();
13142
13176
  if (method) { return this[method](event); }
13143
- else { this._elementValueDidChange(); }
13144
13177
  },
13145
13178
 
13146
13179
  _elementValueDidChange: function() {
13147
- set(this, 'value', this.$().val());
13148
- },
13149
-
13150
- _updateElementValue: function() {
13151
- this.$().val(get(this, 'value'));
13180
+ set(this, 'value', this.$().val() || null);
13152
13181
  }
13182
+
13153
13183
  });
13154
13184
 
13155
- SC.TextField.KEY_EVENTS = {
13185
+ SC.TextSupport.KEY_EVENTS = {
13156
13186
  13: 'insertNewline',
13157
13187
  27: 'cancel'
13158
13188
  };
13159
13189
 
13160
-
13161
13190
  })({});
13162
13191
 
13163
13192
 
@@ -13167,10 +13196,40 @@ SC.TextField.KEY_EVENTS = {
13167
13196
  // Copyright: ©2011 Strobe Inc. and contributors.
13168
13197
  // License: Licensed under MIT license (see license.js)
13169
13198
  // ==========================================================================
13199
+ /** @class */
13200
+
13201
+ var get = SC.get, set = SC.set;
13202
+
13203
+ SC.TextField = SC.View.extend(SC.TextSupport,
13204
+ /** @scope SC.TextField.prototype */ {
13205
+
13206
+ classNames: ['sc-text-field'],
13207
+
13208
+ tagName: "input",
13209
+ attributeBindings: ['type', 'value'],
13210
+ type: "text",
13211
+
13212
+ /**
13213
+ @private
13214
+ */
13215
+ _updateElementValue: function() {
13216
+ this.$().val(get(this, 'value'));
13217
+ }
13218
+
13219
+ });
13220
+
13221
+ })({});
13222
+
13170
13223
 
13224
+ (function(exports) {
13225
+ // ==========================================================================
13226
+ // Project: SproutCore Handlebar Views
13227
+ // Copyright: ©2011 Strobe Inc. and contributors.
13228
+ // License: Licensed under MIT license (see license.js)
13229
+ // ==========================================================================
13171
13230
  var get = SC.get, set = SC.set;
13172
13231
 
13173
- SC.Button = SC.View.extend({
13232
+ SC.Button = SC.View.extend(SC.TargetActionSupport, {
13174
13233
  classNames: ['sc-button'],
13175
13234
  classNameBindings: ['isActive'],
13176
13235
 
@@ -13179,15 +13238,6 @@ SC.Button = SC.View.extend({
13179
13238
  type: 'button',
13180
13239
  disabled: false,
13181
13240
 
13182
- targetObject: function() {
13183
- var target = get(this, 'target');
13184
-
13185
- if (SC.typeOf(target) === "string") {
13186
- return SC.getPath(this, target);
13187
- } else {
13188
- return target;
13189
- }
13190
- }.property('target').cacheable(),
13191
13241
 
13192
13242
  mouseDown: function() {
13193
13243
  set(this, 'isActive', true);
@@ -13211,16 +13261,10 @@ SC.Button = SC.View.extend({
13211
13261
 
13212
13262
  mouseUp: function(event) {
13213
13263
  if (get(this, 'isActive')) {
13214
- var action = get(this, 'action'),
13215
- target = get(this, 'targetObject');
13216
-
13217
- if (target && action) {
13218
- if (typeof action === 'string') {
13219
- action = target[action];
13220
- }
13221
- action.call(target, this);
13222
- }
13223
13264
 
13265
+ // Actually invoke the button's target and action.
13266
+ // This method comes from the SC.TargetActionSupport mixin.
13267
+ this.triggerAction();
13224
13268
  set(this, 'isActive', false);
13225
13269
  }
13226
13270
 
@@ -13254,33 +13298,11 @@ SC.Button = SC.View.extend({
13254
13298
 
13255
13299
  var get = SC.get, set = SC.set;
13256
13300
 
13257
- SC.TextArea = SC.View.extend({
13301
+ SC.TextArea = SC.View.extend(SC.TextSupport, {
13258
13302
 
13259
13303
  classNames: ['sc-text-area'],
13260
13304
 
13261
13305
  tagName: "textarea",
13262
- value: "",
13263
- attributeBindings: ['placeholder', 'disabled'],
13264
- placeholder: null,
13265
- disabled: false,
13266
-
13267
- insertNewline: SC.K,
13268
- cancel: SC.K,
13269
-
13270
- focusOut: function(event) {
13271
- this._elementValueDidChange();
13272
- return false;
13273
- },
13274
-
13275
- change: function(event) {
13276
- this._elementValueDidChange();
13277
- return false;
13278
- },
13279
-
13280
- keyUp: function(event) {
13281
- this.interpretKeyEvents(event);
13282
- return false;
13283
- },
13284
13306
 
13285
13307
  /**
13286
13308
  @private
@@ -13289,27 +13311,11 @@ SC.TextArea = SC.View.extend({
13289
13311
  this._updateElementValue();
13290
13312
  },
13291
13313
 
13292
- interpretKeyEvents: function(event) {
13293
- var map = SC.TextArea.KEY_EVENTS;
13294
- var method = map[event.keyCode];
13295
-
13296
- this._elementValueDidChange();
13297
- if (method) { return this[method](event); }
13298
- },
13299
-
13300
- _elementValueDidChange: function() {
13301
- set(this, 'value', this.$().val() || null);
13302
- },
13303
-
13304
13314
  _updateElementValue: function() {
13305
13315
  this.$().val(get(this, 'value'));
13306
13316
  }.observes('value')
13307
- });
13308
13317
 
13309
- SC.TextArea.KEY_EVENTS = {
13310
- 13: 'insertNewline',
13311
- 27: 'cancel'
13312
- };
13318
+ });
13313
13319
 
13314
13320
  })({});
13315
13321
 
@@ -13389,6 +13395,7 @@ SC.Metamorph = SC.Mixin.create({
13389
13395
  var buffer = view.renderToBuffer();
13390
13396
 
13391
13397
  SC.run.schedule('render', this, function() {
13398
+ if (get(view, 'isDestroyed')) { return; }
13392
13399
  view._notifyWillInsertElement();
13393
13400
  morph.replaceWith(buffer.string());
13394
13401
  view.transitionTo('inDOM');
@@ -13557,13 +13564,6 @@ SC._BindableSpanView = SC.View.extend(SC.Metamorph,
13557
13564
  }
13558
13565
 
13559
13566
  return this._super(buffer);
13560
- },
13561
-
13562
- destroy: function() {
13563
- var removeObserver = get(this, 'removeObserver');
13564
- removeObserver();
13565
-
13566
- this._super();
13567
13567
  }
13568
13568
  });
13569
13569
 
@@ -13606,23 +13606,27 @@ var get = SC.get, getPath = SC.getPath, set = SC.set, fmt = SC.String.fmt;
13606
13606
 
13607
13607
  view.appendChild(bindView);
13608
13608
 
13609
- var observer = function() {
13610
- SC.run.once(function() {
13611
- // Double check since sometimes the view gets destroyed after this observer is already queued
13612
- if (!get(bindView, 'isDestroyed')) { bindView.rerender(); }
13613
- });
13609
+ var observer, invoker;
13610
+
13611
+ observer = function(){
13612
+ // Double check since sometimes the view gets destroyed after this observer is already queued
13613
+ if (!get(bindView, 'isDestroyed')) { bindView.rerender(); }
13614
13614
  };
13615
13615
 
13616
- set(bindView, 'removeObserver', function() {
13617
- SC.removeObserver(ctx, property, observer);
13618
- });
13616
+ invoker = function() {
13617
+ SC.run.once(observer);
13618
+ };
13619
13619
 
13620
13620
  // Observes the given property on the context and
13621
13621
  // tells the SC._BindableSpan to re-render. If property
13622
13622
  // is an empty string, we are printing the current context
13623
13623
  // object ({{this}}) so updating it is not our responsibility.
13624
13624
  if (property !== '') {
13625
- SC.addObserver(ctx, property, observer);
13625
+ set(bindView, 'removeObserver', function() {
13626
+ SC.removeObserver(ctx, property, invoker);
13627
+ });
13628
+
13629
+ SC.addObserver(ctx, property, invoker);
13626
13630
  }
13627
13631
  } else {
13628
13632
  // The object is not observable, so just render it out and
@@ -13756,7 +13760,7 @@ SC.Handlebars.registerHelper('bindAttr', function(options) {
13756
13760
  // Generate a unique id for this element. This will be added as a
13757
13761
  // data attribute to the element so it can be looked up when
13758
13762
  // the bound property changes.
13759
- var dataId = jQuery.uuid++;
13763
+ var dataId = ++jQuery.uuid;
13760
13764
 
13761
13765
  // Handle classes differently, as we can bind multiple classes
13762
13766
  var classBindings = attrs['class'];
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rasputin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.2
4
+ version: 0.10.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-11-02 00:00:00.000000000 Z
12
+ date: 2011-11-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: railties
16
- requirement: &70338105728980 !ruby/object:Gem::Requirement
16
+ requirement: &70095015952600 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 3.1.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70338105728980
24
+ version_requirements: *70095015952600
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: actionpack
27
- requirement: &70338105727020 !ruby/object:Gem::Requirement
27
+ requirement: &70095015950600 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 3.1.0
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70338105727020
35
+ version_requirements: *70095015950600
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: sprockets
38
- requirement: &70338105725060 !ruby/object:Gem::Requirement
38
+ requirement: &70095015949940 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,7 +43,18 @@ dependencies:
43
43
  version: 2.0.0
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70338105725060
46
+ version_requirements: *70095015949940
47
+ - !ruby/object:Gem::Dependency
48
+ name: jquery-rails
49
+ requirement: &70095015965180 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '1.0'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *70095015965180
47
58
  description: SproutCore 2.0 for the Rails asset pipeline.
48
59
  email:
49
60
  - paul@chavard.net
@@ -66,6 +77,7 @@ files:
66
77
  - vendor/assets/javascripts/TransformJS.js
67
78
  - vendor/assets/javascripts/modernizr.js
68
79
  - vendor/assets/javascripts/sproutcore-datastore.js
80
+ - vendor/assets/javascripts/sproutcore-datetime.js
69
81
  - vendor/assets/javascripts/sproutcore-i18n.js
70
82
  - vendor/assets/javascripts/sproutcore-routing.js
71
83
  - vendor/assets/javascripts/sproutcore-statechart.js