您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Hide the ugly backticks around code-formatted text on Hackpad.
// ==UserScript== // @name Hide backticks on Hackpad // @namespace http://zesty.ca/ // @version 1.2 // @description Hide the ugly backticks around code-formatted text on Hackpad. // @author Ka-Ping Yee // @match https://*.hackpad.com/* // @grant none // ==/UserScript== /* jshint -W097 */ 'use strict'; function addGlobalStyle(css) { var head, style; head = document.getElementsByTagName('head')[0]; if (!head) { return; } style = document.createElement('style'); style.type = 'text/css'; style.innerHTML = css; head.appendChild(style); } if (typeof ace !== 'undefined') { // Make backticks very small and almost invisible. We don't set them // to display: none because that screws up the editor; you still have to // be able to insert and delete backticks to control formatting. addGlobalStyle('span { font-weight: normal; opacity: 0.9; }'); addGlobalStyle('ul.listtype-code, div#sidediv, span.code { font-size: 95%; color: #600; }'); addGlobalStyle('span.code { border-radius: 0; margin: 0 !important; padding: 1px 3px !important; box-shadow: none; background: #f4f4f4; }'); addGlobalStyle('span.code.hidebackticks { user-select: none; font-size: 6px; font-family: arial; opacity: 0.2; margin: 0 -1px !important; padding: 1px 0 !important; }'); addGlobalStyle('ul.listtype-code { margin-left: 26px; background: #f4f4f4; line-height: 1.1; }'); addGlobalStyle('ul.listtype-code li { padding: 2px 3px; margin: 0 !important; }'); addGlobalStyle('div#sidediv div { color: #ddd !important; margin-top: -2px; }'); addGlobalStyle('a.lang-menu { border-bottom: none; color: #8c8; }'); var originalAceEditor = ace.editor; ace.editor = function(a, b) { var result = new originalAceEditor(a, b); var originalGetSpansForLine = result.getSpansForLine; result.getSpansForLine = function(dummy, appender) { originalGetSpansForLine.call(result, dummy, function(text, cls) { if (cls.match(/ code$/)) { // We can't delete the backticks altogether or the next // pass of the formatter won't be able to tell that the // text should still be monospaced. So, we make separate // spans for the backticks and use CSS to hide them. text = text.replace(/^`(.*)`$/, '$1'); appender('`', cls + ' hidebackticks'); appender(text, cls); appender('`', cls + ' hidebackticks'); } else appender(text, cls); }); }; return result; }; } // Whenever the user completes a text selection, this adjusts the ends of the // selection to avoid picking up leading or trailing backticks. document.body.addEventListener('mouseup', function() { var sel = window.getSelection(); if (sel.rangeCount === 0) return; var range = sel.getRangeAt(0); var start = range.startContainer, soff = range.startOffset; var end = range.endContainer, eoff = range.endOffset; if (!start || !end || start === end) return; while (true) { if (start === end) break; if (start.textContent.substring(soff).trim() === '' || start.parentNode.className.match(/ hidebackticks$/)) { start = start.parentNode.nextSibling.childNodes[0]; soff = 0; range.setStart(start, soff); continue; } if (end.textContent.substring(0, eoff).trim() === '' || end.parentNode.className.match(/ hidebackticks$/)) { end = end.parentNode.previousSibling.childNodes[0]; eoff = end.textContent.length; range.setEnd(end, eoff); continue; } break; } sel.empty(); sel.addRange(range); });