User:Inductiveload/scripts/draggableSitelinks.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)
- Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
/**
* DraggableSitelink.js
*
* Easily add a Wikipedia as an "imported from" (P143) reference to any
* statement - just drag the sitelink on to the sources for that claim
*
* Patches to: https://github.com/inductiveload/wikidata-gadgets
* Release: 2013-03-11 v0.9
* Author: User:Inductiveload
* Licence: MIT/GPL
*/
var DraggableSitelinks = (function ($) {
var importedFrom = { //hint to show when dragging, defaults to 'en'
'de' : 'Datenvorlage',
'en' : 'Imported from',
'fr' : 'Importé de',
'it' : 'Importato da',
'nl' : 'Geimporteerd uit',
'ru' : 'взято из',
'sv' : 'Importerad från',
'zh' : '导入自',
},
wikiProperties = { //list of Wikipedia item IDs
'arwiki' : 199700,
'cawiki' : 199693,
'cebwiki': 837615,
'dawiki' : 181163,
'dewiki' : 48183,
'enwiki' : 328,
'euwiki' : 207260,
'fiwiki' : 175482,
'frwiki' : 8447,
'elwiki' : 11918,
'eowiki' : 190551,
'eswiki' : 8449,
'glwiki' : 841208,
'hewiki' : 199913,
'iawiki' : 3757068,
'iewiki' : 6167360,
'iowiki' : 1154766,
'itwiki' : 11920,
'jawiki' : 177837,
'mkwiki' : 842341,
'nlwiki' : 10000,
'plwiki' : 1551807,
'ptwiki' : 11921,
'ruwiki' : 206855,
'trwiki' : 58255,
'svwiki' : 169514,
'ukwiki' : 199698,
'viwiki' : 200180,
'vowiki' : 714826,
'zhwiki' : 30239
},
importedFromProperty = 'p' + 143,
claimPatt=/(q|Q)[0-9]+\$[\-A-Fa-f0-9]+/,
myLang = mw.config.get('wgUserLanguage'),
//Private functions
init = function () {
//set up styles
$("<style type='text/css'></style>")
.append('.x-draggable-sitelink-target{ background-color:#6EDDA6;}')
.appendTo("head");
//make the sitelinks draggable
$('table.wb-sitelinks tbody > tr').draggable({
cursor: "move",
cursorAt: { top: 5, left: -5 },
start: function( event, ui ) {
$('div.wb-statement-references-container')
.addClass('x-draggable-sitelink-target')
//make the targets droppable (they can appear after load,
//so can't do this at init time
.droppable({
drop: function( event, ui ) {
var lang = $(ui.helper).data('lang');
addImportedFrom($(event.target), lang);
return false;
}
});
},
stop: function( event, ui ) {
$('div.wb-statement-references-container')
.removeClass('x-draggable-sitelink-target')
.droppable('destroy');
},
helper: function( event ) {
var langCode = $(event.target)
.parent()
.children('td.wb-sitelinks-siteid')
.text(),
draggedPage = $('td.wb-sitelinks-link-' + langCode + ' > a')
.text(),
prefixText = importedFrom[myLang];
if (prefixText === undefined){
prefixText = importedFrom['en'];
}
return $("<div>")
.attr({"class": "ui-widget-header x-draggable-sitelink-helper"})
.text(prefixText + ': ' + langCode + ' (' + draggedPage + ')')
.data('lang', langCode);
}
});
},
addImportedFrom = function(target, lang) {
//isolate the
var targetClaim = target.prev()
.children('.wb-claim')
.attr('class');
targetClaim = claimPatt.exec(targetClaim);
var sourceItem = wikiProperties[lang];
if (sourceItem === undefined){ //we don't know this wiki, have to bail
console.log("This Wiki does not have a known ID - add it!");
return;
}
// construct the Snak
var snaks = {};
snaks[ importedFromProperty ] = [{
"snaktype":"value",
"property":importedFromProperty,
"datavalue":{"type":"wikibase-entityid",
"value":{"entity-type":"item","numeric-id":sourceItem}
}
}];
//construct POST data
var params = { 'entity' : mw.config.get('wgPageName'),
'statement': ''+targetClaim,
'snaks': JSON.stringify(snaks),
'token':wbRepoEditToken,
'action':'wbsetreference'
};
//post the reference and reload
var api = new mw.Api();
api.post(params)
.done( function ( data ) {
document.location.reload(true);
});
}
mw.loader.using( ['jquery.ui'], function () {
$(document).ready(function() {
init();
});
});
}(jQuery));