mirror of
https://github.com/BradNut/graphbrainz
synced 2025-09-08 17:40:32 +00:00
84 lines
2.5 KiB
JavaScript
84 lines
2.5 KiB
JavaScript
import URL from 'url'
|
|
|
|
function resolveMediaWikiImages(source, args, { loaders }) {
|
|
const isURL = relation => relation['target-type'] === 'url'
|
|
let rels = source.relations ? source.relations.filter(isURL) : []
|
|
if (!rels.length) {
|
|
rels = loaders.lookup
|
|
.load([source._type, source.id, { inc: 'url-rels' }])
|
|
.then(source => source.relations.filter(isURL))
|
|
}
|
|
return Promise.resolve(rels).then(rels => {
|
|
const pages = rels
|
|
.filter(rel => {
|
|
if (rel.type === args.type) {
|
|
const url = URL.parse(rel.url.resource)
|
|
if (url.pathname.match(/^\/wiki\/(File|Image):/)) {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
})
|
|
.map(rel => rel.url.resource)
|
|
return loaders.mediaWiki.loadMany(pages)
|
|
})
|
|
}
|
|
|
|
export default {
|
|
MediaWikiImage: {
|
|
descriptionURL: imageInfo => imageInfo.descriptionurl,
|
|
canonicalTitle: imageInfo => imageInfo.canonicaltitle,
|
|
objectName: imageInfo => {
|
|
const data = imageInfo.extmetadata.ObjectName
|
|
return data ? data.value : null
|
|
},
|
|
descriptionHTML: imageInfo => {
|
|
const data = imageInfo.extmetadata.ImageDescription
|
|
return data ? data.value : null
|
|
},
|
|
originalDateTimeHTML: imageInfo => {
|
|
const data = imageInfo.extmetadata.DateTimeOriginal
|
|
return data ? data.value : null
|
|
},
|
|
categories: imageInfo => {
|
|
const data = imageInfo.extmetadata.Categories
|
|
return data ? data.value.split('|') : []
|
|
},
|
|
artistHTML: imageInfo => {
|
|
const data = imageInfo.extmetadata.Artist
|
|
return data ? data.value : null
|
|
},
|
|
creditHTML: imageInfo => {
|
|
const data = imageInfo.extmetadata.Credit
|
|
return data ? data.value : null
|
|
},
|
|
licenseShortName: imageInfo => {
|
|
const data = imageInfo.extmetadata.LicenseShortName
|
|
return data ? data.value : null
|
|
},
|
|
licenseURL: imageInfo => {
|
|
const data = imageInfo.extmetadata.LicenseUrl
|
|
return data ? data.value : null
|
|
},
|
|
metadata: imageInfo =>
|
|
Object.keys(imageInfo.extmetadata).map(key => {
|
|
const data = imageInfo.extmetadata[key]
|
|
return { ...data, name: key }
|
|
})
|
|
},
|
|
MediaWikiImageMetadata: {
|
|
value: obj => (obj.value == null ? obj.value : `${obj.value}`)
|
|
},
|
|
Artist: {
|
|
mediaWikiImages: resolveMediaWikiImages
|
|
},
|
|
Instrument: {
|
|
mediaWikiImages: resolveMediaWikiImages
|
|
},
|
|
Label: {
|
|
mediaWikiImages: resolveMediaWikiImages
|
|
},
|
|
Place: {
|
|
mediaWikiImages: resolveMediaWikiImages
|
|
}
|
|
}
|