// ==UserScript==
// @id what-album-art-display
// @name What.CD : Album Art Display
// @namespace hateradio)))
// @author hateradio
// @version 4.9.5
// @description View album art.
// @homepage https://userscripts.org/scripts/show/114153
// @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAgAAAAIACH+pydAAAGO0lEQVRYw8WWXWwcVxXHf/fO7MzsrHd2s9mEbEzdWIlCikmwg1NIUicmLbRpVEWV+tAKyBOKBK0UCfWBUgmEFB7gAQnRvvSlQhHho2kBuYCg5UNJsRw5dYjjxImx81E7rpuNvbZ3PTM7OzOXBxtHgcSsHST+0mhGc+ee87vnnDv3wP9ZYiWTWlpajFwut0MI8SlgG/BpIcQ6pZSjlEoB9qlTp+qyrS/HcUdHx24hxMtCiM8bhlGVUiaEEHahUODWrVu0tbUxMDBAsVis26asN1J79ux51TCMP9q2/URzc7MlhMgcOXLEllJy9OhRhBDs3LkTIZYX1LoA9u7d+6JlWYdyuZytaZro6OgAYHR0FIDjx48DcOzYsWU5hzpqoLOzM6tp2jUgs337dvr7+ykUCoyPjyOlXLwAwjCMgyAo12q1zH3XQEtLi+F53heKxeKjjY2N0vd9BgcHmZqaYnx8nCAI5lcgBHEcAyhN00aBtyzL+tH/IgJy06ZNUVNTE77vq0qlIoIgIJ/P09raiq7r1Gq1RQjP8xgYGKBcLld835fAK1LKbw8PD1dXnIJNGz+ucqvXI6VE13VM02TLli10dXVhWRbZbJZMJoPjOGQyGUzTZHh4GNd1KZVKbrVavVStVh8ZGxvz7rnKpQCk8OIgCEin0+i6jq7rRFGE7/v/8a1SikQigVIKx3FYt26dbdv2Q4ZhfGdJH0sN6loQBkFAEAQYhoEQgmQyyf79+8nn82iatvjOsiwuXryI67oEQYBpmmSz2SSoF5b0sdSgJquxW60SRRFSSqIoolQq4TgO7e3tAARBQKlUore3F8/zSKfThGGIaZoIIRCo1IoBpIyV46SZnZ3Ftm10XefKlSs4jkMqlSIMQ1zXpVKpEMcxyWQSKSWJRIIoipidnUHXKqwYAITYtnUzN4tloigijmNSqRSVSoWpqSmiKEIphRACwzBIJBJYlrUYrXQ6Tc0r3Q8APPHFHfzixN8oFApomkapVGJ2dpYoigCIogghxOJOSafTNDQ0MDQ0RH//OdavjVYOkMvCwad2Mzh4gYlihG3bNDU1YRgGlmWRSCTQdZ0gCHBdl8nJSUZGRuju7mZ6epqDBx9nZPDEygFWZ0HTNL765Q28d3qSM/0hk5NlPM/D9/173o1EzAvPf43nnj3IS9+4H4AcgOD4G+d5/NE8+3bF9J6dY+BylQ/GQm5GEb4PKTtkbc6jkJ/h6vUZXn3tJOU5DSEj1uapHX4K+7Uu3GUDpEwlhRQ8f7idE796n7dvFGnfpvHsAZ9V6Sne+M0NdK1MaRqe3g9BAC//AEwrxUzZRUidBpt4roHEvXws+SMK49DQNQ3T0HjumY0cPrSBaqD46ZtlAPrOh/yyC06fhTBkRaqrIzp/oUjLFkm6QeexPRn27aoRh7fIrRJkHZgtg67PR2C5qqshSaUS9J0rEkXqjvd2UvCXbojuudP+e0uwJIAQIlYqZn3BYU0+yXs9k1z7oEoUz4+fORfy/Zdg/CNYOJkXpZRCSgMFsqeH3IoA9IRR8bwZzp4v8bG1No98bjUKRc+Z+dPw0DMWx96CJ/dBYqHM9DuSOh+BchkHMFeQAr33+kif+uRDn6D79EdMlQKamyx2P2wB8Ps/BwxchrffvT1D00BIE03TqAU+KkaWSkgguVwAcWNi7id/+N3rXm51M5/d0cjouEd3b5nxifmSnyjGfOlpqNbuTIEQJo7jMHb1TSLF9elpYkBbLoD6+a9558aNqx++39sVN2R38Zntm2nbmsJd6Ee++6JNHMM3v347BQ0NOZLJJG55lHd++71q7zl+CITAXVszjaUlq7WwpzzVd6BcnjA3bt6nJVON5LIKFc/gNFTYutkln8sgEs2Y6Q4w9+HPDfOz178S9A+Gr5zs4U/ADFAE1L87qKd1XlMo8OD+Tv1bq9IcaN/xMK1trcaa/BoMI4EUPu5cmWLxQ/4xNByf6r6gXDcYOXla/fjCEH8HbgHXAP9uxusBEEAeyD2wngfbWnjygUa909TjDQplR7HShcSLQ26O36TvwmX+emmESwurngRGgWAp4/XKAnKAA6SYr2qD23UULTjygFngJlC+W9hXCvAvyQUYcwFAB2KgthDm6sJzXfonEt2V6IwVQfIAAAAldEVYdGNyZWF0ZS1kYXRlADIwMDktMTEtMTBUMTk6Mzg6MjEtMDc6MDAmCoZFAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDEwLTAyLTIwVDIzOjI2OjIzLTA3OjAw62RuWAAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxMC0wMS0xMVQwODo1NzoyNy0wNzowMPCMu/gAAAAydEVYdExpY2Vuc2UAaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9QdWJsaWNfZG9tYWluP/3qzwAAACV0RVh0bW9kaWZ5LWRhdGUAMjAwOS0xMS0xMFQxOTozODoyMS0wNzowMHm78HEAAAAZdEVYdFNvdXJjZQBUYW5nbyBJY29uIExpYnJhcnlUz+2CAAAAOnRFWHRTb3VyY2VfVVJMAGh0dHA6Ly90YW5nby5mcmVlZGVza3RvcC5vcmcvVGFuZ29fSWNvbl9MaWJyYXJ5vMit1gAAAABJRU5ErkJggg==
// @icon64 data:image/png;base64,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
// @screenshot
// @include http*://*what.cd/artist.php?*
// @include http*://*what.cd/user.php?*
// @include http*://*what.cd/torrents.php*
// @include http*://*what.cd/top10.php*
// @updated 2012-11-05
// @since 2011-09-27
// @grant GM_xmlhttpRequest
// (c) 2011+, hateradio
// Icon from http://openiconlibrary.sourceforge.net/
// ==/UserScript==
// @match *://*.what.cd/artist.php?*
// @match *://*.what.cd/user.php?*
// @match *://*.what.cd/torrents.php*
// @match *://*.what.cd/top10.php*
(function () {
'use strict';
var greaseWindow, strg, update, art;
// Obj+
Object.LEN = function (a) { var i = 0, j; for (j in a) { if (a.hasOwnProperty(j)) { ++i; } } return i; };
Object.SFT = function (a) { var i; for (i in a) { if (a.hasOwnProperty(i)) { delete a[i]; break; } } };
greaseWindow = (function (a) {
try {
a = unsafeWindow === window ? a : unsafeWindow;
} finally {
return a || (function () {
a = document.createElement('p');
a.setAttribute('onclick', 'return window;');
return a.onclick();
}());
}
}());
strg = {
on: (function () { try { var s = window.localStorage; if (s.getItem && s.setItem && s.removeItem) { return true; } } catch (e) { return false; } }()),
read: function (key) { return this.on ? JSON.parse(window.localStorage.getItem(key)) : false; },
save: function (key, dat) { return this.on ? !window.localStorage.setItem(key, JSON.stringify(dat)) : false; },
wipe: function (key) { return this.on ? !window.localStorage.removeItem(key) : false; },
zero: function (o) { var k; for (k in o) { if (o.hasOwnProperty(k)) { return false; } } return true; }
};
update = {
name: 'What.CD : Album Art Display',
version: 4950,
key: 'ujs_WhatAlbumArtDisplay',
callback: 'wcdaadudpt',
page: 'https://userscripts.org/scripts/show/114153',
urij: 'https://dl.dropbox.com/u/14626536/userscripts/updt/wcdaad/wcdaadudpt.json',
uric: 'https://dl.dropbox.com/u/14626536/userscripts/updt/wcdaad/wcdaadudpt.js', // Allow dropbox.com to run scripts.
checkchrome : true,
interval: 5,
day: +new Date(),
top: document.head || document.getElementsByTagName('head')[0],
time: function () { return +new Date(this.day + (1000 * 60 * 60 * 24 * this.interval)); },
css: function (t) {
if (!this.style) { this.style = document.createElement('style'); this.style.type = 'text/css'; this.top.appendChild(this.style); }
this.style.appendChild(document.createTextNode(t + '\n'));
},
js: function (t) {
var j = document.createElement('script');
j.type = 'text/javascript';
j[(/^https?\:\/\//i.test(t) ? 'src' : 'textContent')] = t;
this.top.appendChild(j);
return j;
},
notification: function (j) {
try {
if (this.version < j.version) {
localStorage.setItem(this.key, JSON.stringify({date: this.time(), version: j.version}));
this.link();
}
} catch (e) {}
},
link: function () {
var a = document.createElement('a');
a.href = this.page;
a.className = 'userscriptupdater';
a.title = 'Update now.';
a.textContent = 'An update for ' + this.name + ' is available.';
document.body.appendChild(a);
},
check: function (opt) {
if (this.gmu === true || !strg.on) { return; }
var stored = strg.read(this.key);
this.csstxt();
if (opt || strg.zero(stored) || stored.date < this.day) {
this.page = this.page || (stored && stored.page ? stored.page : false);
strg.save(this.key, {date: this.time(), version: this.version, page: this.page});
if (!opt && this.gmxhr()) {
return GM_xmlhttpRequest({method: 'GET', url: update.urij, onload: function (r) { update.notification(JSON.parse(r.responseText)); }, onerror: function () { update.check(1); }});
}
greaseWindow[this.callback] = function (json) { update.notification(json); };
} else if (this.version < stored.version) { this.link(); }
},
gmu: (function () { try { return GM_updatingEnabled; } catch (e) {} }()),
gmxhr: function () { if (!(this.checkchrome === true && typeof (chrome) === 'object') && typeof (GM_xmlhttpRequest) === 'function') { return true; } },
csstxt: function () {
if (!this.pop) { this.pop = true; this.css('.userscriptupdater,.userscriptupdater:visited{-moz-box-shadow:0 0 6px #787878;-webkit-box-shadow:0 0 6px #787878;box-shadow:0 0 6px #787878;border:1px solid #777;-moz-border-radius:4px;border-radius:4px;cursor:pointer;color:#555;font-family:Arial, Verdana, sans-serif;font-size:11px;font-weight:700;text-align:justify;min-height:45px;position:fixed;z-index:999999;right:10px;top:10px;width:170px;background:#ebebeb url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACsAAACLCAYAAAD4QWAuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1NUIzQjc3MTI4N0RFMDExOUM4QzlBNkE2NUU3NDJFNCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpGN0Q1OEQyNjdEQzUxMUUwQThCNEE3MTU1NDU1NzY2OSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpGN0Q1OEQyNTdEQzUxMUUwQThCNEE3MTU1NDU1NzY2OSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1NUIzQjc3MTI4N0RFMDExOUM4QzlBNkE2NUU3NDJFNCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1NUIzQjc3MTI4N0RFMDExOUM4QzlBNkE2NUU3NDJFNCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Po6YcvQAAAQFSURBVHja7JzBSxRRHMdnp+gkiLdOgtshKGSljQVF8CK0biEErYfwFmT+BQpdA0MIBEFtTx2qSxESaAt5ioUQFDp5sjl06rbnumzfp7+VbZx5M+/Nb9wZ+f3g56wzO28//ua93/u9J/stdDodx2/P3o85llaFT8JvwlvwTfhf00a2Hv8IPO86PHYHvg//An8OfwRfg/9RfzvTZ7DBvoZXQq6p6D7MCuwT+N2I92zAB/sNO0yPO8quwxf7DasABmK+d0XTVVKHnYIvG96z1i9Ymw8ep/R2obAqNdkm41e2sFct71v1/f4BiXyOJpRpHKZ918s9527B5+FvLwJWDaoR3zmvZ/bZw2HPNyMeBOTeb/BfaXaDEuVMvx2G3QDQMkW21wZsUpkp7GbIeU9zz3TI+WXTVGYCW6XRbApb1lxbTwt2VVMltS1hVWRnuWFVqhoNudbW9NchHIpc+ToO7GDE49JFtRij/ZG4gy0O7CIVIjZWNuhiw0lhK1SA6GzI8ppxKouCjTNaOWC7qWzKFrYaNw/SQOKwNVtYk4KjyAQ7RpnHCHaeCg7ugZQon7sBj3RYM62mHdmTVAaGxbiRNVmqRM3/bUvgDQCX/CcLvZsceEOF1v82dgPTrkdVVp2iXU8Q4e9ob0IHu59gUecxdwdlMwBunusGAJ1NuPr0KLoFdYQ3GGBXAiMLWC9gBRDX2gTa9g3Wp7Rbk8TqaPfjWWRp9I0kaLARVCbiXMO/xLGwdfCd7Oa4eDGQdD0fYYcJ7z/bzXHpxbWEDRaddO1FF3aSobE6pazAawztX0H7465mXWVqB2hwqWdwFeFfGaM+Wlh4V/rkMO2fpmy3VWTf5AD0NzLLkYsfn53T7fUs21k2UPmw5jBs9qZgx/AH4Ns+VxvQwJg0rGXTMPUfnhYgj0MLmayb6+TIBFZgBVZgBVZgBVZgBVZgBVZgBVZgBVZgBVZgBVZgBVZgBVZgBVZgBVZgBVZgBVZgBVZgBVZgBVZgBTZzVrg3U+Nsz1iTo7m7c+GRFU2ONGBFkyMNWNHkSANWNDl0xqbJAZ+j1/nR5HBOv6zm/8JaPjQ5KKqiyRFVpORfk8PRf3NZq8lRrd3PhiaHc6pvcLk0ORDdfGlyAFg0OdKAPUlliG76mhyGUNaDLXOaHIjuJdXkoKVKXzU5wlJZZjU5AFyKKhErFkuVbjcoUo3Apcmhnu6Ebkcmc5oczd2dZlA3YNHkUAFwUtLkcJlWnm1a1ng94AvkbKnM1SxVTKwRMphYNDkAPNiFFU0OZuPV5NDMYiyaHOgKvJoc8CVftFk1ORRsi/FxvYR3yH9qZjYba+VGkwOTw5GCzZcmByzTmhyI6ra/kNkiz4wmByD/0+T4J8AAyDkZArebBxMAAAAASUVORK5CYII=) no-repeat 13px 15px;padding:12px 20px 10px 65px}.userscriptupdater:hover,.userscriptupdater:visited:hover{color:#55698c!important;background-position:13px -85px;border-color:#8f8d96}'); }
}
};
update.check();
art = {
jkey: greaseWindow.authkey,
uri: document.location.href,
div: document.getElementById('discog_table'),
uli: document.createElement('ul'),
cvr: document.createElement('div'),
act: document.location.pathname.substring(1).replace('.php', ''),
img: [], // detected ids
mem: strg.read('AlbArtDispCache'),
usr: strg.read('whatartdisplaysettings'),
map: false, // setting to show collage
showMap: false, // on only for artists pages
ren: false,
top: true,
siz: 96, // img size
max: 50,
lag: 500,
reg: /(?:\/torrents\.php\?id\=(\d+))/,
exc: ['remix', 'remixed', 'mixtape', 'unknown', 'bootleg', 'interview'], // not for these
box: {
td: function (i, location) {
return location.parentNode.insertBefore(art.elm('td', {className: i >= art.max ? 'gm_albumartdisplay' : 'gm_albumartdisplay gm_albumartdisplay_loading'}), location);
},
map: function () {
art.cvr.id = 'coverhead';
art.cvr.className = 'box';
art.div.parentNode.insertBefore(art.cvr, art.div);
art.cvr.innerHTML = '<div id="coverhead" class="head"><strong>Cover Art</strong></div>';
art.uli.className = 'collage_images';
art.cvr.appendChild(art.uli);
},
mapAdd: function (uri, id, text) {
return art.elm('img', {className: '_albumartdisplay' + id, title: text, width: 117, src: uri},
art.elm('a', {className: uri ? 'gm_albumartdisplay' : 'gm_albumartdisplay_loading', href: '/torrents.php?id=' + id, title: 'Loading . . .'},
art.elm('li', false, art.uli)));
},
shiftCol: function (col) {
// col.colSpan = col.colSpan ? col.colSpan + 1 : 1;
col.colSpan += 1;
}
},
mod: function (node, selectors) {
// console.log('n: ' + node, 'm: ' + this.map, 's: ' + selectors);
var A,
C,
a,
b = document.querySelectorAll(selectors[0]),
c = b.length,
d = document.querySelectorAll(selectors[1]),
e = d.length,
tt,
id,
j = -1; //console.log(c, e);
if (this.showMap && this.map) { this.box.map(); }
while (e--) { this.box.shiftCol(d[e]); }
while (++j < c) {
A = b[j];
C = this.box.td(j, node === 1 ? A.parentNode.parentNode : A.parentNode);
id = A.href.match(this.reg)[1];
tt = A.textContent;
if (j < this.max) {
a = this.mem[id] || '';
if (a) {
this.max++;
C.className = 'gm_albumartdisplay';
} else if (this.img[id]) {
// Depending on the page, there might be several links/images
// of the same group ID. Ignore duplicates and add one to the max.
this.max++;
} else {
this.img.push(id);
C.title = 'Loading . . .';
}
if (this.showMap && this.map) {
this.box.mapAdd.call(this, a, id, tt);
}
}
this.elm('img', {className: '_albumartdisplay' + id, title: tt, width: this.siz, height: this.siz, $onclick: 'lightbox.init(this,' + this.siz + ');', src: a, _display: a ? '' : 'none'}, C);
}
this.max--;
this.run();
},
opt: function () {
var A = document.getElementById('collagecovers') || document.getElementById('hidecollage'), B, C, D;
if (A) {
C = this.elm('tr', {innerHTML: '<td class="label"><strong>Album Art Display</strong></label></td><td><p><strong class="important_text" id="_albumartdisplaym"></strong></p><div id="_albumartdisplaysettings"></div></td>'});
A.parentNode.parentNode.parentNode.insertBefore(C, A.parentNode.parentNode);
D = document.getElementById('_albumartdisplaysettings');
this.pm = document.getElementById('_albumartdisplaym');
B = this.elm('input', {id: 'albumdisplaymap', type: 'checkbox', checked: this.map}, D);
B.addEventListener('click', this.set, false);
A = this.elm('label', {$for: 'albumdisplaymap', textContent: ' Show collage in artist pages. '}, D);
B = this.elm('input', {id: 'albumdisplayren', type: 'checkbox', checked: this.ren}, D);
B.addEventListener('click', this.set, false);
A = this.elm('label', {$for: 'albumdisplayren', textContent: ' Show album art in torrent/notification pages. '}, D);
B = this.elm('input', {id: 'albumdisplaytop', type: 'checkbox', checked: this.top}, D);
B.addEventListener('click', this.set, false);
A = this.elm('label', {$for: 'albumdisplaytop', textContent: ' Show album art on the Top10.'}, D);
}
},
init: function () { //console.log('N'+Object.LEN(this.mem));
update.css('a.gm_albumartdisplay_loading{display:block;height:117px}.gm_albumartdisplay_loading{background:transparent url(http://whatimg.com/i/97804798653144081223.gif) no-repeat center center;cursor:progress}.gm_albumartdisplay_loading img{opacity:0 !important}.gm_albumartdisplay img{cursor:pointer}td.gm_albumartdisplay{min-width:' + this.siz + 'px !important;height:' + this.siz + 'px;padding:0;margin:0}td.gm_albumartdisplay img{opacity:.9}td.gm_albumartdisplay img:hover{opacity:1}');
this.mem = strg.zero(this.mem) ? {} : this.mem;
if (!strg.zero(this.usr)) {
this.map = this.usr.map;
this.ren = this.usr.ren;
this.top = this.usr.top; // console.log(this.map,this.ren);
}
this.page();
},
page: function () {
var img = document.querySelector('.sidebar .box_albumart img[onclick]');
if (/(?:\/user\.php)/.test(this.uri)) {
this.opt();
} else if (this.reg.test(this.uri)) { //console.log('album page');
if (img) { // console.log(img.src);
this.img = this.elm('img', {src: img.src, id: RegExp.lastParen});
this.img.addEventListener('load', art.mix, false);
this.img.addEventListener('error', art.mix, false);
}
} else if (/(?:\/artist\.php)/.test(this.uri)) {
this.showMap = true;
this.sel(0, 0, 1);
} else if (this.ren && /(?:\/torrents\.php)/.test(this.uri)) {
if (this.uri.indexOf('action=notify') !== -1) {
this.sel(0, 2, 1);
} else if (this.uri.indexOf('userid') !== -1) {
this.sel(1, 4, 2);
} else {
this.sel(2, 1, 2);
}
} else if (this.top && this.act === 'top10') {
if (this.uri.indexOf('type=users') === -1 && this.uri.indexOf('type=tags') === -1) {
this.sel(0, 3, 1);
}
} // console.log('m: '+RegExp.lastMatch);
},
sel: function (a, b, c) { //console.log(a, b, c);
var x = [];
switch (a) {
case 0:
x[0] = '.torrent a[href^="torrents.php?id"], table:not(#torrents_' + this.exc.join('):not(#torrents_') + ') .group a[href^="torrents.php?id"], .group_torrent strong a[href^="torrents.php?id"]';
break;
case 1:
x[0] = 'table td a[href^="torrents.php?id"]';
break;
case 2:
x[0] = 'table .cats_col+td a[href^="torrents.php?id"]';
break;
default:
return;
}
switch (b) {
case 0:
x[1] = ['table.torrent_table:not(#torrents_', this.exc.join('):not(#torrents_'), ') .group_torrent td:first-child, table:not(#torrents_', this.exc.join('):not(#torrents_'), ') td.small:nth-child(', c, ')'].join('');
break;
case 1:
x[1] = '.small.cats_col, tr.group_torrent td[colspan]';
break;
case 2:
x[1] = 'form[id^="notificationform"] .small.cats_col';
break;
case 3:
x[1] = '#top10 .colhead td:nth-child(2), #top10 .colhead_dark td:nth-child(2), .group_torrent td[colspan]';
break;
case 4:
x[1] = '.colhead td:nth-child(2), tr.group_torrent td[colspan]';
break;
default:
return;
}
this.mod(c, x);
},
run: function () { //console.log('this.img: ' + this.img);
setTimeout(art.exe, art.lag);
},
exe: function () {
var id = art.img.shift();
if (id) {
art.xhr(id);
art.run();
}
},
xhr: function (id) {
var req = new XMLHttpRequest();
req.id = id;
req.pic = document.getElementsByClassName('_albumartdisplay' + req.id);
req.pln = req.pic.length; // console.log('p ln: '+req.id, req.pln);
req.pix = function (e) { art.mix.call(req, e); };
req.open('get', ['ajax.php?action=torrentgroupalbumart&id=', req.id, '&auth=', this.jkey].join(''), true);
req.onload = this.dat;
req.onerror = this.bad;
req.send(null);
},
bad: function () { //console.log('not found!'+this.id);
art.mux.call(this, 'error');
},
dat: function () {
var j;
try {
j = JSON.parse(this.responseText); //console.log(j);
this.pic[0].onerror = this.pix;
this.pic[0].onload = this.pix;
this.pic[0].src = j.response.wikiImage;
} catch (e) {
art.bad.call(this);
}
},
mix: function (evt) { // evt - load or error - is attached to an image or xhr
var a = evt.type, b = evt.target; // console.log('mix: ', this, a, b.src, this.id);
switch (a) {
case 'load':
art.mem[this.id] = b.src;
break;
case 'error':
delete art.mem[this.id];
break;
default:
return;
}
if (this.responseText) {
this.pic[0].onerror = null;
if (a === 'error') {
this.pic[0].src = 'static/common/noartwork/music.png';
return;
}
this.pic[0].onload = null;
art.mux.call(this, a);
} else {
this.removeEventListener('error', art.mix, false);
}
art.put();
},
mux: function (a) {
var i = this.pln, p, q;
while (i--) {
p = this.pic[i];
q = p.parentNode;
q.className = 'gm_albumartdisplay';
p.src = this.pic[0].src;
p.alt = a === 'load' ? 'Loaded' : 'No artwork';
p.removeAttribute('style');
q.removeAttribute('title');
}
},
put: function () {
if (strg.on) {
if (Object.LEN(this.mem) > 1500) { Object.SFT(this.mem); }
strg.save('AlbArtDispCache', this.mem);
}
},
set: function () {
switch (this.id) {
case 'albumdisplaymap':
art.map = this.checked;
break;
case 'albumdisplayren':
art.ren = this.checked;
break;
case 'albumdisplaytop':
art.top = this.checked;
break;
default:
return false;
}
art.pm.textContent = strg.save('whatartdisplaysettings', {map: art.map, ren: art.ren, top: art.top}) ? 'Saved.' : 'The setting could not be saved.'; // console.log('saved: '+strg.read('whatartdisplaysettings'));
window.setTimeout(function () { art.pm.textContent = ''; }, 2500);
},
elm: function (t, o, e, p) {
var a, b, c = document.createElement(t);
if (typeof (o) === 'object') { for (a in o) { if (o.hasOwnProperty(a)) { b = a.charAt(0); switch (b) { case '_': c.style[a.substring(1)] = o[a]; break; case '$': c.setAttribute(a.substring(1), o[a]); break; default: c[a] = o[a]; break; } } } }
if (e) { p ? c.appendChild(e) : e.appendChild(c); }
return c;
}
};
art.init();
}());