您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Renders markdown in user sent tickets
当前为
// ==UserScript== // @name Zendesk user ticket markdown // @name:de Zendesk Kundenticket Markdown // @namespace https://github.com/pke/zendesk-markdown // @version 1.3 // @license MIT // @description Renders markdown in user sent tickets // @description:de Stellt markdown in Kundentickets dar // @author Philipp Kursawe <[email protected]> // @match https://*.zendesk.com/agent/tickets/* // @icon https://www.google.com/s2/favicons?sz=64&domain=zendesk.com // @run-at document-end // @require https://cdn.jsdelivr.net/npm/[email protected]/marked.min.js#sha256-kFpV+TsMjV61DFL9NPLjLbXsG8KAH88oX1pf7xjkTQY= // @require https://cdn.jsdelivr.net/npm/[email protected]/dist/purify.min.js#sha256-QigBQMy2be3IqJD2ezKJUJ5gycSmyYlRHj2VGBuITpU= // @supportURL https://github.com/pke/zendesk-markdown/discussions // @grant GM_log // ==/UserScript== /* global marked, DOMPurify */ (function() { 'use strict'; function onChange(mutations, observer) { for (const mutation of mutations) { if (mutation.addedNodes.length) { for (const commentNode of document.getElementsByClassName("zd-comment")) { // Already processed nodes are marked for not processing them again if (!commentNode.markdowned) { // GM_log("Added node:", commentNode.textContent); // Grab the elements textContent which preserves indentions made // by " " constructs but strips all markup code. const unmarked = commentNode.textContent; const marked = marked.parse(unmarked); const clean = DOMPurify.sanitize(marked); if (typeof commentNode.setHTML === "function") { commentNode.setHTML(clean); } else { commentNode.innerHTML = clean; } commentNode.markdowned = true; } } } } } // Wait for .zd-comment nodes to be created and convert their textContent to markdown, then disconnect var observer = new MutationObserver(onChange); observer.observe(document.body, { subtree: true, childList: true }); })();