Skype New Bing 代码高亮

Skype 聊天文本的代码转义、高亮与缩进

当前为 2023-04-16 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Skype Code Highlight For New Bing
  3. // @name:zh-CN Skype New Bing 代码高亮
  4. // @namespace http://tampermonkey.net/
  5. // @version 0.2
  6. // @description Skype chat escaped, highlight, indented code
  7. // @description:zh-CN Skype 聊天文本的代码转义、高亮与缩进
  8. // @author Gaubee
  9. // @match https://web.skype.com/
  10. // @icon https://www.google.com/s2/favicons?sz=64&domain=skype.com
  11. // @grant GM_getResourceText
  12. // @grant GM_addStyle
  13. // @grant unsafeWindow
  14. // @license MIT
  15. // @require https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/highlight.min.js
  16.  
  17. // @require https://cdnjs.cloudflare.com/ajax/libs/prettier/2.8.7/standalone.min.js
  18. // @require https://cdnjs.cloudflare.com/ajax/libs/prettier/2.8.7/parser-angular.min.js
  19. // @require https://cdnjs.cloudflare.com/ajax/libs/prettier/2.8.7/parser-babel.min.js
  20. // @require https://cdnjs.cloudflare.com/ajax/libs/prettier/2.8.7/parser-espree.min.js
  21. // @require https://cdnjs.cloudflare.com/ajax/libs/prettier/2.8.7/parser-flow.min.js
  22. // @require https://cdnjs.cloudflare.com/ajax/libs/prettier/2.8.7/parser-glimmer.min.js
  23. // @require https://cdnjs.cloudflare.com/ajax/libs/prettier/2.8.7/parser-graphql.min.js
  24. // @require https://cdnjs.cloudflare.com/ajax/libs/prettier/2.8.7/parser-html.min.js
  25. // @require https://cdnjs.cloudflare.com/ajax/libs/prettier/2.8.7/parser-markdown.min.js
  26. // @require https://cdnjs.cloudflare.com/ajax/libs/prettier/2.8.7/parser-meriyah.min.js
  27. // @require https://cdnjs.cloudflare.com/ajax/libs/prettier/2.8.7/parser-postcss.min.js
  28. // @require https://cdnjs.cloudflare.com/ajax/libs/prettier/2.8.7/parser-typescript.min.js
  29. // @require https://cdnjs.cloudflare.com/ajax/libs/prettier/2.8.7/parser-yaml.min.js
  30.  
  31. // @resource HL_THEME https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/styles/github-dark.min.css
  32.  
  33. // ==/UserScript==
  34.  
  35. (function () {
  36. "use strict";
  37. GM_addStyle(GM_getResourceText("HL_THEME"));
  38. Object.assign(unsafeWindow, { hljs, prettier });
  39.  
  40. const effectedEles = new WeakSet();
  41. function fix() {
  42. const scrollView = document.querySelector(
  43. `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`
  44. );
  45. const eles = [].slice.call(
  46. scrollView.querySelectorAll('[style*="user-select: text;"]')
  47. );
  48. const loop = (eles) => {
  49. for (const ele of eles) {
  50. /// 还在输入中
  51. if(ele.textContent.endsWith('...')) {
  52. break;
  53. }
  54. /// 已经处理过了
  55. if (effectedEles.has(ele)) {
  56. break;
  57. }
  58. effectedEles.add(ele);
  59.  
  60. if (ele.children.lenght > 0) {
  61. continue;
  62. }
  63. /// 消除转移符号
  64. ele.innerHTML = ele.textContent;
  65. /// 检测语法
  66. let code = ele.textContent;
  67. let hlres = hljs.highlightAuto(code);
  68. if (hlres.relevance < 2) {
  69. continue;
  70. }
  71.  
  72. /// 强制格式化后再次高亮
  73. try {
  74. code = prettier.format(code, {
  75. parser: hljs.language,
  76. plugins: prettierPlugins,
  77. });
  78. hlres = hljs.highlightAuto(code);
  79. } catch {}
  80. ele.innerHTML = hlres.value;
  81. ele.dataset.language = hlres.language;
  82. ele.dataset.relevance = hlres.relevance;
  83. }
  84. };
  85. loop(eles);
  86. loop(eles.reverse());
  87. }
  88. setInterval(() => {
  89. try {
  90. fix();
  91. } catch (e) {
  92. // console.warn(e);
  93. }
  94. }, 1000);
  95. // Your code here...
  96. })();