Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==UserScript==
- // @name OwO who did this
- // @namespace http://tampermonkey.net/
- // @version 0.0.0
- // @description Concept of UI tweak to show, who exactly created image
- // @author stsyn
- // @include *://trixiebooru.org/*
- // @include *://derpibooru.org/*
- // @include *://www.trixiebooru.org/*
- // @include *://www.derpibooru.org/*
- // @include *://*.o53xo.orzgs6djmvrg633souxg64th.*.*/*
- // @include *://*.orzgs6djmvrg633souxg64th.*.*/*
- // @include *://*.o53xo.mrsxe4djmjxw64tvfzxxezy.*.*/*
- // @include *://*.mrsxe4djmjxw64tvfzxxezy.*.*/*
- // @exclude *://trixiebooru.org/adverts/*
- // @exclude *://derpibooru.org/adverts/*
- // @exclude *://www.trixiebooru.org/adverts/*
- // @exclude *://www.derpibooru.org/adverts/*
- // @exclude *://*.o53xo.orzgs6djmvrg633souxg64th.*.*/adverts/*
- // @exclude *://*.orzgs6djmvrg633souxg64th.*.*/adverts/*
- // @exclude *://*.o53xo.mrsxe4djmjxw64tvfzxxezy.*.*/adverts/*
- // @exclude *://*.mrsxe4djmjxw64tvfzxxezy.*.*/adverts/*
- // @require https://github.com/stsyn/derpibooruscripts/raw/master/YouBooru/lib.js
- // @grant unsafeWindow
- // @run-at document-idle
- // ==/UserScript==
- (function() {
- 'use strict';
- const includeBadges = false; //toggleable
- const selector = '.tag.dropdown[data-tag-category="origin"][data-tag-name*="artist:"] .tag__name, .tag.dropdown[data-tag-category="origin"][data-tag-name*="colorist:"] .tag__name, .tag.dropdown[data-tag-category="origin"][data-tag-name*="photographer:"] .tag__name';
- const limitation = 3;
- let remains = 0;
- let userbase;
- let results = [];
- let isUserBaseAvailable; //time to use YDB:Tools base, if it's available
- function nameEncode(name) {
- return encodeURI(name.replace(/\-/g,'-dash-').replace(/\+/g,'-plus-').replace(/\:/g,'-colon-').replace(/\./g,'-dot-').replace(/\//g,'-fwslash-').replace(/\\/g,'-bwslash-').replace(/ /g,'+')).replace(/\</g,'%3C').replace(/\#/,'%2523');
- };
- function read() {
- if (localStorage._ydb_toolsUB2) {
- isUserBaseAvailable = true;
- try {
- let temp = JSON.parse(localStorage._ydb_toolsUB2);
- userbase = temp;
- }
- catch(e) {
- }
- } else isUserBaseAvailable = false;
- }
- function gainNames() {
- let getName = (el) => {
- fetch(el.href)
- .then(response => {
- if (response.ok) return response.text();
- })
- .then(code => {
- let x = InfernoAddElem('div',{innerHTML:code,style:{display:'none'}},[]);
- for (let i=0; i<x.querySelectorAll('.tag-info__more strong').length; i++) {
- let ax = x.querySelectorAll('.tag-info__more strong')[i];
- if (ax.innerHTML == 'Associated Derpibooru users:') {
- let n = ax.nextSibling.nextSibling;
- if (results.indexOf(n.innerHTML) >-1) return;
- results.push({name:n.innerHTML, elem:el, count:parseInt(el.parentNode.querySelector('.tag__count').innerHTML.replace('(', ''))});
- break;
- }
- }
- remains--;
- if (remains == 0 && results.length > 0) gainIds();
- });
- }
- if (document.querySelectorAll(selector).length > limitation) return;
- for (let i=0; i<document.querySelectorAll(selector).length; i++) {
- let el = document.querySelectorAll(selector)[i];
- remains++;
- if (!isUserBaseAvailable) getName(el);
- else {
- if (userbase.artists[el.innerHTML] != undefined) {
- let n = userbase.users[userbase.artists[el.innerHTML]];
- results.push({name:n.name, elem:el, id:n.id, count:parseInt(el.parentNode.querySelector('.tag__count').innerHTML.replace('(', ''))});
- remains--;
- }
- else getName(el);
- }
- }
- if (remains == 0 && results.length > 0) gainIds();
- }
- function gainIds() {
- //actually, it gathers bagdes now
- if (!includeBadges) {
- gainComms();
- return;
- }
- let getId = (r) => {
- fetch('/profiles/'+nameEncode(r.name)+'.json')
- .then(response => {
- if (response.ok) return response.json();
- })
- .then(data => {
- r.awards = data.awards;
- remains--;
- if (remains == 0 && results.length > 0) gainComms();
- });
- }
- for (let i=0; i<results.length; i++) {
- remains++;
- getId(results[i]);
- }
- if (remains == 0 && results.length > 0) gainComms();
- }
- function gainComms() {
- //okay, isUserBaseAvailable won't help there
- let getComm = (r) => {
- fetch('/commissions/'+nameEncode(r.name))
- .then(response => {
- if (response.ok) return response.text();
- })
- .then(code => {
- let x = InfernoAddElem('div',{innerHTML:code,style:{display:'none'}},[]);
- if (!x.querySelector('.block__content.commission__block_body')) r.commState = 'none';
- else r.commState = (x.querySelector('.block__content.commission__block_body br+strong').nextSibling.wholeText.trim()=='Open'?'open':'closed');
- remains--;
- if (remains == 0 && results.length > 0) show();
- });
- }
- for (let i=0; i<results.length; i++) {
- remains++;
- getComm(results[i]);
- }
- }
- function commLink(r) {
- if (r.commState == 'none') return InfernoAddElem('span', {}, []);
- return InfernoAddElem('span', {className:'commissions'}, [
- InfernoAddElem('a', {href:'/commissions/'+nameEncode(r.name), style:{color:(r.commState=='open'?'green':'')}, innerHTML:(r.commState=='open'?'(commissions open)':'(commissions list)')}, [])
- ])
- }
- function show() {
- if ((results.length == 0) || (results.length > limitation)) return;
- if (document.querySelector('#extrameta .image_uploader a') != undefined && results.length == 1 && document.querySelector('#extrameta .image_uploader a').innerHTML == results[0].name) {
- document.querySelector('#extrameta > div').firstChild.nodeValue = 'Created and uploaded ';
- if (results[0].commState != 'none') document.querySelector('#extrameta .image_uploader').appendChild(commLink(results[0]));
- } else {
- results.sort((a,b) => {return b.count - a.count;});
- let container;
- document.querySelector('#container .block.block__header').insertBefore(container = InfernoAddElem('div',{className:'image-metabar flex flex--wrap block__header--user-credit center--layout'},[
- InfernoAddElem('span', {innerHTML:'Created by'}, [])
- ]),document.getElementById('extrameta'));
- for (let i=0; i<results.length; i++) {
- let badges = [];
- let bd = [];
- if (results[i].awards) {
- for (let j=0; j<results[i].awards.length; j++) {
- let bx = badges;
- if (j>=7) bx = bd;
- let aw = results[i].awards[j];
- bx.push(InfernoAddElem('div', {className:'badge'}, [
- InfernoAddElem('img', {src:aw.image_url, alt:aw.title+' — '+aw.label, width:18, height:18}, [])
- ]));
- }
- if (results[i].awards.length>7) {
- badges.push(InfernoAddElem('div',{className:'dropdown'},[
- InfernoAddElem('i',{className:'fa fa-caret-down'},[]),
- InfernoAddElem('div',{className:'dropdown__content block__header'},[
- InfernoAddElem('div',{className:'badges flex--column'},bd)
- ])
- ]))
- };
- }
- container.appendChild(InfernoAddElem('span',{className:'image_uploader'},[
- InfernoAddElem('a',{innerHTML:results[i].name, href:'/profiles/'+nameEncode(results[i].name)},[]),
- InfernoAddElem('div',{className:'badges'},badges),
- commLink(results[i])
- ]));
- if (i == results.length-2) container.appendChild(InfernoAddElem('span',{innerHTML:' and'},[]));
- else if (i<results.length-1) container.appendChild(InfernoAddElem('span',{innerHTML:','},[]));
- }
- }
- }
- if ((parseInt(location.pathname.slice(1))>=0 && location.pathname.split('/')[2] == undefined) || (location.pathname.split('/')[1] == 'images' && parseInt(location.pathname.split('/')[2])>=0 && location.pathname.split('/')[3] == undefined)) {
- read();
- gainNames();
- }
- })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement