initial commit
This commit is contained in:
commit
4b60ece582
327 changed files with 28286 additions and 0 deletions
80
libjs/wController/panesList.js
Normal file
80
libjs/wController/panesList.js
Normal file
|
@ -0,0 +1,80 @@
|
|||
"use strict";
|
||||
var List = require("./list");
|
||||
var ImagePane = require("./imagePane");
|
||||
|
||||
var Address = require("../wType/address");
|
||||
|
||||
var PanesList = List.inherit({
|
||||
"className": "PanesList",
|
||||
"constructor": function PanesListModel(addr) {
|
||||
List.fn.constructor.call(this, addr);
|
||||
|
||||
this._subscriptionStart = 0;
|
||||
this._subscriptionEnd = Infinity;
|
||||
},
|
||||
"addElement": function(element) {
|
||||
var size = this.data.length();
|
||||
List.fn.addElement.call(this, element);
|
||||
|
||||
if (size >= this._subscriptionStart && size < this._subscriptionEnd) {
|
||||
var controller = new ImagePane(this._pairAddress["+"](new Address([element.toString()])));
|
||||
this.addController(controller);
|
||||
}
|
||||
},
|
||||
"clear": function() {
|
||||
List.fn.clear.call(this);
|
||||
this.clearChildren();
|
||||
},
|
||||
"setSubscriptionRange": function(s, e) {
|
||||
var needStart = s !== this._subscriptionStart;
|
||||
var needEnd = e !== this._subscriptionEnd;
|
||||
if (needStart || needEnd) {
|
||||
var os = this._subscriptionStart;
|
||||
var oe = this._subscriptionEnd;
|
||||
this._subscriptionStart = s;
|
||||
this._subscriptionEnd = e;
|
||||
if (this._subscribed) {
|
||||
this.trigger("rangeStart");
|
||||
if (needStart) {
|
||||
if (s > os) {
|
||||
var limit = Math.min(s - os, this._controllers.length);
|
||||
for (var i = 0; i < limit; ++i) {
|
||||
var ctrl = this._controllers[0];
|
||||
this._removeControllerByIndex(0);
|
||||
ctrl.destructor();
|
||||
}
|
||||
} else {
|
||||
var limit = Math.min(os, e) - s;
|
||||
for (var i = 0; i < limit; ++i) {
|
||||
var ctrl = new ImagePane(this._pairAddress["+"](new Address([this.data.at(i + s).toString()])));
|
||||
this.addController(ctrl, i);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (needEnd) {
|
||||
var ce = Math.min(this.data.length(), e);
|
||||
var coe = Math.min(this.data.length(), oe);
|
||||
if (ce > coe) {
|
||||
var start = Math.max(s, oe);
|
||||
var amount = ce - start; //it can be negative, it's fine
|
||||
for (var i = 0; i < amount; ++i) {
|
||||
var ctrl = new ImagePane(this._pairAddress["+"](new Address([this.data.at(start + i).toString()])));
|
||||
this.addController(ctrl);
|
||||
}
|
||||
} else if (ce < coe) {
|
||||
var amount = Math.min(coe - ce, coe - os);
|
||||
for (var i = 0; i < amount; ++i) {
|
||||
var index = this._controllers.length - 1;
|
||||
var ctrl = this._controllers[index];
|
||||
this._removeControllerByIndex(index);
|
||||
ctrl.destructor();
|
||||
}
|
||||
}
|
||||
}
|
||||
this.trigger("rangeEnd");
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = PanesList;
|
Loading…
Add table
Add a link
Reference in a new issue