Home | History | Annotate | Download | only in net_internals
      1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 /**
      6  * Base class to represent a "view". A view is an absolutely positioned box on
      7  * the page.
      8  *
      9  * @constructor
     10  */
     11 function View() {
     12   this.isVisible_ = true;
     13 }
     14 
     15 /**
     16  * Called to reposition the view on the page. Measurements are in pixels.
     17  */
     18 View.prototype.setGeometry = function(left, top, width, height) {
     19   this.left_ = left;
     20   this.top_ = top;
     21   this.width_ = width;
     22   this.height_ = height;
     23 };
     24 
     25 /**
     26  * Called to show/hide the view.
     27  */
     28 View.prototype.show = function(isVisible) {
     29   this.isVisible_ = isVisible;
     30 };
     31 
     32 View.prototype.isVisible = function() {
     33   return this.isVisible_;
     34 };
     35 
     36 /**
     37  * Method of the observer class.
     38  *
     39  * Called to check if an observer needs the data it is
     40  * observing to be actively updated.
     41  */
     42 View.prototype.isActive = function() {
     43   return this.isVisible();
     44 };
     45 
     46 View.prototype.getLeft = function() {
     47   return this.left_;
     48 };
     49 
     50 View.prototype.getTop = function() {
     51   return this.top_;
     52 };
     53 
     54 View.prototype.getWidth = function() {
     55   return this.width_;
     56 };
     57 
     58 View.prototype.getHeight = function() {
     59   return this.height_;
     60 };
     61 
     62 View.prototype.getRight = function() {
     63   return this.getLeft() + this.getWidth();
     64 };
     65 
     66 View.prototype.getBottom = function() {
     67   return this.getTop() + this.getHeight();
     68 };
     69 
     70 View.prototype.setParameters = function(params) {};
     71 
     72 //-----------------------------------------------------------------------------
     73 
     74 /**
     75  * DivView is an implementation of View that wraps a DIV.
     76  *
     77  * @constructor
     78  */
     79 function DivView(divId) {
     80   View.call(this);
     81 
     82   this.node_ = document.getElementById(divId);
     83   if (!this.node_)
     84     throw new Error('Element ' + divId + ' not found');
     85 
     86   // Initialize the default values to those of the DIV.
     87   this.width_ = this.node_.offsetWidth;
     88   this.height_ = this.node_.offsetHeight;
     89   this.isVisible_ = this.node_.style.display != 'none';
     90 }
     91 
     92 inherits(DivView, View);
     93 
     94 DivView.prototype.setGeometry = function(left, top, width, height) {
     95   DivView.superClass_.setGeometry.call(this, left, top, width, height);
     96 
     97   this.node_.style.position = 'absolute';
     98   setNodePosition(this.node_, left, top, width, height);
     99 };
    100 
    101 DivView.prototype.show = function(isVisible) {
    102   DivView.superClass_.show.call(this, isVisible);
    103   setNodeDisplay(this.node_, isVisible);
    104 };
    105 
    106 /**
    107  * Returns the wrapped DIV
    108  */
    109 DivView.prototype.getNode = function() {
    110   return this.node_;
    111 };
    112 
    113 //-----------------------------------------------------------------------------
    114 
    115 /**
    116  * Implementation of View that sizes its child to fit the entire window.
    117  *
    118  * @param {!View} childView
    119  *
    120  * @constructor
    121  */
    122 function WindowView(childView) {
    123   View.call(this);
    124   this.childView_ = childView;
    125   window.addEventListener('resize', this.resetGeometry.bind(this), true);
    126 }
    127 
    128 inherits(WindowView, View);
    129 
    130 WindowView.prototype.setGeometry = function(left, top, width, height) {
    131   WindowView.superClass_.setGeometry.call(this, left, top, width, height);
    132   this.childView_.setGeometry(left, top, width, height);
    133 };
    134 
    135 WindowView.prototype.show = function() {
    136   WindowView.superClass_.show.call(this, isVisible);
    137   this.childView_.show(isVisible);
    138 };
    139 
    140 WindowView.prototype.resetGeometry = function() {
    141   this.setGeometry(0, 0, window.innerWidth, window.innerHeight);
    142 };
    143 
    144