מדיה ויקי:Gadget-catSexSelector.js

מתוך ויקיפדיה, האנציקלופדיה החופשית

הערה: לאחר הפרסום, ייתכן שיהיה צורך לנקות את זיכרון המטמון (cache) של הדפדפן כדי להבחין בשינויים.

  • פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload) או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
  • גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
  • אינטרנט אקספלורר / אדג': להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh) או ללחוץ על צירוף המקשים Ctrl-F5.
  • אופרה: ללחוץ על Ctrl-F5.
var i18n = {
	en: {
		'manAndWomanSelector': 'No selection for men/women (default)',
		'manSelector': 'Show men only',
		'womanSelector': 'Show women only'
	},
	he: {
		'manAndWomanSelector': 'ללא בחירה של גברים/נשים (ברירת מחדל)',
		'manSelector': 'הצגה של גברים בלבד',
		'womanSelector': 'הצגה של נשים בלבד'
	}
}
var i18nLocal = i18n[mw.config.get('wgUserLanguage')];

function addSexSelection() {
	var perScanBaseHref = 'https://petscan.wmflabs.org/?',
	baseParams = { 
		project:'wikipedia',
		language: mw.config.get('wgContentLanguage'),
		categories: mw.config.get('wgTitle'),
		interface_language: mw.config.get('wgUserLanguage'),
		doit: 1,
		add_defaultsort: 'on',
		sortby: 'defaultsort',
		'ns[0]': 1
	},
	categoryOrigContent = $('#mw-pages').html(),
	manParams = $.extend({wikidata_prop_item_use: 'Q6581097'}, baseParams),
	womanParams = $.extend({wikidata_prop_item_use: 'Q6581072', depth: 1 }, baseParams), // too common that women places in sub category hence depth
	sexSelector = $('<div><a id="manAndWomanSelector" href="#" title="'+i18nLocal['manAndWomanSelector']+'">ללא סינון</a> / <a id="manSelector" href="#" title="'+i18nLocal['manSelector']+'">גברים</a> / <a id="womanSelector" href="#" title="'+i18nLocal['womanSelector']+'">נשים</a></div>');
	$('#bodyContent').prepend(sexSelector);
	$('#manAndWomanSelector').css({border: '3px solid #000', padding: '3px'}).click(function(e){
		$('#manAndWomanSelector, #manSelector, #womanSelector').css({border: '', padding: ''});
		$('#manAndWomanSelector').css({border: '3px solid #000', padding: '3px'});
		$('#mw-pages').html(categoryOrigContent);
		e.preventDefault();
	});
	$('#manSelector').prop('href', perScanBaseHref+ $.param(manParams)).click(function(e){
		$.get(perScanBaseHref, $.extend({format:'json'},manParams)).done(function(d){
			if (!d['*'] || !d['*'][0] || !d['*'][0]['a'] || !d['*'][0]['a']['*'])
			{
				if (d['error']) {
					mw.notify('אירעה שגיאה בסינון התוצאות:' + d['error']);
				}
				else
				{
					mw.notify('אירעה שגיאה בסינון התוצאות');					
				}
				return;
			}
			loadCategoryData('', d['*'][0]['a']['*']);
			$('#manAndWomanSelector, #manSelector, #womanSelector').css({border: '', padding: ''});
			$('#manSelector').css({border: '3px solid #000', padding: '3px'});
		});
		e.preventDefault();
	});

	$('#womanSelector').prop('href', perScanBaseHref+ $.param(womanParams)).click(function(e){
		$.get(perScanBaseHref, $.extend({format:'json'},womanParams)).done(function(d){
			loadCategoryData('', d['*'][0]['a']['*']);
			$('#manAndWomanSelector, #manSelector, #womanSelector').css({border: '', padding: ''});
			$('#womanSelector').css({border: '3px solid #000', padding: '3px'});
		});
		e.preventDefault();
	});

	// pages usually have default sort, but sometimes not and then fallback to title
	function pageDefSort (p) { return p.metadata.defaultsort || p.title; }

	function addGroup(group, catPages) {
		if (group === null) return;
		var groupDiv = $('<div>', {'class': 'mw-category-group' });
		var groupTitle = $('<h3>').text(group.key[0]);
		var groupPages = $('<ul>').append($.map(group.pages, function(t){ return $('<li>').append($('<a>', {text: t.getNameText(), href: t.getUrl()}))[0] }));
		catPages.append(groupDiv.append(groupTitle).append(groupPages));
	}
	function loadCategoryData(title, data) {
		var catPages =  $('#mw-pages .mw-category');
		// small categories for columnList is not applicable
		if ( catPages.length == 0 ) {
			catPages = $('#mw-pages .mw-content-rtl');
		}
		catPages.html('');
		$('#mw-pages p').remove();
		var group = null;
		for(var i = 0; i < data.length; i++) {
			if (group == null || group.key != pageDefSort(data[i])[0]) {
				addGroup(group, catPages);
				group = { key: pageDefSort(data[i])[0], pages: [] };
			}
			group.pages.push(new mw.Title(data[i].title, data[i].namespace));
		}
		addGroup(group, catPages);
	}
}

if ( (mw.config.get('wgCanonicalNamespace') === 'Category') && (mw.config.get('wgAction') === 'view') ) {
	// show only for categories with P4224 that has Q5
	if (mw.config.get('wgWikibaseItemId')) {
		var wikidata = new mw.ForeignApi( 'https://www.wikidata.org/w/api.php' );
		wikidata.get({
			action: 'wbgetclaims',
			entity: mw.config.get('wgWikibaseItemId'),
			property: 'P4224',
		}).done(function(d){
			var isHumanCategory = (d.claims && d.claims.P4224 && d.claims.P4224 && d.claims.P4224.length && d.claims.P4224[0].mainsnak && d.claims.P4224[0].mainsnak.datavalue && d.claims.P4224[0].mainsnak.datavalue.value && d.claims.P4224[0].mainsnak.datavalue.value.id=='Q5');
			if (isHumanCategory) {
				addSexSelection();
			}
		});
	}
}