// ==UserScript==
// @name fast search
// @namespace https://github.com/peihaojie/fastSearch
// @author HaoJie
// @description 该脚实现选中文本快速复制,快速搜索的功能
// @description 注意: 需要增加适配网站,请手动修改 @include
// @supportURL https://github.com/peihaojie/fastSearch/issues
// @run-at document-body
// @resource https://at.alicdn.com/t/font_3148281_vf5cr0hy39.css?spm=a313x.7781069.1998910419.83&file=font_3148281_vf5cr0hy39.css
// @include *
// @exclude *://www.iconfont.cn/*
// @version 1.2.1
// @icon data:image/png;base64,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
// ==/UserScript==
class InitSearch {
constructor() {
this.initStatic();
this.initStyle();
this.mouseupListener();
}
initStatic() {
this.href =
"https://at.alicdn.com/t/font_3148281_vf5cr0hy39.css?spm=a313x.7781069.1998910419.83&file=font_3148281_vf5cr0hy39.css";
this.style = `
*::selection {
background: #CCCCCC;
color: #3399CC;
}
.search--btn__wrap {
height: 30px;
border-radius: 5px;
background: #fff;
position: absolute;
cursor: pointer;
box-shadow: 0px 0px 5px 2px #9e9e9e;
overflow: hidden;
display: flex;
z-index: 9999;
}
.search--btn__wrap .search--btn {
cursor: pointer;
width: 30px;
height: 30px;
font-size: 20px;
display: inline-flex;
align-items: center;
justify-content: center;
position: relative;
}
.search--btn__wrap .search--btn:hover {
background-color: #9e9e9e;
}
.iconfont::before {
z-index: 1;
}
.iconfont::after {
content: attr(after);
// position: absolute;
// top: 0;
// right: 0;
// bottom: 0;
// left: 0;
// display: flex;
// align-items: center;
// justify-content: center;
font-size: 12px;
}
`;
}
initStyle() {
const stylesheet = document.createElement("link");
stylesheet.rel = "stylesheet";
stylesheet.href = this.href;
document.head.appendChild(stylesheet);
const style = document.createElement("style");
const styleText = document.createTextNode(this.style);
style.appendChild(styleText);
document.head.appendChild(style);
}
mouseupListener() {
document.body.addEventListener(
"mouseup",
(e) => {
setTimeout(() => {
const selection = document.getSelection();
const selectStr = selection.toString();
const delBtn = document.getElementById("btn");
delBtn && document.body.removeChild(delBtn);
if (selectStr === "") {
return false;
}
const { anchorOffset, focusOffset, isCollapsed } = selection;
if (isCollapsed) {
return false;
}
const position = this.getPosition(e, anchorOffset, focusOffset);
const btnWrap = this.createBtnWrap(position, selectStr);
document.body.appendChild(btnWrap);
}, 100);
},
false
);
}
getPosition(e, anchorOffset, focusOffset) {
let left = e.clientX + 10;
let top = e.pageY;
if (anchorOffset > focusOffset) {
left -= 200;
top -= 45;
}
return { left: `${left}px`, top: `${top}px` };
}
createBtnWrap({ left, top }, selectStr) {
const btn = document.createElement("div");
btn.classList.add("search--btn__wrap");
btn.style.left = left;
btn.style.top = top;
btn.setAttribute("id", "btn");
btn.setAttribute("data-text", selectStr);
this.createBtnList(btn);
return btn;
}
createBtnList(btn) {
const btnList = [
{
url: "https://www.google.com/search?q=",
title: "google搜索",
after: "谷歌",
icon: "icon-google",
},
{
url: "https://cn.bing.com/search?q=",
title: "必应搜索",
after: "必应",
icon: "icon-Bing",
},
{
url: "https://www.baidu.com/s?wd=",
title: "百度一下",
after: "百度",
icon: "icon-baidu",
},
{
url: "https://www.so.com/s?q=",
title: "360搜索",
after: "360",
icon: "icon-icon-test",
},
{
url: "https://www.sogou.com/web?query=",
title: "搜狗搜索",
after: "搜狗",
icon: "icon-sougoushuru",
},
{
url: "https://www.zhihu.com/search?q=",
title: "知乎搜索",
after: "知乎",
icon: "icon-shejiaotubiao-10",
},
{
url: false,
title: "点击复制",
after: "复制",
icon: "icon-fuzhi",
},
];
btnList.forEach((btnItem) => this.createBtnItem(btn, btnItem));
}
createBtnItem(btn, { url, title, icon, after }) {
const search = document.createElement("div");
search.classList.add("search--btn", "iconfont", icon);
search.setAttribute("title", title);
search.addEventListener("mouseup", (e) => {
const text = btn.getAttribute("data-text");
switch (url) {
case false:
this.copyText(text);
break;
default:
window.open(`${url}${text}`);
break;
}
e.stopPropagation();
document.body.removeChild(btn);
});
btn.appendChild(search);
setTimeout(() => {
const content = window
.getComputedStyle(search, "before")
.getPropertyValue("content");
if (content === "none") {
search.setAttribute("after", after);
}
}, 100);
}
copyText(text) {
const input = document.createElement("input");
input.value = text;
document.body.appendChild(input);
input.select();
document.execCommand("copy");
document.body.removeChild(input);
}
}
new InitSearch();