User:Nw520/QualiRef.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.
mw.loader.using( 'mediawiki.util' ).then( () => {
function main() {
setupCss();
collect();
}
function collect() {
for ( const statementView of document.querySelectorAll( '.wikibase-statementview' ) ) {
const data = {};
// Collect qualifiers
for ( const qualifierSnakView of statementView.querySelectorAll( '.wikibase-statementview-qualifiers .wikibase-snakview:first-child' ) ) {
const property = getPropertyFromSnakView( qualifierSnakView );
prepareData( data, property );
data[ property ].qualifiers.push( qualifierSnakView );
}
// Collect references
for ( const refSnakListView of statementView.querySelectorAll( '.wikibase-statementview-references .wikibase-referenceview .wikibase-snaklistview' ) ) {
const property = getPropertyFromSnakView( refSnakListView.querySelector( '.wikibase-snakview' ) ); // First snakview
if ( property !== 'P10551' ) {
continue;
}
for ( const refSnakView of refSnakListView.querySelectorAll( '.wikibase-snakview' ) ) {
const refSnakValue = refSnakView.querySelector( '.wikibase-snakview-value a' );
const referencedProperty = urlToProperty( refSnakValue?.attributes.href.value ?? null );
if ( referencedProperty !== null ) {
prepareData( data, referencedProperty );
data[ referencedProperty ].references.push( refSnakView );
}
}
}
// Write data
for ( const { qualifiers, references } of Object.values( data ) ) {
for ( const qualifierSnakView of qualifiers ) {
qualifierSnakView.dataset.nw520QualirefReferencecount = references.length;
qualifierSnakView.querySelector( '.wikibase-snakview-property' ).dataset.nw520QualirefReferencecount = references.length;
}
for ( const refSnakView of references ) {
refSnakView.dataset.nw520QualirefQualifiercount = qualifiers.length;
refSnakView.querySelector( '.wikibase-snakview-value' ).dataset.nw520QualirefQualifiercount = qualifiers.length;
}
}
}
}
function getPropertyFromSnakView( snakView ) {
return urlToProperty( snakView.querySelector( '.wikibase-snakview-property a' )?.attributes.href.value ?? null );
}
function prepareData( data, property ) {
if ( data[ property ] === undefined ) {
data[ property ] = {
qualifiers: [],
references: []
};
}
}
function setupCss() {
mw.util.addCSS( `.wikibase-statementview *[data-nw520-qualiref-referencecount]:not([data-nw520-qualiref-referencecount='0']) .wikibase-snakview-property::after {
background: #ddd;
border-radius: 3px;
color: #333;
content: attr(data-nw520-qualiref-referencecount);
margin-left: .2em;
padding: .05em .25em;
}
.wikibase-statementview:hover *[data-nw520-qualiref-referencecount]:not([data-nw520-qualiref-referencecount='0']) .wikibase-snakview-property::after {
content: attr(data-nw520-qualiref-referencecount) ' refs';
}
.wikibase-statementview *[data-nw520-qualiref-qualifiercount] .wikibase-snakview-value::after {
background: #ddd;
border-radius: 3px;
color: #333;
content: attr(data-nw520-qualiref-qualifiercount);
margin-left: .2em;
padding: .05em .25em;
}
.wikibase-statementview *[data-nw520-qualiref-qualifiercount='0'] .wikibase-snakview-value::after {
background: #990000;
color: #fff;
}
.wikibase-statementview:hover *[data-nw520-qualiref-qualifiercount] .wikibase-snakview-value::after {
content: attr(data-nw520-qualiref-qualifiercount) ' qualis';
}` );
}
function urlToProperty( url ) {
if ( url === null ) {
return null;
}
return url.replace( '/wiki/Property:', '' );
}
main();
} );