| Index: chrome/test/data/extensions/api_test/notifications/galore/app/view.js
|
| diff --git a/chrome/test/data/extensions/api_test/notifications/galore/app/view.js b/chrome/test/data/extensions/api_test/notifications/galore/app/view.js
|
| index 7ae1188c17d412e752025decaf41927b21d507aa..c860c7d2dfb8a6f59784edbfa1189cc67e036a04 100644
|
| --- a/chrome/test/data/extensions/api_test/notifications/galore/app/view.js
|
| +++ b/chrome/test/data/extensions/api_test/notifications/galore/app/view.js
|
| @@ -2,233 +2,106 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -var Galore = Galore || {};
|
| -
|
| -Galore.view = {
|
| - /** @constructor */
|
| - create: function(settings, onload, onSettingsChange) {
|
| - var view = Object.create(this);
|
| - view.actions = [];
|
| - view.sections = {};
|
| - view.settings = settings;
|
| - view.onload = onload;
|
| - view.onsettings = onSettingsChange;
|
| - chrome.app.window.create('window.html', {
|
| - id: 'window',
|
| - frame: 'none',
|
| - defaultWidth: 440, minWidth: 440, maxWidth: 440,
|
| - defaultHeight: 640, minHeight: 640, maxHeight: 640,
|
| - hidden: true
|
| - }, function(appWindow) {
|
| - view.window = appWindow;
|
| - view.addListener_(appWindow.contentWindow, 'load', 'onLoad_');
|
| - }.bind(this));
|
| - return view;
|
| - },
|
| -
|
| - addNotificationButton: function(sectionTitle,
|
| - buttonTitle,
|
| - iconUrl,
|
| - onClick) {
|
| - var button = this.getElement_('#templates .notification').cloneNode(true);
|
| - var image = button.querySelector('img');
|
| - image.src = iconUrl;
|
| - image.alt = buttonTitle;
|
| - button.name = buttonTitle;
|
| - button.dataset.actionIndex = this.actions.push(onClick) - 1;
|
| - this.addButtonListeners_(button);
|
| - this.getSection_(sectionTitle).appendChild(button);
|
| - },
|
| -
|
| - showWindow: function() {
|
| - if (this.window)
|
| - this.window.show();
|
| - },
|
| -
|
| - logEvent: function(message) {
|
| - var event = this.getElement_('#templates .event').cloneNode(true);
|
| - event.textContent = message;
|
| - this.getElement_('#events-scroll').appendChild(event).scrollIntoView();
|
| - },
|
| -
|
| - logError: function(message) {
|
| - var events = this.getElement_('#events-scroll');
|
| - var error = this.getElement_('#templates .error').cloneNode(true);
|
| - error.textContent = message;
|
| - events.appendChild(error).scrollIntoView();
|
| - },
|
| -
|
| - /** @private */
|
| - onLoad_: function() {
|
| - this.dataset = this.window.contentWindow.document.body.dataset;
|
| - this.dataset.priority = this.settings.priority || '0';
|
| - this.addListener_('body', 'mousedown', 'onBodyMouseDown_');
|
| - this.addListener_('body', 'mouseup', 'onBodyMouseUp_');
|
| - this.addListener_('#shadow', 'mousemove', 'onButtonMouseMove_');
|
| - this.addButtonListeners_('button, #shadow');
|
| - this.setButtonAction_('.priority', 'changePriority_');
|
| - this.setButtonAction_('#shadow', 'toggleMenu_');
|
| - this.setButtonAction_('#clear-events', 'clearEvents_');
|
| - this.setButtonAction_('#show-menu', 'toggleMenu_');
|
| - this.setButtonAction_('#close', 'close', this.window.contentWindow);
|
| - if (this.onload)
|
| - this.onload.call(this, this);
|
| - },
|
| -
|
| - /**
|
| - * Handling our own mouse events is fun! It also allows us to keep the cursor
|
| - * appropriately indicating whether a button press or window drag is happening
|
| - * or will happen on mousedown. As a bonus, it allows button to have a
|
| - * highlight-as-you-drag behavior similar to menu items.
|
| - *
|
| - * @private */
|
| - onButtonMouseDown_: function(event) {
|
| - // Record the fact that a button in this button's group is active, which
|
| - // allows onButtonMouseUp_ to do the right thing and CSS rules to correctly
|
| - // set cursor types and button highlighting.
|
| - var element = event.currentTarget;
|
| - this.dataset.active = element.classList[0] || '';
|
| - this.dragging = false;
|
| - },
|
| -
|
| - /**
|
| - * See the comment for onButtonMouseDown_() above.
|
| - *
|
| - * @private */
|
| - onButtonMouseMove_: function(event) {
|
| - // Buttons that support dragging add this as a listener to their mousemove
|
| - // events so a flag can be set during dragging to prevent their actions from
|
| - // being fired by the mouseup event that completes the dragging.
|
| - this.dragging = true;
|
| - },
|
| -
|
| - /**
|
| - * See the comment for onButtonMouseDown_() above.
|
| - *
|
| - * @private */
|
| - onButtonMouseOut_: function(event) {
|
| - // Record the fact that the mouse is not over this button any more to allow
|
| - // CSS rules to stop highlighting it.
|
| - event.currentTarget.dataset.hover = 'false';
|
| - },
|
| -
|
| - /**
|
| - * See the comment for onButtonMouseDown_() above.
|
| - *
|
| - * @private */
|
| - onButtonMouseOver_: function(event) {
|
| - // Record the fact that the mouse is over this button to allow CSS rules to
|
| - // highlight it if appropriate.
|
| - event.currentTarget.dataset.hover = 'true';
|
| - },
|
| -
|
| - /**
|
| - * See the comment for onButtonMouseDown_() above.
|
| - *
|
| - * @private */
|
| - onButtonMouseUp_: function(event) {
|
| - // Send a button action if the button in which the mouseup happened is in
|
| - // the same group as the one in which the mousedown happened. The regular
|
| - // click handling which this replaces would send the action only if the
|
| - // mouseup happened in the same button as the mousedown.
|
| - var element = event.currentTarget;
|
| - var group = (element.classList[0] || 'x');
|
| - if (group == this.dataset.active && !this.dragging)
|
| - this.actions[element.dataset.actionIndex].call(element, event);
|
| - },
|
| -
|
| - /**
|
| - * See the comment for onButtonMouseDown_() above.
|
| - *
|
| - * @private */
|
| - onBodyMouseUp_: function(event) {
|
| - // Record the fact that no button is active, which allows onButtonMouseUp_
|
| - // to do the right thing and CSS rules to correctly set cursor types and
|
| - // button highlighting.
|
| - this.dataset.active = '';
|
| - },
|
| -
|
| - /** @private */
|
| - onBodyMouseDown_: function(event) {
|
| - // Prevents the cursor from becoming a text cursor during drags.
|
| - if (window.getComputedStyle(event.target).cursor != 'text')
|
| - event.preventDefault();
|
| - },
|
| -
|
| - /** @private */
|
| - changePriority_: function(event) {
|
| - this.settings.priority = event.currentTarget.dataset.priority || '0';
|
| - this.dataset.priority = this.settings.priority;
|
| - if (this.onsettings)
|
| - this.onsettings.call(this, this.settings);
|
| - },
|
| -
|
| - /** @private */
|
| - toggleMenu_: function() {
|
| - this.dataset.popup = String(this.dataset.popup != 'true');
|
| - },
|
| -
|
| - /** @private */
|
| - clearEvents_: function() {
|
| - var events = this.getElement_('#events-scroll');
|
| - while (events.lastChild)
|
| - events.removeChild(events.lastChild);
|
| - this.dataset.popup = 'false';
|
| - },
|
| -
|
| - /** @private */
|
| - getSection_: function(title) {
|
| - this.sections[title] = (this.sections[title] || this.makeSection_(title));
|
| - return this.sections[title];
|
| - },
|
| -
|
| - /** @private */
|
| - makeSection_: function(title) {
|
| - var section = this.getElement_('#templates .section').cloneNode(true);
|
| - section.querySelector('span').textContent = title;
|
| - return this.getElement_('#notifications').appendChild(section);
|
| - },
|
| -
|
| - /** @private */
|
| - addButtonListeners_: function(buttons) {
|
| - this.addListener_(buttons, 'mousedown', 'onButtonMouseDown_');
|
| - this.addListener_(buttons, 'mouseout', 'onButtonMouseOut_');
|
| - this.addListener_(buttons, 'mouseover', 'onButtonMouseOver_');
|
| - this.addListener_(buttons, 'mouseup', 'onButtonMouseUp_');
|
| - },
|
| -
|
| - /** @private */
|
| - setButtonAction_: function(elements, action, target) {
|
| - var index = this.actions.push(this.bind_(action, target)) - 1;
|
| - this.getElements_(elements).forEach(function(element) {
|
| - element.dataset.actionIndex = index;
|
| - });
|
| - },
|
| -
|
| - /** @private */
|
| - addListener_: function(elements, event, action, target) {
|
| - var listener = this.bind_(action, target);
|
| - this.getElements_(elements).forEach(function(element) {
|
| - element.addEventListener(event, listener);
|
| - });
|
| - },
|
| -
|
| - /** @private */
|
| - bind_: function(action, target) {
|
| - return (target || this)[action].bind(target || this);
|
| - },
|
| -
|
| - /** @private */
|
| - getElement_: function(element) {
|
| - return this.getElements_(element)[0];
|
| - },
|
| -
|
| - /** @private */
|
| - getElements_: function(elements) {
|
| - if (typeof elements === 'string')
|
| - elements = this.window.contentWindow.document.querySelectorAll(elements);
|
| - if (String(elements) === '[object NodeList]')
|
| - elements = Array.prototype.slice.call(elements);
|
| - return Array.isArray(elements) ? elements : [elements];
|
| - }
|
| -};
|
| +var mainWindow;
|
| +var settings = {}
|
| +settings.priority = "0";
|
| +var sections = [];
|
| +
|
| +function createAppWindow(onLoad) {
|
| + chrome.app.window.create('window.html', {
|
| + id: 'window',
|
| + defaultWidth: 440, minWidth: 440, maxWidth: 840,
|
| + defaultHeight: 640, minHeight: 640, maxHeight: 940,
|
| + hidden: true
|
| + }, function(w) {
|
| + mainWindow = w;
|
| + mainWindow.contentWindow.onload = function() {
|
| + setButtonHandlers();
|
| + onLoad();
|
| + };
|
| + });
|
| +}
|
| +
|
| +function addNotificationButton(sectionTitle,
|
| + buttonTitle,
|
| + iconUrl,
|
| + onClickHandler) {
|
| + var button = getElement('#templates .notification').cloneNode(true);
|
| + var image = button.querySelector('img');
|
| + image.src = iconUrl;
|
| + image.alt = buttonTitle;
|
| + button.name = buttonTitle;
|
| + button.onclick = onClickHandler;
|
| + getSection(sectionTitle).appendChild(button);
|
| +}
|
| +
|
| +function showWindow() {
|
| + if (mainWindow)
|
| + mainWindow.show();
|
| +}
|
| +
|
| +function logEvent(message) {
|
| + var event = getElement('#templates .event').cloneNode(true);
|
| + event.textContent = message;
|
| + getElement('#events').appendChild(event).scrollIntoView();
|
| +}
|
| +
|
| +function logError(message) {
|
| + var events = getElement('#events');
|
| + var error = getElement('#templates .error').cloneNode(true);
|
| + error.textContent = message;
|
| + events.appendChild(error).scrollIntoView();
|
| +}
|
| +
|
| +function setButtonHandlers() {
|
| + setButtonAction('.priority', changePriority);
|
| + setButtonAction('#clear-events', clearEvents);
|
| + setButtonAction('#record', onRecord);
|
| + setButtonAction('#pause', onPause);
|
| + setButtonAction('#stop', onStop);
|
| + setButtonAction('#play', onPlay);
|
| +}
|
| +
|
| +function setRecorderStatusText(text) {
|
| + getElement("#recording-status").innerText = text;
|
| +}
|
| +
|
| +function changePriority(event) {
|
| + settings.priority = event.currentTarget.dataset.priority || '0';
|
| + getElement("body").dataset.priority = settings.priority;
|
| +}
|
| +
|
| +function clearEvents() {
|
| + var events = getElement('#events');
|
| + while (events.lastChild)
|
| + events.removeChild(events.lastChild);
|
| +}
|
| +
|
| +function getSection(title) {
|
| + sections[title] = (sections[title] || makeSection(title));
|
| + return sections[title];
|
| +}
|
| +
|
| +function makeSection(title) {
|
| + var section = getElement('#templates .section').cloneNode(true);
|
| + section.querySelector('span').textContent = title;
|
| + return getElement('#notifications').appendChild(section);
|
| +}
|
| +
|
| +function setButtonAction(elements, action) {
|
| + getElements(elements).forEach(function(element) {
|
| + element.onclick = action;
|
| + });
|
| +}
|
| +
|
| +function getElement(element) {
|
| + return getElements(element)[0];
|
| +}
|
| +
|
| +function getElements(elements) {
|
| + if (typeof elements === 'string')
|
| + elements = mainWindow.contentWindow.document.querySelectorAll(elements);
|
| + if (String(elements) === '[object NodeList]')
|
| + elements = Array.prototype.slice.call(elements);
|
| + return Array.isArray(elements) ? elements : [elements];
|
| +}
|
|
|