Skip to content

Commit 1b63805

Browse files
committed
Update searchJumper.user.js
1 parent 5153b9a commit 1b63805

1 file changed

Lines changed: 65 additions & 13 deletions

File tree

SearchJumper/searchJumper.user.js

Lines changed: 65 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
// @name:zh-TW 搜索醬
55
// @name:ja 検索ちゃん
66
// @namespace hoothin
7-
// @version 1.6.5.6.5
7+
// @version 1.6.5.6.6
88
// @description Jump to any search engine quickly and easily, the most powerful, most complete search enhancement script!
99
// @description:zh-CN 又一个多搜索引擎切换脚本,在搜索时一键跳转各大搜索引擎,支持任意页面右键划词搜索与全面自定义
1010
// @description:zh-TW 又一個多搜尋引擎切換脚本,在搜索時一鍵跳轉各大搜尋引擎,支持任意頁面右鍵劃詞搜索與全面自定義
@@ -556,7 +556,9 @@
556556
showSiteLists: true,
557557
cacheSwitch: false,
558558
noAni: false,
559-
quickAddRule: true
559+
quickAddRule: true,
560+
multiline: 2,//0 关闭 1 开启 2 询问
561+
multilineGap: 1000
560562
};
561563
function run() {
562564
const lang = navigator.appName == "Netscape" ? navigator.language : navigator.userLanguage;
@@ -582,7 +584,9 @@
582584
siteAdd: '添加',
583585
siteType: '分类',
584586
siteExist: '已存在相同规则,终止添加',
585-
siteAddOver: '站点添加成功'
587+
siteAddOver: '站点添加成功',
588+
multiline: '是否以换行符分隔多行搜索?',
589+
multilineTooMuch: '行数超过10行,是否继续搜索?'
586590
};
587591
break;
588592
case "zh-TW":
@@ -605,7 +609,9 @@
605609
siteAdd: '添加',
606610
siteType: '分類',
607611
siteExist: '已存在相同規則,終止添加',
608-
siteAddOver: '站點添加成功'
612+
siteAddOver: '站點添加成功',
613+
multiline: '是否以換行符分隔多行搜索?',
614+
multilineTooMuch: '行數超過10行,是否繼續搜索?'
609615
};
610616
break;
611617
default:
@@ -627,7 +633,9 @@
627633
siteAdd: 'Add',
628634
siteType: 'Category',
629635
siteExist: 'Abort as the site is already exist',
630-
siteAddOver: 'Site added successfully'
636+
siteAddOver: 'Site added successfully',
637+
multiline: 'Search as multilines?',
638+
multilineTooMuch: 'The number of lines exceeds 10, do you want to continue searching?'
631639
};
632640
break;
633641
}
@@ -1614,13 +1622,13 @@
16141622
self.batchOpening = true;
16151623
siteEles.forEach(siteEle => {
16161624
if (siteEle.dataset.nobatch || siteEle.dataset.current) return;
1617-
let isJs = /^javascript:/.test(siteEle.href);
1618-
if (!isJs) {
1625+
let isPage = /^(https?|ftp):/.test(siteEle.href);
1626+
if (isPage) {
16191627
siteEle.setAttribute("target", "_blank");
16201628
}
16211629
let mouseDownEvent = new PointerEvent("mousedown");
16221630
siteEle.dispatchEvent(mouseDownEvent);
1623-
if (siteEle.onclick || isJs) {
1631+
if (siteEle.onclick || !isPage) {
16241632
siteEle.click();
16251633
} else {
16261634
_GM_openInTab(siteEle.href);
@@ -1830,6 +1838,8 @@
18301838
self.bar.insertBefore(ele, self.bar.children[self.bar.children.length - 1]);
18311839
ele.dataset.width = ele.scrollWidth + "px";
18321840
}
1841+
ele.style.width = ele.scrollHeight + "px";
1842+
ele.style.height = ele.scrollHeight + "px";
18331843
if (inPage && selectImg && selectAudio && selectVideo && selectLink && selectPage) {
18341844
ele.classList.add("search-jumper-targetAll");
18351845
} else {
@@ -1858,7 +1868,7 @@
18581868

18591869
createSiteBtn(name, icon, data, openInNewTab) {
18601870
let self = this;
1861-
let isBookmarklet = /^javascript:/.test(data.url);
1871+
let isPage = /^(https?|ftp):/.test(data.url);
18621872
let ele = document.createElement("a");
18631873
ele.className = "search-jumper-btn";
18641874
if (typeof data.description !== 'undefined') ele.title = data.description;
@@ -2007,7 +2017,7 @@
20072017
ele.style.display = 'none';
20082018
}
20092019
}
2010-
if (!isBookmarklet && (openInNewTab || searchData.prefConfig.openInNewTab)) {
2020+
if (isPage && (openInNewTab || searchData.prefConfig.openInNewTab)) {
20112021
ele.setAttribute("target", "_blank");
20122022
ele.dataset.target = 1;
20132023
}
@@ -2244,12 +2254,14 @@
22442254
//disable click
22452255
ele.onclick = e => {
22462256
ele.onclick = null;
2257+
e.preventDefault();
2258+
e.stopPropagation();
22472259
return false;
22482260
};
22492261
} else ele.href = url;
2250-
let isJs = /^javascript:/.test(url);
2262+
let isPage = /^(https?|ftp):/.test(url);
22512263
let checkAlt = () => {
2252-
if (alt && !isJs) {
2264+
if (alt && isPage) {
22532265
ele.onclick = e => {
22542266
ele.onclick = null;
22552267
_unsafeWindow.open(url, "_blank", "width=800, height=1000, location=0, resizable=1, menubar=0, scrollbars=0");
@@ -2262,14 +2274,48 @@
22622274
if (customInput) {
22632275
if (self.batchOpening !== true) {
22642276
//lose click, click one more time
2265-
if (checkAlt() || isJs) {
2277+
if (checkAlt() || !isPage) {
22662278
ele.click();
22672279
} else {
22682280
_GM_openInTab(url, {active: true});
22692281
}
22702282
}
22712283
} else {
22722284
if (!checkAlt()) {
2285+
if (searchData.prefConfig.multiline == 1 || searchData.prefConfig.multiline == 2) {
2286+
let selStr = getSelectStr();
2287+
if (selStr &&
2288+
/%s\b/.test(ele.dataset.url) &&
2289+
selStr.indexOf("\n") !== -1) {
2290+
if (searchData.prefConfig.multiline == 1 ||
2291+
confirm(i18n("multiline"))) {
2292+
let selStrArr = selStr.split("\n");
2293+
if (selStrArr.length > 10 && !confirm(i18n("multilineTooMuch"))) return;
2294+
let encodeSelStr = encodeURIComponent(selStr);
2295+
let searchIndex = 0;
2296+
let searchByLine = () => {
2297+
_GM_openInTab(url.replace(encodeSelStr, encodeURIComponent(selStrArr[searchIndex++])));
2298+
if (searchIndex < selStrArr.length) {
2299+
setTimeout(() => {
2300+
searchByLine();
2301+
}, searchData.prefConfig.multilineGap || 1000);
2302+
}
2303+
};
2304+
searchByLine();
2305+
if (searchData.prefConfig.multiline == 1) {
2306+
ele.onclick = e => {
2307+
ele.onclick = null;
2308+
e.preventDefault();
2309+
e.stopPropagation();
2310+
return false;
2311+
};
2312+
}
2313+
} else {
2314+
ele.click();
2315+
}
2316+
return false;
2317+
}
2318+
}
22732319
ele.onclick = null;
22742320
}
22752321
}
@@ -3540,6 +3586,12 @@
35403586
if (typeof searchData.prefConfig.quickAddRule === "undefined") {
35413587
searchData.prefConfig.quickAddRule = true;
35423588
}
3589+
if (typeof searchData.prefConfig.multiline === "undefined") {
3590+
searchData.prefConfig.multiline = 2;
3591+
}
3592+
if (typeof searchData.prefConfig.multilineGap === "undefined") {
3593+
searchData.prefConfig.multilineGap = 1000;
3594+
}
35433595
}
35443596

35453597
async function init() {

0 commit comments

Comments
 (0)