把当前网站链接生成markdown格式的链接形式:[title](url)
当前为
// ==UserScript==
// @name 生成md链接
// @namespace http://tampermonkey.net/
// @version 0.4.1
// @description 把当前网站链接生成markdown格式的链接形式:[title](url)
// @author myaijarvis
// @icon https://g.csdnimg.cn/static/logo/favicon32.ico
// @run-at document-end
// @match *://*/*
// @exclude *://*/*.ipynb
// @exclude https://www.kaggle.com/code/*/edit
// @exclude https://editor.csdn.net/*
// @exclude https://www.bilibili.com/bangumi/play/*
// @exclude https://aistudio.baidu.com/*/user/*
// @require http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.0.js
// @grant GM_getResourceURL
// @grant GM_getResourceText
// @grant GM_addStyle
// @grant unsafeWindow
// @noframes
// @license MIT
// ==/UserScript==
// 全局变量最好都初始化在匿名函数(function () {})();之前
(function () {
"use strict";
//console.log(layui);
addStyle();
addBtn();
let isclick = false; // 防止过快重复点击
$("#copyBtn").click(function () {
if (!isclick) {
copy();
isclick = true;
setTimeout(() => {
isclick = false;
}, 3000);
}
});
})();
// 公共变量
let result = {
// 是否需要去掉?后面的参数,默认true,如果需要为false请到urlMap添加网址,
// 然后需要自定义去除?后面的参数请到urlMap的函数中自己操作
flag: true,
url: document.URL, // 处理后的url
title: document.title, // 处理后的标题
text: "", // 复制到剪贴板的内容
};
const removeParamPattern = /\?.*/; // 去掉问号后面的参数
function removeParam(url) {
return url.replace(removeParamPattern, "");
}
// 对象映射
// url(支持正则,特殊字符需要自己转义):function(){ 处理title;}
// 每个url要留一个样例
const urlMap = {
"mp.weixin.qq.com": function (result) {
// https://mp.weixin.qq.com/s/vlLEEqhGHocUIU78Hq_Tug
const name = $("#profileBt a").text().trim(); // 公众号名称
result.title = `${result.title}_${name}_微信公众号`;
},
"blog.csdn.net/": function (result) {
result.title = result.title.replace(/\(.*?\)/, "").trim(); // 去掉CSDN "(1条消息)title" 再去掉前后空格
result.title = result.title.replace(/CSDN博客.*/, "CSDN博客"); // title_author-CSDN博客_keyword 去掉keyword
const url=result.url;
if (url.match(/blog.csdn.net\/.*?\/category_*/)) {
// 匹配分类专栏链接
result.title = `==分类专栏==: ${result.title}`;
} else {
//https://blog.csdn.net/ljw_study_in_CSDN/article/details/121512562?spm=1001.2101.3001.6650.4
// result.title = result.title;
}
},
"toutiao.com/article/": function (result) {
// https://www.toutiao.com/article/7205128234114023969/?app=news_article_lite
result.flag = true;
const author = $("a.user-name").text();
result.title = `${result.title}-【${author}】`;
},
"toutiao.com/w/": function (result) {
// https://www.toutiao.com/w/1764132707047428/?log_from=b3f6898d5ce3e_1682696312708
result.flag = true;
const author = $("a.name").text();
result.title = `${result.title}-【${author}】`;
},
"toutiao.com/video/": function (result) {
// https://www.toutiao.com/video/7225244935484604980/?from_scene=video&log_from=a9ec249ec59a7_1682696455912
result.flag = true;
const author = $("a.user-name").text();
result.title = `${result.title}-【${author}】`;
},
"ixigua\.com/\\d+/": function (result) {
// https://www.ixigua.com/7225244935484604980/?from_scene=video&log_from=a9ec249ec59a7_1682696455912
result.flag = true;
const author = $("span.user__name").text();
result.title = `${result.title}-【${author}】`;
},
// 设置flag为false,不需要自定义title的直接返回空字符串
"bilibili.com/video/": "", // https://www.bilibili.com/video/BV1dU4y1C7so?p=3
};
// 复制操作
function copy() {
const url = document.URL;
const title = document.title;
// 变量重置
result.flag = true;
result.url = url;
result.title = title;
result.text = "";
let is_find = false;
for (let urlPattern in urlMap) {
// 遍历urlMap中的所有网址
const reg = new RegExp(urlPattern, "i"); //生成正则表达式 会自动生成'/urlPattern/i',特殊字符需要自己转义
if (reg.test(url)) {
result.flag = false; // 这里先改为false
// 匹配网址
const handler = urlMap[urlPattern]; // 返回一个函数
if (handler) {
handler(result); // 如果需要removeParam,请在handler中设置result.flag为true
}
is_find = true;
}
if (is_find) break;
}
if (result.flag) {
// 去掉 url 中的参数
result.url = removeParam(result.url);
}
// 这里右边加一个空格是因为微信中识别md链接有bug,会把右括号也识别为链接地址的一部分
result.text = `【参考:[${result.title}](${result.url} )】`;
// 复制到剪贴板
handleCopy(result.text);
// 修改复制按钮的样式
const copyBtn = $("#copyBtn");
copyBtn.css("background", "red").text("复制成功");
setTimeout(() => {
copyBtn.css("background", "green").text("复制");
}, 3000);
}
function addStyle() {
//debugger;
let layui_css = `.layui-btn{display: inline-block; vertical-align: middle; height: 38px; line-height: 38px; border: 1px solid transparent; padding: 0 18px; background-color: #009688; color: #fff; white-space: nowrap; text-align: center; font-size: 14px; border-radius: 2px; cursor: pointer; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none;}
.layui-btn-sm{height: 30px; line-height: 30px; padding: 0 10px; font-size: 12px;}`;
GM_addStyle(layui_css);
}
//创建复制按钮
function addBtn() {
let element = $(
`<button style="top: 150px;right:0px; position: fixed;z-index:1000;cursor:pointer;background:green;width:auto;" class="layui-btn layui-btn-sm" id="copyBtn">复制</button>`
);
$("body").append(element);
}
// 复制函数
function handleCopy(text) {
let inputNode = document.createElement("input"); // 创建input
inputNode.value = text; // 赋值给 input 值
document.body.appendChild(inputNode); // 插入进去
inputNode.select(); // 选择对象
document.execCommand("Copy"); // 原生调用执行浏览器复制命令
inputNode.className = "oInput";
inputNode.style.display = "none"; // 隐藏
console.log("复制:", text);
}