User:Lectrician1/CheckInverses.js
Jump to navigation
Jump to search
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Press Ctrl-F5.
// Checks which statements have an inverse property and displays an indicator next to a statement whether an inverse statement is present for that property or not.
// Links to the inverse statement if an inverse is present.
// license: CC0
mw.hook("wikibase.entityPage.entityLoaded").add(async function(e) {
const query = `SELECT DISTINCT ?statement ?inverseStatement WHERE {
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
VALUES ?item {
wd:${e.title}
}
?property wikibase:claim ?propertyProperty.
# wd:Q123 p:P123 wds:123
?item ?propertyProperty ?statement.
?property wikibase:statementProperty ?statementProperty.
# wds:123 ps:P123 wd:1234
?statement ?statementProperty ?value.
# has part / member of
?inverseProp wdt:P1696 ?property.
OPTIONAL {
?inverse wdt:P1647* ?inverseProp.
?inverse wikibase:claim ?inversePropertyProperty.
?value ?inversePropertyProperty ?inverseStatement.
?inverse wikibase:statementProperty ?inverseStatementProperty.
?inverseStatement ?inverseStatementProperty ?item.
}
}`
let response = await $.post("https://query.wikidata.org/sparql?format=json", {
query: query
})
for (result of response.results.bindings) {
let statementURL = result.statement.value
const parts = statementURL.split("/");
// Get the last item of the array (i.e., the entity ID)
const statementId = parts[parts.length - 1].replace("-", "$");
var inverseExists = new OO.ui.IconWidget({
icon: 'check',
title: 'The inverse statement exists'
})
var noInverse = new OO.ui.IconWidget({
icon: 'close',
title: 'The inverse statement does not exist'
})
let statementIdEscaped = $.escapeSelector(statementId)
let indicators = $(`#${statementIdEscaped}`).find('.wikibase-snakview-indicators').eq(0)
if ('inverseStatement' in result) {
indicators.append($(inverseExists.$element).wrap(`<a style="float: right" target="_blank" href="${result.inverseStatement.value}"></a>`).parent())
} else {
indicators.append($(noInverse.$element).wrap(`<span style="float: right"></span>`).parent())
}
}
})