Compare commits

..
17 Commits
Author SHA1 Message Date
joshpatra fc45d02541 Release v6.0.5 2026-07-26 11:52:35 -04:00
joshpatra f61f1fdd97 Release v6.0.4 2026-07-26 11:23:34 -04:00
joshpatra de6598dfde chore(release): release v5.3.0 2026-05-24 23:34:23 -04:00
joshpatra 7e1678ec4b Merge pull request #34 from netjeff/main
Minor improvements to README.md
2026-04-21 10:30:27 -04:00
netjeff 113c3b2896 Minor improvements to README.md
Delete chrome store link to original upstream Video Speed Controller by igrigorik.
Also some minor formatting improvements.
2026-04-16 10:43:57 -06:00
joshpatra d6f9a03946 Release v5.2.8 2026-04-12 14:17:56 -04:00
joshpatra 014e05998d Release v5.2.7 2026-04-12 14:15:56 -04:00
joshpatra 1a7dc3097e Release v5.2.4 2026-04-10 15:04:29 -04:00
joshpatra c626aca89c Release v5.2.1 2026-04-09 16:17:27 -04:00
joshpatra 05b8456e94 release: v5.1.7 2026-04-02 22:37:10 -04:00
joshpatra 0cbfac4b82 Release v5.1.5 2026-04-02 18:08:33 -04:00
joshpatra b3707c0803 Release v5.1.4 2026-04-02 18:07:09 -04:00
joshpatra fb25c56230 Merge beta 2026-04-01 15:33:11 -04:00
joshpatra 4efc3e0acc Merge beta 2026-04-01 11:29:16 -04:00
joshpatra 7c0a188cd3 Merge beta 2026-04-01 11:19:08 -04:00
joshpatra d7ce1fd000 Merge beta 2026-03-31 15:04:56 -04:00
joshpatra 313832015b Merge beta 2026-03-31 15:01:18 -04:00
3 changed files with 45 additions and 3 deletions
+6 -2
View File
@@ -3757,7 +3757,7 @@ function defineVideoController() {
// Only hide if the video is not paused
// (Many players keep controls visible while paused)
// However, the user said "Reveal on every mouse and keyboard input"
// and "auto-hidden after timespan".
// and "auto-hidden after timespan".
// We'll follow the timer strictly.
wrapper.classList.add("vsc-idle-hidden");
log("Generic hide: controller hidden due to inactivity", 5);
@@ -4314,7 +4314,11 @@ function clearPendingInitialization(doc) {
function tryInitializeDocument(doc, forceReinit) {
if (!doc) return false;
if ((!forceReinit && vscInitializedDocuments.has(doc)) || !doc.body) {
if (
!tc.runtimeSettingsHydrated ||
(!forceReinit && vscInitializedDocuments.has(doc)) ||
!doc.body
) {
return false;
}
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "Speeder",
"short_name": "Speeder",
"version": "6.0.4",
"version": "6.0.5",
"manifest_version": 2,
"description": "Speed up, slow down, advance and rewind HTML5 audio/video with shortcuts (New and improved version of \"Video Speed Controller\")",
"homepage_url": "https://github.com/SoPat712/speeder",
+38
View File
@@ -394,6 +394,44 @@ describe("inject.js media/controller lifecycle regressions", () => {
expect(video.currentTime).toBe(63);
});
it("finishes a forced SPA initialization after settings hydration", async () => {
vi.useFakeTimers();
bootInject({
url: "https://www.youtube.com/",
syncGetDelayMs: 1000
});
const mount = document.createElement("div");
const video = document.createElement("video");
const rect = makeRect(0, 0, 1280, 720);
mount.id = "movie_player";
video.src = "blob:https://www.youtube.com/main-player";
setRect(mount, rect);
setBoxMetrics(mount, rect.width, rect.height);
setRect(video, rect);
mount.appendChild(video);
document.body.appendChild(mount);
document.dispatchEvent(new Event("speeder-location-changed"));
await vi.advanceTimersByTimeAsync(300);
expect(window.tc.runtimeSettingsHydrated).toBe(false);
expect(video.vsc).toBeUndefined();
await vi.advanceTimersByTimeAsync(700);
await settleLifecycle();
expect(window.tc.runtimeSettingsHydrated).toBe(true);
expect(video.vsc).toBeTruthy();
video.dispatchEvent(
new KeyboardEvent("keydown", {
bubbles: true,
code: "KeyD",
key: "d"
})
);
expect(video.playbackRate).toBe(1.1);
});
it("skips ambient loops by default and includes them when explicitly enabled", async () => {
bootInject();
await settleLifecycle();