// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* Base class to represent a "view". A view is an absolutely positioned box on
* the page.
*
* @constructor
*/
function View() {
this.isVisible_ = true;
}
/**
* Called to reposition the view on the page. Measurements are in pixels.
*/
View.prototype.setGeometry = function(left, top, width, height) {
this.left_ = left;
this.top_ = top;
this.width_ = width;
this.height_ = height;
};
/**
* Called to show/hide the view.
*/
View.prototype.show = function(isVisible) {
this.isVisible_ = isVisible;
};
View.prototype.isVisible = function() {
return this.isVisible_;
};
/**
* Method of the observer class.
*
* Called to check if an observer needs the data it is
* observing to be actively updated.
*/
View.prototype.isActive = function() {
return this.isVisible();
};
View.prototype.getLeft = function() {
return this.left_;
};
View.prototype.getTop = function() {
return this.top_;
};
View.prototype.getWidth = function() {
return this.width_;
};
View.prototype.getHeight = function() {
return this.height_;
};
View.prototype.getRight = function() {
return this.getLeft() + this.getWidth();
};
View.prototype.getBottom = function() {
return this.getTop() + this.getHeight();
};
View.prototype.setParameters = function(params) {};
//-----------------------------------------------------------------------------
/**
* DivView is an implementation of View that wraps a DIV.
*
* @constructor
*/
function DivView(divId) {
View.call(this);
this.node_ = document.getElementById(divId);
if (!this.node_)
throw new Error('Element ' + divId + ' not found');
// Initialize the default values to those of the DIV.
this.width_ = this.node_.offsetWidth;
this.height_ = this.node_.offsetHeight;
this.isVisible_ = this.node_.style.display != 'none';
}
inherits(DivView, View);
DivView.prototype.setGeometry = function(left, top, width, height) {
DivView.superClass_.setGeometry.call(this, left, top, width, height);
this.node_.style.position = 'absolute';
setNodePosition(this.node_, left, top, width, height);
};
DivView.prototype.show = function(isVisible) {
DivView.superClass_.show.call(this, isVisible);
setNodeDisplay(this.node_, isVisible);
};
/**
* Returns the wrapped DIV
*/
DivView.prototype.getNode = function() {
return this.node_;
};
//-----------------------------------------------------------------------------
/**
* Implementation of View that sizes its child to fit the entire window.
*
* @param {!View} childView
*
* @constructor
*/
function WindowView(childView) {
View.call(this);
this.childView_ = childView;
window.addEventListener('resize', this.resetGeometry.bind(this), true);
}
inherits(WindowView, View);
WindowView.prototype.setGeometry = function(left, top, width, height) {
WindowView.superClass_.setGeometry.call(this, left, top, width, height);
this.childView_.setGeometry(left, top, width, height);
};
WindowView.prototype.show = function() {
WindowView.superClass_.show.call(this, isVisible);
this.childView_.show(isVisible);
};
WindowView.prototype.resetGeometry = function() {
this.setGeometry(0, 0, window.innerWidth, window.innerHeight);
};