mirror of
https://github.com/ajayyy/SponsorBlock.git
synced 2025-12-09 13:07:05 +03:00
Add mutation listener to update progress indicators
This commit is contained in:
@@ -224,18 +224,39 @@ class PreviewBar {
|
|||||||
for (const mutation of mutations) {
|
for (const mutation of mutations) {
|
||||||
const currentElement = mutation.target as HTMLElement;
|
const currentElement = mutation.target as HTMLElement;
|
||||||
if (mutation.type === "attributes" && mutation.attributeName === "style"
|
if (mutation.type === "attributes" && mutation.attributeName === "style"
|
||||||
&& currentElement.parentElement.classList.contains("ytp-chapter-hover-container")) {
|
&& currentElement.parentElement.classList.contains("ytp-progress-list")) {
|
||||||
changes[currentElement.classList[0]] = currentElement.style;
|
changes[currentElement.classList[0]] = currentElement.style;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// newChapterBar.querySelector(`.${className}).style.width = `calc(${width * someFactor}% - 4px)`;
|
// Go through each newly generated chapter bar and update the width based on changes array
|
||||||
|
const generatedChapterBar = document.querySelector(".sponsorBlockChapterBar");
|
||||||
|
if (generatedChapterBar) {
|
||||||
|
// Width reached so far in decimal percent
|
||||||
|
let cursor = 0;
|
||||||
|
|
||||||
|
const sections = generatedChapterBar.querySelectorAll(".ytp-chapter-hover-container") as NodeListOf<HTMLElement>;
|
||||||
|
for (const section of sections) {
|
||||||
|
const sectionWidth = parseFloat(section.getAttribute("decimal-width"));
|
||||||
|
|
||||||
|
for (const className in changes) {
|
||||||
|
const currentChangedElement = section.querySelector(`.${className}`) as HTMLElement;
|
||||||
|
if (currentChangedElement) {
|
||||||
|
const transformScale = parseFloat(changes[className].transform.match(/scaleX\(([0-9.]+?)\)/)[1]);
|
||||||
|
currentChangedElement.style.transform = `scaleX(${Math.min(1, (transformScale - cursor) / sectionWidth)}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cursor += sectionWidth;
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// observer.observe(chapterBar, {
|
observer.observe(chapterBar, {
|
||||||
// childList: true,
|
subtree: true,
|
||||||
// subtree: true
|
attributes: true,
|
||||||
// });
|
attributeFilter: ["style"] //TODO: check for left too
|
||||||
|
});
|
||||||
|
|
||||||
// Create it from cloning
|
// Create it from cloning
|
||||||
const newChapterBar = chapterBar.cloneNode(true) as HTMLElement;
|
const newChapterBar = chapterBar.cloneNode(true) as HTMLElement;
|
||||||
@@ -263,6 +284,7 @@ class PreviewBar {
|
|||||||
|
|
||||||
newBlankSection.style.marginRight = "2px";
|
newBlankSection.style.marginRight = "2px";
|
||||||
newBlankSection.style.width = `calc(${this.timeToPercentage(blankDuration)} - 2px)`;
|
newBlankSection.style.width = `calc(${this.timeToPercentage(blankDuration)} - 2px)`;
|
||||||
|
newBlankSection.setAttribute("decimal-width", String(this.timeToDecimal(blankDuration)));
|
||||||
newChapterBar.appendChild(newBlankSection);
|
newChapterBar.appendChild(newBlankSection);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -271,6 +293,7 @@ class PreviewBar {
|
|||||||
|
|
||||||
newSection.style.marginRight = "2px";
|
newSection.style.marginRight = "2px";
|
||||||
newSection.style.width = `calc(${this.timeToPercentage(duration)} - 2px)`;
|
newSection.style.width = `calc(${this.timeToPercentage(duration)} - 2px)`;
|
||||||
|
newSection.setAttribute("decimal-width", String(this.timeToDecimal(duration)));
|
||||||
newChapterBar.appendChild(newSection);
|
newChapterBar.appendChild(newSection);
|
||||||
|
|
||||||
if (segment.segment[1] < this.videoDuration) {
|
if (segment.segment[1] < this.videoDuration) {
|
||||||
@@ -281,7 +304,7 @@ class PreviewBar {
|
|||||||
|
|
||||||
newBlankSection.style.marginRight = "2px";
|
newBlankSection.style.marginRight = "2px";
|
||||||
newBlankSection.style.width = `calc(${this.timeToPercentage(blankDuration)} - 2px)`;
|
newBlankSection.style.width = `calc(${this.timeToPercentage(blankDuration)} - 2px)`;
|
||||||
console.log(blankDuration + "\t" + this.videoDuration)
|
newBlankSection.setAttribute("decimal-width", String(this.timeToDecimal(blankDuration)));
|
||||||
newChapterBar.appendChild(newBlankSection);
|
newChapterBar.appendChild(newBlankSection);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -361,6 +384,10 @@ class PreviewBar {
|
|||||||
return Math.min(100, time / this.videoDuration * 100) + '%';
|
return Math.min(100, time / this.videoDuration * 100) + '%';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
timeToDecimal(time: number): number {
|
||||||
|
return Math.min(1, time / this.videoDuration);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Approximate size on preview bar for smallest element (due to  )
|
* Approximate size on preview bar for smallest element (due to  )
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user