MediaWiki:AddQuickClaim.js

From Wikidata
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)
  • Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
// <nowiki>

/*
  Quick helper script to add claim to a Wikidata item. 

  Author: [[User:Multichill]], based on [[MediaWiki:Catcheck.js]] by [[User:Lupo]]
  License: Quadruple licensed GFDL, GPL, LGPL and Creative Commons Attribution 3.0 (CC-BY-3.0)
  
  Choose whichever license of these you like best :-)
*/

/*jshint curly:false*/
/*global mw:false, $:false*/
mw.loader.using( ['mediawiki.api'], function() {

'use strict';

if (mw.config.get('wgNamespaceNumber') !== 0 || mw.config.get('wgAction') !== 'edit') {
  return;
}

window.AddQuickClaim =
{
  run : function ()
  {
  	var entityId = mw.config.get('wbEntityId');
  	var api = new mw.Api();
    // Grab the property and item id from the url
    var propertyIdUrl = window.location.href.match(/propertyid=(P\d+)&entityid=Q(\d+)/)[1];
    var entityIdUrl = window.location.href.match(/propertyid=(P\d+)&entityid=Q(\d+)/)[2];
    // TODO: Could lookup the property and the item to show it to the user.
    // I have to ask the user otherwise people could be tricked into doing edits
    var doedit = confirm("Are you sure you want to add " + propertyIdUrl + ":Q" + entityIdUrl + "?");
    // Build the url to return to when it edit was successful 
    var returnurl = "https://" + window.location.hostname + "/wiki/" + entityId;
    if (propertyIdUrl && entityIdUrl && doedit) {
    	// TODO: Check if the statement isn't already on the item.
    	// Build the edit to be send to the api
    	var payload = "{\"claims\":[{\"mainsnak\":{\"snaktype\":\"value\",\"property\":\"" + propertyIdUrl + "\",\"datavalue\":{\"raw\": \"Q" + entityIdUrl + "\",\"value\": {\"entity-type\": \"item\",\"numeric-id\": " + entityIdUrl + ",\"id\": \"Q" + entityIdUrl + "\"},\"type\": \"wikibase-entityid\"}},\"type\":\"statement\",\"rank\":\"normal\"}]}";
    	var summary = "Adding claim [[Property:" + propertyIdUrl + "]] -> [[Q" + entityIdUrl + "]] using [[MediaWiki:AddQuickClaim.js]]";
    	api.postWithEditToken({
    		action: 'wbeditentity',
    		assertuser: mw.config.get( 'wgUserName' ),
    		id: entityId,
    		summary: summary,
    		data: payload
    }).done( function() {
    	mw.notify(mw.msg('Added the claim to the item'));
    	// Wait 3 seconds and reload the item.
    	setTimeout(function() {
    		window.location.assign(returnurl);
    	}, 2000); 
    }).fail( function() {
    	mw.notify(mw.msg('Failed to add the claim to the item'));
    });
    }
  }
};
window.AddQuickClaim.run();
});

// </nowiki>