Utilisateur:Od1n/Gadget-StructuredCategories.js

Une page de Wikipédia, l'encyclopédie libre.
Note : après avoir enregistré la page, vous devrez forcer le rechargement complet du cache de votre navigateur pour voir les changements.

Mozilla / Firefox / Konqueror / Safari : maintenez la touche Majuscule (Shift) en cliquant sur le bouton Actualiser (Reload) ou pressez Maj-Ctrl-R (Cmd-R sur Apple Mac) ;

Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.
/*Note: This is not installed as a local gadget, but is referenced by other projects */
/*Primary Author/Maintainer: User:Csisc */
/*Description: [[:d:Wikidata:Structured Categories]] */
if ( mw.config.get( 'wgCanonicalNamespace' ) === 'Category' ) {
	( function () {
		var title = mw.config.get( 'wgPageName' );
		var lang = mw.config.get( 'wgContentLanguage' );
		var wiki = mw.config.get( 'wgServer' ).split( '//' )[ 1 ];
		var contentSub = document.querySelector( '#contentSub' );
		if ( !contentSub ) {
			return;
		}
		var desc = {
			'en': 'Structured Description',
			'fr': 'Description structurée',
			'ar': 'وصف منظم',
			'it': 'Descrizione strutturata',
			'de': 'Strukturierte Beschreibung',
			'es': 'Descripción estructurada',
			'pt': 'Descrição Estruturada',
			'mt': 'Deskrizzjoni Strutturata',
			'sv': 'Strukturerad beskrivning',
			'ja': '構造化された説明',
			'af': 'Gestruktureerde beskrywing',
			'sq': 'Përshkrimi i strukturuar',
			'am': 'የተዋቀረ መግለጫ',
			'hy': 'Կառուցվածքային նկարագրություն',
			'az': 'Strukturlaşdırılmış Təsvir',
			'eu': 'Deskribapen egituratua',
			'be': 'Структураванае апісанне',
			'nl': 'Gestructureerde beschrijving',
			'eo': 'Strukturita priskribo',
			'bn': 'কাঠামোবদ্ধ বিবরণ',
			'bs': 'Strukturirani opis',
			'bg': 'Структурирано описание',
			'ca': 'Descripció estructurada',
			'ceb': 'Ang istruktura nga paghulagway',
			'ny': 'Kufotokozera Kwabwino',
			'zh-classical': '結構化描述',
			'zh': '结构化描述',
			'co': 'Description strutturata',
			'hr': 'Strukturirani opis',
			'cs': 'Strukturovaný popis',
			'da': 'Struktureret beskrivelse',
			'et': 'Struktureeritud kirjeldus',
			'tl': 'Naayos na Paglalarawan',
			'fi': 'Jäsennelty kuvaus',
			'gl': 'Descrición estruturada',
			'ka': 'სტრუქტურირებული აღწერა',
			'el': 'Δομημένη περιγραφή',
			'gu': 'સ્ટ્રક્ચર્ડ વર્ણન',
			'ht': 'Deskripsyon estriktire',
			'ha': 'Tsararren Tsari',
			'haw': 'Wehewehe Kūlana',
			'he': 'תיאור מובנה',
			'hi': 'संरचित विवरण',
			'hu': 'Strukturált leírás',
			'is': 'Skipulögð lýsing',
			'ig': 'Nkọwapụta ahaziri',
			'id': 'Deskripsi Terstruktur',
			'ga': 'Tuairisc Struchtúrtha',
			'jv': 'Katrangan Struktur',
			'kn': 'ರಚನಾತ್ಮಕ ವಿವರಣೆ',
			'kk': 'Құрылымдық сипаттама',
			'km': 'ការពិពណ៌នារចនាសម្ព័ន្ធ',
			'rw': 'Ibisobanuro byubatswe',
			'ko': '구조화 된 설명',
			'ku': 'Danasîna pêkhatî',
			'ky': 'Структураланган сүрөттөмө',
			'lo': 'ລາຍລະອຽດທີ່ມີໂຄງສ້າງ',
			'lv': 'Strukturēts apraksts',
			'lt': 'Struktūrinis aprašymas',
			'lb': 'Strukturéiert Beschreiwung',
			'mk': 'Структурен опис',
			'mg': 'Famaritana voarindra',
			'ms': 'Huraian Berstruktur',
			'ml': 'ഘടനാപരമായ വിവരണം',
			'mi': 'Whakaahuatanga hanganga',
			'mr': 'संरचित वर्णन',
			'mn': 'Бүтцийн тодорхойлолт',
			'my': 'ဖွဲ့စည်းထားသောဖော်ပြချက်',
			'ne': 'संरचित विवरण',
			'no': 'Strukturert beskrivelse',
			'or': 'ସଂରଚନା ବର୍ଣ୍ଣନା |',
			'ps': 'جوړښت تشریح',
			'fa': 'توضیحات ساختاری',
			'pl': 'Opis strukturalny',
			'pa': 'ਸਟਰਕਚਰਡ ਵੇਰਵਾ',
			'ro': 'Descriere structurată',
			'ru': 'Структурированное описание',
			'sm': 'Faʻamatalaga faʻatulagaina',
			'sco': 'Tuairisgeul structaraichte',
			'sr': 'Структурирани опис',
			'st': 'Tlhaloso e hlophisitsoeng',
			'sn': 'Tsananguro yakarongeka',
			'sd': 'اڏيل وضاحت',
			'si': 'ව්‍යුහාත්මක විස්තරය',
			'sk': 'Štruktúrovaný popis',
			'sl': 'Strukturiran opis',
			'so': 'Sharaxaad qaabaysan',
			'su': 'Katerangan terstruktur',
			'sw': 'Maelezo yaliyopangwa',
			'tg': 'Тавсифи сохторӣ',
			'ta': 'கட்டமைக்கப்பட்ட விளக்கம்',
			'tt': 'Структур тасвирлау',
			'te': 'నిర్మాణాత్మక వివరణ',
			'th': 'คำอธิบายที่มีโครงสร้าง',
			'tr': 'Yapılandırılmış açıklama',
			'tk': 'Düzülen beýany',
			'uk': 'Структурований опис',
			'ur': 'ساختہ وضاحت',
			'ug': 'قۇرۇلمىلىق چۈشەندۈرۈش',
			'uz': 'Tuzilgan tavsif',
			'vi': 'Mô tả có cấu trúc',
			'cy': 'Disgrifiad strwythuredig',
			'xh': 'Inkcazo eyakhiwe kakuhle',
			'yi': 'סטראַקטשערד באַשרייַבונג',
			'yo': 'Apejuwe eleto',
			'zu': 'Incazelo ehlelekile',
			'nb': 'Strukturert beskrivelse',
			'nn': 'Strukturert skildring',
		};
		var container = document.querySelector( '.mw-category-generated' );
		var matches = container.querySelectorAll( 'li' );
		var max = matches.length;
		if ( max > 200 ) {
			max = 200;
		}
		var query = stringBuilder( [
			' SELECT ?property ?propertyLabel ?object ?objectLabel ((ROUND(1000 * ?count/' + max + ')/1000) AS ?prob) ',
			' WITH {                                                                                                  ',
			'     SELECT ?item1                                                                                       ',
			'     WHERE {                                                                                             ',
			'         SERVICE wikibase:mwapi {                                                                        ',
			'             bd:serviceParam wikibase:endpoint "' + wiki + '";                                           ',
			'                             wikibase:api "Generator";                                                   ',
			'                             mwapi:generator "categorymembers";                                          ',
			'                             mwapi:gcmtitle "' + title + '";.                                            ',
			'             ?item1 wikibase:apiOutputItem mwapi:item.                                                   ',
			'         }                                                                                               ',
			'         FILTER BOUND (?item1)                                                                           ',
			'     }                                                                                                   ',
			'     LIMIT 200                                                                                           ',
			' } AS %list1                                                                                             ',
			' WITH {                                                                                                  ',
			'     SELECT ?property ?propertyLabel ?object ?objectLabel (COUNT(*) AS ?count)                           ',
			'     WHERE {                                                                                             ',
			'         INCLUDE %list1.                                                                                 ',
			'         ?item1 ?prop ?object.                                                                           ',
			'         OPTIONAL {                                                                                      ',
			'             ?object rdfs:label ?objectLabel.                                                            ',
			'             FILTER(LANG(?objectLabel)="' + lang + '")                                                   ',
			'         }                                                                                               ',
			'         ?property wikibase:directClaim ?prop.                                                           ',
			'         OPTIONAL {                                                                                      ',
			'             ?property rdfs:label ?propertyLabel.                                                        ',
			'             FILTER(LANG(?propertyLabel)="' + lang + '")                                                 ',
			'         }                                                                                               ',
			'     }                                                                                                   ',
			'     GROUP BY ?property ?propertyLabel ?object ?objectLabel                                              ',
			'     ORDER BY DESC(?count)                                                                               ',
			'     LIMIT 6                                                                                             ',
			' } AS %list                                                                                              ',
			' WHERE {                                                                                                 ',
			'     INCLUDE %list.                                                                                      ',
			'     FILTER(?count > 3)                                                                                  ',
			' }                                                                                                       ',
			' ORDER BY DESC(?count)                                                                                   ',
		] );
		var link = document.createElement( 'a' );
		link.href = 'https://query.wikidata.org/embed.html#' + encodeURIComponent( query );
		link.textContent = desc[ lang ] || desc.en;
		var linkContainer = document.createElement( 'p' );
		linkContainer.appendChild( link )
		contentSub.appendChild( linkContainer );

		function stringBuilder( lines ) {
			var indent = 9999;
			lines.forEach( function ( line ) {
				var lineIndent = line.match( /^ */ )[ 0 ].length;
				indent = Math.min( indent, lineIndent );
			} );
			return lines.map( function ( line ) {
				return line.substring( indent ).replace( / +$/, '' );
			} ).join( '\n' );
		}
	}() );
}