// ==UserScript==
// @name Link Copy for Jdownloader
// @version 1.01
// @description 링크 복사
// @author DandyClubs
// @include /naughtyblog\.org/
// @include /maxjav\.com/
// @include /(8kcosplay\.com|blogjav\.net|thotsgirls\.com)/
// @include /top-modelz\.org/
// @include /wetholefans\.com/
// @include /pornchil\.com\/.*/
// @include /pornrips\.cc/
// @include /javpink\.com/
// @include /siteripbb\.org/
// @include /javfree\.me/
// @include /pornobunny\.org/
// @include /adult-porno\.org/
// @include /pornrip\.cc/
// @include /fhdporn\.video/
// @include /asianscan\.biz/
// @include /sharepornlink\.com\/.*/
// @include /javarchive\.com/
// @include /0xxx\.ws/
// @include /hpjav\.tv/
// @include /kbjme\.com\/\d+/
// @include /av18plus\.com/
// @require https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js
// @require https://greasyfork.org/scripts/451572-rootdomain/code/RootDomain.js?version=1095109
// @require https://greasyfork.org/scripts/451573-copy-link-common-library/code/Copy%20Link%20Common%20Library.js?version=1095463
// @require https://greasyfork.org/scripts/451574-key-press/code/Key%20Press.js?version=1095111
// @grant GM_addStyle
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_deleteValue
// @grant GM_listValues
// @grant GM_setClipboard
// @grant window.close
// @grant GM_xmlhttpRequest
// @run-at document-body
// @noframes
// @license MIT
// @namespace https://greasyfork.org/users/15621
// ==/UserScript==
(function() { var css = document.createElement('link'); css.href = 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.2.0/css/all.min.css'; css.rel = 'stylesheet'; css.type = 'text/css'; document.getElementsByTagName('head')[0].appendChild(css); })();
GM_addStyle (`
@import url('https://fonts.googleapis.com/css2?family=M+PLUS+Rounded+1c:wght@600&family=Noto+Sans+KR:wght@600&family=Noto+Sans:wght@600&display=swap');
.CloseIcon, .CopyIcon, .Minus, .GetTitle {
text-align: center;
cursor: pointer;
color: dodgerblue !important;
background-color:transparent !important;
font-style: initial !important;
}
.IconSet {
word-spacing: .5rem;
white-space : nowrap;
background-color:transparent !important;
}
.CopyNotice {
font-family: 'Nanum Gothic', 'M PLUS Rounded 1c', 'Noto Sans', sans-serif !important;
margin-left: auto;
margin-right: auto;
border-radius: 4px;
color: white !important;
background: rgba(255, 110, 0, 0.75) !important;
padding: .25em 1em;
white-space: pre;
text-shadow: initial !important;
text-align: left;
line-height: 1.25em;
font-weight: initial !important;
font-style: initial !important;
display: -webkit-box;
-webkit-line-clamp: 15;
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
-webkit-transition: height 0.3s ease-in-out;
-o-transition: height 0.3s ease-in-out;
transition: height 0.3s ease-in-out;
}
.CopyNotice:not(.active) {
display: none;
}
.CenterBox {
right: 50%;
left: auto;
top: 1px;
margin: 0 auto;
max-width: max-content;
position: fixed !important;
word-spacing: .5rem;
padding: .25em;
font-style: initial !important;
text-align: center;
color: dodgerblue !important;
background-color:transparent !important;
}
.ToTop {
font-style: initial !important;
text-align: center;
cursor: pointer;
padding: .25em !important;
border-radius: .25em !important;
-webkit-box-sizing: border-box !important;
box-sizing: border-box !important;
background-color: rgba(255,255,255,0.5) !important;
}
.State {
display: inline-block;
font-weight: bold;
text-align: right;
vertical-align: middle;
font-family: 'Noto Sans', sans-serif !important;
background-color:transparent !important;
font-style: italic !important;
width: 5ch;
}
.CopyButton, .ClearButton {
font-style: initial !important;
background-color:transparent !important;
word-spacing: .5rem;
cursor: pointer;
}
`);
var CopyLinks = []
var AllCopyLinks = []
var TmpLinksDB = []
var CopyLinksBackup, MakeIconTimer
const PageURL = window.location !== window.parent.location ? document.referrer : document.location.href;
const RootDomain = extractRootDomain(PageURL)
//console.log('RootDomain: ', RootDomain)
var RootDomainDB = JSON.parse(GM_getValue(RootDomain, "[]"))
//console.log(RootDomainDB)
var GetState, searchDB
GetState = RootDomainDB
//console.log(GetState)
var MakerCfg = false
var CfgReleaseDate = false
var Maker = '', ReleaseDate = ''
var GetDPI, DefaultFontSize
var Target, DownloadArea, CopyTitle, CopyOffSetArea, InfoArea, Resolution = '', TitleLast = '', Series ='', Title, ID = '', TitleID, CopyTitleTmp, InfoTitleTmp, CoverImage, MatchWebRegExp, Gallery
var UrlTitle = ''
const SkipFilter = new RegExp('keep2share\.cc\/pr\/|demosaic|upgrade|javascript|SKIP|pixhost\.to\/gallery\/|imgchili\.net\/show|#$|^\/|^(?=.*' + window.location.origin + ')(?!.*\\?site).*$', 'i')
//console.log(SkipFilter)
const SkipClassNames = ['adead_link', 'autohyperlink', 'social-icon']
const JapaneseChar = /[\u3000-\u303f\u3040-\u309f\u30a0-\u30ff\uff00-\uff9f\u4e00-\u9faf\u3400-\u4dbf]/g
const SearchID = /([a-zA-Z]{2,11}-?\d{2,6}[a-zA-Z]?|\d{2,4}[a-zA-Z]{2,7}-?\d{3,6}[a-zA-Z]?|[a-zA-Z]{1,2}-?\d{2}-?\d{2}|[a-zA-Z]{2,7}-?[a-zA-Z]{1,2}\d{2})(.*)/
const SearchFC2ID = /(^FC2.+\d{6})(.*)/
const SearchIDRegExp = /^(\[\s?)?(?=([a-zA-Z]{2,11}-?\d{2,6}[a-zA-Z]?|\d{2,4}[a-zA-Z]{2,7}-?\d{3,6}[a-zA-Z]?|[a-zA-Z]{1,2}-?\d{2}-?\d{2}|[a-zA-Z]{2,7}-?[a-zA-Z]{1,2}\d{2}))(?!(C_\d+|file\d+))(.*)$/
const K2SRegExp = /(.*k2s\.cc\/file\/)(.*\/?)/
async function Start() {
GetDPI = window.devicePixelRatio
DefaultFontSize = getDefaultFontSize()
//console.log('GetDPI: ', GetDPI, 'DefaultFontSize: ', DefaultFontSize)
document.querySelector("body").insertAdjacentHTML('afterbegin', '<div class="CenterBox" style="display: none"></>')
document.querySelector("div.CenterBox").insertAdjacentHTML('beforeend', '<i class="ToTop fa-solid fa-circle-chevron-up"></>')
document.querySelector("div.CenterBox").insertAdjacentHTML('beforeend', ' <i class="ClearButton far fa-minus-square"></>')
document.querySelector("div.CenterBox").insertAdjacentHTML('beforeend', ' <i class="CopyButton fas fa-paste"></>')
document.querySelector("div.CenterBox").insertAdjacentHTML('beforeend', '<i class="State"></>')
document.querySelector(".ToTop").onclick = () => window.scrollTo({ top: 0, behavior: 'smooth' })
console.log('Link Copy Start!')
let CneterBoxFontSize = Number(((1/(GetDPI/1.5))*(16/DefaultFontSize)).toFixed(2)) + 'rem'
let CenterBoxZIndex = getMaxZIndex() + 1
let StateFontSize = Number(((1/(GetDPI/1.5))*0.65*(16/DefaultFontSize)).toFixed(2)) + 'rem'
let StateLineHeight = Number(((1/(GetDPI/1.5))*(16/DefaultFontSize)).toFixed(2)) + 'rem'
document.querySelector('.CenterBox').style.cssText = `font-size: ${CneterBoxFontSize}; z-index: ${CenterBoxZIndex}; display: block;`
document.querySelector('.State').style.cssText = `font-size: ${StateFontSize}; line-height: ${StateLineHeight}`
document.querySelector('.State').textContent = ' ' + GetState.length
if(/naughtyblog\.org\/.+/.test(PageURL)){
CopyOffSetArea = document.querySelector('.post-title.entry-title')
CopyTitle = CopyOffSetArea.innerText
DownloadArea = document.querySelectorAll('div#download, div#downloadhidden')
CoverImage = document.querySelector('div.post-content-single p a') ? document.querySelector('div.post-content-single p a').href : ''
let MatchCast, InfoAreaCast, Title, Cast, SearchCast, SearchTitle, SearchWeb, FirstMatchCast, FirstMatchWeb, InfoCast, SearchWebPoint, SearchCastPoint, Released, ReleasedEn, Episode
//CopyTitle에서 MatchWeb 찾기
let MatchWebPoint = CopyTitle.search(/\s-\s/)
console.log('MatchWebPoint: ' + MatchWebPoint)
let MatchWeb = MatchWebPoint !== -1 ? CopyTitle.substr(0, MatchWebPoint).replace(/\s/g, '') : CopyTitle
MatchWebRegExp = new RegExp(MatchWeb.replaceAll("'", ""), 'i')
console.log('MatchWeb: ' + MatchWeb)
InfoArea = document.querySelector('div.post-content-single').innerText.replace(/(?:(?:\r\n|\r|\n)\s*){2}/gm, '\n').replace(/^(\s?(UPDATED|EARLY LEAK)\s?)/gim,'').split(/\n/)
InfoArea = InfoArea.filter(function(e){return e})
InfoArea = InfoArea.filter((element) => !/^(http|Size|Download|Watch online|Spare links)/i.test(element));
console.log('InfoArea: ', InfoArea)
InfoAreaCast = document.querySelector('div.post-content-single p strong').innerText.replace(/(?:(?:\r\n|\r|\n)\s*){2}/gm, '\n').replace(/^(\s?(UPDATED|EARLY LEAK)\s?)/gim,'').split(/\n/)
InfoAreaCast = InfoAreaCast.filter(function(e){return e})
console.log(InfoAreaCast)
if(CopyTitle.match(/Updates/i)){
CoverImage = ''
MutilSubTitle(MatchWeb, MatchWebPoint, InfoAreaCast, DownloadArea)
}
else if(!CopyTitle.match(/Updates/i) && InfoAreaCast.length > 1 ){
console.log('Mutil SubTitle....')
MutilSubTitle(MatchWeb, MatchWebPoint, InfoAreaCast, DownloadArea)
}
else if(!CopyTitle.match(/SITERIP|OnlyFans|Collection/i)){
//CopyTitle에서 배우명 찾기
MatchCast = MatchWebPoint !== -1 ? CopyTitle.substr(MatchWebPoint + 3).split(/&|\s|,|:/) : CopyTitle.match(/.+/)
MatchCast = MatchCast ? MatchCast.filter(function(e){return e}) : []
MatchCast = MatchCast ? MatchCast.filter((entry) => isNaN(entry)) : []//숫자 및 단일글자 제거
MatchCast = MatchCast ? MatchCast.filter((entry) => entry.length > 1) : []//숫자 및 단일글자 제거
console.log('MatchCast: ' + MatchCast)
let MatchTitle = MatchWebPoint !== -1 ? CopyTitle.substr(MatchWebPoint+3) : CopyTitle
console.log('MatchTitle: ' + MatchTitle)
for (let i = 0; i < InfoArea.length; i++) {
if(!Cast){
Cast = InfoArea[i].match(/Cast\s?:/) ? InfoArea[i].match(/Cast\s?:(.+)/).pop() : ''
console.log('Cast: ', Cast)
}
//배우명 작품타이틀 찾기
if(!FirstMatchCast && InfoArea[i].match(/-/g) && !Cast){
//배우명 찾기
SearchCastPoint = InfoArea[i].search(/\s-\s/)
console.log('SearchCastPoint: ' + SearchCastPoint)
SearchCast = SearchCastPoint !== -1 ? InfoArea[i].substr(0, SearchCastPoint).split(/\&|\s|,/) : new Array(InfoArea[i])
SearchCast = SearchCast ? SearchCast.filter(function(e){return e}) : ''//빈 배열값 제거
SearchCast = SearchCast ? SearchCast.filter((entry) => isNaN(entry)) : ''//숫자 제거
SearchCast = SearchCast ? SearchCast.filter((entry) => entry.length > 1) : ''//단일글자 제거
console.log('SearchCast: ' + SearchCast)
MatchCast = MatchCast ? MatchCast.find((val) => {
console.log('SearchingCast: ' + val)
return SearchCast.includes(val)
})
:''
console.log('MatchCast: ' + MatchCast)
//배우명 없는 경우 작품 타이틀로 찾기
if(!MatchCast && !SearchTitle){
SearchTitle = SearchCastPoint !== -1 ? InfoArea[i].substr(SearchCastPoint + 3) : InfoArea[i]
SearchTitle = InfoArea[i].toLowerCase().includes(SearchTitle.toLowerCase()) ? InfoArea[i] : ''
console.log('SearchTitle: ' + SearchTitle)
}
FirstMatchCast = MatchCast ? MatchCast : ''
SearchTitle = SearchTitle ? SearchTitle : ''
InfoCast = MatchCast && !InfoCast ? InfoArea[i] : ''
console.log('FirstMatchCast: ' + FirstMatchCast)
console.log('InfoCast: ' + InfoCast)
}
//MatchWeb 찾기
if(!InfoArea[i].match(/^http/) && !FirstMatchWeb){
SearchWebPoint = InfoArea[i].match(/(.+)(\.\d+\.\d+.\d+\.)(.+)/) ? InfoArea[i].match(/(.+)(\.\d+\.\d+.\d+\.)(.+)/)
: InfoArea[i].match(/(.+)(\.\d{4}\.)(.+)/) ? InfoArea[i].match(/(.+)(\.\d{4}\.)(.+)/) : ''
console.log('SearchWebPoint:', InfoArea[i], InfoArea[i].match(/(.+)(\.\d+\.\d+.\d+\.)(.+)/), InfoArea[i].match(/(.+)(\.\d{4}\.)(.+)/))
if(SearchWebPoint){
SearchWeb = SearchWebPoint[1] && MatchWeb.toLowerCase().match(SearchWebPoint[1].toLowerCase()) ? MatchWeb
: (MatchWeb.replace(/\!|'/g, '').toLowerCase()).match(SearchWebPoint[1].toLowerCase()) ? MatchWeb
: (MatchWeb.replace(/-|\s|\./g, '').toLowerCase()).match(SearchWebPoint[1].toLowerCase()) ? SearchWebPoint[1]
: (MatchWeb.toLowerCase()).match(SearchWebPoint[1].replace(/-|\s/g, '').toLowerCase()) ? SearchWebPoint[1]
: MatchWeb + '(' + SearchWebPoint[1] + ')'
console.log('SearchWeb: ' + SearchWeb)
FirstMatchWeb = SearchWeb ? SearchWeb
: ''
console.log('FirstMatchWeb 1st: ' + FirstMatchWeb)
}
else{
FirstMatchWeb = CopyTitle === InfoArea[i] ? MatchWeb
: InfoArea[i].match(MatchWeb) ? InfoArea[i].match(MatchWeb) : ''
var EpisodeTmp = InfoArea[i].match(/^(?!.*S\d+)(?=.*E\d{2,5}).*$/) ? '.' + InfoArea[i].match(/E\d{2,5}/) : ''
InfoCast = InfoCast && EpisodeTmp && InfoCast.match(/^(?!.*S\d+)(?=.*E\d{2,5}).*$/) ? InfoCast.replace(/-?\s?E\d{2,5}$/, '').trim() : InfoCast
console.log('FirstMatchWeb 2nd: ', FirstMatchWeb, '\nEpisode: ', Episode)
}
}
if(!Released){
Released = InfoArea[i].match(/(.+)(\.\d+\.\d+.\d+\.)(.+)/) ? InfoArea[i].match(/(\.\d+\.\d+.\d+\.)/).pop() : ''
console.log('Released: ', Released)
}
if(!Episode){
Episode = InfoArea[i].match(/^(?!.*S\d+)(?=.*E\d{2,5}).*$/) ? '.' + InfoArea[i].match(/E\d{2,5}/)
: EpisodeTmp ? EpisodeTmp
: ''
}
if(!ReleasedEn){
ReleasedEn = InfoArea[i].match(/Released:(.+)/i) ? InfoArea[i].match(/Released:(.+)/i).pop() : ''
console.log('ReleasedEn: ', ReleasedEn)
ReleasedEn = ReleasedEn ? '.' + ReleasedEn.trim().replace(/,/g, '').replace(/\s/g, '.') + '.' : ''
ReleasedEn = ReleasedEn && ReleasedEn.split('.')[1].match(/^[a-zA-Z]/) ? ReleasedEn.replace(ReleasedEn.split('.')[1], getNumericMonth(ReleasedEn.split('.')[1])) : ''
}
if(FirstMatchCast && FirstMatchWeb && Released){
CopyTitle = Released && InfoCast ? FirstMatchWeb + Episode + Released + InfoCast
: Released && !InfoCast && MatchTitle ? FirstMatchWeb + Episode + Released + MatchTitle
: FirstMatchWeb + Episode + Released + InfoCast
console.log('All Match: ' + CopyTitle)
break
}
else if(FirstMatchCast && FirstMatchWeb && ReleasedEn){
CopyTitle = InfoCast ? FirstMatchWeb + Episode + ReleasedEn + InfoCast
: !InfoCast && FirstMatchCast ? FirstMatchWeb + Episode + ReleasedEn + FirstMatchCast
: FirstMatchWeb + Episode + ReleasedEn + (InfoCast ? InfoCast : FirstMatchCast)
console.log('Some Match: ' + CopyTitle)
}
else if(!FirstMatchCast && !FirstMatchWeb && Released){
if(CopyTitle === InfoArea[i]){
console.log('Same Title: ' + CopyTitle, InfoArea[i])
}
}
else if(MatchCast == MatchTitle && FirstMatchWeb && Released){
InfoCast = InfoCast ? InfoCast : Cast ? '(' + Cast.trim() + ')' : ''
CopyTitle = FirstMatchWeb + Episode + Released + InfoCast
console.log('MatchCast == MatchTitle: ' + CopyTitle)
}
else if(!FirstMatchCast && MatchWeb && FirstMatchWeb && Released && MatchCast){
CopyTitle = MatchWeb + "(" + FirstMatchWeb + ")" + Episode + Released + MatchCast.join(' ')
console.log('MatchWeb VS FirstMatchWeb: ' + CopyTitle, InfoArea[i])
}
else if(i == InfoArea.length -1){
console.log( MatchWeb, SearchWeb, Released, ReleasedEn, FirstMatchCast, Episode, InfoCast )
InfoCast = InfoCast ? InfoCast : Cast ? '(' + Cast.trim() + ')' : ''
console.log('InfoCast: ', InfoCast)
Released = Released ? Released : ReleasedEn ? ReleasedEn : ''
CopyTitle = MatchWeb && Released && SearchWebPoint && InfoCast ? MatchWeb + '(' + SearchWebPoint[1] + ')' + Episode + Released + InfoCast
: MatchWeb && Released && InfoCast ? MatchWeb + Episode + Released + InfoCast
: MatchWeb && Released && FirstMatchCast ? MatchWeb + Episode + Released + FirstMatchCast
: SearchWeb && !Released && SearchWebPoint && SearchWeb&& InfoCast ? SearchWeb + SearchWebPoint[2] + Episode + InfoCast
: MatchWeb && Episode && MatchTitle && InfoCast ? MatchWeb + Episode + MatchTitle + InfoCast
: MatchWeb && SearchTitle && !InfoCast && Released ? MatchWeb + Episode + Released + SearchTitle
: MatchWeb && MatchTitle && !InfoCast && Released ? MatchWeb + Episode + Released + MatchTitle
: MatchWeb && Released && InfoCast ? MatchWeb + Episode + Released + InfoCast
: SearchWeb && InfoCast ? SearchWeb + Episode + InfoCast
: CopyTitle + InfoCast
console.log('End : ', CopyTitle)
}
}
CopyTitle = CopyTitle.replace(/(S\d+):(E\d+)/i, '$1$2')
CopyTitle = byteLengthOf(CopyTitle, 250)
CopyTitle = FilenameConvert(CopyTitle) + Resolution
console.log('CopyTitle: ' + CopyTitle)
let LinkDB = []
for (let i = 0; i < DownloadArea.length; i++) {
let Links = MatchRegex(DownloadArea[i], new RegExp('1080p', 'i'), 'href')
console.log('1080p: ', Links)
if(Links?.length > 0){
LinkDB.push(...Links)
}
else if(!Links?.length){
Links = MatchRegex(DownloadArea[i], new RegExp('2160p', 'i'), 'href')
console.log('2160p: ', Links)
if(Links?.length > 0){
LinkDB.push(...Links)
}
else if(!Links?.length){
Links = MatchRegex(DownloadArea[i], new RegExp('720p', 'i'), 'href')
console.log('720p: ', Links)
if(Links?.length > 0){
LinkDB.push(...Links)
}
else if(!Links?.length){
Links = MatchRegex(DownloadArea[i], new RegExp(MatchWeb + '|' + MatchCast, 'i'), 'href')
console.log('Links: ', Links)
LinkDB.push(...Links)
}
}
}
}
LinkDB = LinkDB?.length > 0 ? LinkDB.map((entry) => entry.outerHTML) : ''
console.log('LinkDB: ', LinkDB)
let container = document.createElement("div")
LinkDB.forEach((el, i) => {
const fragment = document.createRange().createContextualFragment(el);
console.log(fragment.children[0]);
container.appendChild(fragment.children[0]);
})
container.classList.add("DownloadArea")
document.body.appendChild(container);
DownloadArea = document.querySelectorAll('div.DownloadArea')
console.log('DownloadArea: ', DownloadArea)
}
if(!document.querySelector('.GetTitle')){
document.querySelector("div#main-content.main-content-single div div.post-content-single p strong").insertAdjacentHTML('afterend', ' <i class="GetTitle fas fa-paste"></>')
}
document.querySelector('.GetTitle').addEventListener("click", async function(event){
event.preventDefault()
event.target.style.setProperty('color', 'Orange', 'important')
updateClipboard(CopyTitle)
})
}
else if(/maxjav.com\/\d+/.test(PageURL) && window.top === window.self){
CopyOffSetArea = document.querySelector('div#content > div > .title')
CopyTitle = CopyOffSetArea.innerText
CopyTitle = CopyTitle.match(/\[?.*Subtitle\]?(.+)/) ? CopyTitle.match(/\[.+Subtitle\](.+)/).pop() : CopyTitle
CopyTitle = CopyTitle.replace(/amp;/g, '').replace(/(\s)?\/(\s)?/g, '/').replace(/(-|–)\sHD/, '').replace(/amp;|\(\s?ブルーレイ版\s?\)|\(ブルーレイディスク版\)|:/g, '').trim()
console.log(CopyTitle)
if(!CopyTitle.match(/^Collection/)){
InfoArea = document.querySelector('div#content > div > .entry > p').innerText.replace(/(?:(?:\r\n|\r|\n)\s*){2}/gm, '\n').split(/\n\n|\n/)
InfoArea = InfoArea.filter(function(e){return e})//빈 배열값 제거
console.log(InfoArea)
//Series = InfoArea.find(InfoSearch => InfoSearch.match(/シリーズ:?.*/)) ? InfoArea.find(InfoSearch => InfoSearch.match(/シリーズ:?.*/)).replace(/シリーズ:?/, '').trim() : ''
for (let i = 0; i < InfoArea.length; i++) {
if(!Title){
console.log(CopyTitle.match(SearchID))
CopyTitleTmp = CopyTitle.match(SearchIDRegExp) ? CopyTitle.match(SearchID).pop().trim() : ''
InfoTitleTmp = InfoArea[i].match(SearchIDRegExp) ? InfoArea[i].match(SearchID).pop().trim() : ''
console.log('CopyTitleTmp: ', CopyTitleTmp, '\nInfoTitleTmp: ', InfoTitleTmp)
//CopyTitleTmp.match(/[\u3040-\u309f\u30a0-\u30ff]/g) 일본어 히라가나 카타가나 찾기
if(CopyTitleTmp && InfoTitleTmp){
Title = CopyTitleTmp.toLowerCase() === InfoTitleTmp.toLowerCase() ? CopyTitleTmp
: (CopyTitleTmp.match(JapaneseChar) || []).length >= (InfoArea[i].match(JapaneseChar) || []).length ? CopyTitleTmp
: (CopyTitleTmp.match(JapaneseChar) || []).length < (InfoArea[i].match(JapaneseChar) || []).length ? InfoTitleTmp
: CopyTitleTmp
Title = Title.trim() + ' '
console.log('Title 1st: ' + Title)
}
else{
Title = CopyTitleTmp && (CopyTitle.match(JapaneseChar) || []).length >= (InfoArea[i].match(JapaneseChar) || []).length ? CopyTitleTmp
: InfoTitleTmp && InfoTitleTmp.match(JapaneseChar) && (CopyTitle.match(JapaneseChar) || []).length <= (InfoArea[i].match(JapaneseChar) || []).length ? InfoTitleTmp
: (CopyTitle.match(JapaneseChar) || []).length < (InfoArea[i].match(JapaneseChar) || []).length ? InfoArea[i]
: CopyTitle.match(JapaneseChar) ? CopyTitle
: InfoArea[i].match(JapaneseChar) ? InfoArea[i]
: CopyTitle
Title = Title.trim() + ' '
Title = mbConvertKana(Title, 'rans')
console.log('Title 2nd: ' + Title)
}
}
if(!ID){
console.log(CopyTitle.match(SearchID), InfoArea[i].match(SearchID))
let TitleID = CopyTitle.match(SearchIDRegExp) ? CopyTitle.match(SearchID)[1] : CopyTitle.match(SearchFC2ID) ? CopyTitle.match(SearchFC2ID)[1] : ''
let InfoID = InfoArea[i].match(SearchIDRegExp) ? InfoArea[i].match(SearchID)[1] : InfoArea[i].match(SearchFC2ID) ? InfoArea[i].match(SearchFC2ID)[1] : ''
if(TitleID && InfoID && TitleID.replace(/-/g, '').trim().toLowerCase() === InfoID.replace(/-/g, '').trim().toLowerCase()){
ID = TitleID.match(/-/g) && InfoID.match(/-/g) ? TitleID
: TitleID.match(/-/g) ? TitleID
: InfoID.match(/-/g) ? InfoID.match(/-/g)
: TitleID
}
else{
ID = TitleID ? TitleID : InfoID
}
console.log('ID: ' + ID)
if(ID){
ID = ID.trim() + ' '
}
}
if(CfgReleaseDate && !ReleaseDate && InfoArea[i].match(/Release Date:/)){
ReleaseDate = InfoArea[i].match(/Release Date:(.+)/)[1].replace(/\//g, '-').trim()
}
if(MakerCfg && !Maker && InfoArea[i].match(/(Maker|Studio)\s?:(.+)/)){
Maker = InfoArea[i].match(/(Maker|Studio)\s?:(.+)/)[2].replace(/(\s)?\/(\s)?/g, '/').trim()
}
if(Title && ID && ReleaseDate){
break
}
}
Maker = Maker ? '[' + Maker + '] ' : ''
ReleaseDate = ReleaseDate ? '(' + ReleaseDate + ') ' : ''
Title = Maker + ID + ReleaseDate + Title
if(byteLengthOfCheck(Title) > 250){
let TitleLast = getLastText(Title)
if(typeof TitleLast == 'undefined' || !TitleLast || TitleLast.length === 0 || TitleLast === "" || !/[^\s]/.test(TitleLast) || /^\s*$/.test(TitleLast) || TitleLast.replace(/\s/g,"") === ""){
CopyTitle = byteLengthOf(Title, 250).trim()
}
else{
Title = Title.split(TitleLast)[0].trim()
Title = byteLengthOf(Title, 250 - byteLengthOfCheck(TitleLast))
console.log('Title: ', Title, TitleLast)
CopyTitle = (Title + TitleLast).trim()
}
}
else CopyTitle = Title.trim()
console.log('Last Title: ' + CopyTitle)
}
//CopyTitle = CopyOffSetArea.textContent.replace(/\s–\s(UltraHD|Full|HD|SD)/, '').trim()
DownloadArea = document.querySelectorAll('div#content > div > div.entry p')
CoverImage = DownloadArea[0].querySelector('p img') ? DownloadArea[0].querySelector('p img').src : ''
}
else if(/javpink\.com\/\?p/.test(PageURL)){
CopyOffSetArea = document.querySelector('.item > .title')
Title = CopyOffSetArea.textContent.trim()
DownloadArea = document.querySelectorAll('.item > .content')
CoverImage = DownloadArea[0].querySelector('p img') ? DownloadArea[0].querySelector('p img').src : ''
for (let i = 0; i < DownloadArea.length; i++) {
InfoArea = DownloadArea[i].innerText.replace(/(?:(?:\r\n|\r|\n)\s*){2}/gm, '\n').split(/\n\n|\n/)
}
InfoArea = InfoArea.filter(function(e){return e})//빈 배열값 제거
console.log(InfoArea)
Series = InfoArea.find(InfoSearch => InfoSearch.match(/シリーズ:?.*/)) ? InfoArea.find(InfoSearch => InfoSearch.match(/シリーズ:?.*/)).replace(/シリーズ:?/, '').trim() : ''
Title = mbConvertKana(Title, 'rans')
if(byteLengthOfCheck(Title) > 250){
let TitleLast = getLastText(Title)
if(typeof TitleLast == 'undefined' || !TitleLast || TitleLast.length === 0 || TitleLast === "" || !/[^\s]/.test(TitleLast) || /^\s*$/.test(TitleLast) || TitleLast.replace(/\s/g,"") === ""){
CopyTitle = byteLengthOf(Title, 250).trim()
}
else{
Title = Title.split(TitleLast)[0].trim()
Title = byteLengthOf(Title, 250 - (byteLengthOfCheck(TitleLast)))
console.log('Title: ', Title, TitleLast)
CopyTitle = (Title + TitleLast).trim()
}
}
else CopyTitle = Title.trim()
}
else if(/top-modelz.org\/.+html/.test(PageURL)){
CopyOffSetArea = document.querySelector('.news-detalis h2')
Title = CopyOffSetArea.textContent.trim()
DownloadArea = document.querySelectorAll('div#content div#l-content div#dle-content div.news-block div.newspad')
CoverImage = DownloadArea[0].querySelector('p img') ? DownloadArea[0].querySelector('p img').src : ''
for (let i = 0; i < DownloadArea.length; i++) {
InfoArea = DownloadArea[i].innerText.replace(/(?:(?:\r\n|\r|\n)\s*){2}/gm, '\n').split(/\n\n|\n/)
}
InfoArea = InfoArea.filter(function(e){return e})//빈 배열값 제거
console.log(InfoArea)
let Released
for (let i = 0; i < InfoArea.length; i++) {
if(!Released){
Released = InfoArea[i].match(/\d+-\d+-\d+/) ? InfoArea[i].match(/\d+-\d+-\d+/) + ' ' : ''
}
if(Released){
break
}
}
CopyTitle = Released ? Released + Title : Title
CopyTitle = CopyTitle
CopyTitle = byteLengthOf(CopyTitle, 250)
}
else if(/(8kcosplay\.com|blogjav\.net|javfree\.me)\/\d+/.test(PageURL)){
CopyOffSetArea = document.querySelector('.entry-title')
if(/javfree\.me/.test(PageURL)){
DownloadArea = document.querySelectorAll('.entry-content')
//CoverImage = DownloadArea[0].querySelector('p img') ? DownloadArea[0].querySelector('p img').src : ''
}
else{
DownloadArea = document.querySelectorAll('.entry-content > p')
CoverImage = DownloadArea[0].querySelector('p img') ? DownloadArea[0].querySelector('p img').src : ''
}
Title = CopyOffSetArea.textContent.replace(/\[([a-zA-Z]{2,11}-?\d{2,6}[a-zA-Z]?|\d{2,4}[a-zA-Z]{2,7}-?\d{3,6}[a-zA-Z]?|[a-zA-Z]{1,2}-?\d{2}-?\d{2}|[a-zA-Z]{2,7}-?[a-zA-Z]{1,2}\d{2})\]/, '$1')
ID = Title.match(SearchFC2ID) ? Title.match(SearchFC2ID)[1] : ''
console.log('ID: ', ID)
Title = Title.replace(ID, '').trim()
Title = Title.split(/\s/).filter(function(e){return e})
console.log('Title: ', Title)
if(Title[0].match(/UNCENSORED/)){
Title.shift()
Title = Title.join(' ')
}
else{
Title = Title.join(' ')
}
for (let i = 0; i < DownloadArea.length; i++) {
InfoArea = DownloadArea[i].innerText.replace(/(?:(?:\r\n|\r|\n)\s*){2}/gm, '\n').split(/\n\n|\n/)
}
InfoArea = InfoArea.filter(function(e){return e})//빈 배열값 제거
console.log('InfoArea: ', InfoArea)
Series = InfoArea.find(InfoSearch => InfoSearch.match(/シリーズ:?.*/)) ? InfoArea.find(InfoSearch => InfoSearch.match(/シリーズ:?.*/)).replace(/シリーズ:?/, '').trim() : ''
console.log('Series: ', Series)
Title = mbConvertKana(Title, 'rans')
console.log(Title, ID)
if(byteLengthOfCheck(Title) > 250 - byteLengthOfCheck(ID)){
let TitleLast = getLastText(Title)
if(typeof TitleLast == 'undefined' || !TitleLast || TitleLast.length === 0 || TitleLast === "" || !/[^\s]/.test(TitleLast) || /^\s*$/.test(TitleLast) || TitleLast.replace(/\s/g,"") === ""){
CopyTitle = ID + byteLengthOf(Title, 250 - byteLengthOfCheck(ID)).trim()
}
else{
Title = Title.split(TitleLast)[0].trim()
Title = byteLengthOf(Title, 250 - (byteLengthOfCheck(ID) + byteLengthOfCheck(TitleLast)))
CopyTitle = (ID + Title + TitleLast).trim()
if(byteLengthOfCheck(CopyTitle) > 250){
console.log('CopyTitle length: ', byteLengthOfCheck(CopyTitle))
}
}
}
else CopyTitle = ID + Title.trim()
console.log('CopyTitle: ', CopyTitle)
}
else if(/wetholefans.com\/.+/.test(PageURL)){
CopyOffSetArea = document.querySelector('.post-title #news-title h1')
console.log(parseFloat(window.getComputedStyle(CopyOffSetArea).fontSize))
//console.log('CopyOffSetArea: ' + CopyOffSetArea)
Resolution = !Resolution && CopyOffSetArea && CopyOffSetArea.innerText.match(/[0-9]{3,4}p/) ? ' ' + CopyOffSetArea.innerText.match(/[0-9]{3,4}p/)[0] : ''
console.log(Resolution)
CopyTitle = CopyOffSetArea.innerText.replace(/\((UltraHD|Full|HD|SD).+/, '').replace(/\s+/g, ' ').trim()
CopyTitle = capitalize(CopyTitle)
DownloadArea = CopyOffSetArea.closest('.story').querySelectorAll('.quote')
let SearchLinks
DownloadArea.forEach((LinkEntry) => {
SearchLinks = LinkEntry.querySelectorAll('a')
})
console.log(SearchLinks)
for (let i = 0; i < SearchLinks.length; i++) {
if(!ReleaseDate){
ReleaseDate = SearchLinks[i].textContent.match(/(.+)(\.\d+\.\d+.\d+\.)(.+)/) ? SearchLinks[i].textContent.match(/(\.\d+\.\d+.\d+\.)/).pop() : ''
}
else{
break
}
}
let MatchWebPoint = CopyTitle.search(/\s-\s/)
let MatchWeb = MatchWebPoint !== -1 ? CopyTitle.substr(0, MatchWebPoint).replace(/\s/g, '') : CopyTitle
CopyTitle = ReleaseDate ? MatchWeb + ReleaseDate + CopyTitle.substr(MatchWebPoint+3) : CopyTitle
console.log(CopyTitle)
CopyTitle = CopyTitle.replace(/\*/g, '*').replace(/\?/g, '?')
CopyTitle = byteLengthOf(CopyTitle, 250)
}
else{
if(/(pornchil\.com\/)(?!$).*$/.test(PageURL)){
CopyOffSetArea = document.querySelector('.inside-article > .entry-content').querySelector('strong > span')
DownloadArea = document.querySelectorAll('.inside-article > div.entry-content')
console.log(CopyOffSetArea)
}
else if(/javarchive\.com\/\d{4,6}/.test(PageURL)){
CopyOffSetArea = document.querySelector('div.news > div.first_des') || document.querySelector('.menudd > h1')
DownloadArea = document.querySelectorAll('.link_archive_innew')
CoverImage = document.querySelector('div.category_news_phai_chinh > div.news > div.fisrst_sc img:not([src^="data"])') ? document.querySelector('div.category_news_phai_chinh > div.news > div.fisrst_sc img').getAttribute('src') : document.querySelector('div.category_news_phai_chinh > div.news > div.fisrst_sc img').getAttribute('data-src')
//console.log(CopyOffSetArea, DownloadArea, CoverImage)
}
else if(/kbjme\.com\/\d+/.test(PageURL)){
CopyOffSetArea = document.querySelector('.article_container h1')
DownloadArea = document.querySelectorAll('div.article_container div.context div#post_content')
console.log(DownloadArea)
document.querySelector('.article_container a').href = '#'
document.querySelector('.article_container a').removeAttribute('target')
}
else if(/hpjav.tv\/(ja\/)?\d+/.test(PageURL)){
CopyOffSetArea = document.querySelector('section div ol li.active')
CoverImage = document.querySelector('#JKDiv_0') ? GetBackGroundUrl(document.querySelector('#JKDiv_0')) : ''
let AddElementArea = document.querySelector('div#down_server')
let observer = new MutationObserver(function(mutations) {
if (document.querySelector('ul.pricing-table')) {
DownloadArea = document.querySelectorAll('ul.pricing-table')
console.log('DownloadArea: ', DownloadArea)
if(DownloadArea){
observer.disconnect()
window.scrollTo({ top: 0, behavior: 'auto' })
DownloadArea.forEach((LinkEntry) => {
LinkEntry.querySelectorAll('a').forEach((aEntry) => {
if( RootDomain !== (extractRootDomain(aEntry.href))){
aEntry.classList.remove("dbtn")
aEntry.removeAttribute('type')
aEntry.textContent = aEntry.href
aEntry.insertAdjacentHTML('beforebegin', '<img src=https://www.google.com/s2/favicons?domain=' + extractRootDomain(aEntry.href) +' ></>')
}
})
})
keyvent.down('ctrl alt a')
}
}
})
observer.observe(AddElementArea, { attributes: true, childList: true, subtree: true });
await sleep(1000)
document.querySelector('#download_div.btn.btn-info').click()
}
else if(/0xxx\.ws\/articles\/\d+/.test(PageURL)){
CopyOffSetArea = document.querySelector('div.container table#detail-table tbody tr td.taj:not(.levo)')
DownloadArea = document.querySelectorAll('div.container table#detail-table tbody tr td.dlinks.taj')
console.log(DownloadArea)
window.addEventListener('scroll', scrollToTop)
}
else if(/pornrips\.cc\/.+/.test(PageURL)){
CopyOffSetArea = document.querySelector('div#dle-content article div.head h1.title')
DownloadArea = document.querySelectorAll('div#dle-content article div.story_cont .screenshots, div#dle-content article div.story_cont div.links')
console.log(DownloadArea)
}
else if(/(thotsgirls\.com)\/.+/.test(PageURL)){
CopyOffSetArea = document.querySelector('.entry-title')
DownloadArea = document.querySelectorAll('div.entry-content')
console.log(DownloadArea)
}
else if(/fhdporn\.video\/.+/.test(PageURL)){
CopyOffSetArea = document.querySelector('h1.post-title')
DownloadArea = document.querySelectorAll('div.post-content')
console.log(DownloadArea)
}
else if(/av18plus\.com/.test(PageURL)){
CopyOffSetArea = document.querySelector('article.post > h1#post-title')
DownloadArea = CopyOffSetArea ? CopyOffSetArea.closest('article').querySelectorAll('p') : ''
console.log(DownloadArea)
}
else if(/siteripbb\.org\/.+/.test(PageURL)){
CopyOffSetArea = document.querySelector('.entry-title')
DownloadArea = document.querySelectorAll('div.entry-content')
console.log(DownloadArea)
}
else if(/asianscan\.biz\/.*\.html/.test(PageURL)){
CopyOffSetArea = document.querySelector('div div.content div#dle-content div.mainf3')
DownloadArea = document.querySelectorAll('div.content div#dle-content div.sscn div.quote')
console.log(DownloadArea)
}
else if(/adult-porno\.org\/.+/.test(PageURL)){
CopyOffSetArea = document.querySelector('div.full-in h1')
DownloadArea = document.querySelectorAll('div.quote')
console.log(DownloadArea)
Resolution = !Resolution && CopyOffSetArea && CopyOffSetArea.innerText.match(/[0-9]{3,4}p/) ? ' ' + CopyOffSetArea.innerText.match(/[0-9]{3,4}p/)[0] : ''
}
else if(/(sharepornlink\.com\/)(?!($|page))(.*)$/.test(PageURL)){
CopyOffSetArea = document.querySelector('.main-title.title')
DownloadArea = document.querySelectorAll('div.text p')
console.log(DownloadArea)
Resolution = !Resolution && CopyOffSetArea && CopyOffSetArea.innerText.match(/[0-9]{3,4}p/) ? ' ' + CopyOffSetArea.innerText.match(/[0-9]{3,4}p/)[0] : ''
}
else if(/pornobunny\.org\/.+/.test(PageURL)){
CopyOffSetArea = document.querySelector('.titlesf')
document.querySelector('a.quote-hider-trigger').click()
let AddElementArea = document.querySelector('div.sstory')
let observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
for (var i = 0; i < mutation.addedNodes.length; i++) {
if (mutation.addedNodes[i].nodeType === Node.ELEMENT_NODE) {
if (mutation.addedNodes[i].classList.contains('quote')) {
DownloadArea = document.querySelectorAll('div.quote')
console.log('DownloadArea: ', DownloadArea)
if(DownloadArea){
observer.disconnect()
window.scrollTo({ top: 0, behavior: 'auto' })
}
}
}
}
})
});
observer.observe(AddElementArea, { childList: true, subtree: true });
Resolution = !Resolution && CopyOffSetArea && CopyOffSetArea.innerText.match(/[0-9]{3,4}p/) ? ' ' + CopyOffSetArea.innerText.match(/[0-9]{3,4}p/)[0] : ''
}
else if(/pornrip\.cc\/.+\.html/.test(PageURL)){
CopyOffSetArea = document.querySelector('.title.ularge')
let AddElementArea = document.querySelector('article.main-article section.post-content')
let observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
for (var i = 0; i < mutation.addedNodes.length; i++) {
console.log(mutation.addedNodes[i])
if (mutation.addedNodes[i].nodeName === 'A') {
DownloadArea = document.querySelectorAll('article.main-article > section.post-content > div > div.su-spoiler > div.su-spoiler-content')
console.log('DownloadArea: ', DownloadArea)
if(DownloadArea){
observer.disconnect()
window.scrollTo({ top: 0, behavior: 'auto' })
document.querySelectorAll('a').forEach((aEntry) => {
if(/\?site.+$/.test(aEntry.href)){
aEntry.setAttribute('href', aEntry.href.replace(/\?site.+$/, ''))
}
})
break
}
}
}
})
});
observer.observe(AddElementArea, { childList: true, subtree: true })
Resolution = !Resolution && CopyOffSetArea && CopyOffSetArea.innerText.match(/[0-9]{3,4}p/) ? ' ' + CopyOffSetArea.innerText.match(/[0-9]{3,4}p/)[0] : ''
}
if(CopyOffSetArea){
//console.log('InnerText: ', getDirectInnerText(CopyOffSetArea))
CopyTitle = getDirectInnerText(CopyOffSetArea).replace('–', '-').replace(/\s+/g, ' ').replace(/\[(UltraHD|FullHD|HD).+\].*/, '').replace(/^Japanese porn -|6000Kbps FHD/, '').trim()
CopyTitle = CopyTitle.match(/(–\sSiterip)\s–.+/) ? CopyTitle.match(/(.+Siterip)\s–.+/)[1] : CopyTitle
CopyTitle = capitalize(CopyTitle)
if(byteLengthOfCheck(CopyTitle) > 250){
let TitleLast = getLastText(CopyTitle)
if(typeof TitleLast == 'undefined' || !TitleLast || TitleLast.length === 0 || TitleLast === "" || !/[^\s]/.test(TitleLast) || /^\s*$/.test(TitleLast) || TitleLast.replace(/\s/g,"") === ""){
Title = byteLengthOf(CopyTitle, 250).trim()
}
else{
Title = CopyTitle.split(TitleLast)[0].trim()
Title = byteLengthOf(Title, 250 - (byteLengthOfCheck(TitleLast)))
console.log('Title: ', Title, TitleLast)
Title = (Title + TitleLast).trim()
}
CopyTitle = Title.trim()
}
else CopyTitle = CopyTitle.trim()
}
}
}
document.addEventListener("DOMContentLoaded", async function(event) {
if(!document.querySelector("div.CenterBox")){
await Start()
}
document.addEventListener("click", async (event) => {
//console.log(event.target)
if(event.target.classList.contains('ClearButton')){
event.preventDefault()
await ClearUrls()
}
if(event.target.classList.contains('CopyButton')){
event.preventDefault()
await ClipPaste()
}
if(event.target.classList.contains('CopyIcon')){
event.preventDefault()
CopyGo()
}
if(event.target.classList.contains('CloseIcon')){
window.close()
}
if(event.target.classList.contains('Minus')){
event.preventDefault()
event.target.style = "color: Orange !important;";
RemoveDB(listToDo(DownloadArea))
CheckDB(listToDo(DownloadArea))
}
})
if(CopyOffSetArea && !document.querySelector(".IconSet")){
CopyOffSetArea.insertAdjacentHTML('afterend', '<div class="IconSet" style="top: auto; left: auto; max-width: max-content; visibility:hidden; position: absolute;"></>')
document.querySelector(".IconSet").insertAdjacentHTML('beforeend', '<i class="CopyIcon far fa-clone" style ="color: dodgerblue !important; visibility:hidden;"></>')
document.querySelector(".IconSet").insertAdjacentHTML('beforeend', ' <i class="CloseIcon fa-solid fa-square-xmark" style ="color: dodgerblue !important; visibility:hidden"></>')
document.querySelector(".IconSet").insertAdjacentHTML('beforeend', ' <i class="Minus fa-solid fa-magnifying-glass-minus" style ="color: dodgerblue !important; visibility:hidden;"></>')
document.body.insertAdjacentHTML('beforeend', '<div class="CopyNotice" style="visibility:hidden;"></>')
document.querySelector(".IconSet").style.visibility = "hidden"
if(document.hidden){
document.querySelector(".CopyIcon").style.visibility = "hidden"
}
let IconSetZIndex = MaxZIndexFromPoint('.IconSet') + 1
let IconSetFontSize = Number(((1/(GetDPI/1.5))*(16/DefaultFontSize)).toFixed(2)) + 'rem'
//document.querySelector('.IconSet').style.cssText = `font-size: ${CneterBoxFontSize}; z-index: ${CenterBoxZIndex}; display: block;`
Object.assign(document.querySelector('.IconSet').style, {fontSize: IconSetFontSize, zIndex: IconSetZIndex});
}
if(CopyOffSetArea){
console.log('Make Icon')
MakeIconTimer = setTimeout(() => MakeIcon(GetDPI), 2000)
/*
window.addEventListener("resize", function(e) {
console.log(e.type)
//GetDPI = window.devicePixelRatio
//DefaultFontSize = getDefaultFontSize()
//console.log('GetDPI: ', GetDPI, 'DefaultFontSize: ', DefaultFontSize)
//document.querySelector('.CenterBox').style.setProperty('font-size', Number(((1/(GetDPI/1.5))*(16/DefaultFontSize)).toFixed(2)) + 'rem', 'important');
//document.querySelector('.State').style.setProperty('font-size', Number(((1/(GetDPI/1.5))*0.65*(16/DefaultFontSize)).toFixed(2)) + 'rem', 'important');
//document.querySelector('.State').style.setProperty('line-height', Number(((1/(GetDPI/1.5))*(16/DefaultFontSize)).toFixed(2)) + 'rem', 'important');
//document.querySelector('.CenterBox').style.setProperty('z-index', getMaxZIndex() + 1)
//document.querySelector(".IconSet").style.setProperty('z-index', MaxZIndexFromPoint('.IconSet') + 1)
MakeIcon(GetDPI)
})
*/
}
})
document.addEventListener("visibilitychange", async function() {
//console.log("window is active!" )
RootDomainDB = JSON.parse(await GM_getValue(RootDomain, '[]'))
GetState = RootDomainDB
if(document.querySelector('.CenterBox')){
document.querySelector('.State').textContent = ' ' + GetState.length
document.querySelector('.ClearButton').style = "color: dodgerblue !important;";
document.querySelector('.CopyButton').style = "color: dodgerblue !important;";
}
})
async function CopyGo() {
let TitlePostion = getElementOffset(CopyOffSetArea)
let TitleHeight = Math.max(TitlePostion.height, parseFloat(window.getComputedStyle(CopyOffSetArea).fontSize))
let FixTop = Number((TitlePostion.top + TitlePostion.height).toFixed(2))
let FixLeft = Number((TitlePostion.left + 2).toFixed(2))
if(/pornchil.com/.test(PageURL)){
FixLeft = getElementOffset(document.querySelector(".entry-content > h6")).left
}
else if(/pornrips\.cc/.test(PageURL)){
FixLeft = getElementOffset(document.querySelector(".meta_date > .masha_index")).left
}
else if(/naughtyblog/.test(PageURL)){
FixTop = getElementOffset(document.querySelector(".post-title.entry-title")).top + getElementOffset(document.querySelector(".post-title.entry-title")).height
}
$('.CopyNotice').css({
"fontSize": Number(((1/(GetDPI/1.5))*0.6*(16/DefaultFontSize)).toFixed(2)) + 'rem',
"top": FixTop + window.scrollY
,"left": FixLeft + window.scrollX
, "position": "absolute",
"z-index": getMaxZIndex() + 1
})
event.target.style = "color: Orange !important;"
await CopyLink()
let container = document.querySelector('.CopyNotice')
container.classList.add('active')
container.style.height = 'auto'
var height = container.clientHeight + 'px'
container.style.height = '0px'
setTimeout(function () {
container.style.height = height;
container.style.visibility = "visible"
}, 0)
await sleep(3000)
container.style.height = '0px'
container.addEventListener('transitionend', function () {
container.classList.remove('active');
}, {
once: true
});
}
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
function getLastText(Text) {
let byteCheck = '', SearchCharPoint, TitleLastTmp
let ArrayDB = Text.split(/\s/).filter(function(e){return e})//빈 배열값 제거
let SeriesExp = new RegExp(Series + '.*')
let ModelNameExp = new RegExp(/\((?!.*\().*\)/)
let ModelName
//console.log(JapaneseChar.test([ArrayDB.length -1]) , ArrayDB[ArrayDB.length -1], ArrayDB[ArrayDB.length -2] + ' ' + ArrayDB[ArrayDB.length -1])
if(ModelNameExp.test(Text)){
console.log('Model Name: ', Text.match(ModelNameExp)[0])
ModelName = Text.match(ModelNameExp) ? Text.match(ModelNameExp)[0] : ''
Text = Text.replace(ModelNameExp, '').trim()
console.log(Text)
}
if(Series && SeriesExp.test(Text)){
console.log(Series, SeriesExp)
//console.log(Text.match(SeriesExp))
TitleLastTmp = Text.match(SeriesExp) ? Text.match(SeriesExp).pop() : ''
}
else if(/朝までハシゴ酒/.test(Text)){
TitleLastTmp = Text.match(/朝までハシゴ酒.*/)[0]
}
else if(/\d+/.test(ArrayDB[ArrayDB.length -1])){
console.log(ArrayDB[ArrayDB.length -1])
if(/ファイル\d+/.test(ArrayDB[ArrayDB.length -1])){
TitleLastTmp = ArrayDB[ArrayDB.length - 2] + ' ' + ArrayDB[ArrayDB.length - 1]
console.log('1st Match:' , TitleLastTmp)
}
else if(JapaneseChar.test(ArrayDB[ArrayDB.length -1])){
TitleLastTmp = ArrayDB[ArrayDB.length -1]
console.log('2nd Match:' , TitleLastTmp)
}
else if(byteLengthOfCheck(ArrayDB[ArrayDB.length -1]) < 100) {
TitleLastTmp = ArrayDB[ArrayDB.length - 2] + ' ' + ArrayDB[ArrayDB.length - 1]
console.log('3th Match:' , TitleLastTmp)
}
}
console.log('TitleLastTmp: ', TitleLastTmp, /\d+/.test(ArrayDB[ArrayDB.length -1]), byteLengthOfCheck(TitleLastTmp))
if(typeof TitleLastTmp == 'undefined' || !TitleLastTmp || TitleLastTmp.length === 0 || TitleLastTmp === "" || !/[^\s]/.test(TitleLastTmp) || /^\s*$/.test(TitleLastTmp) || TitleLastTmp.replace(/\s/g,"") === ""){
byteCheck = ''
}
else if(TitleLastTmp.match(/\d+/)){
if(SearchChar(TitleLastTmp, '】')){
SearchCharPoint = Text.lastIndexOf("【")
TitleLastTmp = Text.substring(SearchCharPoint)
console.log('TitleLastTmp: ', TitleLastTmp)
}
else if(SearchChar(TitleLastTmp, '、') && TitleLastTmp.length <= 10 ){
SearchCharPoint = TitleLastTmp.lastIndexOf("、")
TitleLastTmp = TitleLastTmp.substring(SearchCharPoint + 1)
console.log('TitleLastTmp: ', TitleLastTmp)
}
byteCheck = TitleLastTmp
console.log('byteCheck: ', byteCheck)
let FlagPoint = getFlag(byteCheck)
if (byteLengthOfCheck(byteCheck) >= 100){
console.log('CheckFlag: ', byteCheck, byteLengthOfCheck(byteCheck))
let byteCheckTmp = byteCheck.substring(FlagPoint[0])
if(!JapaneseChar.test(byteCheckTmp)){
byteCheckTmp = byteCheck.substring(FlagPoint[1])
}
if(byteLengthOfCheck(byteCheckTmp) > 250 - byteLengthOfCheck(ID)){
byteCheckTmp = ''
}
byteCheck = byteCheckTmp
}
if(!/\d+|【.*】$/.test(byteCheck)){
byteCheck = ''
}
console.log('TitleLast: ' , byteCheck)
}
if(ModelName) {
byteCheck = byteCheck + ModelName
}
return byteCheck
}
async function CollectionCoverImage(CoverImage){
RootDomainDB = JSON.parse(await GM_getValue(RootDomain, '[]'))
if(CoverImage){
await UpdateDB(CoverImage, FilenameConvert(CopyTitle) + Resolution)
await GM_setValue(RootDomain, JSON.stringify(RootDomainDB))
}
GetState = RootDomainDB
document.querySelector('.State').textContent = ' ' + GetState.length
return CoverImage
}
async function CollectionLinks(DownloadArea){
RootDomainDB = JSON.parse(await GM_getValue(RootDomain, '[]'))
var CollectionATag = []
DownloadArea.forEach((LinkEntry) => {
LinkEntry.querySelectorAll('a').forEach((aEntry) => {
if(/\?site.+$/.test(aEntry.href)){
aEntry.setAttribute('href', aEntry.href.replace(/\?site.+$/, ''))
}
CollectionATag.push(aEntry)
})
})
//console.log('CollectionATag: ', CollectionATag )
CollectionATag = CollectionATag.filter(el => SkipClassNames.some(Skip => !el.classList.contains(Skip))) // SkipClass
CollectionATag = CollectionATag.filter(el => !SkipFilter.test(el.href)) // SkipFilter
CollectionATag = CollectionATag.filter(el => ![...el.children].some(e => e.matches('img'))) // LinkItemsChilren
if(/blogjav/.test(RootDomain)){
CollectionATag = CollectionATag.filter(el => !el.textContent.match(/\.(mp4|mkv)$/i)) // Skip mp4 mkv
}
else if(/javarchive/.test(RootDomain)){
let RemainCount = CollectionATag.filter(el => !el.textContent.match(/k2s\.cc|part\d\.rar/i)) // Skip k2s part
//console.log('RemainCount:', RemainCount?.length)
if(RemainCount?.length){
CollectionATag = CollectionATag.filter(el => !el.textContent.match(/k2s\.cc|part\d\.rar/i)) // Skip k2s part
}
else{
CollectionATag = CollectionATag.filter(el => !el.textContent.match(/k2s\.cc/i)) // Skip k2s
}
}
//console.log('CollectionATag: ', CollectionATag )
let SkipLink, SkipClass, LinkItemsChilren
for (let i = 0; i < CollectionATag.length; i++) {
Target = CollectionATag[i].href
if(/naughtyblog.org/.test(RootDomain)){
if(CollectionATag[i].textContent.match(/SD\.mp4/gi)){
continue
}
else if(!CopyTitle.match(/SITERIP|OnlyFans|Updates|Collection/)){
Resolution = CollectionATag[i].textContent.match(/[0-9]{3,4}p/) ? '.XXX.' + CollectionATag[i].textContent.match(/[0-9]{3,4}p/)[0] : ''
}
}
if(/blogjav.net/.test(RootDomain)){
if(Target.match(/\.mp4(\.html)?$/gi)){
continue
}
}
if(Target){
if(CopyTitle){
CopyTitle = FilenameConvert(CopyTitle)
//CopyLinks += Target + "#Title=" + encodeURI(CopyTitle) + Resolution + "\n"
UrlTitle = CopyTitle + Resolution
//console.log('RootDomainDB: ', RootDomainDB)
//await GM_setValue(Target, "#Title=" + encodeURI(CopyTitle) + Resolution)
}
CopyLinks += Target + "\n"
await UpdateDB(Target, UrlTitle)
}
}
await GM_setValue(RootDomain, JSON.stringify(RootDomainDB))
GetState = RootDomainDB
document.querySelector('.State').textContent = ' ' + GetState.length
console.log(CopyLinks)
if(CopyLinks?.length){
return CopyLinks.split("\n").filter((item, i, allItems) => { return i === allItems.indexOf(item)}).join("\n")
}
else return null
}
async function UpdateDB(Target, UrlTitle){
if(Target.match(K2SRegExp)){
Target = Target.match(K2SRegExp)[1] + Target.match(K2SRegExp)[2].slice(0, 18)
}
searchDB = RootDomainDB.find( ({ U }) => U === Target )
//console.log(RootDomainDB, searchDB)
if(searchDB){
searchDB.T = UrlTitle
}
else{
RootDomainDB.push({U : Target , T : UrlTitle})
}
//console.log(RootDomainDB)
return RootDomainDB
}
async function RemoveDB(listToDelete){
RootDomainDB = RootDomainDB.filter( item => (!listToDelete.includes(item.U)) );
await GM_setValue(RootDomain, JSON.stringify(RootDomainDB))
GetState = RootDomainDB
document.querySelector('.State').textContent = ' ' + GetState.length
}
async function CheckDB(listTo){
if(GetState.length > 0){
let Check = RootDomainDB.some( item => (listTo.includes(item.U)))
//console.log('CheckDB: ', RootDomainDB, listTo, Check)
if(Check){
document.querySelector('.Minus').style.visibility = "visible"
}
else{
document.querySelector('.Minus').style.visibility = "hidden"
}
}
}
async function CopyLink(){
var CopyNoticeData = ''
//console.log('CopyLinks: ', CopyLinks, TmpLinksDB, !CopyLinks?.length, !TmpLinksDB?.length)
if(!CopyLinks?.length && !TmpLinksDB?.length){
CopyNoticeData = FilenameConvert(CopyTitle) + "\n"
AllCopyLinks = await CollectionLinks(DownloadArea)
//console.log('AllCopyLinks: ', AllCopyLinks)
if(AllCopyLinks){
if(CoverImage){
AllCopyLinks += await CollectionCoverImage(CoverImage)
}
JDownloader(AllCopyLinks, FilenameConvert(CopyTitle) + Resolution)
//updateClipboard(AllCopyLinks)
CopyNoticeData += AllCopyLinks
document.querySelector('.CopyNotice').textContent = CopyNoticeData
}
else{
document.querySelector('.CopyNotice').textContent = 'Empty Links'
}
}
else if(TmpLinksDB?.length > 0){
//console.log('TmpLinksDB: ', TmpLinksDB)
for (let i = 0; i < TmpLinksDB.length; i++) {
UpdateDB(TmpLinksDB[i].U, TmpLinksDB[i].T)
CopyLinks += TmpLinksDB[i].U + '\n'
//await GM_setValue(TmpLinksDB[i].Key, TmpLinksDB[i].Value)
}
await GM_setValue(RootDomain, JSON.stringify(RootDomainDB))
GetState = RootDomainDB
//console.log(GetState)
document.querySelector('.State').textContent = ' ' + GetState.length
//console.log(TmpLinksDB)
JDownloaderDB(TmpLinksDB)
//console.log(JdownloaderData)
//updateClipboard(CopyLinks)
CopyNoticeData = CopyLinks
document.querySelector('.CopyNotice').textContent = CopyNoticeData
}
await CheckDB(listToDo(DownloadArea))
CopyLinks = []
AllCopyLinks = []
}
function listToDo(Area) {
let List = [], CheckList = []
let Target
try {
Area.forEach((LinkEntry) => {
LinkEntry.querySelectorAll('a').forEach((aEntry) => {
if(CheckList.indexOf(aEntry) === -1){
CheckList.push(aEntry)
}
})
})
for (let i = 0; i < CheckList.length; i++) {
let SkipLink = SkipFilter.test(CheckList[i].href)
let LinkItemsChilren = [...CheckList[i].children].filter(e => e.matches('img'))
if(SkipLink || LinkItemsChilren?.length){
continue
}
Target = CheckList[i].href.replace(/\?site.+/, '')
if(Target.match(K2SRegExp)){
Target = Target.match(K2SRegExp)[1] + Target.match(K2SRegExp)[2].slice(0, 18)
}
if(List.indexOf(Target) === -1){
List.push(Target)
}
}
if(CoverImage){
List.push(CoverImage)
}
return List
} catch (err){
console.log(err)
return List
}
}
async function MutilSubTitle(MatchWeb, MatchWebPoint, InfoAreaCast, DownloadArea) {
let AreadyAdd = [], CastName, CastNameDB = [], CastFirstTitle, CastLastTitle
for (let i = 0; i < InfoAreaCast.length; i++) {
let MatchPoint = InfoAreaCast[i].search(/\s?-\s/)
console.log('MatchPoint: ', MatchPoint)
console.log(MatchWeb, InfoAreaCast[i].substr(0, MatchPoint).replace(/\s/g, ''))
if(MatchPoint !== -1 && MatchWeb !== InfoAreaCast[i].substr(0, MatchPoint).replace(/\s/g, '')){
CastName = MatchPoint !== -1 ? InfoAreaCast[i].substr(0, MatchPoint).replace(/\s?(,|&|aka.*)\s?/gi, '&').replace(/\s{2}/g, ' ').trim().replace(/\s/g, '.') : ''
console.log('CastName: ' , CastName)
if(CastName.match(/&/)){
CastNameDB = CastName.split('&')
CastName = CastNameDB[0] + '(.+)\?' + CastNameDB.pop()
}
}
else{
CastName = ''
}
console.log('CastName: ' , CastName)
console.log(MatchPoint, InfoAreaCast[i].lastIndexOf(' - '))
CastFirstTitle = MatchPoint !== -1 ? InfoAreaCast[i].slice(MatchPoint + 1, InfoAreaCast[i].length).replace(/\s-\s.*/, '').split(' ') : []
CastFirstTitle = CastFirstTitle?.length > 0 ? CastFirstTitle.filter((entry) => isNaN(entry)) : []//숫자 및 단일글자 제거
CastFirstTitle = CastFirstTitle?.length > 0 ? CastFirstTitle.filter((entry) => entry.length > 1) : []//숫자 및 단일글자 제거
CastFirstTitle = CastFirstTitle?.length > 0 ? CastFirstTitle.shift().trim() : ''
CastLastTitle = MatchPoint !== -1 ? InfoAreaCast[i].slice(MatchPoint + 1, InfoAreaCast[i].length).replace(/\s-\s.*/, '').split(' ') : []
//CastLastTitle = MatchPoint !== -1 ? InfoAreaCast[i].slice(MatchPoint + 1, InfoAreaCast[i].lastIndexOf(' - ')).replace(/\s-\s.*/, '').split(' ') : []
CastLastTitle = CastLastTitle?.length > 0 ? CastLastTitle.filter((entry) => isNaN(entry)) : []//숫자 및 단일글자 제거
CastLastTitle = CastLastTitle?.length > 0 ? CastLastTitle.filter((entry) => entry.length > 1) : []//숫자 및 단일글자 제거
CastLastTitle = CastLastTitle?.length > 0 ? CastLastTitle.pop().trim() : ''
console.log('Cast First & Last Title: ', CastFirstTitle, CastLastTitle)
DownloadArea = document.querySelectorAll('div#download')
DownloadArea.forEach((LinkEntry) => {
let Links
if(CastName){
Links = MatchRegex(LinkEntry, new RegExp(CastName + '.*' + CastFirstTitle + '.*' + CastLastTitle, 'i'), 'href')
if(!Links?.length){
Links = MatchRegex(LinkEntry, new RegExp(CastName, 'i'), 'href')
if(!Links?.length){
console.log('Links Empty...')
return
}
}
}
else{
Links = MatchRegex(LinkEntry, new RegExp(CastFirstTitle + '.*' + CastLastTitle, 'i'), 'href')
if(!Links?.length){
Links = MatchRegex(LinkEntry, new RegExp(CastFirstTitle, 'i'), 'href')
if(!Links?.length){
console.log('Links Empty...')
return
}
}
}
Links = Links.filter( ( el ) => !AreadyAdd.includes( el )) //이미 추가된 링크 제외
// 링크가 6개 이상일때 짝수인덱스 값만 가져오기
if(Links?.length >= 6){
var filtered = Links.filter(function(element, index, array) {
return (index % 2 === 0);
});
Links = filtered
}
console.log('Links: ', Links)
for (let j = 0; j < Links.length; j++) {
let LinkText = Links[j].innerText.search(MatchWebRegExp) ? Links[j].innerText.substr(Links[j].innerText.search(MatchWebRegExp)) : Links[j].innerText
console.log('LinkText: ', LinkText)
let Released = LinkText.match(/(.+)(\.\d+\.\d+.\d+\.)(.+)/) ? LinkText.match(/(\.\d+\.\d+.\d+\.)/).pop()
: MatchWebPoint !== -1 && LinkText.match(new RegExp(MatchWeb + '\\.\\d{4}\\.')) ? LinkText.match(new RegExp(MatchWeb + '\(\\.\\d{4}\\.\)')).pop()
: ''
console.log('Released: ', Released)
let Episode = LinkText.match(/E\d{2,5}/i) ? '.' + LinkText.match(/E\d{2,5}/i) + '.' : ''
Resolution = LinkText.match(/[0-9]{3,4}p/) ? '.XXX.' + LinkText.match(/[0-9]{3,4}p/)[0] : ''
let CastTitle = InfoAreaCast[i].substr(MatchPoint + 3) && Episode ? '- ' + InfoAreaCast[i].substr(MatchPoint + 3).replace(/-\sE\d{2,5}/i, '').trim()
: InfoAreaCast[i].substr(MatchPoint + 3) && !Episode ? '- ' + InfoAreaCast[i].substr(MatchPoint + 3)
: ''
console.log('CastTitle: ', CastTitle)
let CastRegExp = LinkText.match(CastFirstTitle) && LinkText.match(CastLastTitle) ? new RegExp(MatchWeb + Episode + Released + CastName + '.*(' + CastFirstTitle + ')?(.*' + CastLastTitle + ')?', 'i') : ''
console.log('CastRegExp: ', CastRegExp)
let Cast = LinkText.match(CastRegExp)
console.log('Cast: ', Cast)
Title = CastRegExp && Cast && Cast.length > 1 && Episode ? MatchWeb + Episode + Released + Cast.pop().replace(/\./g, ' ') + CastTitle
: Episode || Released ? MatchWeb + Episode + Released + InfoAreaCast[i]
: MatchWeb + ' ' + Released + InfoAreaCast[i]
Title = Title.replace(/(S\d+):(E\d+)/i, '$1$2')
Title = FilenameConvert(Title)
//CopyLinks += Links[j].href + "\n"
let U = Links[j].href
let T = Title + Resolution
console.log(Title, Links[j])
TmpLinksDB.push({U, T})
AreadyAdd.push(Links[j])
}
if(CoverImage){
let U = CoverImage
let T = FilenameConvert(CopyTitle) + Resolution
TmpLinksDB.push({U, T})
}
})
}
}
async function ClearUrls(){
document.querySelector('.ClearButton').style = "color: White !important;";
//document.querySelector('.ClearButton').style.setProperty('font-size', Number(((1/(GetDPI/1.5))*(16/DefaultFontSize)).toFixed(2)) + 'rem', 'important');
await GM_deleteValue(RootDomain)
RootDomainDB = JSON.parse(await GM_getValue(RootDomain, '[]'))
GetState = RootDomainDB
//console.log(GetState)
if(document.querySelector('.Minus')){
document.querySelector('.Minus').style.visibility = "hidden"
}
document.querySelector('.State').textContent = ' ' + 0
}
async function ClipPaste(){
document.querySelector('.CopyButton').style = "color: White !important;";
//document.querySelector('.CopyButton').style.setProperty('font-size', Number(((1/(GetDPI/1.5))*(16/DefaultFontSize)).toFixed(2)) + 'rem', 'important');
var ClipPasteData = JSON.parse(await GM_getValue(RootDomain, '[]'))
JDownloaderDB(ClipPasteData)
//updateClipboard(ClipPasteData)
}
function MakeIcon(GetDPI) {
clearTimeout(MakeIconTimer)
if(CopyOffSetArea){
let ModArea = CopyOffSetArea
let OffSetArea
let IconSet = document.querySelector(".IconSet")
//console.log(ModArea, ModArea.nodeType)
if(/kbjme\.com/.test(RootDomain)){
OffSetArea = ModArea.closest('.article_container')
OffSetArea.style.setProperty('position', 'relative')
}
else if(/javarchive\.com/.test(RootDomain)){
OffSetArea = ModArea.closest('.category_news_phai_chinh').querySelector('.menudd')
OffSetArea.style.setProperty('position', 'relative')
}
else if(/pornchil\.com/.test(RootDomain)){
OffSetArea = ModArea.closest('.entry-content')
OffSetArea.style.setProperty('position', 'relative')
}
else if(/top-modelz\.org/.test(RootDomain)){
OffSetArea = ModArea
OffSetArea.parentElement.style.setProperty('position', 'relative')
}
else if(/pornrips\.cc/.test(RootDomain)){
OffSetArea = ModArea
OffSetArea.parentElement.style.setProperty('position', 'relative')
}
else{
OffSetArea = ModArea
OffSetArea.parentElement.style.setProperty('position', 'relative')
}
var GetViewProperty = window.document.defaultView.getComputedStyle(ModArea, null)
var GetPadding = GetViewProperty.getPropertyValue('padding') || 0
var verticalalign = GetViewProperty.getPropertyValue('vertical-align') || 'middle'
var lineheight = GetViewProperty.getPropertyValue('line-height') || '1rem'
var Top = GetViewProperty.getPropertyValue('top') || 'auto'
var DisPlay = GetViewProperty.getPropertyValue('display') || 'auto'
let IconHeight = parseFloat(window.getComputedStyle(IconSet).fontSize)
let FontHeight = parseFloat(window.getComputedStyle(OffSetArea).fontSize)
let OffSetAreaElementOffset = getRelativeOffset(OffSetArea)
let OffSetAreatNodeTextElementOffset = getNodeTextElementOffset(OffSetArea)
let IconSetElementOffset = getRelativeOffset(IconSet)
//console.log(OffSetArea.offsetParent, GetPadding)
if(/javfree|blogjav|javpink|wetholefans/.test(PageURL)){
$('.IconSet').css({
"top": OffSetAreaElementOffset.top - IconSetElementOffset.height ,
"left": OffSetAreaElementOffset.width - IconSetElementOffset.width/2
})
}
else if(/naughtyblog|pornrip\.cc/.test(PageURL)) {
$('.IconSet').css({
"top": OffSetAreaElementOffset.top,
"left": OffSetAreaElementOffset.width - IconSetElementOffset.width,
"padding": GetPadding,
})
}
else if(/pornrips\.cc/.test(PageURL)) {
let MetaView = getRelativeOffset(OffSetArea.parentElement.querySelector('.meta > .meta_views'))
$('.IconSet').css({
"top": MetaView.top - IconSetElementOffset.height,
"left": MetaView.left + IconSetElementOffset.width,
})
console.log(getRelativeOffset(MetaView))
}
else if(/javarchive/.test(PageURL)) {
$('.IconSet').css({
"top": OffSetAreaElementOffset.top + OffSetAreaElementOffset.height - IconSetElementOffset.height/2,
"left": OffSetAreaElementOffset.left + OffSetAreaElementOffset.width - IconSetElementOffset.width
})
}
else if(/kbjme\.com/.test(PageURL)) {
$('.IconSet').css({
"top": getElementOffset(IconSet).height*3/2,
"left": OffSetAreaElementOffset.right - OffSetAreaElementOffset.width + IconSetElementOffset.width
})
//})
}
else if(/maxjav\.com/.test(PageURL)) {
$('.IconSet').css({
"top": OffSetAreaElementOffset.top + IconSetElementOffset.height/2,
"left": OffSetAreaElementOffset.left + OffSetAreaElementOffset.width - IconSetElementOffset.width
})
}
else if(/0xxx\.ws\/articles\/\d+/.test(PageURL)) {
//console.log((getElementOffset(OffSetArea).top - getNodeTextElementOffset(OffSetArea).top)/2)
$('.IconSet').css({
"top": OffSetAreaElementOffset.top,
"right": IconHeight,
"padding": GetPadding,
})
}
else if(/top-modelz\.org/.test(PageURL)) {
//console.log((getElementOffset(OffSetArea).top - getNodeTextElementOffset(OffSetArea).top)/2)
$('.IconSet').css({
"top": OffSetAreaElementOffset.top,
"right": IconHeight
})
}
else if(/hpjav\.tv/.test(PageURL)) {
$('.IconSet').css({
"top": OffSetAreaElementOffset.top - Math.abs(FontHeight - IconHeight)/2,
"left": OffSetAreaElementOffset.width + IconHeight
})
}
else if(/8kcosplay\.com|fhdporn/.test(PageURL)){
$('.IconSet').css({
"top": OffSetAreaElementOffset.top - IconHeight,
"left": OffSetAreaElementOffset.width - IconSetElementOffset.width
})
}
else if(/av18plus\.com/.test(PageURL)){
$('.IconSet').css({
"top": OffSetAreaElementOffset.top - IconHeight,
"left": OffSetAreaElementOffset.width - IconSetElementOffset.width
})
}
else if(/pornchil\.com|asianscan/.test(PageURL)){
$('.IconSet').css({
"top": 0,
"left": OffSetAreaElementOffset.width - IconSetElementOffset.width
})
}
else {
$('.IconSet').css({
"top": OffSetAreaElementOffset.top,
"left": OffSetAreaElementOffset.width - IconSetElementOffset.width,
})
}
IconSet.style.visibility = "visible"
document.querySelector('.CopyIcon').style.visibility = "visible"
document.querySelector(".CloseIcon").style.visibility = "visible"
if(DownloadArea){
CheckDB(listToDo(DownloadArea))
}
//console.log(getElementOffset(OffSetArea), getNodeTextElementOffset(OffSetArea), getElementOffset(IconSet), getRelativeOffset(OffSetArea), getRelativeOffset(IconSet), FontHeight, IconHeight )
}
}
function JDownloader(JdownloaderData, PackageName){
//console.log(PackageName + '\n' + JdownloaderData)
if(JdownloaderData){
let data = new URLSearchParams();
data.append(`urls`, JdownloaderData);
data.append(`referer`, PageURL)
if(PackageName){
data.append(`package`, PackageName)
}
fetch('http://127.0.0.1:9666/flash/add', {
method: 'POST',
//mode: 'cors',
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
},
body: data
})
}
}
function JDownloaderDB(LinksDB){
//console.log(LinksDB)
let uniqueTitle = [...new Set(LinksDB.map( x => x.T ))]
//console.log(uniqueTitle)
uniqueTitle.forEach(x => JDownloader(GetMatchLinks(x, LinksDB), x))
}
function GetMatchLinks(text, LinksDB){
try {
return LinksDB.filter(u => text.includes(u.T)).map(l => l.U).join('\n')
} catch(err) {
console.log(err, text, LinksDB)
}
}
function scrollToTop() {
window.scrollTo({ top: 0, behavior: 'auto' })
window.removeEventListener('scroll', scrollToTop)
}
function attrPromise(element, attributeName, attributeValue) {
return new Promise((resolve,reject) => {
const observerConfig = {attributes: true, childList: true, subtree: true,};
const observer = new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
if (mutation.attributeName == attributeName && mutation.getAttribute(attributeName) == attributeValue ) {
observer.disconnect();
resolve(element);
}
});
});
observer.observe(element, observerConfig);
});
}