<!doctype html> <html lang="zh-cmn-Hans"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, shrink-to-fit=no" /> <meta name="renderer" content="webkit" /> <meta name="force-rendering" content="webkit" /> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests"> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-3597621909882025" crossorigin="anonymous"></script> <link rel="search" type="application/opensearchdescription+xml" href="opensearch.xml" title="🍋OIso🔍> <script src="https://cdn.onesignal.com/sdks/OneSignalSDK.js" async=""></script> <script> window.OneSignal = window.OneSignal || []; OneSignal.push(function () { OneSignal.init({ appId: "7ece0660-f9eb-4e71-b866-1241084211f7", }); }); </script> <link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/css/bootstrap.min.css"> <script src="https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js"></script> <script src="https://cdn.staticfile.org/popper.js/1.15.0/umd/popper.min.js"></script> <script src="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/js/bootstrap.min.js"></script> <style> /* Make the image fully responsive */ .carousel-inner img { width: 100%; height: 100%; } </style> <script> window['api'] = '//online.oiso.cf'; </script> <style> #suggestionContainer { overflow: hidden; z-index: 114514; border-radius: 15px; transition: .25s; -webkit-backdrop-filter: blur(30px) saturate(1.25); backdrop-filter: blur(30px) saturate(1.25); box-shadow: rgba(0, 0, 0, 0.25) 0px 54px 55px, rgba(0, 0, 0, 0.12) 0px -12px 30px, rgba(0, 0, 0, 0.12) 0px 4px 6px, rgba(0, 0, 0, 0.17) 0px 12px 13px, rgba(0, 0, 0, 0.09) 0px -3px 5px; } #suggestionContainer div { /* border-radius: 15px; */ display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 1; overflow: hidden; clear: both; height: 30px; padding-left: 20px; line-height: 30px; cursor: pointer; background: rgba(0, 0, 0, 0.09); color: rgba(255, 255, 255, .8); transition: .25s; } #suggestionContainer div:hover { background: rgba(0, 0, 0, 0.27); color: rgba(255, 255, 255, .8); transition: .25s; } .mdui-card { transition: all 0.75s; opacity: 0.83; } .mdui-card:hover { transition: all 0.75s; opacity: 0.95; -webkit-box-shadow: 0 11px 15px -7px rgba(0, 0, 0, .2), 0 24px 38px 3px rgba(0, 0, 0, .14), 0 9px 46px 8px rgba(0, 0, 0, .12) !important; box-shadow: 0 11px 15px -7px rgba(0, 0, 0, .2), 0 24px 38px 3px rgba(0, 0, 0, .14), 0 9px 46px 8px rgba(0, 0, 0, .12) !important } .mdui-dialog, .mdui-dialog-open { border-radius: 7px; } #lbt { margin: 0%; } .name { /* margin: 0 8px !important; */ font-size: 20px; } .avatar { width: 36px; height: 36px; border-radius: 50%; margin: 0 12px !important; transform: translateY(10px); } .infoBoard { opacity: 0.85; } img.avatar { align-self: center; } img.avatar { line-height: normal; } .box { display: flex; z-index: 3; height: 44px; background: #fff; border: 1px solid #dfe1e5; box-shadow: none; border-radius: 24px; margin: 0 auto; width: calc(632px + 6px); width: auto; max-width: 584px; background: rgba(255, 255, 255, 0.75); } .search { display: flex; flex: 1; flex-wrap: wrap; border: none; outline: none; background: rgba(255, 255, 255, 0); } .left { display: flex; align-items: center; padding-right: 20px; margin-top: -5px; } .right { display: flex; flex: 0 0 auto; margin-top: -5px; align-items: stretch; flex-direction: row; padding-left: 20px; } .topbar { flex: 1 0 auto; display: flex; cursor: pointer; align-items: center; border: 0; background: transparent; outline: none; /* padding: 0 8px; */ width: 24px; /* line-height: 24px; */ transform: translateY(30%) translateX(-35%); /* transform: translateX(-30%); */ } [text~="xs"] { font-size: 0.75rem; line-height: 1rem; } [bg~="gray-100"] { --un-bg-opacity: 1; background-color: rgba(243, 244, 246, var(--un-bg-opacity)); } /* @media (prefers-color-scheme: dark) { .dARkdOOr { background-color: rgb(70, 70, 70) !important; } } } */ /* 下几个版本没出问题就删 这是什么牛马名字 */ .justify-center { justify-content: center; } .items-center { align-items: center; } .flex, [flex~="\~"] { display: flex; } [w~="full"] { width: 100%; } [h~="\31 2"] { height: 2.5rem; } .right-0 { right: 0rem; } .left-0 { left: 0rem; } .bottom-0 { bottom: 0rem; } .fixed { position: fixed !important; } /*包含以下四种的链接*/ a { text-decoration: none; color: deepskyblue; } /*正常的未被访问过的链接*/ a:link { text-decoration: none; } /*已经访问过的链接*/ a:visited { text-decoration: none; } /*鼠标划过(停留)的链接*/ a:hover { text-decoration: none; } /* 正在点击的链接*/ a:active { text-decoration: none; } .color { position: fixed !important; z-index: 999; top: 45px; right: 0; _position: absolute !important; *zoom: 1 !important; } html { height: 100%; width: 100%; overflow: -moz-hidden-unscrollable; } body { height: 100%; width: 100%; -ms-overflow-style: none; overflow: auto; } .bg-blur { float: left; width: 100%; background-repeat: no-repeat; background-position: center; /* background-size: ; */ /* -webkit-filter: blur(15px); -moz-filter: blur(15px); -o-filter: blur(15px); -ms-filter: blur(15px); */ /* filter: blur(15px); */ } .cover { z-index: -1; opacity: 0; /* backdrop-filter: saturate(150%) blur(5px); */ transform: translateZ(0); position: fixed; left: 0; top: 0; width: 100%; height: 100%; background-image: radial-gradient(rgba(0, 0, 0, 0) 0, rgba(0, 0, 0, .5) 100%), radial-gradient(rgba(0, 0, 0, 0) 33%, rgba(0, 0, 0, .3) 166%); transition: .25s } body::-webkit-scrollbar { display: none; } /*给card圆角*/ .mdui-card { border-radius: 10px !important; } /*底部条 左上 右上 圆角*/ .bottom-nav { border-radius: 10px 10px 0 0 !important; } .bg { z-index: -999; position: fixed; background: url(https://api.heyc.eu.org/bing/process?blur=15) center/cover no-repeat; height: 600px; text-align: center; line-height: 600px; /* background-image: url(https://api.oneneko.com/v1/bing_today); */ height: 100%; width: 100%; -ms-overflow-style: none; overflow: auto; } </style> <style> .am-comment-main { /*圆角*/ border-radius: 10px !important; border: #dfe1e5 1px solid; /* 内边距 */ padding: 10px; /* 下边距 */ margin-bottom: 10px; } .tag { display: inline-block; padding: 0 3px; box-sizing: border-box; font-weight: 400; line-height: 1.5; border-radius: 2px; font-size: 0.8em; margin-right: 5px; } #p-d .p-material_icons .icon-code { -webkit-tap-highlight-color: transparent; border-radius: 2px; cursor: pointer; height: 120px; min-width: 108px; text-align: center; } .mdui-col, [class*=mdui-col-lg-], [class*=mdui-col-md-], [class*=mdui-col-sm-], [class*=mdui-col-xl-], [class*=mdui-col-xs-] { position: relative; -webkit-box-sizing: border-box; box-sizing: border-box; min-height: 1px; padding-right: 8px; padding-left: 8px; } #p-d .p-material_icons .icons-wrapper { margin-top: 40px; } #lbt { color: rgb(225, 225, 225) } </style> <style> .mainContainer { /* display: block; */ /* width: 1024px; */ margin-left: auto; margin-right: auto; } .urlInput { display: block; width: 100%; margin-left: auto; margin-right: auto; margin-top: 8px; margin-bottom: 8px; } .centeredVideo { display: block; width: 100%; height: 576px; margin-left: auto; margin-right: auto; margin-bottom: auto; } .controls { display: block; width: 100%; text-align: left; margin-left: auto; margin-right: auto; } </style> <!-- 借用 Luogu cdn --> <script src="https://cdn.luogu.com.cn/js/jquery-2.1.1.min.js"></script> <!-- MDUI CSS --> <link rel="stylesheet" href="http://unpkg.zhimg.com/mdui@1.0.2/dist/css/mdui.min.css" /> <title>🍋OIso🔍 - 一款为 OIer 和开发者而生的搜索引擎</title> <link rel="shortcut icon" href="img/favicon.svg"> </head> <body class="mdui-theme-layout-auto"> <div class="bg bg-blur"></div> <div class="cover js-cursor-container" id="cover" style="opacity: 1;"></div> <!-- <div class="mdui-toolbar mdui-color-theme"> <div class="mdui-toolbar-spacer"></div> <span class="mdui-btn mdui-btn-icon mdui-ripple mdui-ripple-light-blue" mdui-dialog="{target: '#dialog-docs-theme'}"> <i class="mdui-icon material-icons">color_lens</i> </span> </div> --> <!-- 个性化先咕了,太懒了(逃 ε=ε=ε=┏(゜ロ゜;)┛ --> <div class="mdui-toolbar"> <div class="mdui-toolbar-spacer"></div> <button id="lbt" class="mdui-btn mdui-ripple mdui-ripple-white" mdui-dialog="{target: '#dialog-login'}" onclick="get_key();"> Logging </button> </div> <div class="mdui-container"> <center> <img id="logo" src="img/logo.png" class="mdui-img-fluid" style="transform: translateY(100%);" onload="if(this.width >= 333){this.width = 333;}" /> </center> <center> <div id="container" class="box mdui-hoverable" style="transform: translateY(170px);"> <div class="left"></div> <input class="search" id="inputBox" type="text" placeholder="OIso数据库正在全面升级,搜索结果或不全,重大更新敬请期待!" onkeypress="getKey();" /> <div class="right"> <i class="mdui-icon material-icons topbar mdui-text-color-black" onclick="go();">search</i> </div> </div> </center> <div id="suggestionContainer" style="height: auto; opacity: 1; display: block; position: absolute; top: 400px; left: 50%; transform: translateX(-50%); width: 584px;"> </div> </div> <script> // 编辑 .bg 中 background 的 URL 中的 random 参数以防止缓存 // 例如:https://www.wxiou.cn/api/?blur=15&random=1234 random = Math.random().toString(36).substring(2); url = "https://www.wxiou.cn/api/?blur=15&random=" + random; // make it important! document.querySelector(".bg").style.background = "url(" + url + ") !important"; </script> <script type="text/javascript"> // window['now'] = '' // setInterval(function () { //每0.5秒刷新一次 // var text = document.getElementById('inputBox').value; // if (text != window['now']) { // window['now'] = text; // getSuggest(); // } // }, 500); //获得文本框元素 var lostfocus = false; var txtSearch = document.getElementById('inputBox'); window['onfunction'] = false; //文本框得到焦点事件 onfocus() txtSearch.onfocus = function () { window['onfunction'] = true; document.getElementById("container").setAttribute("class", "box mdui-hoverable mdui-shadow-7"); // 如果不为空 if (txtSearch.value != '') { // 显示搜索建议 getSuggest(); } } //文本框失去焦点事件 onblur() txtSearch.onblur = function () { window['onfunction'] = false; document.getElementById("container").setAttribute("class", "box mdui-hoverable"); } </script> <!-- MDUI JavaScript --> <script src="http://unpkg.zhimg.com/mdui@1.0.2/dist/js/mdui.min.js"></script> <script> let zy = ["小黑子,露出鸡脚了吧~", "Bebe~oh~", "🐔你太美"] function go() { var value = document.getElementById("inputBox").value; if (value == '') { mdui.snackbar(zy[Math.floor(Math.random() * 3)]); } else { location.href = "/search?q=" + encodeURIComponent(document.getElementById("inputBox").value) } } let sugStatus = false; function getSuggest() { if (sugStatus === true) { return; } var myurl = `${window['api']}/suggestion?q=${$("#inputBox")[0].value}`; console.log(myurl); sugStatus = true; $.ajax({ url: myurl, success: (data) => { lostfocus = false; // data = $.parseJSON(data); console.log(data); let hits = data.hits.hits; $("#suggestionContainer").empty(); let sel = $("#suggestionContainer"); for (const hit in hits) { console.log(hits[hit]._id); sel.append(`<div onclick="gosug('${hits[hit]._source.name}')">${hits[hit]._source.name}</div>`); } if (lostfocus) { $("#suggestionContainer").empty(); lostfocus = false; } sugStatus = false; }, error: () => { console.log("获取提示信息失败..."); sugStatus = false; } }); } // 当inputBox的内容发生变化 $("#inputBox").bind('input propertychange', function () { if (window['onfunction'] === true) { setTimeout(function () { getSuggest(); }, 200); } }) function gosug(name) { console.log("gosug" + name) $("#inputBox")[0].value = name; go(); } function getKey() { if (event.keyCode == 13) { go(); } } </script> <script> fetch(window['api']).then(function (response) { return response.text(); }).then(function (data) { // console.log(data); if (data != `OIso 2023. All rights reserved.`) { mdui.snackbar("服务器消息:" + data); } }).catch((error) => { mdui.snackbar({ message: '服务器炸了:' + error + ',快去轰炸管理员!', buttonText: '查看宕机监测', onButtonClick: function () { window.open('https://stats.uptimerobot.com/JRlkxCB95r') } }); // console.error('Server Error: ', error); }); </script> <!-- <div id="footer" style="position: absolute; bottom: 0; left: 50%; transform: translate(-50%, -50%);"> <div style="height: 23px;"> <center> <p><a href="https://oiso.cf">🍋Oiso.cf🔍</a> 2022 - 现在 | Developed by <a href="https://www.amzcd.top">diyanqi</a></p> </center> </div> </div> --> <div class="infoBoard bottom-nav mdui-card fixed left-0 right-0 bottom-0 flex justify-center items-center" dark="bg-dark-700" bg="gray-100" w="full" h="12" text="xs" style="z-index: 999;"> <div class="inline-flex justify-center items-center" m="x-2" style="letter-spacing:0.3px;" opacity="75"><a href="/"><img width="28" height="16" class="filter grayscale" m="x-2" src="img/favicon.svg" alt="🍋OIso🔍" style="margin-top: -2px;transform: translateY(3px);"></a> ©️ 2023 <a href="/">OIso.cf</a> | v1.0 正式版 | Developed by <a class="icon-btn mr-2" title="Blog" href="https://www.amzcd.top/" target="_blank">diyanqi</a> & <a class="icon-btn mr-2" title="Blog" href="https://www.lotuses.net/" target="_blank">Lotuses</a> , <a class="icon-btn mr-2" title="Blog" href="https://github.com/orgs/oiso-developer-team/" target="_blank">OIso 开发团队</a> | <a class="icon-btn mr-2" title="评论需 Github 账号,洛谷也可私信我" href="https://www.amzcd.top/posts/OIso/" target="_blank">👉食用指南&反馈👈</a> | <a class="bing-background" href="https://bing.com" target="_blank">Bing Wallpaper</a> | <a href="https://icp.gov.moe/?keyword=20230322" target="_blank">萌ICP备20230322号</a> </div> <div class="inline-flex justify-center items-center" m="x-2"><a href="/about" class="icon-btn mx-2" title="关于"> <div i-ri-information-line=""></div> </a></div> </div> <button class="mdui-fab mdui-fab-fixed mdui-ripple mdui-color-theme-accent" style="bottom: 20px; right: 20px; z-index: 999;" onclick="switch_page();" hidden id="updown"> <i class="mdui-icon material-icons">keyboard_arrow_down</i> </button> <script> window['nowpage'] = 0; function switch_page() { if (window['nowpage'] == 0) { window['nowpage'] = 1; // 平滑地滑到页底 $('html, body').animate({ scrollTop: $(document).height() }, 'slow'); // 将箭头换个方向 $(".mdui-fab i").html("keyboard_arrow_up"); } else if (window['nowpage'] == 1) { window['nowpage'] = 0; // 平滑地滑到页顶 $('html, body').animate({ scrollTop: 0 }, 'slow'); // 将箭头换个方向 $(".mdui-fab i").html("keyboard_arrow_down"); } } </script> <div class="mdui-dialog" id="dialog-logout" style="border-radius: 20px;"> <div class="mdui-dialog-title">退出登录</div> <div class="mdui-dialog-content">确定要退出登录吗?</div> <div class="mdui-dialog-actions"> <button class="mdui-btn mdui-ripple" mdui-dialog-cancel="" style="border-radius: 15px;">取消</button> <button class="mdui-btn mdui-ripple" mdui-dialog-confirm="" onclick="gologout();" style="border-radius: 15px;">确定</button> </div> <script> function gologout() { fetch(window['api'] + "/logout", { credentials: 'include' }).then(function (response) { return response.text(); }).then(function (data) { // console.log(data); if (data == 'True') { mdui.snackbar("登出成功;正在刷新页面"); setTimeout(function () { location.reload(); }, 1000); } else { mdui.snackbar("登出失败:" + data); } }).catch(function () { mdui.snackbar("服务器炸了:" + error); }); } </script> </div> <div class="mdui-dialog" id="dialog-login" style="border-radius: 20px;"> <div class="mdui-dialog-title">通过洛谷登录</div> <div class="mdui-dialog-content mdui-typo"> <p class="mdui-typo-title">STEP 1</p> <p>利用您已经登录的洛谷账号,新建一个<a href="https://www.luogu.com.cn/paste" target="_blank">洛谷剪贴板</a>,并将下面的密钥粘贴其中<b>(有效期为 10 分钟)</b>。</p> <pre>加载中,请稍后……</pre> <script> function copy_key() { var key = document.querySelector("#dialog-login pre").innerText; var input = document.createElement("input"); input.value = key; document.body.appendChild(input); input.select(); document.execCommand("copy"); document.body.removeChild(input); mdui.snackbar({ message: "已复制密钥", position: "right-top" }); } </script> <p><button class="mdui-btn mdui-color-theme-accent mdui-ripple mdui-btn-dense" onclick="copy_key();">【一键粘贴】</button>然后选择发布。注意要<b>公开</b>可见!</p> <p class="mdui-typo-title">STEP 2</p> <p>发布后,请将这个云剪贴板的链接粘贴到下面(要<b>完整</b>的链接!):</p> <div class="mdui-textfield"> <input class="mdui-textfield-input" type="text" placeholder="形如:https://www.luogu.com.cn/paste/ler564eo" /> </div> <p>完成后,请点击下方确认按钮进行校验。</p> </div> <div class="mdui-divider"></div> <div class="mdui-dialog-actions"> <button class="mdui-btn mdui-ripple" mdui-dialog-cancel="" style="border-radius: 15px;">取消</button> <button class="mdui-btn mdui-ripple" mdui-dialog-confirm="" onclick="gologin();" style="border-radius: 15px;">确认</button> </div> <script> window['test'] = "ok!"; function get_key() { fetch(window['api'] + "/key_request", { credentials: 'include' }).then(function (response) { return response.text(); }).then(function (data) { // console.log(data); document.querySelector("#dialog-login pre").innerText = data; }).catch(function () { mdui.snackbar("获取密钥失败:" + error); }); } function gologin() { var url = document.querySelector("#dialog-login input").value; if (url == "") { mdui.snackbar("总不能什么都不输入吧QWQ"); return; } fetch(window['api'] + "/key_check?url=" + url, { credentials: 'include' }).then(function (response) { return response.text(); }).then(function (data) { // console.log(data); if (data != "False") { mdui.snackbar("登录成功!即将刷新页面!"); setTimeout(function () { location.reload(); }, 1000); } else { mdui.snackbar("登录失败:" + data); } }).catch(function () { mdui.snackbar("服务器开小差了:" + error); }); } </script> </div> <div class="mdui-dialog" id="dialog-docs-theme" style="border-radius: 20px;"> <div class="mdui-dialog-title">主题色设置</div> <div id="colorset" class="mdui-p-a-2 mdui-dialog-content"> <small>*提示:当前配色只会在当前浏览器中保存!</small> <p class="mdui-typo-title">主题色</p> <div class="mdui-row-xs-1 mdui-row-sm-2 mdui-row-md-3"> <div class="mdui-col"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-layout" value="auto" checked=""> <i class="mdui-radio-icon"></i> Auto </label> </div> <div class="mdui-col"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-layout" value="light"> <i class="mdui-radio-icon"></i> Light </label> </div> <div class="mdui-col"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-layout" value="dark"> <i class="mdui-radio-icon"></i> Dark </label> </div> </div> <p class="mdui-typo-title mdui-text-color-theme">主色</p> <form class="mdui-row-xs-1 mdui-row-sm-2 mdui-row-md-3"> <div class="mdui-col mdui-text-color-amber"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-primary" value="amber"> <i class="mdui-radio-icon"></i> Amber </label> </div> <div class="mdui-col mdui-text-color-blue"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-primary" value="blue"> <i class="mdui-radio-icon"></i> Blue </label> </div> <div class="mdui-col mdui-text-color-blue-grey"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-primary" value="blue-grey"> <i class="mdui-radio-icon"></i> Blue Grey </label> </div> <div class="mdui-col mdui-text-color-brown"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-primary" value="brown"> <i class="mdui-radio-icon"></i> Brown </label> </div> <div class="mdui-col mdui-text-color-cyan"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-primary" value="cyan"> <i class="mdui-radio-icon"></i> Cyan </label> </div> <div class="mdui-col mdui-text-color-deep-orange"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-primary" value="deep-orange"> <i class="mdui-radio-icon"></i> Deep Orange </label> </div> <div class="mdui-col mdui-text-color-deep-purple"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-primary" value="deep-purple"> <i class="mdui-radio-icon"></i> Deep Purple </label> </div> <div class="mdui-col mdui-text-color-green"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-primary" value="green"> <i class="mdui-radio-icon"></i> Green </label> </div> <div class="mdui-col mdui-text-color-grey"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-primary" value="grey"> <i class="mdui-radio-icon"></i> Grey </label> </div> <div class="mdui-col mdui-text-color-indigo"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-primary" value="indigo" checked=""> <i class="mdui-radio-icon"></i> Indigo </label> </div> <div class="mdui-col mdui-text-color-light-blue"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-primary" value="light-blue"> <i class="mdui-radio-icon"></i> Light Blue </label> </div> <div class="mdui-col mdui-text-color-light-green"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-primary" value="light-green"> <i class="mdui-radio-icon"></i> Light Green </label> </div> <div class="mdui-col mdui-text-color-lime"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-primary" value="lime"> <i class="mdui-radio-icon"></i> Lime </label> </div> <div class="mdui-col mdui-text-color-orange"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-primary" value="orange"> <i class="mdui-radio-icon"></i> Orange </label> </div> <div class="mdui-col mdui-text-color-pink"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-primary" value="pink"> <i class="mdui-radio-icon"></i> Pink </label> </div> <div class="mdui-col mdui-text-color-purple"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-primary" value="purple"> <i class="mdui-radio-icon"></i> Purple </label> </div> <div class="mdui-col mdui-text-color-red"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-primary" value="red"> <i class="mdui-radio-icon"></i> Red </label> </div> <div class="mdui-col mdui-text-color-teal"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-primary" value="teal"> <i class="mdui-radio-icon"></i> Teal </label> </div> <div class="mdui-col mdui-text-color-yellow"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-primary" value="yellow"> <i class="mdui-radio-icon"></i> Yellow </label> </div> </form> <p class="mdui-typo-title mdui-text-color-theme-accent">强调色</p> <form class="mdui-row-xs-1 mdui-row-sm-2 mdui-row-md-3"> <div class="mdui-col mdui-text-color-amber"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-accent" value="amber"> <i class="mdui-radio-icon"></i> Amber </label> </div> <div class="mdui-col mdui-text-color-blue"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-accent" value="blue"> <i class="mdui-radio-icon"></i> Blue </label> </div> <div class="mdui-col mdui-text-color-cyan"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-accent" value="cyan"> <i class="mdui-radio-icon"></i> Cyan </label> </div> <div class="mdui-col mdui-text-color-deep-orange"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-accent" value="deep-orange"> <i class="mdui-radio-icon"></i> Deep Orange </label> </div> <div class="mdui-col mdui-text-color-deep-purple"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-accent" value="deep-purple"> <i class="mdui-radio-icon"></i> Deep Purple </label> </div> <div class="mdui-col mdui-text-color-green"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-accent" value="green"> <i class="mdui-radio-icon"></i> Green </label> </div> <div class="mdui-col mdui-text-color-indigo"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-accent" value="indigo"> <i class="mdui-radio-icon"></i> Indigo </label> </div> <div class="mdui-col mdui-text-color-light-blue"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-accent" value="light-blue"> <i class="mdui-radio-icon"></i> Light Blue </label> </div> <div class="mdui-col mdui-text-color-light-green"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-accent" value="light-green"> <i class="mdui-radio-icon"></i> Light Green </label> </div> <div class="mdui-col mdui-text-color-lime"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-accent" value="lime"> <i class="mdui-radio-icon"></i> Lime </label> </div> <div class="mdui-col mdui-text-color-orange"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-accent" value="orange"> <i class="mdui-radio-icon"></i> Orange </label> </div> <div class="mdui-col mdui-text-color-pink"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-accent" value="pink" checked=""> <i class="mdui-radio-icon"></i> Pink </label> </div> <div class="mdui-col mdui-text-color-purple"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-accent" value="purple"> <i class="mdui-radio-icon"></i> Purple </label> </div> <div class="mdui-col mdui-text-color-red"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-accent" value="red"> <i class="mdui-radio-icon"></i> Red </label> </div> <div class="mdui-col mdui-text-color-teal"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-accent" value="teal"> <i class="mdui-radio-icon"></i> Teal </label> </div> <div class="mdui-col mdui-text-color-yellow"> <label class="mdui-radio mdui-m-b-1"> <input type="radio" name="theme-accent" value="yellow"> <i class="mdui-radio-icon"></i> Yellow </label> </div> </form> </div> <div class="mdui-divider"></div> <div class="mdui-dialog-actions"> <button class="mdui-btn mdui-ripple" mdui-dialog-confirm="" style="border-radius: 15px;">完成(自动保存)</button> </div> </div> <script> document.addEventListener('click', e => { // 如果点击的不是 suggestionContainer var targ = e.target; var myid = targ.id; if (myid != 'suggestionContainer' && myid != 'inputBox') { $("#suggestionContainer").empty(); lostfocus = true; } setTimeout(function () { var radio = document.getElementsByTagName("input"); for (i = 0; i < radio.length; i++) { if (radio[i].checked) { // console.log(radio[i]); c = document.getElementsByTagName("body")[0].className.split(" "); for (j in c) { if (c[j].indexOf(radio[i].name) != -1) { document.getElementsByTagName("body")[0].classList.remove(c[j]); } } document.getElementsByTagName("body")[0].classList.add("mdui-" + radio[i].name + "-" + radio[i].value); window.localStorage.setItem(radio[i].name, radio[i].value); } } // console.log("log!"); }, 50); }) </script> <script> var radio = document.getElementsByTagName("input"); for (i = 0; i < radio.length; i++) { if (radio[i].checked) { if (window.localStorage.getItem(radio[i].name) != radio[i].value) { radio[i].removeAttribute("checked"); } } else { if (window.localStorage.getItem(radio[i].name) == radio[i].value) { radio[i].setAttribute("checked", "checked"); } } } var radio = document.getElementsByTagName("input"); for (i = 0; i < radio.length; i++) { if (radio[i].checked) { // console.log(radio[i]); c = document.getElementsByTagName("body")[0].className.split(" "); for (j in c) { if (c[j].indexOf(radio[i].name) != -1) { document.getElementsByTagName("body")[0].classList.remove(c[j]); } } document.getElementsByTagName("body")[0].classList.add("mdui-" + radio[i].name + "-" + radio[i].value); window.localStorage.setItem(radio[i].name, radio[i].value); } } // console.log("log2!"); </script> <div class="mdui-dialog" id="dialog-editPendant" style="border-radius: 20px;"> <div class="mdui-dialog-title">编辑头像挂件</div> <div class="mdui-dialog-content mdui-typo"> <p><b>高级计划</b>期间可注册及修改。</p> <p>您需要安装 OIso 油猴插件 tamperOIso,方可在洛谷上看到自己及他人的头像挂件。</p> <h5>示例地址</h5> <pre>https://s2.loli.net/2023/02/26/pXr84FtJlSI67LG.png https://s2.loli.net/2023/02/26/1OK6EYewAP4htSN.png</pre> <h5>设置头像挂件图片地址</h5> <div class="mdui-textfield"> <input class="mdui-textfield-input" id="pendanturl" type="url" placeholder="请先将图片传到图床" /> </div> <h5>预览</h5> <center> <!-- luogu avatar img --> <img id="avatarimg" style="border-radius: 50%;" /> <img id="pendantimg" style="margin-left: -100px;height: 100px;transform: scale(1.35);opacity: 0.75;border-radius: 5%;" /> </center> <p>完成后,请点击下方确认按钮。</p> </div> <div class="mdui-divider"></div> <div class="mdui-dialog-actions"> <button class="mdui-btn mdui-ripple" mdui-dialog-cancel="" style="border-radius: 15px;">取消</button> <button class="mdui-btn mdui-ripple" mdui-dialog-confirm="" onclick="save_pendant();" style="border-radius: 15px;">确认</button> </div> </div> <script> // pendanturl的内容发生变化时: $("#pendanturl").bind('input propertychange', function () { // console.log("log!"); $("#pendantimg").attr("src", $("#pendanturl").val()); }); function get_pendant() { var url = window['api'] + "/pendant/get?uid=" + String(window['uid']); console.log(url); $.ajax({ url: url, type: "GET", success: function (data) { console.log(data); if (data == 'False') { mdui.snackbar("您还没有设置头像挂件捏"); } else { document.getElementById("pendanturl").value = data; document.getElementById("pendantimg").src = data; } } }); } function save_pendant() { var url = window['api'] + "/pendant/edit?url=" + $("#pendanturl").val(); $.ajax({ url: url, type: "GET", dataType: "json", xhrFields: { withCredentials: true }, success: function (data) { if (data == 'True') { mdui.snackbar("设置成功"); } else { mdui.snackbar(data); } } }); } </script> <div class="mdui-dialog" id="dialog-editTag" style="border-radius: 20px;"> <div class="mdui-dialog-title">编辑 tag</div> <div class="mdui-dialog-content mdui-typo"> <p>高级用户:一次购买,永久获得。</p> <h5>设置文字颜色</h5> <div class="mdui-textfield"> <input type="color" id="textcolor" /> </div> <h5>设置背景颜色</h5> <div class="mdui-textfield"> <input type="color" id="background" /> </div> <h5>设置显示文字(支持部分 Markdown 语法),<b>50个字符以内</b></h5> <div class="mdui-textfield"> <input class="mdui-textfield-input" type="text" placeholder="可用超链接、下划线、删除线、加粗、倾斜等" id="content" /> </div> <p>完成后,请点击下方确认按钮。</p> <p>注:请勿包含一些迷惑他人的内容。</p> </div> <div class="mdui-divider"></div> <div class="mdui-dialog-actions"> <button class="mdui-btn mdui-ripple" mdui-dialog-cancel="" style="border-radius: 15px;">取消</button> <button class="mdui-btn mdui-ripple" mdui-dialog-confirm="" onclick="goTag();" style="border-radius: 15px;">确认</button> </div> <script> function goTag() { var content = encodeURIComponent(document.getElementById("content").value); var f = encodeURIComponent(document.getElementById("textcolor").value); var b = encodeURIComponent(document.getElementById("background").value); fetch(`${window['api']}/tag/edit?f=${String(f)}&b=${String(b)}&content=${content}`, { credentials: 'include' }).then(function (response) { return response.text(); }).then(function (data) { // console.log(data); if (data == "True") { mdui.snackbar("修改成功!"); // get_benben(); } else { mdui.snackbar("修改失败:" + data); } }).catch(function () { mdui.snackbar("服务器寄了:" + data); }); } </script> <script> function get_tag() { // url: /tag/getmine fetch(`${window['api']}/tag/getmine`, { credentials: 'include' }).then(function (response) { return response.text(); }).then(function (data) { if (data == 'False') { return; } data = JSON.parse(data); // console.log(data); /* { "fontcolor": "#000000", "background": "#12afce", "content": "114514" } */ document.getElementById("textcolor").value = data["fontcolor"]; document.getElementById("background").value = data["background"]; document.getElementById("content").value = data["content"]; }).catch(function () { mdui.snackbar("出错了:" + error); }); } </script> </div> <div class="mdui-dialog" id="dialog-spider" style="border-radius: 20px;"> <div class="mdui-dialog-title">博客收录</div> <div class="mdui-dialog-content mdui-typo"> <p>由于种种原因,我们无法及时爬取您的博客。所以您可以在这里手动请求爬取您的博客。</p> <p><b>仅能爬取洛谷博客、CSDN 和 cnblogs 博客。其他博客请至 <button style="border-radius: 15px;" class="mdui-btn mdui-ripple" onclick="window.open('https://icp.gov.moe/');">icp.gov.moe</button> 进行萌备,通过后即可爬取。</b></p> <p>博客爬取有以下几种形式:</p> <p>1. 您可以输入某一篇洛谷文章的链接,那么会爬取这一篇文章。如 https://www.luogu.com.cn/blog/chen-zhe/luo-gu-ping-ce-ji-ji-ri </p> <p>2. 您可以输入某个洛谷用户的 uid ,是一串数字,由此爬取该用户的所有文章。如 100544</p> <p>3. 您可以输入某个 CSDN 用户的主页。如 https://blog.csdn.net/Floatiy</p> <p>4. 您可以输入某个 cnblogs 用户的主页。如 https://www.cnblogs.com/Jasper08</p> <p>5. 您可以输入您的博客网址,如 https://www.amzcd.top ;注意,输入的域名(请确认是否需要www)是要可以在 https://icp.gov.moe/ 查到的。</p> <div class="mdui-textfield"> <input class="mdui-textfield-input" type="text" placeholder="请按照上面的格式输入,系统会自动识别" /> </div> <p>完成后,请点击下方确认按钮。</p> <p>注意,不管您选择哪种方式,<b>一天最多爬15次</b>。</p> </div> <div class="mdui-divider"></div> <div class="mdui-dialog-actions"> <button class="mdui-btn mdui-ripple" mdui-dialog-cancel="" style="border-radius: 15px;">取消</button> <button class="mdui-btn mdui-ripple" mdui-dialog-confirm="" onclick="gospider();" style="border-radius: 15px;">确认</button> </div> <script> function gospider() { var url = document.querySelector("#dialog-spider input").value; if (isNaN(url)) { // 说明是链接 if (url.indexOf("https://www.luogu.com.cn/blog/") == 0) { fetch(window['api'] + "/spider/request?type=lgblog_single_passage&id=" + url, { credentials: 'include' }).then(function (response) { return response.text(); }).then(function (data) { // console.log(data); if (data == "True") { mdui.snackbar("请求 洛谷文章 成功!已排入爬虫队列!"); } else { mdui.snackbar("出错了:" + data); } }).catch(function () { mdui.snackbar("失败了:" + error); }); return; } else if (url.indexOf("https://www.cnblogs.com/") == 0) { fetch(window['api'] + "/spider/request?type=cnblogs&id=" + url, { credentials: 'include' }).then(function (response) { return response.text(); }).then(function (data) { // console.log(data); if (data == "True") { mdui.snackbar("请求 cnblogs 成功!已排入爬虫队列!"); } else { mdui.snackbar("出错了:" + data); } }).catch(function () { mdui.snackbar("失败了:" + error); }); return; } else if (url.indexOf("https://blog.csdn.net/") == 0) { fetch(window['api'] + "/spider/request?type=csdn&id=" + url, { credentials: 'include' }).then(function (response) { return response.text(); }).then(function (data) { // console.log(data); if (data == "True") { mdui.snackbar("请求 csdn 成功!已排入爬虫队列!"); } else { mdui.snackbar("出错了:" + data); } }).catch(function () { mdui.snackbar("失败了:" + error); }); return; } else { fetch(window['api'] + "/spider/request?type=personal&id=" + url, { credentials: 'include' }).then(function (response) { return response.text(); }).then(function (data) { // console.log(data); if (data == "True") { mdui.snackbar("请求 个人博客 成功!已排入爬虫队列!"); } else { mdui.snackbar("出错了:" + data); } }).catch(function () { mdui.snackbar("失败了:" + error); }); return; } } else { // 说明是uid fetch(window['api'] + "/spider/request?type=lgblog_user&id=" + url, { credentials: 'include' }).then(function (response) { return response.text(); }).then(function (data) { // console.log(data); if (data == "True") { mdui.snackbar("请求 洛谷用户博客 成功!已排入爬虫队列!"); } else { mdui.snackbar("出错了:" + data); } }).catch(function () { mdui.snackbar("失败了:" + error); }); return; } } </script> </div> <div class="mdui-dialog" id="dialog-third-party-blog" style="border-radius: 20px;"> <div class="mdui-dialog-title">第三方博客爬取</div> <div class="mdui-dialog-content mdui-typo"> <p>请填充下列内容,然后通过邮件发送给 <a id="email"></a> 或通过洛谷<a href="https://www.luogu.com.cn/chat?uid=222419" target="_blank">私信我</a></p> <pre>第三方博客爬取: 博客地址:【如 https://www.amzcd.top 】 博客名称:【如 diyanqi's Blog! 】 </pre> <p>暂时先这样吧,感觉全自动化有点麻烦。</p> </div> <div class="mdui-divider"></div> <div class="mdui-dialog-actions"> <button class="mdui-btn mdui-ripple" mdui-dialog-confirm="" style="border-radius: 15px;">完成</button> </div> </div> <script> let at = "@"; let email_address = "diyanqi" + at + "qq.com"; document.getElementById("email").setAttribute("href", "mailto:" + email_address); document.getElementById("email").innerText = email_address; </script> <div class="mdui-dialog" id="dialog-spider-status" style="border-radius: 20px;"> <div class="mdui-dialog-title">爬虫状态</div> <div class="mdui-dialog-content mdui-typo"> <div class="mdui-card-content" id="spider-status">获取中……</div> </div> <div class="mdui-divider"></div> <div class="mdui-dialog-actions"> <button class="mdui-btn mdui-ripple" mdui-dialog-confirm="" style="border-radius: 15px;">完成</button> </div> </div> <div class="mdui-dialog" id="dialog-bingimg-detail" style="border-radius: 20px;"> <div class="mdui-dialog-title">必应壁纸信息</div> <div class="mdui-dialog-content mdui-typo"> <div class="mdui-typo"> <a herf="ksadf" class="bg-info" id="detail" target="_blank">加载中...</a> </div> </div> <div class="mdui-divider"></div> <div class="mdui-dialog-actions"> <button class="mdui-btn mdui-ripple" mdui-dialog-confirm="" style="border-radius: 15px;">完成</button> </div> </div> <script> function start_live() { // 将云听歌换成 /live try { document.getElementById("live").setAttribute("src", "/live/index.html"); } catch (e) { console.log("云听歌不存在"); } try { document.getElementById("livebot").setAttribute("src", "/live/index.html"); } catch (e) { console.log("云听歌不存在"); } } </script> <div class="mdui-dialog" id="dialog-mylive" style="border-radius: 20px;"> <div class="mdui-dialog-title" id="live_dialog_title">我的直播间</div> <div class="mdui-dialog-content mdui-typo"> <div class="mdui-typo"> <h3>免责声明</h3> <b>使用本直播功能即默认您已阅读 由中华人民共和国国家互联网信息办公室发布的 <a href="http://www.cac.gov.cn/2016-11/04/c_1119847629.htm" target="_blank">互联网直播服务管理规定</a> 。 本直播不含打赏功能,仅供信息学竞赛选手的学习交流之用,造成的后果开发者及平台服务提供者概不负责。严禁直播任何损害国家利益、有害社会公德、违反国家法律等的一切内容。违者将封禁账号,并将用户相关信息举报至有关部门。</b> <h3>直播间信息</h3> <p>请放心填写,此信息日后可多次修改。</p> <div class="mdui-textfield mdui-textfield-floating-label"> <label class="mdui-textfield-label">直播间标题</label> <input class="mdui-textfield-input" type="text" id="title" /> </div> <div class="mdui-textfield mdui-textfield-floating-label"> <label class="mdui-textfield-label">简介</label> <input class="mdui-textfield-input" type="text" id="desc" /> </div> <div class="mdui-textfield mdui-textfield-floating-label"> <label class="mdui-textfield-label">封面图片 url</label> <input class="mdui-textfield-input" type="url" id="coverurl" /> </div> <select class="mdui-select" id="category"> <option value="disabled" disabled>请选择分区</option> <option value="coding">写代码</option> <option value="gaming">游戏休闲</option> <option value="learning">授课学习</option> <option value="other">其他</option> </select> <div> <h3>推流</h3> <p>推荐使用 OBS 进行推流。推荐画质:960x540;24 fps。使用极高的画质并故意卡服者,将作封禁处理。</p> <h5>服务器地址</h5> <pre id="baseurl"></pre> <h5>推流码</h5> <pre id="streamkey"></pre> </div> </div> </div> <div class="mdui-divider"></div> <div class="mdui-dialog-actions"> <button class="mdui-btn mdui-ripple" mdui-dialog-confirm="" style="border-radius: 15px;" onclick="submit_liveinfo();">提交</button> </div> </div> <script> function get_mylive_detail() { var uidstr = String(window["uid"]); document.getElementById("live_dialog_title").innerText = "用户 " + uidstr + " 的直播间信息"; var url = window['api'] + "/live/detail?room=" + uidstr; $.ajax({ url: url, type: "GET", dataType: "json", xhrFields: { withCredentials: true }, success: function (data) { if (data["code"] == 200) { var detail = data["data"]; document.getElementById("title").value = detail["title"]; document.getElementById("desc").value = detail["desc"]; document.getElementById("coverurl").value = detail["cover"]; document.getElementById("category").value = detail["category"]; mdui.mutation(); get_stream_key(); } else { window['first_time'] = true; mdui.snackbar("这是你第一次创建直播间,快去填写信息吧!") } }, error: function (data) { mdui.snackbar("获取直播间信息失败!") } }); } function submit_liveinfo() { var uidstr = String(window["uid"]); var title = document.getElementById("title").value; var desc = document.getElementById("desc").value; var cover = document.getElementById("coverurl").value; var category = document.getElementById("category").value; var url = window['api'] + "/live/register"; $.ajax({ url: url, type: "POST", dataType: "json", xhrFields: { withCredentials: true }, data: { "title": title, "desc": desc, "cover": cover, "category": category }, success: function (data) { if (data["code"] == 200) { if (window['first_time']) { window['first_time'] = false; mdui.snackbar("创建成功!刷新页面并重新打开此窗口即可获得推流地址!") } else { mdui.snackbar("编辑成功!") } } else { if (window['first_time']) { window['first_time'] = false; mdui.snackbar("创建失败!") } else { mdui.snackbar("编辑失败!") } } }, error: function (data) { mdui.snackbar("编辑失败!") } }); } function get_stream_key() { var uidstr = String(window["uid"]); var url = window['api'] + "/live/rtmpurl"; $.ajax({ url: url, type: "GET", dataType: "json", xhrFields: { withCredentials: true }, success: function (data) { if (data["code"] == 200) { var detail = data; document.getElementById("baseurl").innerText = detail["baseurl"]; document.getElementById("streamkey").innerText = detail["key"]; } else { mdui.snackbar("获取推流地址失败!") } }, error: function (data) { mdui.snackbar("获取推流地址失败!") } }); } </script> <div class="mdui-dialog" id="dialog-livelist" style="border-radius: 20px;"> <div class="mdui-dialog-title" id="live_dialog_title">直播选台</div> <div class="mdui-dialog-content mdui-typo"> <div class="mdui-typo"> <ul class="mdui-list"> <li class="mdui-list-item mdui-ripple" onclick="watchlive('roomid');"> <div class="mdui-list-item-content"> <div class="mdui-list-item-title mdui-list-item-one-line">加载中,请稍后……</div> <div class="mdui-list-item-text mdui-list-item-two-line">哔哩,哔啵。</div> </div> </li> </ul> </div> </div> <div class="mdui-divider"></div> <div class="mdui-dialog-actions"> <button class="mdui-btn mdui-ripple" mdui-dialog-confirm="" style="border-radius: 15px;">完成</button> </div> </div> <script> function get_live_list() { var url = window['api'] + "/live/list"; $.ajax({ url: url, type: "GET", dataType: "json", xhrFields: { withCredentials: true }, success: function (data) { if (data["code"] == 200) { var detail = data["data"]; var list = document.getElementsByClassName("mdui-list")[0]; list.innerHTML = ""; for (var i = 0; i < detail.length; i++) { var item = document.createElement("li"); item.className = "mdui-list-item mdui-ripple"; item.setAttribute("onclick", "watchlive('" + detail[i]["roomid"] + "');"); var item_content = document.createElement("div"); item_content.className = "mdui-list-item-content"; var item_title = document.createElement("div"); item_title.className = "mdui-list-item-title mdui-list-item-one-line"; item_title.innerText = detail[i]["title"]; var item_text = document.createElement("div"); item_text.className = "mdui-list-item-text mdui-list-item-two-line"; item_text.innerText = detail[i]["desc"]; item_content.appendChild(item_title); item_content.appendChild(item_text); item.appendChild(item_content); list.appendChild(item); } mdui.mutation(); } else { mdui.snackbar("获取直播列表失败!") } }, error: function (data) { mdui.snackbar("获取直播列表失败!") } }); } function watchlive(roomid) { window['live_chosen'] = roomid; document.getElementById("mediadiv").innerHTML = `<div class="mainContainer" id="mainContain"> <video id="videoElement" class="centeredVideo" controls style="height: 333px; width: 100%; object-fit: fill;" >Your browser is too old to support HTML5 video.</video> </div>`; setTimeout(function () { setup_stream_user(roomid); }, 100); setTimeout(function () { if (document.getElementById("videoElement").paused) { mdui.snackbar({ message: '播放不通畅?试试刷新页面!', buttonText: '立即刷新', onButtonClick: function () { window.location.reload(); } }); } }, 5000); } function setup_stream_user(roomid) { url = window['api'] + "/live/detail?room=" + roomid; $.ajax({ url: url, type: "GET", dataType: "json", xhrFields: { withCredentials: true }, success: function (data) { if (data["code"] == 200) { setup_stream(data["urls"]["flv"]); document.getElementById("stream_title").innerText = data["data"]["title"] + " - 用户 " + String(data["data"]["uid"]); } else { mdui.snackbar("获取直播地址失败!") } }, error: function (data) { mdui.snackbar("获取直播地址失败!") } }); } get_live_list(); </script> <div class="mdui-dialog" id="dialog-aidraw" style="border-radius: 20px;"> <div class="mdui-dialog-title">AI 作图</div> <div class="mdui-dialog-content mdui-typo"> <div class="mdui-typo"> <h5>注:此功能为 VIP 功能。限制请求:30次/天。</h5> <h5>请输入作图提示词,用英文逗号<code>,</code>分隔提示词。使用英文提示词质量更佳。</h5> <h5>调用 OpenAI API,作图时间约为 7 秒,请耐心等待。</h5> <!-- 一个输入框,请输入作图提示词 --> <div class="mdui-textfield mdui-textfield-floating-label"> <label class="mdui-textfield-label">作图提示词,用英文逗号分隔!</label> <input class="mdui-textfield-input" type="text" id="live_dialog_input" /> </div> <!-- 按钮:作图!--> <button class="mdui-btn mdui-ripple mdui-color-theme-accent" onclick="aidraw_submit();" id="aidb">作图!</button> <div class="mdui-progress" id="aiprogress" hidden> <div class="mdui-progress-indeterminate"></div> </div> <!-- 两个并排的图片 --> <div class="mdui-container"> <div class="mdui-row"> <div class="mdui-col-md-6 mdui-col-xs-12"> <div class="mdui-card"> <div class="mdui-card-media"> <img src="https://s2.loli.net/2023/02/01/5aPMjvoSYe1D9Zm.png" id="img1" /> <div class="mdui-card-media-covered"> <div class="mdui-card-actions"> <button class="mdui-btn mdui-ripple mdui-ripple-white" onclick="down('img1');">下载</button> </div> </div> </div> </div> </div> <div class="mdui-col-md-6 mdui-col-xs-12"> <div class="mdui-card"> <div class="mdui-card-media"> <img src="https://s2.loli.net/2023/02/01/5aPMjvoSYe1D9Zm.png" id="img2" /> <div class="mdui-card-media-covered"> <div class="mdui-card-actions"> <button class="mdui-btn mdui-ripple mdui-ripple-white" onclick="down('img2');">下载</button> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div class="mdui-divider"></div> <div class="mdui-dialog-actions"> <button class="mdui-btn mdui-ripple" mdui-dialog-confirm="" style="border-radius: 15px;">结束</button> </div> </div> <script> function aidraw_submit() { // https://api.oiso.cf:2096/ai/waifu?desc=cat,girl document.getElementById("aidb").disabled = true; document.getElementById("aiprogress").hidden = false; mdui.snackbar("已提交任务,大约需要 30 秒,请耐心等待!") var desc = document.getElementById("live_dialog_input").value; if (desc == "") { mdui.snackbar("请输入作图提示词!"); return; } var url = window['api'] + "/ai/waifu?desc=" + desc; $.ajax({ url: url, type: "GET", dataType: "json", xhrFields: { withCredentials: true }, success: function (data) { document.getElementById("img1").src = data["img1"]; document.getElementById("img2").src = data["img2"]; mdui.snackbar("作图成功!"); document.getElementById("aidb").disabled = false; document.getElementById("aiprogress").hidden = true; }, error: function (data) { mdui.snackbar("作图失败!"); document.getElementById("aidb").disabled = false; document.getElementById("aiprogress").hidden = true; } }); } function down(id) { var img = document.getElementById(id).src; var a = document.createElement("a"); a.href = img; a.download = "waifu.png"; a.click(); } </script> <div class="mdui-dialog" id="dialog-imgupload" style="border-radius: 20px;"> <div class="mdui-dialog-title">图片上传(使用编程猫社区 API )</div> <div class="mdui-dialog-content mdui-typo mdui-container"> <input type="file" name="file" id="file" class="mdui-btn mdui-ripple" style="border-radius: 15px;"> <button class="mdui-btn mdui-ripple" style="border-radius: 15px;" id="subup">上传</button> <br /> <div class="mdui-progress" id="upprogress"> <div class="mdui-progress-indeterminate"></div> </div> <br /> <div class="mdui-row"> <pre id="url" class="mdui-col-xs-10">直链</pre> <button class="mdui-btn mdui-ripple mdui-col-xs-2" style="border-radius: 15px;" id="copy-url"> <i class="mdui-icon material-icons mdui-icon-left">content_copy</i> 复制直链 </button> </div> <div class="mdui-row"> <pre id="url-markdown" class="mdui-col-xs-10">Markdown 格式</pre> <button class="mdui-btn mdui-ripple mdui-col-xs-2" style="border-radius: 15px;" id="copy-url-markdown"> <i class="mdui-icon material-icons mdui-icon-left">content_copy</i> 复制 Markdown </button> </div> <div class="mdui-row"> <pre id="url-html" class="mdui-col-xs-10">HTML 格式</pre> <button class="mdui-btn mdui-ripple mdui-col-xs-2" style="border-radius: 15px;" id="copy-url-html"> <i class="mdui-icon material-icons mdui-icon-left">content_copy</i> 复制 HTML </button> </div> <div class="mdui-row"> <pre id="url-bbcode" class="mdui-col-xs-10">BBCode 格式</pre> <button class="mdui-btn mdui-ripple mdui-col-xs-2" style="border-radius: 15px;" id="copy-url-bbcode"> <i class="mdui-icon material-icons mdui-icon-left">content_copy</i> 复制 BBCode </button> </div> </div> <div class="mdui-divider"></div> <div class="mdui-dialog-actions"> <button class="mdui-btn mdui-ripple" mdui-dialog-confirm="" style="border-radius: 15px;">完成</button> </div> </div> <script> function copyToClip(content) { var aux = document.createElement("input"); aux.setAttribute("value", content); document.body.appendChild(aux); aux.select(); document.execCommand("copy"); document.body.removeChild(aux); } document.getElementById("subup").onclick = function () { document.getElementById("subup").disabled = true; document.getElementById("subup").innerText = "上传中..."; let file = document.getElementById("file").files[0]; let formData = new FormData(); formData.append("file", file); let xhr = new XMLHttpRequest(); xhr.open("POST", window['api'] + "/img/upload", true); xhr.withCredentials = true; xhr.send(formData); xhr.onreadystatechange = function () { if (xhr.readyState == 4 && xhr.status == 200) { var data = JSON.parse(xhr.responseText); if (data.code == 200) { mdui.snackbar(data.msg); document.getElementById('url').innerText = data.url; document.getElementById('copy-url').onclick = function () { copyToClip(data.url); mdui.snackbar("已复制到剪贴板"); } document.getElementById('url-markdown').innerText = ""; document.getElementById('copy-url-markdown').onclick = function () { copyToClip(""); mdui.snackbar("已复制到剪贴板"); } document.getElementById('url-html').innerText = "<img src=\"" + data.url + "\"/>"; document.getElementById('copy-url-html').onclick = function () { copyToClip("<img src=\"" + data.url + "\"/>"); mdui.snackbar("已复制到剪贴板"); } document.getElementById('url-bbcode').innerText = "[img]" + data.url + "[/img]"; document.getElementById('copy-url-bbcode').onclick = function () { copyToClip("[img]" + data.url + "[/img]"); mdui.snackbar("已复制到剪贴板"); } } else { mdui.snackbar("出错了:" + data.msg); } } document.getElementById("subup").disabled = false; document.getElementById("subup").innerText = "上传"; } //进度条 xhr.upload.onprogress = function (e) { console.log(e.loaded, e.total); if (e.lengthComputable) { var percent = e.loaded / e.total * 100; console.log("上传进度:" + percent + "%") document.getElementById("upprogress").style.display = "block"; document.getElementById("upprogress").style.width = percent + "%"; } } } </script> <div class="mdui-dialog" id="dialog-online_show" style="border-radius: 20px;"> <div class="mdui-dialog-title" id="show_number">在线人数</div> <div class="mdui-dialog-content mdui-typo"> <ul class="mdui-list" id="show_people"> <li class="mdui-list-item mdui-ripple">1</li> <li class="mdui-list-item mdui-ripple">2</li> <li class="mdui-list-item mdui-ripple">3</li> </ul> </div> <div class="mdui-divider"></div> <div class="mdui-dialog-actions"> <button class="mdui-btn mdui-ripple" mdui-dialog-confirm="" style="border-radius: 15px;">完成</button> </div> </div> <div class="mdui-dialog" id="dialog-vip" style="border-radius: 20px;"> <div class="mdui-dialog-title">会员计划</div> <div class="mdui-dialog-content mdui-typo"> <p>成为我们的会员,不但能够维持我们的服务器费用,还可以激励我们更好地开发,更能为您带来更多会员权益。</p> <div class="mdui-table-fluid"> <table class="mdui-table"> <thead> <tr> <th>条目</th> <th>OIso Free 免费计划</th> <th>OIso Premium 会员计划</th> </tr> </thead> <tbody> <tr> <td>搜索限制</td> <td>500次/天</td> <td>无限制</td> </tr> <tr> <td>博客收录</td> <td>15次/天</td> <td>15次/天</td> </tr> <tr> <td>免费图床</td> <td>15张/天</td> <td>15张/天</td> </tr> <tr> <td>tamperOIso 洛谷增强脚本</td> <td>免费获取</td> <td>免费获取</td> </tr> <tr> <td>广告</td> <td>偶尔的广告</td> <td>无广告</td> </tr> <tr> <td>AI 对话服务</td> <td></td> <td>无限制使用(非滥用)</td> </tr> <tr> <td>AI 画图服务</td> <td></td> <td>30请求/天(非滥用)</td> </tr> <tr> <td>首页 tag</td> <td>如果之前订阅过 Premium 计划并注册过 tag ,日后也能修改</td> <td>一次购买,永久拥有</td> </tr> <tr> <td>洛谷网头像挂件</td> <td></td> <td>计划有效期内可编辑(需安装油猴插件)</td> </tr> <tr> <td>进入我们的感谢名单</td> <td></td> <td>永久获得</td> </tr> <tr> <td>更多权益</td> <td>正在开发中!</td> <td>敬请期待!</td> </tr> </tbody> </table> </div> <p id="present_trail">您当前的计划:</p> <p id="expire_time">到期时间:</p> <p>什么,在哪里赞助我们?点击右方<a target="_blank" href="https://afdian.net/a/diyanqi" style="color:yellow;">小黄车</a>即可购买! </p> </div> <div class="mdui-divider"></div> <div class="mdui-dialog-actions"> <button class="mdui-btn mdui-ripple" mdui-dialog-confirm="" style="border-radius: 15px;">完成</button> </div> </div> <div class="mdui-dialog" id="dialog-thanks" style="border-radius: 20px;"> <div class="mdui-dialog-title">鸣谢名单</div> <div class="mdui-dialog-content mdui-typo"> <p>感谢以下同学赞助 OIso !您的支持是开发者的不懈动力!</p> <ul class="mdui-list" id="thx"></ul> <script> const lst = [ [325014, "liuliuabc"], [541095, "CR7_houyetong"], [719939, "a12a"], [765440, "hycJuRuo"], [231343, "Icedpiggy"], [632128, "niceeeeeeeeeeee"], [874567, "WMH922"], [609249, "__Walter_Fang__"], ]; var thx = document.getElementById("thx"); thx.innerHTML = ""; for (var i = 0; i < lst.length; i++) { var item = document.createElement("li"); item.className = "mdui-list-item mdui-ripple"; item.setAttribute("onclick", "window.open('https://www.luogu.com.cn/user/" + lst[i][0] + "');"); var item_avatar = document.createElement("div"); item_avatar.className = "mdui-list-item-avatar"; var item_avatar_img = document.createElement("img"); item_avatar_img.src = "https://cdn.luogu.com.cn/upload/usericon/" + lst[i][0] + ".png"; item_avatar.appendChild(item_avatar_img); var item_content = document.createElement("div"); item_content.className = "mdui-list-item-content"; item_content.innerText = "@" + lst[i][1]; item.appendChild(item_avatar); item.appendChild(item_content); thx.appendChild(item); } </script> </div> <div class="mdui-divider"></div> <div class="mdui-dialog-actions"> <button class="mdui-btn mdui-ripple" mdui-dialog-confirm="" style="border-radius: 15px;">完成</button> </div> </div> <div class="mdui-dialog" id="dialog-redeem" style="border-radius: 20px;"> <div class="mdui-dialog-title">兑换代码</div> <div class="mdui-dialog-content mdui-typo"> <p>成为我们的会员,不但能够维持我们的服务器费用,还可以激励我们更好地开发,更能为您带来更多会员权益。</p> <p>您可以在下方输入兑换代码,以兑换 OIso 会员服务等。</p> <p><b>一天只有10次请求机会,这是为了防止暴力破解,请您谅解。</b></p> <p><b>TIP:只有等当前计划到期了以后才能兑换新的计划。</b></p> <p> <div class="mdui-textfield"> <input class="mdui-textfield-input" id="redeem_code" type="text" placeholder="形如:XXX-XXXXX-XXXXX-XXXXX-XXXXX-XXXXX-XXXXX" /> </div> </p> <p> <button class="mdui-btn mdui-ripple mdui-color-theme-accent" id="redeem_btn" style="border-radius: 15px;">点我兑换!</button> </p> <p>什么,在哪里获取兑换代码?点击右方<a target="_blank" href="https://afdian.net/a/diyanqi" style="color:yellow;">小黄车</a>即可购买!</p> </div> <div class="mdui-divider"></div> <div class="mdui-dialog-actions"> <button class="mdui-btn mdui-ripple" mdui-dialog-confirm="" style="border-radius: 15px;">完成</button> </div> </div> <script> document.getElementById("redeem_btn").onclick = function () { var code = document.getElementById("redeem_code").value; if (code == "") { mdui.snackbar({ message: '请输入兑换代码!', position: 'right-top' }); } else { // window["api"]+/redeem?code=code; withCredentials=true; use ajax $.ajax({ url: window["api"] + "/redeem?code=" + code, type: "GET", xhrFields: { withCredentials: true }, success: function (data) { if (data["code"] == 200) { mdui.snackbar({ message: '兑换成功!' + data["msg"], position: 'right-top' }); document.getElementById("present_trail").innerHTML = "您当前的计划:" + data["data"]["plan"]; document.getElementById("expire_time").innerHTML = "到期时间:" + data["data"]["expire"]; } else { mdui.snackbar({ message: data["msg"], position: 'right-top' }); } }, error: function (data) { mdui.snackbar({ message: '兑换失败!' + data["msg"], position: 'right-top' }); } }); } } </script> <div class="mdui-dialog" id="dialog-free" style="border-radius: 20px;"> <div class="mdui-dialog-title">签到领红包</div> <div class="mdui-dialog-content mdui-typo"> <h3>每日签到心情好</h3> <!--<button class="mdui-btn mdui-ripple mdui-color-theme-accent" id="dk_btn" style="border-radius: 15px;" onclick="dk();" disabled>点我签到获取3积分</button>--> <h3>支付宝红包</h3> <p>您只需支付宝搜索「813197162」,或者通过支付宝扫描二维码,即可领取 OIso 官方每日红包。</p> <img src="/img/redPacket.png" /> </div> <div class="mdui-divider"></div> <div class="mdui-dialog-actions"> <button class="mdui-btn mdui-ripple" mdui-dialog-confirm="" style="border-radius: 15px;">完成</button> </div> </div> <div class="mdui-dialog" id="dialog-rewards" style="border-radius: 20px;"> <div class="mdui-dialog-title">我的积分</div> <div class="mdui-dialog-content mdui-typo"> <p>积分可以在 OIso 中换取会员计划等。</p> <p><b id="current_point">当前积分:获取中……</b></p> <h3>积分奖励细则</h3> <p>1. 每日打卡:+3积分</p> <p>2. 邀请1位新用户登录:+3积分</p> <p>您可以复制下方的 Markdown 发送给好友!发到犇犇,发到帖子下,发到任何合理合规的地方!</p> <pre id="reflink">通过这个链接 →[https://www.oiso.cf/](https://www.oiso.cf?ref=222419)← 登录 OIso 官网,免费领取 3 积分,也能为我助力!</pre> <p>3. 安装油猴脚本:+5积分</p> <p>油猴脚本点击右边链接安装:<a href="https://tamper.oiso.cf/tamperoiso.user.js" target="_blank">tamperOIso</a></p> <h3>兑换会员</h3> <p>1. 25 积分兑换 3 天 Premium 会员!</p> <button class="mdui-btn mdui-ripple mdui-color-theme-accent" id="redeem1_btn" style="border-radius: 15px;" onclick="redeem1();">点击兑换 3 天 Premium 会员!</button> </div> <div class="mdui-divider"></div> <div class="mdui-dialog-actions"> <button class="mdui-btn mdui-ripple" mdui-dialog-confirm="" style="border-radius: 15px;">完成</button> </div> </div> <div class="mdui-dialog" id="dialog-qq" style="border-radius: 20px;"> <div class="mdui-dialog-title">QQ 用户群</div> <div class="mdui-dialog-content mdui-typo"> <p>OIso 用户体验反馈群:891536401</p> <p>入群验证码:1145141919810</p> <button class="mdui-btn mdui-ripple mdui-color-theme-accent" id="qq_jq_btn" style="border-radius: 15px;" onclick="window.open('http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=0fNrMp2BEfCPEK4rT8PDkpVLRBeuL6VA&authKey=k0O9FleyVDWW7ai8hOXPTZ2d0SFfn5%2FJNKqyLmfvDHyluHAR03Vh8gA0pe1f9dJL&noverify=0&group_code=891536401');" >点我一键加群!</button> </div> <div class="mdui-divider"></div> <div class="mdui-dialog-actions"> <button class="mdui-btn mdui-ripple" mdui-dialog-confirm="" style="border-radius: 15px;">完成</button> </div> </div> <script> function redeem1() { $("#redeem1_btn").attr("disabled", true); $.ajax({ url: window["api"] + "/rewards/redeem1", type: "GET", xhrFields: { withCredentials: true }, success: function (data) { if (data["code"] == 200) { mdui.snackbar({ message: data["msg"], position: 'right-top' }); $("#redeem1_btn").attr("disabled", false); } else { mdui.snackbar({ message: data["msg"], position: 'right-top' }); $("#redeem1_btn").attr("disabled", false); } }, error: function (data) { mdui.snackbar({ message: '兑换失败!' + data["msg"], position: 'right-top' }); $("#redeem1_btn").attr("disabled", false); } }); } $("#reflink").click(function () { var clipboard = new ClipboardJS('#reflink'); clipboard.on('success', function (e) { mdui.snackbar({ message: '复制成功!', position: 'right-top' }); }); clipboard.on('error', function (e) { mdui.snackbar({ message: '复制失败!', position: 'right-top' }); }); }); function get_my_rewards() { $.ajax({ url: window["api"] + "/rewards/getmine", type: "GET", xhrFields: { withCredentials: true }, success: function (data) { document.getElementById("current_point").innerHTML = "当前积分:" + data; }, error: function (data) { mdui.snackbar({ message: '获取积分失败!', position: 'right-top' }); } }); } </script> <script> // 获取url中是否有ref参数 var url = location.search; var theRequest = new Object(); if (url.indexOf("?") != -1) { var str = url.substr(1); strs = str.split("&"); for (var i = 0; i < strs.length; i++) { theRequest[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1]); } } if (theRequest["ref"] != undefined) { $.ajax({ url: window["api"] + "/rewards/ref/" + theRequest["ref"], type: "GET", xhrFields: { withCredentials: true }, success: function (data) { ; } }); } </script> <div class="mdui-dialog" id="dialog-csong" style="border-radius: 20px;"> <div class="mdui-dialog-title">云点歌</div> <div class="mdui-dialog-content mdui-typo"> <p>在网易云音乐中找到一首歌曲。其链接应该形如<code>https://music.163.com/#/song?id=1966373892</code>。</p> <p>然后请将链接中的<code>id</code>(对于上面的链接,其<code>id</code>是<code>1966373892</code>)粘贴到下面:</p> <div class="mdui-textfield"> <input class="mdui-textfield-input" type="text" placeholder="形如:1966373892" /> </div> <p>完成后,请点击下方确认按钮。</p> <p>注意,如果您<b>在2分钟内已经点过歌了</b>,或<b>这首歌已经被点过了且排在播放队列中</b>,您的请求会被拒绝。</p> </div> <div class="mdui-divider"></div> <div class="mdui-dialog-actions"> <button class="mdui-btn mdui-ripple" mdui-dialog-cancel="" style="border-radius: 15px;">取消</button> <button class="mdui-btn mdui-ripple" mdui-dialog-confirm="" onclick="gocsong();" style="border-radius: 15px;">确认</button> </div> <script> function gocsong() { var url = document.querySelector("#dialog-csong input").value; if (isNaN(url)) { mdui.snackbar("请输入正确的歌曲ID,是一串数字。"); return; } fetch(window['api'] + "/song?song=" + url, { credentials: 'include' }).then(function (response) { return response.text(); }).then(function (data) { // console.log(data); if (data == "True") { mdui.snackbar("点歌成功!已排入点歌队列!"); } else { mdui.snackbar("点歌失败:" + data); } }).catch(function () { mdui.snackbar("点歌失败:" + data); }); } </script> </div> <div class="mdui-container"> <div class="mdui-container" id="happy" hidden> <div class="mdui-row"> <!--左边画面,右边聊天--> <div class="mdui-col-xs-12 mdui-col-md-8"> <div class="mdui-card mdui-shadow-20"> <div class="mdui-card-primary mdui-typo"> <div class="mdui-card-primary-title" id="stream_title">直播信息加载中……</div> </div> <div class="mdui-card-media" id="mediadiv"> <div class="mainContainer" id="mainContain"> <video id="videoElement" class="centeredVideo" controls>Your browser is too old to support HTML5 video.</video> </div> </div> </div> <div class="controls" hidden> <button onclick="flv_start()" hidden>开始</button> <button onclick="flv_pause()" hidden>暂停</button> <button onclick="flv_destroy()" hidden>停止</button> <input style="width:100px" type="text" name="seekpoint" hidden /> <button onclick="flv_seekto()" hidden>跳转</button> </div> <script src="https://cdn.bootcdn.net/ajax/libs/flv.js/1.5.0/flv.js"></script> <br> <div class="mdui-card mdui-shadow-20"> <div class="mdui-card-content"> <div class="icons-wrapper mdui-row-xs-3 mdui-row-sm-4 mdui-row-md-6 mdui-row-lg-6"> <div class="mdui-col icon-code-wrap"> <button style="border-radius: 15px;" class="mdui-btn mdui-ripple" mdui-dialog="{target: '#dialog-online_show'}" id="onlinenumber"> <i class="mdui-icon mdui-icon-left material-icons">people</i> 在线人数 </button> </div> <div class="mdui-col icon-code-wrap"> <button style="border-radius: 15px;" class="mdui-btn mdui-ripple" mdui-dialog="{target: '#dialog-csong'}" disabled> <i class="mdui-icon mdui-icon-left material-icons">queue_music</i> 在线点歌 </button> </div> <div class="mdui-col icon-code-wrap"> <button style="border-radius: 15px;" class="mdui-btn mdui-ripple" mdui-dialog="{target: '#dialog-spider-status'}"> <i class="mdui-icon mdui-icon-left material-icons">web</i> 爬虫状态 </button> </div> <div class="mdui-col icon-code-wrap"> <button style="border-radius: 15px;" class="mdui-btn mdui-ripple" mdui-dialog="{target: '#dialog-spider'}"> <i class="mdui-icon mdui-icon-left material-icons">bug_report</i> 博客收录 </button> </div> <div class="mdui-col icon-code-wrap"> <button style="border-radius: 15px;" class="mdui-btn mdui-ripple" mdui-dialog="{target: '#dialog-editTag'}" onclick="get_tag();"> <i class="mdui-icon mdui-icon-left material-icons">label</i> 编辑 tag </button> </div> <div class="mdui-col icon-code-wrap"> <button style="border-radius: 15px;" class="mdui-btn mdui-ripple" mdui-dialog="{target: '#dialog-editPendant'}" onclick="get_pendant();"> <i class="mdui-icon mdui-icon-left material-icons">account_circle</i> 头像挂件 </button> </div> <div class="mdui-col icon-code-wrap"> <button style="border-radius: 15px;" class="mdui-btn mdui-ripple" mdui-dialog="{target: '#dialog-logout'}"> <i class="mdui-icon mdui-icon-left material-icons">exit_to_app</i> 退出登录 </button> </div> <div class="mdui-col icon-code-wrap"> <button style="border-radius: 15px;" class="mdui-btn mdui-ripple" onclick="window.open('https://stats.uptimerobot.com/JRlkxCB95r')"> <i class="mdui-icon mdui-icon-left material-icons">panorama_fish_eye</i> 宕机监控 </button> </div> <div class="mdui-col icon-code-wrap"> <button style="border-radius: 15px;" class="mdui-btn mdui-ripple" mdui-dialog="{target: '#dialog-docs-theme'}"> <i class="mdui-icon mdui-icon-left material-icons">color_lens</i> 主题颜色 </button> </div> <div class="mdui-col icon-code-wrap"> <button style="border-radius: 15px;" class="mdui-btn mdui-ripple" mdui-dialog="{target: '#dialog-bingimg-detail'}"> <i class="mdui-icon mdui-icon-left material-icons">info</i> 壁纸信息 </button> </div> <div class="mdui-col icon-code-wrap"> <button style="border-radius: 15px;" class="mdui-btn mdui-ripple" mdui-dialog="{target: '#dialog-imgupload'}"> <i class="mdui-icon mdui-icon-left material-icons">image</i> 图片上传 </button> </div> <div class="mdui-col icon-code-wrap"> <button style="border-radius: 15px;" class="mdui-btn mdui-ripple" mdui-dialog="{target: '#dialog-mylive'}" onclick="get_mylive_detail();"> <i class="mdui-icon mdui-icon-left material-icons">live_tv</i> 我要直播 </button> </div> <div class="mdui-col icon-code-wrap"> <button style="border-radius: 15px;" class="mdui-btn mdui-ripple" mdui-dialog="{target: '#dialog-livelist'}" onclick="get_live_list();"> <i class="mdui-icon mdui-icon-left material-icons">tv</i> 直播选台 </button> </div> <div class="mdui-col icon-code-wrap"> <button style="border-radius: 15px;" class="mdui-btn mdui-ripple" onclick="window.open('https://converter.amzcd.top/');"> <i class="mdui-icon mdui-icon-left material-icons">autorenew</i> 格式转换 </button> </div> <div class="mdui-col icon-code-wrap"> <button style="border-radius: 15px;" class="mdui-btn mdui-ripple" mdui-dialog="{target: '#dialog-aidraw'}" mdui-tooltip="{content: 'Premium 会员专享'}"> <i class="mdui-icon mdui-icon-left material-icons">sentiment_satisfied</i> AI 作图 </button> </div> <div class="mdui-col icon-code-wrap"> <button style="border-radius: 15px;" class="mdui-btn mdui-ripple" id="openGPT" disabled="disabled onclick="window.open('https://www.oiso.cf/webgpt-main/');" mdui-tooltip="{content: 'Premium 会员专享 [全新上线!]'}"> <i class="mdui-icon mdui-icon-left material-icons">chat</i> Chat🐔PT </button> </div> <div class="mdui-col icon-code-wrap"> <button style="border-radius: 15px;" class="mdui-btn mdui-ripple" mdui-dialog="{target: '#dialog-vip'}"> <i class="mdui-icon mdui-icon-left material-icons">done_all</i> 会员计划 </button> </div> <div class="mdui-col icon-code-wrap"> <button style="border-radius: 15px;" class="mdui-btn mdui-ripple" mdui-dialog="{target: '#dialog-redeem'}"> <i class="mdui-icon mdui-icon-left material-icons">redeem</i> 兑换代码 </button> </div> <div class="mdui-col icon-code-wrap"> <button style="border-radius: 15px;" class="mdui-btn mdui-ripple" mdui-dialog="{target: '#dialog-thanks'}"> <i class="mdui-icon mdui-icon-left material-icons">whatshot</i> 鸣谢名单 </button> </div> <div class="mdui-col icon-code-wrap"> <button style="border-radius: 15px;" class="mdui-btn mdui-ripple" onclick="window.open('https://tamper.oiso.cf/tamperoiso.user.js');"> <i class="mdui-icon mdui-icon-left material-icons">hdr_strong</i> 油猴脚本 </button> </div> <div class="mdui-col icon-code-wrap"> <button style="border-radius: 15px;" class="mdui-btn mdui-ripple" mdui-dialog="{target: '#dialog-free'}"> <i class="mdui-icon mdui-icon-left material-icons">monetization_on</i> 签到红包 </button> </div> <div class="mdui-col icon-code-wrap"> <button style="border-radius: 15px;" class="mdui-btn mdui-ripple" mdui-dialog="{target: '#dialog-rewards'}" onclick="get_my_rewards();" mdui-tooltip="{content: '做任务,领积分,换会员!'}"> <i class="mdui-icon mdui-icon-left material-icons">cake</i> 我的积分 </button> </div> <div class="mdui-col icon-code-wrap"> <button style="border-radius: 15px;" class="mdui-btn mdui-ripple" mdui-dialog="{target: '#dialog-qq'}"> <i class="mdui-icon mdui-icon-left material-icons">group</i> 反馈群聊 </button> </div> </div> </div> </div> <br> </div> <div class="mdui-col-xs-12 mdui-col-md-4"> <div class="mdui-card"> <div hidden="hidden" id="media" class="mdui-card-media" style="border-radius: 20px;overflow: hidden;"> <!-- <div class="mdui-card-media-content"> <div class="mdui-card-primary"> <div class="mdui-card-primary-subtitle" id="sub">云听歌</div> </div> </div> --> <img id="liveimg" src="https://via.placeholder.com/1920x1080" /> <!-- <iframe id="live" src="/musicPlayer/index.html" width="100%" frameborder="no" border="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> --> </div> <!-- 轮播图 --> <div id="demo" class="carousel slide" data-ride="carousel"> <!-- 指示符 --> <ul class="carousel-indicators"> <!-- <li data-target="#demo" data-slide-to="0" class="active"></li> <li data-target="#demo" data-slide-to="1"></li> <li data-target="#demo" data-slide-to="2"></li> --> </ul> <!-- 轮播图片 --> <div class="carousel-inner"> <!-- <div class="carousel-item active"> <img src="https://static.runoob.com/images/mix/img_fjords_wide.jpg"> </div> <div class="carousel-item"> <img src="https://static.runoob.com/images/mix/img_nature_wide.jpg"> </div> <div class="carousel-item"> <img src="https://static.runoob.com/images/mix/img_mountains_wide.jpg"> </div> --> </div> <script> window['carousels'] = [ 'https://s2.loli.net/2023/03/09/juQSlhVcsprzyiP.png', 'https://s2.loli.net/2023/03/09/dKseN2UiR9Mkj17.png' ]; window['carousel_links'] = [ 'https://afdian.net/a/diyanqi', 'https://tamper.oiso.cf/tamperoiso.user.js' ] document.getElementsByClassName('carousel-inner')[0].innerHTML = carousels.map((item, index) => { return `<div class="carousel-item ${index === 0 ? 'active' : ''}"> <a href="${carousel_links[index]}" target="_blank"> <img src="${item}"> </a> </div>` }).join(''); document.getElementsByClassName('carousel-indicators')[0].innerHTML = carousels.map((item, index) => { return `<li data-target="#demo" data-slide-to="${index}" class="${index === 0 ? 'active' : ''}"></li>` }).join(''); </script> <!-- 左右切换按钮 --> <a class="carousel-control-prev" href="#demo" data-slide="prev"> <span class="carousel-control-prev-icon"></span> </a> <a class="carousel-control-next" href="#demo" data-slide="next"> <span class="carousel-control-next-icon"></span> </a> </div> </div> <br /> <div class="mdui-card mdui-shadow-20"> <div class="mdui-card-content" style="padding-bottom: 0;"> <div class="mdui-textfield"> <textarea class="mdui-textfield-input" type="text" placeholder="按回车键发送" id="ib" style="cursor:text"></textarea> </div> <div class="mdui-card-content" id="benben"> <div class="mdui-spinner mdui-spinner-colorful"></div> </div> </div> </div> </div> </div> <script> $.ajax({ url: window['api'] + "/bingimg/detail", success: (data) => { // console.log(data); // 先解析成json对象 var json = JSON.parse(data); // { "images": [ { "startdate": "20230111", "fullstartdate": "202301111600", "enddate": "20230112", "url": "/th?id=OHR.RumeliHisari_ZH-CN0185820275_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp", "urlbase": "/th?id=OHR.RumeliHisari_ZH-CN0185820275", "copyright": "博斯普鲁斯海峡的如梅利堡垒,土耳其伊斯坦布尔 (© Drone in Wonderland/Amazing Aerial Agency)", "copyrightlink": "https://www.bing.com/search?q=%E5%A6%82%E6%A2%85%E5%88%A9%E5%A0%A1%E5%9E%92&form=hpcapt&mkt=zh-cn", "title": "两大洲交接的地方", "quiz": "/search?q=Bing+homepage+quiz&filters=WQOskey:%22HPQuiz_20230111_RumeliHisari%22&FORM=HPQUIZ", "wp": true, "hsh": "b18686a00c2932211c717fad37ba6747", "drk": 1, "top": 1, "bot": 1, "hs": [] } ], "tooltips": { "loading": "正在加载...", "previous": "上一个图像", "next": "下一个图像", "walle": "此图片不能下载用作壁纸。", "walls": "下载今日美图。仅限用作桌面壁纸。" } } var copyright = json.images[0].copyright; var title = json.images[0].title; var copyrightlink = json.images[0].copyrightlink; $("#detail").html(title + " - " + copyright); $("#detail").attr("href", "https://cn.bing.com" + json.images[0].url); // copilot 就是好用,我不会写也能给我写上((( } }); </script> <script> function getWindowHeight2() { var windowHeight = 0; if (document.compatMode == "CSS1Compat") { windowHeight = document.documentElement.clientHeight; } else { windowHeight = document.body.clientHeight; } return windowHeight; } document.getElementById("benben").setAttribute("style", "max-height:" + String(getWindowHeight2() * 0.5) + "px;overflow:scroll;") </script> <script> function send_benben() { document.getElementById("ib").setAttribute("disabled", "disabled"); var time_is_up = false; setTimeout(() => { document.getElementById("ib").removeAttribute("disabled"); document.getElementById("ib").value = ""; time_is_up = true; }, 5000); var text = document.getElementById("ib").value; if (text == "") { mdui.snackbar("总要说点什么吧?"); return; } text = encodeURIComponent(text); fetch(window['api'] + "/msg?msg=" + text, { credentials: 'include' }).then(function (response) { return response.text(); }).then(function (data) { // console.log(data); if (data == "True") { mdui.snackbar("发送成功!"); get_benben(); document.getElementById("ib").value = "冷却中……"; if (time_is_up) { document.getElementById("ib").value = ""; } } else { mdui.snackbar("发送失败:" + data); } }).catch(function () { mdui.snackbar("发送失败:" + error); }); } document.getElementById("ib").addEventListener("keyup", function (event) { // console.log(event); if (event.keyCode === 13) { event.preventDefault(); // 把最后的换行去掉 document.getElementById("ib").value = document.getElementById("ib").value.replace(/\n$/, ""); send_benben(); } }); </script> <br><br> <br><br> <!-- <iframe scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" src="https://player.bilibili.com/player.html?bvid=BV1GJ411x7h7&high_quality=1" style="position: absolute;top: 0; left: 0; width: 100%; height: 100%;"></iframe> --> </div> </div> <script> function parseElement(htmlString) { return new DOMParser().parseFromString(htmlString, 'text/html').body.childNodes[0] } function getWindowHeight() { var windowHeight = 0; if (document.compatMode == "CSS1Compat") { windowHeight = document.documentElement.clientHeight; } else { windowHeight = document.body.clientHeight; } return windowHeight; } // console.log(getWindowHeight()); document.getElementById("happy").style.position = "absolute"; document.getElementById("happy").style.top = getWindowHeight() + "px"; function replyto(content) { document.getElementById("ib").value = " > " + content; document.getElementById("ib").focus(); // 把光标移到文本框最前面 var input = document.getElementById("ib"); if (input.setSelectionRange) { input.focus(); input.setSelectionRange(0, 0); } else if (input.createTextRange) { var range = input.createTextRange(); range.collapse(true); range.moveEnd('character', 0); range.moveStart('character', 0); range.select(); } } </script> <script> </script> <script> // 鼠标点击特效 function clickEffect() { let balls = []; let longPressed = false; let longPress; let multiplier = 0; let width, height; let origin; let normal; let ctx; const colours = ["#F73859", "#14FFEC", "#00E0FF", "#FF99FE", "#FAF15D"]; const canvas = document.createElement("canvas"); document.body.appendChild(canvas); canvas.setAttribute("style", "width: 100%; height: 100%; top: 0; left: 0; z-index: 99999; position: fixed; pointer-events: none;"); const pointer = document.createElement("span"); pointer.classList.add("pointer"); document.body.appendChild(pointer); if (canvas.getContext && window.addEventListener) { ctx = canvas.getContext("2d"); updateSize(); window.addEventListener('resize', updateSize, false); loop(); window.addEventListener("mousedown", function (e) { pushBalls(randBetween(10, 20), e.clientX, e.clientY); document.body.classList.add("is-pressed"); longPress = setTimeout(function () { document.body.classList.add("is-longpress"); longPressed = true; }, 500); }, false); window.addEventListener("mouseup", function (e) { clearInterval(longPress); if (longPressed == true) { document.body.classList.remove("is-longpress"); pushBalls(randBetween(50 + Math.ceil(multiplier), 100 + Math.ceil(multiplier)), e.clientX, e.clientY); longPressed = false; } document.body.classList.remove("is-pressed"); }, false); window.addEventListener("mousemove", function (e) { let x = e.clientX; let y = e.clientY; pointer.style.top = y + "px"; pointer.style.left = x + "px"; }, false); } else { console.log("canvas or addEventListener is unsupported!"); } function updateSize() { canvas.width = window.innerWidth * 2; canvas.height = window.innerHeight * 2; canvas.style.width = window.innerWidth + 'px'; canvas.style.height = window.innerHeight + 'px'; ctx.scale(2, 2); width = (canvas.width = window.innerWidth); height = (canvas.height = window.innerHeight); origin = { x: width / 2, y: height / 2 }; normal = { x: width / 2, y: height / 2 }; } class Ball { constructor(x = origin.x, y = origin.y) { this.x = x; this.y = y; this.angle = Math.PI * 2 * Math.random(); if (longPressed == true) { this.multiplier = randBetween(14 + multiplier, 15 + multiplier); } else { this.multiplier = randBetween(6, 12); } this.vx = (this.multiplier + Math.random() * 0.5) * Math.cos(this.angle); this.vy = (this.multiplier + Math.random() * 0.5) * Math.sin(this.angle); this.r = randBetween(8, 12) + 3 * Math.random(); this.color = colours[Math.floor(Math.random() * colours.length)]; } update() { this.x += this.vx - normal.x; this.y += this.vy - normal.y; normal.x = -2 / window.innerWidth * Math.sin(this.angle); normal.y = -2 / window.innerHeight * Math.cos(this.angle); this.r -= 0.3; this.vx *= 0.9; this.vy *= 0.9; } } function pushBalls(count = 1, x = origin.x, y = origin.y) { for (let i = 0; i < count; i++) { balls.push(new Ball(x, y)); } } function randBetween(min, max) { return Math.floor(Math.random() * max) + min; } function loop() { ctx.fillStyle = "rgba(255, 255, 255, 0)"; ctx.clearRect(0, 0, canvas.width, canvas.height); for (let i = 0; i < balls.length; i++) { let b = balls[i]; if (b.r < 0) continue; ctx.fillStyle = b.color; ctx.beginPath(); ctx.arc(b.x, b.y, b.r, 0, Math.PI * 2, false); ctx.fill(); b.update(); } if (longPressed == true) { multiplier += 0.2; } else if (!longPressed && multiplier >= 0) { multiplier -= 0.4; } removeBall(); requestAnimationFrame(loop); } function removeBall() { for (let i = 0; i < balls.length; i++) { let b = balls[i]; if (b.x + b.r < 0 || b.x - b.r > width || b.y + b.r < 0 || b.y - b.r > height || b.r < 0) { balls.splice(i, 1); } } } } // clickEffect(); tnnd 卡爆了 </script> <script type="text/javascript" src="https://cdn.lyshark.com/javascript/socket.io/socket.io.min.js"></script> <script type="text/javascript"> document.write("<script src='/js/index.js?" + Math.random() + "'><\/script>"); </script> </body> </html>