User:Addshore/QuickRef.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)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
//THIS SCRIPT REQUIRES A CHROME EXTENSION TO WORK!
( function ( mw, $ ) {
	'use strict';
document.addEventListener("drop", function(event) {
    if( event.target.parentNode.className == "wikibase-snakview-property" ){		
		var claimPatt = /[Qq][0-9]+\$[\-A-Fa-f0-9]+/;
		var targetClaim = claimPatt.exec( event.target.closest( '.wikibase-statementview' ).className );
		var eventDate = new Date();
		var snaks = {
			'P1683' : [{
				'snaktype': 'value',
				'property': 'P1683',
				'datavalue': {
					'value': {
						'text': event.dataTransfer.getData("Text"),
						'language': 'en'
					},
					'type': 'monolingualtext'
				}
			}],
			'P854' : [{
				'snaktype': 'value',
				'property': 'P854',
				'datavalue': {
					'value': event.dataTransfer.getData("wikidataExt-URI"),
					'type': 'string'
				}
			}],
			'P813' : [{
				'snaktype': 'value',
				'property': 'P813',
				'datavalue': {
					'type': 'time',
					'value': {
						'time': '+0000000' + eventDate.getFullYear().toString() + '-' + ('0' + (eventDate.getMonth()+1).toString()).slice(-2) + '-' + ('0' + eventDate.getDate().toString()).slice(-2) + 'T00:00:00Z',
						'timezone': 0,
						'before': 0,
						'after': 0,
						'precision': 11,
						'calendarmodel': 'http://www.wikidata.org/entity/Q1985727'
					},
				}
			}]
		};

		new mw.Api()
		.postWithToken( 'edit', {
			'action': 'wbsetreference',
			'statement': targetClaim[0],
			'snaks': JSON.stringify( snaks ),
			'baserevid': mw.config.get( 'wgRevisionId' )
		} )
		.done( function ( /* data */ ) {
			console.log( "Saved successfully" );
			location.reload();
		} )
		.fail( function ( code, result ){
			if ( code === "http" ) {
				console.log( "HTTP error: " + result.textStatus ); // result.xhr contains the jqXHR object
			} else if ( code === "ok-but-empty" ) {
				console.log( "Got an empty response from the server" );
			} else {
				console.log( "API error: " + code );
				console.log( result );
			}
		} );
	}
});

}( mediaWiki, jQuery ) );