Download Replace Filename + to Space. Thanks!
// ==UserScript== // @name Download Replace Filename + to Space // @namespace Download Replace Filename + to Space // @version 1.4 // @description Download Replace Filename + to Space. Thanks! // @author DandyClubs // @match *://*/bbs/board.php* // @exclude /cineaste\.co\.kr/ // @require https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js // @require https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js // @connect * // @grant GM_xmlhttpRequest // @grant GM_addStyle // @license MIT // @run-at document-body // ==/UserScript== GM_addStyle (` .view-btn { margin: 0px 0px 5px; } a:visited * { color: rgb(255, 152, 0) !important; } .list-board .list-body li a:visited { color: rgb(255, 152, 0) !important; } .list-board .list-body .wr-subject .item-subject{ font-size: var(--SetFontSize, 1rem) } .list-board .list-body li>div { height: 32px; line-height: 32px; } .comment-media .media .media-content { padding: 5px 5px 5px 5px; font-size: var(--SetFontSize, 1rem) } .comment-media .media .media-heading { padding: 5px 5px 5px 5px; } `); const PageURL = window.location !== window.parent.location ? document.referrer : document.location.href; var filename, links, DonwLoadIcon, GetDPI, DefaultFontSize document.addEventListener('readystatechange', event => { if (event.target.readyState === "interactive") { console.log('Download Replace Filename + to Space Start!') SetFontSize() } else if (event.target.readyState === "complete") { Start() addJS_Node (null, null, overrideSelectNativeJS_Functions) if(/avsubs\.co\.kr\/bbs\/board\.php.*wr_id/.test(PageURL)){ //목록 글쓰기 버튼 위치 변경 var listwrite = document.querySelector('div.view-btn.text-right') if(listwrite){ //listwrite.remove() document.querySelector("div.view-wrap").insertAdjacentHTML('beforebegin', listwrite.outerHTML) } } } }); function getDefaultFontSize(){ const element = document.createElement('div') element.style.width = '1rem'; element.style.display = 'none'; document.body.append(element); const widthMatch = window .getComputedStyle(element) .getPropertyValue('width') .match(/\d+/); element.remove(); if (!widthMatch || widthMatch.length < 1) { return null; } const r###lt = Number(widthMatch[0]); return !isNaN(r###lt) ? r###lt : null; }; async function Start(){ links = document.querySelectorAll('a[href*="download.php"]') if(links?.length > 0){ for (var i = 0; i < links.length; ++i) { links[i].href = await getUriWithParam(links[i].href, {ds: "1"}) links[i].href = await getUriWithParam(links[i].href, {js: "on"}) links[i].addEventListener("click", async function(event) { let Target = event.target.tagName === 'A' ? event.target : event.target.closest('a[href*="download.php"]') Target.href = await getUriWithParam(Target.href, {ds: "1"}) Target.href = await getUriWithParam(Target.href, {js: "on"}) event.preventDefault() event.stopPropagation() event.stopImmediatePropagation() console.log(Target) DownloadFile(Target.href, Target) }) } } } function overrideSelectNativeJS_Functions () { window.confirm = function alert (message) { return true; } } function addJS_Node (text, s_URL, funcToRun) { var D = document; var scriptNode = D.createElement ('script'); scriptNode.type = "text/javascript"; if (text) scriptNode.textContent = text; if (s_URL) scriptNode.src = s_URL; if (funcToRun) scriptNode.textContent = '(' + funcToRun.toString() + ')()'; var targ = D.getElementsByTagName ('head')[0] || D.body || D.documentElement; targ.appendChild (scriptNode); } function getUriWithParam(baseUrl, params) { console.log(baseUrl) try { const Url = new URL(baseUrl) const urlParams = new URLSearchParams(Url.search); for (const key in params) { if (params[key] !== undefined) { urlParams.set(key, params[key]); } } Url.search = urlParams.toString(); return Url.toString() } catch (err) { console.log(err) } }; function SetFontSize(node) { node = node || document GetDPI = window.devicePixelRatio DefaultFontSize = getDefaultFontSize() console.log('GetDPI: ', GetDPI, 'DefaultFontSize: ', DefaultFontSize) if(node.querySelector('.list-board .list-body .wr-subject .item-subject')){ try { var FontHeigh = parseFloat(window.getComputedStyle(node.querySelector('.list-board .list-body .wr-subject .item-subject')).fontSize) console.log(FontHeigh) if(FontHeigh <= 12){ document.documentElement.style.setProperty('--SetFontSize', Math.min(Number((16/DefaultFontSize).toFixed(2)), Number(((1/(GetDPI/1.5))*(16/FontHeigh)).toFixed(2)), Number(((1/(GetDPI/1.5))*(16/DefaultFontSize)).toFixed(2)), 1.2) + 'rem') } else{ document.documentElement.style.setProperty('--SetFontSize', Math.min(Number((16/DefaultFontSize).toFixed(2)), Number(((1/(GetDPI/1.5))*(16/FontHeigh)).toFixed(2)), Number(((1/(GetDPI/1.5))*(16/DefaultFontSize)).toFixed(2)), 1) + 'rem') } } catch (err) { console.log(err) } } } function getDirectInnerText(element) { let childNodes = element.childNodes; let r###lt = '' for (let i = 0; i < childNodes.length; i++) { //console.log('nodeType: ', childNodes[i], childNodes[i].nodeType, childNodes[i].tagName ) if (childNodes[i].tagName === 'span' || childNodes[i].nodeType == 3) { r###lt += childNodes[i].data ? childNodes[i].data : childNodes[i].textContent; } } return r###lt; } function DownloadFile(url, target) { DonwLoadIcon = target.querySelector('i.fa.fa-download, i.fa.fa-spinner, i.fa.fa-check-square') DonwLoadIcon.classList.remove('fa-download') DonwLoadIcon.classList.add('fa-spinner') DonwLoadIcon.style.setProperty('color', 'White', 'important') fetch(url,{ credentials: 'include', }) .then(async res => { var disposition = await res.headers.get('Content-Disposition') console.log(disposition) DonwLoadIcon.style.setProperty('color', 'Orange', 'important') if(typeof disposition !== 'undefined' && disposition !== null){ filename = getDirectInnerText(target) ? getDirectInnerText(target).match(/(.*)\s\(\d+/)[1].trim() : '' console.log(filename) return res.blob() } }) .then(async blob => { await saveAs(blob, filename) DonwLoadIcon.classList.remove('fa-spinner') DonwLoadIcon.classList.add('fa-check-square') }) .catch((error) => { console.log('Downloading Error', error); }); }