UNPKG

tns-core-modules

Version:

Telerik NativeScript Core Modules

191 lines (190 loc) 6.9 kB
var observable = require("data/observable"); var types = require("utils/types"); var ChangeType = (function () { function ChangeType() { } ChangeType.Add = "add"; ChangeType.Delete = "delete"; ChangeType.Update = "update"; ChangeType.Splice = "splice"; return ChangeType; }()); exports.ChangeType = ChangeType; var CHANGE = "change"; var ObservableArray = (function (_super) { __extends(ObservableArray, _super); function ObservableArray() { _super.call(this); if (arguments.length === 1 && Array.isArray(arguments[0])) { this._array = arguments[0].slice(); } else { this._array = Array.apply(null, arguments); } this._addArgs = { eventName: CHANGE, object: this, action: ChangeType.Add, index: null, removed: new Array(), addedCount: 1 }; this._deleteArgs = { eventName: CHANGE, object: this, action: ChangeType.Delete, index: null, removed: null, addedCount: 0 }; } ObservableArray.prototype.getItem = function (index) { return this._array[index]; }; ObservableArray.prototype.setItem = function (index, value) { var oldValue = this._array[index]; this._array[index] = value; this.notify({ eventName: CHANGE, object: this, action: ChangeType.Update, index: index, removed: [oldValue], addedCount: 1 }); }; Object.defineProperty(ObservableArray.prototype, "length", { get: function () { return this._array.length; }, set: function (value) { if (types.isNumber(value) && this._array && this._array.length !== value) { this.splice(value, this._array.length - value); } }, enumerable: true, configurable: true }); ObservableArray.prototype.toString = function () { return this._array.toString(); }; ObservableArray.prototype.toLocaleString = function () { return this._array.toLocaleString(); }; ObservableArray.prototype.concat = function () { this._addArgs.index = this._array.length; var result = this._array.concat.apply(this._array, arguments); return result; }; ObservableArray.prototype.join = function (separator) { return this._array.join(separator); }; ObservableArray.prototype.pop = function () { this._deleteArgs.index = this._array.length - 1; var result = this._array.pop(); this._deleteArgs.removed = [result]; this.notify(this._deleteArgs); this._notifyLengthChange(); return result; }; ObservableArray.prototype.push = function () { this._addArgs.index = this._array.length; if (arguments.length === 1 && Array.isArray(arguments[0])) { var source = arguments[0]; for (var i = 0, l = source.length; i < l; i++) { this._array.push(source[i]); } } else { this._array.push.apply(this._array, arguments); } this._addArgs.addedCount = this._array.length - this._addArgs.index; this.notify(this._addArgs); this._notifyLengthChange(); return this._array.length; }; ObservableArray.prototype._notifyLengthChange = function () { var lengthChangedData = this._createPropertyChangeData("length", this._array.length); this.notify(lengthChangedData); }; ObservableArray.prototype.reverse = function () { return this._array.reverse(); }; ObservableArray.prototype.shift = function () { var result = this._array.shift(); this._deleteArgs.index = 0; this._deleteArgs.removed = [result]; this.notify(this._deleteArgs); this._notifyLengthChange(); return result; }; ObservableArray.prototype.slice = function (start, end) { return this._array.slice(start, end); }; ObservableArray.prototype.sort = function (compareFn) { return this._array.sort(compareFn); }; ObservableArray.prototype.splice = function (start, deleteCount) { var length = this._array.length; var result = this._array.splice.apply(this._array, arguments); this.notify({ eventName: CHANGE, object: this, action: ChangeType.Splice, index: start, removed: result, addedCount: this._array.length > length ? this._array.length - length : 0 }); if (this._array.length !== length) { this._notifyLengthChange(); } return result; }; ObservableArray.prototype.unshift = function () { var length = this._array.length; var result = this._array.unshift.apply(this._array, arguments); this._addArgs.index = 0; this._addArgs.addedCount = result - length; this.notify(this._addArgs); this._notifyLengthChange(); return result; }; ObservableArray.prototype.indexOf = function (searchElement, fromIndex) { var index = fromIndex ? fromIndex : 0; for (var i = index, l = this._array.length; i < l; i++) { if (this._array[i] === searchElement) { return i; } } return -1; }; ObservableArray.prototype.lastIndexOf = function (searchElement, fromIndex) { var index = fromIndex ? fromIndex : this._array.length - 1; for (var i = index; i >= 0; i--) { if (this._array[i] === searchElement) { return i; } } return -1; }; ObservableArray.prototype.every = function (callbackfn, thisArg) { return this._array.every(callbackfn, thisArg); }; ObservableArray.prototype.some = function (callbackfn, thisArg) { return this._array.some(callbackfn, thisArg); }; ObservableArray.prototype.forEach = function (callbackfn, thisArg) { this._array.forEach(callbackfn, thisArg); }; ObservableArray.prototype.map = function (callbackfn, thisArg) { return this._array.map(callbackfn, thisArg); }; ObservableArray.prototype.filter = function (callbackfn, thisArg) { return this._array.filter(callbackfn, thisArg); }; ObservableArray.prototype.reduce = function (callbackfn, initialValue) { return this._array.reduce(callbackfn, initialValue); }; ObservableArray.prototype.reduceRight = function (callbackfn, initialValue) { return this._array.reduceRight(callbackfn, initialValue); }; ObservableArray.changeEvent = CHANGE; return ObservableArray; }(observable.Observable)); exports.ObservableArray = ObservableArray;