mirror of
https://github.com/ajayyy/SponsorBlock.git
synced 2025-12-10 05:27:03 +03:00
Add tooltip about full video update
This commit is contained in:
@@ -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",
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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"
|
||||||
|
|||||||
Reference in New Issue
Block a user