豆瓣高清图-douban high resolution image

豆瓣图片换成高分辨率原图 包括:首页时间线配图、书籍封面图、电影封面图、专辑/歌曲封面图、同城活动封面图、小组话题内容图、日记内容图、小组头像、用户头像(鼠标经过显示)、相册照片 请配合右键“另存为”或“在新标签中打开图片”食用 *不支持背景图和懒加载的图

// ==UserScript==
// @name         豆瓣高清图-douban high resolution image
// @namespace    https://github.com/DragonCat1
// @version      0.5.3
// @license      MIT
// @description  豆瓣图片换成高分辨率原图 包括:首页时间线配图、书籍封面图、电影封面图、专辑/歌曲封面图、同城活动封面图、小组话题内容图、日记内容图、小组头像、用户头像(鼠标经过显示)、相册照片 请配合右键“另存为”或“在新标签中打开图片”食用 *不支持背景图和懒加载的图
// @author       铛铛铛铛铛/https://www.douban.com/people/48915223
// @copyright    1991-2018,铛铛铛铛铛-Dragoncat
// @match        https://*.douban.com/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    const style = document.createElement("style")
    style.innerHTML = `
/*覆盖原有样式*/
.doumail-list li,.status-item,.obu dt,#comments,.comment-item,.user-face,.member-list .pic,.profile-entry{
overflow: visible!important;
}
.status-item .hd .usr-pic {
z-index: initial;
}
.channel-item .pic img{
width:100%;
}
.note a img{
max-width:120px;
}
.album-item img,.album_s,.album,.album-list .pic img{
height:auto;
background-size: 100% 100%;
}
.album_photo{
height:auto;
}
/*新样式*/
.uhead-wrap{
position: relative;
}
.raw-uhead{
visibility: hidden;
position: absolute;
transition: all 0.1s;
z-index: 1;
opacity: 0;
width: auto!important;
height: auto!important;
top:0;
left:0;
border: 1px dashed #037b82;
border-radius: 0 !important;
}
.uhead-wrap:hover .raw-uhead{
transition: all 0.1s 0.15s;
visibility: visible;
opacity: 1;
}

`
    const regexps = {
        userhead:[/^(https:\/\/img\d\.doubanio\.com\/icon\/u)[a-z]*(\d+-\d+)(\.jpg)$/,
                  function(prefix){
                      return `$1${prefix}$2$3`
                  }],
        common:[/^(https:\/\/img\d\.doubanio\.com\/p?view\/(event_poster|subject|note|status|group|group_topic|photo|richtext)\/).+(\/public\/.+\..+)$/,
                function(prefix){
                    return `$1${prefix}$3`
                }]
    }
    const prefixs=['r','raw','l','large']
    document.head.appendChild(style)
    const imgs =document.querySelectorAll("img")
    imgs.forEach((img)=>{
        if(regexps.userhead[0].test(img.src)){
            let index = 0
            let rpic=img.src.replace(regexps.userhead[0],regexps.userhead[1](prefixs[index]))
            const headWrap = document.createElement('div')
            headWrap.className='uhead-wrap'
            const rawImg = document.createElement('img')
            rawImg.className='raw-uhead'
            rawImg.dataset.src=rpic
            if(img.x>document.documentElement.offsetWidth/2-img.width/2) rawImg.style.cssText='left: initial; right: 0px;'
            headWrap.append(img.cloneNode(),rawImg)
            img.replaceWith(headWrap)
            headWrap.addEventListener("mouseenter",()=>{
                if(!headWrap.children[1].src){
                    headWrap.children[1].src=headWrap.children[1].dataset.src
                }
            })
            rawImg.onerror=(e)=>{
                console.log(index)
                index+=1
                if(index>=prefixs.length) return
                rawImg.src=rawImg.src.replace(regexps.userhead[0],regexps.userhead[1](prefixs[index]))
            }
        }
        else if(regexps.common[0].test(img.src)){
            let index = 0
            img.src =img.src.replace(regexps.common[0],regexps.common[1](prefixs[index]))
            img.onerror=(e)=>{
                index+=1
                if(index>=prefixs.length) return
                img.src=img.src.replace(regexps.common[0],regexps.common[1](prefixs[index]))
            }
        }
    })
})();