支持作品自定义保存目录

This commit is contained in:
lzyme.dev@gmail.com
2026-10-11 23:12:30 +08:00
parent e74f2cbdc8
commit b81922103a
7 changed files with 2614 additions and 80 deletions
+224 -67
View File
@@ -1,7 +1,7 @@
// ==UserScript== // ==UserScript==
// @name JHS-enhance // @name JHS-enhance
// @namespace JHS-enhance // @namespace JHS-enhance
// @version 3.3.14 // @version 3.3.15
// @author xiebro,fireinrain // @author xiebro,fireinrain
// @description Jav-鉴黄师 增强脚本。列表页:作品状态标签、一键筛选、新作品检测、演员黑名单过滤;详情页:磁力链接高亮、DMM 多画质预览视频、标题翻译、整合字幕搜索(迅雷+SubTitleCat)并支持 115 直传、多源预览图(javfree/projectjav/javstore)含来源切换;数据:115 网盘目录匹配与多目录选择、云盘备份/恢复、跨 Tab 同步;其他:自动翻页、分类折叠、Top250、以图识图、热门榜单、评论查看、相关清单。支持 JavDB / JavBus / JavSee / SeeJav / FC2 / JavTrailers // @description Jav-鉴黄师 增强脚本。列表页:作品状态标签、一键筛选、新作品检测、演员黑名单过滤;详情页:磁力链接高亮、DMM 多画质预览视频、标题翻译、整合字幕搜索(迅雷+SubTitleCat)并支持 115 直传、多源预览图(javfree/projectjav/javstore)含来源切换;数据:115 网盘目录匹配与多目录选择、云盘备份/恢复、跨 Tab 同步;其他:自动翻页、分类折叠、Top250、以图识图、热门榜单、评论查看、相关清单。支持 JavDB / JavBus / JavSee / SeeJav / FC2 / JavTrailers
// @license MIT // @license MIT
@@ -254,7 +254,7 @@ System.register("./__entry.js", ['jquery', 'localforage', 'toastify-js', 'blueim
isSearchPage = currentHref$1.includes("/search?q") || currentHref$1.includes("/search/") || currentHref$1.includes("/users/"), isSearchPage = currentHref$1.includes("/search?q") || currentHref$1.includes("/search/") || currentHref$1.includes("/users/"),
Status_RUNNING = "RUNNING", Status_SUCCESS = "SUCCESS", Status_FAIL = "FAIL", Status_LOADING = "LOADING", Status_RUNNING = "RUNNING", Status_SUCCESS = "SUCCESS", Status_FAIL = "FAIL", Status_LOADING = "LOADING",
Status_FILTER$1 = "filter", Status_FAVORITE$1 = "favorite", Status_HAS_DOWN$1 = "hasDown", Status_FILTER$1 = "filter", Status_FAVORITE$1 = "favorite", Status_HAS_DOWN$1 = "hasDown",
Status_HAS_WATCH$1 = "hasWatch", NO = "no", YES$1 = "yes", qualityOptions = [{ Status_HAS_WATCH$1 = "hasWatch", NO$1 = "no", YES$1 = "yes", qualityOptions = [{
id: "video-mhb", id: "video-mhb",
quality: "dmb_w", quality: "dmb_w",
text: "旧视频源-中画质宽版 (404p)", text: "旧视频源-中画质宽版 (404p)",
@@ -1315,7 +1315,7 @@ System.register("./__entry.js", ['jquery', 'localforage', 'toastify-js', 'blueim
window.Status_FAVORITE = Status_FAVORITE$1; window.Status_FAVORITE = Status_FAVORITE$1;
window.Status_HAS_DOWN = Status_HAS_DOWN$1; window.Status_HAS_DOWN = Status_HAS_DOWN$1;
window.Status_HAS_WATCH = Status_HAS_WATCH$1; window.Status_HAS_WATCH = Status_HAS_WATCH$1;
window.NO = NO; window.NO = NO$1;
window.YES = YES$1; window.YES = YES$1;
const HAS_GM = typeof GM !== "undefined"; const HAS_GM = typeof GM !== "undefined";
const NEW_GM = ((scope, GM2) => { const NEW_GM = ((scope, GM2) => {
@@ -3336,7 +3336,7 @@ ${value}\r
} }
async loadNextPage() { async loadNextPage() {
var _a2; var _a2;
if (await storageManager.getSetting("autoPage", YES$1) === NO) { if (await storageManager.getSetting("autoPage", YES$1) === NO$1) {
this.setState("waterfall-loading", ""); this.setState("waterfall-loading", "");
return; return;
} }
@@ -4077,6 +4077,7 @@ ${value}\r
<div class="side-menu-item ${"base-panel" === defaultActivePanel ? "active" : ""}" data-panel="base-panel">⚙️ 基础配置</div> <div class="side-menu-item ${"base-panel" === defaultActivePanel ? "active" : ""}" data-panel="base-panel">⚙️ 基础配置</div>
<div class="side-menu-item ${"filter-panel" === defaultActivePanel ? "active" : ""}" data-panel="filter-panel">🚫 屏蔽配置</div> <div class="side-menu-item ${"filter-panel" === defaultActivePanel ? "active" : ""}" data-panel="filter-panel">🚫 屏蔽配置</div>
<div class="side-menu-item ${"task-panel" === defaultActivePanel ? "active" : ""}" data-panel="task-panel">📋 定时任务</div> <div class="side-menu-item ${"task-panel" === defaultActivePanel ? "active" : ""}" data-panel="task-panel">📋 定时任务</div>
<div class="side-menu-item ${"offline-panel" === defaultActivePanel ? "active" : ""}" data-panel="offline-panel">📂 离线配置</div>
<div class="side-menu-item ${"domain-panel" === defaultActivePanel ? "active" : ""}" data-panel="domain-panel" title="第三方视频资源域名配置">🌐 外部网站</div> <div class="side-menu-item ${"domain-panel" === defaultActivePanel ? "active" : ""}" data-panel="domain-panel" title="第三方视频资源域名配置">🌐 外部网站</div>
<div class="side-menu-item ${"mark-delete-panel" === defaultActivePanel ? "active" : ""}" data-panel="mark-delete-panel">🗑️ 标记删除</div> <div class="side-menu-item ${"mark-delete-panel" === defaultActivePanel ? "active" : ""}" data-panel="mark-delete-panel">🗑️ 标记删除</div>
<div class="side-menu-item ${"hotkey-panel" === defaultActivePanel ? "active" : ""}" data-panel="hotkey-panel">⌨️ 快捷键配置</div> <div class="side-menu-item ${"hotkey-panel" === defaultActivePanel ? "active" : ""}" data-panel="hotkey-panel">⌨️ 快捷键配置</div>
@@ -4460,6 +4461,37 @@ ${value}\r
</div> </div>
</div> </div>
<!-- 离线配置面板 -->
<div id="offline-panel" class="content-panel" style="display: ${"offline-panel" === defaultActivePanel ? "block" : "none"};">
<div style="border: 1px solid #ccc; padding: 10px; margin-bottom: 15px;">
<span style="font-size: 14px; font-weight: bold; padding:3px">115离线文件夹命名</span>
<div class="setting-item">
<span class="setting-label">
启用自定义格式:
</span>
<div class="form-content" style="text-align: right;">
<input type="checkbox" id="enable115OfflineFormat" class="mini-switch">
</div>
</div>
<div class="setting-item">
<span class="setting-label">命名格式:</span>
<div class="form-content" style="max-width: 600px;">
<input id="offlineFolderFormat" placeholder="例: \${code}" style="width: 100%;">
</div>
</div>
<div style="margin-top: 10px; padding: 8px; background: #f8f8f8; border-radius: 4px; font-size: 12px; color: #666; line-height: 1.8;">
<div style="font-weight: bold; margin-bottom: 4px;">可用变量(\${} 形式):</div>
<div><code>code</code> - 完整番号(如 ABC-123)</div>
<div><code>title</code> - 作品标题</div>
<div><code>maker</code> - 片商</div>
<div><code>actor</code> - 演员(多演员只取第一个)</div>
<div><code>date</code> - 当前日期(YYYY-MM-DD)</div>
<div style="margin-top: 6px; color: #999;">例: <code>\${actor}/\${code}</code> = 演员目录下的番号子目录</div>
<div style="color: #e67e22;">支持 / 分隔的多级目录,离线文件下载到最末级子目录</div>
</div>
</div>
</div>
<!-- 域名设置面板 --> <!-- 域名设置面板 -->
<div id="domain-panel" class="content-panel" style="display: ${"domain-panel" === defaultActivePanel ? "block" : "none"};"> <div id="domain-panel" class="content-panel" style="display: ${"domain-panel" === defaultActivePanel ? "block" : "none"};">
<div class="setting-item"> <div class="setting-item">
@@ -4969,6 +5001,8 @@ ${value}\r
})).on("keydown", ((event) => this.handleHotkeyInput(event, $element))); })).on("keydown", ((event) => this.handleHotkeyInput(event, $element)));
})); }));
$("#enableImageHotKey").prop("checked", !!settingObj.enableImageHotKey && settingObj.enableImageHotKey === YES$1); $("#enableImageHotKey").prop("checked", !!settingObj.enableImageHotKey && settingObj.enableImageHotKey === YES$1);
$("#enable115OfflineFormat").prop("checked", !!settingObj.enable115OfflineFormat && settingObj.enable115OfflineFormat === YES$1);
$("#offlineFolderFormat").val(settingObj.offlineFolderFormat || "");
} }
handleHotkeyInput(event, $input) { handleHotkeyInput(event, $input) {
event.preventDefault(); event.preventDefault();
@@ -5041,7 +5075,7 @@ ${value}\r
storageManager.saveSettingItem("containerWidth", containerWidth + 70); storageManager.saveSettingItem("containerWidth", containerWidth + 70);
})); }));
$("#dialogOpenDetail").on("change", ((event) => { $("#dialogOpenDetail").on("change", ((event) => {
let dialogOpenDetail = $("#dialogOpenDetail").is(":checked") ? YES$1 : NO; let dialogOpenDetail = $("#dialogOpenDetail").is(":checked") ? YES$1 : NO$1;
storageManager.saveSettingItem("dialogOpenDetail", dialogOpenDetail); storageManager.saveSettingItem("dialogOpenDetail", dialogOpenDetail);
})); }));
$("#showFilterItem").prop("checked", !!settingObj.showFilterItem && settingObj.showFilterItem === YES$1); $("#showFilterItem").prop("checked", !!settingObj.showFilterItem && settingObj.showFilterItem === YES$1);
@@ -5051,32 +5085,32 @@ ${value}\r
$("#showHasDownItem").prop("checked", !settingObj.showHasDownItem || settingObj.showHasDownItem === YES$1); $("#showHasDownItem").prop("checked", !settingObj.showHasDownItem || settingObj.showHasDownItem === YES$1);
$("#showHasWatchItem").prop("checked", !settingObj.showHasWatchItem || settingObj.showHasWatchItem === YES$1); $("#showHasWatchItem").prop("checked", !settingObj.showHasWatchItem || settingObj.showHasWatchItem === YES$1);
$("#showFilterItem").on("change", (async (event) => { $("#showFilterItem").on("change", (async (event) => {
let showFilterItem = $("#showFilterItem").is(":checked") ? YES$1 : NO; let showFilterItem = $("#showFilterItem").is(":checked") ? YES$1 : NO$1;
await storageManager.saveSettingItem("showFilterItem", showFilterItem); await storageManager.saveSettingItem("showFilterItem", showFilterItem);
window.refresh(); window.refresh();
})); }));
$("#showFilterActorItem").on("change", (async (event) => { $("#showFilterActorItem").on("change", (async (event) => {
let showFilterActorItem = $("#showFilterActorItem").is(":checked") ? YES$1 : NO; let showFilterActorItem = $("#showFilterActorItem").is(":checked") ? YES$1 : NO$1;
await storageManager.saveSettingItem("showFilterActorItem", showFilterActorItem); await storageManager.saveSettingItem("showFilterActorItem", showFilterActorItem);
window.refresh(); window.refresh();
})); }));
$("#showFilterKeywordItem").on("change", (async (event) => { $("#showFilterKeywordItem").on("change", (async (event) => {
let showFilterKeywordItem = $("#showFilterKeywordItem").is(":checked") ? YES$1 : NO; let showFilterKeywordItem = $("#showFilterKeywordItem").is(":checked") ? YES$1 : NO$1;
await storageManager.saveSettingItem("showFilterKeywordItem", showFilterKeywordItem); await storageManager.saveSettingItem("showFilterKeywordItem", showFilterKeywordItem);
window.refresh(); window.refresh();
})); }));
$("#showFavoriteItem").on("change", (async (event) => { $("#showFavoriteItem").on("change", (async (event) => {
let showFavoriteItem = $("#showFavoriteItem").is(":checked") ? YES$1 : NO; let showFavoriteItem = $("#showFavoriteItem").is(":checked") ? YES$1 : NO$1;
await storageManager.saveSettingItem("showFavoriteItem", showFavoriteItem); await storageManager.saveSettingItem("showFavoriteItem", showFavoriteItem);
window.refresh(); window.refresh();
})); }));
$("#showHasDownItem").on("change", (async (event) => { $("#showHasDownItem").on("change", (async (event) => {
let showHasDownItem = $("#showHasDownItem").is(":checked") ? YES$1 : NO; let showHasDownItem = $("#showHasDownItem").is(":checked") ? YES$1 : NO$1;
await storageManager.saveSettingItem("showHasDownItem", showHasDownItem); await storageManager.saveSettingItem("showHasDownItem", showHasDownItem);
window.refresh(); window.refresh();
})); }));
$("#showHasWatchItem").on("change", (async (event) => { $("#showHasWatchItem").on("change", (async (event) => {
let showHasWatchItem = $("#showHasWatchItem").is(":checked") ? YES$1 : NO; let showHasWatchItem = $("#showHasWatchItem").is(":checked") ? YES$1 : NO$1;
await storageManager.saveSettingItem("showHasWatchItem", showHasWatchItem); await storageManager.saveSettingItem("showHasWatchItem", showHasWatchItem);
window.refresh(); window.refresh();
})); }));
@@ -5088,23 +5122,23 @@ ${value}\r
}; };
$("#showAllItem").prop("checked", !!settingObj.showAllItem && settingObj.showAllItem === YES$1); $("#showAllItem").prop("checked", !!settingObj.showAllItem && settingObj.showAllItem === YES$1);
$("#showAllItem").on("change", (async (event) => { $("#showAllItem").on("change", (async (event) => {
let showAllItem = $("#showAllItem").is(":checked") ? YES$1 : NO; let showAllItem = $("#showAllItem").is(":checked") ? YES$1 : NO$1;
await storageManager.saveSettingItem("showAllItem", showAllItem); await storageManager.saveSettingItem("showAllItem", showAllItem);
updateOtherCheckboxesState(); updateOtherCheckboxesState();
window.refresh(); window.refresh();
})); }));
updateOtherCheckboxesState(); updateOtherCheckboxesState();
$("#needClosePage").on("change", (async (event) => { $("#needClosePage").on("change", (async (event) => {
await storageManager.saveSettingItem("needClosePage", $("#needClosePage").is(":checked") ? YES$1 : NO); await storageManager.saveSettingItem("needClosePage", $("#needClosePage").is(":checked") ? YES$1 : NO$1);
window.refresh(); window.refresh();
})); }));
$("#autoPage").on("change", (async (event) => { $("#autoPage").on("change", (async (event) => {
const autoPage = $("#autoPage").is(":checked") ? YES$1 : NO; const autoPage = $("#autoPage").is(":checked") ? YES$1 : NO$1;
await storageManager.saveSettingItem("autoPage", autoPage); await storageManager.saveSettingItem("autoPage", autoPage);
autoPage === YES$1 ? ($("#sort-toggle-btn").hide(), $("#one-time-sort-btn").show()) : ($("#sort-toggle-btn").show(), $("#one-time-sort-btn").hide()); autoPage === YES$1 ? ($("#sort-toggle-btn").hide(), $("#one-time-sort-btn").show()) : ($("#sort-toggle-btn").show(), $("#one-time-sort-btn").hide());
})); }));
$("#translateTitle").on("change", (async (event) => { $("#translateTitle").on("change", (async (event) => {
const translateTitle = $("#translateTitle").is(":checked") ? YES$1 : NO; const translateTitle = $("#translateTitle").is(":checked") ? YES$1 : NO$1;
await storageManager.saveSettingItem("translateTitle", translateTitle); await storageManager.saveSettingItem("translateTitle", translateTitle);
if (translateTitle === YES$1) { if (translateTitle === YES$1) {
await this.getBean("ListPagePlugin").doFilter(); await this.getBean("ListPagePlugin").doFilter();
@@ -5116,38 +5150,38 @@ ${value}\r
})); }));
$("#hoverBigImg").prop("checked", !!settingObj.hoverBigImg && settingObj.hoverBigImg === YES$1); $("#hoverBigImg").prop("checked", !!settingObj.hoverBigImg && settingObj.hoverBigImg === YES$1);
$("#hoverBigImg").on("change", (async (event) => { $("#hoverBigImg").on("change", (async (event) => {
const hoverBigImg = $("#hoverBigImg").is(":checked") ? YES$1 : NO; const hoverBigImg = $("#hoverBigImg").is(":checked") ? YES$1 : NO$1;
await storageManager.saveSettingItem("hoverBigImg", hoverBigImg); await storageManager.saveSettingItem("hoverBigImg", hoverBigImg);
hoverBigImg === YES$1 ? window.imageHoverPreviewObj = new ImageHoverPreview({ hoverBigImg === YES$1 ? window.imageHoverPreviewObj = new ImageHoverPreview({
selector: this.getSelector().coverImgSelector selector: this.getSelector().coverImgSelector
}) : window.imageHoverPreviewObj && window.imageHoverPreviewObj.destroy(); }) : window.imageHoverPreviewObj && window.imageHoverPreviewObj.destroy();
})); }));
$("#enableLoadActressInfo").on("change", (async (event) => { $("#enableLoadActressInfo").on("change", (async (event) => {
const enableLoadActressInfo = $("#enableLoadActressInfo").is(":checked") ? YES$1 : NO; const enableLoadActressInfo = $("#enableLoadActressInfo").is(":checked") ? YES$1 : NO$1;
await storageManager.saveSettingItem("enableLoadActressInfo", enableLoadActressInfo); await storageManager.saveSettingItem("enableLoadActressInfo", enableLoadActressInfo);
enableLoadActressInfo === YES$1 ? this.getBean("ActressInfoPlugin").loadActressInfo() : $(".actress-info").remove(); enableLoadActressInfo === YES$1 ? this.getBean("ActressInfoPlugin").loadActressInfo() : $(".actress-info").remove();
})); }));
$("#enableLoadOtherSite").on("change", (async (event) => { $("#enableLoadOtherSite").on("change", (async (event) => {
const enableLoadOtherSite = $("#enableLoadOtherSite").is(":checked") ? YES$1 : NO; const enableLoadOtherSite = $("#enableLoadOtherSite").is(":checked") ? YES$1 : NO$1;
await storageManager.saveSettingItem("enableLoadOtherSite", enableLoadOtherSite); await storageManager.saveSettingItem("enableLoadOtherSite", enableLoadOtherSite);
enableLoadOtherSite === YES$1 ? this.getBean("OtherSitePlugin").loadOtherSite().then() : $("#otherSiteBox").remove(); enableLoadOtherSite === YES$1 ? this.getBean("OtherSitePlugin").loadOtherSite().then() : $("#otherSiteBox").remove();
})); }));
$("#enableLoadScreenShot").prop("checked", !settingObj.enableLoadScreenShot || settingObj.enableLoadScreenShot === YES$1); $("#enableLoadScreenShot").prop("checked", !settingObj.enableLoadScreenShot || settingObj.enableLoadScreenShot === YES$1);
$("#enableLoadScreenShot").on("change", (async (event) => { $("#enableLoadScreenShot").on("change", (async (event) => {
const enableLoadScreenShot = $("#enableLoadScreenShot").is(":checked") ? YES$1 : NO; const enableLoadScreenShot = $("#enableLoadScreenShot").is(":checked") ? YES$1 : NO$1;
await storageManager.saveSettingItem("enableLoadScreenShot", enableLoadScreenShot); await storageManager.saveSettingItem("enableLoadScreenShot", enableLoadScreenShot);
enableLoadScreenShot === YES$1 ? this.getBean("ScreenShotPlugin").loadScreenShot().then() : $(".screen-container").remove(); enableLoadScreenShot === YES$1 ? this.getBean("ScreenShotPlugin").loadScreenShot().then() : $(".screen-container").remove();
})); }));
$("#enableLoadPreviewVideo").prop("checked", !settingObj.enableLoadPreviewVideo || settingObj.enableLoadPreviewVideo === YES$1); $("#enableLoadPreviewVideo").prop("checked", !settingObj.enableLoadPreviewVideo || settingObj.enableLoadPreviewVideo === YES$1);
$("#enableLoadPreviewVideo").on("change", (async (event) => { $("#enableLoadPreviewVideo").on("change", (async (event) => {
const enableLoadPreviewVideo = $("#enableLoadPreviewVideo").is(":checked") ? YES$1 : NO; const enableLoadPreviewVideo = $("#enableLoadPreviewVideo").is(":checked") ? YES$1 : NO$1;
await storageManager.saveSettingItem("enableLoadPreviewVideo", enableLoadPreviewVideo); await storageManager.saveSettingItem("enableLoadPreviewVideo", enableLoadPreviewVideo);
})); }));
$("#enable115AutoRename").prop("checked", !!settingObj.enable115AutoRename && settingObj.enable115AutoRename === YES$1); $("#enable115AutoRename").prop("checked", !!settingObj.enable115AutoRename && settingObj.enable115AutoRename === YES$1);
$("#autoRenameScope").val(settingObj.autoRenameScope || "vr_only"); $("#autoRenameScope").val(settingObj.autoRenameScope || "vr_only");
$("#autoRenameScopeRow").toggle(!!settingObj.enable115AutoRename && settingObj.enable115AutoRename === YES$1); $("#autoRenameScopeRow").toggle(!!settingObj.enable115AutoRename && settingObj.enable115AutoRename === YES$1);
$("#enable115AutoRename").on("change", (async (event) => { $("#enable115AutoRename").on("change", (async (event) => {
const enable115AutoRename = $("#enable115AutoRename").is(":checked") ? YES$1 : NO; const enable115AutoRename = $("#enable115AutoRename").is(":checked") ? YES$1 : NO$1;
await storageManager.saveSettingItem("enable115AutoRename", enable115AutoRename); await storageManager.saveSettingItem("enable115AutoRename", enable115AutoRename);
$("#autoRenameScopeRow").toggle(enable115AutoRename === YES$1); $("#autoRenameScopeRow").toggle(enable115AutoRename === YES$1);
})); }));
@@ -5156,14 +5190,14 @@ ${value}\r
})); }));
$("#enable115Match").prop("checked", !!settingObj.enable115Match && settingObj.enable115Match === YES$1); $("#enable115Match").prop("checked", !!settingObj.enable115Match && settingObj.enable115Match === YES$1);
$("#enable115Match").on("change", (async (event) => { $("#enable115Match").on("change", (async (event) => {
const enable115Match = $("#enable115Match").is(":checked") ? YES$1 : NO; const enable115Match = $("#enable115Match").is(":checked") ? YES$1 : NO$1;
await storageManager.saveSettingItem("enable115Match", enable115Match); await storageManager.saveSettingItem("enable115Match", enable115Match);
let movieList = $(this.getSelector().itemSelector).toArray(); let movieList = $(this.getSelector().itemSelector).toArray();
await this.getBean("WangPan115MatchPlugin").matchMovieList(movieList); await this.getBean("WangPan115MatchPlugin").matchMovieList(movieList);
})); }));
$("#enableVerticalModel").prop("checked", !!settingObj.enableVerticalModel && settingObj.enableVerticalModel === YES$1); $("#enableVerticalModel").prop("checked", !!settingObj.enableVerticalModel && settingObj.enableVerticalModel === YES$1);
$("#enableVerticalModel").on("change", (async (event) => { $("#enableVerticalModel").on("change", (async (event) => {
const enableVerticalModel = $("#enableVerticalModel").is(":checked") ? YES$1 : NO; const enableVerticalModel = $("#enableVerticalModel").is(":checked") ? YES$1 : NO$1;
await storageManager.saveSettingItem("enableVerticalModel", enableVerticalModel); await storageManager.saveSettingItem("enableVerticalModel", enableVerticalModel);
this.applyImageMode(); this.applyImageMode();
})); }));
@@ -5272,7 +5306,7 @@ ${value}\r
} }
async applyImageMode() { async applyImageMode() {
$("#verticalImgStyle").remove(); $("#verticalImgStyle").remove();
if (await storageManager.getSetting("enableVerticalModel", NO) === YES$1) { if (await storageManager.getSetting("enableVerticalModel", NO$1) === YES$1) {
let imgPosition = "100% 50% !important"; let imgPosition = "100% 50% !important";
window.location.href.includes("/advanced_search?type=100") && (imgPosition = "50% 50% !important"); window.location.href.includes("/advanced_search?type=100") && (imgPosition = "50% 50% !important");
const verticalStyle = ` const verticalStyle = `
@@ -5443,11 +5477,11 @@ ${value}\r
settingObj.refresh_token = $("#refresh_token").val(); settingObj.refresh_token = $("#refresh_token").val();
settingObj.highlightedTagNumber = $("#highlightedTagNumber").val(); settingObj.highlightedTagNumber = $("#highlightedTagNumber").val();
settingObj.highlightedTagColor = $("#highlightedTagColor").val(); settingObj.highlightedTagColor = $("#highlightedTagColor").val();
settingObj.showWaitCheckBtn = $("#showWaitCheckBtn").is(":checked") ? YES$1 : NO; settingObj.showWaitCheckBtn = $("#showWaitCheckBtn").is(":checked") ? YES$1 : NO$1;
settingObj.showWaitCheckBtn === YES$1 ? $("#waitCheckBtn").show() : $("#waitCheckBtn").hide(); settingObj.showWaitCheckBtn === YES$1 ? $("#waitCheckBtn").show() : $("#waitCheckBtn").hide();
settingObj.showWaitDownBtn = $("#showWaitDownBtn").is(":checked") ? YES$1 : NO; settingObj.showWaitDownBtn = $("#showWaitDownBtn").is(":checked") ? YES$1 : NO$1;
settingObj.showWaitDownBtn === YES$1 ? $("#waitDownBtn").show() : $("#waitDownBtn").hide(); settingObj.showWaitDownBtn === YES$1 ? $("#waitDownBtn").show() : $("#waitDownBtn").hide();
settingObj.randomOpenWaitDown = $("#randomOpenWaitDown").is(":checked") ? YES$1 : NO; settingObj.randomOpenWaitDown = $("#randomOpenWaitDown").is(":checked") ? YES$1 : NO$1;
settingObj.checkConcurrencyCount = $("#checkConcurrencyCount").val(); settingObj.checkConcurrencyCount = $("#checkConcurrencyCount").val();
settingObj.checkRequestSleep = $("#checkRequestSleep").val(); settingObj.checkRequestSleep = $("#checkRequestSleep").val();
settingObj.enableCheckBlacklist = $("#enableCheckBlacklist").val(); settingObj.enableCheckBlacklist = $("#enableCheckBlacklist").val();
@@ -5473,18 +5507,20 @@ ${value}\r
settingObj.javDbUrl = $("#javDbUrl").val().replace(/\/$/, ""); settingObj.javDbUrl = $("#javDbUrl").val().replace(/\/$/, "");
settingObj.javBusUrl = $("#javBusUrl").val().replace(/\/$/, ""); settingObj.javBusUrl = $("#javBusUrl").val().replace(/\/$/, "");
settingObj.supJavUrl = $("#supJavUrl").val().replace(/\/$/, ""); settingObj.supJavUrl = $("#supJavUrl").val().replace(/\/$/, "");
settingObj.enableTitleSelectFilter = $("#enableTitleSelectFilter").is(":checked") ? YES$1 : NO; settingObj.enableTitleSelectFilter = $("#enableTitleSelectFilter").is(":checked") ? YES$1 : NO$1;
settingObj.enableFavoriteActresses = $("#enableFavoriteActresses").is(":checked") ? YES$1 : NO; settingObj.enableFavoriteActresses = $("#enableFavoriteActresses").is(":checked") ? YES$1 : NO$1;
settingObj.enableSaveActressCarInfo = $("#enableSaveActressCarInfo").is(":checked") ? YES$1 : NO; settingObj.enableSaveActressCarInfo = $("#enableSaveActressCarInfo").is(":checked") ? YES$1 : NO$1;
settingObj.enableScreenSvg = $("#enableScreenSvg").is(":checked") ? YES$1 : NO; settingObj.enableScreenSvg = $("#enableScreenSvg").is(":checked") ? YES$1 : NO$1;
settingObj.enableVideoSvg = $("#enableVideoSvg").is(":checked") ? YES$1 : NO; settingObj.enableVideoSvg = $("#enableVideoSvg").is(":checked") ? YES$1 : NO$1;
settingObj.enableHandleSvg = $("#enableHandleSvg").is(":checked") ? YES$1 : NO; settingObj.enableHandleSvg = $("#enableHandleSvg").is(":checked") ? YES$1 : NO$1;
settingObj.enableSiteSvg = $("#enableSiteSvg").is(":checked") ? YES$1 : NO; settingObj.enableSiteSvg = $("#enableSiteSvg").is(":checked") ? YES$1 : NO$1;
settingObj.enableCopySvg = $("#enableCopySvg").is(":checked") ? YES$1 : NO; settingObj.enableCopySvg = $("#enableCopySvg").is(":checked") ? YES$1 : NO$1;
$("#hotkey-panel [id]").map(((i, el) => el.id)).get().forEach(((containerId) => { $("#hotkey-panel [id]").map(((i, el) => el.id)).get().forEach(((containerId) => {
settingObj[containerId] = $(`#${containerId}`).val(); settingObj[containerId] = $(`#${containerId}`).val();
})); }));
settingObj.enableImageHotKey = $("#enableImageHotKey").is(":checked") ? YES$1 : NO; settingObj.enableImageHotKey = $("#enableImageHotKey").is(":checked") ? YES$1 : NO$1;
settingObj.enable115OfflineFormat = $("#enable115OfflineFormat").is(":checked") ? YES$1 : NO$1;
settingObj.offlineFolderFormat = $("#offlineFolderFormat").val();
await storageManager.saveSetting(settingObj); await storageManager.saveSetting(settingObj);
let reviewKeywordList = []; let reviewKeywordList = [];
$("#reviewKeywordContainer .keyword-label").toArray().forEach(((item) => { $("#reviewKeywordContainer .keyword-label").toArray().forEach(((item) => {
@@ -7439,7 +7475,7 @@ ${value}\r
} }
} }
async handleVideo() { async handleVideo() {
if (await storageManager.getSetting("enableLoadPreviewVideo", YES$1) === NO) return; if (await storageManager.getSetting("enableLoadPreviewVideo", YES$1) === NO$1) return;
const $videoEl = $("#preview-video"); const $videoEl = $("#preview-video");
if (!$videoEl.length) return; if (!$videoEl.length) return;
const $videoContainer = $videoEl.parent(); const $videoContainer = $videoEl.parent();
@@ -9282,7 +9318,7 @@ ${value}\r
$foldCategoryBtn.on("click", (async (event) => { $foldCategoryBtn.on("click", (async (event) => {
event.preventDefault(); event.preventDefault();
isFolded = !isFolded; isFolded = !isFolded;
localStorage.setItem("jhs_foldCategory", isFolded ? YES$1 : NO); localStorage.setItem("jhs_foldCategory", isFolded ? YES$1 : NO$1);
const [newText2, newIcon2] = isFolded ? ["展开", "icon-angle-double-down"] : ["折叠", "icon-angle-double-up"]; const [newText2, newIcon2] = isFolded ? ["展开", "icon-angle-double-down"] : ["折叠", "icon-angle-double-up"];
$foldCategoryBtn.find("span").text(newText2).end().find("i").attr("class", newIcon2); $foldCategoryBtn.find("span").text(newText2).end().find("i").attr("class", newIcon2);
$subTags[isFolded ? "hide" : "show"](); $subTags[isFolded ? "hide" : "show"]();
@@ -10779,7 +10815,7 @@ ${err.stack}` : "");
return "RelatedPlugin"; return "RelatedPlugin";
} }
async showRelated($eleBox, movieId) { async showRelated($eleBox, movieId) {
const enableLoadRelated = await storageManager.getSetting("enableLoadRelated", NO), $magnets = $eleBox; const enableLoadRelated = await storageManager.getSetting("enableLoadRelated", NO$1), $magnets = $eleBox;
if (movieId) { if (movieId) {
$magnets.append(` $magnets.append(`
<div style="display: flex; align-items: center; margin: 16px 0; color: #666; font-size: 14px;"> <div style="display: flex; align-items: center; margin: 16px 0; color: #666; font-size: 14px;">
@@ -10810,7 +10846,7 @@ ${err.stack}` : "");
} else { } else {
$("#relatedContainer").hide(); $("#relatedContainer").hide();
$("#relatedFooter").hide(); $("#relatedFooter").hide();
storageManager.saveSettingItem("enableLoadRelated", NO); storageManager.saveSettingItem("enableLoadRelated", NO$1);
} }
})); }));
$magnets.append('<div id="relatedContainer"></div>'); $magnets.append('<div id="relatedContainer"></div>');
@@ -12578,7 +12614,103 @@ ${err.stack}` : "");
$headerRow.append($("<td>").text("操作")); $headerRow.append($("<td>").text("操作"));
} }
} }
static sanitizeDirName(str) {
if (!str) return "";
return str.replace(/[\\/:*?"<>|]/g, "").replace(/\s+/g, " ").trim();
}
static parseOfflineDirTemplate(str, params) {
if (!str || !params) return str;
return str.replace(/\$\{(\w+)\}/g, (match, key) => {
if (!params.hasOwnProperty(key)) return match;
const value = params[key] || "";
return WangPan115TaskPlugin.sanitizeDirName(String(value));
});
}
static async ensureDir(dirName, pid = 0) {
const result = await gmHttp.postFileFormData("https://webapi.115.com/files/add", {
pid,
cname: dirName
});
if (result && result.file_id) return result.file_id;
const searchRes = await searchFiles(dirName, 0, 1, {fc: 1});
if (searchRes && searchRes.data && searchRes.data.length > 0) {
const match = searchRes.data.find((d) => d.pid === pid || d.pid === String(pid));
if (match) return match.fid || match.file_id;
}
return null;
}
static async registerDirAsDownPath(fileId, dirName) {
await gmHttp.postFileFormData("https://webapi.115.com/offine/downpath", {
file_id: fileId
});
const list = await getDownPathList();
const created = list ? list.find((d) => d.file_id === fileId || String(d.file_id) === String(fileId)) : null;
return created ? created.id : null;
}
static async createMultiLevelDownPath(templatePath) {
const segments = templatePath.split("/").filter((s) => s.trim());
if (segments.length === 0) return null;
let pid = 0;
let fileId = null;
for (const seg of segments) {
fileId = await WangPan115TaskPlugin.ensureDir(seg.trim(), pid);
if (!fileId) {
console.error("[115离线] 创建目录失败:", seg);
return null;
}
pid = fileId;
}
const lastDirName = segments[segments.length - 1].trim();
const downPathId = await WangPan115TaskPlugin.registerDirAsDownPath(fileId, lastDirName);
console.log("[115离线] 多级目录创建完成:", templatePath, "→ downPathId=" + downPathId);
return downPathId;
}
getPageInfoForOffline() {
const baseInfo = this.getPageInfo();
const carNum2 = baseInfo.carNum || "";
let title = "", maker = "", actor = "";
if (isJavBus$1) {
title = $("h3").first().text().trim();
maker = $('span.header:contains("製作商:")').parent("p").text().replace("製作商:", "").trim() || $('span.header:contains("制作商:")').parent("p").text().replace("制作商:", "").trim();
const actorEl = $('span.genre a[href*="/star/"]').first();
actor = actorEl.length ? actorEl.text().trim() : "";
} else {
title = $(".current-title").first().text().trim() || $("h2.title.is-4 .current-title").first().text().trim() || $(".movie-title").first().text().trim();
maker = $('strong:contains("片商:")').parent().find(".value").text().trim() || $('strong:contains("片商:")').parent().find(".value").text().trim();
actor = $(".actor-female").first().text().trim() || $('strong:contains("演員:"), strong:contains("演员:")').parent().find(".value a").first().text().trim() || "";
}
const now = /* @__PURE__ */ new Date();
if (carNum2 && title) {
const upperTitle = title.toUpperCase();
const upperCode = carNum2.toUpperCase();
if (upperTitle.startsWith(upperCode)) {
title = title.substring(carNum2.length).replace(/^[\s\-_]+/, "").trim();
}
}
console.log("[115离线] 页面信息提取:", {code: carNum2, title, maker, actor});
return {
code: carNum2,
title,
maker,
actor,
date: utils.formatDate(now).split(" ")[0]
};
}
async getSavePathId(nyName) { async getSavePathId(nyName) {
const enableCustom = await storageManager.getSetting("enable115OfflineFormat", NO);
if (enableCustom === YES) {
const template = await storageManager.getSetting("offlineFolderFormat", "");
if (template && template.includes("${")) {
const pageInfo = this.getPageInfoForOffline();
return WangPan115TaskPlugin.parseOfflineDirTemplate(template, pageInfo);
}
}
let savePath115 = await storageManager.getSetting("savePath115", "云下载"); let savePath115 = await storageManager.getSetting("savePath115", "云下载");
nyName && (savePath115 = savePath115.replaceAll("{ny}", nyName)); nyName && (savePath115 = savePath115.replaceAll("{ny}", nyName));
savePath115 = savePath115.replaceAll("{date}", utils.formatDate(/* @__PURE__ */ new Date())); savePath115 = savePath115.replaceAll("{date}", utils.formatDate(/* @__PURE__ */ new Date()));
@@ -12599,17 +12731,42 @@ ${err.stack}` : "");
}); });
return; return;
} }
const sign = singInfo.sign, time = singInfo.time, userId = this.getUserId(), const sign = singInfo.sign, time = singInfo.time, userId = this.getUserId();
result = await (async (magnet, wp_path_id = "", uid, sign2, time2) => { let wp_path_id = savePath || "";
if (!wp_path_id) {
const fullPath = await this.getSavePathId();
console.log("[115离线] 目录模板解析结果:", fullPath);
if (fullPath) {
if (fullPath.includes("/")) {
console.log("[115离线] 检测到多级目录,逐级创建:", fullPath);
const newId = await WangPan115TaskPlugin.createMultiLevelDownPath(fullPath);
if (newId) wp_path_id = newId;
} else {
const downPathList = await getDownPathList();
if (downPathList && downPathList.length > 0) {
const matched = downPathList.find(((d) => d.name === fullPath));
if (matched) {
wp_path_id = matched.id;
console.log('[115离线] 目录匹配结果: 匹配到 "' + matched.name + '" -> id=' + matched.id);
} else {
console.log('[115离线] 目录匹配结果: 未匹配到 "' + fullPath + '",自动创建并注册');
const newId = await WangPan115TaskPlugin.createMultiLevelDownPath(fullPath);
if (newId) wp_path_id = newId;
}
}
}
}
}
const result = await (async (magnet, wp_path_id2 = "", uid, sign2, time2) => {
const data = { const data = {
url: encodeURIComponent(magnet), url: encodeURIComponent(magnet),
wp_path_id, wp_path_id: wp_path_id2,
uid, uid,
sign: sign2, sign: sign2,
time: time2 time: time2
}; };
return await gmHttp.postForm("https://115.com/web/lixian/?ct=lixian&ac=add_task_url", data); return await gmHttp.postForm("https://115.com/web/lixian/?ct=lixian&ac=add_task_url", data);
})(magnetLink, savePath || "", userId, sign, time); })(magnetLink, wp_path_id, userId, sign, time);
console.log("离线下载返回值:", result); console.log("离线下载返回值:", result);
let infoHash = result.info_hash, fileId = await this.getFileId(userId, sign, time, infoHash), let infoHash = result.info_hash, fileId = await this.getFileId(userId, sign, time, infoHash),
openUrl = "https://115.com/?tab=offline&mode=wangpan"; openUrl = "https://115.com/?tab=offline&mode=wangpan";
@@ -13026,7 +13183,7 @@ ${err.stack}` : "");
} }
async matchDetailPage(matchList) { async matchDetailPage(matchList) {
if (!window.isDetailPage) return; if (!window.isDetailPage) return;
if (await storageManager.getSetting("enable115Match", NO) === NO) return; if (await storageManager.getSetting("enable115Match", NO$1) === NO$1) return;
const $detail = $('\n <div class="jhs-match-detail jhs-115-match-detail" id="115-match-table">\n <table>\n <thead>\n <tr style="text-align: center">\n <th colspan="4">115匹配</th>\n </tr>\n <tr>\n <th>名称</th>\n <th>大小</th>\n <th>时间</th>\n <th>播放</th>\n </tr>\n </thead>\n <tbody>\n </tbody>\n </table>\n </div>\n '), const $detail = $('\n <div class="jhs-match-detail jhs-115-match-detail" id="115-match-table">\n <table>\n <thead>\n <tr style="text-align: center">\n <th colspan="4">115匹配</th>\n </tr>\n <tr>\n <th>名称</th>\n <th>大小</th>\n <th>时间</th>\n <th>播放</th>\n </tr>\n </thead>\n <tbody>\n </tbody>\n </table>\n </div>\n '),
$tbody = $detail.find("tbody"); $tbody = $detail.find("tbody");
try { try {
@@ -13083,7 +13240,7 @@ ${err.stack}` : "");
else $("#mag-submit-show").before($detail); else $("#mag-submit-show").before($detail);
} }
async matchMovieList(movieListElement) { async matchMovieList(movieListElement) {
if (await storageManager.getSetting("enable115Match", NO) !== NO) { if (await storageManager.getSetting("enable115Match", NO$1) !== NO$1) {
await this.checkLoginStatus(); await this.checkLoginStatus();
await this.processMovieElements(movieListElement); await this.processMovieElements(movieListElement);
} else $(".video-title [class^='jhs-match-']").remove(); } else $(".video-title [class^='jhs-match-']").remove();
@@ -13468,7 +13625,7 @@ ${err.stack}` : "");
} }
async autoRenameFiles(carNum2, matchList) { async autoRenameFiles(carNum2, matchList) {
try { try {
const enableAutoRename = await storageManager.getSetting("enable115AutoRename", NO); const enableAutoRename = await storageManager.getSetting("enable115AutoRename", NO$1);
if (enableAutoRename !== YES) return; if (enableAutoRename !== YES) return;
const scope = await storageManager.getSetting("autoRenameScope", "vr_only"); const scope = await storageManager.getSetting("autoRenameScope", "vr_only");
if (scope === "vr_only" && !carNum2.toUpperCase().includes("VR")) return; if (scope === "vr_only" && !carNum2.toUpperCase().includes("VR")) return;
@@ -13710,7 +13867,7 @@ ${err.stack}` : "");
return itemList; return itemList;
} }
async logImageHeightsByRow() { async logImageHeightsByRow() {
if (await storageManager.getSetting("enableVerticalModel", NO) === YES$1) return; if (await storageManager.getSetting("enableVerticalModel", NO$1) === YES$1) return;
const itemSelector = this.getSelector().itemSelector, const itemSelector = this.getSelector().itemSelector,
containerColumns = await storageManager.getSetting("containerColumns", 5), containerColumns = await storageManager.getSetting("containerColumns", 5),
itemList = await this.getVisibleImageItems(itemSelector, "img"); itemList = await this.getVisibleImageItems(itemSelector, "img");
@@ -13781,8 +13938,8 @@ ${err.stack}` : "");
sortText = "当前排序方式: " + ("rateCount" === jhs_sortMethod ? "评价人数" : "date" === jhs_sortMethod ? "时间" : "默认"); sortText = "当前排序方式: " + ("rateCount" === jhs_sortMethod ? "评价人数" : "date" === jhs_sortMethod ? "时间" : "默认");
$el.append(` $el.append(`
<div style="display: flex;align-items: center; ${otherCss} "> <div style="display: flex;align-items: center; ${otherCss} ">
<a id="waitCheckBtn" class="menu-btn main-tab-btn" data-tip="打开未鉴定的列表项, 并自动播放视频" style="background-color:#56c938 !important; ${showWaitCheckBtn === NO ? "display: none" : ""}"><span>打开待鉴定</span></a> <a id="waitCheckBtn" class="menu-btn main-tab-btn" data-tip="打开未鉴定的列表项, 并自动播放视频" style="background-color:#56c938 !important; ${showWaitCheckBtn === NO$1 ? "display: none" : ""}"><span>打开待鉴定</span></a>
<a id="waitDownBtn" class="menu-btn main-tab-btn" style="background-color:#2caac0 !important; ${showWaitDownBtn === NO ? "display: none" : ""}"><span>打开已收藏</span></a> <a id="waitDownBtn" class="menu-btn main-tab-btn" style="background-color:#2caac0 !important; ${showWaitDownBtn === NO$1 ? "display: none" : ""}"><span>打开已收藏</span></a>
${isStarPage ? ` ${isStarPage ? `
<a id="addBlacklistBtn" class="menu-btn main-tab-btn" style="background-color:${addBlacklistBtnColor} !important;" data-tip="将演员加入黑名单, 后续有作品更新也会纳入屏蔽中"><span>${addBlacklistBtnText}</span></a> <a id="addBlacklistBtn" class="menu-btn main-tab-btn" style="background-color:${addBlacklistBtnColor} !important;" data-tip="将演员加入黑名单, 后续有作品更新也会纳入屏蔽中"><span>${addBlacklistBtnText}</span></a>
<a id="filterAllVideo" class="menu-btn main-tab-btn" style="background-color:#e8ab39 !important;margin-right: 30px!important;" data-tip="一键屏蔽已选分类的视频列表至鉴定记录中"><span>一键屏蔽所有作品</span></a> <a id="filterAllVideo" class="menu-btn main-tab-btn" style="background-color:#e8ab39 !important;margin-right: 30px!important;" data-tip="一键屏蔽已选分类的视频列表至鉴定记录中"><span>一键屏蔽所有作品</span></a>
@@ -13811,8 +13968,8 @@ ${err.stack}` : "");
} }
$(".masonry").parent().prepend(` $(".masonry").parent().prepend(`
<div style="margin: 10px; display: flex;"> <div style="margin: 10px; display: flex;">
<a id="waitCheckBtn" class="menu-btn main-tab-btn" style="background-color:#56c938 !important; ${showWaitCheckBtn === NO ? "display: none" : ""}"><span>打开待鉴定</span></a> <a id="waitCheckBtn" class="menu-btn main-tab-btn" style="background-color:#56c938 !important; ${showWaitCheckBtn === NO$1 ? "display: none" : ""}"><span>打开待鉴定</span></a>
<a id="waitDownBtn" class="menu-btn main-tab-btn" style="background-color:#2caac0 !important; ${showWaitDownBtn === NO ? "display: none" : ""}"><span>打开已收藏</span></a> <a id="waitDownBtn" class="menu-btn main-tab-btn" style="background-color:#2caac0 !important; ${showWaitDownBtn === NO$1 ? "display: none" : ""}"><span>打开已收藏</span></a>
${isStarPage ? ` ${isStarPage ? `
<a id="addBlacklistBtn" class="menu-btn main-tab-btn" style="background-color:${addBlacklistBtnColor} !important;" data-tip="将演员加入黑名单, 后续有作品更新也会纳入屏蔽中"><span>${addBlacklistBtnText}</span></a> <a id="addBlacklistBtn" class="menu-btn main-tab-btn" style="background-color:${addBlacklistBtnColor} !important;" data-tip="将演员加入黑名单, 后续有作品更新也会纳入屏蔽中"><span>${addBlacklistBtnText}</span></a>
@@ -14019,7 +14176,7 @@ ${err.stack}` : "");
} }
async openFavorite() { async openFavorite() {
let favoriteList, openCount = await storageManager.getSetting("waitCheckCount", 5), let favoriteList, openCount = await storageManager.getSetting("waitCheckCount", 5),
randomOpenWaitDown = await storageManager.getSetting("randomOpenWaitDown", NO), randomOpenWaitDown = await storageManager.getSetting("randomOpenWaitDown", NO$1),
dataList = await storageManager.getCarList(); dataList = await storageManager.getCarList();
favoriteList = randomOpenWaitDown === YES$1 ? dataList.filter(((item) => item.status === Status_FAVORITE$1)).sort((() => Math.random() - 0.5)) : dataList.filter(((item) => item.status === Status_FAVORITE$1)).sort(((a, b) => b.createDate - a.createDate)); favoriteList = randomOpenWaitDown === YES$1 ? dataList.filter(((item) => item.status === Status_FAVORITE$1)).sort((() => Math.random() - 0.5)) : dataList.filter(((item) => item.status === Status_FAVORITE$1)).sort(((a, b) => b.createDate - a.createDate));
for (let i = 0; i < openCount; i++) { for (let i = 0; i < openCount; i++) {
@@ -14483,7 +14640,7 @@ ${err.stack}` : "");
} else { } else {
$("#reviewsContainer").hide(); $("#reviewsContainer").hide();
$("#reviewsFooter").hide(); $("#reviewsFooter").hide();
storageManager.saveSettingItem("enableLoadReview", NO); storageManager.saveSettingItem("enableLoadReview", NO$1);
} }
})); }));
$magnets.append('<div id="reviewsContainer"></div>'); $magnets.append('<div id="reviewsContainer"></div>');
@@ -15573,7 +15730,7 @@ ${err.stack}` : "");
}); });
})); }));
const highlightMagnetPlugin = this.getBean("HighlightMagnetPlugin"), const highlightMagnetPlugin = this.getBean("HighlightMagnetPlugin"),
enableMagnetsFilter = await storageManager.getSetting("enableMagnetsFilter", NO); enableMagnetsFilter = await storageManager.getSetting("enableMagnetsFilter", NO$1);
if (enableMagnetsFilter === YES$1) { if (enableMagnetsFilter === YES$1) {
const savedSettings = await storageManager.getSetting("magnetSortAndFilter", "{}"); const savedSettings = await storageManager.getSetting("magnetSortAndFilter", "{}");
let settings; let settings;
@@ -15606,7 +15763,7 @@ ${err.stack}` : "");
if ("取消磁力过滤" === $span.text()) { if ("取消磁力过滤" === $span.text()) {
highlightMagnetPlugin.showAll(); highlightMagnetPlugin.showAll();
$span.text("排序与过滤"); $span.text("排序与过滤");
storageManager.saveSettingItem("enableMagnetsFilter", NO); storageManager.saveSettingItem("enableMagnetsFilter", NO$1);
} else { } else {
this.openMagnetSortFilterPanel(highlightMagnetPlugin); this.openMagnetSortFilterPanel(highlightMagnetPlugin);
} }
@@ -15845,7 +16002,7 @@ ${err.stack}` : "");
} else { } else {
highlightMagnetPlugin.showAll(); highlightMagnetPlugin.showAll();
$("#magnets-span").text("排序与过滤"); $("#magnets-span").text("排序与过滤");
await storageManager.saveSettingItem("enableMagnetsFilter", NO); await storageManager.saveSettingItem("enableMagnetsFilter", NO$1);
} }
} catch (e) { } catch (e) {
console.error("[磁力排序] 应用失败:", e); console.error("[磁力排序] 应用失败:", e);
@@ -16895,13 +17052,13 @@ ${err.stack}` : "");
actorCarNumToNameMap: /* @__PURE__ */ new Map(), actorCarNumToNameMap: /* @__PURE__ */ new Map(),
actressCarNumToNameMap: /* @__PURE__ */ new Map() actressCarNumToNameMap: /* @__PURE__ */ new Map()
}), t2 = utils.time("组装数据耗时"), settings = { }), t2 = utils.time("组装数据耗时"), settings = {
showFilterItem: (null == settingObj ? void 0 : settingObj.showFilterItem) ?? NO, showFilterItem: (null == settingObj ? void 0 : settingObj.showFilterItem) ?? NO$1,
showFilterActorItem: (null == settingObj ? void 0 : settingObj.showFilterActorItem) ?? NO, showFilterActorItem: (null == settingObj ? void 0 : settingObj.showFilterActorItem) ?? NO$1,
showFilterKeywordItem: (null == settingObj ? void 0 : settingObj.showFilterKeywordItem) ?? NO, showFilterKeywordItem: (null == settingObj ? void 0 : settingObj.showFilterKeywordItem) ?? NO$1,
showFavoriteItem: (null == settingObj ? void 0 : settingObj.showFavoriteItem) ?? YES$1, showFavoriteItem: (null == settingObj ? void 0 : settingObj.showFavoriteItem) ?? YES$1,
showHasDownItem: (null == settingObj ? void 0 : settingObj.showHasDownItem) ?? YES$1, showHasDownItem: (null == settingObj ? void 0 : settingObj.showHasDownItem) ?? YES$1,
showHasWatchItem: (null == settingObj ? void 0 : settingObj.showHasWatchItem) ?? YES$1, showHasWatchItem: (null == settingObj ? void 0 : settingObj.showHasWatchItem) ?? YES$1,
showAllItem: (null == settingObj ? void 0 : settingObj.showAllItem) ?? NO, showAllItem: (null == settingObj ? void 0 : settingObj.showAllItem) ?? NO$1,
tagPosition: (null == settingObj ? void 0 : settingObj.tagPosition) || "rightTop", tagPosition: (null == settingObj ? void 0 : settingObj.tagPosition) || "rightTop",
movieShowType: (null == settingObj ? void 0 : settingObj.movieShowType) || "hide" movieShowType: (null == settingObj ? void 0 : settingObj.movieShowType) || "hide"
}; };
@@ -16930,7 +17087,7 @@ ${err.stack}` : "");
foundKeyword = filterKeywordList.find(((kw) => title.includes(kw) || carNum2.startsWith(kw))), foundKeyword = filterKeywordList.find(((kw) => title.includes(kw) || carNum2.startsWith(kw))),
isFilterKeyword = !!foundKeyword; isFilterKeyword = !!foundKeyword;
if (!isSearchPage) { if (!isSearchPage) {
let shouldHide = settings.showFavoriteItem === NO && isFavorite || settings.showHasDownItem === NO && isHasDown || settings.showHasWatchItem === NO && isHasWatch || settings.showFilterItem === NO && isFiltered && !(isFavorite || isHasDown || isHasWatch) || settings.showFilterActorItem === NO && isFilterActor || settings.showFilterKeywordItem === NO && isFilterKeyword; let shouldHide = settings.showFavoriteItem === NO$1 && isFavorite || settings.showHasDownItem === NO$1 && isHasDown || settings.showHasWatchItem === NO$1 && isHasWatch || settings.showFilterItem === NO$1 && isFiltered && !(isFavorite || isHasDown || isHasWatch) || settings.showFilterActorItem === NO$1 && isFilterActor || settings.showFilterKeywordItem === NO$1 && isFilterKeyword;
if ($box2.attr("data-movieShowType") !== settings.movieShowType) { if ($box2.attr("data-movieShowType") !== settings.movieShowType) {
$box2.css("border", ""); $box2.css("border", "");
$box2.children().css("visibility", ""); $box2.children().css("visibility", "");
@@ -17109,7 +17266,7 @@ ${err.stack}` : "");
} }
async parseActressName(url) { async parseActressName(url) {
let actorName = null; let actorName = null;
if (await storageManager.getSetting("enableSaveActressCarInfo", NO) === YES$1) { if (await storageManager.getSetting("enableSaveActressCarInfo", NO$1) === YES$1) {
clog.debug("鉴定补录演员信息-已启用, 开始解析详情页"); clog.debug("鉴定补录演员信息-已启用, 开始解析详情页");
clog.debug("开始解析演员详情页", url); clog.debug("开始解析演员详情页", url);
const html = await gmHttp.get(url), $dom = utils.htmlTo$dom(html); const html = await gmHttp.get(url), $dom = utils.htmlTo$dom(html);
@@ -17130,7 +17287,7 @@ ${err.stack}` : "");
this.favoriteHotKey = settingObj.favoriteHotKey; this.favoriteHotKey = settingObj.favoriteHotKey;
this.hasDownHotKey = settingObj.hasDownHotKey; this.hasDownHotKey = settingObj.hasDownHotKey;
this.hasWatchHotKey = settingObj.hasWatchHotKey; this.hasWatchHotKey = settingObj.hasWatchHotKey;
this.enableImageHotKey = settingObj.enableImageHotKey || NO; this.enableImageHotKey = settingObj.enableImageHotKey || NO$1;
this.clogHotKey = settingObj.clogHotKey; this.clogHotKey = settingObj.clogHotKey;
this.foldCategoryHotKey = settingObj.foldCategoryHotKey; this.foldCategoryHotKey = settingObj.foldCategoryHotKey;
this.showFilterItemHotKey = settingObj.showFilterItemHotKey; this.showFilterItemHotKey = settingObj.showFilterItemHotKey;
@@ -17151,7 +17308,7 @@ ${err.stack}` : "");
}, registerToggleHotkey = (hotkeyName, settingKey) => { }, registerToggleHotkey = (hotkeyName, settingKey) => {
const hotkeyString = this[hotkeyName]; const hotkeyString = this[hotkeyName];
hotkeyString && HotkeyManager.registerHotkey(hotkeyString, (async (event) => { hotkeyString && HotkeyManager.registerHotkey(hotkeyString, (async (event) => {
const newVal = await storageManager.getSetting(settingKey) === YES$1 ? NO : YES$1; const newVal = await storageManager.getSetting(settingKey) === YES$1 ? NO$1 : YES$1;
await storageManager.saveSettingItem(settingKey, newVal); await storageManager.saveSettingItem(settingKey, newVal);
window.refresh(); window.refresh();
})); }));
@@ -17159,7 +17316,7 @@ ${err.stack}` : "");
for (const hotkeyName in HOTKEY_REGISTRY) if (HOTKEY_REGISTRY.hasOwnProperty(hotkeyName)) { for (const hotkeyName in HOTKEY_REGISTRY) if (HOTKEY_REGISTRY.hasOwnProperty(hotkeyName)) {
registerToggleHotkey(hotkeyName, HOTKEY_REGISTRY[hotkeyName]); registerToggleHotkey(hotkeyName, HOTKEY_REGISTRY[hotkeyName]);
} }
if (this.enableImageHotKey === NO) return; if (this.enableImageHotKey === NO$1) return;
const handleAction = async (boxInfo, status) => { const handleAction = async (boxInfo, status) => {
setTimeout((async () => { setTimeout((async () => {
let actorName = await this.parseActressName(boxInfo.url); let actorName = await this.parseActressName(boxInfo.url);
@@ -17235,7 +17392,7 @@ ${err.stack}` : "");
replaceWithHdForDMM(img); replaceWithHdForDMM(img);
})); }));
} }
storageManager.getSetting("hoverBigImg", NO).then(((hoverBigImg) => { storageManager.getSetting("hoverBigImg", NO$1).then(((hoverBigImg) => {
hoverBigImg === YES$1 && (window.imageHoverPreviewObj ? window.imageHoverPreviewObj.bindEvents() : window.imageHoverPreviewObj = new ImageHoverPreview({ hoverBigImg === YES$1 && (window.imageHoverPreviewObj ? window.imageHoverPreviewObj.bindEvents() : window.imageHoverPreviewObj = new ImageHoverPreview({
selector: this.getSelector().coverImgSelector selector: this.getSelector().coverImgSelector
})); }));
+993
View File
@@ -0,0 +1,993 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="renderer" content="webkit">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>NIMA-086 実写版!ムラムラしたので通勤中にお持ち帰りされてみた 彩月七緒 - JavBus</title>
<meta name="keywords" content="NIMA-086,肉漫,潮吹,中出,高畫質,原作コラボ,巨乳,アクメ・オーガズム,單體作品,DMM獨家">
<meta name="description"
content="【發行日期】2026-09-25,【長度】120分鐘,(NIMA-086)実写版!ムラムラしたので通勤中にお持ち帰りされてみた 彩月七緒">
<link rel="alternate" href="https://www.javbus.com/en/NIMA-086" hreflang="en"/>
<link rel="alternate" href="https://www.javbus.com/ja/NIMA-086" hreflang="ja"/>
<link rel="alternate" href="https://www.javbus.com/ko/NIMA-086" hreflang="ko"/>
<link rel="alternate" href="https://www.javbus.com/NIMA-086" hreflang="zh"/>
<link rel="alternate" href="https://www.javbus.com/NIMA-086" hreflang="x-default"/>
<link rel="canonical" href="https://www.javbus.com/NIMA-086"/>
<link rel="preconnect" href="https://poweredby.jads.co" crossorigin>
<link rel="dns-prefetch" href="https://poweredby.jads.co">
<link rel="stylesheet" href="https://www.javbus.com/css/bootstrap.min.css">
<link rel="stylesheet" href="https://www.javbus.com/css/bootstrap-theme.min.css">
<link rel="stylesheet" href="https://www.javbus.com/css/css-slider.css?v=9.3">
<link rel="stylesheet" href="https://www.javbus.com/css/nav.overlay.css?v=3.9.8">
<link rel="stylesheet" href="https://www.javbus.com/css/magnific-popup.css">
<link rel="stylesheet" href="https://www.javbus.com/css/base.css?v=7.15">
<script src="https://www.javbus.com/js/jquery.min.js"></script>
<script src="https://www.javbus.com/js/jquery.magnific-popup.min.js"></script>
<script src="https://www.javbus.com/js/bootstrap.min.js" defer></script>
<script src="https://www.javbus.com/js/jquery.cookie.min.js" defer></script>
<script src="https://www.javbus.com/js/base.js" defer></script>
<script src="https://www.javbus.com/js/bootstrap-hover-dropdown.js" defer></script>
<script src="https://www.javbus.com/js/nav.overlay.js?v=10.30.3" defer></script>
<!--[if lt IE 9]>
<script src="https://www.javbus.com/js/html5shiv.min.js"></script>
<script src="https://www.javbus.com/js/respond.min.js"></script><![endif]-->
</head>
<body>
<script language="JavaScript">
var mod = 0;
var lang = 'zh';
var info = '搜尋 識別碼, 影片, 演員';
function searchs(obj) {
var searchinput = $("#" + obj);
if (searchinput.val() == '') {
$('#magnet-url-post').trigger("click");
return false;
} else {
//$('#search-loading').show();str.replace(/ /g, "-")
window.open("https://www.javbus.com/search/" + encodeURIComponent($.trim(searchinput.val()).replace(/ /g, "+")) + "&type=&parent=ce");
}
}
$(function () {
var url = 'https://www.javbus.com/ajax/search-modal.php?floor=' + Math.floor(Math.random() * 1000 + 1) + '&lang=' + lang;
$.ajax({
url: url, type: 'GET', success: function (msg) {
$("#searchModal").append(msg);
}
});
});
</script>
<div id="search-loading">
<table class="search-loading-box" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td align="center">
<table height="80" width="100%" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td height="40" align="center">
<div class="search-loading-text">搜尋中...</div>
</td>
</tr>
<tr>
<td height="40" align="center">
<img src="https://www.javbus.com/images/search_loading.gif" border="0">
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
<!-- Modal Search -->
<div id="searchModal" class="modal fade" tabindex="-1" role="dialog"></div>
<nav class="navbar navbar-default navbar-fixed-top top-bar" style="z-index:900">
<div class="container-fluid">
<div class="navbar-header mh50">
<a href="https://www.javbus.com/">
<img class="hidden-xs" height="50" alt="JavBus" src="https://www.javbus.com/images/logo.png"
style="height:40px; margin-top:5px;">
<img class="visible-xs-inline" height="50" alt="JavBus" src="https://www.javbus.com/images/logo.png">
</a>
<div class="btn-group pull-right visible-xs-inline" role="group" style="margin:8px 8px 0 0;"
onclick="window.location.href= '/forum/member.php?mod=logging&action=login&referer=%2F%2Fwww.javbus.com%2FNIMA-086'">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"
aria-expanded="false">
<img class="avatar" style="width:22px; height:22px;"
src="https://uc.javbus22.com/uc/avatar.php?uid=0&size=small"></button>
</div>
<div class="btn-group pull-right visible-xs-inline" role="group" style="margin:8px 8px 0 0;">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"
aria-expanded="false">
<span class="glyphicon glyphicon-globe"></span> <span class="caret"></span>
</button>
<ul class="dropdown-menu" role="menu">
<li><a href="https://www.javbus.com/en/NIMA-086">English</a></li>
<li><a href="https://www.javbus.com/ja/NIMA-086">日本语</a></li>
<li><a href="https://www.javbus.com/ko/NIMA-086">한국의</a></li>
<li><a href="https://www.javbus.com/NIMA-086">中文</a></li>
</ul>
</div>
</div>
<div id="navbar" class="collapse navbar-collapse">
<div class="navbar-form navbar-left fullsearch-form">
<div class="input-group">
<input id="search-input" type="text" class="form-control" placeholder="搜尋 識別碼, 影片, 演員">
<span class="input-group-btn">
<button class="btn btn-default" type="submit" onClick="searchs('search-input')">搜尋</button>
</span>
</div>
</div>
<ul class="nav navbar-nav">
<li class="active"><a href="https://www.javbus.com/">有碼</a></li>
<li><a href="https://www.javbus.com/uncensored">無碼</a></li>
<li class="hidden-md hidden-sm"><!-- <div class="icon-new"></div> --><a href="https://www.javbus.hair/">歐美</a>
</li>
<li class="hidden-sm"><a href="https://www.javbus.com/forum/">論壇</a></li>
<li class="dropdown hidden-sm ">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" role="button"
aria-expanded="false">類別 <span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
<li><a href="https://www.javbus.com/genre">有碼類別</a></li>
<li><a href="https://www.javbus.com/uncensored/genre">無碼類別</a></li>
</ul>
</li>
<li class="dropdown hidden-sm ">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" role="button"
aria-expanded="false">女優 <span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
<li><a href="https://www.javbus.com/actresses">有碼女優</a></li>
<li><a href="https://www.javbus.com/uncensored/actresses">無碼女優</a></li>
</ul>
</li>
<li class="dropdown"><a href="https://www.javbus.com/" class="dropdown-toggle" data-toggle="dropdown"
data-hover="dropdown" role="button" aria-expanded="false"><span
class="glyphicon glyphicon-menu-hamburger"></span></a>
<ul class="dropdown-menu" role="menu">
<li class="visible-md-block visible-sm-block"><a href="https://www.javbus.hair/">歐美</a></li>
<li class="visible-sm-block"><a href="https://www.javbus.com/forum/">論壇</a></li>
<li class="visible-sm-block"><a href="https://www.javbus.com/genre">有碼類別</a></li>
<li class="visible-sm-block"><a href="https://www.javbus.com/uncensored/genre">無碼類別</a></li>
<li class="visible-sm-block"><a href="https://www.javbus.com/actresses">有碼女優</a></li>
<li class="visible-sm-block"><a href="https://www.javbus.com/uncensored/actresses">無碼女優</a>
</li>
<li><a href="https://www.javbus.com/genre/hd">高清</a></li>
<li><a href="https://www.javbus.com/genre/sub">字幕</a></li>
</ul>
</li>
</ul>
<ul class="nav navbar-nav navbar-right"
onclick="window.location.href= '/forum/member.php?mod=logging&action=login&referer=%2F%2Fwww.javbus.com%2FNIMA-086'">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" role="button"
aria-expanded="false"><img class="avatar"
src="https://uc.javbus22.com/uc/avatar.php?uid=0&size=small"><span
class="hidden-md hidden-sm ml5">登入</span> </a>
</li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" role="button"
aria-expanded="false"><span class="glyphicon glyphicon-globe" style="font-size:12px;"></span>
<span class="hidden-md hidden-sm">English</span> <span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
<li><a href="https://www.javbus.com/en/NIMA-086">English</a></li>
<li><a href="https://www.javbus.com/ja/NIMA-086">日本语</a></li>
<li><a href="https://www.javbus.com/ko/NIMA-086">한국의</a></li>
<li><a href="https://www.javbus.com/NIMA-086">中文</a></li>
</ul>
</li>
</ul>
</div>
<!--/.nav-collapse -->
</div>
</nav>
<div class="row visible-xs-inline footer-bar">
<div class="col-xs-3 text-center">
<a id="menu" class="btn btn-default trigger-overlay"><span class="glyphicon glyphicon-align-justify"></span></a>
</div>
<div class="col-xs-3 text-center">
</div>
<div class="col-xs-3 text-center">
</div>
<div class="col-xs-3 text-center">
<a id="back" class="btn btn-default" href="javascript:window.history.back()"><span
class="glyphicon glyphicon-share-alt flipx"></span></a>
</div>
</div>
<script src='https://www.javbus.com/js/focus.js?v=8.7'></script>
<link rel='stylesheet' type='text/css' href='https://www.javbus.com/css/movie.css?v=2.8'>
<link rel='stylesheet' type='text/css' href='https://www.javbus.com/css/movie-box.css'>
<script>
var gid = 70147716068;
var uc = 0;
var img = '/pics/cover/ckd7_b.jpg';
</script>
<div class="ad-box all-top">
<div class="ad-item">
<div class="ad-juicy">
<script type="text/javascript" data-cfasync="false" async
src="https://poweredby.jads.co/js/jads.js"></script>
<ins id="1024549" data-width="728" data-height="90"></ins>
<script type="text/javascript" data-cfasync="false"
async>(adsbyjuicy = window.adsbyjuicy || []).push({"adzone": 1024549});</script>
</div>
</div>
<div class="ad-item">
<div class="ad-juicy">
<script type="text/javascript" data-cfasync="false" async
src="https://poweredby.jads.co/js/jads.js"></script>
<ins id="1024550" data-width="728" data-height="90"></ins>
<script type="text/javascript" data-cfasync="false"
async>(adsbyjuicy = window.adsbyjuicy || []).push({"adzone": 1024550});</script>
</div>
</div>
<div id="ky" class="ad-item">
<div class='csslider1 autoplay'>
<input name="cs_anchor1" id='cs_play1' type="radio" class='cs_anchor' checked>
<ul>
<li class="cs_skeleton"><img src="/forum/data/attachment/forum/ads/ky_20260923_3.jpg"
style="width: 100%;"></li>
<li class="num0 img slide"><a href="https://www.3jnbdg.vip:9553/?i_code=14698475" target="_blank"><img
src="/forum/data/attachment/forum/ads/ky_20260923_3.jpg"/></a></li>
<li class="num1 img slide"><a href="https://www.3jnbdg.vip:9553/?i_code=14698475" target="_blank"><img
src="/forum/data/attachment/forum/ads/ky_20260923_5.jpg"/></a></li>
<li class="num2 img slide"><a href="https://www.3jnbdg.vip:9553/?i_code=14698475" target="_blank"><img
src="/forum/data/attachment/forum/ads/ky_20260923_1.jpg"/></a></li>
<li class="num3 img slide"><a href="https://www.3jnbdg.vip:9553/?i_code=14698475" target="_blank"><img
src="/forum/data/attachment/forum/ads/ky_20260923_2.jpg"/></a></li>
<li class="num4 img slide"><a href="https://www.3jnbdg.vip:9553/?i_code=14698475" target="_blank"><img
src="/forum/data/attachment/forum/ads/ky_20260923_4.jpg"/></a></li>
</ul>
</div>
</div>
<div id="kok" class="ad-item">
<div class='csslider1 autoplay'>
<input name="cs_anchor2" id='cs_play2' type="radio" class='cs_anchor' checked>
<ul>
<li class="cs_skeleton"><img src="/forum/data/attachment/forum/ads/zo_20260923_2.jpg"
style="width: 100%;"></li>
<li class="num0 img slide"><a href="https://120406.zoty2508.com:30501/?i_code=3354655"
target="_blank"><img
src="/forum/data/attachment/forum/ads/zo_20260923_2.jpg"/></a></li>
<li class="num1 img slide"><a href="https://120406.zoty2508.com:30501/?i_code=3354655"
target="_blank"><img
src="/forum/data/attachment/forum/ads/zo_20260923_1.jpg"/></a></li>
<li class="num2 img slide"><a href="https://120406.zoty2508.com:30501/?i_code=3354655"
target="_blank"><img
src="/forum/data/attachment/forum/ads/zo_20260923_5.jpg"/></a></li>
<li class="num3 img slide"><a href="https://120406.zoty2508.com:30501/?i_code=3354655"
target="_blank"><img
src="/forum/data/attachment/forum/ads/zo_20260923_3.jpg"/></a></li>
<li class="num4 img slide"><a href="https://120406.zoty2508.com:30501/?i_code=3354655"
target="_blank"><img
src="/forum/data/attachment/forum/ads/zo_20260923_4.jpg"/></a></li>
</ul>
</div>
</div>
</div>
<input id="token" type="hidden" name="token"
value="c738pomVJo1m19OjPoW3yyugBlnubpVPF1MM7fQqG5T34oAOtWShxw11DbmlgOiBYN4XPjFHM+hZU4ePIlpK3osjclQs/ULQEZbJ">
<div class="container">
<h3>NIMA-086 実写版!ムラムラしたので通勤中にお持ち帰りされてみた 彩月七緒</h3>
<div class="row movie">
<div class="col-md-9 screencap">
<a class="bigImage" href="/pics/cover/ckd7_b.jpg"><img src="/pics/cover/ckd7_b.jpg"
title="実写版!ムラムラしたので通勤中にお持ち帰りされてみた 彩月七緒"></a>
</div>
<div class="col-md-3 info">
<p><span class="header">識別碼:</span> <span style="color:#CC0000;">NIMA-086</span>
</p>
<p><span class="header">發行日期:</span> 2026-09-25</p>
<p><span class="header">長度:</span> 120分鐘</p>
<p><span class="header">導演:</span> <a href="https://www.javbus.com/director/a3">ドラゴン西川</a></p>
<p><span class="header">製作商:</span> <a href="https://www.javbus.com/studio/dk">Fitch</a>
</p>
<p><span class="header">發行商:</span> <a href="https://www.javbus.com/label/1oe">肉漫</a>
</p>
<p class="header">類別:<span id="genre-toggle" class="glyphicon glyphicon-plus"
style="cursor: pointer;"></span></p>
<p><span class="genre"><label><input type="checkbox" name="gr_sel" value="1z"><a
href="https://www.javbus.com/genre/1z">潮吹</a></label></span>
<span class="genre"><label><input type="checkbox" name="gr_sel" value="4"><a
href="https://www.javbus.com/genre/4">中出</a></label></span>
<span class="genre"><label><input type="checkbox" name="gr_sel" value="4o"><a
href="https://www.javbus.com/genre/4o">高畫質</a></label></span>
<span class="genre"><label><input type="checkbox" name="gr_sel" value="6l"><a
href="https://www.javbus.com/genre/6l">原作コラボ</a></label></span>
<span class="genre"><label><input type="checkbox" name="gr_sel" value="e"><a
href="https://www.javbus.com/genre/e">巨乳</a></label></span>
<span class="genre"><label><input type="checkbox" name="gr_sel" value="e3"><a
href="https://www.javbus.com/genre/e3">アクメ・オーガズム</a></label></span>
<span class="genre"><label><input type="checkbox" name="gr_sel" value="f"><a
href="https://www.javbus.com/genre/f">單體作品</a></label></span>
<span class="genre"><label><input type="checkbox" name="gr_sel" value="g"><a
href="https://www.javbus.com/genre/g">DMM獨家</a></label></span>
<span class="genre"><button id="gr_btn" type="button" class="btn">多選提交</button></span>
</p>
<p class="star-show"><span class="header" style="cursor: pointer;">演員</span>:<span id="star-toggle"
class="glyphicon glyphicon-minus"
style="cursor: pointer;"></span>
</p>
<ul>
<div id="star_11wm" class="star-box star-box-common star-box-up idol-box">
<li>
<a href="https://www.javbus.com/star/11wm"><img src="/pics/actress/11wm_a.jpg" title="彩月七緒"></a>
<div class="star-name"><a href="https://www.javbus.com/star/11wm" title="彩月七緒">彩月七緒</a>
</div>
</li>
</div>
</ul>
<p>
<span class="genre" onmouseover="hoverdiv(event,'star_11wm')"
onmouseout="hoverdiv(event,'star_11wm')">
<a href="https://www.javbus.com/star/11wm">彩月七緒</a>
</span>
</p>
</div>
</div>
<div id="star-div">
<h4 id="star-hide" style="cursor: pointer;">演員 <span class="glyphicon glyphicon-minus"></span></h4>
<div id="avatar-waterfall">
<a class="avatar-box" href="https://www.javbus.com/star/11wm">
<div class="photo-frame">
<img src="/pics/actress/11wm_a.jpg" title="彩月七緒">
</div>
<span>彩月七緒</span>
</a>
</div>
</div>
<h4 id="mag-submit-show" style="cursor: pointer;">磁力連結投稿 <span id="mag-submit-toggle"
class="glyphicon glyphicon-plus"></span></h4>
<div id="mag-submit" class="movie" style="padding:30px 20px 30px 5px;">
<div id="mag-submit-hide" class="close" style="margin:-25px -13px 0 0;">&times;</div>
<div class="col-md-11 col-xs-10">
<div class="input-group">
<div class="input-group-addon">magnet地址:</div>
<input type="text" class="form-control" id="appendedInputButton">
</div>
</div>
<button type="button" class="btn btn-default col-md-1 col-xs-2" onClick="checktxt()" data-toggle="modal"
data-target="#magneturlpost">分享
</button>
</div>
<!-- Magnet Verify Modal -->
<div id="magneturlpost" class="modal fade" tabindex="-1" role="dialog"></div>
<div class="movie" style="padding:12px; margin-top:15px">
<table id="magnet-table" class="table table-condensed table-striped table-hover" style="margin-bottom:0;">
<tr style="font-weight:bold;">
<td>磁力名稱 <span class="glyphicon glyphicon-magnet"></span></td>
<td style="text-align:center;white-space:nowrap">檔案大小</td>
<td style="text-align:center;white-space:nowrap">分享日期</td>
</tr>
</table>
<div id="movie-loading">
<table width="120" border="0" cellpadding="5" cellspacing="0">
<tbody>
<tr>
<td align="center">
<font class="ajax-text"><img src="https://www.javbus.com/images/movie_loading.gif"
border="0"></font>
</td>
<td align="center">
<font class="ajax-text">讀取中...</font>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h4>樣品圖像</h4>
<div id="sample-waterfall">
<a class="sample-box" href="https://awsimgsrc.dmm.co.jp/pics_dig/digital/video/nima00086/nima00086jp-1.jpg">
<div class="photo-frame"><img src="/pics/sample/ckd7_1.jpg"
title="NIMA-086 実写版!ムラムラしたので通勤中にお持ち帰りされてみた 彩月七緒 - 樣品圖像 - 1">
</div>
</a> <a class="sample-box"
href="https://awsimgsrc.dmm.co.jp/pics_dig/digital/video/nima00086/nima00086jp-2.jpg">
<div class="photo-frame"><img src="/pics/sample/ckd7_2.jpg"
title="NIMA-086 実写版!ムラムラしたので通勤中にお持ち帰りされてみた 彩月七緒 - 樣品圖像 - 2">
</div>
</a> <a class="sample-box" href="https://awsimgsrc.dmm.co.jp/pics_dig/digital/video/nima00086/nima00086jp-3.jpg">
<div class="photo-frame"><img src="/pics/sample/ckd7_3.jpg"
title="NIMA-086 実写版!ムラムラしたので通勤中にお持ち帰りされてみた 彩月七緒 - 樣品圖像 - 3">
</div>
</a> <a class="sample-box" href="https://awsimgsrc.dmm.co.jp/pics_dig/digital/video/nima00086/nima00086jp-4.jpg">
<div class="photo-frame"><img src="/pics/sample/ckd7_4.jpg"
title="NIMA-086 実写版!ムラムラしたので通勤中にお持ち帰りされてみた 彩月七緒 - 樣品圖像 - 4">
</div>
</a> <a class="sample-box" href="https://awsimgsrc.dmm.co.jp/pics_dig/digital/video/nima00086/nima00086jp-5.jpg">
<div class="photo-frame"><img src="/pics/sample/ckd7_5.jpg"
title="NIMA-086 実写版!ムラムラしたので通勤中にお持ち帰りされてみた 彩月七緒 - 樣品圖像 - 5">
</div>
</a> <a class="sample-box" href="https://awsimgsrc.dmm.co.jp/pics_dig/digital/video/nima00086/nima00086jp-6.jpg">
<div class="photo-frame"><img src="/pics/sample/ckd7_6.jpg"
title="NIMA-086 実写版!ムラムラしたので通勤中にお持ち帰りされてみた 彩月七緒 - 樣品圖像 - 6">
</div>
</a> <a class="sample-box" href="https://awsimgsrc.dmm.co.jp/pics_dig/digital/video/nima00086/nima00086jp-7.jpg">
<div class="photo-frame"><img src="/pics/sample/ckd7_7.jpg"
title="NIMA-086 実写版!ムラムラしたので通勤中にお持ち帰りされてみた 彩月七緒 - 樣品圖像 - 7">
</div>
</a> <a class="sample-box" href="https://awsimgsrc.dmm.co.jp/pics_dig/digital/video/nima00086/nima00086jp-8.jpg">
<div class="photo-frame"><img src="/pics/sample/ckd7_8.jpg"
title="NIMA-086 実写版!ムラムラしたので通勤中にお持ち帰りされてみた 彩月七緒 - 樣品圖像 - 8">
</div>
</a> <a class="sample-box" href="https://awsimgsrc.dmm.co.jp/pics_dig/digital/video/nima00086/nima00086jp-9.jpg">
<div class="photo-frame"><img src="/pics/sample/ckd7_9.jpg"
title="NIMA-086 実写版!ムラムラしたので通勤中にお持ち帰りされてみた 彩月七緒 - 樣品圖像 - 9">
</div>
</a> <a class="sample-box" href="https://awsimgsrc.dmm.co.jp/pics_dig/digital/video/nima00086/nima00086jp-10.jpg">
<div class="photo-frame"><img src="/pics/sample/ckd7_10.jpg"
title="NIMA-086 実写版!ムラムラしたので通勤中にお持ち帰りされてみた 彩月七緒 - 樣品圖像 - 10">
</div>
</a> <a class="sample-box" href="https://awsimgsrc.dmm.co.jp/pics_dig/digital/video/nima00086/nima00086jp-11.jpg">
<div class="photo-frame"><img src="/pics/sample/ckd7_11.jpg"
title="NIMA-086 実写版!ムラムラしたので通勤中にお持ち帰りされてみた 彩月七緒 - 樣品圖像 - 11">
</div>
</a> <a class="sample-box" href="https://awsimgsrc.dmm.co.jp/pics_dig/digital/video/nima00086/nima00086jp-12.jpg">
<div class="photo-frame"><img src="/pics/sample/ckd7_12.jpg"
title="NIMA-086 実写版!ムラムラしたので通勤中にお持ち帰りされてみた 彩月七緒 - 樣品圖像 - 12">
</div>
</a> <a class="sample-box" href="https://awsimgsrc.dmm.co.jp/pics_dig/digital/video/nima00086/nima00086jp-13.jpg">
<div class="photo-frame"><img src="/pics/sample/ckd7_13.jpg"
title="NIMA-086 実写版!ムラムラしたので通勤中にお持ち帰りされてみた 彩月七緒 - 樣品圖像 - 13">
</div>
</a> <a class="sample-box" href="https://awsimgsrc.dmm.co.jp/pics_dig/digital/video/nima00086/nima00086jp-14.jpg">
<div class="photo-frame"><img src="/pics/sample/ckd7_14.jpg"
title="NIMA-086 実写版!ムラムラしたので通勤中にお持ち帰りされてみた 彩月七緒 - 樣品圖像 - 14">
</div>
</a> <a class="sample-box" href="https://awsimgsrc.dmm.co.jp/pics_dig/digital/video/nima00086/nima00086jp-15.jpg">
<div class="photo-frame"><img src="/pics/sample/ckd7_15.jpg"
title="NIMA-086 実写版!ムラムラしたので通勤中にお持ち帰りされてみた 彩月七緒 - 樣品圖像 - 15">
</div>
</a> <a class="sample-box" href="https://awsimgsrc.dmm.co.jp/pics_dig/digital/video/nima00086/nima00086jp-16.jpg">
<div class="photo-frame"><img src="/pics/sample/ckd7_16.jpg"
title="NIMA-086 実写版!ムラムラしたので通勤中にお持ち帰りされてみた 彩月七緒 - 樣品圖像 - 16">
</div>
</a> <a class="sample-box" href="https://awsimgsrc.dmm.co.jp/pics_dig/digital/video/nima00086/nima00086jp-17.jpg">
<div class="photo-frame"><img src="/pics/sample/ckd7_17.jpg"
title="NIMA-086 実写版!ムラムラしたので通勤中にお持ち帰りされてみた 彩月七緒 - 樣品圖像 - 17">
</div>
</a> <a class="sample-box" href="https://awsimgsrc.dmm.co.jp/pics_dig/digital/video/nima00086/nima00086jp-18.jpg">
<div class="photo-frame"><img src="/pics/sample/ckd7_18.jpg"
title="NIMA-086 実写版!ムラムラしたので通勤中にお持ち帰りされてみた 彩月七緒 - 樣品圖像 - 18">
</div>
</a></div>
<div class="clearfix"></div>
<h4 style="position:relative">推薦 <a href="javascript:bootstr(1);"><span id="urad2"
class="label label-default"><span
class="left-urad2">投放廣告</span><span class="glyphicon glyphicon-envelope"></span></span></a></h4>
<div class="row">
<div class="col-xs-12 col-md-4 text-center ptb10">
<script type="text/javascript" data-cfasync="false" async
src="https://poweredby.jads.co/js/jads.js"></script>
<ins id="1024556" data-width="300" data-height="250"></ins>
<script type="text/javascript" data-cfasync="false"
async>(adsbyjuicy = window.adsbyjuicy || []).push({"adzone": 1024556});</script>
</div>
<div class="col-xs-12 col-md-4 text-center ptb10">
<script type="text/javascript" data-cfasync="false" async
src="https://poweredby.jads.co/js/jads.js"></script>
<ins id="1024558" data-width="300" data-height="250"></ins>
<script type="text/javascript" data-cfasync="false"
async>(adsbyjuicy = window.adsbyjuicy || []).push({"adzone": 1024558});</script>
</div>
<div class="col-xs-12 col-md-4 text-center ptb10">
<script type="text/javascript" data-cfasync="false" async
src="https://poweredby.jads.co/js/jads.js"></script>
<ins id="1024557" data-width="300" data-height="250"></ins>
<script type="text/javascript" data-cfasync="false"
async>(adsbyjuicy = window.adsbyjuicy || []).push({"adzone": 1024557});</script>
</div>
</div>
<h4>同類影片</h4>
<div id="related-waterfall" class="mb20">
<a title="FANZA同人ランキング1位シリーズ累計10万部突破 実写版 パパ活セーブデータ タイムリープ能力で塩対応女子をデレさせイキ壊れるまで無限攻略! 北岡果林"
class="movie-box" href="https://www.javbus.com/MIMK-291" style="display:inline-block; margin:5px;">
<div class="photo-frame">
<img src="/pics/thumb/cj4u.jpg">
</div>
<div class="photo-info" style="height:36px; overflow:hidden; text-align:center;">
<span>FANZA同人ランキング1位シリーズ累計10万部突破 実写版 パパ活セーブデータ タイムリープ能力で塩対応女子をデレさせイキ壊れるまで無限攻略! 北岡果林</span>
</div>
</a>
<a title="スペンス乳腺開発クリニックSpecial あんづ杏" class="movie-box" href="https://www.javbus.com/PPPE-442"
style="display:inline-block; margin:5px;">
<div class="photo-frame">
<img src="/pics/thumb/cj74.jpg">
</div>
<div class="photo-info" style="height:36px; overflow:hidden; text-align:center;">
<span>スペンス乳腺開発クリニックSpecial あんづ杏</span>
</div>
</a>
<a title="ドコでも即ハメおねだり中出しOKレンタル彼女~恋人代行なのに利用時間が過ぎても帰してくれない性欲ビースト24時~ 美園和花"
class="movie-box" href="https://www.javbus.com/MNGS-076" style="display:inline-block; margin:5px;">
<div class="photo-frame">
<img src="/pics/thumb/cgx2.jpg">
</div>
<div class="photo-info" style="height:36px; overflow:hidden; text-align:center;">
<span>ドコでも即ハメおねだり中出しOKレンタル彼女~恋人代行なのに利用時間が過ぎても帰してくれない性欲ビースト24時~ 美園和花</span>
</div>
</a>
<a title="12時間ノンストップ性感開発モニタリング痙攣・潮吹き・エビ反り失神アクメフルコース 楪カレン"
class="movie-box" href="https://www.javbus.com/PPPE-433" style="display:inline-block; margin:5px;">
<div class="photo-frame">
<img src="/pics/thumb/cgxy.jpg">
</div>
<div class="photo-info" style="height:36px; overflow:hidden; text-align:center;">
<span>12時間ノンストップ性感開発モニタリング痙攣・潮吹き・エビ反り失神アクメフルコース 楪カレン</span>
</div>
</a>
<a title="新・世界一媚薬でキマる変態女のトランス失禁キメセク大絶頂FUCK!! 響蓮" class="movie-box"
href="https://www.javbus.com/RKI-747" style="display:inline-block; margin:5px;">
<div class="photo-frame">
<img src="/pics/thumb/c8dw.jpg">
</div>
<div class="photo-info" style="height:36px; overflow:hidden; text-align:center;">
<span>新・世界一媚薬でキマる変態女のトランス失禁キメセク大絶頂FUCK!! 響蓮</span>
</div>
</a>
<a title="勝手に住みついてる陰キャ幽霊のカラダを好き勝手する話1・2 幽霊だからいくら中出ししたって妊娠しない! それなら毎日、生ハメ・中出しヤリまくり! いいことしかないグラマラス幽霊さんとの同居生活! さつき芽衣"
class="movie-box" href="https://www.javbus.com/RKI-736" style="display:inline-block; margin:5px;">
<div class="photo-frame">
<img src="/pics/thumb/c8dy.jpg">
</div>
<div class="photo-info" style="height:36px; overflow:hidden; text-align:center;">
<span>勝手に住みついてる陰キャ幽霊のカラダを好き勝手する話1・2 幽霊だからいくら中出ししたって妊娠しない! それなら毎日、生ハメ・中出しヤリまくり! いいことしかないグラマラス幽霊さんとの同居生活! さつき芽衣</span>
</div>
</a>
</div>
<script language="JavaScript">
(function ($) {
$('img.img').each(function () {
var image = new Image();
image.src = this.src;
if (image.complete) {
cutImgz(this);
} else {
this.onload = function () {
cutImgz(this);
}
}
});
})(jQuery);
function cutImgz(obj) {
var image = new Image();
image.src = obj.src;
$this = $(obj);
var w = image.width;
var h = image.height;
var p = w / h;
if (p > 1.38 && p < 1.40) {
$this.addClass("m1000giri");
}
if (p > 0.99 && p < 1.01) {
$this.addClass("mpacopacomama");
}
if (p > 1.11 && p < 1.13) {
$this.addClass("mcaribbeancom");
}
if (p > 1.77 && p < 1.78) {
$this.addClass("mcaribbeancom2");
}
if (p > 0.59 && p < 0.61) {
$this.addClass("m1pondo");
}
if (p > 0.65 && p < 0.67) {
$this.addClass("mtokyohot");
}
if (p > 1.78 && p < 1.79) {
$this.addClass("mheyzo");
}
}
</script>
<h4>論壇熱帖</h4>
<div id="related-waterfall" class="mb20">
<a title="极品骚浪人妻张燕不雅视频被曝超美孕妇骚劲" class="movie-box"
href="https://www.javbus.com/forum/forum.php?mod=viewthread&tid=176676"
style="display:inline-block; margin:5px;">
<div class="photo-frame bforum">
<img class="mforum" src="https://www.javbus.com/forum/data/attachment/forum/202609/XFHWAI9.jpeg">
</div>
<div class="photo-info" style="height:36px; overflow:hidden; text-align:center;">
<span>极品骚浪人妻张燕不雅视频被曝超美孕妇骚劲</span>
</div>
</a>
<a title="好东西不分享给大家我的良心会痛 四" class="movie-box"
href="https://www.javbus.com/forum/forum.php?mod=viewthread&tid=176691"
style="display:inline-block; margin:5px;">
<div class="photo-frame bforum">
<img class="mforum" src="https://www.javbus.com/forum/data/attachment/forum/202609/NuKOXOl.jpeg">
</div>
<div class="photo-info" style="height:36px; overflow:hidden; text-align:center;">
<span>好东西不分享给大家我的良心会痛 四</span>
</div>
</a>
<a title="求一欧美片,必须实用,曾经我的珍藏,丢失" class="movie-box"
href="https://www.javbus.com/forum/forum.php?mod=viewthread&tid=176678"
style="display:inline-block; margin:5px;">
<div class="photo-frame bforum">
<img class="mforum" src="https://www.javbus.com/forum/data/attachment/forum/202609/MI4O4K8.jpg">
</div>
<div class="photo-info" style="height:36px; overflow:hidden; text-align:center;">
<span>求一欧美片,必须实用,曾经我的珍藏,丢失</span>
</div>
</a>
<a title="看到一张图想知道名字" class="movie-box"
href="https://www.javbus.com/forum/forum.php?mod=viewthread&tid=176686"
style="display:inline-block; margin:5px;">
<div class="photo-frame bforum">
<img class="mforum" src="https://www.javbus.com/forum/data/attachment/forum/202609/wvxEc6L.png">
</div>
<div class="photo-info" style="height:36px; overflow:hidden; text-align:center;">
<span>看到一张图想知道名字</span>
</div>
</a>
<a title="广佛中秋国庆双节出击出击第二弹 长腿御姐" class="movie-box"
href="https://www.javbus.com/forum/forum.php?mod=viewthread&tid=176692"
style="display:inline-block; margin:5px;">
<div class="photo-frame bforum">
<img class="mforum" src="https://www.javbus.com/forum/data/attachment/forum/202609/AX1wxZU.jpeg">
</div>
<div class="photo-info" style="height:36px; overflow:hidden; text-align:center;">
<span>广佛中秋国庆双节出击出击第二弹 长腿御姐</span>
</div>
</a>
<a title="求这完整的套图" class="movie-box"
href="https://www.javbus.com/forum/forum.php?mod=viewthread&tid=176647"
style="display:inline-block; margin:5px;">
<div class="photo-frame bforum">
<img class="mforum" src="https://www.javbus.com/forum/data/attachment/forum/202609/eblYOrO.jpeg">
</div>
<div class="photo-info" style="height:36px; overflow:hidden; text-align:center;">
<span>求这完整的套图</span>
</div>
</a>
</div>
<script>
(function ($) {
$('.bigImage').magnificPopup({
type: 'image',
closeOnContentClick: true,
closeBtnInside: false,
fixedContentPos: true,
mainClass: 'mfp-no-margins mfp-with-zoom',
image: {
verticalFit: true,
titleSrc: function (item) {
return "NIMA-086 実写版!ムラムラしたので通勤中にお持ち帰りされてみた 彩月七緒";
}
},
zoom: {
enabled: true,
duration: 300
}
});
$('#sample-waterfall').magnificPopup({
delegate: 'a',
type: 'image',
closeOnContentClick: false,
closeBtnInside: false,
mainClass: 'mfp-with-zoom mfp-img-mobile',
image: {
verticalFit: true,
titleSrc: function (item) {
return "NIMA-086 実写版!ムラムラしたので通勤中にお持ち帰りされてみた 彩月七緒";
}
},
gallery: {
enabled: true
},
zoom: {
enabled: true,
duration: 300,
opener: function (element) {
return element.find('img');
}
}
});
})(jQuery);
$("#gr_btn").click(function () {
var t = "";
$("input[name='gr_sel']:checkbox").each(function () {
$(this).is(":checked") && (t += $(this).val() + "-")
}), "" != t && (t = t.substring(0, t.length - 1), window.location.href = "genre/" + t)
});
</script>
</div>
<div class="ad-box">
<div class="ad-item">
<div class="ad-juicy">
<script type="text/javascript" data-cfasync="false" async
src="https://poweredby.jads.co/js/jads.js"></script>
<ins id="1024551" data-width="728" data-height="90"></ins>
<script type="text/javascript" data-cfasync="false"
async>(adsbyjuicy = window.adsbyjuicy || []).push({"adzone": 1024551});</script>
</div>
</div>
<div class="ad-item"><a href="https://hgdj.rezluatfbfvgwjhzfhrkovblo.com/chan/ak0072/acXm7" target="_blank"
rel="nofollow"><img src="/ads/hjll_728x90_39.gif" width="728" height="90"></a></div>
<div class="ad-item"><a href="https://xn--fwza.168good.cc/#/?ai=157284" target="_blank" rel="nofollow"><img
src="/ads/51fl_728x90_2.jpg" width="728" height="90"></a></div>
<div class="ad-item"><a href="https://91p.khgnhlzvcisaddwfehlvtnhel.com/chan/GS4670/aBhGW" target="_blank"
rel="nofollow"><img src="/ads/hjll_728x90_18.gif" width="728" height="90"></a></div>
</div>
<script src='https://www.javbus.com/js/gallery.js?v=2.9'></script>
<footer class="footer hidden-xs">
<div class="container-fluid">
<p><a href="https://www.javbus.com/doc/terms">Terms</a> / <a
href="https://www.javbus.com/doc/privacy">Privacy</a> / <a
href="https://www.javbus.com/doc/usc">2257</a> / <a href="http://www.rtalabel.org/" target="_blank"
rel="external nofollow">RTA</a> / <a
href="javascript:bootstr(1);" r>廣告投放</a> / <a href="javascript:bootstr(2);">聯絡我們</a><br/><a
href="#formModal" id="adscontact" data-toggle="modal"></a>
Copyright © 2013 JavBus. All Rights Reserved. All other trademarks and copyrights are the property of their
respective holders. The reviews and comments expressed at or through this website are the opinions of the
individual author and do not reflect the opinions or views of JavBus. JavBus is not responsible for the
accuracy of any of the information supplied here.</p>
</div>
</footer>
<div class="visible-xs-block footer-bar-placeholder"></div>
<script language=javascript>
function bootstr(type) {
ads = "廣告投放";
contact = "聯絡我們";
translate = "翻譯";
$("#adstype").val(type);
if (type == 1) {
$("#contactModalLab").html(ads);
$("#qqskype").show();
$("#transinfo").hide();
$("#translanguage").hide();
$("#mailcontent").show();
} else if (type == 2) {
$("#contactModalLab").html(contact);
$("#qqskype").show();
$("#transinfo").hide();
$("#translanguage").hide();
$("#mailcontent").show();
} else if (type == 3) {
$("#contactModalLab").html(translate);
$("#qqskype").hide();
$("#transinfo").show();
$("#translanguage").show();
$("#mailcontent").hide();
}
$("#adscontact").trigger("click");
getverifycode();
};
function getverifycode() {
$('#verify').attr("src", "/post/verify?" + Math.random() * 10000);
};
function IsMail(mail) {
var remail = /^([a-zA-Z0-9_-])+(\.)?([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/;
return (remail.test(mail));
};
function checkform() {
var post = true;
if ($("#verifycode").val().length != 5) {
alert("驗證碼輸入錯誤!")
$("#verifycode").focus();
post = false;
}
if ($("#contact").val().length > 255) {
alert("聯繫方式字數過多!")
$("#contact").focus();
post = false;
}
if (!IsMail($("#mail").val())) {
alert("請輸入正確的電郵地址!")
$("#mail").focus();
post = false;
}
if ($("#intention").val().length > 25500) {
alert("投放意向字數過多!")
$("#intention").focus();
post = false;
}
if ($("#trans").val().length > 255) {
alert("Too many words in your language textbox!")
$("#intention").focus();
post = false;
}
if (post == true) {
$("#modalclose").trigger("click");
$("#postform").attr("action", "/post/contact");
$("#postform").submit();
}
return post;
};
</script>
<script>
$("#showmag,#cellshowmag,#resultshowmag").click(function () {
$.cookie("existmag", "mag", {expires: 365, path: '/'});
location.reload()
});
$("#showall,#cellshowall,#resultshowall").click(function () {
$.cookie("existmag", "all", {expires: 365, path: '/'});
location.reload()
});
$("#showonline").click(function () {
$.cookie("existmag", "online", {expires: 365, path: '/'});
location.reload()
});
$(".info .mypointer").click(function () {
var obj = $(this);
var code = obj.attr('value');
var token = $("#token").val();
var e = "../ajax/addfavorite.php?code=" + encodeURIComponent(code) + "&token=" + encodeURIComponent(token) + "&floor=" + Math.floor(Math.random() * 1e3 + 1);
$.ajax({
url: e,
type: "POST",
//dataType: "json",
cache: false,
success: function (json) {
//obj.html(json);
ajaxobj = eval("(" + json + ")");
if (ajaxobj.act == 'err') {
alert('收藏次數達上限,請稍候再試');
} else {
obj.html(ajaxobj.act);
obj.attr('value', ajaxobj.code);
obj.attr('title', ajaxobj.title);
$("#token").val(ajaxobj.token);
}
}
});
});
$(".glyphicon-heart-empty").hover(function () {
$(this).removeClass('glyphicon-heart-empty');
$(this).addClass('glyphicon-heart');
}, function () {
$(this).removeClass('glyphicon-heart');
$(this).addClass('glyphicon-heart-empty');
});
$(".glyphicon-heart").hover(function () {
$(this).removeClass('glyphicon-heart');
$(this).addClass('glyphicon-heart-empty');
}, function () {
$(this).removeClass('glyphicon-heart-empty');
$(this).addClass('glyphicon-heart');
});
</script>
<!-- Modal Forms -->
<div id="formModal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="formModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button id="modalclose" type="button" class="close" data-dismiss="modal" aria-label="Close"><span
aria-hidden="true">&times;</span></button>
<h4 class="modal-title" id="contactModalLab">聯絡我們</h4>
</div>
<div class="modal-body">
<form class="form-horizontal" name="postform" method="post" id="postform" enctype="multipart/form-data">
<fieldset>
<div class="form-group" id="qqskype">
<label class="col-sm-4 control-label" for="contact">Telegram / 電報</label>
<div class="col-sm-6">
<input id="contact" name="contact" type="text" placeholder="" class="form-control">
</div>
</div>
<div class="form-group">
<label class="col-sm-4 control-label" for="mail">Email</label>
<div class="col-sm-6">
<input id="mail" name="mail" type="text" placeholder="" class="form-control">
</div>
</div>
<div class="form-group" id="translanguage">
<label class="col-sm-4 control-label" for="trans">Your Language</label>
<div class="col-sm-6">
<input id="trans" name="trans" type="text" placeholder="" class="form-control">
</div>
</div>
<div class="form-group" id="mailcontent">
<label class="col-sm-4 control-label" for="intention" id="inten-trans">內容</label>
<div class="col-sm-6">
<textarea id="intention" name="intention" rows="9" class="form-control"></textarea>
</div>
</div>
<div class="form-group">
<label class="col-sm-4 control-label" for="verify">驗證碼</label>
<div class="col-sm-6">
<input type="text" id="verifycode" name="verifycode" style="width:50px"/>
<img id="verify" src="" style="cursor: pointer; vertical-align:middle;"
onclick="getverifycode()"/>
</div>
</div>
<input type="hidden" id="adstype" name="adstype" value="1"/>
</fieldset>
</form>
</div>
<div class="modal-footer">
<button type="button" button class="btn btn-primary" onclick="checkform()">送出</button>
<button type="button" button class="btn btn-default" data-dismiss="modal">關閉</button>
</div>
</div>
</div>
</div>
<!-- ////////////////////////////////////////////////// -->
<div class="overlay overlay-contentscale">
<div class="row">
<div class="col-xs-12 text-center ptb20">
<div class="input-group col-xs-offset-2 col-xs-8">
<input id="search-input-mobile" type="text" class="form-control" placeholder="搜尋 識別碼, 影片, 演員">
<span class="input-group-btn">
<button class="btn btn-default" type="submit"
onClick="searchs('search-input-mobile')">搜尋</button>
</span>
</div>
</div>
<div class="col-xs-6 text-center"><a href="https://www.javbus.com/">有碼</a></div>
<div class="col-xs-6 text-center"><a href="https://www.javbus.com/uncensored">無碼</a></div>
<div class="col-xs-6 text-center"><a href="https://www.javbus.com/genre">有碼類別</a></div>
<div class="col-xs-6 text-center"><a href="https://www.javbus.com/uncensored/genre">無碼類別</a></div>
<div class="col-xs-6 text-center"><a href="https://www.javbus.com/actresses">有碼女優</a></div>
<div class="col-xs-6 text-center"><a href="https://www.javbus.com/uncensored/actresses">無碼女優</a></div>
<div class="col-xs-6 text-center"><a href="https://www.javbus.hair/">歐美</a></div>
<div class="col-xs-6 text-center"><a href="https://www.javbus.com/forum/">論壇</a></div>
<div class="col-xs-12 text-center overlay-close">
<i class="glyphicon glyphicon-remove"></i>
</div>
</div>
</div>
</body>
</html>
+1248
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "jhs-enhance", "name": "jhs-enhance",
"version": "3.3.15", "version": "3.3.16",
"description": "Jav-鉴黄师 油猴脚本 - 工程化版本", "description": "Jav-鉴黄师 油猴脚本 - 工程化版本",
"type": "module", "type": "module",
"scripts": { "scripts": {
+12 -2
View File
File diff suppressed because one or more lines are too long
+128 -2
View File
@@ -80,7 +80,105 @@ class WangPan115TaskPlugin extends BasePlugin {
$headerRow.append($("<td>").text("操作")); $headerRow.append($("<td>").text("操作"));
} }
} }
static sanitizeDirName(str) {
if (!str) return "";
return str.replace(/[\\/:*?"<>|]/g, "").replace(/\s+/g, " ").trim();
}
static parseOfflineDirTemplate(str, params) {
if (!str || !params) return str;
return str.replace(/\$\{(\w+)\}/g, (match, key) => {
if (!params.hasOwnProperty(key)) return match;
const value = params[key] || "";
return WangPan115TaskPlugin.sanitizeDirName(String(value));
});
}
static async ensureDir(dirName, pid = 0) {
const result = await gmHttp.postFileFormData("https://webapi.115.com/files/add", {
pid: pid,
cname: dirName
});
if (result && result.file_id) return result.file_id;
const searchRes = await searchFiles(dirName, 0, 1, {fc: 1});
if (searchRes && searchRes.data && searchRes.data.length > 0) {
const match = searchRes.data.find(d => d.pid === pid || d.pid === String(pid));
if (match) return match.fid || match.file_id;
}
return null;
}
static async registerDirAsDownPath(fileId, dirName) {
await gmHttp.postFileFormData("https://webapi.115.com/offine/downpath", {
file_id: fileId
});
const list = await getDownPathList();
const created = list ? list.find(d => d.file_id === fileId || String(d.file_id) === String(fileId)) : null;
return created ? created.id : null;
}
static async createMultiLevelDownPath(templatePath) {
const segments = templatePath.split("/").filter(s => s.trim());
if (segments.length === 0) return null;
let pid = 0;
let fileId = null;
for (const seg of segments) {
fileId = await WangPan115TaskPlugin.ensureDir(seg.trim(), pid);
if (!fileId) {
console.error("[115离线] 创建目录失败:", seg);
return null;
}
pid = fileId;
}
const lastDirName = segments[segments.length - 1].trim();
const downPathId = await WangPan115TaskPlugin.registerDirAsDownPath(fileId, lastDirName);
console.log("[115离线] 多级目录创建完成:", templatePath, "→ downPathId=" + downPathId);
return downPathId;
}
getPageInfoForOffline() {
const baseInfo = this.getPageInfo();
const carNum = baseInfo.carNum || "";
let title = "", maker = "", actor = "";
if (isJavBus) {
title = $("h3").first().text().trim();
maker = $('span.header:contains("製作商:")').parent("p").text().replace("製作商:", "").trim() ||
$('span.header:contains("制作商:")').parent("p").text().replace("制作商:", "").trim();
const actorEl = $('span.genre a[href*="/star/"]').first();
actor = actorEl.length ? actorEl.text().trim() : "";
} else {
title = $(".current-title").first().text().trim() || $("h2.title.is-4 .current-title").first().text().trim() || $(".movie-title").first().text().trim();
maker = $('strong:contains("片商:")').parent().find(".value").text().trim() ||
$('strong:contains("片商:")').parent().find(".value").text().trim();
actor = $('.actor-female').first().text().trim() || $('strong:contains("演員:"), strong:contains("演员:")').parent().find('.value a').first().text().trim() || "";
}
const now = new Date();
if (carNum && title) {
const upperTitle = title.toUpperCase();
const upperCode = carNum.toUpperCase();
if (upperTitle.startsWith(upperCode)) {
title = title.substring(carNum.length).replace(/^[\s\-_]+/, "").trim();
}
}
console.log("[115离线] 页面信息提取:", {code: carNum, title, maker, actor});
return {
code: carNum,
title: title,
maker: maker,
actor: actor,
date: utils.formatDate(now).split(" ")[0]
};
}
async getSavePathId(nyName) { async getSavePathId(nyName) {
const enableCustom = await storageManager.getSetting("enable115OfflineFormat", NO);
if (enableCustom === YES) {
const template = await storageManager.getSetting("offlineFolderFormat", "");
if (template && template.includes("${")) {
const pageInfo = this.getPageInfoForOffline();
return WangPan115TaskPlugin.parseOfflineDirTemplate(template, pageInfo);
}
}
let savePath115 = await storageManager.getSetting("savePath115", "云下载"); let savePath115 = await storageManager.getSetting("savePath115", "云下载");
nyName && (savePath115 = savePath115.replaceAll("{ny}", nyName)); nyName && (savePath115 = savePath115.replaceAll("{ny}", nyName));
savePath115 = savePath115.replaceAll("{date}", utils.formatDate(new Date)); savePath115 = savePath115.replaceAll("{date}", utils.formatDate(new Date));
@@ -101,7 +199,35 @@ class WangPan115TaskPlugin extends BasePlugin {
}); });
return; return;
} }
const sign = singInfo.sign, time = singInfo.time, userId = this.getUserId(), result = await (async (magnet, wp_path_id = "", uid, sign, time) => { const sign = singInfo.sign, time = singInfo.time, userId = this.getUserId();
let wp_path_id = savePath || "";
if (!wp_path_id) {
const fullPath = await this.getSavePathId();
console.log("[115离线] 目录模板解析结果:", fullPath);
if (fullPath) {
if (fullPath.includes("/")) {
console.log("[115离线] 检测到多级目录,逐级创建:", fullPath);
const newId = await WangPan115TaskPlugin.createMultiLevelDownPath(fullPath);
if (newId) wp_path_id = newId;
} else {
const downPathList = await getDownPathList();
if (downPathList && downPathList.length > 0) {
const matched = downPathList.find((d => d.name === fullPath));
if (matched) {
wp_path_id = matched.id;
console.log("[115离线] 目录匹配结果: 匹配到 \"" + matched.name + "\" -> id=" + matched.id);
} else {
console.log("[115离线] 目录匹配结果: 未匹配到 \"" + fullPath + "\",自动创建并注册");
const newId = await WangPan115TaskPlugin.createMultiLevelDownPath(fullPath);
if (newId) wp_path_id = newId;
}
}
}
}
}
const result = await (async (magnet, wp_path_id = "", uid, sign, time) => {
const data = { const data = {
url: encodeURIComponent(magnet), url: encodeURIComponent(magnet),
wp_path_id: wp_path_id, wp_path_id: wp_path_id,
@@ -110,7 +236,7 @@ class WangPan115TaskPlugin extends BasePlugin {
time: time time: time
}; };
return await gmHttp.postForm("https://115.com/web/lixian/?ct=lixian&ac=add_task_url", data); return await gmHttp.postForm("https://115.com/web/lixian/?ct=lixian&ac=add_task_url", data);
})(magnetLink, savePath || "", userId, sign, time); })(magnetLink, wp_path_id, userId, sign, time);
console.log("离线下载返回值:", result); console.log("离线下载返回值:", result);
let infoHash = result.info_hash, fileId = await this.getFileId(userId, sign, time, infoHash), openUrl = "https://115.com/?tab=offline&mode=wangpan"; let infoHash = result.info_hash, fileId = await this.getFileId(userId, sign, time, infoHash), openUrl = "https://115.com/?tab=offline&mode=wangpan";
fileId && (openUrl = `https://115.com/?cid=${fileId}&offset=0&mode=wangpan`); fileId && (openUrl = `https://115.com/?cid=${fileId}&offset=0&mode=wangpan`);
+1 -1
View File
@@ -8,7 +8,7 @@ export default defineConfig({
userscript: { userscript: {
name: 'JHS-enhance', name: 'JHS-enhance',
namespace: 'JHS-enhance', namespace: 'JHS-enhance',
version: '3.3.15', version: '3.3.16',
author: 'xiebro,fireinrain', author: 'xiebro,fireinrain',
description: 'Jav-鉴黄师 增强脚本。列表页:作品状态标签、一键筛选、新作品检测、演员黑名单过滤;详情页:磁力链接高亮、DMM 多画质预览视频、标题翻译、整合字幕搜索(迅雷+SubTitleCat)并支持 115 直传、多源预览图(javfree/projectjav/javstore)含来源切换;数据:115 网盘目录匹配与多目录选择、云盘备份/恢复、跨 Tab 同步;其他:自动翻页、分类折叠、Top250、以图识图、热门榜单、评论查看、相关清单。支持 JavDB / JavBus / JavSee / SeeJav / FC2 / JavTrailers', description: 'Jav-鉴黄师 增强脚本。列表页:作品状态标签、一键筛选、新作品检测、演员黑名单过滤;详情页:磁力链接高亮、DMM 多画质预览视频、标题翻译、整合字幕搜索(迅雷+SubTitleCat)并支持 115 直传、多源预览图(javfree/projectjav/javstore)含来源切换;数据:115 网盘目录匹配与多目录选择、云盘备份/恢复、跨 Tab 同步;其他:自动翻页、分类折叠、Top250、以图识图、热门榜单、评论查看、相关清单。支持 JavDB / JavBus / JavSee / SeeJav / FC2 / JavTrailers',
license: 'MIT', license: 'MIT',