Difference between revisions of "MediaWiki:Perseids-toolbar.js"
Jump to navigation
Jump to search
(only executes if the item has TM id.) |
(removing unnecessary complications) |
||
Line 1: | Line 1: | ||
− | function generateButton(type, itemId, claimId, lang) { |
||
+ | // For each translation property, this function returns the translation language code. |
||
− | if(type == 'edit') { |
||
− | var editUrl = 'http://sosol.perseids.org/sosol/cts_publications/create_from_agent?agent=' |
||
− | + 'http://www.eagle-network.eu&id=' + itemId + '&filter=' + claimId; |
||
− | |||
− | return $( '<a>' ) |
||
− | .attr( { |
||
− | 'class': 'wikibase-toolbarbutton perseids-edit', |
||
− | 'href': editUrl, |
||
− | } ) |
||
− | .before( '|' ) |
||
− | .text( 'edit in Perseids' ); |
||
− | } else if (type == 'save') { |
||
− | return $( '<a>' ) |
||
− | .attr( { |
||
− | 'class': 'wikibase-toolbarbutton perseids-save', |
||
− | 'href': 'javascript:void(0);' |
||
− | } ) |
||
− | .before( '|' ) |
||
− | .text( 'save to Perseids' ); |
||
− | } else if (type == 'add') { |
||
− | var addUrl = 'http://sosol.perseids.org/sosol/cts_publications/create_from_agent?agent=' |
||
− | + 'http://www.eagle-network.eu&id=' + itemId + '&lang=' + lang; |
||
− | |||
− | return $( '<a>' ) |
||
− | .attr( { |
||
− | 'class': 'wikibase-toolbarbutton perseids-add', |
||
− | 'href': addUrl, |
||
− | } ) |
||
− | .before( '|' ) |
||
− | .text( 'add via Perseids' ); |
||
− | } |
||
− | } |
||
− | |||
function langFromProperty(prop) { |
function langFromProperty(prop) { |
||
− | // prop: p1, p2, p13, |
+ | // prop: p1, p2, p13, ... |
// returns null if the property is not a translation |
// returns null if the property is not a translation |
||
Line 58: | Line 25: | ||
} |
} |
||
+ | // Returns the name of the property, e.g. 'p59' |
||
function getAssociatedProperty(elem) { |
function getAssociatedProperty(elem) { |
||
− | // Returns the name of the property, e.g. 'p59' |
||
var theClass = elem.parents('.wb-claim-section').attr('class').split(' ')[1]; |
var theClass = elem.parents('.wb-claim-section').attr('class').split(' ')[1]; |
||
return theClass.replace('wb-claim-section-', ''); |
return theClass.replace('wb-claim-section-', ''); |
||
} |
} |
||
+ | // Returns claim ID |
||
function getAssociatedClaim(elem) { |
function getAssociatedClaim(elem) { |
||
− | // Returns claim ID |
||
− | |||
var claimClass = elem.parents('.wb-statement-claim').find('.wb-claim').attr('class').split(' ')[1]; |
var claimClass = elem.parents('.wb-statement-claim').find('.wb-claim').attr('class').split(' ')[1]; |
||
return claimClass.replace('wb-claim-', ''); |
return claimClass.replace('wb-claim-', ''); |
||
} |
} |
||
+ | |||
+ | // These functions generate and attach the buttons. |
||
function makeEditButton() { |
function makeEditButton() { |
||
Line 78: | Line 46: | ||
var langCode = langFromProperty(langProp); |
var langCode = langFromProperty(langProp); |
||
− | if(langCode) // only for translation claims |
+ | if(!langCode) // only for translation claims |
− | + | return; |
|
+ | |||
+ | var editUrl = 'http://sosol.perseids.org/sosol/cts_publications/create_from_agent?agent=' |
||
+ | + 'http://www.eagle-network.eu&id=' + itemId + '&filter=' + claimId; |
||
+ | |||
+ | var editButton = $( '<a>' ) |
||
+ | .attr( { |
||
+ | 'class': 'wikibase-toolbarbutton perseids-edit', |
||
+ | 'href': editUrl, |
||
+ | } ) |
||
+ | .before( '|' ) |
||
+ | .text( 'edit in Perseids' ); |
||
+ | |||
+ | $(this).after(editButton); |
||
} |
} |
||
Line 88: | Line 56: | ||
var langCode = langFromProperty(langProp); |
var langCode = langFromProperty(langProp); |
||
− | if(langCode) // only for translation claims |
+ | if(!langCode) // only for translation claims |
− | + | return; |
|
+ | |||
+ | var addUrl = 'http://sosol.perseids.org/sosol/cts_publications/create_from_agent?agent=' |
||
+ | + 'http://www.eagle-network.eu&id=' + itemId + '&lang=' + langCode; |
||
+ | |||
+ | var addButton = $( '<a>' ) |
||
+ | .attr( { |
||
+ | 'class': 'wikibase-toolbarbutton perseids-add', |
||
+ | 'href': addUrl, |
||
+ | } ) |
||
+ | .before( '|' ) |
||
+ | .text( 'add via Perseids' ); |
||
+ | |||
+ | $(this).after(addButton); |
||
} |
} |
||
Line 96: | Line 64: | ||
var langCode = langFromProperty(langProp); |
var langCode = langFromProperty(langProp); |
||
− | if(langCode) // only for translation claims |
+ | if(!langCode) // only for translation claims |
− | + | return; |
|
+ | |||
+ | var saveButton = $( '<a>' ) |
||
+ | .attr( { |
||
+ | 'class': 'wikibase-toolbarbutton perseids-save', |
||
+ | 'href': 'javascript:void(0);' |
||
+ | } ) |
||
+ | .before( '|' ) |
||
+ | .text( 'save to Perseids' ); |
||
+ | |||
+ | $(this).after(saveButton); |
||
} |
} |
||
jQuery(document).ready(function() { |
jQuery(document).ready(function() { |
||
− | // Only |
+ | // Only displays the buttons if the item has a Trismegistos ID. |
if($('.wb-claims .wb-claim-section-p3').length === 0) { |
if($('.wb-claims .wb-claim-section-p3').length === 0) { |
||
return; |
return; |
||
Line 114: | Line 82: | ||
.each(makeAddButton); |
.each(makeAddButton); |
||
− | // |
+ | // When I click on "edit"... |
$( '.wb-claimlist .wb-statement-claim .wikibase-toolbareditgroup .wikibase-toolbarbutton:first-child:not(.wikibase-toolbarbutton-disabled)' ).click(function () { |
$( '.wb-claimlist .wb-statement-claim .wikibase-toolbareditgroup .wikibase-toolbarbutton:first-child:not(.wikibase-toolbarbutton-disabled)' ).click(function () { |
||
− | // |
+ | // I make the "save to Perseids" button |
$( '.wb-claimlist .wb-statement-claim .wikibase-toolbareditgroup-ineditmode .wikibase-toolbar:not(:has(.perseids-save)) .wikibase-toolbarbutton:first-child') |
$( '.wb-claimlist .wb-statement-claim .wikibase-toolbareditgroup-ineditmode .wikibase-toolbar:not(:has(.perseids-save)) .wikibase-toolbarbutton:first-child') |
||
.each(makeSaveButton); |
.each(makeSaveButton); |
||
− | // Click |
+ | // Click on "undo": recreates "edit" button |
$( '.wb-claimlist .wb-statement-claim .wikibase-toolbareditgroup-ineditmode .wikibase-toolbar .wikibase-toolbarbutton:last-child').click(function(){ |
$( '.wb-claimlist .wb-statement-claim .wikibase-toolbareditgroup-ineditmode .wikibase-toolbar .wikibase-toolbarbutton:last-child').click(function(){ |
||
$( '.wb-claimlist .wb-statement-claim .wikibase-toolbareditgroup-innoneditmode .wikibase-toolbar:not(:has(.perseids-edit)) .wikibase-toolbarbutton:first-child' ) |
$( '.wb-claimlist .wb-statement-claim .wikibase-toolbareditgroup-innoneditmode .wikibase-toolbar:not(:has(.perseids-edit)) .wikibase-toolbarbutton:first-child' ) |
Revision as of 08:24, 27 September 2014
// For each translation property, this function returns the translation language code. function langFromProperty(prop) { // prop: p1, p2, p13, ... // returns null if the property is not a translation var propToLang = { 'p11': 'en', 'p13': 'it', 'p16': 'el', 'p19': 'hu', 'p14': 'es', 'p17': 'ru', 'p20': 'ro', 'p57': 'hr', 'p12': 'de', 'p15': 'fr', 'p18': 'si', 'p61': 'se', }; if (prop in propToLang) return propToLang[prop]; else return null; } // Returns the name of the property, e.g. 'p59' function getAssociatedProperty(elem) { var theClass = elem.parents('.wb-claim-section').attr('class').split(' ')[1]; return theClass.replace('wb-claim-section-', ''); } // Returns claim ID function getAssociatedClaim(elem) { var claimClass = elem.parents('.wb-statement-claim').find('.wb-claim').attr('class').split(' ')[1]; return claimClass.replace('wb-claim-', ''); } // These functions generate and attach the buttons. function makeEditButton() { var itemId = wb.entity.getId(); var claimId = getAssociatedClaim($(this)); var langProp = getAssociatedProperty($(this)); var langCode = langFromProperty(langProp); if(!langCode) // only for translation claims return; var editUrl = 'http://sosol.perseids.org/sosol/cts_publications/create_from_agent?agent=' + 'http://www.eagle-network.eu&id=' + itemId + '&filter=' + claimId; var editButton = $( '<a>' ) .attr( { 'class': 'wikibase-toolbarbutton perseids-edit', 'href': editUrl, } ) .before( '|' ) .text( 'edit in Perseids' ); $(this).after(editButton); } function makeAddButton() { var itemId = wb.entity.getId(); var langProp = getAssociatedProperty($(this)); var langCode = langFromProperty(langProp); if(!langCode) // only for translation claims return; var addUrl = 'http://sosol.perseids.org/sosol/cts_publications/create_from_agent?agent=' + 'http://www.eagle-network.eu&id=' + itemId + '&lang=' + langCode; var addButton = $( '<a>' ) .attr( { 'class': 'wikibase-toolbarbutton perseids-add', 'href': addUrl, } ) .before( '|' ) .text( 'add via Perseids' ); $(this).after(addButton); } function makeSaveButton() { var langProp = getAssociatedProperty($(this)); var langCode = langFromProperty(langProp); if(!langCode) // only for translation claims return; var saveButton = $( '<a>' ) .attr( { 'class': 'wikibase-toolbarbutton perseids-save', 'href': 'javascript:void(0);' } ) .before( '|' ) .text( 'save to Perseids' ); $(this).after(saveButton); } jQuery(document).ready(function() { // Only displays the buttons if the item has a Trismegistos ID. if($('.wb-claims .wb-claim-section-p3').length === 0) { return; } // Edit buttons $( '.wb-claimlist .wb-statement-claim .wikibase-toolbareditgroup-innoneditmode .wikibase-toolbar .wikibase-toolbarbutton:first-child' ) .each(makeEditButton); // Add buttons $( '.wb-claimlist .wb-claim-section > .wb-addtoolbar .wb-editsection a.wikibase-toolbarbutton:first-child') .each(makeAddButton); // When I click on "edit"... $( '.wb-claimlist .wb-statement-claim .wikibase-toolbareditgroup .wikibase-toolbarbutton:first-child:not(.wikibase-toolbarbutton-disabled)' ).click(function () { // I make the "save to Perseids" button $( '.wb-claimlist .wb-statement-claim .wikibase-toolbareditgroup-ineditmode .wikibase-toolbar:not(:has(.perseids-save)) .wikibase-toolbarbutton:first-child') .each(makeSaveButton); // Click on "undo": recreates "edit" button $( '.wb-claimlist .wb-statement-claim .wikibase-toolbareditgroup-ineditmode .wikibase-toolbar .wikibase-toolbarbutton:last-child').click(function(){ $( '.wb-claimlist .wb-statement-claim .wikibase-toolbareditgroup-innoneditmode .wikibase-toolbar:not(:has(.perseids-edit)) .wikibase-toolbarbutton:first-child' ) .each(makeEditButton); }); }); });