travis-web/assets/scripts/lib/ext/ember/computed.js
Piotr Sarnacki 36db80d45f Add Ember.computed.limit and use it in LimitedArray
arrayComputed was added recently in order to make array computations
easier. Using arrayComputed we can improve LimitedArray which now uses
an isolated multipurpose Ember.computed.limit.
2014-02-18 10:00:33 +01:00

27 lines
875 B
JavaScript

Ember.computed.limit = function(dependentKey, limitKey) {
var options = {
addedItem: function(array, item, changeMeta, instanceMeta) {
var limit = Ember.get(this, limitKey);
if (changeMeta.index < limit) {
array.insertAt(changeMeta.index, item);
if (Ember.get(array, "length") > limit) {
array.popObject();
}
}
return array;
},
removedItem: function(array, item, changeMeta, instanceMeta) {
var limit = Ember.get(this, limitKey);
if (changeMeta.index < limit && changeMeta.index < Ember.get(array, 'length')) {
array.removeAt(changeMeta.index, 1);
var toPush = changeMeta.arrayChanged.objectAt(limit);
if (toPush) {
array.pushObject(toPush);
}
}
return array;
}
};
return Ember.arrayComputed(dependentKey, limitKey, options);
};