Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Pagetual/README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
☯️東方永頁機 v.1.9.36.24
☯️東方永頁機 v.1.9.36.25
==
*Pagetual - Perpetual pages. Auto loading paginated web pages for 90% of all web sites ! [**Wiki**](https://pagetual.hoothin.com/en/)*

Expand Down
116 changes: 88 additions & 28 deletions Pagetual/pagetual.user.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
// @name:it Pagetual
// @name:ko 東方永頁機
// @namespace hoothin
// @version 1.9.36.24
// @version 1.9.36.25
// @description Perpetual pages - Most powerful auto-pager script. Auto loading next paginated web pages and inserting into current page. Support thousands of web sites without any rule.
// @description:zh-CN 终极自动翻页 - 加载并拼接下一分页内容至当前页尾,智能适配任意网页
// @description:zh-TW 終極自動翻頁 - 加載並拼接下一分頁內容至當前頁尾,智能適配任意網頁
Expand Down Expand Up @@ -173,6 +173,10 @@
forceStateIframe: "以 iframe 嵌入整页",
forceStateDynamic: "通过 iframe 加载动态内容后取出",
forceStateDisable: "在此站禁用",
autoScrollRate: "滚动速度(1~1000)",
disableAutoScroll: "停止自动滚动",
enableAutoScroll: "开启自动滚动",
toggleAutoScroll: "自动滚动开关",
page: "Page ",
prevPage: "上一页",
nextPage: "下一页",
Expand Down Expand Up @@ -283,6 +287,10 @@
forceStateIframe: "以 iframe 嵌入整頁",
forceStateDynamic: "通過 iframe 加載動態內容後取出",
forceStateDisable: "在此站禁用",
autoScrollRate: "滾動速度(1~1000)",
disableAutoScroll: "停止自動滾動",
enableAutoScroll: "開啟自動滾動",
toggleAutoScroll: "自動滾動開關",
page: "Page ",
prevPage: "上一頁",
nextPage: "下一頁",
Expand Down Expand Up @@ -392,6 +400,10 @@
forceStateIframe: "iframe にページ全体を埋め込む",
forceStateDynamic: "iframe 経由で動的コンテンツを読み込む",
forceStateDisable: "このステーションでのページめくりを無効にする",
autoScrollRate: "スクロール速度 (1~1000)",
disableAutoScroll: "自動スクロールを停止します",
EnableAutoScroll: "自動スクロールを有効にする",
toggleAutoScroll: "自動スクロールの切り替え",
page: "Page ",
prevPage: "Prev page",
nextPage: "Next page",
Expand Down Expand Up @@ -502,6 +514,10 @@
forceStateIframe: "Вставить полную страницу как iframe",
forceStateDynamic: "Загружать динамический контент через iframe",
forceStateDisable: "Отключить перелистывание страниц на этой станции",
autoScrollRate: "Скорость прокрутки (1~1000)",
disableAutoScroll: "Остановить автоматическую прокрутку",
enableAutoScroll: "Включить автопрокрутку",
toggleAutoScroll: "Переключить автопрокрутку",
page: "Страница ",
prevPage: "Предыдущая страница",
nextPage: "Следующая страница",
Expand Down Expand Up @@ -611,6 +627,10 @@
forceStateIframe: "Embed full page as iframe",
forceStateDynamic: "Load dynamic content via iframe",
forceStateDisable: "Disable page turning on this site",
autoScrollRate: "Scroll speed (1~1000)",
disableAutoScroll: "Stop Auto Scroll",
enableAutoScroll: "Enable Auto Scroll",
toggleAutoScroll: "Toggle Auto Scroll",
page: "Page ",
prevPage: "Prev page",
nextPage: "Next page",
Expand Down Expand Up @@ -1913,6 +1933,7 @@
body.querySelector("a[class*=nextpage]") ||
body.querySelector("li.page-current+li>a") ||
body.querySelector("[class^=pag] a[rel=next]") ||
body.querySelector("[class^=Pag] [aria-label=next]") ||
body.querySelector(".pagination-nav__item--next>a");
if (!next) {
await sleep(1);
Expand Down Expand Up @@ -3760,6 +3781,7 @@
</div>
<button id="nextSwitch" class="command" title="${i18n("nextSwitch")}" type="button">${i18n("nextSwitch")}</button>
<button id="loadNow" class="command" title="${i18n("loadNow")}" type="button">${i18n("loadNow")}</button>
<button id="autoScroll" class="command" title="${i18n("toggleAutoScroll")}" type="button"></button>
<div>
<textarea style="display: none;" class="tempRule" spellcheck="false" placeholder="{Rule object}" title="Rule for current site"></textarea>
<button id="showDetail" title="" type="button">
Expand Down Expand Up @@ -3797,7 +3819,7 @@
return;
}
}
storage.setItem("forceState_"+location.host, forceState);
storage.setItem("forceState_" + location.host, forceState);
self.close();
location.reload();
};
Expand All @@ -3816,13 +3838,23 @@
let checkBtn = frame.querySelector("#check");
let editBtn = frame.querySelector("#edit");
let nextSwitchBtn = frame.querySelector("#nextSwitch");
let autoScrollBtn = frame.querySelector("#autoScroll");
let loadNow = frame.querySelector("#loadNow");
let tempRule = frame.querySelector(".tempRule");
let showDetailBtn = frame.querySelector("#showDetail");
let saveDetailBtn = frame.querySelector("#saveDetail");
let addOtherProp = frame.querySelector("#addOtherProp");
let addNextSelector = frame.querySelector("#addNextSelector");
let addPageSelector = frame.querySelector("#addPageSelector");
autoScrollBtn.addEventListener("click", e => {
self.close();
autoScroll = (autoScroll ? 0 : prompt(i18n("autoScrollRate"), 10)) || 0;
autoScroll = parseInt(autoScroll) || 0;
if (autoScroll < 0) autoScroll = 0;
else if (autoScroll > 1000) autoScroll = 1000;
storage.setItem("autoScroll_" + location.host + location.pathname, autoScroll);
startAutoScroll();
}, true);
addOtherProp.addEventListener("click", e => {
let propName = prompt(i18n("propName"));
if (!propName) return;
Expand Down Expand Up @@ -3986,6 +4018,7 @@
this.allpath = allpath;
this.selectorInput = selectorInput;
this.nextSwitchBtn = nextSwitchBtn;
this.autoScrollBtn = autoScrollBtn;
this.loadNow = loadNow;
this.tempRule = tempRule;
this.logoBtn = logoBtn;
Expand Down Expand Up @@ -4194,6 +4227,7 @@
} else {
this.nextSwitchBtn.style.display = "none";
}
this.autoScrollBtn.innerText = i18n(autoScroll ? "disableAutoScroll" : "enableAutoScroll");

let pageElementSel = ruleParser.curSiteRule.pageElement || "";
if (Array && Array.isArray && Array.isArray(pageElementSel)) {
Expand Down Expand Up @@ -4279,6 +4313,14 @@
return false;
}

function startAutoScroll() {
clearInterval(autoScrollInterval);
if (autoScroll <= 0) return;
autoScrollInterval = setInterval(() => {
window.scroll(window.scrollX, window.scrollY + 1);
}, parseInt(1000 / autoScroll));
}

function initConfig() {
listenUrl();
let href = location.href.slice(0, 100);
Expand All @@ -4301,6 +4343,21 @@
debug(err);
});
});
_GM_registerMenuCommand(i18n(forceState == 1 ? "enable" : "disableSite"), () => {
forceState = (forceState == 1 ? 0 : 1);
storage.setItem("forceState_" + location.host, forceState);
showTips(i18n(forceState == 1 ? "disableSiteTips" : "enableSiteTips"));
if (!ruleParser.curSiteRule.url) location.reload();
});
_GM_registerMenuCommand(i18n("toggleAutoScroll"), () => {
autoScroll = (autoScroll ? 0 : prompt(i18n("autoScrollRate"), 10)) || 0;
autoScroll = parseInt(autoScroll) || 0;
if (autoScroll < 0) autoScroll = 0;
else if (autoScroll > 1000) autoScroll = 1000;
storage.setItem("autoScroll_" + location.host + location.pathname, autoScroll);
startAutoScroll();
});
startAutoScroll();
let isGuidePage = checkGuidePage(href);
if (!isGuidePage) {
if (href.indexOf("PagetualGuide") != -1) return true;
Expand Down Expand Up @@ -5340,25 +5397,28 @@
enableDebug = rulesData.enableDebug;
storage.getItem("nextSwitch_" + location.host, i => {
storage.getItem("forceState_" + location.host, v => {
storage.getItem("ruleLastUpdate", date => {
if (typeof(i) !== "undefined") {
nextIndex = i;
}
if (typeof(v) == "undefined") {
v = (rulesData.enableWhiteList ? 1 : 0);
}
forceState = v;
updateDate = date;
if (initConfig()) return;
pageReady = true;
if (forceState == 1) return;
let now = new Date().getTime();
if (!date || now - date > 2 * 24 * 60 * 60 * 1000) {
updateRules(() => {
}, (rule, err) => {}, true);
storage.setItem("ruleLastUpdate", now);
}
callback();
storage.getItem("autoScroll_" + location.host + location.pathname, _autoScroll => {
storage.getItem("ruleLastUpdate", date => {
autoScroll = _autoScroll || 0;
if (typeof(i) !== "undefined") {
nextIndex = i;
}
if (typeof(v) == "undefined") {
v = (rulesData.enableWhiteList ? 1 : 0);
}
forceState = v;
updateDate = date;
if (initConfig()) return;
pageReady = true;
if (forceState == 1) return;
let now = new Date().getTime();
if (!date || now - date > 2 * 24 * 60 * 60 * 1000) {
updateRules(() => {
}, (rule, err) => {}, true);
storage.setItem("ruleLastUpdate", now);
}
callback();
});
});
});
});
Expand Down Expand Up @@ -5513,12 +5573,6 @@
nextPage();
});
}
_GM_registerMenuCommand(i18n(forceState == 1 ? "enable" : "disableSite"), () => {
forceState = (forceState == 1 ? 0 : 1);
storage.setItem("forceState_" + location.host, forceState);
showTips(i18n(forceState == 1 ? "disableSiteTips" : "enableSiteTips"));
if (!ruleParser.curSiteRule.url) location.reload();
});
initListener();
});
}
Expand Down Expand Up @@ -5719,7 +5773,7 @@
var tipsWords = document.createElement("div");
tipsWords.className = "pagetual_tipsWords";

