您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Upload album art from within the PTH upload page
当前为
- // ==UserScript==
- // @name Upload image from upload page
- // @version 1.6
- // @description Upload album art from within the PTH upload page
- // @author Chameleon
- // @include http*://*redacted.ch/upload.php*
- // @include http*://*redacted.ch/forums.php*threadid=1725*
- // @include http*://*redacted.ch/artist.php*action=edit*
- // @include http*://*redacted.ch/torrents.php*action=editgroup*
- // @grant GM_xmlhttpRequest
- // @namespace https://greasyfork.org/users/87476
- // ==/UserScript==
- (function() {
- 'use strict';
- var settings=getSettings();
- if(settings.showSettings)
- showSettings();
- if(window.location.href.indexOf("threadid=1725") != -1)
- showSettings();
- else if(window.location.href.indexOf('upload.php') != -1)
- {
- showUpload();
- }
- else if(window.location.href.indexOf('artist.php') != -1 || window.location.href.indexOf('torrents.php') != -1)
- {
- showArtistEdit();
- }
- }());
- function showSettings(message)
- {
- var div=document.getElementById('rehostToSettings');
- if(!div)
- {
- var before = document.getElementsByClassName('forum_post')[0];
- if(!before)
- before=document.getElementsByTagName('table')[1];
- if(!before)
- before=document.getElementsByClassName('box')[0];
- div = document.createElement('div');
- div.setAttribute('id', 'rehostToSettings');
- before.parentNode.insertBefore(div, before);
- div.setAttribute('style', 'width: 100%; text-align: center; padding-bottom: 10px;');
- div.setAttribute('class', 'box');
- }
- div.innerHTML = '<h2>Upload image from upload page Settings</h2><br />';
- var settings = getSettings();
- var a=document.createElement('a');
- a.href='javascript:void(0);';
- a.innerHTML = 'Use image host: '+settings.site;
- a.addEventListener('click', changeSite.bind(undefined, a, div), false);
- div.appendChild(a);
- div.appendChild(document.createElement('br'));
- var a=document.createElement('a');
- a.href='javascript:void(0);';
- a.innerHTML = 'Show settings on upload page: '+(settings.showSettings ? 'true':'false');
- a.addEventListener('click', changeShowSettings.bind(undefined, a, div), false);
- div.appendChild(a);
- div.appendChild(document.createElement('br'));
- var labelStyle = '';
- var label = document.createElement('span');
- label.setAttribute('style', labelStyle);
- label.innerHTML = 'ptpimg.me API Key: ';
- div.appendChild(label);
- var input=document.createElement('input');
- input.setAttribute('style', 'width: 21em;');
- input.placeholder='ptpimg.me API Key';
- input.value = settings.apiKey ? settings.apiKey:'';
- div.appendChild(input);
- input.addEventListener('keyup', changeSettings.bind(undefined, div), false);
- var a=document.createElement('a');
- a.href='javascript:void(0);';
- a.innerHTML = 'Get ptpimg.me API Key';
- div.appendChild(document.createElement('br'));
- div.appendChild(a);
- div.appendChild(document.createTextNode(' '));
- var s=document.createElement('span');
- s.innerHTML = message ? message : '';
- div.appendChild(s);
- a.addEventListener('click', getAPIKey.bind(undefined, input, s, div), false);
- }
- function getAPIKey(input, span, div)
- {
- span.innerHTML = 'Loading ptpimg.me';
- /*var xhr=new XMLHttpRequest();
- xhr.open('GET', "https://ptpimg.me");
- xhr.onreadystatechange = xhr_func.bind(undefined, span, xhr, gotAPIKey.bind(undefined, input, span, div), rehost.bind(undefined, input, span, div));
- xhr.send();*/
- GM_xmlhttpRequest({
- method: "GET",
- url: 'https://ptpimg.me',
- onload: function(response) { if(response.status == 200) {gotAPIKey(input, span, div, response.responseText); } else { span.innerHTML = 'ptpimg.me error: '+response.status; } }
- });
- }
- function gotAPIKey(input, span, div, response)
- {
- var key=response.split("value='")[1].split("'")[0];
- if(key.length != 36)
- {
- span.innerHTML = "You aren't logged in to ptpimg.me";
- return;
- }
- input.value=key;
- changeSettings(div, 0, "Successfully added API Key");
- }
- function changeSite(a, div)
- {
- if(a.innerHTML.indexOf('imgur.com') != -1)
- {
- a.innerHTML = a.innerHTML.replace('imgur.com', 'ptpimg.me');
- }
- else if(a.innerHTML.indexOf('ptpimg.me') != -1)
- {
- a.innerHTML = a.innerHTML.replace('ptpimg.me', 'imgur.com');
- }
- changeSettings(div);
- }
- function changeShowSettings(a, div)
- {
- if(a.innerHTML.indexOf('false') != -1)
- a.innerHTML = a.innerHTML.replace('false', 'true');
- else
- a.innerHTML = a.innerHTML.replace('true', 'false');
- changeSettings(div);
- }
- function changeSettings(div, nul, message)
- {
- var settings = getSettings();
- var as=div.getElementsByTagName('a');
- if(as[0].innerHTML.indexOf('imgur.com') != -1)
- settings.site = 'imgur.com';
- else if(as[0].innerHTML.indexOf('ptpimg.me') != -1)
- settings.site = 'ptpimg.me';
- if(as[1].innerHTML.indexOf('false') != -1)
- settings.showSettings=false;
- else
- settings.showSettings=true;
- var inputs=div.getElementsByTagName('input');
- settings.apiKey = inputs[0].value;
- window.localStorage.ptpimgAPIKey = settings.apiKey;
- window.localStorage.uploadFromUploadPageSettings = JSON.stringify(settings);
- showSettings(message);
- }
- function getSettings()
- {
- var settings = window.localStorage.uploadFromUploadPageSettings;
- if(!settings)
- {
- settings = {site:'imgur.com', apiKey:window.localStorage.ptpimgAPIKey ? window.localStorage.ptpimgAPIKey : ''};
- }
- else
- settings = JSON.parse(settings);
- return settings;
- }
- function showArtistEdit()
- {
- var image=document.getElementsByName('image')[0];
- var div=document.createElement('div');
- image.parentNode.insertBefore(div, image);
- div.appendChild(image);
- image.setAttribute('id', 'image');
- showUpload();
- }
- function showUpload()
- {
- var imageInput = document.getElementById('image');
- var parent = imageInput.parentNode;
- if(imageInput.parentNode.innerHTML.indexOf('Auto-rehost') == -1)
- {
- var span=document.createElement('span');
- var a=document.createElement('a');
- a.href='javascript:void(0);';
- a.innerHTML = 'Auto-rehost: Off';
- a.addEventListener('click', toggleAutoRehost.bind(undefined, a, imageInput, span), false);
- parent.appendChild(document.createTextNode(' '));
- parent.appendChild(a);
- parent.appendChild(document.createTextNode(' '));
- parent.appendChild(span);
- if(window.localStorage.autoUpload == "true")
- {
- imageInput.setAttribute('autorehost', 'true');
- a.innerHTML = 'Auto-rehost: On';
- }
- imageInput.addEventListener('keyup', rehost.bind(undefined, imageInput, span), false);
- }
- var file = document.createElement('input');
- file.type='file';
- parent.appendChild(file);
- var status = document.createElement('div');
- parent.appendChild(status);
- file.addEventListener('change', uploadFile.bind(undefined, status), false);
- file.accept="image/*";
- var dropzone = document.createElement('div');
- parent.appendChild(dropzone);
- dropzone.addEventListener("dragenter", dragenter, false);
- dropzone.addEventListener("dragover", dragenter, false);
- dropzone.addEventListener("drop", drop.bind(undefined, status), false);
- dropzone.innerHTML = 'Or drop files here';
- dropzone.setAttribute('style', 'width: 400px; height: 30px; background: rgba(64,64,64,0.8); border: dashed; border-radius: 10px; margin: auto; text-align: center; font-size: 20px;');
- }
- function dragenter(event)
- {
- event.preventDefault();
- event.stopPropagation();
- }
- function drop(status, event)
- {
- event.preventDefault();
- event.stopPropagation();
- var dt = event.dataTransfer;
- var files = dt.files;
- uploadFile(status, {target:{files:files}});
- }
- function rehost(imageInput, span)
- {
- if(imageInput.getAttribute('autorehost') != "true")
- return;
- var whitelisted = ["imgur.com", "ptpimg.me"];
- if(imageInput.value.length < 1)
- return;
- for(var i=0; i<whitelisted.length; i++)
- {
- var whitelist=whitelisted[i];
- if(imageInput.value.indexOf(whitelist) != -1)
- return;
- }
- if(imageInput.value.indexOf("discogs.com") != -1)
- {
- imageInput.value = "http://reho.st/"+imageInput.value;
- }
- span.innerHTML = 'Rehosting';
- var formData = new FormData();
- formData.append('image', imageInput.value);
- if(imageInput.getAttribute('working') == "true")
- return;
- imageInput.setAttribute('working', "true");
- window.setTimeout(unworking.bind(undefined, imageInput), 1000);
- var settings = getSettings();
- if(settings.site == 'imgur.com')
- {
- var xhr = new XMLHttpRequest();
- xhr.open('POST', 'https://api.imgur.com/3/image');
- xhr.setRequestHeader('Authorization', 'Client-ID 735033a56fe790b');
- xhr.onreadystatechange = xhr_func.bind(undefined, span, xhr, rehosted.bind(undefined, imageInput, span), rehost.bind(undefined, imageInput, span));
- xhr.send(formData);
- }
- else if(settings.site == 'ptpimg.me')
- {
- if(!settings.apiKey || settings.apiKey.length != 36)
- {
- a.innerHTML = 'No valid ptpimg.me API key set';
- return;
- }
- /*var formData = new FormData();
- formData.append('link-upload', image_input.value);
- formData.append('api_key', 'xx');
- // ptpimg.me doesn't have 'Access-Control-Allow-Origin' set
- var xhr = new XMLHttpRequest();
- xhr.open('POST', 'https://ptpimg.me/upload.php');
- xhr.onreadystatechange = xhr_func.bind(undefined, a, xhr, uploaded.bind(undefined, a, form, settings), doRehost.bind(undefined, a, image_input, form, settings));
- xhr.send(formData);*/
- // use GM_xmlhttpRequest for cross-domain
- GM_xmlhttpRequest({
- method: "POST",
- url: 'https://ptpimg.me/upload.php',
- data: "link-upload="+encodeURIComponent(imageInput.value)+'&api_key='+settings.apiKey,
- headers: {
- "Content-Type": "application/x-www-form-urlencoded"
- },
- onload: function(response) { rehosted(imageInput, span, response.responseText); }
- });
- }
- }
- function unworking(input)
- {
- input.setAttribute('working', "false");
- }
- function rehosted(imageInput, span, response)
- {
- var settings = getSettings();
- var newLink='';
- try
- {
- if(settings.site == 'imgur.com')
- newLink = JSON.parse(response).data.link.replace(/http:/, 'https:');
- else if(settings.site == 'ptpimg.me')
- {
- var r=JSON.parse(response)[0];
- newLink = "https://ptpimg.me/"+r.code+'.'+r.ext;
- }
- }
- catch(err)
- {
- span.innerHTML = err.message;
- return;
- }
- span.innerHTML = 'Rehosted';
- imageInput.value = newLink;
- }
- function toggleAutoRehost(a, input, span)
- {
- if(a.innerHTML.indexOf('Off') != -1)
- {
- input.setAttribute('autorehost', 'true');
- a.innerHTML = 'Auto-rehost: On';
- window.localStorage.autoUpload = 'true';
- rehost(input, span);
- }
- else
- {
- input.setAttribute('autorehost', 'false');
- a.innerHTML = 'Auto-rehost: Off';
- window.localStorage.autoUpload = 'false';
- }
- }
- function uploadFile(status, event)
- {
- var files=event.target.files;
- for(var i=0; i<files.length; i++)
- {
- var f=files[i];
- if(f.type.indexOf("image") != -1)
- {
- status.innerHTML = 'Uploading...';
- upload(status, f);
- break;
- }
- else
- {
- status.innerHTML = 'Not an image';
- }
- }
- }
- function upload(status, file)
- {
- var settings = getSettings();
- if(settings.site == 'imgur.com')
- {
- var formData = new FormData();
- formData.append('image', file);
- var xhr = new XMLHttpRequest();
- xhr.open('POST', 'https://api.imgur.com/3/image');
- xhr.setRequestHeader('Authorization', 'Client-ID 735033a56fe790b');
- xhr.onreadystatechange = xhr_func.bind(undefined, status, xhr, uploaded.bind(undefined, status), upload.bind(undefined, status, file));
- xhr.send(formData);
- }
- else if(settings.site == 'ptpimg.me')
- {
- if(!settings.apiKey || settings.apiKey.length != 36)
- {
- a.innerHTML = 'No valid ptpimg.me API key set';
- return;
- }
- /*var formData = new FormData();
- formData.append('link-upload', image_input.value);
- formData.append('api_key', 'xx');
- // ptpimg.me doesn't have 'Access-Control-Allow-Origin' set
- var xhr = new XMLHttpRequest();
- xhr.open('POST', 'https://ptpimg.me/upload.php');
- xhr.onreadystatechange = xhr_func.bind(undefined, a, xhr, uploaded.bind(undefined, a, form, settings), doRehost.bind(undefined, a, image_input, form, settings));
- xhr.send(formData);*/
- // use GM_xmlhttpRequest for cross-domain
- var formData = new FormData();
- formData.append('file-upload[0]', file);
- formData.append('api_key', settings.apiKey);
- GM_xmlhttpRequest({
- method: "POST",
- url: 'https://ptpimg.me/upload.php',
- //binary: true,
- data: formData,
- /* headers: {
- "Content-Type": "multipart/form-data"
- },*/
- onload: function(response) {
- if(response.status == 200)
- {
- uploaded(status, response.responseText);
- }
- else
- {
- console.log("Failed to upload: \n"+response.responseHeaders+' '+response.status+' '+response.statusText);
- status.innerHTML = "Failed to upload to ptpimg.me: "+response.status;
- return;
- }
- }
- });
- }
- }
- function uploaded(status, response)
- {
- var settings=getSettings();
- console.log(response);
- var newLink='';
- try
- {
- if(settings.site == 'imgur.com')
- newLink = JSON.parse(response).data.link;
- else if(settings.site == 'ptpimg.me')
- {
- var r=JSON.parse(response)[0];
- newLink = "https://ptpimg.me/"+r.code+'.'+r.ext;
- }
- }
- catch(err)
- {
- status.innerHTML = err.message;
- status.style.color = 'red';
- return;
- }
- status.innerHTML = 'Uploaded<br />';
- var img=document.createElement('img');
- var a=document.createElement('a');
- status.appendChild(a);
- status.appendChild(document.createElement('br'));
- status.appendChild(img);
- a.innerHTML='Hide image';
- a.href='javascript:void(0);';
- a.addEventListener('click', toggleImage.bind(undefined, a, img), false);
- img.src=newLink;
- document.getElementById('image').value = newLink;
- }
- function toggleImage(a, img)
- {
- if(img.style.display=='none')
- {
- img.style.display='initial';
- a.innerHTML = 'Hide image';
- }
- else
- {
- img.style.display='none';
- a.innerHTML = 'Show image';
- }
- }
- function xhr_func(messageDiv, xhr, func, repeatFunc)
- {
- if(xhr.readyState == 4)
- {
- if(xhr.status == 200)
- func(xhr.responseText);
- else
- {
- messageDiv.innerHTML = 'Error: '+xhr.status+'<br />retrying in 1 second';
- window.setTimeout(repeatFunc, 1000);
- }
- }
- }