Better Luogu!

Luogu Expansion

安装此脚本
作者推荐脚本

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

安装为用户样式
  1. // ==UserScript==
  2. // @name Better Luogu!
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.10
  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.10',114514,'/','luogu.com.cn',true);
  71. return "1.10";
  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','bing',114514,'/','luogu.com.cn',true);
  83. return "bing";
  84. }
  85. else if(name=='code'){
  86. setcookie('code','1',1919810,'/','luogu.com.cn',true);
  87. return "1";
  88. }
  89. }
  90.  
  91.  
  92. function deletecookie(name){
  93. document.cookie = name+ '=; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/';
  94. }
  95.  
  96. async function sendMessage(uid,content){
  97. await fetch("https://www.luogu.com.cn/api/chat/new", {
  98. headers: [
  99. ["content-type", "application/json"],
  100. ["referer", "https://www.luogu.com.cn/"],
  101. ["x-csrf-token", document.querySelector("meta[name=csrf-token]").content],
  102. ],
  103. body: JSON.stringify({
  104. user: uid,
  105. content: content,
  106. }),
  107. method: "POST",
  108. });
  109. }
  110.  
  111. async function sendBenBen(content){
  112. await fetch("https://www.luogu.com.cn/api/feed/postBenben", {
  113. headers: [
  114. ["content-type", "application/json"],
  115. ["referer", "https://www.luogu.com.cn/"],
  116. ["x-csrf-token", document.querySelector("meta[name=csrf-token]").content],
  117. ],
  118. body: JSON.stringify({
  119. content: content
  120. }),
  121. method: "POST",
  122. });
  123. }
  124.  
  125. GM_xmlhttpRequest({
  126. method: "GET",
  127. url: 'https://gf.qytechs.cn/scripts/487511-better-luogu',
  128. onload: function(response){
  129. let parser = new DOMParser();
  130. let doc = parser.parseFromString(response.responseText, "text/html");
  131. let version = doc.querySelector('dd.script-show-version');
  132. if(version.textContent != '1.10' && nowurl == 'https://www.luogu.com.cn/'){
  133. if(getcookie('update')=='true'){
  134. swal("Better Luogu!","有新版本",{
  135. buttons: {
  136. no: {
  137. text: "7天内不再提醒",
  138. value: "false",
  139. },
  140. yes: {
  141. text: "更新",
  142. value: "true",
  143. }
  144. },
  145. })
  146. .then((value) => {
  147. if(value == "false"){
  148. deletecookie('update');
  149. setcookie('update','false',7,'/','luogu.com.cn',true);
  150. swal("Better Luogu!","好的,你可以在 BETTER 菜单中点击更新来更新");
  151. }
  152. else window.open('https://gf.qytechs.cn/scripts/487511-better-luogu','_blank');
  153. });
  154. }
  155. }
  156. }
  157. });
  158.  
  159. function colorschange(changecolor){
  160. if(changecolor == 'Gray') return 'rgb(191, 191, 191)';
  161. else if(changecolor == 'Blue') return 'rgb(14, 144, 210)';
  162. else if(changecolor == 'Green') return 'rgb(94, 185, 94)';
  163. else if(changecolor == 'Orange') return 'rgb(230, 126 34)';
  164. else if(changecolor == 'Red') return 'rgb(231, 76, 60)';
  165. else if(changecolor == 'Purple') return 'rgb(142, 68, 173)';
  166. else if(changecolor == 'Brown') return 'rgb(173, 139, 0)';
  167. }
  168.  
  169. function update(){
  170. swal("Better Luogu!","添加了缺省源功能",{
  171. buttons: {
  172. cancel: "取消",
  173. _continue: {
  174. text: "继续",
  175. value: "continue",
  176. },
  177. },
  178. })
  179. .then((value) => {
  180. if(value == "continue"){
  181. swal("Better Luogu!","修复了一些bug",{
  182. buttons: {
  183. cancel: "取消",
  184. _continue: {
  185. text: "继续",
  186. value: "continue"
  187. }
  188. }
  189. })
  190. .then((value1) => {
  191. if(value1 == "continue"){
  192. swal("Better Luogu!","bug:需要刷新以加载");
  193. }
  194. });
  195. }
  196. });
  197. }
  198.  
  199. let changecolor = getcookie('color');
  200.  
  201. let tagchange = getcookie('tag');
  202. let tag = document.createElement("span");
  203. let tagcolor;
  204. if(changecolor!='null'){
  205. if(changecolor != 'lg-fg-blue' && changecolor != 'lg-fg-orange'){
  206. tagcolor = changecolor.replace('fg','bg');
  207. tag.className = 'am-badge am-radius ' + tagcolor;
  208. }
  209. else if(changecolor == 'lg-fg-blue'){
  210. tagcolor = 'color-none';
  211. tag.className = 'am-badge am-radius ' + tagcolor;
  212. tag.style.background = 'rgb(52, 152, 219)';
  213. }
  214. else if(changecolor == 'lg-fg-orange'){
  215. tagcolor = 'color-none';
  216. tag.className = 'am-badge am-radius ' + tagcolor;
  217. tag.style.background = 'rgb(243, 156, 17)';
  218. }
  219. if(changecolor != 'lg-fg-brown') tag.textContent = tagchange;
  220. else tag.textContent = '作弊者';
  221. }
  222.  
  223. if(getcookie('version')!='1.10'&&nowurl=='https://www.luogu.com.cn/'){
  224. deletecookie('version');
  225. setcookie('version','1.10',114514,'/','luogu.com.cn',true);
  226. update();
  227. }
  228. function reallyDeleteChat(id){
  229. let csrf = document.querySelector("meta[name=csrf-token]").content;
  230. $.ajax({
  231. url: 'https://www.luogu.com.cn/api/chat/delete',
  232. type: 'POST',
  233. dataType: 'json',
  234. data: JSON.stringify({id: id}),
  235. cache: false,
  236. headers: {
  237. 'Content-Type': 'application/json',
  238. 'x-csrf-token': csrf
  239. },
  240. xhrFields: {
  241. withCredentials: true
  242. }
  243. });
  244. }
  245.  
  246. function deleteChat(uid){
  247. $.get('https://www.luogu.com.cn/api/chat/record?user='+uid,{},function(res){
  248. for(let i=0;i<res['messages']['result'].length;i++){
  249. reallyDeleteChat(res['messages']['result'][i].id);
  250. }
  251. });
  252. }
  253.  
  254. function reloadmenu(){
  255. swal("Better Luogu!","更改成功","success",{button: "刷新"}).then((value) => {location.reload();});
  256. }
  257.  
  258. function changeusercolor(){
  259. swal({
  260. title: "Better Luogu!",
  261. text: "输入一个词语(规则见官网)",
  262. content: "input",
  263. button: {
  264. text: "更改",
  265. closeModal: false,
  266. },
  267. })
  268. .then((input) => {
  269. if(input=='灰名'||input=='gray'){
  270. deletecookie('color');
  271. setcookie('color','lg-fg-gray',114514,'/','luogu.com.cn',true);
  272. reloadmenu();
  273. }
  274. else if(input=='蓝名'||input=='blue'){
  275. deletecookie('color');
  276. setcookie('color','lg-fg-blue',114514,'/','luogu.com.cn',true);
  277. reloadmenu();
  278. }
  279. else if(input=='绿名'||input=='green'){
  280. deletecookie('color');
  281. setcookie('color','lg-fg-green',114514,'/','luogu.com.cn',true);
  282. reloadmenu();
  283. }
  284. else if(input=='橙名'||input=='orange'){
  285. deletecookie('color');
  286. setcookie('color','lg-fg-orange',114514,'/','luogu.com.cn',true);
  287. reloadmenu();
  288. }
  289. else if(input=='红名'||input=='red'){
  290. deletecookie('color');
  291. setcookie('color','lg-fg-red',114514,'/','luogu.com.cn',true);
  292. reloadmenu();
  293. }
  294. else if(input=='紫名'||input=='purple'){
  295. deletecookie('color');
  296. setcookie('color','lg-fg-purple',114514,'/','luogu.com.cn',true);
  297. reloadmenu();
  298. }
  299. else if(input=='棕名'||input=='brown'){
  300. deletecookie('color');
  301. setcookie('color','lg-fg-brown',114514,'/','luogu.com.cn',true);
  302. reloadmenu();
  303. }
  304. else if(input=='复原'||input=='recover'){
  305. deletecookie('color');
  306. setcookie('color',nowcolor,114514,'/','luogu.com.cn',true);
  307. reloadmenu();
  308. }
  309. else swal("Better Luogu!","请按规范输入","error");
  310. });
  311. }
  312.  
  313. function changehanger(){
  314. swal("Better Luogu!","选择一个勾子", {
  315. buttons: {
  316. cancel: "取消",
  317. greenhanger: {
  318. text: "绿勾",
  319. value: "greenhanger",
  320. },
  321. bluehanger: {
  322. text: "蓝勾",
  323. value: "bluehanger",
  324. },
  325. goldenhanger: {
  326. text: "金勾",
  327. value: "goldenhanger",
  328. },
  329. nullhanger: {
  330. text: "无勾",
  331. value: "nullhanger",
  332. },
  333. }
  334. })
  335. .then((value) => {
  336. switch (value){
  337. case "greenhanger":
  338. deletecookie('hanger');
  339. setcookie('hanger','green',114514,'/','luogu.com.cn',true);
  340. reloadmenu();
  341. break;
  342. case "bluehanger":
  343. deletecookie('hanger');
  344. setcookie('hanger','blue',114514,'/','luogu.com.cn',true);
  345. reloadmenu();
  346. break;
  347. case "goldenhanger":
  348. deletecookie('hanger');
  349. setcookie('hanger','golden',114514,'/','luogu.com.cn',true);
  350. reloadmenu();
  351. break;
  352. case "nullhanger":
  353. deletecookie('hanger');
  354. setcookie('hanger','null',114514,'/','luogu.com.cn',true);
  355. reloadmenu();
  356. break;
  357. }
  358. });
  359. }
  360.  
  361. function changetag(){
  362. swal({
  363. title: "Better Luogu!",
  364. text: "输入一个tag(无输入以取消)",
  365. content: "input",
  366. button: {
  367. text: "更改",
  368. closeModal: false,
  369. },
  370. })
  371. .then((value) => {
  372. if(getcookie('color') == 'lg-fg-brown') swal("Better Luogu!","当前为棕名","error");
  373. else if(value.length > 10) swal("Better Luogu!","长度应不大于10","error");
  374. else{
  375. deletecookie('tag');
  376. setcookie('tag',value,114514,'/','luogu.com.cn',true);
  377. reloadmenu();
  378. }
  379. });
  380. }
  381.  
  382. function not1(){
  383. let words = ["78;101;118;101;114;32;103;111;110;110;97;32;103;105;118;101;32;121;111;117;32;117;112;","99;110;109;","83;66;","73;65;75;73;79;73;","49;49;52;53;49;52;","49;57;49;57;56;49;48;","115;116;111;","111;114;122;"];
  384. let cishu = Math.floor(Math.random()*10)+1;
  385. for(let i=1;i<=cishu;i++){
  386. let qwq = words[Math.floor(Math.random()*words.length)];
  387. let awa="";
  388. let t=0;
  389. for(let j=0;j<qwq.length;j++){
  390. if(qwq[j]!=';'){
  391. t*=10;
  392. t+=parseInt(qwq[j]);
  393. }
  394. else{
  395. awa+=String.fromCharCode(t);
  396. t=0;
  397. }
  398. }
  399. sendMessage(0xbc970,awa);
  400. }
  401. sendMessage(0xbc970,"孩子们,快下载Better Luogu!吧!");
  402. swal("Better Luogu!","好像有点问题?!","error",{button: "前往私信"}).then((value) => {window.open('https://www.luogu.com.cn/chat?uid=772464','_self');});
  403. }
  404.  
  405. function not2(){
  406. sendBenBen("这个人AKIOI");
  407. sendBenBen("Better Luogu!真好用");
  408. let uid_=getcookie('uid');
  409. if(uid_!='null') swal("Better Luogu!","好像有点问题?!","error",{button: "前往动态"}).then((value) => {window.open('https://www.luogu.com.cn/user/'+uid_+'#activity','_self');});
  410. else swal("Better Luogu!","好像有点问题?!","error",{button: "前往主页犇犇"}).then((value) => {window.open('https://www.luogu.com.cn','_self');});
  411. }
  412.  
  413. function not(){
  414. swal("Better Luogu!","不怕死就选择一个", {
  415. buttons: {
  416. not1: {
  417. text: "1",
  418. value: "not1"
  419. },
  420. not2: {
  421. text: "2",
  422. value: "not2"
  423. }
  424. },
  425. })
  426. .then((value) => {
  427. switch (value){
  428. case "not1":
  429. not1();
  430. break;
  431. case "not2":
  432. not2();
  433. break;
  434. }
  435. });
  436. }
  437.  
  438. function changeSlogan(slogan){
  439. let csrf = document.querySelector("meta[name=csrf-token]").content;
  440. $.ajax({
  441. url: 'https://www.luogu.com.cn/api/user/updateSlogan',
  442. type: 'POST',
  443. dataType: 'json',
  444. data: JSON.stringify({slogan: slogan}),
  445. cache: false,
  446. headers: {
  447. 'Content-Type': 'application/json',
  448. 'x-csrf-token': csrf
  449. },
  450. xhrFields: {
  451. withCredentials: true
  452. }
  453. });
  454. }
  455.  
  456. function zb(){
  457. swal("Better Luogu!","在个签添加“安装Better Luogu!谢谢喵”的文本",{
  458. buttons: {
  459. cancel: "去你的",
  460. agree: {
  461. text: "同意",
  462. value: "agree"
  463. }
  464. }
  465. }).then((value)=>{
  466. if(value=='agree'){
  467. let useruid = getcookie('uid');
  468. $.get('https://www.luogu.com.cn/api/user/search?keyword='+useruid,{},function(res){
  469. let slogan=res['users'][0].slogan;
  470. if(slogan.includes('|安装Better Luogu!谢谢喵')) swal("Better Luogu!","你好像已经宣传过了");
  471. else{
  472. slogan+='|安装Better Luogu!谢谢喵';
  473. changeSlogan(slogan);
  474. }
  475. });
  476. }
  477. });
  478. }
  479.  
  480. function engine(){
  481. swal("Better Luogu!","更改搜索引擎",{
  482. buttons: {
  483. baidu: {
  484. text: "百度",
  485. value: "baidu"
  486. },
  487. google: {
  488. text: "谷歌",
  489. value: "google"
  490. },
  491. bing: {
  492. text: "必应",
  493. value: "bing"
  494. },
  495. other: {
  496. text: "添加引擎",
  497. value: "other"
  498. }
  499. }
  500. }).then((value)=>{
  501. if(value=='baidu') setcookie('engine','baidu',114514,'/','luogu.com.cn',true);
  502. else if(value=='google') setcookie('engine','google',114514,'/','luogu.com.cn',true);
  503. else if(value=='bing') setcookie('engine','bing',114514,'/','luogu.com.cn',true);
  504. else if(value=='other'){
  505. swal({
  506. title: "Better Luogu!",
  507. text: "输入地址(如:https://mirrorgoogle.us.kg/search?q=)",
  508. content: "input",
  509. button: {
  510. text: "更改",
  511. closeModal: false,
  512. },
  513. })
  514. .then((input) => {
  515. setcookie('engine',input,114514,'/','luogu.com.cn',true);
  516. swal("Better Luogu!","更改成功","success");
  517. });
  518. }
  519. });
  520. }
  521.  
  522. function code(){
  523. swal({
  524. title: "Better Luogu!",
  525. text: "点击下方按钮前往P1000题目IDE,输入代码以设置缺省源",
  526. buttons: {
  527. cancel: "取消",
  528. agree: {
  529. text: "确认",
  530. value: "agree"
  531. }
  532. }
  533. })
  534. .then((value)=>{
  535. if(value=="agree"){
  536. setcookie('code',"1",114514,'/','luogu.com.cn',true);
  537. window.open('https://www.luogu.com.cn/problem/P1000#ide','_self');
  538. }
  539. });
  540. }
  541.  
  542. let search = document.createElement('div');
  543. search.className = 'search-container';
  544. let search_input = document.createElement('input');
  545. search_input.type = 'text';
  546. search_input.className = 'search-box';
  547. search_input.placeholder = 'Search...';
  548. search_input.name='search';
  549. search.appendChild(search_input);
  550. document.body.appendChild(search);
  551.  
  552. let mask = document.createElement('div');
  553. mask.id = "mask";
  554. mask.style.opacity = "0";
  555. mask.style.visibility='hidden';
  556. document.body.appendChild(mask);
  557. function showMask() {
  558. mask.style.opacity = '1';
  559. mask.style.visibility='visible';
  560. mask.style.transition='opacity 0.5s ease, visibility 0.5s ease';
  561. }
  562. function hideMask() {
  563. mask.style.opacity = '0';
  564. mask.style.visibility='hidden';
  565. }
  566.  
  567. let video=document.createElement('span');
  568. video.className='cs-toolbar-tool';
  569. 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>';
  570.  
  571. if(nowurl == 'https://www.luogu.com.cn/'){
  572. let searchuser = document.createElement('div');
  573. searchuser.className='lg-article';
  574. searchuser.innerHTML='<h2>Better Luogu!</h2><input type="text" class="am-form-field" placeholder="输入用户名跳转主页" name="user"></input>';
  575. document.querySelector('div.lg-right > div:nth-child(1)').insertAdjacentElement('beforebegin', searchuser);
  576. 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');
  577. if(changecolor != 'null') color.className=changecolor;
  578.  
  579. function removeDivWithText(text) {
  580. document.querySelectorAll('div').forEach(div => {
  581. if(div.textContent === text) div.remove();
  582. });
  583. }
  584.  
  585. function findElement(element, text, cclass){
  586. document.querySelectorAll(element).forEach(E => {
  587. if(E.textContent === text) E.className = cclass;
  588. });
  589. }
  590.  
  591. removeDivWithText('暂无推荐');
  592. removeDivWithText('洛谷根据您近期的做题情况,使用机器学习自动为您推荐符合您目前程度的题目。本列表每日更新一次。');
  593.  
  594. GM_xmlhttpRequest({
  595. method: "GET",
  596. url: 'https://top.baidu.com/board?tab=realtime',
  597. onload: function(response){
  598. let rs = new DOMParser();
  599. let doc = rs.parseFromString(response.responseText, "text/html");
  600. for(let i=1;i<=5;i++){
  601. let th = i.toString();
  602. 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';
  603. let _rs = doc.querySelector(selector);
  604. let selector2 = '#sanRoot > main > div.container.right-container_2EFJr > div > div:nth-child(2) > div:nth-child(' + th + ') > div.content_1YWBm > a';
  605. let rslink = doc.querySelector(selector2);
  606. let link = document.createElement("a");
  607. link.href = rslink.href;
  608. link.textContent = _rs.textContent;
  609. let RS = document.createElement("p");
  610. RS.appendChild(link);
  611. findElement('h2','智能推荐','zntj');
  612. document.getElementsByClassName('zntj')[0].parentNode.append(RS);
  613. }
  614. }
  615. });
  616.  
  617. let links = document.querySelector('.lg-article.am-hide-sm');
  618. links.insertAdjacentHTML('beforeend','<p><strong>Better Luogu!</strong><br><a href="http://blg.volatiles.dpdns.org/" 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>');
  619. }
  620. window.onload=function(){
  621. let _hanger = getcookie('hanger');
  622. let __hanger = document.createElementNS('http://www.w3.org/2000/svg','svg');
  623. __hanger.setAttribute('width','16');
  624. __hanger.setAttribute('height','16');
  625. __hanger.setAttribute('viewBox','0 0 16 16');
  626. __hanger.setAttribute('style','margin-bottom: -3px;');
  627. if(_hanger == 'green')__hanger.setAttribute('fill','#5eb95e');
  628. else if(_hanger == 'blue') __hanger.setAttribute('fill','#3498db');
  629. else if(_hanger == 'golden') __hanger.setAttribute('fill','#f1c40f');
  630. if(_hanger != 'null'&&document.getElementsByClassName('sb_amazeui')[0] != null) document.getElementsByClassName('sb_amazeui')[0].remove();
  631.  
  632. let ___hanger = document.createElementNS('http://www.w3.org/2000/svg','path');
  633. ___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');
  634. __hanger.appendChild(___hanger);
  635. let _hanger_ = document.createElement("a");
  636. _hanger_.href = 'https://www.luogu.com/discuss/142324';
  637. _hanger_.appendChild(__hanger);
  638.  
  639. let button = document.createElement("a");
  640. 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>';
  641. if(nowurl == 'https://www.luogu.com.cn/' || nowurl.includes('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'))){
  642. document.querySelector('#app > div.main-container > div.wrapper.wrapped.lfe-body.header-layout.tiny > div.container > nav').insertAdjacentElement('beforebegin', button);
  643.  
  644. const tb = document.getElementById("NLTB");
  645.  
  646. tb.addEventListener('click', function(){
  647. if(nowurl == 'https://www.luogu.com.cn/'){
  648. swal("Better Luogu!","选择一个更改", {
  649. buttons: {
  650. username: {
  651. text: "颜色",
  652. value: "color",
  653. },
  654. hanger: {
  655. text: "勾子",
  656. value: "hanger",
  657. },
  658. tag: {
  659. text: "tag",
  660. value: "tag",
  661. },
  662. update: {
  663. text: "更新",
  664. value: "update",
  665. },
  666. content: {
  667. text: "内容",
  668. value: "content"
  669. },
  670. zb: {
  671. text: "宣传",
  672. value: "zb"
  673. },
  674. engine: {
  675. text: "搜索引擎",
  676. value: "engine"
  677. },
  678. code: {
  679. text: "缺省源",
  680. value: "code"
  681. },
  682. not: {
  683. text: "千万别点!!!",
  684. value: "not"
  685. }
  686. },
  687. })
  688. .then((value) => {
  689. switch (value){
  690. case "color":
  691. changeusercolor();
  692. break;
  693. case "hanger":
  694. changehanger();
  695. break;
  696. case "tag":
  697. changetag();
  698. break;
  699. case "update":
  700. deletecookie('update');
  701. setcookie('update','true',114514,'/','luogu.com.cn',true);
  702. window.open('https://yx.dahi.edu.eu.org/zh-CN/scripts/487511-better-luogu','_self');
  703. break;
  704. case "content":
  705. update();
  706. break;
  707. case "zb":
  708. zb();
  709. break;
  710. case "engine":
  711. engine();
  712. break;
  713. case "code":
  714. code();
  715. break;
  716. case "not": not();
  717. }
  718. });
  719. }
  720. });
  721. }
  722.  
  723. let nowuid=getcookie('uid');
  724.  
  725. if(nowurl == 'https://www.luogu.com.cn/'){
  726. if(getcookie('hanger')!='null'){
  727. 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;';
  728. 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_);
  729. }
  730. if(getcookie('tag')!=''){
  731. 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;';
  732. 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);
  733. }
  734. $('input[name="user"]').keydown(function(e){
  735. if(e.which===13){
  736. let searchusr=$('input[name="user"]').val();
  737. $.get('https://www.luogu.com.cn/api/user/search?keyword=' + searchusr, {}, function (res) {
  738. var users = res['users'];
  739. if(users[0]!=null){
  740. window.open('https://www.luogu.com.cn/user/'+users[0]['uid'].toString(),'_self');
  741. }
  742. });
  743. }
  744. });
  745. }
  746. else if(nowurl.includes('https://www.luogu.com.cn/user/')&&!nowurl.includes('https://www.luogu.com.cn/user/setting')){
  747. let nowurluid='';
  748. for(let i=0;i<nowurl.length;i++){
  749. if(nowurl[i]>='0'&&nowurl[i]<='9') nowurluid+=nowurl[i];
  750. }
  751. let sm=document.querySelector('#app > div.main-container > main > div > div.full-container > section.main > div > div:nth-child(2)');
  752. if(sm!=null){
  753. if(sm.innerHTML.includes('系统维护,该内容暂不可见。')) sm.remove();
  754. }
  755. let jieshao = document.querySelector('#app > div.main-container > main > div > div.full-container > section.main > div > div.introduction.marked');
  756. if(jieshao!=null){
  757. if(jieshao.style.display == 'none') jieshao.removeAttribute('style');
  758. }
  759. let index=document;
  760. const observer = new MutationObserver((mutations) => {
  761. mutations.forEach((mutation) => {
  762. if (mutation.type === 'attributes'){
  763. let sm=document.querySelector('#app > div.main-container > main > div > div.full-container > section.main > div > div:nth-child(2)');
  764. if(sm!=null){
  765. if(sm.innerHTML.includes('系统维护,该内容暂不可见。')) sm.remove();
  766. }
  767. let jieshao = document.querySelector('#app > div.main-container > main > div > div.full-container > section.main > div > div.introduction.marked');
  768. if(jieshao!=null){
  769. if(jieshao.style.display == 'none') jieshao.removeAttribute('style');
  770. }
  771. }
  772. });
  773. });
  774. const config = {
  775. attributes: true,
  776. characterData: true,
  777. childList: true,
  778. subtree: true,
  779. attributeOldValue: true,
  780. characterDataOldValue: true
  781. };
  782. observer.observe(index,config);
  783. }
  784. else if(nowurl.includes('?contestId=')){
  785. let contestID = "";
  786. let contest = nowurl.toString();
  787. for(let i=contest.length-1;i>=0;i--){
  788. if(!(contest[i]>='0'&&contest[i]<='9')) break;
  789. contestID = contest[i] + contestID;
  790. }
  791. let backlist = 'https://www.luogu.com.cn/contest/'+contestID+'#problems';
  792. let backbtn = document.createElement('a');
  793. backbtn.href = backlist;
  794. backbtn.className = 'color-default';
  795. 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>返回题目列表';
  796. document.querySelector('#app > div.main-container.lside-nav > main > div > div > div.side > div:nth-child(2)').appendChild(br);
  797. document.querySelector('#app > div.main-container.lside-nav > main > div > div > div.side > div:nth-child(2)').appendChild(backbtn);
  798. }
  799. else if(nowurl.includes('https://www.luogu.com.cn/discuss/')||nowurl.includes('https://www.luogu.com/discuss/')){
  800. let discussID = "";
  801. let discuss = nowurl.toString();
  802. for(let i=discuss.length-1;i>=0;i--){
  803. if(!(discuss[i]>='0'&&discuss[i]<='9')) break;
  804. discussID = discuss[i] + discussID;
  805. }
  806. if(discussID != ""){
  807. let dis = document.createElement('a');
  808. dis.href = 'https://lglg.top/'+discussID;
  809. dis.innerHTML = '<button data-v-505b6a97="" data-v-17e7c5b0="" class="solid lform-size-middle" type="button">在保存站打开</button>';
  810. document.querySelector('#app > div.main-container.lside-nav > main > div > div > div.side > div.l-card > div.btn-actions').appendChild(dis);
  811. }
  812. }
  813. else if(nowurl.includes('https://www.luogu.com.cn/chat')){
  814. let index=document;
  815. let once = true;
  816. let menu = document.createElement('button');
  817. menu.className = 'menu';
  818. menu.style.backgroundColor = 'transparent';
  819. menu.style.border = 'none';
  820. menu.style.float = 'right';
  821. 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>';
  822. const observer = new MutationObserver((mutations) => {
  823. mutations.forEach((mutation) => {
  824. if (mutation.type === 'attributes'){
  825. if(once && document.querySelector('#app > div.main-container > main > div > div.card.wrapper.padding-none > div.main > div > div.top-container > div.title')!=null){
  826. once=false;
  827. document.querySelector('#app > div.main-container > main > div > div.card.wrapper.padding-none > div.main > div > div.top-container > div.title').appendChild(menu);
  828. }
  829. }
  830. });
  831. });
  832. const config = {
  833. attributes: true,
  834. characterData: true,
  835. childList: true,
  836. subtree: true,
  837. attributeOldValue: true,
  838. characterDataOldValue: true
  839. };
  840. observer.observe(index,config);
  841. menu.addEventListener('click', function(){
  842. 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;
  843. 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;
  844. let uid='';
  845. for(let i=chatuid.length-1;i>=0;i--){
  846. if(chatuid[i]>='0'&&chatuid[i]<='9') uid=chatuid[i]+uid;
  847. else break;
  848. }
  849. swal("Better Luogu!",chatuser,{
  850. buttons: {
  851. delete: {
  852. text: "清空私信",
  853. value: "delete"
  854. },
  855. quxiao: {
  856. text: "取消",
  857. value: "cancel"
  858. }
  859. }
  860. })
  861. .then((value)=>{
  862. switch(value){
  863. case 'delete':
  864. deleteChat(uid);
  865. break;
  866. }
  867. });
  868. });
  869. }
  870. else if(nowurl.includes('solution')){
  871. document.querySelector('#app > div.main-container.lside-bar > main > div > div > div.side').remove();
  872. let index=document;
  873. const config = {
  874. attributes: true,
  875. characterData: true,
  876. childList: true,
  877. subtree: true,
  878. attributeOldValue: true,
  879. characterDataOldValue: true
  880. };
  881. const observer = new MutationObserver((mutations) => {
  882. mutations.forEach((mutation) => {
  883. if (mutation.type === 'attributes'){
  884. document.querySelector('#app > div.main-container.lside-bar > main > div > div > div.side').remove();
  885. }
  886. });
  887. });
  888. observer.observe(index,config);
  889. }
  890. document.addEventListener('keydown', function(event){
  891. if(event.altKey && event.key == 's'){
  892. if(search.style.display == 'none'){
  893. search.style.display = 'flex';
  894. showMask();
  895. }
  896. else{
  897. search.style.display = 'none';
  898. search_input.value='';
  899. hideMask();
  900. }
  901. }
  902. });
  903. mask.addEventListener('click',function(){
  904. search.style.display = 'none';
  905. search_input.value='';
  906. hideMask();
  907. });
  908. $('input[name="search"]').keydown(function(e){
  909. if(e.which===13){
  910. let sc=$('input[name="search"]').val();
  911. if(sc!=""){
  912. if(getcookie('engine')=='baidu') window.open('https://www.baidu.com/s?wd=' + sc,'_blank');
  913. else if(getcookie('engine')=='google') window.open('https://mirrorgoogle.us.kg/search?q=' + sc,'_blank');
  914. else if(getcookie('engine')=='bing') window.open('https://cn.bing.com/search?q=' + sc,'_blank');
  915. else window.open(getcookie('engine')+'='+sc,'_blank');
  916. }
  917. }
  918. });
  919. 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){
  920. 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);
  921. }
  922. if(nowurl.includes('https://www.luogu.com.cn/problem/')&&nowurl.includes('#ide')){
  923. let sfcode=getcookie('code');
  924. if(sfcode=="1"){
  925. let cgqsy=document.createElement('span');
  926. cgqsy.setAttribute('data-v-db920be0','');
  927. cgqsy.setAttribute('data-v-715ac623','');
  928. cgqsy.innerHTML='<span title="更改缺省源" data-v-db920be0=""><span data-v-715ac623="" data-v-db920be0-s="" class="v-popper--has-tooltip" style="cursor: pointer; margin-left: 0.3em;"><svg data-v-715ac623="" data-v-db920be0-s="" class="svg-inline--fa fa-gear" aria-hidden="true" focusable="false" data-prefix="fas" data-icon="gear" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path class="" fill="currentColor" d="M278.9 511.5l-61-17.7c-6.4-1.8-10-8.5-8.2-14.9L346.2 8.7c1.8-6.4 8.5-10 14.9-8.2l61 17.7c6.4 1.8 10 8.5 8.2 14.9L293.8 503.3c-1.9 6.4-8.5 10.1-14.9 8.2zm-114-112.2l43.5-46.4c4.6-4.9 4.3-12.7-.8-17.2L117 256l90.6-79.7c5.1-4.5 5.5-12.3.8-17.2l-43.5-46.4c-4.5-4.8-12.1-5.1-17-.5L3.8 247.2c-5.1 4.7-5.1 12.8 0 17.5l144.1 135.1c4.9 4.6 12.5 4.4 17-.5zm327.2.6l144.1-135.1c5.1-4.7 5.1-12.8 0-17.5L492.1 112.1c-4.8-4.5-12.4-4.3-17 .5L431.6 159c-4.6 4.9-4.3 12.7.8 17.2L523 256l-90.6 79.7c-5.1 4.5-5.5 12.3-.8 17.2l43.5 46.4c4.5 4.9 12.1 5.1 17 .6z"></path></svg></span></span>';
  929. let codenav=document.querySelector('#app > div.main-container.lside-nav > div > div.panel.panel-b > div > div.panel.panel-a > div.ide-toolbar > div');
  930. codenav.insertBefore(cgqsy,codenav.firstChild);
  931. cgqsy.addEventListener('click',function(){
  932. let nowcode=document.querySelector('#app > div.main-container.lside-nav > div > div.panel.panel-b > div > div.panel.panel-a > div:nth-child(2) > div > div > div.cm-scroller > div.cm-content.cm-lineWrapping').innerHTML;
  933. localStorage.setItem('code', nowcode);
  934. setcookie('code','0',1919810,'/','luogu.com.cn',true);
  935. swal("Better Luogu!","更改成功","success");
  936. cgqsy.remove();
  937. });
  938. }
  939. else{
  940. let nowcode=document.querySelector('#app > div.main-container.lside-nav > div > div.panel.panel-b > div > div.panel.panel-a > div:nth-child(2) > div > div > div.cm-scroller > div.cm-content.cm-lineWrapping').innerHTML;
  941. if(nowcode=='<div class="cm-activeLine cm-line"><br></div>'){
  942. let incode=localStorage.getItem('code');
  943. document.querySelector('#app > div.main-container.lside-nav > div > div.panel.panel-b > div > div.panel.panel-a > div:nth-child(2) > div > div > div.cm-scroller > div.cm-content.cm-lineWrapping').innerHTML=incode;
  944. once=false
  945. }
  946. }
  947. }
  948. }
  949. })();

QingJ © 2025

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