mirror of
https://github.com/ajayyy/SponsorBlock.git
synced 2025-12-08 20:47:11 +03:00
Move animation utils to maze utils
This commit is contained in:
Submodule maze-utils updated: 27db39e39b...65609595a9
@@ -6,7 +6,7 @@ import ThumbsUpSvg from "../svg-icons/thumbs_up_svg";
|
|||||||
import ThumbsDownSvg from "../svg-icons/thumbs_down_svg";
|
import ThumbsDownSvg from "../svg-icons/thumbs_down_svg";
|
||||||
import { downvoteButtonColor, SkipNoticeAction } from "../utils/noticeUtils";
|
import { downvoteButtonColor, SkipNoticeAction } from "../utils/noticeUtils";
|
||||||
import { VoteResponse } from "../messageTypes";
|
import { VoteResponse } from "../messageTypes";
|
||||||
import { AnimationUtils } from "../utils/animationUtils";
|
import { AnimationUtils } from "../../maze-utils/src/animationUtils";
|
||||||
import { Tooltip } from "../render/Tooltip";
|
import { Tooltip } from "../render/Tooltip";
|
||||||
import { getErrorMessage } from "../../maze-utils/src/formating";
|
import { getErrorMessage } from "../../maze-utils/src/formating";
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import ThumbsUpSvg from "../svg-icons/thumbs_up_svg";
|
|||||||
import ThumbsDownSvg from "../svg-icons/thumbs_down_svg";
|
import ThumbsDownSvg from "../svg-icons/thumbs_down_svg";
|
||||||
import { downvoteButtonColor, SkipNoticeAction } from "../utils/noticeUtils";
|
import { downvoteButtonColor, SkipNoticeAction } from "../utils/noticeUtils";
|
||||||
import { VoteResponse } from "../messageTypes";
|
import { VoteResponse } from "../messageTypes";
|
||||||
import { AnimationUtils } from "../utils/animationUtils";
|
import { AnimationUtils } from "../../maze-utils/src/animationUtils";
|
||||||
import { Tooltip } from "../render/Tooltip";
|
import { Tooltip } from "../render/Tooltip";
|
||||||
import { getErrorMessage } from "../../maze-utils/src/formating";
|
import { getErrorMessage } from "../../maze-utils/src/formating";
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ import { SkipButtonControlBar } from "./js-components/skipButtonControlBar";
|
|||||||
import { getStartTimeFromUrl } from "./utils/urlParser";
|
import { getStartTimeFromUrl } from "./utils/urlParser";
|
||||||
import { getControls, getExistingChapters, getHashParams, isPlayingPlaylist, isVisible } from "./utils/pageUtils";
|
import { getControls, getExistingChapters, getHashParams, isPlayingPlaylist, isVisible } from "./utils/pageUtils";
|
||||||
import { CategoryPill } from "./render/CategoryPill";
|
import { CategoryPill } from "./render/CategoryPill";
|
||||||
import { AnimationUtils } from "./utils/animationUtils";
|
import { AnimationUtils } from "../maze-utils/src/animationUtils";
|
||||||
import { GenericUtils } from "./utils/genericUtils";
|
import { GenericUtils } from "./utils/genericUtils";
|
||||||
import { logDebug, logWarn } from "./utils/logger";
|
import { logDebug, logWarn } from "./utils/logger";
|
||||||
import { importTimes } from "./utils/exporter";
|
import { importTimes } from "./utils/exporter";
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import Config from "../config";
|
import Config from "../config";
|
||||||
import { SegmentUUID, SponsorTime } from "../types";
|
import { SegmentUUID, SponsorTime } from "../types";
|
||||||
import { getSkippingText } from "../utils/categoryUtils";
|
import { getSkippingText } from "../utils/categoryUtils";
|
||||||
import { AnimationUtils } from "../utils/animationUtils";
|
import { AnimationUtils } from "../../maze-utils/src/animationUtils";
|
||||||
import { keybindToString } from "../../maze-utils/src/config";
|
import { keybindToString } from "../../maze-utils/src/config";
|
||||||
import { isMobileControlsOpen } from "../utils/mobileUtils";
|
import { isMobileControlsOpen } from "../utils/mobileUtils";
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ import {
|
|||||||
VoteResponse,
|
VoteResponse,
|
||||||
} from "./messageTypes";
|
} from "./messageTypes";
|
||||||
import { showDonationLink } from "./utils/configUtils";
|
import { showDonationLink } from "./utils/configUtils";
|
||||||
import { AnimationUtils } from "./utils/animationUtils";
|
import { AnimationUtils } from "../maze-utils/src/animationUtils";
|
||||||
import { shortCategoryName } from "./utils/categoryUtils";
|
import { shortCategoryName } from "./utils/categoryUtils";
|
||||||
import { localizeHtmlPage } from "../maze-utils/src/setup";
|
import { localizeHtmlPage } from "../maze-utils/src/setup";
|
||||||
import { exportTimes } from "./utils/exporter";
|
import { exportTimes } from "./utils/exporter";
|
||||||
|
|||||||
@@ -1,78 +0,0 @@
|
|||||||
/**
|
|
||||||
* Starts a spinning animation and returns a function to be called when it should be stopped
|
|
||||||
* The callback will be called when the animation is finished
|
|
||||||
* It waits until a full rotation is complete
|
|
||||||
*/
|
|
||||||
function applyLoadingAnimation(element: HTMLElement, time: number, callback?: () => void): () => Promise<void> {
|
|
||||||
element.style.animation = `rotate ${time}s 0s infinite`;
|
|
||||||
|
|
||||||
return async () => new Promise((resolve) => {
|
|
||||||
// Make the animation finite
|
|
||||||
element.style.animation = `rotate ${time}s`;
|
|
||||||
|
|
||||||
// When the animation is over, hide the button
|
|
||||||
const animationEndListener = () => {
|
|
||||||
if (callback) callback();
|
|
||||||
|
|
||||||
element.style.animation = "none";
|
|
||||||
|
|
||||||
element.removeEventListener("animationend", animationEndListener);
|
|
||||||
|
|
||||||
resolve();
|
|
||||||
};
|
|
||||||
|
|
||||||
element.addEventListener("animationend", animationEndListener);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function setupCustomHideAnimation(element: Element, container: Element, enabled = true, rightSlide = true): { hide: () => void; show: () => void } {
|
|
||||||
if (enabled) element.classList.add("autoHiding");
|
|
||||||
element.classList.add("sbhidden");
|
|
||||||
element.classList.add("animationDone");
|
|
||||||
if (!rightSlide) element.classList.add("autoHideLeft");
|
|
||||||
|
|
||||||
let mouseEntered = false;
|
|
||||||
|
|
||||||
return {
|
|
||||||
hide: () => {
|
|
||||||
mouseEntered = false;
|
|
||||||
if (element.classList.contains("autoHiding")) {
|
|
||||||
element.classList.add("sbhidden");
|
|
||||||
}
|
|
||||||
},
|
|
||||||
show: () => {
|
|
||||||
mouseEntered = true;
|
|
||||||
element.classList.remove("animationDone");
|
|
||||||
|
|
||||||
// Wait for next event loop
|
|
||||||
setTimeout(() => {
|
|
||||||
if (mouseEntered) element.classList.remove("sbhidden")
|
|
||||||
}, 10);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function setupAutoHideAnimation(element: Element, container: Element, enabled = true, rightSlide = true): void {
|
|
||||||
const { hide, show } = this.setupCustomHideAnimation(element, container, enabled, rightSlide);
|
|
||||||
|
|
||||||
container.addEventListener("mouseleave", () => hide());
|
|
||||||
container.addEventListener("mouseenter", () => show());
|
|
||||||
}
|
|
||||||
|
|
||||||
function enableAutoHideAnimation(element: Element): void {
|
|
||||||
element.classList.add("autoHiding");
|
|
||||||
element.classList.add("sbhidden");
|
|
||||||
}
|
|
||||||
|
|
||||||
function disableAutoHideAnimation(element: Element): void {
|
|
||||||
element.classList.remove("autoHiding");
|
|
||||||
element.classList.remove("sbhidden");
|
|
||||||
}
|
|
||||||
|
|
||||||
export const AnimationUtils = {
|
|
||||||
applyLoadingAnimation,
|
|
||||||
setupAutoHideAnimation,
|
|
||||||
setupCustomHideAnimation,
|
|
||||||
enableAutoHideAnimation,
|
|
||||||
disableAutoHideAnimation
|
|
||||||
};
|
|
||||||
Reference in New Issue
Block a user