UNPKG

angular2

Version:

Angular 2 - a web framework for modern web apps

513 lines (512 loc) 17.4 kB
"use strict"; Object.defineProperties(module.exports, { IterableChangesFactory: {get: function() { return IterableChangesFactory; }}, IterableChanges: {get: function() { return IterableChanges; }}, CollectionChangeRecord: {get: function() { return CollectionChangeRecord; }}, __esModule: {value: true} }); var $__angular2_47_src_47_facade_47_collection__, $__angular2_47_src_47_facade_47_lang__, $__pipe__; var $__0 = ($__angular2_47_src_47_facade_47_collection__ = require("angular2/src/facade/collection"), $__angular2_47_src_47_facade_47_collection__ && $__angular2_47_src_47_facade_47_collection__.__esModule && $__angular2_47_src_47_facade_47_collection__ || {default: $__angular2_47_src_47_facade_47_collection__}), isListLikeIterable = $__0.isListLikeIterable, iterateListLike = $__0.iterateListLike, ListWrapper = $__0.ListWrapper, MapWrapper = $__0.MapWrapper; var $__1 = ($__angular2_47_src_47_facade_47_lang__ = require("angular2/src/facade/lang"), $__angular2_47_src_47_facade_47_lang__ && $__angular2_47_src_47_facade_47_lang__.__esModule && $__angular2_47_src_47_facade_47_lang__ || {default: $__angular2_47_src_47_facade_47_lang__}), int = $__1.int, isBlank = $__1.isBlank, isPresent = $__1.isPresent, stringify = $__1.stringify, getMapKey = $__1.getMapKey, looseIdentical = $__1.looseIdentical; var $__2 = ($__pipe__ = require("./pipe"), $__pipe__ && $__pipe__.__esModule && $__pipe__ || {default: $__pipe__}), NO_CHANGE = $__2.NO_CHANGE, Pipe = $__2.Pipe; var IterableChangesFactory = function IterableChangesFactory() { ; }; ($traceurRuntime.createClass)(IterableChangesFactory, { supports: function(obj) { return IterableChanges.supportsObj(obj); }, create: function(cdRef) { return new IterableChanges(); } }, {}); var IterableChanges = function IterableChanges() { $traceurRuntime.superConstructor($IterableChanges).call(this); this._collection = null; this._length = null; this._linkedRecords = null; this._unlinkedRecords = null; this._previousItHead = null; this._itHead = null; this._itTail = null; this._additionsHead = null; this._additionsTail = null; this._movesHead = null; this._movesTail = null; this._removalsHead = null; this._removalsTail = null; }; var $IterableChanges = IterableChanges; ($traceurRuntime.createClass)(IterableChanges, { supports: function(obj) { return $IterableChanges.supportsObj(obj); }, get collection() { return this._collection; }, get length() { return this._length; }, forEachItem: function(fn) { var record; for (record = this._itHead; record !== null; record = record._next) { fn(record); } }, forEachPreviousItem: function(fn) { var record; for (record = this._previousItHead; record !== null; record = record._nextPrevious) { fn(record); } }, forEachAddedItem: function(fn) { var record; for (record = this._additionsHead; record !== null; record = record._nextAdded) { fn(record); } }, forEachMovedItem: function(fn) { var record; for (record = this._movesHead; record !== null; record = record._nextMoved) { fn(record); } }, forEachRemovedItem: function(fn) { var record; for (record = this._removalsHead; record !== null; record = record._nextRemoved) { fn(record); } }, transform: function(collection) { if (this.check(collection)) { return this; } else { return NO_CHANGE; } }, check: function(collection) { var $__3 = this; this._reset(); var record = this._itHead; var mayBeDirty = false; var index; var item; if (ListWrapper.isList(collection)) { var list = collection; this._length = collection.length; for (index = 0; index < this._length; index++) { item = list[index]; if (record === null || !looseIdentical(record.item, item)) { record = this._mismatch(record, item, index); mayBeDirty = true; } else if (mayBeDirty) { record = this._verifyReinsertion(record, item, index); } record = record._next; } } else { index = 0; iterateListLike(collection, (function(item) { if (record === null || !looseIdentical(record.item, item)) { record = $__3._mismatch(record, item, index); mayBeDirty = true; } else if (mayBeDirty) { record = $__3._verifyReinsertion(record, item, index); } record = record._next; index++; })); this._length = index; } this._truncate(record); this._collection = collection; return this.isDirty; }, get isDirty() { return this._additionsHead !== null || this._movesHead !== null || this._removalsHead !== null; }, _reset: function() { if (this.isDirty) { var record; var nextRecord; for (record = this._previousItHead = this._itHead; record !== null; record = record._next) { record._nextPrevious = record._next; } for (record = this._additionsHead; record !== null; record = record._nextAdded) { record.previousIndex = record.currentIndex; } this._additionsHead = this._additionsTail = null; for (record = this._movesHead; record !== null; record = nextRecord) { record.previousIndex = record.currentIndex; nextRecord = record._nextMoved; } this._movesHead = this._movesTail = null; this._removalsHead = this._removalsTail = null; } }, _mismatch: function(record, item, index) { var previousRecord; if (record === null) { previousRecord = this._itTail; } else { previousRecord = record._prev; this._remove(record); } record = this._linkedRecords === null ? null : this._linkedRecords.get(item, index); if (record !== null) { this._moveAfter(record, previousRecord, index); } else { record = this._unlinkedRecords === null ? null : this._unlinkedRecords.get(item); if (record !== null) { this._reinsertAfter(record, previousRecord, index); } else { record = this._addAfter(new CollectionChangeRecord(item), previousRecord, index); } } return record; }, _verifyReinsertion: function(record, item, index) { var reinsertRecord = this._unlinkedRecords === null ? null : this._unlinkedRecords.get(item); if (reinsertRecord !== null) { record = this._reinsertAfter(reinsertRecord, record._prev, index); } else if (record.currentIndex != index) { record.currentIndex = index; this._addToMoves(record, index); } return record; }, _truncate: function(record) { while (record !== null) { var nextRecord = record._next; this._addToRemovals(this._unlink(record)); record = nextRecord; } if (this._unlinkedRecords !== null) { this._unlinkedRecords.clear(); } if (this._additionsTail !== null) { this._additionsTail._nextAdded = null; } if (this._movesTail !== null) { this._movesTail._nextMoved = null; } if (this._itTail !== null) { this._itTail._next = null; } if (this._removalsTail !== null) { this._removalsTail._nextRemoved = null; } }, _reinsertAfter: function(record, prevRecord, index) { if (this._unlinkedRecords !== null) { this._unlinkedRecords.remove(record); } var prev = record._prevRemoved; var next = record._nextRemoved; if (prev === null) { this._removalsHead = next; } else { prev._nextRemoved = next; } if (next === null) { this._removalsTail = prev; } else { next._prevRemoved = prev; } this._insertAfter(record, prevRecord, index); this._addToMoves(record, index); return record; }, _moveAfter: function(record, prevRecord, index) { this._unlink(record); this._insertAfter(record, prevRecord, index); this._addToMoves(record, index); return record; }, _addAfter: function(record, prevRecord, index) { this._insertAfter(record, prevRecord, index); if (this._additionsTail === null) { this._additionsTail = this._additionsHead = record; } else { this._additionsTail = this._additionsTail._nextAdded = record; } return record; }, _insertAfter: function(record, prevRecord, index) { var next = prevRecord === null ? this._itHead : prevRecord._next; record._next = next; record._prev = prevRecord; if (next === null) { this._itTail = record; } else { next._prev = record; } if (prevRecord === null) { this._itHead = record; } else { prevRecord._next = record; } if (this._linkedRecords === null) { this._linkedRecords = new _DuplicateMap(); } this._linkedRecords.put(record); record.currentIndex = index; return record; }, _remove: function(record) { return this._addToRemovals(this._unlink(record)); }, _unlink: function(record) { if (this._linkedRecords !== null) { this._linkedRecords.remove(record); } var prev = record._prev; var next = record._next; if (prev === null) { this._itHead = next; } else { prev._next = next; } if (next === null) { this._itTail = prev; } else { next._prev = prev; } return record; }, _addToMoves: function(record, toIndex) { if (record.previousIndex === toIndex) { return record; } if (this._movesTail === null) { this._movesTail = this._movesHead = record; } else { this._movesTail = this._movesTail._nextMoved = record; } return record; }, _addToRemovals: function(record) { if (this._unlinkedRecords === null) { this._unlinkedRecords = new _DuplicateMap(); } this._unlinkedRecords.put(record); record.currentIndex = null; record._nextRemoved = null; if (this._removalsTail === null) { this._removalsTail = this._removalsHead = record; record._prevRemoved = null; } else { record._prevRemoved = this._removalsTail; this._removalsTail = this._removalsTail._nextRemoved = record; } return record; }, toString: function() { var record; var list = []; for (record = this._itHead; record !== null; record = record._next) { ListWrapper.push(list, record); } var previous = []; for (record = this._previousItHead; record !== null; record = record._nextPrevious) { ListWrapper.push(previous, record); } var additions = []; for (record = this._additionsHead; record !== null; record = record._nextAdded) { ListWrapper.push(additions, record); } var moves = []; for (record = this._movesHead; record !== null; record = record._nextMoved) { ListWrapper.push(moves, record); } var removals = []; for (record = this._removalsHead; record !== null; record = record._nextRemoved) { ListWrapper.push(removals, record); } return "collection: " + list.join(', ') + "\n" + "previous: " + previous.join(', ') + "\n" + "additions: " + additions.join(', ') + "\n" + "moves: " + moves.join(', ') + "\n" + "removals: " + removals.join(', ') + "\n"; } }, {supportsObj: function(obj) { return isListLikeIterable(obj); }}, Pipe); Object.defineProperty(IterableChanges.prototype.forEachItem, "parameters", {get: function() { return [[Function]]; }}); Object.defineProperty(IterableChanges.prototype.forEachPreviousItem, "parameters", {get: function() { return [[Function]]; }}); Object.defineProperty(IterableChanges.prototype.forEachAddedItem, "parameters", {get: function() { return [[Function]]; }}); Object.defineProperty(IterableChanges.prototype.forEachMovedItem, "parameters", {get: function() { return [[Function]]; }}); Object.defineProperty(IterableChanges.prototype.forEachRemovedItem, "parameters", {get: function() { return [[Function]]; }}); Object.defineProperty(IterableChanges.prototype._mismatch, "parameters", {get: function() { return [[CollectionChangeRecord], [], [int]]; }}); Object.defineProperty(IterableChanges.prototype._verifyReinsertion, "parameters", {get: function() { return [[CollectionChangeRecord], [], [int]]; }}); Object.defineProperty(IterableChanges.prototype._truncate, "parameters", {get: function() { return [[CollectionChangeRecord]]; }}); Object.defineProperty(IterableChanges.prototype._reinsertAfter, "parameters", {get: function() { return [[CollectionChangeRecord], [CollectionChangeRecord], [int]]; }}); Object.defineProperty(IterableChanges.prototype._moveAfter, "parameters", {get: function() { return [[CollectionChangeRecord], [CollectionChangeRecord], [int]]; }}); Object.defineProperty(IterableChanges.prototype._addAfter, "parameters", {get: function() { return [[CollectionChangeRecord], [CollectionChangeRecord], [int]]; }}); Object.defineProperty(IterableChanges.prototype._insertAfter, "parameters", {get: function() { return [[CollectionChangeRecord], [CollectionChangeRecord], [int]]; }}); Object.defineProperty(IterableChanges.prototype._remove, "parameters", {get: function() { return [[CollectionChangeRecord]]; }}); Object.defineProperty(IterableChanges.prototype._unlink, "parameters", {get: function() { return [[CollectionChangeRecord]]; }}); Object.defineProperty(IterableChanges.prototype._addToMoves, "parameters", {get: function() { return [[CollectionChangeRecord], [int]]; }}); Object.defineProperty(IterableChanges.prototype._addToRemovals, "parameters", {get: function() { return [[CollectionChangeRecord]]; }}); var CollectionChangeRecord = function CollectionChangeRecord(item) { this.currentIndex = null; this.previousIndex = null; this.item = item; this._nextPrevious = null; this._prev = null; this._next = null; this._prevDup = null; this._nextDup = null; this._prevRemoved = null; this._nextRemoved = null; this._nextAdded = null; this._nextMoved = null; }; var $CollectionChangeRecord = CollectionChangeRecord; ($traceurRuntime.createClass)(CollectionChangeRecord, {toString: function() { return this.previousIndex === this.currentIndex ? stringify(this.item) : stringify(this.item) + '[' + stringify(this.previousIndex) + '->' + stringify(this.currentIndex) + ']'; }}, {}); var _DuplicateItemRecordList = function _DuplicateItemRecordList() { this._head = null; this._tail = null; }; ($traceurRuntime.createClass)(_DuplicateItemRecordList, { add: function(record) { if (this._head === null) { this._head = this._tail = record; record._nextDup = null; record._prevDup = null; } else { this._tail._nextDup = record; record._prevDup = this._tail; record._nextDup = null; this._tail = record; } }, get: function(item, afterIndex) { var record; for (record = this._head; record !== null; record = record._nextDup) { if ((afterIndex === null || afterIndex < record.currentIndex) && looseIdentical(record.item, item)) { return record; } } return null; }, remove: function(record) { var prev = record._prevDup; var next = record._nextDup; if (prev === null) { this._head = next; } else { prev._nextDup = next; } if (next === null) { this._tail = prev; } else { next._prevDup = prev; } return this._head === null; } }, {}); Object.defineProperty(_DuplicateItemRecordList.prototype.add, "parameters", {get: function() { return [[CollectionChangeRecord]]; }}); Object.defineProperty(_DuplicateItemRecordList.prototype.get, "parameters", {get: function() { return [[], [int]]; }}); Object.defineProperty(_DuplicateItemRecordList.prototype.remove, "parameters", {get: function() { return [[CollectionChangeRecord]]; }}); var _DuplicateMap = function _DuplicateMap() { this.map = MapWrapper.create(); }; ($traceurRuntime.createClass)(_DuplicateMap, { put: function(record) { var key = getMapKey(record.item); var duplicates = MapWrapper.get(this.map, key); if (!isPresent(duplicates)) { duplicates = new _DuplicateItemRecordList(); MapWrapper.set(this.map, key, duplicates); } duplicates.add(record); }, get: function(value) { var afterIndex = arguments[1] !== (void 0) ? arguments[1] : null; var key = getMapKey(value); var recordList = MapWrapper.get(this.map, key); return isBlank(recordList) ? null : recordList.get(value, afterIndex); }, remove: function(record) { var key = getMapKey(record.item); var recordList = MapWrapper.get(this.map, key); if (recordList.remove(record)) { MapWrapper.delete(this.map, key); } return record; }, get isEmpty() { return MapWrapper.size(this.map) === 0; }, clear: function() { MapWrapper.clear(this.map); }, toString: function() { return '_DuplicateMap(' + stringify(this.map) + ')'; } }, {}); Object.defineProperty(_DuplicateMap.prototype.put, "parameters", {get: function() { return [[CollectionChangeRecord]]; }}); Object.defineProperty(_DuplicateMap.prototype.remove, "parameters", {get: function() { return [[CollectionChangeRecord]]; }}); //# sourceMappingURL=iterable_changes.js.map //# sourceMappingURL=./iterable_changes.map