מדיה ויקי: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){ 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(); } }); } }