├── .github └── ISSUE_TEMPLATE │ ├── -bug-request--support-for-website-x.md │ ├── question---other.md │ └── suggestion.md ├── HandyImage.user.js ├── README.md ├── Tutorial - adding new imagehosts support.md └── Tutorial - disable script for specific websites.md /.github/ISSUE_TEMPLATE/-bug-request--support-for-website-x.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "[BUG\\REQUEST] support for a website" 3 | about: Report about some website stopping working or request new website support 4 | title: support for a website 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Example links to pages with a single image to fullsize: ** 11 | 12 | - 13 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/question---other.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Question \ Other 3 | about: Question \ Other 4 | title: '' 5 | labels: question 6 | assignees: '' 7 | 8 | --- 9 | 10 | 11 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/suggestion.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Suggestion 3 | about: Suggest an idea \ Request a feature 4 | title: "[Suggestion] - " 5 | labels: suggestion 6 | assignees: '' 7 | 8 | --- 9 | 10 | 11 | -------------------------------------------------------------------------------- /HandyImage.user.js: -------------------------------------------------------------------------------- 1 | // ==UserScript== 2 | // @name Handy Image 3 | // @version 2025.06.03 4 | // @author Owyn 5 | // @contributor ubless607, bitst0rm 6 | // @namespace handyimage 7 | // @description Shows just fullsize Image with hotkeys & without pop-ups on many image-hosting sites 8 | // @updateURL https://github.com/Owyn/HandyImage/raw/master/HandyImage.user.js 9 | // @downloadURL https://github.com/Owyn/HandyImage/raw/master/HandyImage.user.js 10 | // @homepage https://github.com/Owyn/HandyImage 11 | // @supportURL https://github.com/Owyn/HandyImage/issues 12 | // @icon https://i.ibb.co/Xk4vsrTT/Handy.png 13 | // @run-at document-start 14 | // @grant GM.getValue 15 | // @grant GM.setValue 16 | // @grant GM_registerMenuCommand 17 | // @grant GM_unregisterMenuCommand 18 | // @grant GM_getValue 19 | // @grant GM_setValue 20 | // @grant GM_download 21 | // @grant GM_addElement 22 | // @grant unsafeWindow 23 | // @sandbox JavaScript 24 | // @compatible Chrome 25 | // @compatible Firefox 26 | // @match https://www.imagebam.com/image/* 27 | // @match https://www.imagebam.com/view/* 28 | // @match http://imgchili.net/show* 29 | // @match *://imgbox.com/* 30 | // @match *://*.imagetwist.com/* 31 | // @match *://imagexport.com/* 32 | // @match https://*.imagevenue.com/* 33 | // @match *://*.imageshack.com/i/* 34 | // @match *://*.imageshack.com/f/* 35 | // @match *://*.image2you.ru/*/*/ 36 | // @exclude *://image2you.ru/cabinet/* 37 | // @exclude *://www.image2you.ru/cabinet/* 38 | // @match https://imageban.ru/show* 39 | // @match *://fastpic.ru/view* 40 | // @match *://fastpic.ru/fullview* 41 | // @match https://fastpic.org/view/* 42 | // @match https://fastpic.org/fullview/* 43 | // @match *://pixhost.to/show/* 44 | // @match http://*.picpicture.com/image/* 45 | // @match http://*.pic5you.ru/*/*/ 46 | // @match http://*.tinypic.com/view* 47 | // @match http://radical-foto.ru/* 48 | // @match http://radikal-foto.ru/* 49 | // @match https://radikal.ru/* 50 | // @exclude https://radikal.ru/video/* 51 | // @match http://f-page.ru/* 52 | // @match http://f-picture.net/* 53 | // @match https://*.pimpandhost.com/image* 54 | // @match https://*.pixroute.com/*/* 55 | // @match https://*.picforall.ru/*/*/ 56 | // @match *://*.imagecurl.com/view* 57 | // @match *://*.imagecurl.org/view* 58 | // @match http://*.euro-pic.eu/*share* 59 | // @match http://*.xxxhost.me/view* 60 | // @match http://*.imadul.com/?* 61 | // @match *://postimg.org/image/* 62 | // @match *://postimg.cc/* 63 | // @match http://*.niceimage.pl/*.html 64 | // @match http://*.pics-money.ru/* 65 | // @match http://*.freeimgup.com/*.* 66 | // @match http://imgtiger.com/view* 67 | // @match https://*.imgspice.com/*/* 68 | // @match http://*.picage.ru/*/* 69 | // @match http://*.imgserve.net/img* 70 | // @match http://*.images-host.biz/*/* 71 | // @match http://*.imgfantasy.com/* 72 | // @match http://*.platimzafoto.ru/full/ 73 | // @match http://*.platimzafoto.ru/*.html 74 | // @match http://imgdino.com/view* 75 | // @match http://*.pic-money.ru/*.html 76 | // @match http://*.pic-money.ru/full/ 77 | // @match http://*.imgcandy.net/img* 78 | // @match http://*.imagefolks.com/img* 79 | // @match *://*.pzy.be/v* 80 | // @match https://www.turboimagehost.com/p* 81 | // @match http://*.subirimagenes.com/*.html 82 | // @match http://*.screenlist.ru/details.php?image_id=* 83 | // @match http://qrrro.com/images* 84 | // @match http://imgmade.com/images* 85 | // @match http://www.pic-upload.de/view* 86 | // @match http://picshare.geenza.com/pics* 87 | // @match https://www.imgbabes.com/*/*.htm* 88 | // @match http://ibunker.us/f* 89 | // @match http://ichan.org/image.php?path=* 90 | // @match http://*.imagearn.com/* 91 | // @match http://www.dumppix.com/view* 92 | // @match http://www.bilder-upload.eu/show* 93 | // @match http://www.bilder-hochladen.net/file* 94 | // @match http://www.bild.me/bild.php?* 95 | // @match *://www.imagesnake.com/show* 96 | // @match *://www.imagesnake.com/img* 97 | // @match *://www.imagesnake.com/view* 98 | // @match http://www.imagesnake.org/show* 99 | // @match http://www.imagesnake.org/img* 100 | // @match http://www.imagesnake.org/view* 101 | // @match https://www.freebunker.com/show* 102 | // @match https://www.freebunker.com/img* 103 | // @match https://www.freebunker.com/view* 104 | // @match http://bayimg.com/* 105 | // @match http://*.directupload.net/file* 106 | // @match http://*.imagecherry.com/* 107 | // @match https://funkyimg.com/view* 108 | // @match http://*.abload.de/image.php?* 109 | // @match http://*.picfox.org/share* 110 | // @match http://*.pixup.us/img-* 111 | // @match http://*.imagecarry.com/*/* 112 | // @match http://*.imagedunk.com/*/* 113 | // @match http://*.imageswitch.com/*/* 114 | // @match http://*.piclambo.net/*/* 115 | // @match http://*.picleet.com/*/* 116 | // @match http://*.yankoimages.net/*/* 117 | // @match http://*.picturedip.com/*/* 118 | // @match https://*.imagedecode.com/img-* 119 | // @match https://*.imagefruit.com/img* 120 | // @match https://*.imagefruit.com/show* 121 | // @match https://*.miragepics.com/view* 122 | // @match http://*.freeimagehosting.net/* 123 | // @match http://*.keptarolo.hu/* 124 | // @match http://www.uploadhouse.com/view* 125 | // @match http://*.dumpt.com/img/view* 126 | // @match http://imagezilla.net/show/* 127 | // @match https://*.imageup.ru/img* 128 | // @match http://*.casimages.com/photos/*/*/* 129 | // @match http://*.casimages.com/img* 130 | // @match http://*.cyberpics.net/p* 131 | // @match *://vvcap.com/* 132 | // @match https://*.freeimage.us/share* 133 | // @match http://*.pix-x.net/*/* 134 | // @match http://*.shareimages.com/image* 135 | // @match http://www.xtremeshack.com/image/* 136 | // @match http://*.mrjh.org/gallery.php?entry=* 137 | // @match http://*.itmages.ru/image/view* 138 | // @match http://shrani.najdi.si/* 139 | // @match http://*.iv.pl/view* 140 | // @match http://*.image18.org/show/* 141 | // @match http://*.pic4you.ru/* 142 | // @match http://picload.org/view* 143 | // @match http://*.thebestpichost.com/picture/* 144 | // @match *://*.lostpic.net/image/* 145 | // @match http://subefotos.com/ver/* 146 | // @exclude http://subefotos.com/ver/*#codigos 147 | // @match http://*.pixsor.com/share* 148 | // @match http://*.pixsor.com/XXX/share* 149 | // @match http://*.image-share.com/i*html 150 | // @match http://*.npicture.net/share-* 151 | // @match http://*.overpic.net/view* 152 | // @match http://*.imagecross.com/* 153 | // @match http://*.mojoimage.com/* 154 | // @match http://www.use.com/* 155 | // @match http://www.hostingpics.net/view* 156 | // @match http://*.pictureshoster.com/view* 157 | // @match http://*.imageshost.ru/photo* 158 | // @match http://*.imagestime.com/show* 159 | // @match http://sharenxs.com/view* 160 | // @match http://sharenxs.com/gallery/*/* 161 | // @match http://img4.imagetitan.com/img* 162 | // @match *://*.imagenpic.com/* 163 | // @match http://*.stuffed.ru/images* 164 | // @match http://*.wstaw.org/w/* 165 | // @match http://www.imagesocket.com/photos* 166 | // @match http://www.imagesocket.com/social* 167 | // @match http://imageban.net/show* 168 | // @match http://*.otofotki.pl/* 169 | // @match http://*.imgsin.com/view* 170 | // @match http://*.imagenetz.de/* 171 | // @match http://pix.toile-libre.org/?img* 172 | // @match *://servimg.com/view/* 173 | // @match http://*.upix.me/files/* 174 | // @match http://*.upix.me/i/v/?q=* 175 | // @match http://*.pixelup.net/image* 176 | // @match http://*.pixelup.net/image* 177 | // @match http://*.picsee.net/* 178 | // @match http://www.fotosik.pl/pokaz_obrazek/pelny* 179 | // @match https://*.depic.me/* 180 | // @match http://www.xup.in/dl* 181 | // @match http://*.hotchyx.com/d* 182 | // @match http://*.imageupper.com/i/* 183 | // @match *://beeimg.com/view* 184 | // @match http://www.noelshack.com/*.* 185 | // @match http://www.turbopix.fr/v/* 186 | // @match http://thumbsnap.com/* 187 | // @match http://deffe.com/image/* 188 | // @match http://*.imageno.com/*.html 189 | // @match http://*.imagehousing.com/image* 190 | // @match http://www.picfront.org/d/* 191 | // @match http://*.imagehost.thasnasty.com/?* 192 | // @match http://*.imagilive.com/*.htm* 193 | // @match http://*.picturevip.com/* 194 | // @exclude http://*.picturevip.com/x/clean/ 195 | // @match http://img.3ezy.net/*.htm 196 | // @match http://*.xximg.net/img-* 197 | // @match http://*.zaslike.com/view* 198 | // @match http://www.zimagez.com/zimage* 199 | // @match http://*.pictureturn.com/*.html 200 | // @match http://*.cubeupload.com/im/* 201 | // @match http://www.photo-host.org/view-image/* 202 | // @match http://www.fotoszok.pl/show* 203 | // @match http://*.imglink.ru/show* 204 | // @match http://zapodaj.net/*.html 205 | // @match http://www.pixic.ru/view* 206 | // @match http://www.imagesup.de/picture.php?code=* 207 | // @match https://www.pornbus.org/show* 208 | // @match http://www.bilder-space.de/bild-* 209 | // @match *://www.imgcarry.com/show* 210 | // @match http://*.saveimg.ru/show* 211 | // @match http://www.fotos-hochladen.net/view* 212 | // @match http://simplest-image-hosting.net/* 213 | // @match http://jpegbay.com/gallery/*.html 214 | // @match https://www.hostpic.org/view* 215 | // @match *://imagik.fr/image/* 216 | // @match http://www.image-load.net/show* 217 | // @match http://*.sxpics.nl/img-* 218 | // @match http://*.gallerycloud.net/image/* 219 | // @match http://tryimg.com/image/* 220 | // @match http://bilder.nixhelp.de/display-* 221 | // @match http://*.funextra.hostzi.com/view* 222 | // @match http://*.freakimage.com/view* 223 | // @match http://*.fotoo.pl/show.php?img=*.html 224 | // @match http://*.rapid-img.de/img.php?f=* 225 | // @match http://*.upload.djmaster.fr/?v=* 226 | // @match http://img.pereslavl.ru/share* 227 | // @match http://*.dwimg.com/view* 228 | // @match http://www.imageurlhost.com/view* 229 | // @match http://*.imagesup.net/* 230 | // @match http://*.superkipje.com/view* 231 | // @match https://*.2i.sk/i/* 232 | // @match https://imgadult.com/img-* 233 | // @match http://imagebic.com/?v=* 234 | // @match http://www.picshot.pl/public/view* 235 | // @match http://*.imagesmax.de/display-* 236 | // @match http://*.ifotos.pl/zobacz/* 237 | // @match http://www.zimage.fr/photo.php?id=* 238 | // @match http://www.zimage.fr/taillereel.php?id=* 239 | // @match http://ngarko.online.fr/view* 240 | // @match http://*.b4he.com/?v=* 241 | // @match http://*.oxily.com/?* 242 | // @match http://ghanaimages.co/?* 243 | // @match http://*.imgplus.info/view* 244 | // @match http://firepic.org/?v=* 245 | // @match http://savepic.org/*.htm 246 | // @match http://*.fastimages.ru/p* 247 | // @match http://ipic.su/?page=img&pic=* 248 | // @match http://*.jpegshare.net/*.html 249 | // @match http://*.overdream.cz/* 250 | // @match http://*.fastpics.net/?v=* 251 | // @match http://www.ii4.ru/image-* 252 | // @match http://*.picuploader.de/* 253 | // @match http://*.rupict.ru/share* 254 | // @match http://bildr.no/view* 255 | // @match http://www.subeimagenes.com/img* 256 | // @match http://screenshot.ru/* 257 | // @match http://*.hostpix.de/show.php?img* 258 | // @match http://*.freeuploadimages.org/view* 259 | // @match http://smages.com/?v=* 260 | // @match https://*.hostingkartinok.com/show-image.php?id=* 261 | // @match http://*.4put.ru/*max* 262 | // @match http://www.pictureshack.ru/view* 263 | // @match http://*.host99.byethost4.com/share.php?id=* 264 | // @match http://*.eazypics.net/share* 265 | // @match http://xtupload.com/share.php?id=* 266 | // @match http://t.williamgates.net/share* 267 | // @match *://photosex.biz/v.php?id=* 268 | // @match http://*.imageteam.org/img-* 269 | // @match http://*.hostimage.ru/photo* 270 | // @match http://www.loaditup.de/*.html 271 | // @match http://*.imgbox.de/show/img* 272 | // @match http://*.picszone.net/view* 273 | // @match http://*.images.share-films.net/view* 274 | // @match http://www.uploadking.biz/show* 275 | // @match http://foto.xhost.lv/show.php?img=* 276 | // @match http://*.imagefile.org/view* 277 | // @match http://*.onimage.net/show* 278 | // @match http://*.uploadagent.de/show* 279 | // @match http://*.bildjunkies.de/view* 280 | // @match http://*.foto.hcfor.pl/view* 281 | // @match http://*.pic.tooptarinha.com/view* 282 | // @match http://*.poopr.org/view* 283 | // @match http://*.xp-images.hi2.ro/view* 284 | // @match http://*.dayzeddesigns.com/view* 285 | // @match http://*.freeimghosting.co.uk/view* 286 | // @match http://*.123poze.3x.ro/view* 287 | // @match http://*.upload.removed.us/view* 288 | // @match http://*.ximg.co.uk/view* 289 | // @match http://sl-images.ath.cx/view* 290 | // @match http://*.picatom.com/* 291 | // @match https://*.picshare.ru/image/* 292 | // @match http://*.imghost.pl/index.php?id=* 293 | // @match http://*.udostepniaj.pl/view* 294 | // @match http://*.hosting-zdjec.pl/view* 295 | // @match http://*.zapisz.net/view* 296 | // @match http://www.imagehosting.cz/?v=* 297 | // @match http://www.dumparump.com/view* 298 | // @match http://*.myxpic.com/showpic* 299 | // @match http://*.picness.com/image/* 300 | // @match http://h4z.it/View* 301 | // @match http://*.freeamateurteens.net/view* 302 | // @match http://*.fotoshack.us/foto* 303 | // @match https://*.imagebin.ca/v/* 304 | // @match http://*.loadpix.de/*.html 305 | // @match http://www.public-pic.de/image/show/* 306 | // @match http://*.9foto.ru/photo/* 307 | // @match http://uploads.ru/* 308 | // @match http://*.storepic.com/show* 309 | // @match http://www.myimg.de/?img=* 310 | // @match http://*.root-space.eu/file* 311 | // @match http://*.hot-file.org/p* 312 | // @match http://*.hostarea.de/show* 313 | // @match http://mepic.ru/view/?id=* 314 | // @match http://*.upislam.com/view* 315 | // @match http://*.ngarko.free.fr/view* 316 | // @match http://*.add-screen.com/view* 317 | // @match http://image.siroro.co.uk/p* 318 | // @match http://thaisharing.online.fr/view* 319 | // @match http://*.images.collectiontricks.it/view* 320 | // @match http://*.my-collection.ru/view* 321 | // @match http://img.schattorie.nl/view* 322 | // @match http://*.forexrainbow.com/view* 323 | // @match http://*.imgupload.pl/view* 324 | // @match http://*.1y9y.com/view* 325 | // @match http://*.addpix.net/view* 326 | // @match http://www.myuploadedimages.com/view* 327 | // @match http://multihoster.saxonia-fighter.de/view* 328 | // @match http://knecht.novarata.net/?* 329 | // @match http://*.img.irandeliver.com/?* 330 | // @match http://*.xferz.com/?* 331 | // @match http://*.up.kfesfahan.com/?* 332 | // @match http://upload.khontai.com/?* 333 | // @match http://*.image.pantyhosemania.info/?* 334 | // @match http://*.addyourpics.com/image* 335 | // @match http://*.imgnext.com/img-* 336 | // @match http://*.qattach.com/p* 337 | // @match http://*.host4images.com/view* 338 | // @match http://*.imgbank.cz/* 339 | // @match http://*.nyanimg.com/* 340 | // @match http://*.geekpics.in/* 341 | // @match http://*.imagesloading.altervista.org/?* 342 | // @match http://*.showmyimage.com/* 343 | // @match http://*.phpbbmods.it/immaggini* 344 | // @match http://upload.supreme-elite.fr/?* 345 | // @match http://*.fotohelp.kz/image* 346 | // @match https://*.myimg.me/* 347 | // @match http://*.heberg-hush.org/?* 348 | // @match http://*.oltaciyukle.com/* 349 | // @match http://*.pichost.name/* 350 | // @match *://*.fsfiles.org/flightsimshotsv2/image/* 351 | // @match http://*.imagend.com/* 352 | // @match http://*.imagerocket.com/* 353 | // @match http://*.hyyathost.com/* 354 | // @match http://images.reptilescanada.com/* 355 | // @match http://*.lakhdaria.net/imagebank/?* 356 | // @match http://*.webjardiner.com/hebergement_images_photos/image* 357 | // @match http://*.intergranada.com/images/?* 358 | // @match http://*.partizansk.eu/foto/image* 359 | // @match http://*.xenopix.com/?* 360 | // @match http://*.wepic.ru/* 361 | // @match http://*.imgup.com/images* 362 | // @match http://*.picturepush.com/public* 363 | // @match http://*.upload-image.fr/* 364 | // @match http://*.iezz.com/?* 365 | // @match https://*.images.baconbits.org/?* 366 | // @match http://*.upanh.ovo.vn/* 367 | // @match http://*.wrzucaj.net/* 368 | // @match http://*.heberge-images.com/?* 369 | // @match http://www.image.kg/* 370 | // @match http://*.savemyimage.com/* 371 | // @match http://*.img.dramacafe.tv/* 372 | // @match http://*.hosturimage.com/img-* 373 | // @match http://*.pic-mir.ru/*/* 374 | // @match http://*.244pix.com/view* 375 | // @match http://*.uploadimage.ro/view* 376 | // @match https://*.imgflare.com/*/* 377 | // @match https://www.imagefap.com/photo/* 378 | // @match https://www.imagefap.com/video.php?vid=* 379 | // @match http://filefap.com/view* 380 | // @match https://imgur.com/* 381 | // @match https://m.imgur.com/* 382 | // @exclude https://imgur.com/a/* 383 | // @exclude https://m.imgur.com/a/* 384 | // @match https://motherless.com/* 385 | // @match https://*.tumblr.com/image/* 386 | // @match https://*.media.tumblr.com/*.* 387 | // @match http://*.imageporter.com/* 388 | // @match http://*.damimage.com/img-* 389 | // @match https://fapping.empornium.sx/image/* 390 | // @match http://imgboxxx.com/view* 391 | // @match http://*.imghere.net/view* 392 | // @match http://*.sharepic.biz/show-image.php?id=* 393 | // @match http://f-lite.ru/* 394 | // @match http://*.picturescream.com/* 395 | // @match http://*.imgdone.com/view* 396 | // @match https://*.2i.cz/i/* 397 | // @match http://awesomescreenshot.com/* 398 | // @match https://www.flickr.com/photos/*/*/* 399 | // @exclude https://www.flickr.com/photos/*/galleries/* 400 | // @exclude https://www.flickr.com/photos/*/albums/* 401 | // @exclude https://www.flickr.com/photos/sets/* 402 | // @exclude https://www.flickr.com/photos/tags/* 403 | // @exclude https://www.flickr.com/photos/page* 404 | // @exclude https://www.flickr.com/photos/with* 405 | // @exclude https://www.flickr.com/photos*favorites* 406 | // @match http://www.amateri.cz/g*/* 407 | // @match *://*.wikipedia.org/wiki/*:*.jp* 408 | // @match *://*.wikipedia.org/wiki/*:*.png 409 | // @match *://*.wikimedia.org/wiki/*:*.jp* 410 | // @match *://*.wikimedia.org/wiki/*:*.pn* 411 | // @match *://*.xxxscreens.com/img-* 412 | // @match http://avenuexxx.com/*-* 413 | // @match http://avenuexxx.com/archives/*/* 414 | // @exclude http://avenuexxx.com/archives/category/* 415 | // @match http://www.bilderhoster.net/*.html 416 | // @match http://*.xxxscreens.com/img-* 417 | // @match http://*.imgdope.com/view* 418 | // @match http://*.imagehost.eu/* 419 | // @match http://*.aveimage.com/view* 420 | // @match *://*.fappic.com/* 421 | // @match http://*.imagenimage.com/*/* 422 | // @match http://*.adultur.com/img-* 423 | // @match https://*.imageshimage.com/*/* 424 | // @match http://*.imgswift.com/*/* 425 | // @match http://*.imageporn.eu/?v=* 426 | // @match https://*.500px.com/photo/* 427 | // @match http://*.greenpiccs.com/images/*.html 428 | // @match http://*.hostmat.eu/view* 429 | // @match http://*.photobucket.com/user/*/media/*.htm* 430 | // @match https://www.imgshots.com/img* 431 | // @match https://www.imgshots.com/show/* 432 | // @match https://*.3xplanet.com/view* 433 | // @match https://*.3xplanet.net/view* 434 | // @match http://*.imgmega.com/*.html 435 | // @match *://img.yt/img-* 436 | // @match http://*.payforpic.ru/*/*/ 437 | // @match http://*.keep4u.ru/full/* 438 | // @match http://*.pic.re/*.html 439 | // @match http://*.freshpics.ru/*/*/ 440 | // @match *://*.imgseeds.com/img-* 441 | // @match https://*.pronpic.org/*/* 442 | // @match https://prnt.sc/* 443 | // @match http://*.imgdream.net/view* 444 | // @match http://*.imgtab.net/* 445 | // @match http://*.kephost.com/image/* 446 | // @match http://i.ruspotting.net/image/* 447 | // @match https://*.gifyu.com/image/* 448 | // @match http://celebimg.com/image/* 449 | // @match http://*.sharepic.org/image/* 450 | // @match http://*.zuly.de/image/* 451 | // @match http://upload.vstanced.com/image/* 452 | // @match http://*.thro.bz/image/* 453 | // @match http://*.qoou.net/image/* 454 | // @match http://brightpic.tk/image/* 455 | // @match http://*.cweb-pix.com/image/* 456 | // @match http://hosting.webspell.fr/image/* 457 | // @match http://*.i-pict.ru/image/* 458 | // @match http://*.images.woh.to/image/* 459 | // @match http://*.imghaze.com/image/* 460 | // @match http://*.imgup.nl/image/* 461 | // @match http://*.nium.co/image/* 462 | // @match http://pix.hostux.net/image/* 463 | // @match http://*.pixoload.de/image/* 464 | // @match http://*.primeimg.co/image/* 465 | // @match http://pic.xtream-reallife.de/image/* 466 | // @match http://*.ultraimg.com/image/* 467 | // @match http://demo.chevereto.com/image/* 468 | // @match *://imgclick.net/*/* 469 | // @match http://*.gogoimage.org/img-* 470 | // @match http://imgmoney.ru/*.html 471 | // @match http://imgmoney.ru/full/ 472 | // @match http://*.imglooks.com/img-* 473 | // @match http://*.you-logo.ru/show* 474 | // @match http://*.uploadimagex.com/view* 475 | // @match http://*.powerlogo.ru/show* 476 | // @match http://youpicture.org/?v=* 477 | // @match http://*.all-poster.ru/?v=* 478 | // @match http://*.picbug.ru/share* 479 | // @match http://*.sxpix.nl/img-* 480 | // @match http://*.hotflick.net/u/v/?q=* 481 | // @match http://*.hotflick.net/f/v/?q=* 482 | // @match http://vavvi.com/images/*.html 483 | // @match https://www.deviantart.com/*/art/* 484 | // @match http://*.myceleb.net/u/v/?q=* 485 | // @match http://*.imageblinks.com/img-* 486 | // @match *://*.gelbooru.com/index.php?page=post&s=view&id=* 487 | // @match *://*.youhate.us/index.php?page=post&s=view&id=* 488 | // @match https://safebooru.org/index.php?page=post&s=view&id=* 489 | // @match https://danbooru.donmai.us/posts/* 490 | // @match http://konachan.com/post/show/* 491 | // @match http://konachan.net/post/show/* 492 | // @match https://yande.re/post/show/* 493 | // @match https://chan.sankakucomplex.com/*posts/* 494 | // @match https://idol.sankakucomplex.com/*posts/* 495 | // @match https://yande.re/post/show/* 496 | // @match http://www.zerochan.net/* 497 | // @match http://imgzap.com/view* 498 | // @match http://*.olivepix.com/view/* 499 | // @match http://*.ocaload.com/img-* 500 | // @match http://*.imghit.com/img-* 501 | // @match http://*.imageon.org/img-* 502 | // @match http://*.imgcentral.com/view* 503 | // @match http://*.chronos.to/* 504 | // @match http://picspornfree.me/img-* 505 | // @match http://*.pic-you.com/p* 506 | // @match http://*.image-bugs.com/*mage/* 507 | // @match https://*.imgdrive.net/img-* 508 | // @match https://www.pixiv.net/*/artworks/* 509 | // @match http://*.scrin.org/?v=* 510 | // @match http://*.thumbnailus.com/img-* 511 | // @match http://*.nimplus.com/img-* 512 | // @match https://*.imgtaxi.com/img-* 513 | // @match http://*.imgstudio.org/img-* 514 | // @match http://goimge.com/img-* 515 | // @match http://*.safeimage.biz/image/* 516 | // @match http://*.imgbase.online/*/*/ 517 | // @match http://*.picpays.ru/*/*/ 518 | // @match http://*.imgclover.com/image/* 519 | // @match *://*.imgking.co/img* 520 | // @match http://ask.fm/*/photo/original 521 | // @match http://*.newimagepost.com/img-* 522 | // @match http://*.imageho.me/img-* 523 | // @match http://myimg.club/* 524 | // @match https://www.hotimage.uk/*mg-* 525 | // @match http://*.10.imageleon.com/i-* 526 | // @match https://www.dropbox.com/s/*/* 527 | // @match http://imgor.net/img-* 528 | // @match http://*.imagedax.net/*/*.html 529 | // @match https://*.imgmonkey.com/*/*.html 530 | // @match http://*.fapat.me/img-* 531 | // @match http://photo.weibo.com/*/large/photo_id/* 532 | // @match https://*.crazyimg.com/images/*.html 533 | // @match http://imgbe.com/img-* 534 | // @match https://*.imgextra.uk/image/* 535 | // @match http://*.extraimago.com/image/* 536 | // @match http://*.fireimg.cc/img-* 537 | // @match http://www.pornimagex.com/image/* 538 | // @match http://*.imgboom.net/* 539 | // @match http://*.img24.org/*.html 540 | // @match http://*.img24.org/full/ 541 | // @match http://*.pic-maniac.com/* 542 | // @match https://*.instagram.com/p/* 543 | // @match https://*.instagram.com/*/p/* 544 | // @exclude https://instagram.com/p/*/embed/* 545 | // @exclude https://*.instagram.com/p/*/embed/* 546 | // @match http://*.imgsay.com/?v=* 547 | // @match http://*.imgsmile.com/?v=* 548 | // @match http://*.balkanelite.org/MultiHoster/view* 549 | // @match https://*.x.com/*/photo/* 550 | // @match http://*.icezap.com/img-* 551 | // @match *://*.rapidimg.net/img-* 552 | // @match http://*.imgtornado.com/img-* 553 | // @match http://*.daily-img.com/image/* 554 | // @match http://*.imageab.com/image/* 555 | // @match http://*.erimge.com/img-* 556 | // @match http://*.imgtrial.com/img-* 557 | // @match https://imgtown.net/*.php 558 | // @match http://ameblo.jp/*/image-* 559 | // @match http://*.loftlm.ru/img-* 560 | // @match http://*.imgdragon.com/*/*.html 561 | // @match http://ftop.ru/*/* 562 | // @match http://*.imgurx.net/share* 563 | // @match http://savepic.ru/*.htm 564 | // @match http://*.imgmaid.net/* 565 | // @match http://*.imggold.org/*/*.html 566 | // @match http://*.imgcredit.xyz/img-* 567 | // @match http://*.imgcredit.xyz/p/img-* 568 | // @match http://*.imgcredit.xyz/image/* 569 | // @match http://*.dimtus.com/img-* 570 | // @match http://*.coreimg.net/* 571 | // @match http://sfwimg.com/image/* 572 | // @match http://*.img3x.com/image/* 573 | // @match http://*.imguniversal.com/* 574 | // @match http://*.imagepearl.com/view/* 575 | // @match http://*.imagepearl.com/verify/* 576 | // @match http://*.tinizo.com/img-* 577 | // @match *://*.imgkings.com/img* 578 | // @match http://*.imagerar.com/img* 579 | // @match http://*.sendpic.org/view/* 580 | // @match *://www.porncomix.info/*/*/ 581 | // @exclude *://www.porncomix.info/gallery/* 582 | // @exclude *://www.porncomix.info/artist/* 583 | // @match *://*.picclock.ru/*/*/ 584 | // @match http://*.svetmonet.ru/*.html 585 | // @match http://*.svetmonet.ru/full/ 586 | // @match http://*.imgpix.net/* 587 | // @match http://*.freeimagehostin.com/img-* 588 | // @match http://www.mixbase.net/gallery/image.* 589 | // @match https://www.adultimages.xyz/*/image*.html 590 | // @match http://*.pic4share.ru/*.html 591 | // @match http://*.pic4share.ru/full/ 592 | // @match http://*.sximg.nl/img-* 593 | // @match http://*.0img.net/?v=* 594 | // @match https://ss.movierls.net/image/* 595 | // @match http://www.xxximagetpb.org/image/* 596 | // @match http://www.pixsense.net/site/v/* 597 | // @match http://www.imgsky.net/* 598 | // @match http://www.imagespicy.site/site/v/* 599 | // @match https://outletpic.com/*.php 600 | // @match http://*.pix.ac/image/* 601 | // @match *://*.imgmak.com/image/* 602 | // @match http://*.freephotohostin.com/img-* 603 | // @match http://*.imgcat.pw/img-* 604 | // @match http://*.levinpic.org/*.html 605 | // @match https://www.sparrowpics.com/image/* 606 | // @match http://*.imgmax.com/image/* 607 | // @match https://lostpix.com/?v=* 608 | // @match https://extraimago.com/image/* 609 | // @match http://www.joblo.com/hollywood-celebrities/hottie-profile/*/image-gallery/*.jpg 610 | // @match *://extraimage.net/image/ 611 | // @match *://www.bellazon.com/main/attachment/* 612 | // @match *://extraimage.net/image/* 613 | // @match https://www.artstation.com/artwork/* 614 | // @match http://bcy.net/illust/detail/* 615 | // @match http://*.imgpics.nl/img-* 616 | // @match http://*.imagexxx18.com/image/* 617 | // @match http://*.imagepics.xyz/img-* 618 | // @match *://postto.me/* 619 | // @match http://*.imgskull.xyz/image/* 620 | // @match http://*.imgskull.com/image/* 621 | // @match *://*.ninjaimages.com/*.html 622 | // @match *://*.imgprime.com/img* 623 | // @match *://*.piccash.net/*/*/ 624 | // @exclude *://piccash.net/cabinets/* 625 | // @exclude *://www.piccash.net/cabinets/* 626 | // @match http://imgwo.com/img-* 627 | // @match http://luxpic.ru/images/*.html 628 | // @match http://*.pic-images.ru/full/ 629 | // @match http://*.pic-images.ru/*.html 630 | // @match http://*.imgspic.ru/full/ 631 | // @match http://*.imgspic.ru/*.html 632 | // @match http://imgleveret.com/img-* 633 | // @match http://porn84.org/img-* 634 | // @match https://*.ima.gy/i/* 635 | // @match http://picpower.ru/full/ 636 | // @match http://picpower.ru/*.html 637 | // @match http://piccloud.ru/full/ 638 | // @match http://piccloud.ru/*.html 639 | // @match https://imgbase.ru/*/*/ 640 | // @match http://*.sexybabepics.net/img-*.html 641 | // @match http://*.sexybabepics.net/x/image/* 642 | // @match http://*.imagecrest.com/verify/* 643 | // @match http://*.imagecrest.com/view/* 644 | // @match https://*.picz.site/img-*.html 645 | // @match http://*.allxpix.com/img-*.html 646 | // @match http://pixxsees.ru/full/ 647 | // @match http://pixxsees.ru/*.html 648 | // @match http://imgblank.com/img-*.html 649 | // @match http://imgtrex.com/*/* 650 | // @match https://imgwallet.com/img-*.html 651 | // @match http://2picsun.ru/full/ 652 | // @match http://2picsun.ru/*.html 653 | // @match http://picpie.org/image/* 654 | // @match *://*.xeimg.yt/img-*.html 655 | // @match *://*.imagedisco.net/?v=* 656 | // @match http://*.imgmain.com/img-*.html 657 | // @match http://*.imgvisits.com/* 658 | // @match *://pixxxels.org/image/* 659 | // @match http://img-pika.ru/full/ 660 | // @match http://img-pika.ru/*.html 661 | // @match http://imgcach.ru/*/*/ 662 | // @match https://*.xhamster19.com/photos/gallery/*/* 663 | // @match https://*.xhamster11.com/photos/gallery/*/* 664 | // @match https://*.xhamster4.com/photos/gallery/*/* 665 | // @match https://*.xhamster3.com/photos/gallery/*/* 666 | // @match https://*.xhamster.com/photos/gallery/*/* 667 | // @match https://*.xhamster.desi/photos/gallery/*/* 668 | // @exclude /^https://(.*\.)?xhamster(\d{1,2})?\.(com|desi)/photos/gallery/.*/\d{1,3}$/ 669 | // @match http://*.imghall.com/?v=* 670 | // @match https://*.acidimg.cc/img-* 671 | // @match https://imgcloud.pw/image/* 672 | // @match https://z4a.net/image/* 673 | // @match https://t.hogor.net/?pm=* 674 | // @match http://xxxwebdlxxx.org/*.html 675 | // @match https://www.sizzlingclicks.com/image/* 676 | // @match http://wwxxww.ru/*.html 677 | // @match http://wwxxww.ru/full/ 678 | // @match http://passpix.com/images/* 679 | // @match http://*.imgseed.com/img-*.html 680 | // @match http://img.folluo.me/image/* 681 | // @match *://imgpart.com/img-* 682 | // @match https://picstate.com/view/full/* 683 | // @match https://jerking.empornium.ph/image/* 684 | // @match https://truepic.org/* 685 | // @match https://www.jiopic.com/image/* 686 | // @match https://imx.to/img-* 687 | // @match https://imx.to/i/* 688 | // @match https://pixxxels.cc/* 689 | // @match http://picpic.online/*/*/ 690 | // @match http://imgking.xyz/*.html 691 | // @match http://moreimage.pw/image/* 692 | // @match https://imgsha.com/i/* 693 | // @match https://www.pic-upload.de/view-*/*.html 694 | // @match http://pic3you.org/*.html 695 | // @match http://pic3you.org/full/ 696 | // @match *://*.vipix.pw/images/*.html 697 | // @match https://*.imgazure.com/*.html 698 | // @match https://*.imgazure.com/full/ 699 | // @match *://*.dpic.me/* 700 | // @match *://*.picmoza.com//img-*.html 701 | // @match *://suckmypic.net/* 702 | // @match *://pic.hotimg.site/img-*.html 703 | // @match http://*.shaggyimg.pro/*.html 704 | // @match http://*.shaggyimg.pro/full/ 705 | // @match https://*.imgjazz.xyz/img-*.html 706 | // @match https://22pixx.xyz/i*-*/*.html 707 | // @match https://22pixx.xyz/i-*/*.html 708 | // @match https://22pixx.xyz/x-*/*.html 709 | // @match https://22pixx.xyz/y-*/*.html 710 | // @match *://trueimg.xyz/u-*/*.html 711 | // @match *://imgsmarts.info/*.html 712 | // @match *://imgsmarts.info/full/ 713 | // @match *://www.keepimg.com/image/* 714 | // @match https://ibb.co/* 715 | // @match http://*.imgsee.net/* 716 | // @match *://*.picbaron.com/*/*.html 717 | // @match *://*.imgbaron.com/*/* 718 | // @match https://kvador.com/*/*.html 719 | // @match http://picshost.info//img-*.html 720 | // @match *://imagescanner.cc/images/*.html 721 | // @match http://batpic.com/image/* 722 | // @match http://*.1pic.org/view/*.html 723 | // @match *://lookimg.com/image/* 724 | // @match http://*.xfap.fun/img-*.html 725 | // @match *://*.hdmoza.com//img-*.html 726 | // @match *://trans.firm.in/images/*.html 727 | // @match http://*.imgtorrnt.in/view.php?id=* 728 | // @match https://*.dailyimages.xyz/*.html 729 | // @match https://*.dailyimages.xyz/full/ 730 | // @match http://*.petrovixxxjav.com//img-*.html 731 | // @match *://*.placeimg.net/img-*.html 732 | // @match https://subefotos.com/ver/?* 733 | // @match http://*.imageshtorm.com/img-*.html 734 | // @match https://*.blameless.work/img-*.html 735 | // @match https://trumbhost.com/images/*.html 736 | // @match http://*.xxx.kodiak.top/img-*.html 737 | // @match *://*.your-pictures.net/p*/*.html 738 | // @match https://*.xaoutchouc.live/img-*.html 739 | // @match https://*.picusha.net/?v=* 740 | // @match https://e621.net/posts/* 741 | // @match https://rule34.xxx/index.php?page=post&s=view&id=* 742 | // @match https://*.rule34hentai.net/post/view/* 743 | // @match https://pixs.cx/* 744 | // @match *://mshelxxx.ru.com//img-*.html 745 | // @match *://www.hentai-foundry.com/pictures/* 746 | // @exclude *://www.hentai-foundry.com/pictures/user/*/page/* 747 | // @match *://imgcredit.xyz/image/* 748 | // @match *://drlink.online/*/*/ 749 | // @match https://savepice.ru/full/*.html 750 | // @match https://kropic.com/*/*.html 751 | // @match http://*.imgzong.xyz/* 752 | // @match https://www.furaffinity.net/view/* 753 | // @match http://imageking.xyz/* 754 | // @match http://imgxx.xyz/* 755 | // @match http://imgao.xyz/* 756 | // @match http://imgweng.xyz/* 757 | // @match http://imgkes.xyz/* 758 | // @match https://imgair.net/* 759 | // @match https://imgtgd.shop/* 760 | // @match https://*.imgsto.com/*/*.html 761 | // @match https://*.pics4you.net/*/*.html 762 | // @match https://vipr.im/* 763 | // @match https://*.trans.firm.in/img-*.html 764 | // @match https://*.imgdawgknuttz.com/img-*.html 765 | // @match https://*.xxxwebdlxxx.top/img-*.html 766 | // @match https://*.olarixas.xyz/img-*.html 767 | // @match http://imgkoi.xyz/* 768 | // @match https://imagehaha.com/*/* 769 | // @match https://picshick.com/*/* 770 | // @match https://imgsen.com/*/*.html 771 | // @match https://premalo.com/*/*.html 772 | // @match https://picdollar.com/*/*.html 773 | // @match https://fotokiz.com/*/*.html 774 | // @match https://silverpic.com/*/*.html 775 | // @match http://imglin.xyz/* 776 | // @match *://*.crownimg.com/*/*.html* 777 | // @match http://imgkr.xyz/* 778 | // @match *://*.xxxwebdlxxx.org/img-*.html 779 | // @match http://imgbird.xyz/* 780 | // @match https://*.pornhd720p.com//img-*.html 781 | // @match http://imgwewo.xyz/* 782 | // @match https://*.rintor.space/image/* 783 | // @match http://imgirx.xyz/* 784 | // @match http://*.imgalor.xyz/* 785 | // @match http://imgjut.buzz/* 786 | // @match http://imgtrw.buzz/* 787 | // @match http://imglina.xyz/* 788 | // @match http://imgkuiw.xyz/* 789 | // @match http://imgwang.buzz/* 790 | // @match https://imgbb.com/* 791 | // @match *://vfl.ru/fotos/*.html 792 | // @match https://*.imgstar.eu/*/*.html 793 | // @match https://dewimg.com/*.php 794 | // @match https://pictwn.com/*.php 795 | // @match https://comment-cdn.9gag.com/image?* 796 | // @match https://t.me/*/* 797 | // @match https://telegram.me/*/* 798 | // @match *://piccy.info/view3/*/*/ 799 | // @match http://imgmeno.buzz/* 800 | // @match https://*.pics4upload.com/*/*.html 801 | // @match http://imgpekele.buzz/* 802 | // @match http://imglqw.buzz/* 803 | // @match http://imgyng.buzz/* 804 | // @match http://imgbbd.buzz/* 805 | // @match http://imgwia.buzz/* 806 | // @match http://imgowk.buzz/* 807 | // @match http://imgokr.buzz/* 808 | // @match http://imgoiu.buzz/* 809 | // @match https://picmoney.org/image/* 810 | // @match *://skrinshoter.ru/s/*/* 811 | // @match https://photo-screen.ru/i/* 812 | // @match https://postlmg.cc/* 813 | // @match https://pasteboard.co/* 814 | // @match https://*.picklik.ru/image/* 815 | // @match https://*.jpg.church/img/* 816 | // @match https://rule34.us/index.php?r=posts/view&id=* 817 | // @match https://*.imghub.ru/i/* 818 | // @match https://imgeza.buzz/* 819 | // @match http://mrlzqoe.buzz/* 820 | // @match https://radikal.host/i/* 821 | // @match https://*.slowpic.xyz//img-*.html 822 | // @match https://yapx.ru/*/* 823 | // @match https://imgpukxxr.site/* 824 | // @match https://picngt.shop/* 825 | // @match https://realbooru.com/index.php?page=post&s=view&id=* 826 | // @match *://imgutkr.store/* 827 | // @match *://imghhr.online/* 828 | // @match *://imglaiw.store/* 829 | // @match https://meetimgz.com/*.php 830 | // @match *://imgvue.online/* 831 | // @match *://imgxgf.store/* 832 | // @match *://imgbibam.online/* 833 | // @match https://imgsh.net/a/* 834 | // @match *://imgqaz.online/* 835 | // @match *://imgurt.online/* 836 | // @match https://jpg5.su/img/* 837 | // @match *://imgwxr.online/* 838 | // @match *://imgyre.online/* 839 | // @match https://pixl.li/image/* 840 | // @match https://pixlev.store/* 841 | // @match https://pixmax.store/* 842 | // @match https://imgxqy.online/* 843 | // @match https://skr.sh/* 844 | // @match https://i.redd.it/* 845 | // @match https://preview.redd.it/* 846 | // @match https://www.reddit.com/media?url=* 847 | // @match https://vsco.co/*/media/* 848 | // @match https://www.gettyimages.com/detail*photo* 849 | // @match https://www.gettyimages.com/detail*video* 850 | // @match https://jpg.pet/img/* 851 | // @match https://jpeg.pet/img/* 852 | // @match https://imgnmh.cfd/* 853 | // @match https://im.ge/i/* 854 | // @match https://piczel.tv/gallery/image/* 855 | // @match https://www.screencast.com/t/* 856 | // @match https://slushe.com/galleries/*.html 857 | // @match https://img.trafficimage.club/image/* 858 | // @match https://*.picturedent.org/image/* 859 | // @match https://pig69.com/upload/* 860 | // @match https://javball.com/upload/* 861 | // @match https://idol69.net/upload/* 862 | // @match https://picqaxs.cfd/* 863 | // @match https://www.zupimages.net/viewer.php?id=* 864 | // @match https://porn4f.com/upload/* 865 | // @match https://ovabee.com/upload/* 866 | // @match https://ai18.pics/upload/* 867 | // @match https://paste.pics/* 868 | // @match https://cnxx.me/upload/* 869 | // @match https://cnpics.org/upload/* 870 | // @match https://picvvvd.sbs/* 871 | // @match https://civitai.com/images/* 872 | // @match https://civitai.com/posts/* 873 | // @match https://cosplay18.pics/upload/* 874 | // @match https://*.mjj.today/i/* 875 | // @match https://adult-images.ru/*/*/ 876 | // @match https://imgfoto.host/i/* 877 | // @match https://picabox.ru/pic/* 878 | // @match https://snipboard.io/* 879 | // @match https://www.seaart.ai/explore/detail/* 880 | // @match https://tensor.art/images/* 881 | // @match https://freeimage.host/i/* 882 | // @match https://imgjjtr.sbs/* 883 | // @match https://tezzpic.com/*.php 884 | // @match https://clip2net.com/s/* 885 | // @match https://4fuk.me/upload/* 886 | // @match https://555fap.com/upload/* 887 | // @match https://kin8-av.com/upload/* 888 | // @match https://javsunday.com/upload/* 889 | // @match https://*.redgifs.com/watch/* 890 | // @match https://*.redgifs.com/gifs/* 891 | // @match https://hentaicovid.com/uploads/* 892 | // @match https://hentaipig.com/upload/* 893 | // @match https://fikfok.net/upload/* 894 | // @match https://image.javbee.me/* 895 | // @match https://pixeldrain.com/u/* 896 | // @match https://getapic.me/v/* 897 | // @match https://3minx.com/upload/* 898 | // @match https://sweetie-fox.com/upload/* 899 | // @match https://porn4f.org/upload/* 900 | // @match https://pixai.art/artwork/* 901 | // @match https://pixai.art/video/* 902 | // @match https://image.javbee.vip/* 903 | // @match https://fc2ppv.stream/upload/* 904 | // @match https://blackwidof.org/upload/* 905 | // @match https://iimg.su/i/* 906 | // @match https://radikal.cloud/i/* 907 | // @match https://hamster.is/image/* 908 | // @match https://coomimgs.net/image/* 909 | // ==/UserScript== 910 | 911 | "use strict"; 912 | 913 | console.debug("HandyImage Script running"); 914 | 915 | if (typeof unsafeWindow === "undefined") 916 | { 917 | unsafeWindow = window; 918 | console.warn("unsafeWindow missing"); 919 | } 920 | 921 | if (typeof GM_registerMenuCommand !== "undefined") 922 | { 923 | GM_registerMenuCommand("Handy Image Configuration", cfg, "C"); 924 | } 925 | 926 | if(window.location.href.lastIndexOf(window.location.hostname) + window.location.hostname.length + 1 == window.location.href.length) 927 | { 928 | console.warn("we are on website's main page, aren't we?"); 929 | return false; 930 | } 931 | let type = document.contentType.substring(0,document.contentType.indexOf("/")); 932 | if (type === "image" || type === "video") 933 | { 934 | console.warn("Handy isn't needed for directly opened images or videos (if you want it this way - use CenterImage userscript"); 935 | return false; 936 | } 937 | if(history.length !== 1 && document.referrer) 938 | { 939 | if(document.referrer.lastIndexOf(window.location.hostname) != -1 && document.referrer.lastIndexOf(window.location.hostname) +1 == document.referrer.length - window.location.hostname.length) 940 | { 941 | console.warn("Handy Image: userscript stopped itself from running INTENTIONALLY: cuz your previous page is websites mainpage so you probably have just uploaded a picture yourself"); 942 | return false; 943 | } 944 | } 945 | if (document.title == "Attention Required! | Cloudflare" || document.title == "Just a moment...") 946 | { 947 | console.warn("Cloudflare MITM guard page. Stopping."); 948 | return false; 949 | } 950 | if(sessionStorage.length) 951 | { 952 | if(sessionStorage.hji) 953 | { 954 | if(sessionStorage.hji.indexOf(window.location.href) != -1) // check address in case page failed to load b4 955 | { 956 | console.warn("Handy Image: userscript stopped itself from running INTENTIONALLY"); 957 | setTimeout(function() {sessionStorage.removeItem("hji");},1000); // for frames 958 | return false; 959 | } 960 | sessionStorage.removeItem("hji"); 961 | } 962 | else if(sessionStorage.hji_back) 963 | { 964 | if(Date.now() < parseInt(sessionStorage.hji_back)) // 2 sec not yet passed 965 | { 966 | console.warn("Handy Image: userscript now helps you go to previous page automatically"); 967 | sessionStorage.removeItem("hji_back"); 968 | window.history.go(-1); 969 | return false; 970 | } 971 | sessionStorage.removeItem("hji_back"); 972 | } 973 | } 974 | 975 | function q(s){if(document.body){return document.body.querySelector(s);}return null;} 976 | var cfg_direct = false; 977 | var cfg_bgclr ="grey"; 978 | var cfg_fitWH = true; 979 | var cfg_fitB = false; 980 | var cfg_fitS = true; 981 | var cfg_fitOS = false; 982 | var cfg_js; 983 | var cfg_vol = "0.5"; 984 | var referrer_policy = "strict-origin-when-cross-origin"; // default browser behavior 985 | var dp = false; 986 | let orgImgWidth; 987 | let orgImgHeight; 988 | var rescaled = 0; 989 | var tb = 0; 990 | var timeout = 1000; 991 | var FireFox = ((navigator.userAgent.indexOf('Firefox') != -1) ? true : false); 992 | var i; 993 | var j; 994 | var bStopScripts = false; 995 | var bUseCustomFilename = true; 996 | var filename = ""; 997 | var filename_ext = ""; 998 | var skip_by = 5; 999 | var is_video = false; 1000 | var is_gallery = false; 1001 | var ext_list_not_image = ['zip', '7z', 'rar', 'psd', 'swf', 'doc', 'rtf', 'pdf']; 1002 | var ext_list_video = ['webm', 'mp4', 'm4v', 'avi', 'flv', 'ogg']; 1003 | var iurl = window.location.hostname; 1004 | if(!iurl.indexOf("www.")) 1005 | { 1006 | iurl = iurl.substr(4); 1007 | } 1008 | var host = iurl; 1009 | if(window.location.pathname.indexOf("//") == 0) 1010 | { 1011 | iurl += "/"; 1012 | } 1013 | 1014 | function ws() 1015 | { 1016 | if(!FireFox) // NOT firefox 1017 | { 1018 | window.stop(); 1019 | } 1020 | } 1021 | 1022 | function sanitize() // lol I'm such a hacker 1023 | { 1024 | removeAllListeners(); 1025 | let lasttask = unsafeWindow.setTimeout(function() {},0); 1026 | for(let n = lasttask; n > 0; n--) 1027 | { 1028 | //if(n !== tg) // unsafeWindow.clear can't clear window.tasks set in the userscript but lets be safe 1029 | //{ 1030 | unsafeWindow.clearTimeout(n); // only unsafeWindow has access to clear page tasks 1031 | //} 1032 | } 1033 | } 1034 | 1035 | const protected_createElement = Document.prototype.createElement.bind(document); 1036 | protected_addEventListener.originalF = Element.prototype.addEventListener; 1037 | function protected_addEventListener (el, event, handler, capture = false) 1038 | { 1039 | return protected_addEventListener.originalF.call(el, event, handler, capture); 1040 | } 1041 | 1042 | var _eventHandlers = {}; 1043 | var origAdd = unsafeWindow.Element.prototype.addEventListener; // page's one 1044 | if(FireFox && typeof exportFunction === "function") 1045 | { 1046 | wrapper_addEventListener = exportFunction(wrapper_addEventListener, unsafeWindow); // TM magic 1047 | } 1048 | // addEventListener inside userscript's `window` doesn't change 1049 | unsafeWindow.Window.prototype.addEventListener = wrapper_addEventListener; 1050 | unsafeWindow.Document.prototype.addEventListener = wrapper_addEventListener; 1051 | unsafeWindow.Element.prototype.addEventListener = wrapper_addEventListener; 1052 | 1053 | function wrapper_addEventListener (event, handler, capture = false) 1054 | { 1055 | //if (typeof _eventHandlers === "undefined") unsafeWindow._eventHandlers = {}; 1056 | if (bStopScripts) 1057 | { 1058 | console.debug("HJI: stopped 1 addEventListener: " + event); 1059 | return null; 1060 | } 1061 | if (!(event in _eventHandlers)) _eventHandlers[event] = []; 1062 | 1063 | _eventHandlers[event].push({ node: this || unsafeWindow, handler: handler, capture: capture }); 1064 | console.debug("HJI: wrapped 1 addEventListener: " + event + ", "+ Object.keys(_eventHandlers).length); 1065 | return origAdd.call(this, event, handler, capture); 1066 | } 1067 | 1068 | function removeAllListeners () 1069 | { 1070 | console.debug("HJI: removed "+ Object.keys(_eventHandlers).length + " event listeners: " + Object.keys(_eventHandlers)); 1071 | for(let event in _eventHandlers) 1072 | { 1073 | _eventHandlers[event].forEach(({ node, handler, capture }) => node.removeEventListener(event, handler, capture)); 1074 | delete _eventHandlers[event]; 1075 | } 1076 | } 1077 | 1078 | function onVisibilityChange() 1079 | { 1080 | if (document.visibilityState === 'visible') 1081 | { 1082 | if(i && i.src) 1083 | { 1084 | window.removeEventListener('visibilitychange', onVisibilityChange); 1085 | onWindowResize(); 1086 | autoresize(); 1087 | } 1088 | } 1089 | } 1090 | 1091 | const AddElementToPage = typeof GM_addElement === "function" ? GM_addElement : function (node, type, content) 1092 | { 1093 | let el = protected_createElement(type); 1094 | el.textContent = content.textContent; 1095 | node.appendChild(el); 1096 | }; // stupid adGuard 1097 | 1098 | function DeleteAllCookies() 1099 | { 1100 | document.cookie.split(";").forEach(function(c) { 1101 | document.cookie = c.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); 1102 | }); 1103 | } 1104 | 1105 | function onscript(e) 1106 | { 1107 | //console.debug( "STOPPED: " + e.target.src + e.target.innerHTML); 1108 | console.debug( "HJI: onscript stopped 1 script from loading"); 1109 | e.preventDefault(); 1110 | e.stopImmediatePropagation(); 1111 | } 1112 | 1113 | function onbeforeunload() // back helper 1114 | { 1115 | sessionStorage.hji_back = Date.now() + 2000; // 2 sec to help back from double-pages 1116 | } 1117 | 1118 | function makeimage() 1119 | { 1120 | if(typeof cfg_js !== "string") { console.log("waiting for settings to load to makeimage()"); if(!loadCfg_callbacks.includes(makeimage)){loadCfg_callbacks.push(makeimage);} return false;} // lets wait for stupd async 1121 | if(cfg_direct === true){let a = protected_createElement('a'); a.setAttribute('href',i.src); a.click(); return false;} 1122 | let css 1123 | = `:root, body 1124 | { 1125 | height: 100%; 1126 | width: 100%; 1127 | margin: 0px; 1128 | display: grid; 1129 | } 1130 | img, video 1131 | { 1132 | margin: auto; 1133 | outline: none; 1134 | max-width: unset; 1135 | max-height: unset; 1136 | image-orientation: from-image; 1137 | } 1138 | video::-webkit-media-controls-panel 1139 | { 1140 | background-image: linear-gradient(transparent, transparent) !important; 1141 | } 1142 | :root, body, img, video 1143 | { 1144 | min-width: 0px; 1145 | min-height: 0px; 1146 | background-color: ${cfg_bgclr}; 1147 | }`; // don't mind the broken identation, multiline string demands it 1148 | AddElementToPage(document.documentElement, 'style', {textContent: css}); 1149 | ws(); 1150 | let isrc = i.src; 1151 | i = protected_createElement(is_video? "video" : "img"); 1152 | i.src = isrc; 1153 | document.body.appendChild(i); 1154 | if(!is_video) 1155 | { 1156 | protected_addEventListener(i, "click", rescale, true); 1157 | } 1158 | else 1159 | { 1160 | i.volume = cfg_vol; 1161 | protected_addEventListener(i, "volumechange", onvolumechange, true); 1162 | i.controls = true; 1163 | i.loop = true; 1164 | i.preload = "auto"; 1165 | i.focus(); // so video volume built-in hotkeys would work (until you unfocus it) 1166 | } 1167 | protected_addEventListener(i, "auxclick", rescale, true); 1168 | protected_addEventListener(i, "mousedown", mousedown, true); // chrome old fix - still needed 1169 | window.addEventListener("keydown", onkeydown, true); 1170 | window.addEventListener("resize", onWindowResize); 1171 | window.addEventListener("visibilitychange", onVisibilityChange); 1172 | onVisibilityChange(); // if tab is already active when opening image 1173 | if(dp){console.warn("you are on a double-page image hosting (probably)");window.addEventListener("beforeunload", onbeforeunload, true);} 1174 | if (typeof GM_registerMenuCommand !== "undefined") 1175 | { 1176 | GM_registerMenuCommand("Handy Image Download image", download_image, "N"); 1177 | GM_registerMenuCommand("Handy Image Re-Load page normally", () => {sessionStorage.hji = window.location.href; window.location.reload();}, "R"); 1178 | } 1179 | } 1180 | 1181 | function find_text_in_scripts(text, stopword, start_from_top = false, search_after_word = null, content_type = "img") 1182 | { 1183 | let scripts = document.getElementsByTagName("script"); 1184 | const searchFunc = start_from_top ? String.prototype.indexOf : String.prototype.lastIndexOf; 1185 | for(let n = 0; n < scripts.length; n++) 1186 | { 1187 | let foundIdx; 1188 | if(search_after_word) 1189 | { 1190 | foundIdx = searchFunc.call(scripts[n].innerHTML, search_after_word); 1191 | if(foundIdx === -1) 1192 | { 1193 | foundIdx = undefined; 1194 | console.debug("find_text_in_scripts(): NOT found search_after_word: "); 1195 | continue; // the word MUST be present 1196 | } 1197 | else 1198 | { 1199 | console.debug("find_text_in_scripts(): found search_after_word at: " + foundIdx); 1200 | } 1201 | } 1202 | let found_start_pos = searchFunc.call(scripts[n].innerHTML, text, foundIdx); 1203 | if(found_start_pos == -1){continue;} // text not found in this