User:L00mi/wiki2prop.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.
/**
* wiki2prop: Property Extractor
*
* Explanations module:
*
* Developers : Michael Luggen
* (Heavily) inspired by : Recoin, Vevake Balaraman (vevake.balaraman@gmail.com), Simon Razniewski (razniewski@inf.unibz.it), Albin Ahmeti (albin.ahmeti@gmail.com) [https://www.wikidata.org/wiki/User:Vvekbv/recoin.js]
*/
function w2p_loadentityselector(){
try {
$( ".value_input input" ).entityselector( {
url: 'https://www.wikidata.org/w/api.php',
language: mw.config.get( 'wgUserLanguage' ),
} );
}
catch(err) {
setTimeout(w2p_loadentityselector, 100);
}
}
function w2p_addstatement(qid, pid, snak) {
var api = new mw.Api();
api.get( { action: 'query', meta: 'tokens'}).then(
function(aw) {
token = aw.query.tokens.csrftoken;
api.post( {
action: 'wbcreateclaim',
entity: qid,
property: pid,
snaktype: 'value',
value: snak,
summary : "[Edited with Wiki2Prop] (Wikidata:Wiki2Prop)",
token: token
}).then(
function(aw){
console.log(aw);
if(aw.success == 1)
location.reload();
else
alert("Request failed. Please Check again.");
});
});
}
function w2p_addtosuggestions(result, labelsUL, entityID) {
var add = '<span class="wikibase-toolbarbutton wikibase-toolbar-item wikibase-toolbar-button wikibase-toolbar-button-add add_button"><a href=\"#\"><span class="wb-icon"/></a></span><span id="add" class="value_input" style="display:none"><input/> ' + '<a href=\"#\">Publish</a></span>';
var $insertElemWiki2Prop = $('<tr><td> ' +
'<label><a href="https://www.wikidata.org/wiki/Property:'+ result.property + '">' +
result.property + '</a></td><td>' + result.label + '</td><td>' + result.predicted + ' '+
'</label></td><td>' + add +'</td></tr>');
labelsUL.append($insertElemWiki2Prop);
$insertElemWiki2Prop.find('.add_button a').on('click', function(e) {
e.stopPropagation();
e.preventDefault();
$insertElemWiki2Prop.find('#add').slideToggle("fast");
$insertElemWiki2Prop.find('.add_button a').hide();
$insertElemWiki2Prop.find('.input').focus();
});
$(document).click(function(e) {
// e.stopPropagation();
$insertElemWiki2Prop.find('.add_button a').show();
$insertElemWiki2Prop.find("#add").hide();
});
$insertElemWiki2Prop.find("#add").click(function(e) {
e.stopPropagation();
});
$insertElemWiki2Prop.find('#add a').on('click', function(e) {
e.stopPropagation();
e.preventDefault();
var selection = $(this).prev('input').data('entityselector').selectedEntity();
var snak = JSON.stringify({ "entity-type": 'item', "numeric-id": selection.id.substring(1) });
w2p_addstatement(entityID, result.property, snak);
});
}
( function( mw, $ ) {
'use strict';
console.log('Wiki2Prop-plugin loaded');
/**
* Check if we're viewing an item
*/
var entityID = mw.config.get( 'wbEntityId' );
var lang = mw.config.get( 'wgUserLanguage' );
var title = "Wiki2Prop: Most relevant properties which are absent";
if ( !entityID )
{
return;
}
/**
* holds the DOM input element for the label
*/
var labelsParent;
function init()
{
// Element into which to add the missing attributes
labelsParent = $('#wb-item-' + entityID + ' div.wikibase-entitytermsview-heading');
if (labelsParent.length < 1)
{
return;
}
var labelsDOM = $('<div id="wiki2prop-property" style="display:none;overflow:auto;max-height:300px"></div>');
var labelsUL = $('<table id="wiki2prop-props" frame="box" style="margin-left:30px"></table>');
var tablehead = '<thead align="left"><tr bgcolor="#DCDCDC"><td>Property ID</td><td>Label</td><td>Predicted</td><td>Add Claim</td></tr></thead>';
labelsUL.append(tablehead);
var labelsText = $('<div class="wikibase-entitytermsview-wiki2propproperty-toggler ui-toggler ui-toggler-toggle ui-state-default" id = "wiki2prop-title" style="display:inline;"></div>');
var toggleSlider = $('<span class="ui-toggler-icon ui-icon ui-icon-triangle-1-e" id="wiki2prop-status"></span><span class="ui-toggler-label">'+ title +'</span>');
$.getJSON( 'https://tools.wmflabs.org/wiki2prop/?callback=?', 'subject=' + entityID + '&lang=' + lang,
function ( result )
{
for (var i=0; i< result.missing_properties.length; i++)
{
w2p_addtosuggestions(result.missing_properties[i], labelsUL, entityID);
setTimeout(w2p_loadentityselector, 100);
}
labelsText.append(toggleSlider);
labelsParent.append(labelsText);
labelsDOM.append(labelsUL);
labelsParent.append(labelsDOM);
$("#wiki2prop-title" ).click(function() {
$("#wiki2prop-property" ).slideToggle();
$("#wiki2prop-status").toggleClass("ui-icon-triangle-1-e ui-icon-triangle-1-s ui-toggler-icon3dtrans");
});
});
}
$( function () {
// init();
mw.hook( 'wikipage.content' ).add( init );
});
} ( mediaWiki, jQuery) );