1 // Copyright (c) 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.
10 settings.priority = "0";
11 settings.progress = 10;
12 settings.progress_sec = 2;
13 settings.progress_step = 20;
15 function onMainWindowClosed() {
20 function createAppWindow(onLoad) {
21 chrome.app.window.create('window.html', {
23 defaultWidth: 440, minWidth: 440, maxWidth: 840,
24 defaultHeight: 640, minHeight: 640, maxHeight: 940,
28 mainWindow.contentWindow.onload = function() {
30 getElement("body").dataset.priority = settings.priority;
33 mainWindow.onClosed.addListener(onMainWindowClosed)
37 function resovleImageUrl(imageUrl, callback) {
38 if (imageUrl.substr(0,4) != "http") {
43 var xhr = new XMLHttpRequest();
44 xhr.open("GET", imageUrl);
45 xhr.responseType = "blob";
46 xhr.onload = function() {
47 callback(URL.createObjectURL(this.response));
52 function addNotificationButton(sectionTitle,
56 var button = getElement('#templates .notification').cloneNode(true);
57 var image = button.querySelector('img');
58 resovleImageUrl(iconUrl, function(url) { image.src = url });
60 image.alt = buttonTitle;
61 button.name = buttonTitle;
62 button.onclick = onClickHandler;
63 getSection(sectionTitle).appendChild(button);
66 function addProgressControl(sectionTitle) {
67 var control = getElement('#templates .progress-control').cloneNode(true);
68 getSection(sectionTitle).appendChild(control)
70 var progress = control.querySelector('.progress');
71 progress.id = "progress"
72 progress.value = settings.progress;
74 var progress_oneshot = control.querySelector('.progress-oneshot');
75 progress_oneshot.id = 'progress-oneshot';
76 progress_oneshot.checked = true;
78 var progress_sec = control.querySelector('.progress-sec');
79 progress_sec.id = "progress-sec"
80 progress_sec.value = settings.progress_sec;
82 var progress_step = control.querySelector('.progress-step');
83 progress_step.id = "progress-step"
84 progress_step.value = settings.progress_step;
87 function showWindow() {
92 function logEvent(message) {
93 var event = getElement('#templates .event').cloneNode(true);
94 event.textContent = message;
95 getElement('#events').appendChild(event).scrollIntoView();
98 function logError(message) {
99 var events = getElement('#events');
100 var error = getElement('#templates .error').cloneNode(true);
101 error.textContent = message;
102 events.appendChild(error).scrollIntoView();
105 function setButtonHandlers() {
106 setButtonAction('#clear-events', clearEvents);
107 setButtonAction('#record', onRecord);
108 setButtonAction('#pause', onPause);
109 setButtonAction('#stop', onStop);
110 setButtonAction('#play', onPlay);
113 function setRecorderStatusText(text) {
114 getElement("#recording-status").innerText = text;
117 function updateRecordingStatsDisplay(text) {
118 getElement("#recording-stats").innerText = text;
121 function clearEvents() {
122 var events = getElement('#events');
123 while (events.lastChild)
124 events.removeChild(events.lastChild);
127 function getSection(title) {
128 sections[title] = (sections[title] || makeSection(title));
129 return sections[title];
132 function makeSection(title) {
133 var section = getElement('#templates .section').cloneNode(true);
134 section.querySelector('span').textContent = title;
135 return getElement('#notifications').appendChild(section);
138 function setButtonAction(elements, action) {
139 getElements(elements).forEach(function(element) {
140 element.onclick = action;
144 function getElement(element) {
145 return getElements(element)[0];
148 function getElements(elements) {
149 if (typeof elements === 'string')
150 elements = mainWindow.contentWindow.document.querySelectorAll(elements);
151 if (String(elements) === '[object NodeList]')
152 elements = Array.prototype.slice.call(elements);
153 return Array.isArray(elements) ? elements : [elements];