blob: c247997c30d8201dbc9995758598e5bd6e547cb9 [file]
// Copyright (c) 2012 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.
/**
* @fileoverview Code related to the options page. Allows users of the extension
* to save settings such as the update interval and which builders to watch.
*/
var bg = chrome.extension.getBackgroundPage();
var nextPatternIndex;
/**
* Toggles whether the Save button is enabled or disabled.
*/
function onChangeCallback() {
document.getElementById('save').disabled = false;
}
/**
* Initializes the options page and pulls in any saved settings.
*/
function init() {
var input = document.getElementById('interval');
input.value = bg.localStorage['check_interval_sec'];
input.onchange = onChangeCallback;
input.onkeyup = onChangeCallback;
var patterns = JSON.parse(bg.localStorage['core_builder_patterns']);
var patternParent = document.getElementById('patternParent');
for (var i = 0; i < patterns.length; i++) {
input = document.createElement('input');
input.name = 'pattern' + i;
input.id = 'pattern' + i;
input.value = patterns[i];
input.onchange = onChangeCallback;
input.onkeyup = onChangeCallback;
if (i == 0)
input.required = true;
var container = document.createElement('div');
container.appendChild(input);
patternParent.appendChild(container);
}
nextPatternIndex = patterns.length;
document.getElementById('add').onclick = addPatternField;
document.getElementById('reset').onclick = resetToDefault;
document.getElementById('save').onclick = saveOptions;
document.getElementById('save').disabled = true;
}
/**
* Updates the message element in the options page.
* @param {string} str The string to set the message to.
*/
function message(str) {
document.getElementById('message').innerHTML = str;
if (str)
setTimeout(function () { message(''); }, 5 * 1000);
}
/**
* Resets the options back to the default.
* @return {boolean} Always returns false;
*/
function resetToDefault() {
document.getElementById('patternParent').innerHTML = '';
bg.initOptions();
init();
return false;
}
/**
* Saves the options that were entered by the user.
* @return {boolean} Always returns false.
*/
function saveOptions() {
document.getElementById('save').disabled = true;
var interval = document.getElementById('interval');
if (!interval.validity.valid) {
interval.focus();
return false;
}
bg.localStorage['check_interval_sec'] = interval.value;
var patterns = [];
for (var i = 0; i < nextPatternIndex; i++) {
var input = document.getElementById('pattern' + i);
if (!input)
continue;
if (input.value)
patterns.push(input.value);
}
if (patterns.length <= 0) {
document.getElementById('pattern0').focus();
return false;
}
bg.localStorage['core_builder_patterns'] = JSON.stringify(patterns);
bg.loadOptions();
bg.updateBadge();
message('Options have been saved.');
return false;
}
/**
* Adds a new input box so the user can add more core builder patterns.
* @return {boolean} Always returns false.
*/
function addPatternField() {
var input = document.createElement('input');
input.name = 'pattern' + nextPatternIndex;
input.id = 'pattern' + nextPatternIndex;
input.onchange = onChangeCallback;
input.onkeyup = onChangeCallback;
var container = document.createElement('div');
container.appendChild(input);
document.getElementById('patternParent').appendChild(container);
input.focus();
nextPatternIndex++;
return false;
}
init();