Add tooltip about full video update

This commit is contained in:
Ajay
2022-01-06 20:08:12 -05:00
parent 2db35a624a
commit e9b217c685
6 changed files with 39 additions and 6 deletions

View File

@@ -849,8 +849,8 @@
"SponsorTimeEditScrollNewFeature": { "SponsorTimeEditScrollNewFeature": {
"message": "Use your mousewheel while hovering over the edit box to quickly adjust the time. Combinations of the ctrl or shift key can be used to fine tune the changes." "message": "Use your mousewheel while hovering over the edit box to quickly adjust the time. Combinations of the ctrl or shift key can be used to fine tune the changes."
}, },
"fillerNewFeature": { "categoryPillNewFeature": {
"message": "New! Skip tangents and jokes with the filler category. Enable in options" "message": "New! See when a video is entirely sponsored or self-promotion"
}, },
"dayAbbreviation": { "dayAbbreviation": {
"message": "d", "message": "d",

View File

@@ -586,6 +586,12 @@ input::-webkit-inner-spin-button {
max-width: 300px; max-width: 300px;
white-space: normal; white-space: normal;
line-height: 1.5em; line-height: 1.5em;
color: white;
font-size: 12px;
}
.sponsorBlockTooltip a {
color: white;
} }
.sponsorBlockTooltip::after { .sponsorBlockTooltip::after {

View File

@@ -80,6 +80,9 @@ chrome.runtime.onInstalled.addListener(function () {
const newUserID = utils.generateUserID(); const newUserID = utils.generateUserID();
//save this UUID //save this UUID
Config.config.userID = newUserID; Config.config.userID = newUserID;
// Don't show update notification
Config.config.categoryPillUpdate = true;
} }
}, 1500); }, 1500);
}); });

View File

@@ -53,6 +53,7 @@ interface SBConfig {
locked: string locked: string
}, },
scrollToEditTimeUpdate: boolean, scrollToEditTimeUpdate: boolean,
categoryPillUpdate: boolean,
// What categories should be skipped // What categories should be skipped
categorySelections: CategorySelection[], categorySelections: CategorySelection[],
@@ -205,6 +206,7 @@ const Config: SBObject = {
autoHideInfoButton: true, autoHideInfoButton: true,
autoSkipOnMusicVideos: false, autoSkipOnMusicVideos: false,
scrollToEditTimeUpdate: false, // false means the tooltip will be shown scrollToEditTimeUpdate: false, // false means the tooltip will be shown
categoryPillUpdate: false,
categorySelections: [{ categorySelections: [{
name: "sponsor" as Category, name: "sponsor" as Category,

View File

@@ -1,9 +1,11 @@
import * as React from "react"; import * as React from "react";
import * as ReactDOM from "react-dom"; import * as ReactDOM from "react-dom";
import CategoryPillComponent, { CategoryPillState } from "../components/CategoryPillComponent"; import CategoryPillComponent, { CategoryPillState } from "../components/CategoryPillComponent";
import Config from "../config";
import { VoteResponse } from "../messageTypes"; import { VoteResponse } from "../messageTypes";
import { Category, SegmentUUID, SponsorTime } from "../types"; import { Category, SegmentUUID, SponsorTime } from "../types";
import { GenericUtils } from "../utils/genericUtils"; import { GenericUtils } from "../utils/genericUtils";
import { Tooltip } from "./Tooltip";
export class CategoryPill { export class CategoryPill {
container: HTMLElement; container: HTMLElement;
@@ -79,7 +81,7 @@ export class CategoryPill {
} }
} }
setSegment(segment: SponsorTime): void { async setSegment(segment: SponsorTime): Promise<void> {
if (this.ref.current?.state?.segment !== segment) { if (this.ref.current?.state?.segment !== segment) {
const newState = { const newState = {
segment, segment,
@@ -92,7 +94,23 @@ export class CategoryPill {
} else { } else {
this.unsavedState = newState; this.unsavedState = newState;
} }
}
if (!Config.config.categoryPillUpdate) {
Config.config.categoryPillUpdate = true;
const watchDiv = await GenericUtils.wait(() => document.querySelector("#info.ytd-watch-flexy") as HTMLElement);
if (watchDiv) {
new Tooltip({
text: chrome.i18n.getMessage("categoryPillNewFeature"),
link: "https://blog.ajay.app/full-video-sponsorblock",
referenceNode: watchDiv,
prependElement: watchDiv.firstChild as HTMLElement,
bottomOffset: "-10px",
opacity: 0.95,
timeout: 50000
});
}
}
}
} }
} }

View File

@@ -8,6 +8,7 @@ export interface TooltipProps {
prependElement?: HTMLElement, // Element to append before prependElement?: HTMLElement, // Element to append before
bottomOffset?: string bottomOffset?: string
timeout?: number; timeout?: number;
opacity?: number;
} }
export class Tooltip { export class Tooltip {
@@ -18,11 +19,12 @@ export class Tooltip {
constructor(props: TooltipProps) { constructor(props: TooltipProps) {
props.bottomOffset ??= "70px"; props.bottomOffset ??= "70px";
props.opacity ??= 0.7;
this.text = props.text; this.text = props.text;
this.container = document.createElement('div'); this.container = document.createElement('div');
this.container.id = "sponsorTooltip" + props.text; this.container.id = "sponsorTooltip" + props.text;
this.container.style.display = "relative"; this.container.style.position = "relative";
if (props.prependElement) { if (props.prependElement) {
props.referenceNode.insertBefore(this.container, props.prependElement); props.referenceNode.insertBefore(this.container, props.prependElement);
@@ -34,8 +36,10 @@ export class Tooltip {
this.timer = setTimeout(() => this.close(), props.timeout * 1000); this.timer = setTimeout(() => this.close(), props.timeout * 1000);
} }
const backgroundColor = `rgba(28, 28, 28, ${props.opacity})`;
ReactDOM.render( ReactDOM.render(
<div style={{bottom: props.bottomOffset}} <div style={{bottom: props.bottomOffset, backgroundColor}}
className="sponsorBlockTooltip" > className="sponsorBlockTooltip" >
<div> <div>
<img className="sponsorSkipLogo sponsorSkipObject" <img className="sponsorSkipLogo sponsorSkipObject"