您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Highlight code in YouTube comments
当前为
- // ==UserScript==
- // @name YouTube Code Highlighter
- // @namespace https://greasyfork.org/ru/users/901750-gooseob
- // @version 1.0.3
- // @description Highlight code in YouTube comments
- // @author GooseOb
- // @license MIT
- // @require https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js
- // @match https://www.youtube.com/*
- // @icon https://www.google.com/s2/favicons?sz=64&domain=youtube.com
- // ==/UserScript==
- (function(){// index.ts
- var until = (getItem, check, msToWait = 1e4, msReqTimeout = 20) => new Promise((res, rej) => {
- const reqLimit = msToWait / msReqTimeout;
- let i = 0;
- const interval = setInterval(() => {
- if (i++ > reqLimit)
- exit(rej);
- const item = getItem();
- if (!check(item))
- return;
- exit(() => res(item));
- }, msReqTimeout);
- const exit = (cb) => {
- clearInterval(interval);
- cb();
- };
- });
- var untilAppear = (getItem, msToWait) => until(getItem, Boolean, msToWait);
- untilAppear(() => document.getElementById("comments")).then((comments) => {
- let isCSSLoaded = false;
- const visitedComments = new Set;
- const loadCSS = () => {
- fetch("https://cdn.jsdelivr.net/npm/highlight.js/styles/atom-one-dark.css").then((r) => r.text()).then((cssText) => {
- document.head.appendChild(document.createElement("style")).innerHTML = cssText;
- });
- };
- const _highlighter = {
- createHTML: (code) => code.replace(/```(\S+)\n(.+?)```/gs, (_$0, $1, $2) => `<code>\`\`\`${$1}\n${hljs.highlight($2, { language: $1 }).value}\`\`\`</code>`)
- };
- const highlighter = window.trustedTypes && window.trustedTypes.createPolicy ? window.trustedTypes.createPolicy("highlightedCode", _highlighter) : _highlighter;
- setInterval(() => {
- for (const comment of comments.querySelectorAll("ytd-comment-view-model #content .yt-core-attributed-string")) {
- if (!visitedComments.has(comment) && /```\S+\n/.test(comment.textContent)) {
- visitedComments.add(comment);
- if (!isCSSLoaded) {
- loadCSS();
- isCSSLoaded = true;
- }
- comment.innerHTML = highlighter.createHTML(comment.textContent);
- }
- }
- }, 3000);
- });
- })()