| // Copyright 2013 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. |
| |
| // |
| // <window-controls> shadow element implementation. |
| // |
| |
| var chrome = requireNative('chrome').GetChrome(); |
| var forEach = require('utils').forEach; |
| var addTagWatcher = require('tagWatcher').addTagWatcher; |
| var appWindow = require('app.window'); |
| var getHtmlTemplate = |
| requireNative('app_window_natives').GetWindowControlsHtmlTemplate; |
| |
| /** |
| * @constructor |
| */ |
| function WindowControls(node) { |
| this.node_ = node; |
| this.shadowRoot_ = this.createShadowRoot_(node); |
| this.setupWindowControls_(); |
| } |
| |
| /** |
| * @private |
| */ |
| WindowControls.prototype.template_element = null; |
| |
| /** |
| * @private |
| */ |
| WindowControls.prototype.createShadowRoot_ = function(node) { |
| // Initialize |template| from HTML template resource and cache result. |
| var template = WindowControls.prototype.template_element; |
| if (!template) { |
| var element = document.createElement('div'); |
| element.innerHTML = getHtmlTemplate(); |
| WindowControls.prototype.template_element = element.firstChild; |
| template = WindowControls.prototype.template_element; |
| } |
| // Create shadow root element with template clone as first child. |
| var shadowRoot = node.createShadowRoot(); |
| shadowRoot.appendChild(template.content.cloneNode(true)); |
| return shadowRoot; |
| } |
| |
| /** |
| * @private |
| */ |
| WindowControls.prototype.setupWindowControls_ = function() { |
| var self = this; |
| this.shadowRoot_.querySelector("#close-control").addEventListener('click', |
| function(e) { |
| chrome.app.window.current().close(); |
| }); |
| |
| this.shadowRoot_.querySelector("#maximize-control").addEventListener('click', |
| function(e) { |
| self.maxRestore_(); |
| }); |
| } |
| |
| /** |
| * @private |
| * Restore or maximize depending on current state |
| */ |
| WindowControls.prototype.maxRestore_ = function() { |
| if (chrome.app.window.current().isMaximized()) { |
| chrome.app.window.current().restore(); |
| } else { |
| chrome.app.window.current().maximize(); |
| } |
| } |
| |
| addTagWatcher('WINDOW-CONTROLS', function(addedNode) { |
| new WindowControls(addedNode); |
| }); |