summaryrefslogtreecommitdiff
path: root/lib/epub.js/src/managers/helpers/views.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/epub.js/src/managers/helpers/views.js')
-rw-r--r--lib/epub.js/src/managers/helpers/views.js167
1 files changed, 167 insertions, 0 deletions
diff --git a/lib/epub.js/src/managers/helpers/views.js b/lib/epub.js/src/managers/helpers/views.js
new file mode 100644
index 0000000..4368da2
--- /dev/null
+++ b/lib/epub.js/src/managers/helpers/views.js
@@ -0,0 +1,167 @@
+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) {
+ if(view.displayed){
+ 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;