Files
videospeed/options.js
2015-06-25 15:15:28 -05:00

134 lines
5.0 KiB
JavaScript

var tcDefaults = {
speedStep: 0.1,
rewindTime: 10,
advanceTime: 10,
resetKeyCode: 82,
rewindKeyCode: 65,
slowerKeyCode: 83,
fasterKeyCode: 68,
advanceKeyCode: 84,
rememberSpeed: false
};
function recordKeyPress(e) {
var normalizedChar = String.fromCharCode(e.keyCode).toUpperCase();
e.target.value = normalizedChar;
e.target.keyCode = normalizedChar.charCodeAt();
e.preventDefault();
e.stopPropagation();
};
function inputFilterNumbersOnly(e) {
var char = String.fromCharCode(e.keyCode);
if (!/[\d\.]$/.test(char) || !/^\d+(\.\d*)?$/.test(e.target.value + char)) {
e.preventDefault();
e.stopPropagation();
}
};
function inputFocus(e) {
e.target.value = "";
};
function inputBlur(e) {
e.target.value = String.fromCharCode(e.target.keyCode).toUpperCase();
};
function updateShortcutInputText(inputId, keyCode) {
document.getElementById(inputId).value = String.fromCharCode(keyCode).toUpperCase();
document.getElementById(inputId).keyCode = keyCode;
}
// Saves options to chrome.storage
function save_options() {
var speedStep = document.getElementById('speedStep').value;
var rewindTime = document.getElementById('rewindTime').value;
var advanceTime = document.getElementById('advanceTime').value;
var resetKeyCode = document.getElementById('resetKeyInput').keyCode;
var rewindKeyCode = document.getElementById('rewindKeyInput').keyCode;
var advanceKeyCode = document.getElementById('advanceKeyInput').keyCode;
var slowerKeyCode = document.getElementById('slowerKeyInput').keyCode;
var fasterKeyCode = document.getElementById('fasterKeyInput').keyCode;
var rememberSpeed = document.getElementById('rememberSpeed').checked;
speedStep = isNaN(speedStep) ? tcDefaults.speedStep : Number(speedStep);
rewindTime = isNaN(rewindTime) ? tcDefaults.rewindTime : Number(rewindTime);
advanceTime = isNaN(advanceTime) ? tcDefaults.advanceTime : Number(advanceTime);
resetKeyCode = isNaN(resetKeyCode) ? tcDefaults.resetKeyCode : resetKeyCode;
rewindKeyCode = isNaN(rewindKeyCode) ? tcDefaults.rewindKeyCode : rewindKeyCode;
advanceKeyCode = isNaN(advanceKeyCode) ? tcDefaults.advanceKeyCode : advanceKeyCode;
slowerKeyCode = isNaN(slowerKeyCode) ? tcDefaults.slowerKeyCode : slowerKeyCode;
fasterKeyCode = isNaN(fasterKeyCode) ? tcDefaults.fasterKeyCode : fasterKeyCode;
chrome.storage.sync.set({
speedStep: speedStep,
rewindTime: rewindTime,
advanceTime: advanceTime,
resetKeyCode: resetKeyCode,
rewindKeyCode: rewindKeyCode,
advanceKeyCode: advanceKeyCode,
slowerKeyCode: slowerKeyCode,
fasterKeyCode: fasterKeyCode,
rememberSpeed: rememberSpeed
}, function() {
// Update status to let user know options were saved.
var status = document.getElementById('status');
status.textContent = 'Options saved';
setTimeout(function() {
status.textContent = '';
}, 1000);
});
}
// Restores options from chrome.storage
function restore_options() {
chrome.storage.sync.get(tcDefaults, function(storage) {
document.getElementById('speedStep').value = storage.speedStep.toFixed(2);
document.getElementById('rewindTime').value = storage.rewindTime;
document.getElementById('advanceTime').value = storage.advanceTime;
updateShortcutInputText('resetKeyInput', storage.resetKeyCode);
updateShortcutInputText('rewindKeyInput', storage.rewindKeyCode);
updateShortcutInputText('advanceKeyInput', storage.advanceKeyCode);
updateShortcutInputText('slowerKeyInput', storage.slowerKeyCode);
updateShortcutInputText('fasterKeyInput', storage.fasterKeyCode);
document.getElementById('rememberSpeed').checked = storage.rememberSpeed;
});
}
function restore_defaults() {
chrome.storage.sync.set(tcDefaults, function() {
restore_options();
// Update status to let user know options were saved.
var status = document.getElementById('status');
status.textContent = 'Default options restored';
setTimeout(function() {
status.textContent = '';
}, 1000);
});
}
function initShortcutInput(inputId) {
document.getElementById(inputId).addEventListener('focus', inputFocus);
document.getElementById(inputId).addEventListener('blur', inputBlur);
document.getElementById(inputId).addEventListener('keypress', recordKeyPress);
}
document.addEventListener('DOMContentLoaded', function () {
restore_options();
document.getElementById('save').addEventListener('click', save_options);
document.getElementById('restore').addEventListener('click', restore_defaults);
initShortcutInput('resetKeyInput');
initShortcutInput('rewindKeyInput');
initShortcutInput('advanceKeyInput');
initShortcutInput('slowerKeyInput');
initShortcutInput('fasterKeyInput');
document.getElementById('rewindTime').addEventListener('keypress', inputFilterNumbersOnly);
document.getElementById('advanceTime').addEventListener('keypress', inputFilterNumbersOnly);
document.getElementById('speedStep').addEventListener('keypress', inputFilterNumbersOnly);
})