UNPKG

janus

Version:

the two-faced application library-framework

169 lines (153 loc) 5.81 kB
// Generated by CoffeeScript 1.12.2 (function() { var DerivedList, FlattenedList, List, ref, util, extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, hasProp = {}.hasOwnProperty; ref = require('../list'), List = ref.List, DerivedList = ref.DerivedList; util = require('../../util/util'); FlattenedList = (function(superClass) { var sizeof; extend(FlattenedList, superClass); function FlattenedList(parent, options) { var i, idx, len, list, ref1; this.parent = parent; this.options = options != null ? options : {}; FlattenedList.__super__.constructor.call(this); this._listListeners = new List(); ref1 = this.parent.list; for (idx = i = 0, len = ref1.length; i < len; idx = ++i) { list = ref1[idx]; this._addObj(list, idx); } this.listenTo(this.parent, 'added', (function(_this) { return function(obj, idx) { return _this._addObj(obj, idx); }; })(this)); this.listenTo(this.parent, 'moved', (function(_this) { return function(obj, idx, oldIdx) { return _this._moveObj(obj, oldIdx, idx); }; })(this)); this.listenTo(this.parent, 'removed', (function(_this) { return function(obj, idx) { return _this._removeObj(obj, idx); }; })(this)); } sizeof = function(x) { if ((x != null ? x.isMappable : void 0) === true) { return x.length_; } else { return 1; } }; FlattenedList.prototype._getOverallIdx = function(parentIdx, offset) { if (offset == null) { offset = 0; } return util.foldLeft(0)(this.parent.list.slice(0, parentIdx), function(length, x) { return length + sizeof(x); }) + offset; }; FlattenedList.prototype._addObj = function(obj, idx) { var elem, event, handler, i, len, listeners, offset, ref1; if ((obj != null ? obj.isMappable : void 0) === true) { listeners = { added: (function(_this) { return function(elem, offset) { return _this._add(elem, _this._getOverallIdx(_this._listListeners.list.indexOf(listeners), offset)); }; })(this), moved: (function(_this) { return function(elem, newIdx, oldIdx) { var mappedBase; mappedBase = _this._getOverallIdx(_this._listListeners.list.indexOf(listeners)); return _this._moveAt(mappedBase + oldIdx, mappedBase + newIdx); }; })(this), removed: (function(_this) { return function(_, offset) { return _this._removeAt(_this._getOverallIdx(_this._listListeners.list.indexOf(listeners), offset)); }; })(this) }; for (event in listeners) { handler = listeners[event]; obj.on(event, handler); } this._listListeners.add(listeners, idx); ref1 = obj.list; for (offset = i = 0, len = ref1.length; i < len; offset = ++i) { elem = ref1[offset]; this._add(elem, this._getOverallIdx(idx, offset)); } } else { this._add(obj, this._getOverallIdx(idx)); } }; FlattenedList.prototype._moveObj = function(obj, oldIdx, newIdx) { var _, i, j, mNewIdx, mOldIdx, offset, ref1, ref2; mOldIdx = this._getOverallIdx(oldIdx); mNewIdx = this._getOverallIdx(newIdx); if ((obj != null ? obj.isMappable : void 0) === true) { if (newIdx > oldIdx) { mNewIdx += sizeof(obj); mNewIdx -= sizeof(this.parent.list[newIdx - 1]); } if (newIdx < oldIdx) { mOldIdx -= sizeof(obj); mOldIdx += sizeof(this.parent.list[oldIdx]); } if (newIdx > oldIdx) { for (_ = i = 0, ref1 = obj.length_; 0 <= ref1 ? i < ref1 : i > ref1; _ = 0 <= ref1 ? ++i : --i) { this._moveAt(mOldIdx, mNewIdx); } } else if (newIdx < oldIdx) { for (offset = j = 0, ref2 = obj.length_; 0 <= ref2 ? j < ref2 : j > ref2; offset = 0 <= ref2 ? ++j : --j) { this._moveAt(mOldIdx + offset, mNewIdx + offset); } } } else { this._moveAt(mOldIdx, mNewIdx); } this._listListeners.moveAt(oldIdx, newIdx); }; FlattenedList.prototype._removeObj = function(obj, idx) { var _, event, handler, i, len, listeners, objStartIdx, ref1; objStartIdx = this._getOverallIdx(idx); listeners = this._listListeners.removeAt(idx); if ((obj != null ? obj.isMappable : void 0) === true) { for (event in listeners) { handler = listeners[event]; obj.off(event, handler); } ref1 = obj.list; for (i = 0, len = ref1.length; i < len; i++) { _ = ref1[i]; this._removeAt(objStartIdx); } } else { this._removeAt(objStartIdx); } }; FlattenedList.prototype.__destroy = function() { var event, handler, i, idx, len, listeners, ref1; ref1 = this._listListeners.list; for (idx = i = 0, len = ref1.length; i < len; idx = ++i) { listeners = ref1[idx]; if (listeners != null) { for (event in listeners) { handler = listeners[event]; this.parent.list[idx].off(event, handler); } } } this._listListeners.destroy(); }; return FlattenedList; })(DerivedList); module.exports = { FlattenedList: FlattenedList }; }).call(this);