User:Ugochimobi/personal sort identifiers.js

// Show identifiers ordered on a personal basis

// Please, predefine a global variable named identifiers_preferred_sort, eg: // identifiers_preferred_sort = new Array('P214','P213','P244','others'); // to have VIAF, ISNI, LCNAF at the top of the identifiers list, and sort others by P ascending number; // default is // identifiers_preferred_sort = new Array('others');

// FOR DEVELOPERS: this script could be enhanced: "others" could also be: // others by descending P number // others by asc|desc labels (in the current language) // others hide (adding a button to toggle them) // others remove

$( function($) {	// check if we're viewing an item	let qid = mw.config.get( 'wbEntityId' );	if ( !qid ) {		return;	}

var retries = 0; var max_retries = 20; if( typeof(identifiers_preferred_sort) == "undefined" ) { identifiers_preferred_sort = new Array('others'); }

function weight(x,identifiers_preferred_sort) { var p;		p = identifiers_preferred_sort.indexOf(x); if (p > -1) return p;		p = identifiers_preferred_sort.indexOf('others'); if (p > -1) { p = p === 0 ? 1 : p;			var property_number = x.replace(/^P/,''); // the string after P			return property_number * p;		} }	function sorter(a,b) { var weight_a = weight(a,identifiers_preferred_sort); var weight_b = weight(b,identifiers_preferred_sort); return weight_a - weight_b; }	function manage_identifiers{ var ids = $('.wikibase-statementgrouplistview>div').get(2); // the block containing identifiers var div_ids = $(ids).find('>div'); // the divs of each identifier if (div_ids.length > 0) { // now we have at least one identifier // console.log('Found '+div_ids.length+' identifiers'); // test if (div_ids.length > 1) { // we have more than 1 identifier var Ps = div_ids.map(function(i,e){return $(e).attr('id')}); Ps = Ps.toArray; // console.log('Identifiers before sorting: ',Ps); // test Ps = Ps.sort(sorter); // console.log('Identifiers after sorting : ',Ps); // test $('#identifiers').append(' sorted '); $('#msg_sorted').css({"color":"gray","font-size":"0.8em"}); // moving divs for (var i = 0; i < Ps.length; i++) { var P = Ps[i]; // e.g. P227 var E = $('#'+P).detach; if (i === 0) { $(ids).append(E); }					else { $('#'+Ps[i-1]).after(E); }				}			}		}		else { // console.log('waiting for identifiers... try again'); // test if (retries++ < max_retries) setTimeout(manage_identifiers, 100); }	}	if ($('#identifiers').length) { // we have identifiers, but we have to wait for them setTimeout(manage_identifiers, 100); } });