Line 2: |
Line 2: |
| const INSTANCE_OF_PROPERTY = 'claims.P3'; // because P3 is the property "instance of" | | const INSTANCE_OF_PROPERTY = 'claims.P3'; // because P3 is the property "instance of" |
| | | |
− | function isDataController() { | + | function generateGDPRLink(dataControllerItemID) { |
− | let retVal = false;
| |
− | if ( typeof mw.config.values.wbEntity != "undefined" ) // if we are on the page of a loaded entity
| |
− | {
| |
− | let obj = JSON.parse ( mw.config.values.wbEntity );
| |
− | if ( typeof check( obj, INSTANCE_OF_PROPERTY ) != "undefined" ) // if the entity has any "instance of" claim
| |
− | {
| |
− | let instance_of_claims = dive( obj, INSTANCE_OF_PROPERTY );
| |
− | for( var i = 0; i < instance_of_claims.length; i++ ) // retrieve each 'instance of' claim to check it
| |
− | {
| |
− | let the_thing_it_is_an_instance_of = dive( instance_of_claims[i] , 'mainsnak.datavalue.value');
| |
− | if (the_thing_it_is_an_instance_of['numeric-id'] === DATA_CONTROLLER_ITEM_ID )
| |
− | {
| |
− | // it's a data controller
| |
− | retVal = true; break;
| |
− | }
| |
− | }
| |
− | }
| |
− | }
| |
− | return retVal;
| |
− | }
| |
− | | |
− | console.log ("start of Alex's Access template");
| |
− | | |
− | // get the ID of the current page
| |
− | var $title2 = $( '.wikibase-title' );
| |
− | console.log($title2.find( '.wikibase-title-id' ).text());
| |
− | var qId = $title2.find( '.wikibase-title-id' ).text().replace( /[()]/g, '' );
| |
− | console.log('qid is '+qId);
| |
− | | |
− | if (isDataController()) {
| |
| // make an API call to expand the letter template, using this item. | | // make an API call to expand the letter template, using this item. |
| let api = new mw.Api(); | | let api = new mw.Api(); |
| api.get( { | | api.get( { |
| action: 'expandtemplates', | | action: 'expandtemplates', |
− | text: '{{User:Alexbfree/Template:GDPRMailtoAccess|qID='+qId+'}}' | + | text: '{{User:Alexbfree/Template:DataControllerMenu|qID='+dataControllerItemID+'}}' |
| } ).done( function ( data ) { | | } ).done( function ( data ) { |
| var expanded = $(data.expandtemplates["*"]) | | var expanded = $(data.expandtemplates["*"]) |
Line 43: |
Line 13: |
| } ); | | } ); |
| } | | } |
− | // otherwise, we don't need to do anything
| |
| | | |
− | console.log ("end of Alex's Access template"); | + | function claimUsesDataControllerAsItsObject(claim) { |
| + | return dive( claim , 'mainsnak.datavalue.value')['numeric-id'] === DATA_CONTROLLER_ITEM_ID; |
| + | } |
| + | |
| + | mw.hook( 'wikibase.entityPage.entityLoaded' ).add( function ( entity ) { |
| + | 'use strict'; |
| + | |
| + | // get the ID of the current page |
| + | var pageID = document.querySelector('.wikibase-title .wikibase-title-id').innerText.replace( /[()]/g, '' ); |
| + | //console.log(pageID); |
| + | |
| + | if (isDataController(entity)) { |
| + | generateGDPRLink(pageID); |
| + | } |
| + | }); |
| + | |
| + | function isDataController(entity) { |
| + | let foundThatThisIsAnInstanceOfDataController = false; |
| + | |
| + | if ( typeof entity != "undefined" ) // if we are on the page of a loaded entity |
| + | { |
| + | if ( typeof check( entity, INSTANCE_OF_PROPERTY ) != "undefined" ) // if the entity has any "instance of" claim |
| + | { |
| + | let claims = dive( entity, INSTANCE_OF_PROPERTY ); // get the claims which use the "instance of" property |
| + | if (claims.some(claimUsesDataControllerAsItsObject)) |
| + | { |
| + | foundThatThisIsAnInstanceOfDataController = true; |
| + | } |
| + | } |
| + | } |
| + | return foundThatThisIsAnInstanceOfDataController; |
| + | } |
| + | |
| + | function dive(array, read){ |
| + | return read.split('.').reduce(indexinterpolate, array); |
| + | } |
| + | |
| + | function check(array, read){ |
| + | return read.split('.').reduce(indexcheck, array); |
| + | } |