Merge branch 'master' into webextensions-port

# Conflicts:
#	inject.js
This commit is contained in:
codebicycle
2017-02-06 12:11:27 +02:00
5 changed files with 34 additions and 23 deletions

View File

@@ -44,7 +44,7 @@
/* shift YT 3D controller down */ /* shift YT 3D controller down */
/* e.g. https://www.youtube.com/watch?v=erftYPflJzQ */ /* e.g. https://www.youtube.com/watch?v=erftYPflJzQ */
.ytp-webgl-spherical-control { .ytp-webgl-spherical-control {
top: 50px !important; top: 60px !important;
} }
.ytp-fullscreen .ytp-webgl-spherical-control { .ytp-fullscreen .ytp-webgl-spherical-control {

View File

@@ -2,6 +2,7 @@ chrome.runtime.sendMessage({}, function(response) {
var tc = { var tc = {
settings: { settings: {
speed: 1.0, // default 1x speed: 1.0, // default 1x
resetSpeed: 1.0, // default 1x
speedStep: 0.1, // default 0.1x speedStep: 0.1, // default 0.1x
rewindTime: 10, // default 10s rewindTime: 10, // default 10s
advanceTime: 10, // default 10s advanceTime: 10, // default 10s
@@ -12,6 +13,7 @@ chrome.runtime.sendMessage({}, function(response) {
advanceKeyCode: 88, // default: X advanceKeyCode: 88, // default: X
displayKeyCode: 86, // default: V displayKeyCode: 86, // default: V
rememberSpeed: false, // default: false rememberSpeed: false, // default: false
startHidden: false, // default: false
blacklist: ` blacklist: `
www.instagram.com www.instagram.com
twitter.com twitter.com
@@ -23,6 +25,7 @@ chrome.runtime.sendMessage({}, function(response) {
chrome.storage.local.get(tc.settings, function(storage) { chrome.storage.local.get(tc.settings, function(storage) {
tc.settings.speed = Number(storage.speed); tc.settings.speed = Number(storage.speed);
tc.settings.resetSpeed = Number(storage.resetSpeed);
tc.settings.speedStep = Number(storage.speedStep); tc.settings.speedStep = Number(storage.speedStep);
tc.settings.rewindTime = Number(storage.rewindTime); tc.settings.rewindTime = Number(storage.rewindTime);
tc.settings.advanceTime = Number(storage.advanceTime); tc.settings.advanceTime = Number(storage.advanceTime);
@@ -33,6 +36,7 @@ chrome.runtime.sendMessage({}, function(response) {
tc.settings.displayKeyCode = Number(storage.displayKeyCode); tc.settings.displayKeyCode = Number(storage.displayKeyCode);
tc.settings.advanceKeyCode = Number(storage.advanceKeyCode); tc.settings.advanceKeyCode = Number(storage.advanceKeyCode);
tc.settings.rememberSpeed = Boolean(storage.rememberSpeed); tc.settings.rememberSpeed = Boolean(storage.rememberSpeed);
tc.settings.startHidden = Boolean(storage.startHidden);
tc.settings.blacklist = String(storage.blacklist); tc.settings.blacklist = String(storage.blacklist);
initializeWhenReady(document); initializeWhenReady(document);
@@ -48,6 +52,7 @@ chrome.runtime.sendMessage({}, function(response) {
this.id = Math.random().toString(36).substr(2, 9); this.id = Math.random().toString(36).substr(2, 9);
if (!tc.settings.rememberSpeed) { if (!tc.settings.rememberSpeed) {
tc.settings.speed = 1.0; tc.settings.speed = 1.0;
tc.settings.resetSpeed = 1.0;
} }
this.initializeControls(); this.initializeControls();
@@ -193,7 +198,7 @@ chrome.runtime.sendMessage({}, function(response) {
// Ignore keydown event if typing in an input box // Ignore keydown event if typing in an input box
if ((document.activeElement.nodeName === 'INPUT' if ((document.activeElement.nodeName === 'INPUT'
&& document.activeElement.getAttribute('type') === 'text') && document.activeElement.getAttribute('type') === 'text')
|| document.activeElement.nodeName === 'TEXTAREA' || document.activeElement.nodeName === 'TEXTAREA'
|| document.activeElement.isContentEditable) { || document.activeElement.isContentEditable) {
return false; return false;
} }
@@ -218,15 +223,7 @@ chrome.runtime.sendMessage({}, function(response) {
function checkForVideo(node, parent, added) { function checkForVideo(node, parent, added) {
if (node.nodeName === 'VIDEO') { if (node.nodeName === 'VIDEO') {
if (added) { if (added) {
if (!node.classList.contains('vsc-initialized') && !node.dataset['vscid']) { if (!node.dataset['vscid']) {
new tc.videoController(node, parent);
}
// if the video has already been initialized, then it has been mutated
// we may need to update the controller location to reflect this
else {
let id = node.dataset['vscid'];
let ctrl = document.querySelector(`div[data-vscid="${id}"]`);
if (ctrl) ctrl.remove();
new tc.videoController(node, parent); new tc.videoController(node, parent);
} }
} else { } else {
@@ -235,6 +232,7 @@ chrome.runtime.sendMessage({}, function(response) {
let ctrl = document.querySelector(`div[data-vscid="${id}"]`) let ctrl = document.querySelector(`div[data-vscid="${id}"]`)
if (ctrl) { if (ctrl) {
node.classList.remove('vsc-initialized'); node.classList.remove('vsc-initialized');
delete node.dataset['vscid'];
ctrl.remove(); ctrl.remove();
} }
} }
@@ -284,8 +282,7 @@ chrome.runtime.sendMessage({}, function(response) {
var id = v.dataset['vscid']; var id = v.dataset['vscid'];
var controller = document.querySelector(`div[data-vscid="${id}"]`); var controller = document.querySelector(`div[data-vscid="${id}"]`);
if (keyboard) showController(controller);
showController(controller);
if (!v.classList.contains('vsc-cancelled')) { if (!v.classList.contains('vsc-cancelled')) {
if (action === 'rewind') { if (action === 'rewind') {
@@ -294,16 +291,24 @@ chrome.runtime.sendMessage({}, function(response) {
v.currentTime += tc.settings.advanceTime; v.currentTime += tc.settings.advanceTime;
} else if (action === 'faster') { } else if (action === 'faster') {
// Maximum playback speed in Chrome is set to 16: // Maximum playback speed in Chrome is set to 16:
// https://code.google.com/p/chromium/codesearch#chromium/src/media/blink/webmediaplayer_impl.cc&l=64 // https://cs.chromium.org/chromium/src/media/blink/webmediaplayer_impl.cc?l=103
var s = Math.min(v.playbackRate + tc.settings.speedStep, 16); var s = Math.min(v.playbackRate + tc.settings.speedStep, 16);
v.playbackRate = Number(s.toFixed(2)); v.playbackRate = Number(s.toFixed(2));
} else if (action === 'slower') { } else if (action === 'slower') {
// Audio playback is cut at 0.05: // Audio playback is cut at 0.05:
// https://code.google.com/p/chromium/codesearch#chromium/src/media/filters/audio_renderer_algorithm.cc&l=49 // https://cs.chromium.org/chromium/src/media/filters/audio_renderer_algorithm.cc?l=49
var s = Math.max(v.playbackRate - tc.settings.speedStep, 0); // Video min rate is 0.0625:
// https://cs.chromium.org/chromium/src/media/blink/webmediaplayer_impl.cc?l=102
var s = Math.max(v.playbackRate - tc.settings.speedStep, 0.0625);
v.playbackRate = Number(s.toFixed(2)); v.playbackRate = Number(s.toFixed(2));
} else if (action === 'reset') { } else if (action === 'reset') {
v.playbackRate = 1.0; if(v.playbackRate === 1.0) {
v.playbackRate = tc.settings.resetSpeed;
} else {
tc.settings.resetSpeed = v.playbackRate;
chrome.storage.sync.set({'resetSpeed': v.playbackRate});
v.playbackRate = 1.0;
}
} else if (action === 'close') { } else if (action === 'close') {
v.classList.add('vsc-cancelled'); v.classList.add('vsc-cancelled');
controller.remove(); controller.remove();
@@ -329,11 +334,9 @@ chrome.runtime.sendMessage({}, function(response) {
shadowController.classList.add('dragging'); shadowController.classList.add('dragging');
const startDragging = (e) => { const startDragging = (e) => {
let newLeft = Math.max(0, e.clientX - offsetLeft); let style = shadowController.style;
let newTop = Math.max(0, e.clientY - offsetTop); style.left = parseInt(style.left) + e.movementX + 'px';
style.top = parseInt(style.top) + e.movementY + 'px';
shadowController.style.left = newLeft + 'px';
shadowController.style.top = newTop + 'px';
} }
const stopDragging = () => { const stopDragging = () => {

View File

@@ -1,7 +1,7 @@
{ {
"name": "Video Speed Controller", "name": "Video Speed Controller",
"short_name": "videospeed", "short_name": "videospeed",
"version": "0.4.2", "version": "0.4.4",
"manifest_version": 2, "manifest_version": 2,
"description": "Speed up, slow down, advance and rewind any HTML5 video with quick shortcuts.", "description": "Speed up, slow down, advance and rewind any HTML5 video with quick shortcuts.",
"homepage_url": "https://github.com/codebicycle/videospeed", "homepage_url": "https://github.com/codebicycle/videospeed",

View File

@@ -36,6 +36,10 @@
<label for="displayKeyInput">Show/hide controller</label> <label for="displayKeyInput">Show/hide controller</label>
<input id="displayKeyInput" placeholder="press a key" type="text" value=""/> <input id="displayKeyInput" placeholder="press a key" type="text" value=""/>
</div> </div>
<div class="row">
<label for="rememberSpeed">Hide controller by default</label>
<input id="startHidden" type="checkbox"/>
</div>
</section> </section>
<section> <section>

View File

@@ -10,6 +10,7 @@ var tcDefaults = {
advanceKeyCode: 88, // default: X advanceKeyCode: 88, // default: X
displayKeyCode: 86, // default: V displayKeyCode: 86, // default: V
rememberSpeed: false, // default: false rememberSpeed: false, // default: false
startHidden: false, // default: false
blacklist: ` blacklist: `
www.instagram.com www.instagram.com
twitter.com twitter.com
@@ -98,6 +99,7 @@ function save_options() {
var fasterKeyCode = document.getElementById('fasterKeyInput').keyCode; var fasterKeyCode = document.getElementById('fasterKeyInput').keyCode;
var displayKeyCode = document.getElementById('displayKeyInput').keyCode; var displayKeyCode = document.getElementById('displayKeyInput').keyCode;
var rememberSpeed = document.getElementById('rememberSpeed').checked; var rememberSpeed = document.getElementById('rememberSpeed').checked;
var startHidden = document.getElementById('startHidden').checked;
var blacklist = document.getElementById('blacklist').value; var blacklist = document.getElementById('blacklist').value;
speedStep = isNaN(speedStep) ? tcDefaults.speedStep : Number(speedStep); speedStep = isNaN(speedStep) ? tcDefaults.speedStep : Number(speedStep);
@@ -121,6 +123,7 @@ function save_options() {
fasterKeyCode: fasterKeyCode, fasterKeyCode: fasterKeyCode,
displayKeyCode: displayKeyCode, displayKeyCode: displayKeyCode,
rememberSpeed: rememberSpeed, rememberSpeed: rememberSpeed,
startHidden: startHidden,
blacklist: blacklist.replace(/^\s+|\s+$/gm,'') blacklist: blacklist.replace(/^\s+|\s+$/gm,'')
}, function() { }, function() {
// Update status to let user know options were saved. // Update status to let user know options were saved.
@@ -145,6 +148,7 @@ function restore_options() {
updateShortcutInputText('fasterKeyInput', storage.fasterKeyCode); updateShortcutInputText('fasterKeyInput', storage.fasterKeyCode);
updateShortcutInputText('displayKeyInput', storage.displayKeyCode); updateShortcutInputText('displayKeyInput', storage.displayKeyCode);
document.getElementById('rememberSpeed').checked = storage.rememberSpeed; document.getElementById('rememberSpeed').checked = storage.rememberSpeed;
document.getElementById('startHidden').checked = storage.startHidden;
document.getElementById('blacklist').value = storage.blacklist; document.getElementById('blacklist').value = storage.blacklist;
}); });
} }