MediaWiki:Perseids-toolbar.js

From EAGLE MediaWiki
Revision as of 16:33, 23 July 2015 by Pietro.liuzzo (talk | contribs)
Jump to navigation Jump to search

Note: After saving, 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: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Go to Menu → Settings (Opera → Preferences on a Mac) and then to Privacy & security → Clear browsing data → Cached images and files.
// 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 && $('.wb-claims .wb-claim-section-p69').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);

        // Add buttons
	$( '.wb-claimlist .wikibase-toolbar wb-addtoolbar > .wikibase-toolbar 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);
		});
	});
});