Home | History | Annotate | Download | only in extensions
      1 // Copyright 2013 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 // <window-controls> shadow element implementation.
      7 //
      8 
      9 var chrome = requireNative('chrome').GetChrome();
     10 var forEach = require('utils').forEach;
     11 var addTagWatcher = require('tagWatcher').addTagWatcher;
     12 var appWindow = require('app.window');
     13 var getHtmlTemplate =
     14   requireNative('app_window_natives').GetWindowControlsHtmlTemplate;
     15 
     16 /**
     17  * @constructor
     18  */
     19 function WindowControls(node) {
     20   this.node_ = node;
     21   this.shadowRoot_ = this.createShadowRoot_(node);
     22   this.setupWindowControls_();
     23 }
     24 
     25 /**
     26  * @private
     27  */
     28 WindowControls.prototype.template_element = null;
     29 
     30 /**
     31  * @private
     32  */
     33 WindowControls.prototype.createShadowRoot_ = function(node) {
     34   // Initialize |template| from HTML template resource and cache result.
     35   var template = WindowControls.prototype.template_element;
     36   if (!template) {
     37     var element = document.createElement('div');
     38     element.innerHTML = getHtmlTemplate();
     39     WindowControls.prototype.template_element = element.firstChild;
     40     template = WindowControls.prototype.template_element;
     41   }
     42   // Create shadow root element with template clone as first child.
     43   var shadowRoot = node.webkitCreateShadowRoot();
     44   shadowRoot.appendChild(template.content.cloneNode(true));
     45   return shadowRoot;
     46 }
     47 
     48 /**
     49  * @private
     50  */
     51 WindowControls.prototype.setupWindowControls_ = function() {
     52   var self = this;
     53   this.shadowRoot_.querySelector("#close-control").addEventListener('click',
     54       function(e) {
     55         chrome.app.window.current().close();
     56       });
     57 
     58   this.shadowRoot_.querySelector("#maximize-control").addEventListener('click',
     59       function(e) {
     60         self.maxRestore_();
     61       });
     62 }
     63 
     64 /**
     65  * @private
     66  * Restore or maximize depending on current state
     67  */
     68 WindowControls.prototype.maxRestore_ = function() {
     69   if (chrome.app.window.current().isMaximized()) {
     70     chrome.app.window.current().restore();
     71   } else {
     72     chrome.app.window.current().maximize();
     73   }
     74 }
     75 
     76 addTagWatcher('WINDOW-CONTROLS', function(addedNode) {
     77   new WindowControls(addedNode);
     78 });
     79