[{"articleStyle":4,"cacheFirst":false,"customOrder":4,"enableJs":true,"enabled":true,"enabledCookieJar":false,"lastUpdateTime":1787294368229,"loadWithBaseUrl":true,"preload":false,"ruleArticles":"$..videos[*]","ruleContent":"@js:\n(function(){\n    try {\n        var data = JSON.parse(result);\n        var videoId = data.video.id; \n        var videoName = data.video.name;\n        var playlists = data.video.playlists;\n        var labels = data.player_label_arr;\n        var cover = data.video.cover;\n        var jxUrl = \"https:\/\/jx.ejtsyc.com:8443\/m3u8\/?url=\";\n\n        \/\/ 详情字段\n        var year = data.video.year || '';\n        var area = data.video.area || '';\n        var status = data.video.status || '';\n        var type = data.video.type || '';\n        var tags = data.video.tags || '';\n        var writer = data.video.writer || '';\n        var company = data.video.company || '';\n        var intro = data.video.intro_clean || data.video.intro || '暂无简介';\n\n        function esc(s) {\n            return String(s).replace(\/&\/g, '&amp;').replace(\/<\/g, '&lt;').replace(\/>\/g, '&gt;').replace(\/\"\/g, '&quot;').replace(\/'\/g, '&#39;');\n        }\n\n        \/\/ 默认播放链接\n        var defaultPlayUrl = \"\";\n        for (var k in playlists) {\n            if (playlists[k] && playlists[k].length > 0) {\n                defaultPlayUrl = jxUrl + playlists[k][0][1];\n                break;\n            }\n        }\n\n        \/\/ 构建 HTML\n        var html = '<!DOCTYPE html><html><head>';\n        html += '<meta charset=\"UTF-8\">';\n        html += '<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">';\n        html += '<meta name=\"referrer\" content=\"never\">';\n        html += '<title>' + esc(videoName) + '<\/title>';\n        html += '<\/head><body style=\"margin:0; padding:8px; font-family: sans-serif;\">';\n        html += '<div style=\"width:100%;\">';\n\n        \/\/ 播放器（包裹一层div以便全屏）\n        html += '<div id=\"player-wrapper\" style=\"position:relative; width:100%;\">';\n        if (defaultPlayUrl !== \"\") {\n            html += '<iframe name=\"ageplayer\" id=\"ageplayer\" src=\"' + defaultPlayUrl + '\" width=\"100%\" height=\"240px\" frameborder=\"0\" allowfullscreen=\"true\" style=\"border-radius:8px; background:#000;\"><\/iframe>';\n        } else {\n            html += '<img src=\"' + esc(cover) + '\" style=\"width:100%; border-radius:8px;\"\/>';\n        }\n        html += '<\/div>';\n\n        \/\/ 详情卡片（播放器下方）\n        html += '<div style=\"display:flex; gap:10px; margin:12px 0; align-items:flex-start;\">';\n        html += '<img src=\"' + esc(cover) + '\" style=\"width:80px; height:112px; object-fit:cover; border-radius:8px; flex-shrink:0;\" onerror=\"this.style.display=\\'none\\'\">';\n        html += '<div style=\"flex:1; min-width:0;\">';\n        html += '<div style=\"font-weight:bold; font-size:16px; margin-bottom:4px;\">' + esc(videoName) + '<\/div>';\n        var detailArr = [];\n        if (year) detailArr.push('年份：' + year);\n        if (area) detailArr.push('地区：' + area);\n        if (status) detailArr.push('状态：' + status);\n        if (type) detailArr.push('类型：' + type);\n        if (tags) detailArr.push('标签：' + tags);\n        if (detailArr.length) html += '<div style=\"font-size:13px; color:#666; margin-bottom:2px;\">' + esc(detailArr.join('　')) + '<\/div>';\n        if (writer) html += '<div style=\"font-size:13px; color:#666;\">编剧：' + esc(writer) + '<\/div>';\n        if (company) html += '<div style=\"font-size:13px; color:#666;\">制作：' + esc(company) + '<\/div>';\n        html += '<div style=\"font-size:13px; color:#888; margin-top:6px; line-height:1.5; max-height:90px; overflow:auto;\">' + esc(intro) + '<\/div>';\n        html += '<\/div><\/div>';\n\n        \/\/ 历史提示 + 清除按钮\n        html += '<div style=\"display:flex; justify-content:space-between; align-items:center; margin-top:12px;\">';\n        html += '<p id=\"history-text\" style=\"color:#f60; font-size:14px; font-weight:bold; text-align:center; flex:1; margin:0;\">读取进度中...<\/p>';\n        html += '<button onclick=\"clearHistory()\" style=\"background:none; border:1px solid #ddd; padding:4px 10px; border-radius:6px; color:#999; font-size:12px;\">清除历史<\/button>';\n        html += '<\/div>';\n\n        \/\/ 线路 tabs 和剧集容器\n        var tabsHtml = '<div style=\"display:flex; overflow-x:auto; gap:15px; border-bottom:1px solid #eee; padding-bottom:8px; margin-top:10px; white-space:nowrap; -webkit-overflow-scrolling: touch;\">';\n        var epsHtml = '<div style=\"margin-top:15px;\">';\n        var tabIndex = 0;\n        var firstTabId = \"\";\n        var firstLineName = \"\";\n        var firstEpName = \"\";\n\n        for (var key in playlists) {\n            var lineName = labels[key] ? labels[key] : key;\n            var tId = \"line_\" + tabIndex;\n            var episodes = playlists[key];\n            if (tabIndex === 0) {\n                firstTabId = tId;\n                firstLineName = lineName;\n                if (episodes.length > 0) firstEpName = episodes[0][0];\n            }\n            tabsHtml += '<div id=\"tab_' + tId + '\" class=\"line-tab\" onclick=\"switchTab(\\'' + tId + '\\')\" style=\"padding:4px 8px; color:#666; font-size:15px; cursor:pointer; transition:all 0.2s;\">' + lineName + '<\/div>';\n            epsHtml += '<div id=\"container_' + tId + '\" class=\"ep-container\" style=\"display:none; flex-wrap:wrap; gap:10px;\">';\n            for (var i = 0; i < episodes.length; i++) {\n                var epName = episodes[i][0];\n                var epCode = episodes[i][1];\n                var playUrl = jxUrl + epCode;\n                epsHtml += '<a href=\"' + playUrl + '\" target=\"ageplayer\" class=\"ep-btn\" onclick=\"savePlayHistory(this, \\'' + playUrl + '\\', \\'' + lineName + '\\', \\'' + epName + '\\', \\'' + tId + '\\', ' + tabIndex + ', ' + i + ')\" style=\"padding:6px 12px; background:#f0f2f5; text-decoration:none; color:#333; border-radius:6px; font-size:14px; border:1px solid #e4e6eb; text-align:center; transition: all 0.2s;\">' + epName + '<\/a>';\n            }\n            epsHtml += '<\/div>';\n            tabIndex++;\n        }\n        tabsHtml += '<\/div>';\n        epsHtml += '<\/div>';\n\n        html += tabsHtml;\n        html += epsHtml;\n        html += '<\/div><\/body>';\n\n        \/\/ 注入 JS\n        html += '<script>';\n        html += 'var storageKey = \"age_history_\" + ' + JSON.stringify(videoId || encodeURIComponent(videoName)) + ';';\n        html += 'function switchTab(tId) {';\n        html += '  var eps = document.querySelectorAll(\".ep-container\");';\n        html += '  for(var i=0; i<eps.length; i++) eps[i].style.display = \"none\";'; \n        html += '  var tabs = document.querySelectorAll(\".line-tab\");';\n        html += '  for(var i=0; i<tabs.length; i++) { tabs[i].style.color = \"#666\"; tabs[i].style.borderBottom = \"none\"; tabs[i].style.fontWeight = \"normal\"; }'; \n        html += '  document.getElementById(\"container_\" + tId).style.display = \"flex\";'; \n        html += '  var activeTab = document.getElementById(\"tab_\" + tId);';\n        html += '  if(activeTab) { activeTab.style.color = \"#f60\"; activeTab.style.borderBottom = \"2px solid #f60\"; activeTab.style.fontWeight = \"bold\"; }'; \n        html += '}';\n\n        html += 'function savePlayHistory(btnElem, url, lineName, epName, tId, lineIndex, epIndex) {';\n        html += '  var histText = lineName + \" - \" + epName;';\n        html += '  var saveData = {';\n        html += '    url: url,';\n        html += '    lineName: lineName,';\n        html += '    epName: epName,';\n        html += '    tabId: tId,';\n        html += '    lineIndex: lineIndex,';\n        html += '    epIndex: epIndex,';\n        html += '    timestamp: Date.now()';\n        html += '  };';\n        html += '  localStorage.setItem(storageKey, JSON.stringify(saveData));';\n        html += '  var timeStr = new Date(saveData.timestamp).toLocaleString(\"zh-CN\", {hour12:false});';\n        html += '  document.getElementById(\"history-text\").innerText = \"上次观看：\" + histText + \"（\" + timeStr + \"）\";';\n        html += '  var btns = document.querySelectorAll(\".ep-btn\");';\n        html += '  for(var i=0; i<btns.length; i++){ btns[i].style.background=\"#f0f2f5\"; btns[i].style.color=\"#333\"; btns[i].style.borderColor=\"#e4e6eb\"; }';\n        html += '  btnElem.style.background=\"#f60\"; btnElem.style.color=\"#fff\"; btnElem.style.borderColor=\"#f60\";';\n        html += '}';\n\n        html += 'function clearHistory() {';\n        html += '  localStorage.removeItem(storageKey);';\n        html += '  var player = document.getElementById(\"ageplayer\");';\n        html += '  if(player) player.src = \"' + defaultPlayUrl + '\";';\n        html += '  switchTab(\"' + firstTabId + '\");';\n        html += '  document.getElementById(\"history-text\").innerText = \"已清除历史，请重新选择剧集\";';\n        html += '  var btns = document.querySelectorAll(\".ep-btn\");';\n        html += '  for(var i=0; i<btns.length; i++){ btns[i].style.background=\"#f0f2f5\"; btns[i].style.color=\"#333\"; btns[i].style.borderColor=\"#e4e6eb\"; }';\n        html += '  var firstBtn = document.querySelector(\"#container_' + firstTabId + ' .ep-btn\");';\n        html += '  if(firstBtn) { firstBtn.style.background=\"#f60\"; firstBtn.style.color=\"#fff\"; firstBtn.style.borderColor=\"#f60\"; }';\n        html += '}';\n\n        html += 'window.onload = function() {';\n        html += '  var savedStr = localStorage.getItem(storageKey);';\n        html += '  if (savedStr) {';\n        html += '    try {';\n        html += '      var savedData = JSON.parse(savedStr);';\n        html += '      var targetBtn = null;';\n        html += '      if (savedData.lineIndex !== undefined && savedData.epIndex !== undefined) {';\n        html += '        var container = document.getElementById(\"container_line_\" + savedData.lineIndex);';\n        html += '        if (container) {';\n        html += '          var allBtns = container.querySelectorAll(\".ep-btn\");';\n        html += '          if (savedData.epIndex < allBtns.length) targetBtn = allBtns[savedData.epIndex];';\n        html += '        }';\n        html += '      }';\n        html += '      if (!targetBtn && savedData.url) {';\n        html += '        var btns = document.querySelectorAll(\".ep-btn\");';\n        html += '        for(var i=0; i<btns.length; i++){';\n        html += '          if(btns[i].getAttribute(\"href\") === savedData.url) { targetBtn = btns[i]; break; }';\n        html += '        }';\n        html += '      }';\n        html += '      if (targetBtn) {';\n        html += '        if (savedData.tabId) switchTab(savedData.tabId);';\n        html += '        document.getElementById(\"ageplayer\").src = targetBtn.getAttribute(\"href\");';\n        html += '        var timeStr = savedData.timestamp ? new Date(savedData.timestamp).toLocaleString(\"zh-CN\", {hour12:false}) : \"\";';\n        html += '        var histText = savedData.lineName + \" - \" + savedData.epName;';\n        html += '        document.getElementById(\"history-text\").innerText = \"上次观看：\" + histText + (timeStr ? \"（\" + timeStr + \"）\" : \"\");';\n        html += '        var allBtns = document.querySelectorAll(\".ep-btn\");';\n        html += '        for(var i=0; i<allBtns.length; i++){ allBtns[i].style.background=\"#f0f2f5\"; allBtns[i].style.color=\"#333\"; allBtns[i].style.borderColor=\"#e4e6eb\"; }';\n        html += '        targetBtn.style.background=\"#f60\"; targetBtn.style.color=\"#fff\"; targetBtn.style.borderColor=\"#f60\";';\n        html += '      } else {';\n        html += '        switchTab(\"' + firstTabId + '\");';\n        html += '        document.getElementById(\"history-text\").innerText = \"您当前已观看到：' + firstLineName + ' - ' + firstEpName + '\";';\n        html += '        var firstBtn = document.querySelector(\"#container_' + firstTabId + ' .ep-btn\");';\n        html += '        if(firstBtn) { firstBtn.style.background=\"#f60\"; firstBtn.style.color=\"#fff\"; firstBtn.style.borderColor=\"#f60\"; }';\n        html += '      }';\n        html += '    } catch(e) {';\n        html += '      switchTab(\"' + firstTabId + '\");';\n        html += '      document.getElementById(\"history-text\").innerText = \"您当前已观看到：' + firstLineName + ' - ' + firstEpName + '\";';\n        html += '      var firstBtn = document.querySelector(\"#container_' + firstTabId + ' .ep-btn\");';\n        html += '      if(firstBtn) { firstBtn.style.background=\"#f60\"; firstBtn.style.color=\"#fff\"; firstBtn.style.borderColor=\"#f60\"; }';\n        html += '    }';\n        html += '  } else {';\n        html += '    switchTab(\"' + firstTabId + '\");';\n        html += '    document.getElementById(\"history-text\").innerText = \"您当前已观看到：' + firstLineName + ' - ' + firstEpName + '\";';\n        html += '    var firstBtn = document.querySelector(\"#container_' + firstTabId + ' .ep-btn\");';\n        html += '    if(firstBtn) { firstBtn.style.background=\"#f60\"; firstBtn.style.color=\"#fff\"; firstBtn.style.borderColor=\"#f60\"; }';\n        html += '  }';\n        html += '};';\n\n        \/\/ ===== 新增：全屏自动横屏 =====\n        html += 'function lockLandscape(){if(screen.orientation&&screen.orientation.lock){screen.orientation.lock(\"landscape\").catch(function(){});}}';\n        html += 'function unlockOrientation(){if(screen.orientation&&screen.orientation.unlock){screen.orientation.unlock();}}';\n        html += 'document.addEventListener(\"fullscreenchange\",function(){if(document.fullscreenElement){lockLandscape();}else{unlockOrientation();}});';\n        html += 'document.addEventListener(\"webkitfullscreenchange\",function(){if(document.webkitFullscreenElement){lockLandscape();}else{unlockOrientation();}});';\n\n        html += '<\/script><\/html>';\n\n        return html;\n    } catch(e) {\n        return \"解析错误：\" + e.message;\n    }\n})();","ruleImage":"$.cover","ruleLink":"@js:'https:\/\/api.agedm.io\/v2\/detail\/' + result.id","ruleNextPage":"page","ruleTitle":"name","searchUrl":"https:\/\/api.agedm.io\/v2\/search?query={{source.getVariable()}}&page={{page}}","showWebLog":false,"singleUrl":false,"sortUrl":"日本动漫::https:\/\/api.agedm.io\/v2\/catalog?genre=all&label=all&letter=all&order=time&region=日本&resource=all&season=all&status=all&year=all&page={{page}}&size=10\n国产动漫::https:\/\/api.agedm.io\/v2\/catalog?genre=all&label=all&letter=all&order=time&region=中国&resource=all&season=all&status=all&year=all&page={{page}}&size=10\n欧美动漫::https:\/\/api.agedm.io\/v2\/catalog?genre=all&label=all&letter=all&order=time&region=欧美&resource=all&season=all&status=all&year=all&page={{page}}&size=10\n新番连载::https:\/\/api.agedm.io\/v2\/catalog?genre=all&label=all&letter=all&order=time&region=all&resource=all&season=all&status=连载&year=all&page={{page}}&size=10\n已完结::https:\/\/api.agedm.io\/v2\/catalog?genre=all&label=all&letter=all&order=time&region=all&resource=all&season=all&status=完结&year=all&page={{page}}&size=10","sourceComment":"\/\/梦不觉   \n\n\/\/2826.07.25制","sourceGroup":"影视","sourceIcon":"https:\/\/xcdn.aiqingyu1314.com:8443\/agem\/apple-touch-icon-120x120.png","sourceName":"AGE动漫","sourceUrl":"https:\/\/m.agedm.io\/#\/","type":0}]