blob: 75c88e63927e4d9e843134b5e9fb168b174ef10b [file] [log] [blame]
// 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);
});