├── 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 |
--------------------------------------------------------------------------------