mirror of
https://github.com/SoPat712/videospeed.git
synced 2025-08-22 02:18:45 -04:00
Merge branch 'master' into webextensions-port
# Conflicts: # inject.js
This commit is contained in:
@@ -44,7 +44,7 @@
|
||||
/* shift YT 3D controller down */
|
||||
/* e.g. https://www.youtube.com/watch?v=erftYPflJzQ */
|
||||
.ytp-webgl-spherical-control {
|
||||
top: 50px !important;
|
||||
top: 60px !important;
|
||||
}
|
||||
|
||||
.ytp-fullscreen .ytp-webgl-spherical-control {
|
||||
|
43
inject.js
43
inject.js
@@ -2,6 +2,7 @@ chrome.runtime.sendMessage({}, function(response) {
|
||||
var tc = {
|
||||
settings: {
|
||||
speed: 1.0, // default 1x
|
||||
resetSpeed: 1.0, // default 1x
|
||||
speedStep: 0.1, // default 0.1x
|
||||
rewindTime: 10, // default 10s
|
||||
advanceTime: 10, // default 10s
|
||||
@@ -12,6 +13,7 @@ chrome.runtime.sendMessage({}, function(response) {
|
||||
advanceKeyCode: 88, // default: X
|
||||
displayKeyCode: 86, // default: V
|
||||
rememberSpeed: false, // default: false
|
||||
startHidden: false, // default: false
|
||||
blacklist: `
|
||||
www.instagram.com
|
||||
twitter.com
|
||||
@@ -23,6 +25,7 @@ chrome.runtime.sendMessage({}, function(response) {
|
||||
|
||||
chrome.storage.local.get(tc.settings, function(storage) {
|
||||
tc.settings.speed = Number(storage.speed);
|
||||
tc.settings.resetSpeed = Number(storage.resetSpeed);
|
||||
tc.settings.speedStep = Number(storage.speedStep);
|
||||
tc.settings.rewindTime = Number(storage.rewindTime);
|
||||
tc.settings.advanceTime = Number(storage.advanceTime);
|
||||
@@ -33,6 +36,7 @@ chrome.runtime.sendMessage({}, function(response) {
|
||||
tc.settings.displayKeyCode = Number(storage.displayKeyCode);
|
||||
tc.settings.advanceKeyCode = Number(storage.advanceKeyCode);
|
||||
tc.settings.rememberSpeed = Boolean(storage.rememberSpeed);
|
||||
tc.settings.startHidden = Boolean(storage.startHidden);
|
||||
tc.settings.blacklist = String(storage.blacklist);
|
||||
|
||||
initializeWhenReady(document);
|
||||
@@ -48,6 +52,7 @@ chrome.runtime.sendMessage({}, function(response) {
|
||||
this.id = Math.random().toString(36).substr(2, 9);
|
||||
if (!tc.settings.rememberSpeed) {
|
||||
tc.settings.speed = 1.0;
|
||||
tc.settings.resetSpeed = 1.0;
|
||||
}
|
||||
this.initializeControls();
|
||||
|
||||
@@ -218,15 +223,7 @@ chrome.runtime.sendMessage({}, function(response) {
|
||||
function checkForVideo(node, parent, added) {
|
||||
if (node.nodeName === 'VIDEO') {
|
||||
if (added) {
|
||||
if (!node.classList.contains('vsc-initialized') && !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();
|
||||
if (!node.dataset['vscid']) {
|
||||
new tc.videoController(node, parent);
|
||||
}
|
||||
} else {
|
||||
@@ -235,6 +232,7 @@ chrome.runtime.sendMessage({}, function(response) {
|
||||
let ctrl = document.querySelector(`div[data-vscid="${id}"]`)
|
||||
if (ctrl) {
|
||||
node.classList.remove('vsc-initialized');
|
||||
delete node.dataset['vscid'];
|
||||
ctrl.remove();
|
||||
}
|
||||
}
|
||||
@@ -284,8 +282,7 @@ chrome.runtime.sendMessage({}, function(response) {
|
||||
var id = v.dataset['vscid'];
|
||||
var controller = document.querySelector(`div[data-vscid="${id}"]`);
|
||||
|
||||
if (keyboard)
|
||||
showController(controller);
|
||||
showController(controller);
|
||||
|
||||
if (!v.classList.contains('vsc-cancelled')) {
|
||||
if (action === 'rewind') {
|
||||
@@ -294,16 +291,24 @@ chrome.runtime.sendMessage({}, function(response) {
|
||||
v.currentTime += tc.settings.advanceTime;
|
||||
} else if (action === 'faster') {
|
||||
// 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);
|
||||
v.playbackRate = Number(s.toFixed(2));
|
||||
} else if (action === 'slower') {
|
||||
// Audio playback is cut at 0.05:
|
||||
// https://code.google.com/p/chromium/codesearch#chromium/src/media/filters/audio_renderer_algorithm.cc&l=49
|
||||
var s = Math.max(v.playbackRate - tc.settings.speedStep, 0);
|
||||
// https://cs.chromium.org/chromium/src/media/filters/audio_renderer_algorithm.cc?l=49
|
||||
// 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));
|
||||
} 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') {
|
||||
v.classList.add('vsc-cancelled');
|
||||
controller.remove();
|
||||
@@ -329,11 +334,9 @@ chrome.runtime.sendMessage({}, function(response) {
|
||||
shadowController.classList.add('dragging');
|
||||
|
||||
const startDragging = (e) => {
|
||||
let newLeft = Math.max(0, e.clientX - offsetLeft);
|
||||
let newTop = Math.max(0, e.clientY - offsetTop);
|
||||
|
||||
shadowController.style.left = newLeft + 'px';
|
||||
shadowController.style.top = newTop + 'px';
|
||||
let style = shadowController.style;
|
||||
style.left = parseInt(style.left) + e.movementX + 'px';
|
||||
style.top = parseInt(style.top) + e.movementY + 'px';
|
||||
}
|
||||
|
||||
const stopDragging = () => {
|
||||
|
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "Video Speed Controller",
|
||||
"short_name": "videospeed",
|
||||
"version": "0.4.2",
|
||||
"version": "0.4.4",
|
||||
"manifest_version": 2,
|
||||
"description": "Speed up, slow down, advance and rewind any HTML5 video with quick shortcuts.",
|
||||
"homepage_url": "https://github.com/codebicycle/videospeed",
|
||||
|
@@ -36,6 +36,10 @@
|
||||
<label for="displayKeyInput">Show/hide controller</label>
|
||||
<input id="displayKeyInput" placeholder="press a key" type="text" value=""/>
|
||||
</div>
|
||||
<div class="row">
|
||||
<label for="rememberSpeed">Hide controller by default</label>
|
||||
<input id="startHidden" type="checkbox"/>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
|
@@ -10,6 +10,7 @@ var tcDefaults = {
|
||||
advanceKeyCode: 88, // default: X
|
||||
displayKeyCode: 86, // default: V
|
||||
rememberSpeed: false, // default: false
|
||||
startHidden: false, // default: false
|
||||
blacklist: `
|
||||
www.instagram.com
|
||||
twitter.com
|
||||
@@ -98,6 +99,7 @@ function save_options() {
|
||||
var fasterKeyCode = document.getElementById('fasterKeyInput').keyCode;
|
||||
var displayKeyCode = document.getElementById('displayKeyInput').keyCode;
|
||||
var rememberSpeed = document.getElementById('rememberSpeed').checked;
|
||||
var startHidden = document.getElementById('startHidden').checked;
|
||||
var blacklist = document.getElementById('blacklist').value;
|
||||
|
||||
speedStep = isNaN(speedStep) ? tcDefaults.speedStep : Number(speedStep);
|
||||
@@ -121,6 +123,7 @@ function save_options() {
|
||||
fasterKeyCode: fasterKeyCode,
|
||||
displayKeyCode: displayKeyCode,
|
||||
rememberSpeed: rememberSpeed,
|
||||
startHidden: startHidden,
|
||||
blacklist: blacklist.replace(/^\s+|\s+$/gm,'')
|
||||
}, function() {
|
||||
// Update status to let user know options were saved.
|
||||
@@ -145,6 +148,7 @@ function restore_options() {
|
||||
updateShortcutInputText('fasterKeyInput', storage.fasterKeyCode);
|
||||
updateShortcutInputText('displayKeyInput', storage.displayKeyCode);
|
||||
document.getElementById('rememberSpeed').checked = storage.rememberSpeed;
|
||||
document.getElementById('startHidden').checked = storage.startHidden;
|
||||
document.getElementById('blacklist').value = storage.blacklist;
|
||||
});
|
||||
}
|
||||
|
Reference in New Issue
Block a user