From 686d2a19441ba213ecc05177886abc293aa88d0b Mon Sep 17 00:00:00 2001 From: Ilya Grigorik Date: Sat, 28 Jan 2017 17:58:08 -0800 Subject: [PATCH 01/11] bump to 0.4.5 --- manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.json b/manifest.json index 7c38df7..10e95f0 100755 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "name": "Video Speed Controller", "short_name": "videospeed", - "version": "0.4.4", + "version": "0.4.5", "manifest_version": 2, "description": "Speed up, slow down, advance and rewind any HTML5 video with quick shortcuts.", "homepage_url": "https://github.com/igrigorik/videospeed", From 684a516bad84f5f8cd4aceb63057250b2c46b6a7 Mon Sep 17 00:00:00 2001 From: Ilya Grigorik Date: Sat, 25 Feb 2017 21:38:21 -0800 Subject: [PATCH 02/11] update controller position selector for YT embeds New player, new styles.. Closes #178. --- inject.css | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/inject.css b/inject.css index 34e8aef..9ffa190 100644 --- a/inject.css +++ b/inject.css @@ -24,15 +24,9 @@ /* YouTube embedded player */ /* e.g. https://www.igvita.com/2012/09/12/web-fonts-performance-making-pretty-fast/ */ -.full-frame .html5-video-player:not(.ytp-fullscreen) .vsc-controller { +.html5-video-player:not(.ytp-hide-info-bar) .vsc-controller { position: relative; - top: 45px; -} - -.ytp-fullscreen .vsc-controller { - display: block; - position: relative; - top: 60px; + top: 40px; } /* shift controller on vine.co */ From 37bd01511271ed8d63e540986883fa4ffacb7a46 Mon Sep 17 00:00:00 2001 From: Ilya Grigorik Date: Sat, 25 Feb 2017 21:49:58 -0800 Subject: [PATCH 03/11] add offset rule for Netflix Closes #178. --- inject.css | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/inject.css b/inject.css index 9ffa190..d11b58d 100644 --- a/inject.css +++ b/inject.css @@ -29,6 +29,12 @@ top: 40px; } +/* Netflix player */ +#netflix-player:not(.player-cinema-mode) .vsc-controller { + position: relative; + top: 85px; +} + /* shift controller on vine.co */ /* e.g. https://vine.co/v/OrJj39YlL57 */ .video-container .vine-video-container .vsc-controller { From 02b2da0f977898be29d11b16b8e3789075b21e91 Mon Sep 17 00:00:00 2001 From: The Metaist Date: Thu, 16 Mar 2017 10:19:14 -0400 Subject: [PATCH 04/11] use mouse wheel scroll to increase/decrease speed --- inject.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/inject.js b/inject.js index 956355a..68a216d 100644 --- a/inject.js +++ b/inject.js @@ -121,6 +121,13 @@ chrome.extension.sendMessage({}, function(response) { `; shadow.innerHTML = shadowTemplate; + shadow.querySelector('#controller').addEventListener('wheel', (e) => { + runAction(e.wheelDelta > 0 ? 'faster' : 'slower', document); + e.preventDefault(); + e.stopPropagation(); + }); + + shadow.querySelector('.draggable').addEventListener('mousedown', (e) => { runAction(e.target.dataset['action'], document); }); From 8e7963d02de8551cd2fa38db055c1e90ac7e587d Mon Sep 17 00:00:00 2001 From: Ivan Vyshnevskyi Date: Sat, 18 Mar 2017 21:53:48 +0200 Subject: [PATCH 05/11] Fix browser_action.default_icon paths in manifest.json --- manifest.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/manifest.json b/manifest.json index 10e95f0..4c2d187 100755 --- a/manifest.json +++ b/manifest.json @@ -14,10 +14,10 @@ "options_page": "options.html", "browser_action": { "default_icon": { - "19": "images/icon19.png", - "38": "images/icon38.png" + "19": "icons/icon19.png", + "38": "icons/icon38.png", + "48": "icons/icon48.png" }, - "default_icon": "icons/icon48.png", "default_popup": "popup.html" }, "content_scripts": [{ From ed6850b1ba578021b0c33fbdb0a00ddba232d030 Mon Sep 17 00:00:00 2001 From: Ivan Vyshnevskyi Date: Sun, 19 Mar 2017 01:15:33 +0200 Subject: [PATCH 06/11] Update screenshot in readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 63627db..7552190 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Many viewers report that [accelerated viewing keeps their attention longer](http HTML5 video provides a native API to accelerate playback of any video. The problem is, many players either hide, or limit this functionality. For best results playback speed adjustments should be easy and frequent to match the pace and content being covered: we don't read at a fixed speed, and similarly, we need an easy way to accelerate the video, slow it down, and quickly rewind the last point to listen to it a few more times. -![Player](https://lh5.googleusercontent.com/ubqr74funulW1oj_SEDFQBpj_hE26j3aR5G9wfoAZlo1u029_vM9_tlV_f27AvTVWXcB2Hfy81I=s640) +![Player](https://cloud.githubusercontent.com/assets/2400185/24076745/5723e6ae-0c41-11e7-820c-1d8e814a2888.png) #### *[Install Chrome Extension](https://chrome.google.com/webstore/detail/video-speed-controller/nffaoalbilbmmfgbnbgppjihopabppdk)* From ccdc4a95238da6f62b7a1458f4b1df5948e0b30c Mon Sep 17 00:00:00 2001 From: Ilya Grigorik Date: Thu, 16 Mar 2017 19:37:07 +1100 Subject: [PATCH 07/11] bump to 0.4.6 --- manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.json b/manifest.json index 4c2d187..3698dd1 100755 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "name": "Video Speed Controller", "short_name": "videospeed", - "version": "0.4.5", + "version": "0.4.6", "manifest_version": 2, "description": "Speed up, slow down, advance and rewind any HTML5 video with quick shortcuts.", "homepage_url": "https://github.com/igrigorik/videospeed", From f9d4e556df0b32572c7983dc607527e54c539da0 Mon Sep 17 00:00:00 2001 From: Ilya Grigorik Date: Sun, 19 Mar 2017 10:50:10 -0700 Subject: [PATCH 08/11] remove lynda.com from blacklist Closes #180. --- manifest.json | 1 - 1 file changed, 1 deletion(-) diff --git a/manifest.json b/manifest.json index 3698dd1..4320baf 100755 --- a/manifest.json +++ b/manifest.json @@ -27,7 +27,6 @@ "https://plus.google.com/hangouts/*", "https://hangouts.google.com/hangouts/*", "https://teamtreehouse.com/*", - "https://www.lynda.com/*", "http://www.hitbox.tv/*" ], "css": [ "inject.css" ], From d36a82eea514d58803193da0f0b7ae9f006ef67d Mon Sep 17 00:00:00 2001 From: xftroxgpx Date: Tue, 11 Apr 2017 12:50:53 +0200 Subject: [PATCH 09/11] speed inc. from 0.06 to 0.10 not 0.16, fixes #198 --- inject.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inject.js b/inject.js index 956355a..443ec20 100644 --- a/inject.js +++ b/inject.js @@ -296,7 +296,7 @@ chrome.extension.sendMessage({}, function(response) { } else if (action === 'faster') { // Maximum playback speed in Chrome is set to 16: // 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 < 0.1 ? 0.0 : v.playbackRate) + tc.settings.speedStep, 16); v.playbackRate = Number(s.toFixed(2)); } else if (action === 'slower') { // Audio playback is cut at 0.05: From 2ff37416c5f7334233817e123cf5aa1dd2f2385b Mon Sep 17 00:00:00 2001 From: "J. B. Rainsberger" Date: Sun, 16 Apr 2017 19:18:38 -0300 Subject: [PATCH 10/11] We can now use IDEA for development. --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index e43b0f9..46addde 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,4 @@ .DS_Store + +# IntelliJ IDEA +.idea/ From b3db296c0a44632da0762fe08fb8e268976fb2e6 Mon Sep 17 00:00:00 2001 From: "J. B. Rainsberger" Date: Tue, 18 Apr 2017 02:03:29 -0300 Subject: [PATCH 11/11] Playback at "fast" speed (#203) Added new custom key ("G") to jump to a favorite "fast speed", which is also configurable. --- inject.js | 12 ++++++++++++ options.html | 8 ++++++++ options.js | 12 ++++++++++++ 3 files changed, 32 insertions(+) diff --git a/inject.js b/inject.js index 58996e0..fd75f3c 100644 --- a/inject.js +++ b/inject.js @@ -4,6 +4,7 @@ chrome.extension.sendMessage({}, function(response) { speed: 1.0, // default 1x resetSpeed: 1.0, // default 1x speedStep: 0.1, // default 0.1x + fastSpeed: 1.8, // default 1.8x rewindTime: 10, // default 10s advanceTime: 10, // default 10s resetKeyCode: 82, // default: R @@ -12,6 +13,7 @@ chrome.extension.sendMessage({}, function(response) { rewindKeyCode: 90, // default: Z advanceKeyCode: 88, // default: X displayKeyCode: 86, // default: V + fastKeyCode: 71, // default: G rememberSpeed: false, // default: false startHidden: false, // default: false blacklist: ` @@ -27,12 +29,14 @@ chrome.extension.sendMessage({}, function(response) { tc.settings.speed = Number(storage.speed); tc.settings.resetSpeed = Number(storage.resetSpeed); tc.settings.speedStep = Number(storage.speedStep); + tc.settings.fastSpeed = Number(storage.fastSpeed); tc.settings.rewindTime = Number(storage.rewindTime); tc.settings.advanceTime = Number(storage.advanceTime); tc.settings.resetKeyCode = Number(storage.resetKeyCode); tc.settings.rewindKeyCode = Number(storage.rewindKeyCode); tc.settings.slowerKeyCode = Number(storage.slowerKeyCode); tc.settings.fasterKeyCode = Number(storage.fasterKeyCode); + tc.settings.fastKeyCode = Number(storage.fastKeyCode); tc.settings.displayKeyCode = Number(storage.displayKeyCode); tc.settings.advanceKeyCode = Number(storage.advanceKeyCode); tc.settings.rememberSpeed = Boolean(storage.rememberSpeed); @@ -226,6 +230,8 @@ chrome.extension.sendMessage({}, function(response) { runAction('reset', document, true) } else if (keyCode == tc.settings.displayKeyCode) { runAction('display', document, true) + } else if (keyCode == tc.settings.fastKeyCode) { + runAction('fast', document, true); } return false; @@ -328,11 +334,17 @@ chrome.extension.sendMessage({}, function(response) { controller.classList.toggle('vsc-hidden'); } else if (action === 'drag') { handleDrag(v, controller); + } else if (action === 'fast') { + playVideoAtFastSpeed(v); } } }); } + function playVideoAtFastSpeed(video) { + video.playbackRate = tc.settings.fastSpeed; + } + function handleDrag(video, controller) { const parentElement = controller.parentElement, shadowController = controller.shadowRoot.querySelector('#controller'); diff --git a/options.html b/options.html index 0e2ab43..33bc8a5 100644 --- a/options.html +++ b/options.html @@ -32,6 +32,10 @@ +
+ + +
@@ -56,6 +60,10 @@
+
+ + +
diff --git a/options.js b/options.js index ab7af96..c1136e0 100644 --- a/options.js +++ b/options.js @@ -3,9 +3,11 @@ var tcDefaults = { speedStep: 0.1, // default 0.1x rewindTime: 10, // default 10s advanceTime: 10, // default 10s + fastSpeed: 1.8, // default 1.8x resetKeyCode: 82, // default: R slowerKeyCode: 83, // default: S fasterKeyCode: 68, // default: D + fastKeyCode: 71, // default: G rewindKeyCode: 90, // default: Z advanceKeyCode: 88, // default: X displayKeyCode: 86, // default: V @@ -92,11 +94,13 @@ function save_options() { var speedStep = document.getElementById('speedStep').value; var rewindTime = document.getElementById('rewindTime').value; var advanceTime = document.getElementById('advanceTime').value; + var fastSpeed = document.getElementById('fastSpeed').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 fastKeyCode = document.getElementById('fastKeyInput').keyCode; var displayKeyCode = document.getElementById('displayKeyInput').keyCode; var rememberSpeed = document.getElementById('rememberSpeed').checked; var startHidden = document.getElementById('startHidden').checked; @@ -105,22 +109,26 @@ function save_options() { speedStep = isNaN(speedStep) ? tcDefaults.speedStep : Number(speedStep); rewindTime = isNaN(rewindTime) ? tcDefaults.rewindTime : Number(rewindTime); advanceTime = isNaN(advanceTime) ? tcDefaults.advanceTime : Number(advanceTime); + fastSpeed = isNaN(fastSpeed) ? tcDefaults.fastSpeed : Number(fastSpeed); 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; + fastKeyCode = isNaN(fastKeyCode) ? tcDefaults.fastKeyCode : fastKeyCode; displayKeyCode = isNaN(displayKeyCode) ? tcDefaults.displayKeyCode : displayKeyCode; chrome.storage.sync.set({ speedStep: speedStep, rewindTime: rewindTime, advanceTime: advanceTime, + fastSpeed: fastSpeed, resetKeyCode: resetKeyCode, rewindKeyCode: rewindKeyCode, advanceKeyCode: advanceKeyCode, slowerKeyCode: slowerKeyCode, fasterKeyCode: fasterKeyCode, + fastKeyCode: fastKeyCode, displayKeyCode: displayKeyCode, rememberSpeed: rememberSpeed, startHidden: startHidden, @@ -141,11 +149,13 @@ function restore_options() { document.getElementById('speedStep').value = storage.speedStep.toFixed(2); document.getElementById('rewindTime').value = storage.rewindTime; document.getElementById('advanceTime').value = storage.advanceTime; + document.getElementById('fastSpeed').value = storage.fastSpeed; updateShortcutInputText('resetKeyInput', storage.resetKeyCode); updateShortcutInputText('rewindKeyInput', storage.rewindKeyCode); updateShortcutInputText('advanceKeyInput', storage.advanceKeyCode); updateShortcutInputText('slowerKeyInput', storage.slowerKeyCode); updateShortcutInputText('fasterKeyInput', storage.fasterKeyCode); + updateShortcutInputText('fastKeyInput', storage.fastKeyCode); updateShortcutInputText('displayKeyInput', storage.displayKeyCode); document.getElementById('rememberSpeed').checked = storage.rememberSpeed; document.getElementById('startHidden').checked = storage.startHidden; @@ -182,9 +192,11 @@ document.addEventListener('DOMContentLoaded', function () { initShortcutInput('advanceKeyInput'); initShortcutInput('slowerKeyInput'); initShortcutInput('fasterKeyInput'); + initShortcutInput('fastKeyInput'); initShortcutInput('displayKeyInput'); document.getElementById('rewindTime').addEventListener('keypress', inputFilterNumbersOnly); document.getElementById('advanceTime').addEventListener('keypress', inputFilterNumbersOnly); document.getElementById('speedStep').addEventListener('keypress', inputFilterNumbersOnly); + document.getElementById('fastSpeed').addEventListener('keypress', inputFilterNumbersOnly); })