您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
To syntax hightlight GreasyFork Code by CodeMirror
当前为
- // ==UserScript==
- // @name GreasyFork Code: Syntax Highlight by CodeMirror
- // @namespace Violentmonkey Scripts
- // @match https://greasyfork.org/*
- // @grant none
- // @version 0.1.0
- // @author CY Fung
- // @description To syntax hightlight GreasyFork Code by CodeMirror
- // @run-at document-start
- // @inject-into page
- // @unwrap
- // @license MIT
- // ==/UserScript==
- (() => {
- let byPass = true;
- let documentReady = new Promise(resolve => {
- Promise.resolve().then(() => {
- if (document.readyState !== 'loading') {
- resolve();
- } else {
- window.addEventListener("DOMContentLoaded", resolve, false);
- }
- });
- });
- // Function to load CodeMirror library
- function loadCodeMirror(arr) {
- const promises = arr.map((href) => {
- return new Promise(resolve => {
- const script = document.createElement('script');
- script.src = href;
- script.onload = () => {
- resolve(script);
- };
- document.head.appendChild(script);
- });
- });
- return Promise.all(promises);
- }
- // Function to load CodeMirror CSS
- function loadCodeMirrorCSS(href) {
- const link = document.createElement('link');
- link.rel = 'stylesheet';
- link.href = href;
- document.head.appendChild(link);
- }
- async function runBlock(codeBlock){
- let textarea = document.createElement('textarea');
- textarea.value = `${codeBlock.textContent}`;
- textarea.readOnly = true;
- textarea.id = 'editor651';
- textarea.style.width = '100%';
- textarea.style.height = '400px';
- codeBlock.replaceWith(textarea);
- codeBlock.remove();
- await Promise.resolve();
- await new Promise(r=>setTimeout(r, 20));
- let editor651 = CodeMirror.fromTextArea(document.querySelector('#editor651'), {
- mode: "javascript",
- readOnly: true,
- styleActiveLine: true,
- lineNumbers: true,
- });
- editor651.save();
- }
- // Main function to apply CodeMirror syntax highlighting to pre elements
- function applyCodeMirrorSyntaxHighlighting() {
- const codeBlocks = document.querySelectorAll('pre.prettyprint.linenums.lang-js');
- // Check if CodeMirror is loaded
- if (typeof CodeMirror !== 'undefined') {
- codeBlocks.forEach(runBlock);
- } else {
- console.error('CodeMirror library is not loaded. Syntax highlighting cannot be applied.');
- }
- }
- async function doAction() {
- await new Promise(r => setTimeout(r, 0));
- if (mgg) {
- byPass = false;
- document.head.appendChild(document.createElement('style')).textContent = `
- body {
- display: flex;
- flex-direction: column;
- height: 100vh;
- }
- body > div:last-child{
- height:0;
- flex-grow:1;
- display: flex;
- flex-direction:column;
- }
- body > div:last-child > #script-info:last-child{
- height:0;
- flex-grow:1;
- display: flex;
- flex-direction:column;
- }
- body > div:last-child > #script-info:last-child > #script-content:last-child{
- height:0;
- flex-grow:1;
- display: flex;
- flex-direction:column;
- }
- body > div:last-child > #script-info:last-child > #script-content:last-child > .code-container:last-child{
- height:0;
- flex-grow:1;
- display: flex;
- flex-direction:column;
- }
- body > div:last-child > #script-info:last-child > #script-content:last-child > .code-container:last-child > textarea:last-child{
- height:0;
- flex-grow:1;
- display: flex;
- flex-direction:column;
- }
- body > div:last-child > #script-info:last-child > #script-content:last-child > .code-container:last-child > .CodeMirror:last-child{
- height:0;
- flex-grow:1;
- display: flex;
- flex-direction:column;
- }
- `;
- await loadCodeMirror(['https://cdn.jsdelivr.net/npm/codemirror@5.65.14/lib/codemirror.min.js']);
- await loadCodeMirror([
- 'https://cdn.jsdelivr.net/npm/codemirror@5.65.14/mode/javascript/javascript.min.js',
- 'https://cdn.jsdelivr.net/npm/codemirror@5.65.14/addon/selection/active-line.min.js']);
- loadCodeMirrorCSS('https://cdn.jsdelivr.net/npm/codemirror@5.65.14/lib/codemirror.min.css');
- await new Promise(r => setTimeout(r, 0));
- applyCodeMirrorSyntaxHighlighting();
- }
- }
- let mz = HTMLElement.prototype.getElementsByTagName
- let mzd = Document.prototype.getElementsByTagName
- let mgg = 0;
- async function mTz() {
- if (mgg) return;
- mgg = 1;
- byPass = false;
- documentReady.then(doAction);
- }
- function getElementsByTagName(tag) {
- if (tag === 'pre' || tag === 'code' || tag === 'xmp') {
- if (byPass) {
- setTimeout(mTz, 10)
- return [];
- }
- }
- if (this instanceof Document) {
- return mzd.call(this, tag);
- } else {
- return mz.call(this, tag);
- }
- }
- HTMLElement.prototype.getElementsByTagName = getElementsByTagName
- Document.prototype.getElementsByTagName = getElementsByTagName
- /*
- let mz= function(evt){
- if(evt && evt.type ==='readystatechange') return;
- return EventTarget.prototype.addEventListener.apply(this,arguments)
- };
- window.addEventListener = mz
- document.addEventListener = mz;
- */
- })();