├── Plugin.php ├── README.md └── codecopy.js /Plugin.php: -------------------------------------------------------------------------------- 1 | 4 | * 5 | * @package CodeCopy 6 | * @author 兔子昂 7 | * @version 1.0.0 8 | * @link https://www.tuziang.com 9 | */ 10 | class CodeCopy_Plugin implements Typecho_Plugin_Interface { 11 | /** 12 | * 激活插件方法,如果激活失败,直接抛出异常 13 | * 14 | * @access public 15 | * @return void 16 | * @throws Typecho_Plugin_Exception 17 | */ 18 | public static function activate() { 19 | Typecho_Plugin::factory('Widget_Archive')->header = array(CodeCopy_Plugin, 'header'); 20 | Typecho_Plugin::factory('Widget_Archive')->footer = array(CodeCopy_Plugin, 'footer'); 21 | } 22 | 23 | /** 24 | * 禁用插件方法,如果禁用失败,直接抛出异常 25 | * 26 | * @static 27 | * @access public 28 | * @return void 29 | * @throws Typecho_Plugin_Exception 30 | */ 31 | public static function deactivate(){} 32 | 33 | /** 34 | * 获取插件配置面板 35 | * 36 | * @access public 37 | * @param Typecho_Widget_Helper_Form $form 配置面板 38 | * @return void 39 | */ 40 | public static function config(Typecho_Widget_Helper_Form $form){ 41 | //设置代码风格样式 42 | 43 | } 44 | 45 | /** 46 | * 个人用户的配置面板 47 | * 48 | * @access public 49 | * @param Typecho_Widget_Helper_Form $form 50 | * @return void 51 | */ 52 | public static function personalConfig(Typecho_Widget_Helper_Form $form){} 53 | 54 | /** 55 | * 插件实现方法 56 | * 57 | * @access public 58 | * @return void 59 | */ 60 | public static function render() { 61 | 62 | } 63 | 64 | /** 65 | *为header添加css文件 66 | *@return void 67 | */ 68 | public static function header() { 69 | 70 | } 71 | 72 | /** 73 | *为footer添加js文件 74 | *@return void 75 | */ 76 | public static function footer() { 77 | 78 | $path = Helper::options()->pluginUrl . '/codecopy/'; 79 | echo ''; 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CodeCopy 2 | 3 | ## 介绍 4 | 5 | 这是一个 用于Typecho的 复制代码 的插件 6 | 7 | CodeCopy —— 用于Typecho 复制代码 插件 - 兔子昂 8 | 9 | 10 | 11 | ## 使用教程 12 | 13 | 1. Download ZIP 下载本插件 14 | 2. 解压,把 CodeCopy-master 目录重命名为 CodeCopy (注意大写) 上传至博客的 /usr/plugins 目录下 15 | 3. 在插件页面启用本插件 16 | -------------------------------------------------------------------------------- /codecopy.js: -------------------------------------------------------------------------------- 1 | //html5 给typecho添加 复制代码 功能 2 | // by 兔子昂 3 | var codeblocks = document.getElementsByTagName("pre") 4 | //循环每个pre代码块,并添加 复制代码 5 | 6 | for (var i = 0; i < codeblocks.length; i++) { 7 | //显示 复制代码 按钮 8 | currentCode = codeblocks[i] 9 | currentCode.style = "position: relative;" 10 | var copy = document.createElement("div") 11 | copy.style = "position: absolute;right: 4px;\ 12 | top: 4px;background-color: white;padding: 2px 8px;\ 13 | margin: 8px;border-radius: 4px;cursor: pointer;\ 14 | box-shadow: 0 2px 4px rgba(0,0,0,0.05), 0 2px 4px rgba(0,0,0,0.05);" 15 | copy.innerHTML = "复制" 16 | currentCode.appendChild(copy) 17 | //让所有 "复制"按钮 全部隐藏 18 | copy.style.visibility = "hidden" 19 | } 20 | 21 | 22 | for (var i = 0; i < codeblocks.length; i++) { 23 | 24 | 25 | !function (i) { 26 | //鼠标移到代码块,就显示按钮 27 | codeblocks[i].onmouseover = function () { 28 | codeblocks[i].childNodes[1].style.visibility = "visible" 29 | } 30 | 31 | //执行 复制代码 功能 32 | function copyArticle(event) { 33 | const range = document.createRange(); 34 | 35 | //范围是 code,不包括刚才创建的div 36 | range.selectNode(codeblocks[i].childNodes[0]); 37 | 38 | const selection = window.getSelection(); 39 | if (selection.rangeCount > 0) selection.removeAllRanges(); 40 | selection.addRange(range); 41 | document.execCommand('copy'); 42 | 43 | codeblocks[i].childNodes[1].innerHTML = "复制成功" 44 | setTimeout(function () { 45 | codeblocks[i].childNodes[1].innerHTML = "复制" 46 | }, 1000); 47 | //清除选择区 48 | if (selection.rangeCount > 0) selection.removeAllRanges(); 0 49 | } 50 | codeblocks[i].childNodes[1].addEventListener('click', copyArticle, false); 51 | 52 | }(i); 53 | 54 | !function (i) { 55 | //鼠标从代码块移开 则不显示复制代码按钮 56 | codeblocks[i].onmouseout = function () { 57 | codeblocks[i].childNodes[1].style.visibility = "hidden" 58 | } 59 | }(i); 60 | } 61 | 62 | --------------------------------------------------------------------------------