7 if (document.getElementById('canvas_main').getAttribute('typeof').indexOf('MusicAlbum') > -1) {
8 performer = document.querySelector('span[resource="#schemacontrib1"] span[property="name"]');
9 entity_name = performer.textContent.trim();
10 var lastchar = entity_name[entity_name.length - 1];
11 if (lastchar === '.' || lastchar === ',') {
12 entity_name = entity_name.slice(0, -1);
14 var inverse = entity_name.split(',');
15 if (inverse.length === 2) {
16 entity_name = inverse[1].trim() + " " + inverse[0].trim();
18 note = document.createElement('span');
20 note.addEventListener('click', perform, { once: true });
21 performer.appendChild(note);
25 findPerformer(performer, entity_name);
30 function toggleMode(el) {
31 wd = document.getElementById('magic_musician');
32 wd.style.display = 'inherit';
33 el.addEventListener('click', toggle);
37 wd = document.getElementById('magic_musician');
39 if (wd.style.display === 'inherit') {
40 wd.style.display = 'none';
42 wd.style.display = 'inherit';
48 function findPerformer(performer, entity_name) {
49 var url = 'https://query.wikidata.org/sparql';
50 var query = 'SELECT DISTINCT ?item ?itemLabel ?itemDescription ?image ?website ?songKick WHERE {' +
51 '?item rdfs:label|skos:altLabel|wdt:P1449 "' + entity_name + '"@en . ' +
52 '{ ?item wdt:P31 wd:Q215380 . } ' + // band
54 '{ ?item wdt:P31 wd:Q5741069 . } ' + // rock band
56 '{ ?item wdt:P106/wdt:P279* wd:Q639669 . } ' +
57 'OPTIONAL { ?item wdt:P3478 ?songKick . ' +
58 ' ?item wdt:P856 ?website . ' +
59 ' ?item wdt:P18 ?image } . ' +
60 'SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } ' +
63 var q = '?query=' + encodeURIComponent(query);
65 var req = new window.XMLHttpRequest();
66 req.open('GET', url + q);
67 req.setRequestHeader('Accept', 'application/sparql-results+json');
68 if (req.responseType && (req.responseType = 'json')) {
69 req.onload = function (evt) {
70 var r = req.response.results.bindings[0];
71 if (r !== undefined) {
72 generateCard(performer, r);
79 req.onload = function (evt) {
80 var r = JSON.parse(req.responseText).results.bindings[0];
81 if (r !== undefined) {
82 generateCard(performer, r);
91 function generateCard(performer, r) {
92 var auth_div = document.querySelector('div[class="rdetail_authors_div"]');
93 var musician = document.createElement('div');
94 musician.id = 'magic_musician';
95 musician.style.padding = '0.5em 1em 1em 1em';
96 musician.style.border = 'thin blue solid';
97 musician.style.overflow = 'hidden';
99 if (r.hasOwnProperty('image')) {
100 var img = document.createElement('img');
101 img.src = r.image.value.replace('http:', 'https:');
102 img.style.float = 'left';
103 img.style.width = '150px';
104 img.style['margin-right'] = '1em';
105 musician.appendChild(img);
108 if (r.hasOwnProperty('itemDescription')) {
109 var description = r.itemDescription.value;
110 var wdd = document.createElement('div');
111 var wddl = document.createElement('label');
112 wddl.innerText = description;
113 wdd.appendChild(wddl);
114 musician.appendChild(wdd);
117 var uri = r.item.value;
118 var wd = document.createElement('div');
119 var wdl = document.createElement('label');
120 wdl.innerText = 'Wikidata ID: ';
121 var wdv = document.createElement('a');
123 wdv.innerText = uri.substr(uri.lastIndexOf('/') + 1);
126 musician.appendChild(wd);
129 if (r.hasOwnProperty('website')) {
130 website = r.website.value;
131 var ws = document.createElement('div');
132 var wsl = document.createElement('label');
133 wsl.innerText = 'Web site: ';
134 var wsv = document.createElement('a');
136 wsv.innerText = website;
139 musician.appendChild(ws);
143 if (r.hasOwnProperty('songKick')) {
144 songkick = 'http://www.songkick.com/artists/' + r.songKick.value;
145 var sk = document.createElement('div');
146 var skl = document.createElement('label');
147 skl.innerText = 'Songkick ID: ';
148 var skv = document.createElement('a');
150 skv.innerText = songkick.substr(songkick.lastIndexOf('/') +1);
153 musician.appendChild(sk);
156 auth_div.appendChild(musician);
157 document.getElementById('rdetail_image_div').style.clear = 'both';