Scale Sankaku Beta

Resizes pics on Sankaku beta to full window size when you touch the left side of the window with your cursor. Uses the Magic Kernel Sharp algorithm for scaling.

2022/02/27のページです。最新版はこちら。

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください。
  1. // ==UserScript==
  2. // @name Scale Sankaku Beta
  3. // @version 0.1.2
  4. // @description Resizes pics on Sankaku beta to full window size when you touch the left side of the window with your cursor. Uses the Magic Kernel Sharp algorithm for scaling.
  5. // @author Octopus Hugger
  6. // @icon https://s2.googleusercontent.com/s2/favicons?domain=https://beta.sankakucomplex.com/
  7. // @grant GM_xmlhttpRequest
  8. // @connect *
  9. // @match *://beta.sankakucomplex.com/*
  10. // @license WTFPL
  11. // @require https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js
  12. // @require https://cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.min.js
  13. // @require https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.2.0/js/bootstrap.min.js
  14. // @require https://cdnjs.cloudflare.com/ajax/libs/lie/3.1.1/lie.min.js
  15. // @require https://cdnjs.cloudflare.com/ajax/libs/pica/9.0.1/pica.min.js
  16. // @namespace https://greasyfork.org/users/879890
  17. // ==/UserScript==
  18.  
  19. // Changelog
  20.  
  21. // 0.1.2
  22. // Updated description and changelog and decreased rate of checking for Imagus.
  23.  
  24. // 0.1.1
  25. // Fixed issue where the feature to always load original after it's been loaded at least once sometimes didn't work.
  26.  
  27. (function() {
  28. 'use strict';
  29. if (window.top != window.self){ //-- Don't run on frames or iframes
  30. return;
  31. }
  32.  
  33. function sleep(ms) {
  34. return new Promise(resolve => setTimeout(resolve, ms));
  35. }
  36.  
  37. function base64img(i){
  38. let canvas = document.createElement('canvas');
  39. canvas.width = i.width;
  40. canvas.height = i.height;
  41. let context = canvas.getContext("2d");
  42. context.drawImage(i, 0, 0);
  43. let blob = canvas.toDataURL("image/png");
  44. return blob;
  45. }
  46.  
  47. function ImgToCanvas(i){
  48. let canvas = document.createElement('canvas');
  49. canvas.width = i.width;
  50. canvas.height = i.height;
  51. let context = canvas.getContext("2d");
  52. context.drawImage(i, 0, 0);
  53. return canvas;
  54. }
  55.  
  56. let resizer;
  57.  
  58.  
  59. let resizer_mode = {
  60. js: true,
  61. wasm: true,
  62. cib: false,
  63. ww: true
  64. };
  65.  
  66. function create_resizer() {
  67. let opts = [];
  68.  
  69. Object.keys(resizer_mode).forEach(function (k) {
  70. if (resizer_mode[k]) opts.push(k);
  71. });
  72.  
  73. resizer = window.pica({ features: opts });
  74. }
  75.  
  76. create_resizer();
  77.  
  78. let cancelactiveresizes;
  79. let cancelresize = new Promise((_, reject) => cancelactiveresizes = reject);
  80.  
  81. let currentpic = "null?"
  82.  
  83. let maindiv = null
  84.  
  85. let savedwidth = null
  86.  
  87. let imagestore = {}
  88.  
  89. let mainimg = null
  90. let towindowsize = false
  91. let mydiv = null
  92. let imgfirstload = true
  93.  
  94. let purgewaittime = 15000
  95.  
  96. function purgeimage(linkvar){
  97. if (currentpic !== linkvar&&linkvar!=inprogress){
  98. delete imagestore[linkvar]
  99. }
  100. else{
  101. imagestore[linkvar+"myexpire"] = setTimeout(purgeimage,purgewaittime,linkvar)
  102. }
  103. }
  104.  
  105.  
  106.  
  107. function resizenow(linkvar,width,height){
  108. cancelactiveresizes();
  109.  
  110. let cancelresize = new Promise((_, reject) => cancelactiveresizes = reject);
  111.  
  112. if(towindowsize){
  113. if (window.innerWidth/imagestore[linkvar].width<window.innerHeight/imagestore[linkvar].height){
  114. height=Math.round(imagestore[linkvar].height*window.innerWidth/imagestore[linkvar].width)
  115. width=window.innerWidth
  116. }
  117. else{
  118. width=Math.round(imagestore[linkvar].width*window.innerHeight/imagestore[linkvar].height)
  119. height=window.innerHeight
  120. }
  121. }
  122.  
  123. let imgbtmp = null
  124.  
  125.  
  126. let imgCanvas = document.createElement("canvas"),
  127. imgContext = imgCanvas.getContext("2d");
  128.  
  129. imgCanvas.width=Math.round(width);
  130. imgCanvas.height=Math.round(height);
  131. imgContext.drawImage(imagestore[linkvar], 0, 0, imgCanvas.width, imgCanvas.height);
  132.  
  133. let options = {cancelToken: cancelresize}
  134.  
  135. let starttime = Date.now()
  136. imagereadout("",width)
  137.  
  138. resizer.resize(imagestore[linkvar], imgCanvas, options)
  139. .then(function () {
  140. imgCanvas.style.zIndex = 2147483648
  141. imgCanvas.style.visibility = "visible";
  142. imgCanvas.style.position="absolute";
  143. imgCanvas.style.pointerEvents="none";
  144. imgCanvas.style["box-shadow"]="0 0 100px black";
  145.  
  146. if(towindowsize){
  147. if(mydiv==null){
  148. mydiv=document.createElement('div')
  149. mydiv.width="100%"
  150. mydiv.height="100%"
  151. }
  152. mydiv.style.top=Math.round(getScrollTop()+window.innerHeight/2-height/2)+"px";
  153. if(bigscreensankaku&&width>=window.innerWidth-280){
  154. mydiv.style.left=Math.round((window.innerWidth-280)/2-width/2+280-(width-(window.innerWidth-280))/2)+"px";
  155. }
  156. else if(bigscreensankaku){
  157. mydiv.style.left=Math.round((window.innerWidth-280)/2-width/2+280)+"px";
  158. }
  159. else{
  160. mydiv.style.left=Math.round(window.innerWidth/2-width/2)+"px";
  161. }
  162. mydiv.id="mydiv"
  163. mydiv.style.boxSizing="content-box"
  164. mydiv.style.zIndex = 2147483648
  165. mydiv.style.visibility = "visible";
  166. mydiv.style.position="absolute";
  167. mydiv.style.pointerEvents="none";
  168. mydiv.style.display = "block"
  169.  
  170. imagereadout("Scaling Complete",width)
  171.  
  172. if(document.getElementById('upscaledimgcanvas2') !== null){
  173. mydiv.replaceChild(imgCanvas,document.getElementById('upscaledimgcanvas2'));
  174. }
  175. else{
  176. document.body.parentNode.insertBefore(mydiv,null);
  177. mydiv.insertBefore(imgCanvas,null);
  178. }
  179. imgCanvas.id="upscaledimgcanvas2";
  180. setlast=2
  181. }
  182. else{
  183. if(document.getElementById('upscaledimgcanvas') !== null){
  184. maindiv.replaceChild(imgCanvas,document.getElementById('upscaledimgcanvas'));
  185. }
  186. else{
  187. maindiv.insertBefore(imgCanvas,maindiv.firstChild);
  188. }
  189. imgCanvas.id="upscaledimgcanvas";
  190. setlast=1
  191. }
  192. inprogress="null?"
  193. currentpic = linkvar
  194. clearTimeout(imagestore[linkvar+"myexpire"])
  195. imagestore[linkvar+"myexpire"]=setTimeout(purgeimage,purgewaittime,linkvar)
  196. })
  197. .catch(function (err) {
  198.  
  199. inprogress="null?"
  200. throw err;
  201. });
  202. }
  203.  
  204. function checkfordiv(){
  205. if (maindiv==null){
  206. let divs = document.getElementsByTagName("div")
  207. for (let div of divs) {
  208. if (div.style.zIndex == 2147483647) {
  209. clearInterval(divchecking)
  210. maindiv = div
  211. resize_ob.observe(maindiv);
  212. }
  213. }
  214. }
  215. }
  216.  
  217.  
  218. function loop(){
  219. if (maindiv.style.display !== "none") {
  220. }
  221. }
  222.  
  223. let downloadstarttime = null
  224. let bigscreensankaku = false
  225. let thingie = null
  226. let inprogressh = null
  227. let inprogressw = null
  228.  
  229. let originalbutton = null
  230.  
  231. let requestcount = 0
  232. let lastinprogress
  233.  
  234. function isCanvas(i) {
  235. return i instanceof HTMLCanvasElement;
  236. }
  237.  
  238. function getSankImageType(linkvar){
  239. if(linkvar==null||linkvar==undefined) return null
  240. if(linkvar.search("preview")!==-1){
  241. return "Thumbnail"
  242. }
  243. else if(linkvar.search("sample")!==-1){
  244. return "Sample"
  245. }
  246. else {
  247. return "Original"
  248. }
  249. }
  250.  
  251. let imagereadoutcount = 0
  252. let readoutlinkvar=null
  253. function imagereadout(inputtext,w,linkvar){
  254. if(linkvar!==null&&linkvar!==undefined&&linkvar!=="null?"){
  255. if(readoutlinkvar!==null&&linkvar!==readoutlinkvar){
  256. return
  257. }
  258. if(inputtext=="Waiting for server"&&getSankImageType(linkvar)=="Original") return
  259. }
  260. if(imagereadoutcount>=50&&inputtext!=="Scaling Complete"){
  261. clearimagereadout()
  262. if(linkvar.search("sankakucomplex.com")!==-1){
  263. imagereadout(getSankImageType(linkvar),w,linkvar)
  264. }
  265. }
  266. imagereadoutcount+=1
  267. let readouttext = document.createElement("readouttext"+imagereadoutcount)
  268. readouttext.id = "readouttext"+imagereadoutcount
  269.  
  270. readouttext.style.pointerEvents="none"
  271. readouttext.style.backgroundColor="black"
  272. readouttext.style.color="white"
  273. readouttext.style["border-style"]="solid"
  274. readouttext.style["border-color"]="black"
  275. readouttext.innerText=inputtext
  276.  
  277.  
  278. if(document.getElementById('readouttext'+imagereadoutcount) !== null){
  279. mydiv.replaceChild(readouttext,document.getElementById('readouttext'+imagereadoutcount))
  280. }
  281. else{
  282. document.getElementById('mydiv').appendChild(readouttext)
  283. }
  284.  
  285. if(w==window.innerWidth||imagereadoutcount>1&&document.getElementById('readouttext'+(imagereadoutcount-1)).offsetLeft>=0){
  286. if(imagereadoutcount>1&&document.getElementById('readouttext'+(imagereadoutcount-1)).offsetLeft<0){
  287. for(let i=1;i<imagereadoutcount;i++){
  288. document.getElementById('readouttext'+i).style.position="relative"
  289. document.getElementById('readouttext'+i).style.top="-20px"
  290. document.getElementById('readouttext'+i).style.left=(3*(i-1)+"px")
  291. }
  292. }
  293. readouttext.style.position="relative"
  294. readouttext.style.top="-20px"
  295. readouttext.style.left=(3*(imagereadoutcount-1)+"px")
  296. }
  297. else{
  298. if(imagereadoutcount>1&&document.getElementById('readouttext'+(imagereadoutcount-1)).offsetLeft>=0){
  299. for(let i=1;i<imagereadoutcount;i++){
  300. document.getElementById('readouttext'+i).style.position="absolute"
  301. let down = 0
  302. for(let u=1;u<i;u++) down+=Math.floor(document.getElementById('readouttext'+u).getBoundingClientRect().height)
  303. document.getElementById('readouttext'+i).style.left="-"+Math.floor(document.getElementById('readouttext'+i).getBoundingClientRect().width)+"px"
  304. document.getElementById('readouttext'+i).style.top=((i-1)*2)+down+"px"
  305. }
  306. }
  307. readouttext.style.position="absolute"
  308. let down = 0
  309. for(let i=1;i<imagereadoutcount;i++) down+=Math.floor(document.getElementById('readouttext'+i).getBoundingClientRect().height)
  310. readouttext.style.left="-"+(Math.floor(readouttext.getBoundingClientRect().width))+"px"
  311. readouttext.style.top=((imagereadoutcount-1)*(2))+down+"px"
  312. }
  313. }
  314.  
  315. function clearimagereadout(){
  316. if (imagereadoutcount>0){
  317. for (let i=1;i<=imagereadoutcount;i++){
  318. document.getElementById('readouttext'+i).setAttribute("style","display:none")
  319. }
  320. imagereadoutcount=0
  321. readoutlinkvar=null
  322. }
  323. }
  324.  
  325. function grabimg_and_resize(linkvar,w,h){
  326.  
  327. if(linkvar!==null &&linkvar!== undefined&&linkvar!== ""&&bigscreensankaku){
  328. if (imagestore[linkvar+"myoriginal"]){
  329. linkvar = imagestore[linkvar+"myoriginal"]
  330. }
  331.  
  332. let linkvarsplit=null
  333.  
  334. if(linkvar.search("sample")!==-1){
  335. linkvarsplit=linkvar.split("-")[1].split(".")[0]
  336. }
  337. else if(linkvar.search("preview")!==-1){
  338. linkvarsplit=linkvar.split("/")[7].split(".")[0]
  339. }
  340. else{
  341. linkvarsplit=linkvar.split("/")[6].split(".")[0]
  342. }
  343.  
  344. let originalfound=false
  345. for(let key in imagestore){
  346. if(key.search("myexpire")==-1&&key.search("myoriginal")==-1&&key.search("preview")==-1){
  347. let keysplit=null
  348. if(key.search("sample")!==-1){
  349. keysplit=key.split("-")[1].split(".")[0]
  350. }
  351. else{
  352. keysplit=key.split("/")[6].split(".")[0]
  353. }
  354. if(key.search("sample")==-1){
  355. if(linkvarsplit==keysplit){
  356. linkvar = key
  357. console.log("found previously saved original key | "+key)
  358. originalfound=true
  359. break
  360. }
  361. }
  362. }
  363. }
  364. if(linkvar.search("sample")==-1&&linkvar.search("preview")==-1){
  365. originalfound=true
  366. }
  367. if(!originalfound){
  368.  
  369. for(let key in imagestore){
  370. if(key.search("myexpire")==-1&&key.search("myoriginal")==-1&&key.search("preview")==-1){
  371. let keysplit=null
  372. if(key.search("sample")!==-1){
  373. keysplit=key.split("-")[1].split(".")[0]
  374. }
  375. else{
  376. keysplit=key.split("/")[6].split(".")[0]
  377. }
  378. if(linkvarsplit==keysplit){
  379. linkvar=key
  380. break
  381. }
  382. }
  383. }
  384. }
  385. }
  386.  
  387. towindowsize=false
  388. if (bigscreensankaku||w<window.innerWidth && h<window.innerHeight && w==mainimg.naturalWidth || w<window.innerWidth && h<window.innerHeight && w>window.innerWidth-30 || w<window.innerWidth && h<window.innerHeight && h>window.innerHeight-30||bigscreensankaku){
  389.  
  390. if (window.innerWidth/w<window.innerHeight/h){
  391. h=Math.round(h*window.innerWidth/w)
  392. w=window.innerWidth
  393. }
  394. else{
  395. w=Math.round(w*window.innerHeight/h)
  396. h=window.innerHeight
  397. }
  398. towindowsize = true
  399. }
  400. if(linkvar!==null &&linkvar!== undefined&&linkvar!== ""&&linkvar.split("?")[0]==inprogress.split("?")[0]&&inprogressh==h&&inprogressw==w){
  401. }
  402. else if (linkvar==currentpic&&inprogressh==h&&inprogressw==w){
  403. if(document.getElementById('mydiv')==null){
  404. mydiv=document.createElement('div')
  405. mydiv.width="100%"
  406. mydiv.height="100%"
  407. }
  408. else{
  409. mydiv = document.getElementById('mydiv')
  410. if(document.getElementById('upscaledimgcanvas2')){
  411. w=document.getElementById('upscaledimgcanvas2').width
  412. h=document.getElementById('upscaledimgcanvas2').height
  413. }
  414. }
  415. mydiv.style.top=Math.round(getScrollTop()+window.innerHeight/2-h/2)+"px";
  416. if(bigscreensankaku&&w>=window.innerWidth-280){
  417. mydiv.style.left=Math.round((window.innerWidth-280)/2-w/2+280-(w-(window.innerWidth-280))/2)+"px";
  418. }
  419. else if(bigscreensankaku){
  420. mydiv.style.left=Math.round((window.innerWidth-280)/2-w/2+280)+"px";
  421. }
  422. else{
  423. mydiv.style.left=Math.round(window.innerWidth/2-w/2)+"px";
  424. }
  425. mydiv.id="mydiv"
  426. if(document.getElementById('mydiv') !== null){
  427. if(setlast==2){
  428. document.getElementById('mydiv').setAttribute("style","display: block;visibility: visible;z-index: 2147483647;box-sizing: content-box;position: absolute;pointer-events: none;top:"+document.getElementById('mydiv').style.top+";left:"+document.getElementById('mydiv').style.left+";")
  429.  
  430. document.getElementById('mydiv').style.top=Math.floor(getScrollTop()+window.innerHeight/2-h/2)+"px";
  431. }
  432. }
  433. if(document.getElementById('upscaledimgcanvas') !== null){
  434. if(setlast==1){
  435. document.getElementById('upscaledimgcanvas').setAttribute("style","z-index: 2147483647;display:block;position:absolute;visibility:visible;")
  436. }
  437. }
  438. }
  439. else{
  440.  
  441. if(linkvar!==null &&linkvar!== undefined&&linkvar!== ""){
  442.  
  443. if(linkvar.search(".mp4")==-1&&linkvar.search(".webm")==-1&&linkvar.search(".flv")==-1){
  444.  
  445. if(inprogress.split("?")[0]!== linkvar.split("?")[0]){
  446. cancelactiveresizes();
  447.  
  448. if(linkvar.search("sankakucomplex.com")!==-1){
  449. let linkvarsplit
  450. if(linkvar.search("sample")!==-1){
  451. linkvarsplit=linkvar.split("-")[1].split(".")[0]
  452. }
  453. else if(linkvar.search("preview")!==-1){
  454. linkvarsplit=linkvar.split("/")[7].split(".")[0]
  455. }
  456. else{
  457. linkvarsplit=linkvar.split("/")[6].split(".")[0]
  458. }
  459. let lastinprogresssplit
  460. if(lastinprogress&&lastinprogress!=="null?"){
  461. if(lastinprogress.search("sample")!==-1){
  462. lastinprogresssplit=lastinprogress.split("-")[1].split(".")[0]
  463. }
  464. else if(lastinprogress.search("preview")!==-1){
  465. lastinprogresssplit=lastinprogress.split("/")[7].split(".")[0]
  466. }
  467. else{
  468. lastinprogresssplit=lastinprogress.split("/")[6].split(".")[0]
  469. }
  470. }
  471. }
  472.  
  473. if(towindowsize){
  474. let tempimage = document.createElement('img');
  475. tempimage.setAttribute("src", linkvar);
  476. tempimage.width = Math.round(w)
  477. tempimage.height = Math.round(h)
  478.  
  479. tempimage.style.zIndex = 2147483648
  480. tempimage.style.visibility = "visible";
  481. tempimage.style.position="absolute";
  482. tempimage.style.pointerEvents="none";
  483. tempimage.style["box-shadow"]="0 0 100px black";
  484.  
  485. if(document.getElementById('mydiv')==null){
  486. mydiv=document.createElement('div')
  487. mydiv.width="100%"
  488. mydiv.height="100%"
  489. }
  490. else{
  491. mydiv = document.getElementById('mydiv')
  492. }
  493. mydiv.style.top=Math.round(getScrollTop()+window.innerHeight/2-h/2)+"px";
  494. if(bigscreensankaku&&w>=window.innerWidth-280){
  495. mydiv.style.left=Math.round((window.innerWidth-280)/2-w/2+280-(w-(window.innerWidth-280))/2)+"px";
  496. }
  497. else if(bigscreensankaku){
  498. mydiv.style.left=Math.round((window.innerWidth-280)/2-w/2+280)+"px";
  499. }
  500. else{
  501. mydiv.style.left=Math.round(window.innerWidth/2-w/2)+"px";
  502. }
  503. mydiv.id="mydiv"
  504. mydiv.style.boxSizing="content-box"
  505. mydiv.style.zIndex = 2147483648
  506. mydiv.style.visibility = "visible";
  507. mydiv.style.position="absolute";
  508. mydiv.style.pointerEvents="none";
  509. mydiv.style.display = "block"
  510. if(document.getElementById('mydiv')==null){
  511. document.body.parentNode.insertBefore(mydiv,null);
  512. }
  513. if(document.getElementById('upscaledimgcanvas2') !== null){
  514. mydiv.replaceChild(tempimage,document.getElementById('upscaledimgcanvas2'));
  515. }
  516. else{
  517. mydiv.insertBefore(tempimage,null)
  518. }
  519. tempimage.id="upscaledimgcanvas2";
  520.  
  521. clearimagereadout()
  522.  
  523. if(linkvar.search("sankakucomplex.com")!==-1){
  524. imagereadout(getSankImageType(linkvar),w,linkvar)
  525. }
  526. }
  527.  
  528.  
  529. lastinprogress=linkvar
  530. inprogress = linkvar
  531. inprogressh=h
  532. inprogressw=w
  533.  
  534.  
  535.  
  536. function loadFailed(){
  537. imagereadout("Failed to load image",w)
  538. }
  539.  
  540. if(linkvar.search(".gif")==-1){
  541. if (imagestore[linkvar]==null||imagestore[linkvar]==undefined){
  542. requestcount+=1
  543. let startsource = linkvar
  544. let starttime = Date.now()
  545. downloadstarttime = Date.now()
  546. setTimeout(function() {
  547. imgfirstload = true
  548. GM_xmlhttpRequest({
  549. method: 'GET',
  550. url: startsource,
  551. responseType: 'blob',
  552. onload: function(resp) {
  553. imagereadout("",w,linkvar)
  554. starttime = Date.now()
  555. if (resp.response.type !== "image/gif"){
  556. const img = new Image()
  557. img.onload = (event) => {
  558. URL.revokeObjectURL(event.target.src)
  559. imagestore[startsource] = document.createElement("canvas")
  560. imagestore[startsource].width = img.width
  561. imagestore[startsource].height = img.height
  562. let ctx = imagestore[startsource].getContext("2d")
  563. ctx.drawImage(event.target, 0, 0)
  564. imagestore[startsource+"myexpire"]=setTimeout(purgeimage,purgewaittime,startsource)
  565. if(mainimg!==null&&mainimg!==undefined){
  566. if(startsource == mainimg.src && w!==imagestore[startsource].width) {
  567. resizenow(linkvar,w,h);
  568. }
  569. else inprogress="null?"
  570. }
  571. if(thingie!==null){
  572. if(startsource==thingie.src&&bigscreensankaku) {
  573. resizenow(linkvar,w,h);
  574. }
  575. else inprogress="null?"
  576. }
  577. }
  578. img.src = URL.createObjectURL(resp.response)
  579. }
  580. },
  581. onerror: loadFailed,
  582. onabort: loadFailed,
  583. onprogress: function(){
  584. imagereadout("",w,linkvar)
  585. },
  586. onloadstart: function(){
  587. starttime = Date.now()
  588. imagereadout("",w,linkvar)
  589. }
  590. });
  591. }, 0);
  592. }
  593. else {
  594. resizenow(linkvar,w,h);
  595. }
  596. }
  597. else {
  598. imagereadout("HQ Gif Scaling Not Supported")
  599. inprogress="null?"
  600. }
  601. }
  602. }
  603.  
  604. else{
  605. cancelactiveresizes();
  606. if(document.getElementById('mydiv') !== null){
  607. if(document.getElementById('mydiv').style.display !== "none"){
  608. document.getElementById('mydiv').setAttribute("style","display:none;top:"+document.getElementById('mydiv').style.top+";left:"+document.getElementById('mydiv').style.left+";")
  609. }
  610. }
  611. if(document.getElementById('upscaledimgcanvas') !== null){
  612. if(document.getElementById('upscaledimgcanvas').style.display !== "none" && document.getElementById('upscaledimgcanvas').style.display !== null){
  613. document.getElementById('upscaledimgcanvas').setAttribute("style","display:none;top:"+document.getElementById('upscaledimgcanvas').style.top+";left:"+document.getElementById('upscaledimgcanvas').style.left+";")
  614. }
  615. }
  616. }
  617.  
  618. }
  619. else{
  620. cancelactiveresizes();
  621. if(document.getElementById('mydiv') !== null){
  622. if(document.getElementById('mydiv').style.display !== "none"){
  623. document.getElementById('mydiv').setAttribute("style","display:none;top:"+document.getElementById('mydiv').style.top+";left:"+document.getElementById('mydiv').style.left+";")
  624. }
  625. }
  626. if(document.getElementById('upscaledimgcanvas') !== null){
  627. if(document.getElementById('upscaledimgcanvas').style.display !== "none" && document.getElementById('upscaledimgcanvas').style.display !== null){
  628. document.getElementById('upscaledimgcanvas').setAttribute("style","display:none;top:"+document.getElementById('upscaledimgcanvas').style.top+";left:"+document.getElementById('upscaledimgcanvas').style.left+";")
  629. }
  630. }
  631. }
  632. }
  633.  
  634. }
  635.  
  636. const resize_ob = new ResizeObserver(function(entries) {
  637. if(bigscreensankaku==false){
  638. cancelactiveresizes();
  639.  
  640. let rect = entries[0].contentRect;
  641.  
  642. let w = rect.width;
  643. let h = rect.height;
  644.  
  645. if(document.getElementById('upscaledimgcanvas') !== null){
  646. document.getElementById('upscaledimgcanvas').setAttribute("style","display:none;top:"+document.getElementById('upscaledimgcanvas').style.top+";left:"+document.getElementById('upscaledimgcanvas').style.left+";")
  647. }
  648. if(document.getElementById('upscaledimgcanvas2') !== null){
  649. document.getElementById('mydiv').setAttribute("style","display:none;top:"+document.getElementById('mydiv').style.top+";left:"+document.getElementById('mydiv').style.left+";")
  650. }
  651.  
  652. if (h !== 0){
  653. if(mainimg == null){
  654. function checkforimg(input){
  655. for (let elem of input){
  656. if (elem.nodeName.toLowerCase() == "img") {
  657. return elem;
  658. }
  659. }
  660. return "wtf didn't find img"
  661. }
  662. mainimg = checkforimg(Array.from(maindiv.children))
  663. mainimg.style.position="relative";
  664. mainimg.style.zIndex=2147483646
  665. }
  666.  
  667. grabimg_and_resize(mainimg.src,w,h)
  668. }
  669. }
  670. });
  671.  
  672. let divchecking = setInterval(checkfordiv,300)
  673.  
  674. function getScrollTop() {
  675. if (typeof window.pageYOffset !== "undefined" ) {
  676. return window.pageYOffset;
  677. }
  678.  
  679. let d = document.documentElement;
  680. if (typeof d.clientHeight !== "undefined") {
  681. return d.scrollTop;
  682. }
  683.  
  684. return document.body.scrollTop;
  685. }
  686. let lastthingietop = null
  687. let setlast = 0
  688. let thingietop = null
  689. let inprogress = "null?"
  690.  
  691. const sankobservob = new MutationObserver(function(mutationsList, observer){
  692.  
  693. if (bigscreensankaku){
  694. for (let elem of document.getElementsByClassName("swiper-slide swiper-slide-active")){
  695. if (elem.className.endsWith("active")){
  696.  
  697. thingietop = elem
  698. thingie = elem.firstChild.firstChild.firstChild.firstChild
  699. if(thingie!==null&&thingie!==undefined){
  700. sankobservob.disconnect()
  701. sankobservob.observe(thingietop, {attributes: true});
  702. psankobservob.disconnect()
  703. psankobservob.observe(thingie, {attributes: true, attributeOldValue: true});
  704. grabimg_and_resize(thingie.src,thingie.naturalWidth,thingie.naturalHeight)
  705. break
  706. }
  707. }
  708. }
  709. lastthingietop = thingietop
  710. }
  711. })
  712.  
  713. const psankobservob = new MutationObserver(function(mutationsList, observer){
  714. for(const mutation of mutationsList) {
  715. if (mutation.type=='attributes'&&mutation.attributeName=="src"&&bigscreensankaku&&thingietop.firstChild.firstChild.firstChild.firstChild==thingie){
  716. if(mutation.oldValue!==null&&mutation.oldValue!==undefined){
  717. if (mutation.oldValue.search("sample")!==-1||mutation.oldValue.search("preview")!==-1){
  718. if(thingie.src.search("sample")==-1&&thingie.src.search("preview")==-1){
  719. imagestore[mutation.oldValue+"myoriginal"] = thingie.src
  720. }
  721. }
  722. }
  723. grabimg_and_resize(thingie.src,thingie.naturalWidth,thingie.naturalHeight)
  724. }
  725.  
  726. }
  727. })
  728.  
  729. const buttonob = new MutationObserver(function(){
  730. originalbutton.click();
  731. })
  732.  
  733. document.addEventListener('keydown', function (zEvent) {
  734. if (zEvent.key == "m"){
  735. if(document.getElementById('mydiv') !== null){
  736. if(document.getElementById('mydiv').style.display !== "none"){
  737. document.getElementById('mydiv').setAttribute("style","display:none;top:"+document.getElementById('mydiv').style.top+";left:"+document.getElementById('mydiv').style.left+";")
  738. setlast = 2
  739. }
  740. else if(setlast==2){
  741. document.getElementById('mydiv').setAttribute("style","display: block;visibility: visible;z-index: 2147483647;box-sizing: content-box;position: absolute;pointer-events: none;top:"+document.getElementById('mydiv').style.top+";left:"+document.getElementById('mydiv').style.left+";")
  742. }
  743. }
  744. if(document.getElementById('upscaledimgcanvas') !== null){
  745. if(document.getElementById('upscaledimgcanvas').style.display !== "none" && document.getElementById('upscaledimgcanvas').style.display !== null){
  746. document.getElementById('upscaledimgcanvas').setAttribute("style","display:none;top:"+document.getElementById('upscaledimgcanvas').style.top+";left:"+document.getElementById('upscaledimgcanvas').style.left+";")
  747. setlast = 1
  748. }
  749. else if(setlast==1){
  750. document.getElementById('upscaledimgcanvas').setAttribute("style","z-index: 2147483647;display:block;position:absolute;visibility:visible;")
  751. }
  752. }
  753. }
  754. else if (zEvent.key == "n"){
  755. bigscreensankaku = !bigscreensankaku
  756.  
  757. if (bigscreensankaku){
  758. for (let elem of document.getElementsByClassName("swiper-slide swiper-slide-active")){
  759. if (elem.className.endsWith("active")){
  760. thingietop = elem
  761. thingie = elem.firstChild.firstChild.firstChild.firstChild
  762. if(thingie!==null&&thingie!==undefined){
  763. sankobservob.disconnect()
  764. sankobservob.observe(thingietop, {attributes: true});
  765. psankobservob.disconnect()
  766. psankobservob.observe(thingie, {attributes: true, attributeOldValue: true});
  767. grabimg_and_resize(thingie.src)
  768. break
  769. }
  770. }
  771. }
  772. }
  773. else{
  774. psankobservob.disconnect()
  775. sankobservob.disconnect()
  776. }
  777. if(document.getElementById('mydiv') !== null){
  778. if(document.getElementById('mydiv').style.display !== "none"){
  779. document.getElementById('mydiv').setAttribute("style","display:none;top:"+document.getElementById('mydiv').style.top+";left:"+document.getElementById('mydiv').style.left+";")
  780. }
  781. }
  782. }
  783. else if(zEvent.key == "0"){
  784. imagereadout("Waiting for server",null,inprogress!=="null?"?inprogress:currentpic)
  785. let originalsearch = document.getElementsByName("post_mode")
  786. if(originalsearch){
  787. for (let i = 0; i < originalsearch.length; i++) {
  788. if(originalsearch[i].getAttribute("value") == "original"){
  789. if(window.getComputedStyle(originalsearch[i]).getPropertyValue('color') !== "rgb(255, 140, 0)") {
  790. originalsearch[i].click();
  791. originalbutton = originalsearch[i]
  792. let textsearch =document.getElementsByClassName('MuiTypography-root')
  793. }
  794. }
  795. }
  796. }
  797. }
  798. });
  799.  
  800. let leftareasize = 20
  801. document.addEventListener('click', function (e) {
  802. if (e.button==0&&e.mozInputSource==1&&e.pageX <=leftareasize&&window.location.href.includes("/post/")){
  803. let listofel = document.getElementsByClassName("MuiButtonBase-root MuiFab-root")
  804. if(listofel){
  805.  
  806. for (let i = 0; i < listofel.length; i++) {
  807. if(listofel[i].getAttribute("aria-label") == "Prev"){
  808. listofel[i].click();
  809. break
  810. }
  811. }
  812. }
  813. }
  814. });
  815.  
  816. document.addEventListener('mousemove', e => {
  817. if(window.location.href.includes("https://beta.sankakucomplex.com")){
  818. if (e.pageX <=leftareasize&&!bigscreensankaku&&window.location.href.includes("/post/")){
  819. bigscreensankaku = !bigscreensankaku
  820.  
  821. if (bigscreensankaku){
  822. for (let elem of document.getElementsByClassName("swiper-slide swiper-slide-active")){
  823. if (elem.className.endsWith("active")){
  824. thingietop = elem
  825. thingie = elem.firstChild.firstChild.firstChild.firstChild
  826. if(thingie!==null&&thingie!==undefined){
  827. sankobservob.disconnect()
  828. sankobservob.observe(thingietop, {attributes: true});
  829. psankobservob.disconnect()
  830. psankobservob.observe(thingie, {attributes: true, attributeOldValue: true});
  831. grabimg_and_resize(thingie.src,thingie.naturalWidth,thingie.naturalHeight)
  832. }
  833. }
  834. }
  835. }
  836. }
  837. else if(e.pageX >leftareasize&&bigscreensankaku){
  838. bigscreensankaku = !bigscreensankaku
  839. cancelactiveresizes();
  840. psankobservob.disconnect()
  841. sankobservob.disconnect()
  842. if(document.getElementById('mydiv') !== null){
  843. if(document.getElementById('mydiv').style.display !== "none"){
  844. document.getElementById('mydiv').setAttribute("style","display:none;top:"+document.getElementById('mydiv').style.top+";left:"+document.getElementById('mydiv').style.left+";")
  845. }
  846. }
  847. }
  848. }
  849. });
  850. })();