var isPause = false, isHideBar = false, isLoading = false, curPage = 1, forceState = 0, bottomGap = 1000, autoLoadNum = -1, nextIndex = 0, stopScroll = false, clickMode = false;
var isPause = false, isHideBar = false, isLoading = false, curPage = 1, forceState = 0, autoScroll = 0, autoScrollInterval, bottomGap = 1000, autoLoadNum = -1, nextIndex = 0, stopScroll = false, clickMode = false;
var openInNewTab = 0;

function changeStop(stop) {
Expand Down Expand Up @@ -5904,7 +5958,13 @@
}, 1000);
}
clickMode = typeof ruleParser.curSiteRule.clickMode == 'undefined' ? rulesData.clickMode : ruleParser.curSiteRule.clickMode;
let clickingNext = false;
let clickNext = async () => {
if (clickingNext) return;
clickingNext = true;
setTimeout(() => {
clickingNext = false;
}, 1500);
let nextLink = ruleParser.nextLinkHref;
if (!nextLink) return;
let isJs = /^(javascript|#)/.test(nextLink.replace(location.href, ""));
Expand Down
13 changes: 8 additions & 5 deletions Picviewer CE+/Picviewer CE+.user.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
// @description:zh-TW 線上看圖工具,支援圖片翻轉、旋轉、縮放、彈出大圖、批量儲存
// @description:pt-BR Poderosa ferramenta de visualização de imagens on-line, que pode pop-up/dimensionar/girar/salvar em lote imagens automaticamente
// @description:ru Мощный онлайн-инструмент для просмотра изображений, который может автоматически отображать/масштабировать/вращать/пакетно сохранять изображения
// @version 2023.5.10.1
// @version 2023.5.13.1
// @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAV1BMVEUAAAD////29vbKysoqKioiIiKysrKhoaGTk5N9fX3z8/Pv7+/r6+vk5OTb29vOzs6Ojo5UVFQzMzMZGRkREREMDAy4uLisrKylpaV4eHhkZGRPT08/Pz/IfxjQAAAAgklEQVQoz53RRw7DIBBAUb5pxr2m3/+ckfDImwyJlL9DDzQgDIUMRu1vWOxTBdeM+onApENF0qHjpkOk2VTwLVEF40Kbfj1wK8AVu2pQA1aBBYDHJ1wy9Cf4cXD5chzNAvsAnc8TjoLAhIzsBao9w1rlVTIvkOYMd9nm6xPi168t9AYkbANdajpjcwAAAABJRU5ErkJggg==
// @namespace https://github.com/hoothin/UserScripts
// @homepage https://www.hoothin.com
Expand Down Expand Up @@ -11993,7 +11993,8 @@ ImgOps | https://imgops.com/#b#`;
const lazyImgAttr = ["data-lazy-src", "data-lazy", "data-url", "data-orig-file", "zoomfile", "file", "original", "load-src", "imgsrc", "real_src", "src2", "origin-src", "data-lazyload", "data-lazyload-src", "data-lazy-load-src", "data-ks-lazyload", "data-ks-lazyload-custom", "data-src", "data-defer-src", "data-actualsrc", "data-cover", "data-original", "data-thumb", "data-imageurl", "data-placeholder", "lazysrc"];
var tprules = [
function(a) {
var oldsrc = (this.currentSrc || this.src);
if (this.currentSrc && !this.src) this.src = this.currentSrc;
var oldsrc = this.src;
var newsrc = null;

if (this.getAttribute("_src") && !this.src) {
Expand All @@ -12013,10 +12014,10 @@ ImgOps | https://imgops.com/#b#`;
}
if (newsrc) {
} else if (this.srcset) {
var srcs = this.srcset.split(/[xw],/i), largeSize = 0;
var srcs = this.srcset.split(/[xw],/i), largeSize = -1;
srcs.forEach(srci => {
let srcInfo = srci.trim().split(" "), curSize = parseInt(srcInfo[1]);
if (srcInfo[1] && curSize > largeSize) {
let srcInfo = srci.trim().split(" "), curSize = parseInt(srcInfo[1] || 0);
if ((srcInfo[1] || !oldsrc) && curSize > largeSize) {
largeSize = curSize;
newsrc = srcInfo[0];
}
Expand Down Expand Up @@ -22136,6 +22137,7 @@ ImgOps | https://imgops.com/#b#`;
var broEle = target.previousElementSibling, broImg;
while (broEle) {
if (broEle.nodeName == "IMG") broImg = broEle;
else if (broEle.nodeName == "PICTURE") broImg = broEle.querySelector("img");
if (getComputedStyle(broEle).position !== "absolute") break;
broEle = broEle.previousElementSibling;
}
Expand All @@ -22144,6 +22146,7 @@ ImgOps | https://imgops.com/#b#`;
broEle = target.nextElementSibling;
while (broEle) {
if (broEle.nodeName == "IMG") broImg = broEle;
else if (broEle.nodeName == "PICTURE") broImg = broEle.querySelector("img");
if (getComputedStyle(broEle).position == "absolute") break;
broEle = broEle.nextElementSibling;
}
Expand Down
Loading