// ==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/ // @downloadURL https://update.greasyfork.cloud/scripts/1027/WhatCD%20%3A%20Album%20Art%20Display.user.js // @updateURL https://update.greasyfork.cloud/scripts/1027/WhatCD%20%3A%20Album%20Art%20Display.meta.js // ==/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 = '
Cover Art
'; 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: 'Album Art Display

'}); 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(); }());