rasputin 0.10.3 → 0.10.4
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +7 -0
- data/lib/rasputin/version.rb +1 -1
- data/vendor/assets/javascripts/sproutcore.js +208 -129
- metadata +11 -11
data/README.md
CHANGED
@@ -62,7 +62,9 @@ In your javascript asset manifest (app/assets/javascripts/application.js) add th
|
|
62
62
|
|
63
63
|
And any of the following you want to include:
|
64
64
|
|
65
|
+
//= require sproutcore-datetime
|
65
66
|
//= require sproutcore-datastore
|
67
|
+
//= require sproutcore-utils
|
66
68
|
//= require sproutcore-statechart
|
67
69
|
//= require sproutcore-touch
|
68
70
|
//= require sproutcore-routing
|
@@ -77,6 +79,11 @@ In your stylesheet asset manifest (app/assets/stylesheets/application.css) add t
|
|
77
79
|
ChangeLog
|
78
80
|
----------
|
79
81
|
|
82
|
+
0.10.3
|
83
|
+
|
84
|
+
* update sproutcore to latest master
|
85
|
+
* update Handlebars compiler (thank's to @MichaelRykov)
|
86
|
+
|
80
87
|
0.10.1
|
81
88
|
|
82
89
|
* update with built in metamorph
|
data/lib/rasputin/version.rb
CHANGED
@@ -2057,6 +2057,17 @@ SC.meta = function meta(obj, writable) {
|
|
2057
2057
|
return ret;
|
2058
2058
|
};
|
2059
2059
|
|
2060
|
+
SC.getMeta = function getMeta(obj, property) {
|
2061
|
+
var meta = SC.meta(obj, false);
|
2062
|
+
return meta[property];
|
2063
|
+
};
|
2064
|
+
|
2065
|
+
SC.setMeta = function setMeta(obj, property, value) {
|
2066
|
+
var meta = SC.meta(obj, true);
|
2067
|
+
meta[property] = value;
|
2068
|
+
return value;
|
2069
|
+
};
|
2070
|
+
|
2060
2071
|
/**
|
2061
2072
|
@private
|
2062
2073
|
|
@@ -3772,7 +3783,7 @@ var timerMark; // used by timers...
|
|
3772
3783
|
var K = function() {};
|
3773
3784
|
var RunLoop = function(prev) {
|
3774
3785
|
var self;
|
3775
|
-
|
3786
|
+
|
3776
3787
|
if (this instanceof RunLoop) {
|
3777
3788
|
self = this;
|
3778
3789
|
} else {
|
@@ -3781,7 +3792,7 @@ var RunLoop = function(prev) {
|
|
3781
3792
|
|
3782
3793
|
self._prev = prev || null;
|
3783
3794
|
self.onceTimers = {};
|
3784
|
-
|
3795
|
+
|
3785
3796
|
return self;
|
3786
3797
|
}
|
3787
3798
|
|
@@ -3979,7 +3990,7 @@ function autorun() {
|
|
3979
3990
|
}
|
3980
3991
|
|
3981
3992
|
/**
|
3982
|
-
Begins a new RunLoop
|
3993
|
+
Begins a new RunLoop if necessary and schedules a timer to flush the
|
3983
3994
|
RunLoop at a later time. This method is used by parts of SproutCore to
|
3984
3995
|
ensure the RunLoop always finishes. You normally do not need to call this
|
3985
3996
|
method directly. Instead use SC.run().
|
@@ -4040,7 +4051,7 @@ function invokeLaterTimers() {
|
|
4040
4051
|
}
|
4041
4052
|
|
4042
4053
|
// schedule next timeout to fire...
|
4043
|
-
if (earliest>0) setTimeout(invokeLaterTimers, earliest-(+ new Date()));
|
4054
|
+
if (earliest>0) setTimeout(invokeLaterTimers, earliest-(+ new Date()));
|
4044
4055
|
}
|
4045
4056
|
|
4046
4057
|
/**
|
@@ -4082,7 +4093,7 @@ SC.run.later = function(target, method) {
|
|
4082
4093
|
args = slice.call(arguments);
|
4083
4094
|
wait = args.pop();
|
4084
4095
|
}
|
4085
|
-
|
4096
|
+
|
4086
4097
|
expires = (+ new Date())+wait;
|
4087
4098
|
timer = { target: target, method: method, expires: expires, args: args };
|
4088
4099
|
guid = SC.guidFor(timer);
|
@@ -5598,7 +5609,7 @@ var o_create = SC.platform.create;
|
|
5598
5609
|
function meta(obj, writable) {
|
5599
5610
|
var m = SC.meta(obj, writable!==false), ret = m.mixins;
|
5600
5611
|
if (writable===false) return ret || EMPTY_META;
|
5601
|
-
|
5612
|
+
|
5602
5613
|
if (!ret) {
|
5603
5614
|
ret = m.mixins = { __scproto__: obj };
|
5604
5615
|
} else if (ret.__scproto__ !== obj) {
|
@@ -5612,8 +5623,8 @@ function initMixin(mixin, args) {
|
|
5612
5623
|
if (args && args.length > 0) {
|
5613
5624
|
mixin.mixins = a_map.call(args, function(x) {
|
5614
5625
|
if (x instanceof Mixin) return x;
|
5615
|
-
|
5616
|
-
// Note: Manually setup a primitive mixin here. This is the only
|
5626
|
+
|
5627
|
+
// Note: Manually setup a primitive mixin here. This is the only
|
5617
5628
|
// way to actually get a primitive mixin. This way normal creation
|
5618
5629
|
// of mixins will give you combined mixins...
|
5619
5630
|
var mixin = new Mixin();
|
@@ -5622,7 +5633,7 @@ function initMixin(mixin, args) {
|
|
5622
5633
|
});
|
5623
5634
|
}
|
5624
5635
|
return mixin;
|
5625
|
-
}
|
5636
|
+
}
|
5626
5637
|
|
5627
5638
|
var NATIVES = [Boolean, Object, Number, Array, Date, String];
|
5628
5639
|
function isMethod(obj) {
|
@@ -5632,14 +5643,14 @@ function isMethod(obj) {
|
|
5632
5643
|
|
5633
5644
|
function mergeMixins(mixins, m, descs, values, base) {
|
5634
5645
|
var len = mixins.length, idx, mixin, guid, props, value, key, ovalue, concats;
|
5635
|
-
|
5646
|
+
|
5636
5647
|
function removeKeys(keyName) {
|
5637
5648
|
delete descs[keyName];
|
5638
5649
|
delete values[keyName];
|
5639
5650
|
}
|
5640
|
-
|
5651
|
+
|
5641
5652
|
for(idx=0;idx<len;idx++) {
|
5642
|
-
|
5653
|
+
|
5643
5654
|
mixin = mixins[idx];
|
5644
5655
|
if (!mixin) throw new Error('Null value found in SC.mixin()');
|
5645
5656
|
|
@@ -5647,13 +5658,13 @@ function mergeMixins(mixins, m, descs, values, base) {
|
|
5647
5658
|
guid = SC.guidFor(mixin);
|
5648
5659
|
if (m[guid]) continue;
|
5649
5660
|
m[guid] = mixin;
|
5650
|
-
props = mixin.properties;
|
5661
|
+
props = mixin.properties;
|
5651
5662
|
} else {
|
5652
5663
|
props = mixin; // apply anonymous mixin properties
|
5653
5664
|
}
|
5654
5665
|
|
5655
5666
|
if (props) {
|
5656
|
-
|
5667
|
+
|
5657
5668
|
// reset before adding each new mixin to pickup concats from previous
|
5658
5669
|
concats = values.concatenatedProperties || base.concatenatedProperties;
|
5659
5670
|
if (props.concatenatedProperties) {
|
@@ -5669,14 +5680,14 @@ function mergeMixins(mixins, m, descs, values, base) {
|
|
5669
5680
|
descs[key] = value;
|
5670
5681
|
values[key] = undefined;
|
5671
5682
|
} else {
|
5672
|
-
|
5683
|
+
|
5673
5684
|
// impl super if needed...
|
5674
5685
|
if (isMethod(value)) {
|
5675
5686
|
ovalue = (descs[key] === SC.SIMPLE_PROPERTY) && values[key];
|
5676
5687
|
if (!ovalue) ovalue = base[key];
|
5677
5688
|
if ('function' !== typeof ovalue) ovalue = null;
|
5678
5689
|
if (ovalue) {
|
5679
|
-
var o = value.__sc_observes__, ob = value.__sc_observesBefore__;
|
5690
|
+
var o = value.__sc_observes__, ob = value.__sc_observesBefore__;
|
5680
5691
|
value = SC.wrap(value, ovalue);
|
5681
5692
|
value.__sc_observes__ = o;
|
5682
5693
|
value.__sc_observesBefore__ = ob;
|
@@ -5685,7 +5696,7 @@ function mergeMixins(mixins, m, descs, values, base) {
|
|
5685
5696
|
var baseValue = values[key] || base[key];
|
5686
5697
|
value = baseValue ? baseValue.concat(value) : SC.makeArray(value);
|
5687
5698
|
}
|
5688
|
-
|
5699
|
+
|
5689
5700
|
descs[key] = SC.SIMPLE_PROPERTY;
|
5690
5701
|
values[key] = value;
|
5691
5702
|
}
|
@@ -5695,7 +5706,7 @@ function mergeMixins(mixins, m, descs, values, base) {
|
|
5695
5706
|
if (props.hasOwnProperty('toString')) {
|
5696
5707
|
base.toString = props.toString;
|
5697
5708
|
}
|
5698
|
-
|
5709
|
+
|
5699
5710
|
} else if (mixin.mixins) {
|
5700
5711
|
mergeMixins(mixin.mixins, m, descs, values, base);
|
5701
5712
|
if (mixin._without) mixin._without.forEach(removeKeys);
|
@@ -5729,9 +5740,9 @@ SC._mixinBindings = function(obj, key, value, m) {
|
|
5729
5740
|
function applyMixin(obj, mixins, partial) {
|
5730
5741
|
var descs = {}, values = {}, m = SC.meta(obj), req = m.required;
|
5731
5742
|
var key, willApply, didApply, value, desc;
|
5732
|
-
|
5743
|
+
|
5733
5744
|
var mixinBindings = SC._mixinBindings;
|
5734
|
-
|
5745
|
+
|
5735
5746
|
mergeMixins(mixins, meta(obj), descs, values, obj);
|
5736
5747
|
|
5737
5748
|
if (MixinDelegate.detect(obj)) {
|
@@ -5741,25 +5752,25 @@ function applyMixin(obj, mixins, partial) {
|
|
5741
5752
|
|
5742
5753
|
for(key in descs) {
|
5743
5754
|
if (!descs.hasOwnProperty(key)) continue;
|
5744
|
-
|
5755
|
+
|
5745
5756
|
desc = descs[key];
|
5746
5757
|
value = values[key];
|
5747
|
-
|
5758
|
+
|
5748
5759
|
if (desc === REQUIRED) {
|
5749
5760
|
if (!(key in obj)) {
|
5750
5761
|
if (!partial) throw new Error('Required property not defined: '+key);
|
5751
|
-
|
5762
|
+
|
5752
5763
|
// for partial applies add to hash of required keys
|
5753
5764
|
req = writableReq(obj);
|
5754
5765
|
req.__sc_count__++;
|
5755
5766
|
req[key] = true;
|
5756
5767
|
}
|
5757
|
-
|
5768
|
+
|
5758
5769
|
} else {
|
5759
|
-
|
5770
|
+
|
5760
5771
|
while (desc instanceof Alias) {
|
5761
|
-
|
5762
|
-
var altKey = desc.methodName;
|
5772
|
+
|
5773
|
+
var altKey = desc.methodName;
|
5763
5774
|
if (descs[altKey]) {
|
5764
5775
|
value = values[altKey];
|
5765
5776
|
desc = descs[altKey];
|
@@ -5771,15 +5782,15 @@ function applyMixin(obj, mixins, partial) {
|
|
5771
5782
|
desc = SC.SIMPLE_PROPERTY;
|
5772
5783
|
}
|
5773
5784
|
}
|
5774
|
-
|
5785
|
+
|
5775
5786
|
if (willApply) willApply.call(obj, key);
|
5776
|
-
|
5787
|
+
|
5777
5788
|
var observerPaths = getObserverPaths(value),
|
5778
5789
|
curObserverPaths = observerPaths && getObserverPaths(obj[key]),
|
5779
5790
|
beforeObserverPaths = getBeforeObserverPaths(value),
|
5780
5791
|
curBeforeObserverPaths = beforeObserverPaths && getBeforeObserverPaths(obj[key]),
|
5781
5792
|
len, idx;
|
5782
|
-
|
5793
|
+
|
5783
5794
|
if (curObserverPaths) {
|
5784
5795
|
len = curObserverPaths.length;
|
5785
5796
|
for(idx=0;idx<len;idx++) {
|
@@ -5796,9 +5807,9 @@ function applyMixin(obj, mixins, partial) {
|
|
5796
5807
|
|
5797
5808
|
// TODO: less hacky way for sproutcore-runtime to add bindings.
|
5798
5809
|
value = mixinBindings(obj, key, value, m);
|
5799
|
-
|
5810
|
+
|
5800
5811
|
defineProperty(obj, key, desc, value);
|
5801
|
-
|
5812
|
+
|
5802
5813
|
if (observerPaths) {
|
5803
5814
|
len = observerPaths.length;
|
5804
5815
|
for(idx=0;idx<len;idx++) {
|
@@ -5812,7 +5823,7 @@ function applyMixin(obj, mixins, partial) {
|
|
5812
5823
|
SC.addBeforeObserver(obj, beforeObserverPaths[idx], null, key);
|
5813
5824
|
}
|
5814
5825
|
}
|
5815
|
-
|
5826
|
+
|
5816
5827
|
if (req && req[key]) {
|
5817
5828
|
req = writableReq(obj);
|
5818
5829
|
req.__sc_count__--;
|
@@ -5823,7 +5834,7 @@ function applyMixin(obj, mixins, partial) {
|
|
5823
5834
|
|
5824
5835
|
}
|
5825
5836
|
}
|
5826
|
-
|
5837
|
+
|
5827
5838
|
// Make sure no required attrs remain
|
5828
5839
|
if (!partial && req && req.__sc_count__>0) {
|
5829
5840
|
var keys = [];
|
@@ -5858,16 +5869,16 @@ Mixin.create = function() {
|
|
5858
5869
|
};
|
5859
5870
|
|
5860
5871
|
Mixin.prototype.reopen = function() {
|
5861
|
-
|
5872
|
+
|
5862
5873
|
var mixin, tmp;
|
5863
|
-
|
5874
|
+
|
5864
5875
|
if (this.properties) {
|
5865
5876
|
mixin = Mixin.create();
|
5866
5877
|
mixin.properties = this.properties;
|
5867
5878
|
delete this.properties;
|
5868
5879
|
this.mixins = [mixin];
|
5869
5880
|
}
|
5870
|
-
|
5881
|
+
|
5871
5882
|
var len = arguments.length, mixins = this.mixins, idx;
|
5872
5883
|
|
5873
5884
|
for(idx=0;idx<len;idx++) {
|
@@ -5880,7 +5891,7 @@ Mixin.prototype.reopen = function() {
|
|
5880
5891
|
mixins.push(tmp);
|
5881
5892
|
}
|
5882
5893
|
}
|
5883
|
-
|
5894
|
+
|
5884
5895
|
return this;
|
5885
5896
|
};
|
5886
5897
|
|
@@ -5902,7 +5913,7 @@ function _detect(curMixin, targetMixin, seen) {
|
|
5902
5913
|
|
5903
5914
|
if (seen[guid]) return false;
|
5904
5915
|
seen[guid] = true;
|
5905
|
-
|
5916
|
+
|
5906
5917
|
if (curMixin === targetMixin) return true;
|
5907
5918
|
var mixins = curMixin.mixins, loc = mixins ? mixins.length : 0;
|
5908
5919
|
while(--loc >= 0) {
|
@@ -5926,7 +5937,7 @@ Mixin.prototype.without = function() {
|
|
5926
5937
|
function _keys(ret, mixin, seen) {
|
5927
5938
|
if (seen[SC.guidFor(mixin)]) return;
|
5928
5939
|
seen[SC.guidFor(mixin)] = true;
|
5929
|
-
|
5940
|
+
|
5930
5941
|
if (mixin.properties) {
|
5931
5942
|
var props = mixin.properties;
|
5932
5943
|
for(var key in props) {
|
@@ -5969,6 +5980,24 @@ function processNames(paths, root, seen) {
|
|
5969
5980
|
paths.length = idx; // cut out last item
|
5970
5981
|
}
|
5971
5982
|
|
5983
|
+
function findNamespaces() {
|
5984
|
+
var Namespace = SC.Namespace, obj;
|
5985
|
+
|
5986
|
+
if (Namespace.PROCESSED) { return; }
|
5987
|
+
|
5988
|
+
for (var prop in window) {
|
5989
|
+
if (!window.hasOwnProperty(prop)) { continue; }
|
5990
|
+
|
5991
|
+
obj = window[prop];
|
5992
|
+
|
5993
|
+
if (obj instanceof Namespace) {
|
5994
|
+
obj[NAME_KEY] = prop;
|
5995
|
+
}
|
5996
|
+
}
|
5997
|
+
}
|
5998
|
+
|
5999
|
+
SC.identifyNamespaces = findNamespaces;
|
6000
|
+
|
5972
6001
|
superClassString = function(mixin) {
|
5973
6002
|
var superclass = mixin.superclass;
|
5974
6003
|
if (superclass) {
|
@@ -5980,9 +6009,24 @@ superClassString = function(mixin) {
|
|
5980
6009
|
}
|
5981
6010
|
|
5982
6011
|
classToString = function() {
|
5983
|
-
|
5984
|
-
|
5985
|
-
|
6012
|
+
var Namespace = SC.Namespace, namespace;
|
6013
|
+
|
6014
|
+
// TODO: Namespace should really be in Metal
|
6015
|
+
if (Namespace) {
|
6016
|
+
if (!this[NAME_KEY] && !classToString.processed) {
|
6017
|
+
if (!Namespace.PROCESSED) {
|
6018
|
+
findNamespaces();
|
6019
|
+
Namespace.PROCESSED = true;
|
6020
|
+
}
|
6021
|
+
|
6022
|
+
classToString.processed = true;
|
6023
|
+
|
6024
|
+
var namespaces = Namespace.NAMESPACES;
|
6025
|
+
for (var i=0, l=namespaces.length; i<l; i++) {
|
6026
|
+
namespace = namespaces[i];
|
6027
|
+
processNames([namespace.toString()], namespace, {});
|
6028
|
+
}
|
6029
|
+
}
|
5986
6030
|
}
|
5987
6031
|
|
5988
6032
|
if (this[NAME_KEY]) {
|
@@ -5995,8 +6039,6 @@ classToString = function() {
|
|
5995
6039
|
return "(unknown mixin)";
|
5996
6040
|
}
|
5997
6041
|
}
|
5998
|
-
|
5999
|
-
return this[NAME_KEY] || "(unknown mixin)";
|
6000
6042
|
};
|
6001
6043
|
|
6002
6044
|
Mixin.prototype.toString = classToString;
|
@@ -6008,7 +6050,7 @@ Mixin.mixins = function(obj) {
|
|
6008
6050
|
for(key in mixins) {
|
6009
6051
|
if (META_SKIP[key]) continue;
|
6010
6052
|
mixin = mixins[key];
|
6011
|
-
|
6053
|
+
|
6012
6054
|
// skip primitive mixins since these are always anonymous
|
6013
6055
|
if (!mixin.properties) ret.push(mixins[key]);
|
6014
6056
|
}
|
@@ -6037,7 +6079,7 @@ MixinDelegate = Mixin.create({
|
|
6037
6079
|
|
6038
6080
|
willApplyProperty: SC.required(),
|
6039
6081
|
didApplyProperty: SC.required()
|
6040
|
-
|
6082
|
+
|
6041
6083
|
});
|
6042
6084
|
|
6043
6085
|
SC.MixinDelegate = MixinDelegate;
|
@@ -6045,7 +6087,7 @@ SC.MixinDelegate = MixinDelegate;
|
|
6045
6087
|
|
6046
6088
|
// ..........................................................
|
6047
6089
|
// OBSERVER HELPER
|
6048
|
-
//
|
6090
|
+
//
|
6049
6091
|
|
6050
6092
|
SC.observer = function(func) {
|
6051
6093
|
var paths = Array.prototype.slice.call(arguments, 1);
|
@@ -6662,13 +6704,11 @@ SC.Enumerable = SC.Mixin.create( /** @lends SC.Enumerable */ {
|
|
6662
6704
|
@returns {SC.Enumerable}
|
6663
6705
|
*/
|
6664
6706
|
uniq: function() {
|
6665
|
-
var ret = []
|
6707
|
+
var ret = [];
|
6666
6708
|
this.forEach(function(k){
|
6667
|
-
if (ret.indexOf(k)<0) ret
|
6668
|
-
else hasDups = true;
|
6709
|
+
if (ret.indexOf(k)<0) ret.push(k);
|
6669
6710
|
});
|
6670
|
-
|
6671
|
-
return hasDups ? ret : this ;
|
6711
|
+
return ret;
|
6672
6712
|
},
|
6673
6713
|
|
6674
6714
|
/**
|
@@ -8091,7 +8131,7 @@ if (typeof console === 'undefined') {
|
|
8091
8131
|
|
8092
8132
|
In general we recommend leaving this option set to true since it rarely
|
8093
8133
|
conflicts with other code. If you need to turn it off however, you can
|
8094
|
-
define an ENV.
|
8134
|
+
define an ENV.EXTEND_PROTOTYPES config to disable it.
|
8095
8135
|
*/
|
8096
8136
|
SC.EXTEND_PROTOTYPES = (SC.ENV.EXTEND_PROTOTYPES !== false);
|
8097
8137
|
|
@@ -9259,10 +9299,8 @@ SC.ArrayProxy = SC.Object.extend(SC.MutableArray, {
|
|
9259
9299
|
this.arrayContentDidChange(idx, removedCnt, addedCnt);
|
9260
9300
|
},
|
9261
9301
|
|
9262
|
-
init: function(
|
9302
|
+
init: function() {
|
9263
9303
|
this._super();
|
9264
|
-
// TODO: Why is init getting called with a parameter? --TD
|
9265
|
-
if (content) set(this, 'content', content);
|
9266
9304
|
this.contentDidChange();
|
9267
9305
|
}
|
9268
9306
|
|
@@ -9544,7 +9582,7 @@ SC.TargetActionSupport = SC.Mixin.create({
|
|
9544
9582
|
target: null,
|
9545
9583
|
action: null,
|
9546
9584
|
|
9547
|
-
targetObject: function() {
|
9585
|
+
targetObject: SC.computed(function() {
|
9548
9586
|
var target = get(this, 'target');
|
9549
9587
|
|
9550
9588
|
if (SC.typeOf(target) === "string") {
|
@@ -9552,7 +9590,7 @@ SC.TargetActionSupport = SC.Mixin.create({
|
|
9552
9590
|
} else {
|
9553
9591
|
return target;
|
9554
9592
|
}
|
9555
|
-
}.property('target').cacheable(),
|
9593
|
+
}).property('target').cacheable(),
|
9556
9594
|
|
9557
9595
|
triggerAction: function() {
|
9558
9596
|
var action = get(this, 'action'),
|
@@ -9591,18 +9629,38 @@ SC.TargetActionSupport = SC.Mixin.create({
|
|
9591
9629
|
// ==========================================================================
|
9592
9630
|
/**
|
9593
9631
|
@private
|
9594
|
-
A Namespace is an object usually used to contain other objects or methods
|
9632
|
+
A Namespace is an object usually used to contain other objects or methods
|
9595
9633
|
such as an application or framework. Create a namespace anytime you want
|
9596
9634
|
to define one of these new containers.
|
9597
|
-
|
9635
|
+
|
9598
9636
|
# Example Usage
|
9599
|
-
|
9637
|
+
|
9600
9638
|
MyFramework = SC.Namespace.create({
|
9601
9639
|
VERSION: '1.0.0'
|
9602
9640
|
});
|
9603
|
-
|
9641
|
+
|
9604
9642
|
*/
|
9605
|
-
SC.Namespace = SC.Object.extend(
|
9643
|
+
SC.Namespace = SC.Object.extend({
|
9644
|
+
init: function() {
|
9645
|
+
SC.Namespace.NAMESPACES.push(this);
|
9646
|
+
SC.Namespace.PROCESSED = false;
|
9647
|
+
},
|
9648
|
+
|
9649
|
+
toString: function() {
|
9650
|
+
SC.identifyNamespaces();
|
9651
|
+
return this[SC.GUID_KEY+'_name'];
|
9652
|
+
},
|
9653
|
+
|
9654
|
+
destroy: function() {
|
9655
|
+
var namespaces = SC.Namespace.NAMESPACES;
|
9656
|
+
window[this.toString()] = undefined;
|
9657
|
+
namespaces.splice(namespaces.indexOf(this), 1);
|
9658
|
+
this._super();
|
9659
|
+
}
|
9660
|
+
});
|
9661
|
+
|
9662
|
+
SC.Namespace.NAMESPACES = [];
|
9663
|
+
SC.Namespace.PROCESSED = true;
|
9606
9664
|
|
9607
9665
|
})({});
|
9608
9666
|
|
@@ -9664,10 +9722,10 @@ var EachArray = SC.Object.extend(SC.Array, {
|
|
9664
9722
|
return item && get(item, this._keyName);
|
9665
9723
|
},
|
9666
9724
|
|
9667
|
-
length: function() {
|
9725
|
+
length: SC.computed(function() {
|
9668
9726
|
var content = this._content;
|
9669
9727
|
return content ? get(content, 'length') : 0;
|
9670
|
-
}.property('[]').cacheable()
|
9728
|
+
}).property('[]').cacheable()
|
9671
9729
|
|
9672
9730
|
});
|
9673
9731
|
|
@@ -10112,10 +10170,10 @@ SC._RenderBuffer = SC.Object.extend(
|
|
10112
10170
|
init: function() {
|
10113
10171
|
this._super();
|
10114
10172
|
|
10115
|
-
set(this ,'elementClasses', []);
|
10173
|
+
set(this ,'elementClasses', SC.NativeArray.apply([]));
|
10116
10174
|
set(this, 'elementAttributes', {});
|
10117
10175
|
set(this, 'elementStyle', {});
|
10118
|
-
set(this, 'childBuffers', []);
|
10176
|
+
set(this, 'childBuffers', SC.NativeArray.apply([]));
|
10119
10177
|
set(this, 'elements', {});
|
10120
10178
|
},
|
10121
10179
|
|
@@ -10649,7 +10707,7 @@ SC.Application = SC.Namespace.extend(
|
|
10649
10707
|
// Add a new named queue for rendering views that happens
|
10650
10708
|
// after bindings have synced.
|
10651
10709
|
var queues = SC.run.queues;
|
10652
|
-
queues.
|
10710
|
+
queues.splice(jQuery.inArray('actions', queues)+1, 0, 'render');
|
10653
10711
|
|
10654
10712
|
})({});
|
10655
10713
|
|
@@ -10678,11 +10736,11 @@ var getPath = SC.getPath, meta = SC.meta, fmt = SC.String.fmt;
|
|
10678
10736
|
var childViewsProperty = SC.computed(function() {
|
10679
10737
|
var childViews = get(this, '_childViews');
|
10680
10738
|
|
10681
|
-
var ret = [];
|
10739
|
+
var ret = SC.NativeArray.apply([]);
|
10682
10740
|
|
10683
10741
|
childViews.forEach(function(view) {
|
10684
10742
|
if (view.isVirtual) {
|
10685
|
-
ret
|
10743
|
+
ret.pushObjects(get(view, 'childViews'));
|
10686
10744
|
} else {
|
10687
10745
|
ret.push(view);
|
10688
10746
|
}
|
@@ -10755,7 +10813,7 @@ SC.View = SC.Object.extend(
|
|
10755
10813
|
@field
|
10756
10814
|
@type Function
|
10757
10815
|
*/
|
10758
|
-
template: function(key, value) {
|
10816
|
+
template: SC.computed(function(key, value) {
|
10759
10817
|
if (value !== undefined) { return value; }
|
10760
10818
|
|
10761
10819
|
var templateName = get(this, 'templateName'), template;
|
@@ -10770,13 +10828,13 @@ SC.View = SC.Object.extend(
|
|
10770
10828
|
}
|
10771
10829
|
|
10772
10830
|
if (!template) {
|
10773
|
-
throw new SC.Error('%@ - Unable to find template "%@".'
|
10831
|
+
throw new SC.Error(fmt('%@ - Unable to find template "%@".', this, templateName));
|
10774
10832
|
}
|
10775
10833
|
}
|
10776
10834
|
|
10777
10835
|
// return the template, or undefined if no template was found
|
10778
10836
|
return template || get(this, 'defaultTemplate');
|
10779
|
-
}.property('templateName').cacheable(),
|
10837
|
+
}).property('templateName').cacheable(),
|
10780
10838
|
|
10781
10839
|
/**
|
10782
10840
|
The object from which templates should access properties.
|
@@ -10789,9 +10847,9 @@ SC.View = SC.Object.extend(
|
|
10789
10847
|
|
10790
10848
|
@type Object
|
10791
10849
|
*/
|
10792
|
-
templateContext: function(key, value) {
|
10850
|
+
templateContext: SC.computed(function(key, value) {
|
10793
10851
|
return value !== undefined ? value : this;
|
10794
|
-
}
|
10852
|
+
}).cacheable(),
|
10795
10853
|
|
10796
10854
|
/**
|
10797
10855
|
If the view is currently inserted into the DOM of a parent view, this
|
@@ -10802,7 +10860,7 @@ SC.View = SC.Object.extend(
|
|
10802
10860
|
*/
|
10803
10861
|
_parentView: null,
|
10804
10862
|
|
10805
|
-
parentView: function() {
|
10863
|
+
parentView: SC.computed(function() {
|
10806
10864
|
var parent = get(this, '_parentView');
|
10807
10865
|
|
10808
10866
|
if (parent && parent.isVirtual) {
|
@@ -10810,7 +10868,7 @@ SC.View = SC.Object.extend(
|
|
10810
10868
|
} else {
|
10811
10869
|
return parent;
|
10812
10870
|
}
|
10813
|
-
}.property('_parentView'),
|
10871
|
+
}).property('_parentView'),
|
10814
10872
|
|
10815
10873
|
/**
|
10816
10874
|
If false, the view will appear hidden in DOM.
|
@@ -10830,7 +10888,7 @@ SC.View = SC.Object.extend(
|
|
10830
10888
|
*/
|
10831
10889
|
childViews: childViewsProperty,
|
10832
10890
|
|
10833
|
-
_childViews: [],
|
10891
|
+
_childViews: SC.NativeArray.apply([]),
|
10834
10892
|
|
10835
10893
|
/**
|
10836
10894
|
Return the nearest ancestor that is an instance of the provided
|
@@ -10884,9 +10942,9 @@ SC.View = SC.Object.extend(
|
|
10884
10942
|
|
10885
10943
|
@returns SC.CollectionView
|
10886
10944
|
*/
|
10887
|
-
collectionView: function() {
|
10945
|
+
collectionView: SC.computed(function() {
|
10888
10946
|
return this.nearestInstanceOf(SC.CollectionView);
|
10889
|
-
}
|
10947
|
+
}).cacheable(),
|
10890
10948
|
|
10891
10949
|
/**
|
10892
10950
|
Return the nearest ancestor that is a direct child of
|
@@ -10894,9 +10952,9 @@ SC.View = SC.Object.extend(
|
|
10894
10952
|
|
10895
10953
|
@returns SC.View
|
10896
10954
|
*/
|
10897
|
-
itemView: function() {
|
10955
|
+
itemView: SC.computed(function() {
|
10898
10956
|
return this.nearestChildOf(SC.CollectionView);
|
10899
|
-
}
|
10957
|
+
}).cacheable(),
|
10900
10958
|
|
10901
10959
|
/**
|
10902
10960
|
Return the nearest ancestor that has the property
|
@@ -10904,9 +10962,9 @@ SC.View = SC.Object.extend(
|
|
10904
10962
|
|
10905
10963
|
@returns SC.View
|
10906
10964
|
*/
|
10907
|
-
contentView: function() {
|
10965
|
+
contentView: SC.computed(function() {
|
10908
10966
|
return this.nearestWithProperty('content');
|
10909
|
-
}
|
10967
|
+
}).cacheable(),
|
10910
10968
|
|
10911
10969
|
/**
|
10912
10970
|
@private
|
@@ -10914,13 +10972,13 @@ SC.View = SC.Object.extend(
|
|
10914
10972
|
When the parent view changes, recursively invalidate
|
10915
10973
|
collectionView, itemView, and contentView
|
10916
10974
|
*/
|
10917
|
-
_parentViewDidChange: function() {
|
10975
|
+
_parentViewDidChange: SC.observer(function() {
|
10918
10976
|
this.invokeRecursively(function(view) {
|
10919
10977
|
view.propertyDidChange('collectionView');
|
10920
10978
|
view.propertyDidChange('itemView');
|
10921
10979
|
view.propertyDidChange('contentView');
|
10922
10980
|
});
|
10923
|
-
}
|
10981
|
+
}, '_parentView'),
|
10924
10982
|
|
10925
10983
|
/**
|
10926
10984
|
Called on your view when it should push strings of HTML into a
|
@@ -11149,7 +11207,8 @@ SC.View = SC.Object.extend(
|
|
11149
11207
|
// Normalize property path to be suitable for use
|
11150
11208
|
// as a class name. For exaple, content.foo.barBaz
|
11151
11209
|
// becomes bar-baz.
|
11152
|
-
|
11210
|
+
parts = property.split('.');
|
11211
|
+
return SC.String.dasherize(parts[parts.length-1]);
|
11153
11212
|
|
11154
11213
|
// If the value is not NO, undefined, or null, return the current
|
11155
11214
|
// value of the property.
|
@@ -11173,13 +11232,13 @@ SC.View = SC.Object.extend(
|
|
11173
11232
|
@field
|
11174
11233
|
@type DOMElement
|
11175
11234
|
*/
|
11176
|
-
element: function(key, value) {
|
11235
|
+
element: SC.computed(function(key, value) {
|
11177
11236
|
if (value !== undefined) {
|
11178
11237
|
return this.invokeForState('setElement', value);
|
11179
11238
|
} else {
|
11180
11239
|
return this.invokeForState('getElement');
|
11181
11240
|
}
|
11182
|
-
}.property('_parentView').cacheable(),
|
11241
|
+
}).property('_parentView').cacheable(),
|
11183
11242
|
|
11184
11243
|
/**
|
11185
11244
|
Returns a jQuery object for this view's element. If you pass in a selector
|
@@ -11311,9 +11370,9 @@ SC.View = SC.Object.extend(
|
|
11311
11370
|
@type String
|
11312
11371
|
@readOnly
|
11313
11372
|
*/
|
11314
|
-
elementId: function(key, value) {
|
11373
|
+
elementId: SC.computed(function(key, value) {
|
11315
11374
|
return value !== undefined ? value : SC.guidFor(this);
|
11316
|
-
}
|
11375
|
+
}).cacheable(),
|
11317
11376
|
|
11318
11377
|
/**
|
11319
11378
|
Attempts to discover the element in the parent element. The default
|
@@ -11363,9 +11422,7 @@ SC.View = SC.Object.extend(
|
|
11363
11422
|
},
|
11364
11423
|
|
11365
11424
|
/**
|
11366
|
-
Called when
|
11367
|
-
into the DOM. Override this function to do any set up that requires an
|
11368
|
-
element.
|
11425
|
+
Called when a view is going to insert an element into the DOM.
|
11369
11426
|
*/
|
11370
11427
|
willInsertElement: SC.K,
|
11371
11428
|
|
@@ -11403,10 +11460,15 @@ SC.View = SC.Object.extend(
|
|
11403
11460
|
|
11404
11461
|
Invokes the receiver's willInsertElement() method if it exists and then
|
11405
11462
|
invokes the same on all child views.
|
11463
|
+
|
11464
|
+
NOTE: In some cases this was called when the element existed. This no longer
|
11465
|
+
works so we let people know. We can remove this warning code later.
|
11406
11466
|
*/
|
11407
|
-
_notifyWillInsertElement: function() {
|
11467
|
+
_notifyWillInsertElement: function(fromPreRender) {
|
11408
11468
|
this.invokeRecursively(function(view) {
|
11469
|
+
if (fromPreRender) { view._willInsertElementAccessUnsupported = true; }
|
11409
11470
|
view.willInsertElement();
|
11471
|
+
view._willInsertElementAccessUnsupported = false;
|
11410
11472
|
});
|
11411
11473
|
},
|
11412
11474
|
|
@@ -11462,11 +11524,11 @@ SC.View = SC.Object.extend(
|
|
11462
11524
|
},
|
11463
11525
|
|
11464
11526
|
/** @private (nodoc) */
|
11465
|
-
_elementWillChange: function() {
|
11527
|
+
_elementWillChange: SC.beforeObserver(function() {
|
11466
11528
|
this.forEachChildView(function(view) {
|
11467
11529
|
SC.propertyWillChange(view, 'element');
|
11468
11530
|
});
|
11469
|
-
}
|
11531
|
+
}, 'element'),
|
11470
11532
|
|
11471
11533
|
/**
|
11472
11534
|
@private
|
@@ -11477,11 +11539,11 @@ SC.View = SC.Object.extend(
|
|
11477
11539
|
|
11478
11540
|
@observes element
|
11479
11541
|
*/
|
11480
|
-
_elementDidChange: function() {
|
11542
|
+
_elementDidChange: SC.observer(function() {
|
11481
11543
|
this.forEachChildView(function(view) {
|
11482
11544
|
SC.propertyDidChange(view, 'element');
|
11483
11545
|
});
|
11484
|
-
}
|
11546
|
+
}, 'element'),
|
11485
11547
|
|
11486
11548
|
/**
|
11487
11549
|
Called when the parentView property has changed.
|
@@ -11703,15 +11765,15 @@ SC.View = SC.Object.extend(
|
|
11703
11765
|
// SC.RootResponder to dispatch incoming events.
|
11704
11766
|
SC.View.views[get(this, 'elementId')] = this;
|
11705
11767
|
|
11706
|
-
var childViews = get(this, '_childViews').slice();
|
11768
|
+
var childViews = SC.NativeArray.apply(get(this, '_childViews').slice());
|
11707
11769
|
// setup child views. be sure to clone the child views array first
|
11708
11770
|
set(this, '_childViews', childViews);
|
11709
11771
|
|
11710
11772
|
|
11711
|
-
this.classNameBindings = get(this, 'classNameBindings').slice();
|
11712
|
-
this.classNames = get(this, 'classNames').slice();
|
11773
|
+
this.classNameBindings = SC.NativeArray.apply(get(this, 'classNameBindings').slice());
|
11774
|
+
this.classNames = SC.NativeArray.apply(get(this, 'classNames').slice());
|
11713
11775
|
|
11714
|
-
|
11776
|
+
set(this, 'domManager', this.domManagerClass.create({ view: this }));
|
11715
11777
|
|
11716
11778
|
meta(this)["SC.View"] = {};
|
11717
11779
|
},
|
@@ -11826,6 +11888,10 @@ SC.View = SC.Object.extend(
|
|
11826
11888
|
createChildView: function(view, attrs) {
|
11827
11889
|
if (SC.View.detect(view)) {
|
11828
11890
|
view = view.create(attrs || {}, { _parentView: this });
|
11891
|
+
|
11892
|
+
if (attrs && attrs.viewName) {
|
11893
|
+
set(this, attrs.viewName, view);
|
11894
|
+
}
|
11829
11895
|
} else {
|
11830
11896
|
sc_assert('must pass instance of View', view instanceof SC.View);
|
11831
11897
|
set(view, '_parentView', this);
|
@@ -11839,9 +11905,9 @@ SC.View = SC.Object.extend(
|
|
11839
11905
|
When the view's `isVisible` property changes, toggle the visibility
|
11840
11906
|
element of the actual DOM element.
|
11841
11907
|
*/
|
11842
|
-
_isVisibleDidChange: function() {
|
11908
|
+
_isVisibleDidChange: SC.observer(function() {
|
11843
11909
|
this.$().toggle(get(this, 'isVisible'));
|
11844
|
-
}
|
11910
|
+
}, 'isVisible'),
|
11845
11911
|
|
11846
11912
|
clearBuffer: function() {
|
11847
11913
|
this.invokeRecursively(function(view) {
|
@@ -11954,7 +12020,7 @@ SC.View.childViewsProperty = childViewsProperty;
|
|
11954
12020
|
var get = SC.get, set = SC.set;
|
11955
12021
|
|
11956
12022
|
SC.View.states = {
|
11957
|
-
|
12023
|
+
_default: {
|
11958
12024
|
// appendChild is only legal while rendering the buffer.
|
11959
12025
|
appendChild: function() {
|
11960
12026
|
throw "You can't use appendChild outside of the rendering process";
|
@@ -11985,23 +12051,35 @@ SC.View.reopen({
|
|
11985
12051
|
// License: Licensed under MIT license (see license.js)
|
11986
12052
|
// ==========================================================================
|
11987
12053
|
SC.View.states.preRender = {
|
11988
|
-
parentState: SC.View.states
|
12054
|
+
parentState: SC.View.states._default,
|
11989
12055
|
|
11990
12056
|
// a view leaves the preRender state once its element has been
|
11991
12057
|
// created (createElement).
|
11992
12058
|
insertElement: function(view, fn) {
|
11993
|
-
|
11994
|
-
// invoking the willInsertElement event.
|
12059
|
+
view._notifyWillInsertElement(true);
|
11995
12060
|
view.createElement();
|
11996
|
-
|
11997
12061
|
// after createElement, the view will be in the hasElement state.
|
11998
|
-
|
11999
|
-
view._notifyWillInsertElement();
|
12000
12062
|
fn.call(view);
|
12001
12063
|
view.transitionTo('inDOM');
|
12002
12064
|
view._notifyDidInsertElement();
|
12003
12065
|
},
|
12004
12066
|
|
12067
|
+
// This exists for the removal warning, remove later
|
12068
|
+
$: function(view){
|
12069
|
+
if (view._willInsertElementAccessUnsupported) {
|
12070
|
+
console.error("Getting element from willInsertElement is unreliable and no longer supported.");
|
12071
|
+
}
|
12072
|
+
return SC.$();
|
12073
|
+
},
|
12074
|
+
|
12075
|
+
// This exists for the removal warning, remove later
|
12076
|
+
getElement: function(view){
|
12077
|
+
if (view._willInsertElementAccessUnsupported) {
|
12078
|
+
console.error("Getting element from willInsertElement is unreliable and no longer supported.");
|
12079
|
+
}
|
12080
|
+
return null;
|
12081
|
+
},
|
12082
|
+
|
12005
12083
|
setElement: function(view, value) {
|
12006
12084
|
view.beginPropertyChanges();
|
12007
12085
|
view.invalidateRecursively('element');
|
@@ -12029,7 +12107,7 @@ SC.View.states.preRender = {
|
|
12029
12107
|
var get = SC.get, set = SC.set, meta = SC.meta;
|
12030
12108
|
|
12031
12109
|
SC.View.states.inBuffer = {
|
12032
|
-
parentState: SC.View.states
|
12110
|
+
parentState: SC.View.states._default,
|
12033
12111
|
|
12034
12112
|
$: function(view, sel) {
|
12035
12113
|
// if we don't have an element yet, someone calling this.$() is
|
@@ -12106,7 +12184,7 @@ SC.View.states.inBuffer = {
|
|
12106
12184
|
var get = SC.get, set = SC.set, meta = SC.meta;
|
12107
12185
|
|
12108
12186
|
SC.View.states.hasElement = {
|
12109
|
-
parentState: SC.View.states
|
12187
|
+
parentState: SC.View.states._default,
|
12110
12188
|
|
12111
12189
|
$: function(view, sel) {
|
12112
12190
|
var elem = get(view, 'element');
|
@@ -12174,7 +12252,7 @@ SC.View.states.inDOM = {
|
|
12174
12252
|
var destroyedError = "You can't call %@ on a destroyed view", fmt = SC.String.fmt;
|
12175
12253
|
|
12176
12254
|
SC.View.states.destroyed = {
|
12177
|
-
parentState: SC.View.states
|
12255
|
+
parentState: SC.View.states._default,
|
12178
12256
|
|
12179
12257
|
appendChild: function() {
|
12180
12258
|
throw fmt(destroyedError, ['appendChild']);
|
@@ -12469,13 +12547,13 @@ SC.CollectionView = SC.ContainerView.extend(
|
|
12469
12547
|
return ret;
|
12470
12548
|
},
|
12471
12549
|
|
12472
|
-
_contentWillChange: function() {
|
12550
|
+
_contentWillChange: SC.beforeObserver(function() {
|
12473
12551
|
var content = this.get('content');
|
12474
12552
|
|
12475
12553
|
if (content) { content.removeArrayObserver(this); }
|
12476
12554
|
var len = content ? get(content, 'length') : 0;
|
12477
12555
|
this.arrayWillChange(content, 0, len);
|
12478
|
-
}
|
12556
|
+
}, 'content'),
|
12479
12557
|
|
12480
12558
|
/**
|
12481
12559
|
@private
|
@@ -12485,7 +12563,7 @@ SC.CollectionView = SC.ContainerView.extend(
|
|
12485
12563
|
asynchronously, to allow the element to be created before
|
12486
12564
|
bindings have synchronized and vice versa.
|
12487
12565
|
*/
|
12488
|
-
_contentDidChange: function() {
|
12566
|
+
_contentDidChange: SC.observer(function() {
|
12489
12567
|
var content = get(this, 'content');
|
12490
12568
|
|
12491
12569
|
if (content) {
|
@@ -12495,7 +12573,7 @@ SC.CollectionView = SC.ContainerView.extend(
|
|
12495
12573
|
|
12496
12574
|
var len = content ? get(content, 'length') : 0;
|
12497
12575
|
this.arrayDidChange(content, 0, null, len);
|
12498
|
-
}
|
12576
|
+
}, 'content'),
|
12499
12577
|
|
12500
12578
|
destroy: function() {
|
12501
12579
|
var content = get(this, 'content');
|
@@ -13307,13 +13385,13 @@ SC.TextArea = SC.View.extend(SC.TextSupport, {
|
|
13307
13385
|
/**
|
13308
13386
|
@private
|
13309
13387
|
*/
|
13310
|
-
|
13388
|
+
didInsertElement: function() {
|
13311
13389
|
this._updateElementValue();
|
13312
13390
|
},
|
13313
13391
|
|
13314
|
-
_updateElementValue: function() {
|
13392
|
+
_updateElementValue: SC.observer(function() {
|
13315
13393
|
this.$().val(get(this, 'value'));
|
13316
|
-
}
|
13394
|
+
}, 'value')
|
13317
13395
|
|
13318
13396
|
});
|
13319
13397
|
|
@@ -13884,7 +13962,8 @@ SC.Handlebars.bindClasses = function(context, classBindings, view, id) {
|
|
13884
13962
|
// Normalize property path to be suitable for use
|
13885
13963
|
// as a class name. For exaple, content.foo.barBaz
|
13886
13964
|
// becomes bar-baz.
|
13887
|
-
|
13965
|
+
var parts = property.split('.');
|
13966
|
+
return SC.String.dasherize(parts[parts.length-1]);
|
13888
13967
|
|
13889
13968
|
// If the value is not NO, undefined, or null, return the current
|
13890
13969
|
// value of the property.
|
@@ -14104,7 +14183,7 @@ SC.Handlebars.registerHelper('view', function(path, options) {
|
|
14104
14183
|
/*globals Handlebars sc_assert */
|
14105
14184
|
|
14106
14185
|
// TODO: Don't require all of this module
|
14107
|
-
var get = SC.get;
|
14186
|
+
var get = SC.get, fmt = SC.String.fmt;
|
14108
14187
|
|
14109
14188
|
/**
|
14110
14189
|
@name Handlebars.helpers.collection
|
@@ -14130,7 +14209,7 @@ SC.Handlebars.registerHelper('collection', function(path, options) {
|
|
14130
14209
|
// Otherwise, just default to the standard class.
|
14131
14210
|
var collectionClass;
|
14132
14211
|
collectionClass = path ? SC.getPath(this, path) : SC.CollectionView;
|
14133
|
-
sc_assert("%@ #collection: Could not find %@"
|
14212
|
+
sc_assert(fmt("%@ #collection: Could not find %@", data.view, path), !!collectionClass);
|
14134
14213
|
|
14135
14214
|
var hash = options.hash, itemHash = {}, match;
|
14136
14215
|
|
@@ -14139,7 +14218,7 @@ SC.Handlebars.registerHelper('collection', function(path, options) {
|
|
14139
14218
|
var collectionPrototype = get(collectionClass, 'proto');
|
14140
14219
|
delete hash.itemViewClass;
|
14141
14220
|
itemViewClass = itemViewPath ? SC.getPath(collectionPrototype, itemViewPath) : collectionPrototype.itemViewClass;
|
14142
|
-
sc_assert("%@ #collection: Could not find %@"
|
14221
|
+
sc_assert(fmt("%@ #collection: Could not find %@", data.view, itemViewPath), !!itemViewClass);
|
14143
14222
|
|
14144
14223
|
// Go through options passed to the {{collection}} helper and extract options
|
14145
14224
|
// that configure item views instead of the collection itself.
|
@@ -14172,9 +14251,9 @@ SC.Handlebars.registerHelper('collection', function(path, options) {
|
|
14172
14251
|
}
|
14173
14252
|
|
14174
14253
|
if (hash.preserveContext) {
|
14175
|
-
itemHash.templateContext = function() {
|
14254
|
+
itemHash.templateContext = SC.computed(function() {
|
14176
14255
|
return get(this, 'content');
|
14177
|
-
}.property('content');
|
14256
|
+
}).property('content');
|
14178
14257
|
delete hash.preserveContext;
|
14179
14258
|
}
|
14180
14259
|
|
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.
|
4
|
+
version: 0.10.4
|
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-
|
12
|
+
date: 2011-11-26 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: railties
|
16
|
-
requirement: &
|
16
|
+
requirement: &70289493748480 !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: *
|
24
|
+
version_requirements: *70289493748480
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: actionpack
|
27
|
-
requirement: &
|
27
|
+
requirement: &70289493747800 !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: *
|
35
|
+
version_requirements: *70289493747800
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: sprockets
|
38
|
-
requirement: &
|
38
|
+
requirement: &70289493747280 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 2.0.0
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70289493747280
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: jquery-rails
|
49
|
-
requirement: &
|
49
|
+
requirement: &70289493746600 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,7 +54,7 @@ dependencies:
|
|
54
54
|
version: '1.0'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70289493746600
|
58
58
|
description: SproutCore 2.0 for the Rails asset pipeline.
|
59
59
|
email:
|
60
60
|
- paul@chavard.net
|
@@ -105,7 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
105
105
|
version: '0'
|
106
106
|
requirements: []
|
107
107
|
rubyforge_project: rasputin
|
108
|
-
rubygems_version: 1.8.
|
108
|
+
rubygems_version: 1.8.10
|
109
109
|
signing_key:
|
110
110
|
specification_version: 3
|
111
111
|
summary: SproutCore 2.0 adapter for the Rails asset pipeline.
|