From ca1a4a31706d0c03673fe4c414c645ed826b21c6 Mon Sep 17 00:00:00 2001 From: shu Date: Wed, 19 Aug 2026 15:56:06 +0800 Subject: 精简 Wiki 构建与运行方式 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将浏览器端工具整理为 utilities 插件,移除 Docker、Org GTD 和 files API,并补充单文件构建及 Node.js 运行入口。 --- plugins/utilities/copy-codeblock-widget.tid | 72 +++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 plugins/utilities/copy-codeblock-widget.tid (limited to 'plugins/utilities/copy-codeblock-widget.tid') diff --git a/plugins/utilities/copy-codeblock-widget.tid b/plugins/utilities/copy-codeblock-widget.tid new file mode 100644 index 0000000..2251c62 --- /dev/null +++ b/plugins/utilities/copy-codeblock-widget.tid @@ -0,0 +1,72 @@ +title: $:/plugins/local/copy-codeblock/copy-codeblock.js +type: application/javascript +module-type: widget + +/*\ +title: $:/plugins/local/copy-codeblock/copy-codeblock.js +type: application/javascript +module-type: widget + +Adds a copy button to code blocks. +\*/ +(function() { +"use strict"; + +var CodeBlockWidget = require("$:/core/modules/widgets/codeblock.js").codeblock; + +var CopyCodeBlockWidget = function(parseTreeNode,options) { + this.initialise(parseTreeNode,options); +}; + +CopyCodeBlockWidget.prototype = new CodeBlockWidget(); +CopyCodeBlockWidget.prototype.constructor = CopyCodeBlockWidget; + +CopyCodeBlockWidget.prototype.postRender = function() { + var self = this, + preNode = this.domNodes[0], + previousNode, + button; + + // Preserve syntax highlighting supplied by the highlight plugin. + if(CodeBlockWidget.prototype.postRender) { + CodeBlockWidget.prototype.postRender.call(this); + } + + if(!$tw.browser || !preNode || preNode.isTiddlyWikiFakeDom) { + return; + } + + // The system code view already renders its own copy button. + previousNode = preNode.previousElementSibling; + if(previousNode && previousNode.querySelector && previousNode.querySelector(".tc-image-copy-clipboard")) { + return; + } + + preNode.style.position = "relative"; + preNode.style.paddingRight = "5em"; + + button = this.document.createElement("button"); + button.setAttribute("type","button"); + button.setAttribute("aria-label","Copy code"); + button.setAttribute("title","Copy code"); + button.className = "tc-btn-invisible tc-copy-codeblock-button"; + button.textContent = "Copy"; + button.style.position = "absolute"; + button.style.top = "0.5em"; + button.style.right = "0.5em"; + button.style.zIndex = "1"; + button.style.padding = "0.2em 0.45em"; + button.style.cursor = "pointer"; + + button.addEventListener("click",function(event) { + event.preventDefault(); + event.stopPropagation(); + $tw.utils.copyToClipboard(self.getAttribute("code","")); + }); + + preNode.appendChild(button); +}; + +exports.codeblock = CopyCodeBlockWidget; + +})(); -- cgit v1.2.3