//本代码仅用于个人学习,请勿用于其他作用,下载后请24小时内删除,代码虽然是公开学习的,但请尊重作者,应留下说明 //聚集型、接口型、平台型空壳小程序,接口分为主页源和搜索源 let publicfile; try{ publicfile = config.依赖.match(/http(s)?:\/\/.*\//)[0] + 'SrcJuPublic.js'; }catch(e){ let cfgfile = "hiker://files/rules/Src/Ju/config.json"; if (fileExist(cfgfile)) { eval("let Juconfig=" + fetch(cfgfile) + ";"); publicfile = Juconfig["依赖"].match(/http(s)?:\/\/.*\//)[0] + 'SrcJuPublic.js'; } } require(publicfile); //一级 function yiji() { let sourcedata = yidatalist.filter(it => { return it.name==sourcename && it.type==runMode; }); let parse = {}; let 页码 = {}; let 转换 = {}; let runType; try { if (sourcedata.length > 0) { eval("let source = " + sourcedata[0].parse); if (source.ext && /^http/.test(source.ext)) { requireCache(source.ext, 48); parse = yidata; } else { parse = source; } runType = sourcedata[0].type; storage0.putMyVar('一级源接口信息',{name: sourcename, type: runType, group: sourcedata[0].group, img: sourcedata[0].img});//传导给方法文件 try{ require(config.依赖.match(/http(s)?:\/\/.*\//)[0] + 'SrcJuMethod.js'); cacheData(sourcedata[0]); }catch(e){ //xlog("√缓存临时文件失败>"+e.message); } 页码 = parse["页码"]; 转换 = parse["转换"]; let 提示 = "当前主页源:" + sourcename + (parse["作者"] ? ",作者:" + parse["作者"] : ""); if(!getMyVar(runMode+"_"+sourcename)){ toast(提示); } } } catch (e) { xlog("√一级源接口加载异常>" + e.message); } 页码 = 页码 || {}; 转换 = 转换 || {}; let d = []; if(MY_PAGE==1){ if(getMyVar('SrcJu_versionCheck', '0') == '0'){ let programversion = $.require("config").version || 0; if(programversion<14){ confirm({ title: "温馨提示", content: "发现小程序新版本", confirm: $.toString(() => { return "海阔视界首页频道规则【聚阅√】¥home_rule_url¥http://hiker.nokia.press/hikerule/rulelist.json?id=6337" }), cancel: $.toString(() => { return "toast://不升级小程序,则功能不全或有异常" }) }); } Version(); downloadicon(); } d.push({ title: "管理", url: $("hiker://empty#noRecordHistory##noHistory#").rule(() => { require(config.依赖.match(/http(s)?:\/\/.*\//)[0] + 'SrcJuSet.js'); SRCSet(); }), pic_url: "http://123.56.105.145/tubiao/more/129.png", col_type: 'icon_5', extra: { newWindow: true, windowId: MY_RULE.title + "管理" } }) let zz = 转换["排行"] || "排行"; if(parse&&parse[zz]){ d.push({ title: zz, url: rulePage(zz,页码[zz]), pic_url: "http://123.56.105.145/tubiao/more/229.png", col_type: 'icon_5' }) }else{ d.push({ title: "收藏", url: "hiker://collection?rule="+MY_RULE.title, pic_url: "http://123.56.105.145/tubiao/more/109.png", col_type: 'icon_5' }) } let sousuoextra = { id: "sousuopageid", newWindow: true, windowId: MY_RULE.title + "搜索页", longClick: [{ title: "🔍搜索", js: $.toString(() => { return $("hiker://empty#noRefresh##noRecordHistory##noHistory##fullTheme###fypage").rule(() => { require(config.依赖); newsousuopage(); }) }) },{ title: "🔎聚搜代理:"+(getItem('searchmode')=="jusousuo"?"是":"否"), js: $.toString(() => { if(getItem('searchmode')=="jusousuo"){ clearItem('searchmode'); return "toast://取消软件聚搜代理,走小程序聚搜"; }else{ setItem('searchmode', "jusousuo"); return "toast://开启软件聚搜代理,走软件聚搜"; } }) }] } zz = 转换["分类"] || "分类"; if(parse&&parse[zz]){ d.push({ title: zz, url: $('#noLoading#').lazyRule((sousuoextra,ispage,zz) => { delete sousuoextra.newWindow; updateItem("sousuopageid",{extra:sousuoextra}); return $("hiker://empty#noRecordHistory##noHistory#" + (ispage ? "?page=fypage" : "")).rule((sousuoextra,zz) => { addListener("onClose", $.toString((sousuoextra) => { sousuoextra.newWindow = true; updateItem("sousuopageid",{extra:sousuoextra}); },sousuoextra)); require(config.依赖.match(/http(s)?:\/\/.*\//)[0] + 'SrcJuPublic.js'); getYiData(zz); },sousuoextra,zz) },sousuoextra,页码[zz],zz), pic_url: "http://123.56.105.145/tubiao/more/287.png", col_type: 'icon_5', extra: sousuoextra }) }else{ d.push({ title: "搜索", url: $("hiker://empty#noRefresh##noRecordHistory##noHistory##fullTheme###fypage").rule(() => { require(config.依赖); newsousuopage(); }), pic_url: "http://123.56.105.145/tubiao/more/101.png", col_type: 'icon_5', extra: sousuoextra }) } zz = 转换["更新"] || "更新"; if(parse&&parse[zz]){ d.push({ title: zz, url: rulePage(zz,页码[zz]), pic_url: "http://123.56.105.145/tubiao/more/288.png", col_type: 'icon_5' }) }else{ d.push({ title: "历史", url: "hiker://history?rule="+MY_RULE.title, pic_url: "http://123.56.105.145/tubiao/more/213.png", col_type: 'icon_5' }) } d.push({ title: Juconfig["btnmenu5"] || "书架", url: Juconfig["btnmenu5"] == "历史" ? "hiker://history?rule="+MY_RULE.title : Juconfig["btnmenu5"] == "收藏" ? "hiker://collection?rule="+MY_RULE.title : $("hiker://empty###noRecordHistory##noHistory#").rule(() => { require(config.依赖.match(/http(s)?:\/\/.*\//)[0] + 'SrcBookCase.js'); bookCase(); }), pic_url: "http://123.56.105.145/tubiao/more/286.png", col_type: 'icon_5', extra: { longClick: [{ title: "切换按钮", js: $.toString(() => { require(config.依赖.match(/http(s)?:\/\/.*\//)[0] + 'SrcJuPublic.js'); return $(["书架", "收藏", "历史"], 1).select((cfgfile, Juconfig) => { Juconfig["btnmenu5"] = input; writeFile(cfgfile, JSON.stringify(Juconfig)); refreshPage(false); return 'toast://已切换为' + input; }, cfgfile, Juconfig) }) }] } }) let typemenubtn = getTypeNames("主页"); typemenubtn.forEach((it) =>{ let item = { title: runMode==it?`““””`+it+``:it, url: runMode==it?$('#noLoading#').lazyRule((input) => { require(config.依赖.match(/http(s)?:\/\/.*\//)[0] + 'SrcJuPublic.js'); return selectSource(input); }, it):$('#noLoading#').lazyRule((cfgfile,Juconfig,input) => { Juconfig["runMode"] = input; writeFile(cfgfile, JSON.stringify(Juconfig)); refreshPage(false); return 'toast://主页源分类分组已切换为:' + input; }, cfgfile, Juconfig ,it), col_type: "scroll_button"//runModes_btntype } if(runMode==it){ item.extra = { longClick: [{ title: "删除当前", js: $.toString((sourcefile,id) => { return $("确定删除:"+id).confirm((sourcefile,id)=>{ let sourcedata = fetch(sourcefile); eval("var datalist=" + sourcedata + ";"); let index = datalist.indexOf(datalist.filter(d => d.type+"_"+d.name == id)[0]); datalist.splice(index, 1); writeFile(sourcefile, JSON.stringify(datalist)); clearMyVar('SrcJu_searchMark'); return 'toast://已删除'; },sourcefile,id) }, sourcefile, runType+"_"+sourcename) },{ title: "列表排序:" + getItem("sourceListSort", "update"), js: $.toString(() => { return $(["更新时间","接口名称"], 1).select(() => { if(input=='接口名称'){ setItem("sourceListSort","name"); }else{ clearItem("sourceListSort"); } refreshPage(false); }) }) },{ title: "选源方式:" + (getItem("selectSource_col_type")=='hikerPop'?"hikerPop":"原生组件"), js: $.toString(() => { return $(["hikerPop","原生组件"], 1).select(() => { if(input=='hikerPop'){ setItem("selectSource_col_type","hikerPop"); }else{ clearItem("selectSource_col_type"); } refreshPage(false); }) }) }] } } d.push(item); }) d.push({ col_type: "blank_block" }) putMyVar(runMode+"_"+sourcename, "1"); } //加载主页内容 getYiData('主页', d); } //二级+源搜索 function erji() { addListener("onClose", $.toString((isback,surl) => { clearMyVar('二级详情临时对象'); clearMyVar('二级附加临时对象'); clearMyVar('二级简介打开标识'); clearMyVar('换源变更列表id'); clearMyVar('二级源接口信息'); clearMyVar('加载异常自动换源'); if(getMyVar('从书架进二级')){ clearMyVar('从书架进二级'); refreshPage(false); } if(isback && surl!=getMyVar('rulepageid')){ back(false); }else{ clearMyVar('rulepageid'); } },MY_PARAMS.back||0, MY_PARAMS.surl)); addListener('onRefresh', $.toString(() => { putMyVar('加载异常自动换源','1'); })); //用于二级套娃自动返回计数 if(MY_PARAMS.back && !getMyVar('rulepageid')){ putMyVar('rulepageid', MY_PARAMS.surl); } clearMyVar('二级加载扩展列表'); let isload;//是否正确加载 let sauthor; let detailsfile = "hiker://files/_cache/SrcJu_details.json"; let erjidetails = storage0.getMyVar('二级详情临时对象') || {};//二级海报等详情临时保存 erjidetails.name = MY_PARAMS.name || erjidetails.name || ""; let name = erjidetails.name.replace(/‘|’|“|”|<[^>]+>|全集|国语|粤语/g,"").trim(); let myerjiextra = storage0.getMyVar('二级附加临时对象') || {};//二级换源时临时extra数据 let d = []; let parse = {}; let 公共; let 标识; let details; let stype = MY_PARAMS.stype; let smark = getMark(name, stype);//足迹记录 let extrasource = [myerjiextra, MY_PARAMS, smark]; let erjiextra; let sname; let surl; let sgroup; let lineid = smark.lineid || 0; let pageid = smark.pageid || 0; let detailload; let oldMY_PARAMS = Object.assign({}, MY_PARAMS); let pic; for(let i=0; i { return it.name == sname && it.type == stype; }); let sourcedata2;//用于正常加载时,将二级接口存入当前页面PARAMS,确保分享时可以打开 try { if (sourcedata.length == 0 && MY_PARAMS && MY_PARAMS.sourcedata) { sourcedata.push(MY_PARAMS.sourcedata); } if (sourcedata.length > 0 && sourcedata[0].erparse) { eval("let source = " + sourcedata[0].erparse); if (source.ext && /^http/.test(source.ext)) { requireCache(source.ext, 48); parse = erdata; } else { parse = source; } sourcedata2 = sourcedata[0]; sgroup = sourcedata2.group; storage0.putMyVar('二级源接口信息',{name: sname, type: stype, group: sgroup||"", img: sourcedata[0].img||""}); try{ require(config.依赖.match(/http(s)?:\/\/.*\//)[0] + 'SrcJuMethod.js'); cacheData(sourcedata[0]); }catch(e){ //log("√缓存临时文件失败>"+e.message); } } sauthor = parse["作者"]; } catch (e) { xlog("√加载搜索源接口代码错误>"+e.message); } try { if (parse && surl) { try{ eval("let gonggong = " + sourcedata[0].public); if (gonggong && gonggong.ext && /^http/.test(gonggong.ext)) { requireCache(gonggong.ext, 48); gonggong = ggdata; } 公共 = gonggong || parse['公共'] || {}; if(公共['预处理']){ try{ 公共['预处理'](); }catch(e){ xlog('√执行预处理报错,信息>'+e.message); } } }catch(e){ xlog("√加载公共代码错误>"+e.message); } 标识 = stype + "_" + sname; MY_URL = surl; let detailsmark; if(getMyVar('是否取缓存文件') && getMyVar('一级源接口信息') && !getMyVar("SrcJu_调试模式")){ let detailsdata = fetch(detailsfile); if (detailsdata != "") { try{ eval("let detailsjson=" + detailsdata + ";"); if(detailsjson.sname==sname && detailsjson.surl==surl){ detailsmark = detailsjson;//本地缓存接口+链接对得上则取本地,用于切换排序和样式时加快 } }catch(e){ } } } //方便换源时二级代码中使用MY_PARAMS MY_PARAMS = erjiextra; if(detailsmark){ details = detailsmark; }else{ try{ eval("let 二级获取 = " + parse['二级']) details = 二级获取(surl); }catch(e){ details = {}; xlog("√二级获取数据错误>"+e.message); } } pic = details.img || oldMY_PARAMS.img;// || "https://p1.ssl.qhimgs1.com/sdr/400__/t018d6e64991221597b.jpg"; pic = pic&&pic.indexOf("@Referer=") == -1 ? pic + "@Referer=" : pic; erjiextra.img = pic; erjidetails.img = erjiextra.img || erjidetails.img; erjidetails.detail1 = details.detail1 || erjidetails.detail1; erjidetails.detail2 = details.detail2 || erjidetails.detail2; erjidetails.desc = details.desc || erjidetails.desc; let detailextra = details.detailextra || {}; detailextra.id = "detailid"; detailextra.gradient = detailextra.gradient || true; d.push({ title: erjidetails.detail1 || "", desc: erjidetails.detail2 || "", pic_url: erjidetails.img, url: details.detailurl || (/^http/.test(surl)?surl+'#noRecordHistory##noHistory#':erjidetails.img), col_type: 'movie_1_vertical_pic_blur', extra: detailextra }) detailload = 1; lineid = parseInt(getMyVar("SrcJu_"+surl+"_line", lineid.toString())); pageid = parseInt(getMyVar("SrcJu_"+surl+"_page", pageid.toString())); let 线路s = ["线路"]; let 列表s = [[]]; try{ 线路s = details.line?details.line:["线路"]; 列表s = details.line?details.list:[details.list]; if(线路s.length != 列表s.length){ xlog('√'+sname+'>源接口返回的线路数'+线路s.length+'和列表数'+列表s.length+'不相等'); } }catch(e){ xlog('√'+sname+">线路或列表返回数据有误>"+e.message); } if(details.listparse){//选集列表需要动态解析获取 let 线路选集 = details.listparse(lineid,线路s[lineid]) || []; if(线路选集.length>0){ 列表s[lineid] = 线路选集; } } if(details.page && details.pageparse){//网站分页显示列表的,需要动态解析获取 try{ if((detailsmark && pageid != details.pageid) || (!detailsmark && pageid>0)){ let 分页s = details.page; if(pageid > 分页s.length){ pageid = 0; } let 分页选集 = details.pageparse(分页s[pageid].url); if($.type(分页选集)=="array"){ 列表s[lineid] = 分页选集; details.list = details.line?列表s:分页选集; } } }catch(e){ xlog('√'+sname+'分页选集处理失败>'+e.message); } } if(lineid > 列表s.length-1){ toast('选择的线路无选集,将显示第1线路'); lineid = 0; } let 列表 = 列表s[lineid] || []; if(列表.length>0){ function checkAndReverseArray(arr) { const numbers = []; arr.slice(0, 50).forEach(it=>{ const digits = it.title.match(/\d+/); if (digits) { numbers.push(parseInt(digits[0])); } }) if (numbers.length < 3) { return arr; } let increasingCount = 0; let decreasingCount = 0; for (let i = 1; i < numbers.length; i++) { if (numbers[i] > numbers[i - 1]) { increasingCount++; } else if (numbers[i] < numbers[i - 1]) { decreasingCount++; } } if (increasingCount > decreasingCount) { return arr; } else { return arr.reverse(); } } try{ 列表 = checkAndReverseArray(列表); }catch(e){ //xlog('√强制修正选集顺序失败>'+e.message) } } if (getMyVar(sname + 'sort') == '1') { 列表.reverse(); } stype = details.type || stype; let itype = stype=="漫画"?"comic":stype=="小说"?"novel":""; let 解析 = parse['解析']; let lazy = $("").lazyRule((解析,参数) => { let url = input.split("##")[1]; let 公共 = {}; try{ 公共 = $.require('jiekou'+(/聚阅/.test(参数.规则名)?'':'?rule=聚阅√')).公共(参数.标识); }catch(e){ //toast('未找到聚阅规则子页面'); } eval("let 解析2 = " + 解析); let 标识 = 参数.标识; return 解析2(url,公共,参数); }, 解析, {"规则名": MY_RULE._title || MY_RULE.title, "标识": 标识}); let download = $.toString((解析,公共,参数) => { eval("let 解析2 = " + 解析); let 标识 = 参数.标识; return 解析2(input,公共,参数); }, 解析, 公共, {"规则名": MY_RULE._title || MY_RULE.title, "标识": 标识}); d.push({ title: "详情简介", url: $("#noLoading#").lazyRule((desc) => { if(getMyVar('二级简介打开标识')=="1"){ clearMyVar('二级简介打开标识'); deleteItemByCls("SrcJudescload"); }else{ putMyVar('二级简介打开标识',"1"); addItemAfter('detailid', [{ title: `详情简介 >`, col_type: "avatar", url: $("#noLoading#").lazyRule(() => { clearMyVar('二级简介打开标识'); deleteItemByCls("SrcJudescload"); return "hiker://empty"; }), pic_url: "http://123.56.105.145/tubiao/ke/91.png", extra: { cls: "SrcJudescload" } },{ title: desc, col_type: "rich_text", extra: { cls: "SrcJudescload" } }]); } return "hiker://empty"; }, erjidetails.desc||""), pic_url: "http://123.56.105.145/tubiao/messy/32.svg", col_type: 'icon_small_3', extra: { cls: "Juloadlist" } }) let sskeyword = name.split('/')[0].trim(); if(stype=="影视"){ d.push({ title: "聚影搜索", url: JySearch(sskeyword, getItem("juyingSeachType")), pic_url: 'http://123.56.105.145/tubiao/messy/25.svg', col_type: 'icon_small_3', extra: { cls: "Juloadlist", longClick: [{ title: "搜索类型:" + getItem("juyingSeachType", "默认"), js: $.toString(() => { return $(["聚搜接口","云盘接口","Alist接口"], 3).select(() => { setItem("juyingSeachType",input); refreshPage(false); }) }) }] } }) }else{ d.push({ title: "书架/下载", url: $("hiker://empty###noRecordHistory##noHistory#").rule(() => { require(config.依赖.match(/http(s)?:\/\/.*\//)[0] + 'SrcBookCase.js'); bookCase(); }), pic_url: 'http://123.56.105.145/tubiao/messy/70.svg', col_type: 'icon_small_3', extra: { cls: "Juloadlist", inheritTitle: false, longClick: [{ title: "下载本地📥", js: $.toString((itype) => { if(itype){ return "hiker://page/download.view#noRecordHistory##noRefresh##noHistory#?rule=本地资源管理" }else{ return "toast://不支持下载的类型" } },itype) }], chapterList: 列表, "defaultView": "1", "info": { "bookName": name, "bookTopPic": pic, "parseCode": download, "ruleName": MY_RULE._title || MY_RULE.title, "type": itype, "decode": 公共["imgdec"]?$.type(公共["imgdec"])=="function"?$.toString((imgdec)=>{ let imgDecrypt = imgdec; return imgDecrypt(); },公共["imgdec"]):公共["imgdec"]:"" } } }) } d.push({ title: "切换站源", url: $("#noLoading#").lazyRule((name,sgroup,stype) => { updateItem("Julistloading2", { extra: { id: "Julistloading", lineVisible: false } }); if(getMyVar('SrcJu_sousuoTest')){ return "toast://编辑测试模式下不允许换源."; }else if(getMyVar('SrcJu_searchMode')=="sousuo"){ return "toast://搜索线程还未结束,稍等..."; }else{ clearMyVar('换源变更列表id'); require(config.依赖); deleteItemByCls('Juloadlist'); showLoading('搜源中,请稍后.'); search(name,"erji",false,sgroup,stype); hideLoading(); return "hiker://empty"; } }, sskeyword, sgroup||"" ,stype), pic_url: 'http://123.56.105.145/tubiao/messy/20.svg', col_type: 'icon_small_3', extra: { cls: "Juloadlist", newWindow: true, windowId: MY_RULE.title + "搜索页", longClick: [{ title: "新搜索页", js: $.toString((sskeyword) => { return $("hiker://empty#noRecordHistory##noHistory##fullTheme###fypage").rule((sskeyword) => { require(config.依赖); newsousuopage(sskeyword); },sskeyword) },sskeyword) },{ title: "精准匹配:"+(getItem('searchMatch','1')=="1"?"是":"否"), js: $.toString(() => { let sm; if(getItem('searchMatch','1')=="1"){ setItem('searchMatch','2'); sm = "取消换源搜索精准匹配名称"; }else{ clearItem('searchMatch'); sm = "换源搜索精准匹配名称"; } refreshPage(false); return "toast://"+sm; }) }] } }) d.push({ col_type: "line_blank" }); let line_col_type = getItem('SrcJuLine_col_type', 'scroll_button'); let addmoreitems = 0; if(getItem('extenditems','1')=="1" && details.moreitems && $.type(details.moreitems)=='array'){ let moreitems = details.moreitems; if(moreitems.length>0){ moreitems.forEach(item => { if(item.url!=surl){ item = toerji(item,{type:stype,name:sname}); item.extra = item.extra || {}; item.extra['back'] = 1; item.extra['cls'] = "Juloadlist extendlist"; d.push(item); addmoreitems = 1; } }) } } if (line_col_type == 'scroll_button' && addmoreitems == 0) { for (let i = 0; i < 10; i++) { d.push({ col_type: "blank_block" }) } } d.push({ title: getMyVar(sname + 'sort') == '1' ? `““””排序⇅` : `““””排序⇅`, url: $("#noLoading#").lazyRule((sname) => { let 列表 = findItemsByCls('playlist') || []; if(列表.length==0){ return 'toast://未获取到列表' } deleteItemByCls('playlist'); if (getMyVar(sname + 'sort') == '1') { putMyVar(sname + 'sort', '0'); updateItem('listsort', { title: `““””排序⇅` }); } else { putMyVar(sname + 'sort', '1') updateItem('listsort', { title: `““””排序⇅` }); }; 列表.reverse(); 列表.forEach(item => { item.col_type = item.type; }) addItemBefore(getMyVar('二级加载扩展列表')?"extendlist":getMyVar('换源变更列表id')?"Julistloading2":"Julistloading", 列表);//排序和样式动态处理插入列表时查找id return 'toast://切换排序成功' }, sname), col_type: line_col_type, extra: { id: "listsort", cls: "Juloadlist" } }) let reviseLiTitle = getItem('reviseLiTitle','0'); d.push({ title: `““””样式🎨`, url: $(["text_1","text_2","text_3","text_4","flex_button","text_2_left","text_3_left","分页设置"],2,"选集列表样式").select(() => { if(input=="分页设置"){ return $(["开启分页","关闭分页","每页数量","分页阀值"],2).select(() => { let partpage = storage0.getItem('partpage') || {}; if(input=="开启分页"){ partpage.ispage = 1; storage0.setItem('partpage',partpage); }else if(input=="关闭分页"){ partpage.ispage = 0; storage0.setItem('partpage',partpage); }else if(input=="每页数量"){ return $(partpage.pagenum||"40","每页选集数量").input((partpage) => { partpage.pagenum = parseInt(input); storage0.setItem('partpage',partpage); refreshPage(false); return 'hiker://empty' },partpage) }else if(input=="分页阀值"){ return $(partpage.partnum||"100","选集数量超过多少才分页").input((partpage) => { partpage.partnum = parseInt(input); storage0.setItem('partpage',partpage); refreshPage(false); return 'hiker://empty' },partpage) } refreshPage(false); return 'hiker://empty' }) }else{ let 列表 = findItemsByCls('playlist') || []; if(列表.length==0){ return 'toast://未获取到列表' } deleteItemByCls('playlist'); let list_col_type = input; 列表.forEach(item => { item.col_type = list_col_type.replace("_left",""); if(list_col_type.indexOf("_left")>-1){ item.extra.textAlign = 'left'; }else{ delete item.extra.textAlign; } }) addItemBefore(getMyVar('二级加载扩展列表')?"extendlist":getMyVar('换源变更列表id')?"Julistloading2":"Julistloading", 列表); setItem('SrcJuList_col_type', input); return 'hiker://empty' } }), col_type: line_col_type, extra: { cls: "Juloadlist", longClick: [{ title: "修正选集标题:"+(reviseLiTitle=="1"?"是":"否"), js: $.toString(() => { let sm; if(getItem('reviseLiTitle','0')=="1"){ clearItem('reviseLiTitle'); sm = "取消修正选集标题名称"; }else{ setItem('reviseLiTitle','1'); sm = "统一修正选集标题名称"; } refreshPage(false); return "toast://"+sm; }) },{ title: "显示扩展项:"+(getItem('extenditems','1')=="1"?"是":"否"), js: $.toString(() => { let sm; if(getItem('extenditems','1')=="1"){ setItem('extenditems','0'); sm = "取消显示二级扩展项"; }else{ clearItem('extenditems'); sm = "显示二级扩展项"; } refreshPage(false); return "toast://"+sm; }) },{ title: "线路样式:"+getItem('SrcJuLine_col_type', 'scroll_button'), js: $.toString(() => { let sm; if(getItem('SrcJuLine_col_type', 'scroll_button')=="flex_button"){ clearItem('SrcJuLine_col_type'); sm = "线路样式已切换为scroll_button"; }else{ setItem('SrcJuLine_col_type','flex_button'); sm = "线路样式已切换为flex_button"; } refreshPage(false); return "toast://"+sm; }) }] } }) if(线路s.length>0 && 线路s[0] !="线路"){ 线路s.forEach((it,i)=>{ d.push({ title: lineid==i?`““””`+it+``:it, url: $("#noLoading#").lazyRule((lineurl,nowid,newid) => { if(nowid != newid){ putMyVar(lineurl, newid); refreshPage(false); } return 'hiker://empty' }, "SrcJu_"+surl+"_line", lineid, i), col_type: line_col_type, extra: { cls: "Juloadlist" } }) }) } //分页定义 let partpage = storage0.getItem('partpage') || {}; if(details.page && details.pageparse){//原网站有分页,不执行自定义分页 let 分页s = details.page let 分页链接 = []; let 分页名 = []; 分页s.forEach((it,i)=>{ 分页链接.push($("#noLoading#").lazyRule((pageurl,nowid,newid) => { if(nowid != newid){ putMyVar(pageurl, newid); refreshPage(false); } return 'hiker://empty' }, "SrcJu_"+surl+"_page", pageid, i) ) 分页名.push(pageid==i?'““””'+it.title:it.title) }) if(分页名.length>0){ d.push({ col_type: "blank_block", extra: { cls: "Juloadlist" } }); d.push({ title: pageid==0?"↪️尾页":"⏮️上页", url: pageid==0?分页链接[分页名.length-1]:分页链接[pageid-1], col_type: 'text_4', extra: { cls: "Juloadlist" } }) d.push({ title: 分页名[pageid], url: $(分页名, 2).select((分页名,分页链接) => { return 分页链接[分页名.indexOf(input)]; },分页名,分页链接), col_type: 'text_2', extra: { cls: "Juloadlist" } }) d.push({ title: pageid==分页名.length-1?"首页↩️":"下页⏭️", url: pageid==分页名.length-1?分页链接[0]:分页链接[pageid+1], col_type: 'text_4', extra: { cls: "Juloadlist" } }) } }else if(partpage.ispage){//启用分页 let 每页数量 = partpage.pagenum || 40; // 分页的每页数量 let 翻页阀值 = partpage.partnum || 100; // 分页的翻页阀值,超过多少才显示翻页 if (列表.length > 翻页阀值) { let 最大页数 = Math.ceil(列表.length / 每页数量); let 分页页码 = pageid + 1; //当前页数 if (分页页码 > 最大页数) { //防止切换线路导致页数数组越界 分页页码 = 最大页数; } let 分页链接 = []; let 分页名 = []; function getNewArray(array, subGroupLength) { let index = 0; let newArray = []; while(index < array.length) { newArray.push(array.slice(index, index += subGroupLength)); } return newArray; } let 分页s = getNewArray(列表, 每页数量);//按每页数据切割成小数组 分页s.forEach((it,i)=>{ 分页链接.push($("#noLoading#").lazyRule((pageurl,nowid,newid) => { if(nowid != newid){ putMyVar(pageurl, newid); refreshPage(false); } return 'hiker://empty' }, "SrcJu_"+surl+"_page", pageid, i) ) let start = i * 每页数量 + 1; let end = i * 每页数量 + it.length; let title = start + ' - ' + end; 分页名.push(pageid==i?'““””'+title:title) }) d.push({ col_type: "blank_block", extra: { cls: "Juloadlist" } }); d.push({ title: 分页页码==1?"↪️尾页":"⏮️上页", url: 分页页码==1?分页链接[分页名.length-1]:分页链接[pageid-1], col_type: 'text_4', extra: { cls: "Juloadlist" } }) d.push({ title: 分页名[pageid], url: $(分页名, 2).select((分页名,分页链接) => { return 分页链接[分页名.indexOf(input)]; },分页名,分页链接), col_type: 'text_2', extra: { cls: "Juloadlist" } }) d.push({ title: 分页页码==分页名.length?"首页↩️":"下页⏭️", url: 分页页码==分页名.length?分页链接[0]:分页链接[pageid+1], col_type: 'text_4', extra: { cls: "Juloadlist" } }) 列表 = 分页s[pageid];//取当前分页的选集列表 } } let list_col_type = getItem('SrcJuList_col_type', 'text_2');//列表样式 for(let i=0; i<列表.length; i++) { let extra = Object.assign({}, details["extra"] || {});//二级返回数据中的extra设为默认 try{ extra = Object.assign(extra, 列表[i].extra || {});//优先用选集的extra }catch(e){} extra.id = name + "_选集_" + (pageid?pageid+"_":"") + i; extra.cls = "Juloadlist playlist"; if(stype=="听书"||stype=="影视"||stype=="音乐"){ extra.jsLoadingInject = true; if(!extra.blockRules){ extra.blockRules = ['.m4a', '.mp3', '.gif', '.jpeg', '.jpg', '.ico', '.png', 'hm.baidu.com', '/ads/*.js', 'cnzz.com', '51.la']; } } if(list_col_type.indexOf("_left")>-1){ extra.textAlign = 'left'; } if (stype=="小说" || details["rule"] || details["novel"] || 列表[i].rule) { extra.url = 列表[i].url; lazy = lazy.replace("@lazyRule=.",((stype=="小说"||details["novel"])?"#readTheme##autoPage#":"#noRecordHistory#")+"@rule=").replace(`input.split("##")[1]`,`MY_PARAMS.url || ""`); } d.push({ title: reviseLiTitle=="1"?列表[i].title.replace(name,'').replace(/‘|’|“|”|<[^>]+>| |-|_|第|集|话|章|\0 || getMyVar('SrcJu_sousuoTest')){ isload = 1; }else if(列表.length==0){ if(!getMyVar('加载异常自动换源')){ putMyVar('加载异常自动换源','1'); refreshPage(false); }else{ toast("选集列表为空,请更换其他源"); } } } } catch (e) { toast('有异常,看日志'); xlog('√'+sname + '>加载详情失败>' + e.message); } if (isload) { if(getItem('extenditems','1')=="1" && details.extenditems && $.type(details.extenditems)=='array'){ let extenditems = details.extenditems; if(extenditems.length>0){ d.push({ col_type: "blank_block", extra: { cls: "Juloadlist extendlist", id: "extendlist" } }) extenditems.forEach(item => { if(item.url!=surl){ item = toerji(item,{type:stype,name:sname}); item.extra = item.extra || {}; item.extra['back'] = 1; item.extra['cls'] = "Juloadlist extendlist"; d.push(item) } }) } putMyVar('二级加载扩展列表','1'); } d.push({ title: "‘‘’’当前数据源:" + sname + (sauthor?", 作者:" + sauthor:"") + "", url: 'hiker://empty', col_type: 'text_center_1', extra: { id: getMyVar('换源变更列表id')?"Julistloading2":"Julistloading", lineVisible: false } }); setResult(d); if(!getMyVar(sname+"_"+name)){ toast('当前数据源:' + sname + (sauthor?", 作者:" + sauthor:"")); } putMyVar(sname+"_"+name, "1"); //更换收藏封面 if(erjidetails.img && oldMY_PARAMS.img!=erjidetails.img){ setPagePicUrl(erjidetails.img); } //二级详情简介临时信息 storage0.putMyVar('二级详情临时对象',erjidetails); //二级源浏览记录保存 let erjidata = { name: name, sname: sname, surl: surl, stype: stype, lineid: lineid, pageid: pageid }; setMark(erjidata); //当前二级详情数据保存 if(!getMyVar("SrcJu_调试模式")){ details.sname = sname; details.surl = surl; details.pageid = pageid; writeFile(detailsfile, $.stringify(details)); } //收藏更新最新章节 if (parse['最新']) { setLastChapterRule('js:' + $.toString((sname,surl,最新,公共,参数) => { let 最新str = 最新.toString().replace('setResult','return ').replace('getResCode()','request(surl)'); eval("let 最新2 = " + 最新str); let 标识 = 参数.标识; try{ let zx = 最新2(surl,公共) || ""; setResult(sname + " | " + (zx||"")); }catch(e){ 最新2(surl,公共); } }, sname, surl, parse['最新'], 公共, {"规则名": MY_RULE._title || MY_RULE.title, "标识": 标识})) } //切换源时更新收藏数据,以及分享时附带接口 if (typeof (setPageParams) != "undefined") { if ((surl && oldMY_PARAMS.surl!=surl) || !oldMY_PARAMS.sourcedata) { delete sourcedata2['parse'] erjiextra.name = erjiextra.name || name; erjiextra.sourcedata = sourcedata2; delete erjiextra.sousuo;//正常加载的清除返回搜索标识,用于下次加载异常时自动搜源 setPageParams(erjiextra); } } putMyVar('是否取缓存文件','1');//判断是否取本地缓存文件,软件打开初次在线取 } else { if(!detailload){ pic = MY_PARAMS.img || ""; pic = pic&&pic.indexOf("@Referer=") == -1 ? pic + "@Referer=" : pic; d.push({ title: "\n搜索接口源结果如下", desc: "\n\n选择一个源观看吧👇", pic_url: pic, url: pic, col_type: 'movie_1_vertical_pic_blur', extra: { gradient: true, id: "detailid" } }); } d.push({ title: "", url: 'hiker://empty', col_type: 'text_center_1', extra: { id: "Julistloading", lineVisible: false } }); setResult(d); if(!getMyVar('SrcJu_sousuoTest') && !getMyVar("SrcJu_调试模式") && !oldMY_PARAMS.sousuo){ if(getMyVar('加载异常自动换源')=="1"){ showLoading('搜源中,请稍后.'); search(name,"erji",false,sgroup,stype); }else{ toast('下拉刷新看看'); } } } clearMyVar('换源变更列表id'); } //搜索页面 function sousuo() { let name = MY_URL.split('##')[1]; if(getItem('searchmode')!="jusousuo"){ let d = []; d.push({ title: "搜索中...", url: "hiker://empty", extra: { id: "sousuoloading" } }); setResult(d); let info = storage0.getMyVar('一级源接口信息') || {}; search(name,'sousuo',false,info.group); }else{ setResult([{ title: "视界聚搜", url: "hiker://search?s=" + name.split(' ')[0].trim(), extra: { delegateOnlySearch: true, rules: $.toString((name) => { let info = storage0.getMyVar('一级源接口信息') || {}; require(config.依赖); let ssdatalist = erdatalist.filter(it=>{ if(info.group=="全全" || !info.group){ return it.type==info.type; }else{ return it.type==info.type && (it.group==info.group||it.group=="全全"); } }); let keyword = name.split(' ')[0].trim(); let keyword2; if(name.indexOf(' ')>-1){ keyword2 = name.split(' ')[1].trim() || info.name; } if(keyword2){ ssdatalist = ssdatalist.filter(it=>{ return it.type==info.type && it.name==keyword2; }); } let data = []; ssdatalist.forEach(it=>{ data.push({ "title": it.name, "search_url": "hiker://empty##fypage", "searchFind": `js: require(config.依赖); let d = search('` + keyword + `','jusousuo',` + JSON.stringify(it) + `); setResult(d);` }); }) return JSON.stringify(data) },name) } }]) } } //搜索接口 function search(keyword, mode, sdata, group, type) { //mode:sousuo(聚阅聚合)、sousuotest(接口测试)、erji(二级换源)、sousuopage(嗅觉新搜索页)、jusousuo(视界聚合) let updateItemid = mode=="sousuo" ? "sousuoloading" : mode=="sousuopage"?"sousuoloading"+getMyVar('SrcJu_sousuoType',type||''):"Julistloading"; if((mode=="sousuo") && getMyVar('SrcJu_searching')=="1"){ if(MY_PAGE==1){ putMyVar("SrcJu_停止搜索线程", "1"); let waittime = 10; for (let i = 0; i < waittime; i++) { if(getMyVar("SrcJu_停止搜索线程","0")=="0"){ updateItem(updateItemid, { title: '搜索中...' }); break; } updateItem(updateItemid, { title: '等待上次线程结束,'+(waittime-i-1)+'s' }); java.lang.Thread.sleep(1000); } } } let name = keyword.split(' ')[0].trim(); let searchMark = storage0.getMyVar('SrcJu_searchMark') || {};//二级换源缓存 if(mode=="erji" && searchMark[name]){ addItemBefore(updateItemid, searchMark[name]); updateItem(updateItemid, { title: getMyVar('SrcJu_searching')=="1"?"‘‘’’搜索中":"‘‘’’当前搜索为缓存", url: $("确定删除“"+name+"”搜索缓存吗?").confirm((name)=>{ let searchMark = storage0.getMyVar('SrcJu_searchMark') || {}; delete searchMark[name]; storage0.putMyVar('SrcJu_searchMark', searchMark); refreshPage(true); return "toast://已清除"; },name) }); let i = 0; let one = ""; for (var k in searchMark) { i++; if (i == 1) { one = k } } if (i > 20) { delete searchMark[one]; } hideLoading(); return "hiker://empty"; }else{ updateItem(updateItemid, { title: mode=="erji"?"搜源中...":"搜索中...", url: "hiker://empty", }); } if(mode!="jusousuo" && mode!="sousuopage" && getMyVar('SrcJu_searching')=="1"){ toast("上次搜索线程还未结束,等等再来"); if(mode=="sousuotest"){ return []; }else{ return "hiker://empty"; } } let page = 1; if(mode=="sousuo"){ if(MY_PAGE==1){ clearMyVar('MY_PGAE'); }else{ page = parseInt(getMyVar('MY_PGAE','1'))+1; putMyVar('MY_PGAE',page); } }else if(mode=="sousuotest" || mode=="sousuopage" || mode=="jusousuo"){ page = MY_PAGE; } if(page==1){ clearMyVar('nosousuolist'); } let ssstype = type || runMode; let sssname; if(keyword.indexOf(' ')>-1){ let keyword2 = keyword.split(' ')[1].trim(); if(keyword2 && getTypeNames().indexOf(keyword2)>-1){ ssstype = keyword2; }else{ sssname = keyword2 || sourcename; } } putMyVar('SrcJu_searchMode',mode); putMyVar('SrcJu_searching','1'); let success = 0; let results = []; let ssdatalist = []; if (sdata) { ssdatalist.push(sdata); }else if (sssname){ ssdatalist = getListData("er", ssstype).filter(it=>{ return it.name==sssname; }); }else{ ssdatalist = erdatalist.filter(it=>{ if(group=="全全" || !group){//未分组或当前为全全分组的接口时,搜索所有此类型的接口 return it.type==ssstype; }else{ return it.type==ssstype && (it.group==group||it.group=="全全");//分组名为真则只搜指定分组和全全 } }); } let nosousuolist = storage0.getMyVar('nosousuolist') || []; if (nosousuolist.length>0){ ssdatalist = ssdatalist.filter(it => { return nosousuolist.indexOf(it.name) == -1; }) } let task = function (obj) { let objdata = obj.data; let objmode = obj.mode; let name = obj.name; try { let parse; let 公共; let 标识; eval("let source = " + objdata.erparse); if (source.ext && /^http/.test(source.ext)) { requireCache(source.ext, 48); parse = erdata; } else { parse = source; } if(parse){ try{ require(config.依赖.match(/http(s)?:\/\/.*\//)[0] + 'SrcJuMethod.js'); cacheData(objdata); }catch(e){ //xlog("√缓存临时文件失败>"+e.message); } eval("let gonggong = " + objdata.public); if (gonggong && gonggong.ext && /^http/.test(gonggong.ext)) { requireCache(gonggong.ext, 48); gonggong = ggdata; } 公共 = gonggong || parse['公共'] || {}; if(公共['预处理']){ try{ 公共['预处理'](); }catch(e){ xlog('√执行预处理报错,信息>'+e.message); } } 标识 = objdata.type + "_" + objdata.name; let ssdata = []; let 搜索str = parse['搜索'].toString(); if(!搜索str.includes('rule')){ 搜索str = 搜索str.replace('setResult','return '); } eval("let 搜索 = " + 搜索str) let 参数 = {"规则名": MY_RULE._title || MY_RULE.title, "标识": 标识} function ocr(codeurl,headers) { headers= headers || {}; let img = convertBase64Image(codeurl,headers).replace('data:image/jpeg;base64,',''); let code = request('https://api-cf.nn.ci/ocr/b64/text', { body: img, method: 'POST', headers: {"Content-Type":"text/html"}}); code = code.replace(/o/g, '0').replace(/u/g, '0').replace(/I/g, '1').replace(/l/g, '1').replace(/g/g, '9'); if(code.includes("+")&&code.includes("=")){ code = eval(code.split("=")[0]); } xlog('识别验证码:'+code); return code; } ssdata = 搜索(name,page,公共,参数) || []; //xlog('√'+objdata.name+">搜索结果>"+ssdata.length); let resultdata = []; ssdata.forEach(item => { let extra = item.extra || {}; extra.name = extra.name || extra.pageTitle || (item.title?item.title.replace(/‘|’|“|”|<[^>]+>|全集|国语|粤语/g,"").trim():""); if((objmode=="erji" && ((getItem('searchMatch','1')=="1"&&extra.name.toLowerCase()==name.toLowerCase())||(getItem('searchMatch')=="2"&&extra.name.toLowerCase().includes(name.toLowerCase())))) || objmode!="erji"){ let keepurl = /js:|select:|@|=>|hiker:\/\/page|toast:|video:/;//定义保留传值的项目url //if((!keepurl.test(item.url) && extra.name.toLowerCase().includes(name.toLowerCase())) || keepurl.test(item.url) || objmode!="erji"){ extra.img = extra.img || item.img || item.pic_url; extra.stype = objdata.type; extra.sname = objdata.name; extra.pageTitle = extra.pageTitle || extra.name; extra.surl = item.url && !keepurl.test(item.url) ? item.url.replace(/hiker:\/\/empty|#immersiveTheme#|#autoCache#|#noRecordHistory#|#noHistory#|#readTheme#|#autoPage#|#noLoading#|#/g, "") : ""; if(/sousuo/.test(objmode)){ extra.sousuo = 1; } item.extra = extra; item.url = /sousuo/.test(objmode) ? (keepurl.test(item.url) || item.url=='hiker://empty')?item.url:$("hiker://empty?type="+objdata.type+"#immersiveTheme##autoCache#").rule(() => { require(config.依赖); erji(); }) : "hiker://empty##"+ item.url + $("#noLoading#").b64().lazyRule((extra) => { if(getMyVar('换源变更列表id')){ return "toast://请勿重复点击,稍等..."; }else{ putMyVar('换源变更列表id','1'); clearMyVar(extra.sname+"_"+extra.name); storage0.putMyVar('二级附加临时对象', extra); refreshPage(false); return "toast://已切换源:" + extra.sname; } }, extra); item.title = objmode=="erji"?objdata.name:item.title; //item.content = item.content || item.desc; item.desc = item.desc || ""; item.desc = objmode=="sousuo"||objmode=="sousuopage" ? MY_RULE.title+' · '+objdata.name+' · '+item.desc :objmode=="sousuotest"?(item.content || item.desc): (extra.desc || item.desc); item.col_type = objmode=="sousuo"||objmode=="jusousuo" ? "video" : (objmode=="sousuotest"||objmode=="sousuopage") ? "movie_1_vertical_pic" : "avatar"; //log(item); resultdata.push(item); //} } }) return {result:resultdata, success:1}; } return {result:[], success:0}; } catch (e) { xlog('√'+objdata.name + '>搜索失败>' + e.message); return {result:[], success:0}; } } let list = ssdatalist.map((item) => { return { func: task, param: {"data":item,"mode":mode,"name":name}, id: item.name } }); if (list.length > 0) { be(list, { func: function (obj, id, error, taskResult) { if(getMyVar("SrcJu_停止搜索线程")=="1"){ return "break"; }else if(taskResult.success==1){ let data = taskResult.result; if(data.length>0){ success++; if(mode=="erji"){ let searchMark = storage0.getMyVar('SrcJu_searchMark') || {};//二级换源缓存 searchMark[name] = searchMark[name] || []; searchMark[name] = searchMark[name].concat(data); storage0.putMyVar('SrcJu_searchMark', searchMark); if(!getMyVar('换源变更列表id')){ addItemBefore("Julistloading", data); } hideLoading(); }else if(mode=="sousuo"){ addItemBefore(updateItemid, data); }else if(mode=="sousuopage"){ addItemBefore(updateItemid, data); }else if(mode=="sousuotest"||mode=="jusousuo"){ results = data; } }else{ nosousuolist.push(id); storage0.putMyVar('nosousuolist', nosousuolist); } } }, param: { } }); /* if (mode=="erji") { storage0.putMyVar('searchMark', searchMark); } */ clearMyVar('SrcJu_searching'); clearMyVar('SrcJu_searchMode'); hideLoading(); clearMyVar("SrcJu_停止搜索线程"); if(mode=="sousuotest"||mode=="jusousuo"){ return results; }else{ let sousuosm = mode=="sousuo"||mode=="sousuopage" ? success + "/" + list.length + ",第"+page+"页搜索完成" : "‘‘’’" + success + "/" + list.length + ",搜索完成"; updateItem(updateItemid, { title: sousuosm }); } } else { clearMyVar('SrcJu_searching'); clearMyVar('SrcJu_searchMode'); hideLoading(); clearMyVar("SrcJu_停止搜索线程"); if(page==1){ toast("无接口"); if(mode=="sousuo"||mode=="sousuopage"){ updateItem("sousuoloading", { title: "无接口" }); } } if(mode=="sousuotest"||mode=="jusousuo"){ return []; } } } //取本地足迹记录 function getMark(name, stype) { let markfile = "hiker://files/rules/Src/Ju/mark.json"; let markdata = fetch(markfile); if (markdata != "") { eval("var marklist=" + markdata + ";"); } else { var marklist = []; } let mark = marklist.filter(it => { return it.name == name && it.stype == stype; }) if (mark.length > 0) { return mark[0]; } else { return {}; } } //保存本地足迹记录 function setMark(data) { let markfile = "hiker://files/rules/Src/Ju/mark.json"; let markdata = fetch(markfile); if (markdata != "") { eval("var marklist=" + markdata + ";"); } else { var marklist = []; } let mark = marklist.filter(it => { return it.name == data.name && it.stype == data.stype; }) if (mark.length > 0) { let index = marklist.indexOf(mark[0]); marklist.splice(index, 1) } marklist.push(data); if (marklist.length > 100) { marklist.splice(0, 1); } writeFile(markfile, JSON.stringify(marklist)); return 1; } //图标下载 function downloadicon() { try { if (!fileExist('hiker://files/cache/src/管理.svg')) { downloadFile('http://123.56.105.145/tubiao/messy/13.svg', 'hiker://files/cache/src/管理.svg'); } if (!fileExist('hiker://files/cache/src/更新.webp')) { downloadFile(config.依赖.match(/http(s)?:\/\/.*\//)[0] + "img/更新.webp", 'hiker://files/cache/src/更新.webp'); } if (!fileExist('hiker://files/cache/src/分类.webp')) { downloadFile(config.依赖.match(/http(s)?:\/\/.*\//)[0] + "img/分类.webp", 'hiker://files/cache/src/分类.webp'); } if (!fileExist('hiker://files/cache/src/排行.webp')) { downloadFile(config.依赖.match(/http(s)?:\/\/.*\//)[0] + "img/排行.webp", 'hiker://files/cache/src/排行.webp'); } if (!fileExist('hiker://files/cache/src/收藏.svg')) { downloadFile('http://123.56.105.145/tubiao/messy/165.svg', 'hiker://files/cache/src/收藏.svg'); } } catch (e) { } } //版本检测 function Version() { var nowVersion = getItem('Version', "0.1");//现在版本 var nowtime = Date.now(); var oldtime = parseInt(getItem('VersionChecktime', '0').replace('time', '')); if (getMyVar('SrcJu_versionCheck', '0') == '0' && nowtime > (oldtime + 12 * 60 * 60 * 1000)) { try { eval(request(config.依赖.match(/http(s)?:\/\/.*\//)[0].replace('/Ju/', '/master/') + 'SrcTmplVersion.js')) if (parseFloat(newVersion.SrcJu) > parseFloat(nowVersion)) { confirm({ title: '发现新版本,是否更新?', content: nowVersion + '=>' + newVersion.SrcJu + '\n' + newVersion.SrcJudesc[newVersion.SrcJu], confirm: $.toString((nowtime,newVersion) => { setItem('Version', newVersion); setItem('VersionChecktime', nowtime + 'time'); deleteCache(); delete config.依赖; refreshPage(); }, nowtime, newVersion.SrcJu), cancel: '' }) xlog('√检测到新版本!\nV' + newVersion.SrcJu + '版本》' + newVersion.SrcJudesc[newVersion.SrcJu]); } putMyVar('SrcJu_Version', '-V' + newVersion.SrcJu); } catch (e) { } putMyVar('SrcJu_versionCheck', '1'); } else { putMyVar('SrcJu_Version', '-V' + nowVersion); } } //新搜索页 function newsousuopage(keyword,searchtype,relyfile) { addListener("onClose", $.toString(() => { if(getMyVar('SrcJu_rely')){ initConfig({ 依赖: getMyVar('SrcJu_rely') }); clearMyVar('SrcJu_rely'); } clearMyVar('SrcJu_sousuoName'); clearMyVar('SrcJu_sousuoType'); putMyVar("SrcJu_停止搜索线程", "1"); })); addListener('onRefresh', $.toString(() => { clearMyVar('SrcJu_sousuoName'); })); setPageTitle("搜索|聚阅√"); if(relyfile){ if(!getMyVar('SrcJu_rely') && config.依赖){ putMyVar('SrcJu_rely',config.依赖); } initConfig({ 依赖: relyfile }); } let name = getMyVar('SrcJu_sousuoName',keyword||''); let d = []; let descarr = ['可快速切换下面类型','关键字+2个空格,搜当前','关键字+2个空格+接口名','切换站源长按可进入这里','接口有分组,则搜索同分组']; if(MY_PAGE==1){ d.push({ title: "🔍", url: $.toString(() => { if(input){ putMyVar('SrcJu_sousuoName',input); if(input){ let recordlist = storage0.getItem('searchrecord') || []; if(recordlist.indexOf(input)>-1){ recordlist = recordlist.filter((item) => item !== input); } recordlist.unshift(input); if(recordlist.length>20){ recordlist.splice(recordlist.length-1,1); } storage0.setItem('searchrecord', recordlist); } refreshPage(true); } }), desc: descarr[Math.floor(Math.random() * descarr.length)], col_type: "input", extra: { defaultValue: getMyVar('SrcJu_sousuoName',keyword||''), titleVisible: true } }); let searchTypes = getTypeNames("搜索页"); searchTypes.forEach((it) =>{ let obj = { title: getMyVar("SrcJu_sousuoType",searchtype||runMode)==it?`““””`+it+``:it, url: $('#noLoading#').lazyRule((it) => { putMyVar("SrcJu_sousuoType",it); refreshPage(false); return "hiker://empty"; },it), col_type: 'text_5' } if(it=="影视" && name){ obj.extra = {}; obj["extra"].longClick = [{ title:"🔍聚影搜索", js: $.toString((url)=>{ return url; }, JySearch(name, getItem("juyingSeachType"))) }]; } d.push(obj); }) let recordlist = storage0.getItem('searchrecord') || []; if(recordlist.length>0){ d.push({ title: '🗑清空', url: $('#noLoading#').lazyRule(() => { clearItem('searchrecord'); deleteItemByCls('searchrecord'); return "toast://已清空"; }), col_type: 'flex_button',//scroll_button extra: { cls: 'searchrecord' } }); }else{ d.push({ title: '↻无记录', url: "hiker://empty", col_type: 'flex_button', extra: { cls: 'searchrecord' } }); } recordlist.forEach(item=>{ d.push({ title: item, url: $().lazyRule((input) => { putMyVar('SrcJu_sousuoName',input); refreshPage(true); return "hiker://empty"; },item), col_type: 'flex_button', extra: { cls: 'searchrecord' } }); }) } d.push({ title: "", col_type: 'text_center_1', url: "hiker://empty", extra: { id: "sousuoloading"+getMyVar('SrcJu_sousuoType', searchtype||runMode), lineVisible: false } }); setResult(d); if(name){ deleteItemByCls('searchrecord'); let info = storage0.getMyVar('一级源接口信息') || {}; let type = getMyVar("SrcJu_sousuoType", searchtype||info.type); search(name,"sousuopage",false,info.group,type); } }