// ==UserScript==
// @name 简法主页功能增强
// @namespace http://tampermonkey.net/
// @version 0.2
// @description 在简法主页上增加其他个性化设置
// @author 那年那兔那些事
// @include *://*.jianfast.com/*
// @icon https://s3.bmp.ovh/imgs/2021/08/2a5feb8f5f886e70.png
// @grant none
// ==/UserScript==
(function() {
//创建设置列表
var SettingsFn = function() {
this.Options = {
"EngineOnCurrentTab": true, //搜索引擎是否从当前标签页打开网页
"BookmarkOnCurrentTab": true, //点击书签是否从当前标签页打开网页
"AddNewSearchEngine": true, //是否添加新搜索引擎
"Engine": "",
};
}
//为SettingsFn添加新方法
SettingsFn.prototype = {
//get方法获取设置列表
get: function(key) {
return this.Options[key];
},
//set方法为设置类别修改属性
set: function(key, value) {
this.Options[key] = value;
}
}
//创建Settings
var Settings = new SettingsFn();
//创建新搜索引擎列表
var EnginesFn = function() {
this.NewEngineList = [{
"Name": "夸克",
"Url": "https://quark.sm.cn/s?q=",
"Img": "https://gss3.bdstatic.com/84oSdTum2Q5BphGlnYG/timg?wapp&quality=80&size=b150_150&subsize=20480&cut_x=0&cut_w=0&cut_y=0&cut_h=0&sec=1369815402&srctrace&di=dfe458fc945b48a3ba59df62e2012e66&wh_rate=null&src=http%3A%2F%2Fimgsrc.baidu.com%2Fforum%2Fpic%2Fitem%2Ff7246b600c33874451939b645e0fd9f9d72aa050.jpg"
}];//格式:在[]内前一个{}后面加英文“,”,然后再按照下列格式在“,”后添加新搜索引擎:{“Name”:搜索引擎名字,"Url":搜索引擎URL,"Img":搜索引擎图标}
}
//为EnginesFn添加新方法
EnginesFn.prototype = {
//get方法获得新搜索引擎列表
get: function() {
return this.NewEngineList;
},
//set方法可以为NewEngineList添加NewEngine
set: function(Name, Url, Img) {
var len = this.NewEngineList.length;
var newEngine = {
"Name": Name,
"Url": Url,
"Img": Img
};
this.NewEngineList[len] = newEngine;
},
//search方法从新搜索引擎列表中按key搜索出相应部分
search: function(key) {
var len;
if (typeof key === "string") {
len = this.NewEngineList.length;
var res = -1;
if (len !== 0) {
for (let i = 0; i < len; i++) {
if (this.NewEngineList[i].Name === key) {
res = i;
}
}
}
return res;
} else if (typeof key === "number") {
len = this.NewEngineList.length;
if (key < len) {
return this.NewEngineList[key];
} else {
return this.NewEngineList[len - 1];
}
} else {
return -1;
}
},
//change方法能改变打开网页方式
change: function() {
var SearchBtn = document.getElementById("search-btn");
if (SearchBtn.name !== "newSearchBtn") {
SearchBtn.onclick = function() {
var searchOBJ = document.getElementById("search");
var newURL = searchOBJ.getAttribute("data-engine-start") + searchOBJ.value;
location.href = newURL;
}
SearchBtn.name = "newSearchBtn";
}
},
select: function(Name, Url, Img, Flag) {
var SearchType = document.getElementById("search-type");
var Search = document.getElementById("search");
var SearchMenu = document.getElementById("search-menu");
if ((SearchType !== null) && (Search !== null) && (SearchMenu !== null)) {
SearchType.style.backgroundImage = "url(" + Img + ")";
Search.setAttribute("data-engine-start", Url);
SearchMenu.style.display = "none";
localStorage.setItem("Engine", Name);
localStorage.setItem("searchType", Flag);
}
},
//create方法创建新搜索引擎列表
create: function(Name, Url, Img) {
var newEngine = document.createElement("div");
newEngine.setAttribute("class", "search-engine");
newEngine.setAttribute("data-engine-start", Url);
newEngine.setAttribute("data-engine-end", "");
newEngine.innerHTML = "<img src=" + Img + "><span>" + Name + "</span>";
newEngine.onclick = function() {
Engines.select(Name, Url, Img, "0");
};
return newEngine;
},
//add方法能在原搜索引擎列表中添加新搜索引擎
add: function() {
var MenuObj = document.getElementById("search-menu");
var List = Engines.get();
if (MenuObj !== null) {
if (MenuObj.name !== "newEngine") {
if (List.length !== 0) {
for (let i = 0; i < List.length; i++) {
var NewEngine = Engines.create(List[i].Name, List[i].Url, List[i].Img);
MenuObj.appendChild(NewEngine);
}
MenuObj.name = "newEngine";
}
}
}
},
init: function(L) {
var MenuObj = document.getElementById("search-menu");
var Name;
var Url;
var Img;
var nameList=[];
var urlList=[];
var imgList=[];
if (MenuObj !== null) {
for (let i = 0; i < L; i++) {
var MenuChild = MenuObj.children[i];
//Name = MenuChild.innerText;
//Url = MenuChild.getAttribute("data-engine-end");
//Img = MenuChild.children[0].src;
nameList[i] = MenuChild.innerText;
urlList[i] = MenuChild.getAttribute("data-engine-start");
imgList[i] = MenuChild.children[0].src;
MenuChild.onclick = function() {
console.log("i:"+i);
//Engines.select(nameList[i],urlList[i], imgList[i], i.toString());
var SearchType = document.getElementById("search-type");
var Search = document.getElementById("search");
var SearchMenu = document.getElementById("search-menu");
if ((SearchType !== null) && (Search !== null) && (SearchMenu !== null)) {
SearchType.style.backgroundImage = "url(" + imgList[i] + ")";
Search.setAttribute("data-engine-start", urlList[i]);
SearchMenu.style.display = "none";
localStorage.setItem("Engine", nameList[i]);
localStorage.setItem("searchType", i.toString());
}
}
}
}
var SelectEngine = localStorage.getItem("Engine");
if(SelectEngine===null){
SelectEngine = Settings.get("Engine");
}
var SearchRes = Engines.search(SelectEngine);
if (SearchRes !== -1) {
var SearchType = document.getElementById("search-type");
var newEngineList = Engines.get();
Name = newEngineList[SearchRes].Name;
Url = newEngineList[SearchRes].Url;
Img = newEngineList[SearchRes].Img;
Engines.select(Name, Url, Img, "0");
}
}
}
//创建Engines
var Engines = new EnginesFn();
//创建书签
var Bookmarks = {
//为Bookmarks添加change方法,能改变书签打开方式
change: function() {
var bookmarksOBJ = document.getElementsByClassName("site-wrap-a siteA siteAs");
if (bookmarksOBJ.length !== 0) {
for (let i = 0; i < bookmarksOBJ.length; i++) {
bookmarksOBJ[i].target = "_self";
}
}
}
}
//通过定时器修改网页数据
var TimerID = setInterval(function() {
var bookmarksOBJ = document.getElementsByClassName("site-wrap-a siteA siteAs");
var searchType = document.getElementById("search-type");
var searchMenu = document.getElementById("search-menu");
var searchOBJ = document.getElementById("search");
var SearchBtn = document.getElementById("search-btn");
if ((bookmarksOBJ !== null) && (searchType !== null) && (searchMenu !== null) && (searchOBJ !==
null) && (SearchBtn !== null)) {
clearTimeout(TimerID);
TimerID = -1;
console.log("释放定时器!");
Engines.init(searchMenu.children.length);
if (Settings.get("EngineOnCurrentTab")) {
Engines.change();
}
if (Settings.get("BookmarkOnCurrentTab")) {
Bookmarks.change();
}
if (Settings.get("AddNewSearchEngine")) {
Engines.add();
}
}
}, 200);
console.log("定时器:"+TimerID);
//2s超时结束定时
setTimeout(function() {
if (TimerID !== -1) {
clearTimeout(TimerID);
console.log("2s超时释放定时器!");
}
}, 2000);
})();