Browse Source

Merge branch 'wikitags-multiple-values'

master
parent
commit
0bec106104
  1. 39
      src/image.js
  2. 139
      src/wikipedia.js
  3. 13
      style.css

39
src/image.js

@ -9,7 +9,11 @@ function showImage (image, dom) {
dom.appendChild(div)
}
function showWikimediaImage (image, dom) {
function showWikimediaImage (image, options, dom) {
if (!options.size) {
options.size = 800
}
httpGet(
'https://commons.wikimedia.org/wiki/File:' + encodeURIComponent(image.id),
{
@ -20,13 +24,18 @@ function showWikimediaImage (image, dom) {
return
}
let m = result.body.match('img .* src="([^"]+)" .* data-file-width="([0-9]+)" data-file-height="([0-9]+)"')
let src = m[1]
let m = result.body.match(/<a href="([^"]+\/)([0-9]+)(px-[^"\/]+)" class="mw-thumbnail-link"/)
if (m) {
let src = m[1] + options.size + m[3]
let srcset = m[1] + options.size + m[3] + ' 1x, ' +
m[1] + Math.ceil(options.size * 1.5) + m[3] + ' 1.5x, ' +
m[1] + Math.ceil(options.size * 2) + m[3] + ' 2x'
var div = document.createElement('div')
div.innerHTML = '<a target="_blank" href="https://commons.wikimedia.org/wiki/File:' + encodeURIComponent(image.id) + '"><img src="' + src + '"/></a>'
var div = document.createElement('div')
div.innerHTML = '<a target="_blank" href="https://commons.wikimedia.org/wiki/File:' + encodeURIComponent(image.id) + '"><img src="' + src + '" srcset="' + srcset + '"/></a>'
dom.appendChild(div)
dom.appendChild(div)
}
}
)
}
@ -37,7 +46,7 @@ function show (img, options, div) {
switch (img.type) {
case 'wikimedia':
showWikimediaImage(img, div)
showWikimediaImage(img, options, div)
break
case 'url':
showImage(img, div)
@ -51,6 +60,7 @@ register_hook('show-details', function (data, category, dom, callback) {
div.className = 'images loading'
var imageWrapper
var nextImageWrapper = document.createElement('div')
let options
dom.appendChild(div)
@ -85,9 +95,13 @@ register_hook('show-details', function (data, category, dom, callback) {
imageWrapper.className = 'imageWrapper'
div.appendChild(imageWrapper)
options = {
size: Math.max(imageWrapper.offsetWidth, imageWrapper.offsetHeight)
}
showTimer = window.setInterval(showNext, 5000)
show(img, {}, imageWrapper)
show(img, options, imageWrapper)
loadNext()
})
@ -100,7 +114,7 @@ register_hook('show-details', function (data, category, dom, callback) {
return console.log("Can't load next image", err)
}
show(img, {}, nextImageWrapper)
show(img, options, nextImageWrapper)
})
}
@ -149,7 +163,12 @@ register_hook('show-popup', function (data, category, dom, callback) {
imageWrapper.className = 'imageWrapper'
div.appendChild(imageWrapper)
show(img, {}, imageWrapper)
let options = {
size: 150
}
console.log(options)
show(img, options, imageWrapper)
callback(null)
})

139
src/wikipedia.js

@ -43,7 +43,7 @@ function prepare (div) {
stripLinks(p)
// first image
var imgs = div.getElementsByTagName('img')
var imgs = content.getElementsByTagName('img')
for (i = 0; i < imgs.length; i++) {
var img = imgs[i]
@ -125,89 +125,64 @@ register_hook('show-details', function (data, category, dom, callback) {
div.className = 'wikipedia'
if ('wikipedia' in ob.tags) {
found++
foundPrefixes.push('')
showWikipedia(ob.tags.wikipedia, div, done)
ob.tags.wikipedia.split(/;/g).forEach(value => {
found++
showWikipedia(value, div, done)
})
}
for (k in ob.tags) {
m = k.match(/^(.*):wikipedia$/)
if (m) {
let prefix = m[1]
h = document.createElement('h4')
h.appendChild(document.createTextNode(lang('tag:' + m[1])))
h.appendChild(document.createTextNode(lang('tag:' + prefix)))
div.appendChild(h)
found++
foundPrefixes.push(m[1])
showWikipedia(ob.tags[k], div, done)
foundPrefixes.push(prefix)
ob.tags[k].split(/;/g).forEach(value => {
found++
showWikipedia(value, div, done)
})
}
m = k.match(/^((.*):)?wikipedia:(.*)$/)
if (m) {
if (typeof m[1] === 'undefined' && foundPrefixes.indexOf('') !== -1) {
let prefix = m[1]
if (typeof prefix === 'undefined' && foundPrefixes.indexOf('') !== -1) {
continue
}
if (foundPrefixes.indexOf(m[1]) !== -1) {
if (foundPrefixes.indexOf(prefix) !== -1) {
continue
}
if (m[1]) {
if (prefix) {
h = document.createElement('h4')
h.appendChild(document.createTextNode(lang('tag:' + m[1])))
h.appendChild(document.createTextNode(lang('tag:' + prefix)))
div.appendChild(h)
}
found++
foundPrefixes.push(m[1])
showWikipedia(m[3] + ':' + ob.tags[k], div, done)
foundPrefixes.push(prefix)
(m[3] + ':' + ob.tags[k]).split(/;/g).forEach(value => {
found++
showWikipedia(value, div, done)
})
}
}
if (ob.tags.wikidata && foundPrefixes.indexOf('') === -1) {
found++
foundPrefixes.push('')
wikidata.load(ob.tags.wikidata, function (err, result) {
var x
if (err) {
return done(err)
}
if (!result.sitelinks) {
return done(new Error('No Wikipedia links defined for Wikidata'))
}
if (options.data_lang + 'wiki' in result.sitelinks) {
x = result.sitelinks[options.data_lang + 'wiki']
return showWikipedia(options.data_lang + ':' + x.title, div, done)
}
for (k in result.sitelinks) {
if (k === 'commonswiki') {
continue
}
x = result.sitelinks[k]
m = k.match(/^(.*)wiki$/)
return showWikipedia(m[1] + ':' + x.title, div, done)
}
done()
})
}
for (k in ob.tags) {
m = k.match(/^(.*):wikidata$/)
if (m) {
ob.tags.wikidata.split(/;/g).forEach(value => {
found++
if (foundPrefixes.indexOf(m[1]) !== -1) {
continue
}
foundPrefixes.push(m[1])
wikidata.load(ob.tags[k], function (prefix, err, result) {
wikidata.load(value, function (err, result) {
var x
if (err) {
@ -215,13 +190,9 @@ register_hook('show-details', function (data, category, dom, callback) {
}
if (!result.sitelinks) {
return done()
return done(new Error('No Wikipedia links defined for Wikidata'))
}
h = document.createElement('h4')
h.appendChild(document.createTextNode(lang('tag:' + prefix)))
div.appendChild(h)
if (options.data_lang + 'wiki' in result.sitelinks) {
x = result.sitelinks[options.data_lang + 'wiki']
return showWikipedia(options.data_lang + ':' + x.title, div, done)
@ -238,7 +209,54 @@ register_hook('show-details', function (data, category, dom, callback) {
}
done()
}.bind(this, m[1]))
})
})
}
for (k in ob.tags) {
m = k.match(/^(.*):wikidata$/)
if (m) {
let prefix = m[1]
found++
if (foundPrefixes.indexOf(prefix) !== -1) {
continue
}
foundPrefixes.push(prefix)
h = document.createElement('h4')
h.appendChild(document.createTextNode(lang('tag:' + prefix)))
div.appendChild(h)
ob.tags[k].split(/;/g).forEach(value => {
wikidata.load(value, (err, result) => {
var x
if (err) {
return done(err)
}
if (!result.sitelinks) {
return done()
}
if (options.data_lang + 'wiki' in result.sitelinks) {
x = result.sitelinks[options.data_lang + 'wiki']
return showWikipedia(options.data_lang + ':' + x.title, div, done)
}
for (k in result.sitelinks) {
if (k === 'commonswiki') {
continue
}
x = result.sitelinks[k]
m = k.match(/^(.*)wiki$/)
return showWikipedia(m[1] + ':' + x.title, div, done)
}
done()
})
})
}
}
@ -282,7 +300,8 @@ function showWikipedia (tagValue, dom, callback) {
div.innerHTML = text
block.appendChild(div)
block.className = ''
block.removeChild(l)
block.className = 'clearfix'
callback(err)
})

13
style.css

@ -353,8 +353,13 @@ a:active {
margin-left: 0.5em;
margin-bottom: 0.5em;
}
.wikipedia div {
.wikipedia > h4 {
margin-top: 0.5em;
margin-bottom: 0.5em;
}
.wikipedia > div {
text-align: justify;
margin-bottom: 0.5em;
}
#contentDetails h3 {
border-bottom: 1px solid black;
@ -405,3 +410,9 @@ a:active {
.tabs-section > form > span.form_element_form_chooser {
border: none;
}
.clearfix::after {
content: '';
clear: both;
display: table;
}
Loading…
Cancel
Save