Skype chat escaped, highlight, indented code
// ==UserScript== // @name Skype Code Highlight For New Bing // @name:zh-CN Skype New Bing 代码高亮 // @namespace http://tampermonkey.net/ // @version 0.2 // @description Skype chat escaped, highlight, indented code // @description:zh-CN Skype 聊天文本的代码转义、高亮与缩进 // @author Gaubee // @match https://web.skype.com/ // @icon https://www.google.com/s2/favicons?sz=64&domain=skype.com // @grant GM_getResourceText // @grant GM_addStyle // @grant unsafeWindow // @license MIT // @require https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/highlight.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/prettier/2.8.7/standalone.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/prettier/2.8.7/parser-angular.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/prettier/2.8.7/parser-babel.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/prettier/2.8.7/parser-espree.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/prettier/2.8.7/parser-flow.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/prettier/2.8.7/parser-glimmer.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/prettier/2.8.7/parser-graphql.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/prettier/2.8.7/parser-html.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/prettier/2.8.7/parser-markdown.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/prettier/2.8.7/parser-meriyah.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/prettier/2.8.7/parser-postcss.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/prettier/2.8.7/parser-typescript.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/prettier/2.8.7/parser-yaml.min.js // @resource HL_THEME https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/styles/github-dark.min.css // ==/UserScript== (function () { "use strict"; GM_addStyle(GM_getResourceText("HL_THEME")); Object.assign(unsafeWindow, { hljs, prettier }); const effectedEles = new WeakSet(); function fix() { const scrollView = document.querySelector( `body > div.app-container > div > div > div:nth-child(1) > div > div > div > div:nth-child(1) > div > div:nth-child(2) > div > div > div > div:nth-child(2) > div > div > div > div > div:nth-child(1) > div > div:nth-child(1) > div:nth-child(1) > div > div > div.scrollViewport.scrollViewportV` ); const eles = [].slice.call( scrollView.querySelectorAll('[style*="user-select: text;"]') ); const loop = (eles) => { for (const ele of eles) { /// 还在输入中 if(ele.textContent.endsWith('...')) { break; } /// 已经处理过了 if (effectedEles.has(ele)) { break; } effectedEles.add(ele); if (ele.children.lenght > 0) { continue; } /// 消除转移符号 ele.innerHTML = ele.textContent; /// 检测语法 let code = ele.textContent; let hlres = hljs.highlightAuto(code); if (hlres.relevance < 2) { continue; } /// 强制格式化后再次高亮 try { code = prettier.format(code, { parser: hljs.language, plugins: prettierPlugins, }); hlres = hljs.highlightAuto(code); } catch {} ele.innerHTML = hlres.value; ele.dataset.language = hlres.language; ele.dataset.relevance = hlres.relevance; } }; loop(eles); loop(eles.reverse()); } setInterval(() => { try { fix(); } catch (e) { // console.warn(e); } }, 1000); // Your code here... })();