Merge remote-tracking branch 'remotes/upstream/master' into firefox-port

# Conflicts:
#	README.md
#	inject.css
#	inject.js
#	options.html
This commit is contained in:
codebicycle
2017-09-23 11:44:02 +03:00
4 changed files with 41 additions and 25 deletions

View File

@@ -29,6 +29,18 @@
top: 40px; top: 40px;
} }
/* Google Photos player */
/* Inline preview doesn't have any additional hooks, relying on Aria label */
a[aria-label^="Video"] .vsc-controller {
position: relative;
top: 35px;
}
/* Google Photos full-screen view */
#player .house-brand .vsc-controller {
position: relative;
top: 50px;
}
/* Netflix player */ /* Netflix player */
#netflix-player:not(.player-cinema-mode) .vsc-controller { #netflix-player:not(.player-cinema-mode) .vsc-controller {
position: relative; position: relative;
@@ -56,7 +68,6 @@ div.video-wrapper + div.target {
height: 0; height: 0;
} }
/* Fix black overlay on Kickstarter */ /* Fix black overlay on Kickstarter */
div.video-player.has_played.vertically_center:before, div.legacy-video-player.has_played.vertically_center:before { div.video-player.has_played.vertically_center:before, div.legacy-video-player.has_played.vertically_center:before {
content: none !important; content: none !important;

View File

@@ -69,10 +69,16 @@ chrome.runtime.sendMessage({}, function(response) {
}); });
target.addEventListener('ratechange', function(event) { target.addEventListener('ratechange', function(event) {
// Ignore ratechange events on unitialized videos.
// 0 == No information is available about the media resource.
if (event.target.readyState > 0) {
var speed = this.getSpeed(); var speed = this.getSpeed();
this.speedIndicator.textContent = speed; this.speedIndicator.textContent = speed;
tc.settings.speed = speed; tc.settings.speed = speed;
chrome.storage.local.set({'speed': speed}); chrome.storage.local.set({'speed': speed}, function() {
console.log('Speed setting saved: ' + speed);
});
}
}.bind(this)); }.bind(this));
target.playbackRate = tc.settings.speed; target.playbackRate = tc.settings.speed;
@@ -150,7 +156,7 @@ chrome.runtime.sendMessage({}, function(response) {
spanElem2.appendChild(buttonElem4) spanElem2.appendChild(buttonElem4)
var buttonElem5 = document.createElement('button') var buttonElem5 = document.createElement('button')
buttonElem5.setAttribute('data-action', 'close') buttonElem5.setAttribute('data-action', 'display')
buttonElem5.setAttribute('class', 'hideButton') buttonElem5.setAttribute('class', 'hideButton')
buttonElem5.appendChild(document.createTextNode('x')) buttonElem5.appendChild(document.createTextNode('x'))
spanElem2.appendChild(buttonElem5) spanElem2.appendChild(buttonElem5)
@@ -177,17 +183,13 @@ chrome.runtime.sendMessage({}, function(response) {
this.video.classList.add('vsc-initialized'); this.video.classList.add('vsc-initialized');
this.video.dataset['vscid'] = this.id; this.video.dataset['vscid'] = this.id;
switch (location.hostname) { switch (true) {
case 'www.amazon.com': case (location.hostname == 'www.amazon.com'):
case (/www\.hbogo\./).test(location.hostname):
// insert before parent to bypass overlay // insert before parent to bypass overlay
this.parent.parentElement.insertBefore(fragment, this.parent); this.parent.parentElement.insertBefore(fragment, this.parent);
break; break;
case 'www.facebook.com':
// set stacking context to same as parent's parent.
// + default fallthrough
this.parent.style.zIndex = 'auto';
default: default:
// Note: when triggered via a MutationRecord, it's possible that the // Note: when triggered via a MutationRecord, it's possible that the
// target is not the immediate parent. This appends the controller as // target is not the immediate parent. This appends the controller as
@@ -220,17 +222,22 @@ chrome.runtime.sendMessage({}, function(response) {
if (blacklisted) if (blacklisted)
return; return;
var readyStateCheckInterval = setInterval(function() { window.onload = () => initializeNow(document);
if (document && document.readyState === 'complete') { if (document) {
clearInterval(readyStateCheckInterval); if (document.readyState === "complete") {
initializeNow(document);
} else {
document.onreadystatechange = () => {
if (document.readyState === "complete") {
initializeNow(document); initializeNow(document);
} }
}, 10); }
}
}
} }
function initializeNow(document) { function initializeNow(document) {
// in theory, this should only run once, in practice.. // enforce init-once due to redundant callers
// that's not guaranteed, hence we enforce own init-once.
if (document.body.classList.contains('vsc-initialized')) { if (document.body.classList.contains('vsc-initialized')) {
return; return;
} }
@@ -250,7 +257,8 @@ chrome.runtime.sendMessage({}, function(response) {
var keyCode = event.keyCode; var keyCode = event.keyCode;
// Ignore if following modifier is active. // Ignore if following modifier is active.
if (event.getModifierState("Alt") if (!event.getModifierState
|| event.getModifierState("Alt")
|| event.getModifierState("Control") || event.getModifierState("Control")
|| event.getModifierState("Fn") || event.getModifierState("Fn")
|| event.getModifierState("Meta") || event.getModifierState("Meta")
@@ -367,9 +375,6 @@ chrome.runtime.sendMessage({}, function(response) {
v.playbackRate = Number(s.toFixed(2)); v.playbackRate = Number(s.toFixed(2));
} else if (action === 'reset') { } else if (action === 'reset') {
resetSpeed(v, 1.0); resetSpeed(v, 1.0);
} else if (action === 'close') {
v.classList.add('vsc-cancelled');
controller.remove();
} else if (action === 'display') { } else if (action === 'display') {
controller.classList.add('vsc-manual'); controller.classList.add('vsc-manual');
controller.classList.toggle('vsc-hidden'); controller.classList.toggle('vsc-hidden');

View File

@@ -1,7 +1,7 @@
{ {
"name": "Video Speed Controller", "name": "Video Speed Controller",
"short_name": "videospeed", "short_name": "videospeed",
"version": "0.4.8", "version": "0.4.9",
"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

@@ -41,7 +41,7 @@
<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"> <div class="row">
<label for="rememberSpeed">Hide controller by default</label> <label for="startHidden">Hide controller by default</label>
<input id="startHidden" type="checkbox"/> <input id="startHidden" type="checkbox"/>
</div> </div>
</section> </section>