mirror of
https://github.com/futurepress/epub.js.git
synced 2025-10-02 14:49:16 +02:00
165 lines
2.4 KiB
JavaScript
165 lines
2.4 KiB
JavaScript
class Views {
|
|
constructor(container) {
|
|
this.container = container;
|
|
this._views = [];
|
|
this.length = 0;
|
|
this.hidden = false;
|
|
}
|
|
|
|
all() {
|
|
return this._views;
|
|
}
|
|
|
|
first() {
|
|
return this._views[0];
|
|
}
|
|
|
|
last() {
|
|
return this._views[this._views.length-1];
|
|
}
|
|
|
|
indexOf(view) {
|
|
return this._views.indexOf(view);
|
|
}
|
|
|
|
slice() {
|
|
return this._views.slice.apply(this._views, arguments);
|
|
}
|
|
|
|
get(i) {
|
|
return this._views[i];
|
|
}
|
|
|
|
append(view){
|
|
this._views.push(view);
|
|
if(this.container){
|
|
this.container.appendChild(view.element);
|
|
}
|
|
this.length++;
|
|
return view;
|
|
}
|
|
|
|
prepend(view){
|
|
this._views.unshift(view);
|
|
if(this.container){
|
|
this.container.insertBefore(view.element, this.container.firstChild);
|
|
}
|
|
this.length++;
|
|
return view;
|
|
}
|
|
|
|
insert(view, index) {
|
|
this._views.splice(index, 0, view);
|
|
|
|
if(this.container){
|
|
if(index < this.container.children.length){
|
|
this.container.insertBefore(view.element, this.container.children[index]);
|
|
} else {
|
|
this.container.appendChild(view.element);
|
|
}
|
|
}
|
|
|
|
this.length++;
|
|
return view;
|
|
}
|
|
|
|
remove(view) {
|
|
var index = this._views.indexOf(view);
|
|
|
|
if(index > -1) {
|
|
this._views.splice(index, 1);
|
|
}
|
|
|
|
|
|
this.destroy(view);
|
|
|
|
this.length--;
|
|
}
|
|
|
|
destroy(view) {
|
|
view.destroy();
|
|
|
|
if(this.container){
|
|
this.container.removeChild(view.element);
|
|
}
|
|
view = null;
|
|
}
|
|
|
|
// Iterators
|
|
|
|
forEach() {
|
|
return this._views.forEach.apply(this._views, arguments);
|
|
}
|
|
|
|
clear(){
|
|
// Remove all views
|
|
var view;
|
|
var len = this.length;
|
|
|
|
if(!this.length) return;
|
|
|
|
for (var i = 0; i < len; i++) {
|
|
view = this._views[i];
|
|
this.destroy(view);
|
|
}
|
|
|
|
this._views = [];
|
|
this.length = 0;
|
|
}
|
|
|
|
find(section){
|
|
|
|
var view;
|
|
var len = this.length;
|
|
|
|
for (var i = 0; i < len; i++) {
|
|
view = this._views[i];
|
|
if(view.displayed && view.section.index == section.index) {
|
|
return view;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
displayed(){
|
|
var displayed = [];
|
|
var view;
|
|
var len = this.length;
|
|
|
|
for (var i = 0; i < len; i++) {
|
|
view = this._views[i];
|
|
if(view.displayed){
|
|
displayed.push(view);
|
|
}
|
|
}
|
|
return displayed;
|
|
}
|
|
|
|
show(){
|
|
var view;
|
|
var len = this.length;
|
|
|
|
for (var i = 0; i < len; i++) {
|
|
view = this._views[i];
|
|
if(view.displayed){
|
|
view.show();
|
|
}
|
|
}
|
|
this.hidden = false;
|
|
}
|
|
|
|
hide(){
|
|
var view;
|
|
var len = this.length;
|
|
|
|
for (var i = 0; i < len; i++) {
|
|
view = this._views[i];
|
|
if(view.displayed){
|
|
view.hide();
|
|
}
|
|
}
|
|
this.hidden = true;
|
|
}
|
|
}
|
|
|
|
export default Views;
|