<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://wikiromandie.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=AdrianoRutz</id>
	<title>Wikiromandie.org - Contributions [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://wikiromandie.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=AdrianoRutz"/>
	<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php/Sp%C3%A9cial:Contributions/AdrianoRutz"/>
	<updated>2026-10-23T05:33:21Z</updated>
	<subtitle>Contributions</subtitle>
	<generator>MediaWiki 1.45.6</generator>
	<entry>
		<id>https://wikiromandie.org/index.php?title=MediaWiki:Common.js&amp;diff=18716</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=MediaWiki:Common.js&amp;diff=18716"/>
		<updated>2026-10-22T10:42:11Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Tout JavaScript présent ici sera exécuté par tous les utilisateurs à chaque chargement de page. */&lt;br /&gt;
/**&lt;br /&gt;
 * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally&lt;br /&gt;
 * loaded for all users on every wiki page. If possible create a gadget that is&lt;br /&gt;
 * enabled by default instead of adding it here (since gadgets are fully&lt;br /&gt;
 * optimized ResourceLoader modules with possibility to add dependencies etc.)&lt;br /&gt;
 *&lt;br /&gt;
 * Since Common.js isn&#039;t a gadget, there is no place to declare its&lt;br /&gt;
 * dependencies, so we have to lazy load them with mw.loader.using on demand and&lt;br /&gt;
 * then execute the rest in the callback. In most cases these dependencies will&lt;br /&gt;
 * be loaded (or loading) already and the callback will not be delayed. In case a&lt;br /&gt;
 * dependency hasn&#039;t arrived yet it&#039;ll make sure those are loaded before this.&lt;br /&gt;
 */&lt;br /&gt;
/* global mw, $ */&lt;br /&gt;
/* jshint strict:false, browser:true */&lt;br /&gt;
&lt;br /&gt;
mw.loader.using( [ &#039;mediawiki.util&#039; ] ).then( function () {&lt;br /&gt;
    mw.log.deprecate( window, &#039;addPortletLink&#039;, mw.util.addPortletLink, &#039;Use mw.util.addPortletLink instead&#039; );&lt;br /&gt;
&lt;br /&gt;
    var extraCSS = mw.util.getParamValue( &#039;withCSS&#039; ),&lt;br /&gt;
        extraJS  = mw.util.getParamValue( &#039;withJS&#039; );&lt;br /&gt;
&lt;br /&gt;
    if ( extraCSS ) {&lt;br /&gt;
        if ( /^MediaWiki:[^&amp;amp;&amp;lt;&amp;gt;=%#]*\.css$/.test( extraCSS ) ) {&lt;br /&gt;
            mw.loader.load( &#039;/w/index.php?title=&#039; + encodeURIComponent( extraCSS ) + &#039;&amp;amp;action=raw&amp;amp;ctype=text/css&#039;, &#039;text/css&#039; );&lt;br /&gt;
        } else {&lt;br /&gt;
            mw.notify( &#039;Only pages from the MediaWiki namespace are allowed.&#039;, { title: &#039;Invalid withCSS value&#039; } );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( extraJS ) {&lt;br /&gt;
        if ( /^MediaWiki:[^&amp;amp;&amp;lt;&amp;gt;=%#]*\.js$/.test( extraJS ) ) {&lt;br /&gt;
            mw.loader.load( &#039;/w/index.php?title=&#039; + encodeURIComponent( extraJS ) + &#039;&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
        } else {&lt;br /&gt;
            mw.notify( &#039;Only pages from the MediaWiki namespace are allowed.&#039;, { title: &#039;Invalid withJS value&#039; } );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Collapsible tables&lt;br /&gt;
     */&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        var $tables = $content.find( &#039;table.collapsible:not(.mw-collapsible)&#039; );&lt;br /&gt;
        if ( !$tables.length ) { return; }&lt;br /&gt;
&lt;br /&gt;
        $tables.addClass( &#039;mw-collapsible&#039; ).each( function () {&lt;br /&gt;
            if ( $( this ).hasClass( &#039;collapsed&#039; ) ) {&lt;br /&gt;
                $( this ).addClass( &#039;mw-collapsed&#039; );&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        mw.loader.using( &#039;jquery.makeCollapsible&#039; ).then( function () {&lt;br /&gt;
            $tables.makeCollapsible();&lt;br /&gt;
        } );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    mw.hook( &#039;wikipage.collapsibleContent&#039; ).add( function ( $collapsibleContent ) {&lt;br /&gt;
        var autoCollapseThreshold = 2,&lt;br /&gt;
            hasOuter = $collapsibleContent.parents( &#039;.outercollapse&#039; ).length &amp;gt; 0;&lt;br /&gt;
&lt;br /&gt;
        $collapsibleContent.each( function () {&lt;br /&gt;
            var $element = $( this );&lt;br /&gt;
            if ( $element.hasClass( &#039;collapsible&#039; ) ) {&lt;br /&gt;
                $element.find( &#039;tr:first &amp;gt; th:first&#039; ).prepend( $element.find( &#039;tr:first &amp;gt; * &amp;gt; .mw-collapsible-toggle&#039; ) );&lt;br /&gt;
            }&lt;br /&gt;
            if ( $collapsibleContent.length &amp;gt;= autoCollapseThreshold &amp;amp;&amp;amp; $element.hasClass( &#039;autocollapse&#039; ) ) {&lt;br /&gt;
                $element.data( &#039;mw-collapsible&#039; ).collapse();&lt;br /&gt;
            } else if ( $element.hasClass( &#039;innercollapse&#039; ) &amp;amp;&amp;amp; hasOuter ) {&lt;br /&gt;
                $element.data( &#039;mw-collapsible&#039; ).collapse();&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            var $toggle = $element.find( &#039;.mw-collapsible-toggle&#039; );&lt;br /&gt;
            if ( $toggle.length &amp;amp;&amp;amp; $toggle.parent()[0].style.color ) {&lt;br /&gt;
                $toggle.css( &#039;color&#039;, &#039;inherit&#039; ).find( &#039;.mw-collapsible-text&#039; ).css( &#039;color&#039;, &#039;inherit&#039; );&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Force interwiki links to open in a new tab&lt;br /&gt;
     */&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        $content.find( &#039;a.extiw&#039; ).attr( &#039;target&#039;, &#039;_blank&#039; ).attr( &#039;rel&#039;, &#039;noopener noreferrer&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * High-Performance Wikidata SPARQL Table Engine&lt;br /&gt;
     */&lt;br /&gt;
    var WIKIDATA_PREFIX     = &#039;http://www.wikidata.org/entity/&#039;,&lt;br /&gt;
        WIKIDATA_HTTPS      = &#039;https://www.wikidata.org/entity/&#039;,&lt;br /&gt;
        COMMONS_MARKER      = &#039;Special:FilePath/&#039;,&lt;br /&gt;
        SPARQL_CACHE_TTL    = 2 * 60 * 1000,       // 2 mins: serve cached version without network request&lt;br /&gt;
        SPARQL_STALE_TTL    = 6 * 60 * 60 * 1000,  // 6 hours: serve stale instantly, revalidate in background&lt;br /&gt;
        SPARQL_TIMEOUT      = 30000,               // 30s timeout&lt;br /&gt;
        SPARQL_MAX_PARALLEL = 2,                   // Concurrency limit&lt;br /&gt;
        SPARQL_RETRY_MAX    = 2,&lt;br /&gt;
        SPARQL_RETRY_BASE   = 1000;&lt;br /&gt;
&lt;br /&gt;
    function escapeHtml( text ) {&lt;br /&gt;
        return String( text )&lt;br /&gt;
            .replace( /&amp;amp;/g, &#039;&amp;amp;amp;&#039; )&lt;br /&gt;
            .replace( /&amp;lt;/g, &#039;&amp;amp;lt;&#039; )&lt;br /&gt;
            .replace( /&amp;gt;/g, &#039;&amp;amp;gt;&#039; )&lt;br /&gt;
            .replace( /&amp;quot;/g, &#039;&amp;amp;quot;&#039; )&lt;br /&gt;
            .replace( /&#039;/g, &#039;&amp;amp;#39;&#039; );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function hashKey( str ) {&lt;br /&gt;
        var h = 0x811c9dc5;&lt;br /&gt;
        for ( var i = 0; i &amp;lt; str.length; i++ ) {&lt;br /&gt;
            h ^= str.charCodeAt( i );&lt;br /&gt;
            h = ( h * 0x01000193 ) &amp;gt;&amp;gt;&amp;gt; 0;&lt;br /&gt;
        }&lt;br /&gt;
        return h.toString( 36 );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var memoryCache = {};&lt;br /&gt;
&lt;br /&gt;
    function detectStore() {&lt;br /&gt;
        var stores = [ &#039;localStorage&#039;, &#039;sessionStorage&#039; ];&lt;br /&gt;
        for ( var i = 0; i &amp;lt; stores.length; i++ ) {&lt;br /&gt;
            try {&lt;br /&gt;
                var s = window[ stores[i] ];&lt;br /&gt;
                s.setItem( &#039;__wdsparql_test__&#039;, &#039;1&#039; );&lt;br /&gt;
                s.removeItem( &#039;__wdsparql_test__&#039; );&lt;br /&gt;
                return s;&lt;br /&gt;
            } catch ( e ) { /* try next */ }&lt;br /&gt;
        }&lt;br /&gt;
        return null;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var store = detectStore();&lt;br /&gt;
&lt;br /&gt;
    function getCachedRecord( sparql ) {&lt;br /&gt;
        var key = &#039;wdsparql:&#039; + hashKey( sparql );&lt;br /&gt;
        if ( store ) {&lt;br /&gt;
            try {&lt;br /&gt;
                var raw = store.getItem( key );&lt;br /&gt;
                if ( raw ) { return JSON.parse( raw ); }&lt;br /&gt;
            } catch ( e ) {}&lt;br /&gt;
        }&lt;br /&gt;
        return memoryCache[ key ] || null;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function setCachedRecord( sparql, data ) {&lt;br /&gt;
        var key = &#039;wdsparql:&#039; + hashKey( sparql ),&lt;br /&gt;
            entry = { ts: Date.now(), data: data };&lt;br /&gt;
        memoryCache[ key ] = entry;&lt;br /&gt;
        if ( store ) {&lt;br /&gt;
            try {&lt;br /&gt;
                store.setItem( key, JSON.stringify( entry ) );&lt;br /&gt;
            } catch ( e ) {&lt;br /&gt;
                try {&lt;br /&gt;
                    // Prune old keys on storage quota hit&lt;br /&gt;
                    for ( var i = store.length - 1; i &amp;gt;= 0; i-- ) {&lt;br /&gt;
                        var k = store.key( i );&lt;br /&gt;
                        if ( k &amp;amp;&amp;amp; k.indexOf( &#039;wdsparql:&#039; ) === 0 ) { store.removeItem( k ); }&lt;br /&gt;
                    }&lt;br /&gt;
                    store.setItem( key, JSON.stringify( entry ) );&lt;br /&gt;
                } catch ( e2 ) {}&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // --- Concurrent Request Queue&lt;br /&gt;
    var inFlight = {}, queue = [], active = 0;&lt;br /&gt;
&lt;br /&gt;
    function pump() {&lt;br /&gt;
        while ( active &amp;lt; SPARQL_MAX_PARALLEL &amp;amp;&amp;amp; queue.length ) {&lt;br /&gt;
            var job = queue.shift();&lt;br /&gt;
            active++;&lt;br /&gt;
            runNetworkQuery( job.sparql ).then(&lt;br /&gt;
                function ( data ) { active--; pump(); job.resolve( data ); },&lt;br /&gt;
                function ( err )  { active--; pump(); job.reject( err ); }&lt;br /&gt;
            );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function enqueue( sparql ) {&lt;br /&gt;
        var key = hashKey( sparql );&lt;br /&gt;
        if ( inFlight[ key ] ) { return inFlight[ key ]; }&lt;br /&gt;
        var p = new Promise( function ( resolve, reject ) {&lt;br /&gt;
            queue.push( { sparql: sparql, resolve: resolve, reject: reject } );&lt;br /&gt;
        } );&lt;br /&gt;
        var cleaned = p.then(&lt;br /&gt;
            function ( result ) { delete inFlight[ key ]; return result; },&lt;br /&gt;
            function ( err )    { delete inFlight[ key ]; throw err; }&lt;br /&gt;
        );&lt;br /&gt;
        inFlight[ key ] = cleaned;&lt;br /&gt;
        pump();&lt;br /&gt;
        return cleaned;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function runNetworkQuery( sparql, attempt ) {&lt;br /&gt;
        attempt = attempt || 0;&lt;br /&gt;
        var controller = ( typeof AbortController !== &#039;undefined&#039; ) ? new AbortController() : null,&lt;br /&gt;
            timer = controller ? setTimeout( function () { controller.abort(); }, SPARQL_TIMEOUT ) : null,&lt;br /&gt;
            fetchUrl = &#039;https://query.wikidata.org/sparql?format=json&amp;amp;query=&#039; + encodeURIComponent( sparql );&lt;br /&gt;
&lt;br /&gt;
        return fetch( fetchUrl, {&lt;br /&gt;
            headers: { Accept: &#039;application/sparql-results+json&#039; },&lt;br /&gt;
            signal: controller ? controller.signal : undefined&lt;br /&gt;
        } )&lt;br /&gt;
            .then( function ( r ) {&lt;br /&gt;
                if ( timer ) { clearTimeout( timer ); }&lt;br /&gt;
                if ( ( r.status === 429 || r.status === 503 ) &amp;amp;&amp;amp; attempt &amp;lt; SPARQL_RETRY_MAX ) {&lt;br /&gt;
                    var wait = SPARQL_RETRY_BASE * Math.pow( 2, attempt ),&lt;br /&gt;
                        retryAfter = r.headers.get( &#039;Retry-After&#039; );&lt;br /&gt;
                    if ( retryAfter &amp;amp;&amp;amp; !isNaN( +retryAfter ) ) { wait = ( +retryAfter ) * 1000; }&lt;br /&gt;
                    return new Promise( function ( resolve ) { setTimeout( resolve, wait ); } )&lt;br /&gt;
                        .then( function () { return runNetworkQuery( sparql, attempt + 1 ); } );&lt;br /&gt;
                }&lt;br /&gt;
                if ( !r.ok ) { throw new Error( &#039;HTTP &#039; + r.status ); }&lt;br /&gt;
                return r.json();&lt;br /&gt;
            } )&lt;br /&gt;
            .then( function ( data ) {&lt;br /&gt;
                setCachedRecord( sparql, data );&lt;br /&gt;
                return data;&lt;br /&gt;
            } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Direct upload.wikimedia.org thumbnail construction bypassing Special:FilePath redirects&lt;br /&gt;
    function commonsThumbUrl( value, width ) {&lt;br /&gt;
        var idx = value.indexOf( COMMONS_MARKER );&lt;br /&gt;
        if ( idx === -1 ) return value;&lt;br /&gt;
        var rawFilename = value.substring( idx + COMMONS_MARKER.length );&lt;br /&gt;
        return &#039;https://commons.wikimedia.org/wiki/Special:Redirect/file/&#039; + rawFilename + &#039;?width=&#039; + width;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function renderTable( data, title ) {&lt;br /&gt;
        var vars = data.head.vars,&lt;br /&gt;
            rows = data.results.bindings,&lt;br /&gt;
            vLen = vars.length,&lt;br /&gt;
            html = [];&lt;br /&gt;
&lt;br /&gt;
        if ( title ) {&lt;br /&gt;
            html.push( &#039;&amp;lt;h3&amp;gt;&#039;, escapeHtml( title ), &#039;&amp;lt;/h3&amp;gt;&#039; );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        html.push( &#039;&amp;lt;table class=&amp;quot;wikitable sortable&amp;quot;&amp;gt;&amp;lt;thead&amp;gt;&amp;lt;tr&amp;gt;&#039; );&lt;br /&gt;
        for ( var i = 0; i &amp;lt; vLen; i++ ) {&lt;br /&gt;
            html.push( &#039;&amp;lt;th&amp;gt;&#039;, escapeHtml( vars[i].replace( /_/g, &#039; &#039; ) ), &#039;&amp;lt;/th&amp;gt;&#039; );&lt;br /&gt;
        }&lt;br /&gt;
        html.push( &#039;&amp;lt;/tr&amp;gt;&amp;lt;/thead&amp;gt;&amp;lt;tbody&amp;gt;&#039; );&lt;br /&gt;
&lt;br /&gt;
        for ( var r = 0, rLen = rows.length; r &amp;lt; rLen; r++ ) {&lt;br /&gt;
            var row = rows[r];&lt;br /&gt;
            html.push( &#039;&amp;lt;tr&amp;gt;&#039; );&lt;br /&gt;
            for ( var c = 0; c &amp;lt; vLen; c++ ) {&lt;br /&gt;
                var v = vars[c],&lt;br /&gt;
                    val = row[v] ? row[v].value : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
                if ( val.indexOf( COMMONS_MARKER ) !== -1 ) {&lt;br /&gt;
                    // Optimized for clarity: requested 400px width with max-height 250px CSS styling&lt;br /&gt;
                    var thumb = commonsThumbUrl( val, 400 );&lt;br /&gt;
                    html.push(&lt;br /&gt;
                        &#039;&amp;lt;td&amp;gt;&amp;lt;img src=&amp;quot;&#039;, escapeHtml( thumb ), &#039;&amp;quot; style=&amp;quot;max-height:250px; height:auto; display:block; margin:0 auto;&amp;quot; alt=&amp;quot;&amp;quot; loading=&amp;quot;lazy&amp;quot; &#039;,&lt;br /&gt;
                        &#039;onerror=&amp;quot;this.onerror=null;this.replaceWith(document.createTextNode(\&#039;—\&#039;));&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
                    );&lt;br /&gt;
                } else if ( val.indexOf( WIKIDATA_PREFIX ) === 0 || val.indexOf( WIKIDATA_HTTPS ) === 0 ) {&lt;br /&gt;
                    var qid = val.substring( val.lastIndexOf( &#039;/&#039; ) + 1 );&lt;br /&gt;
                    html.push( &#039;&amp;lt;td&amp;gt;&amp;lt;a href=&amp;quot;https://www.wikidata.org/wiki/&#039;, qid, &#039;&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;&#039;, qid, &#039;&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&#039; );&lt;br /&gt;
                } else {&lt;br /&gt;
                    html.push( &#039;&amp;lt;td&amp;gt;&#039;, escapeHtml( val ), &#039;&amp;lt;/td&amp;gt;&#039; );&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            html.push( &#039;&amp;lt;/tr&amp;gt;&#039; );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        html.push( &#039;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&#039; );&lt;br /&gt;
        return html.join( &#039;&#039; );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function processTableElement( el ) {&lt;br /&gt;
        var sparql = el.getAttribute( &#039;data-sparql&#039; ),&lt;br /&gt;
            title  = el.getAttribute( &#039;data-title&#039; );&lt;br /&gt;
&lt;br /&gt;
        if ( !sparql ) { return Promise.resolve( null ); }&lt;br /&gt;
&lt;br /&gt;
        var record = getCachedRecord( sparql ),&lt;br /&gt;
            now = Date.now(),&lt;br /&gt;
            hasFreshCache = record &amp;amp;&amp;amp; ( now - record.ts &amp;lt;= SPARQL_CACHE_TTL ),&lt;br /&gt;
            hasStaleCache = record &amp;amp;&amp;amp; ( now - record.ts &amp;lt;= SPARQL_STALE_TTL );&lt;br /&gt;
&lt;br /&gt;
        // Scenario 1: Fresh cache available -&amp;gt; Render instantly with zero network requests&lt;br /&gt;
        if ( hasFreshCache ) {&lt;br /&gt;
            el.innerHTML = renderTable( record.data, title );&lt;br /&gt;
            return Promise.resolve( el );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Scenario 2: Stale cache available -&amp;gt; Render instantly, update in background (SWR)&lt;br /&gt;
        if ( hasStaleCache ) {&lt;br /&gt;
            el.innerHTML = renderTable( record.data, title );&lt;br /&gt;
            enqueue( sparql ).then( function ( freshData ) {&lt;br /&gt;
                // Silently update DOM if data has changed&lt;br /&gt;
                if ( JSON.stringify( freshData ) !== JSON.stringify( record.data ) ) {&lt;br /&gt;
                    el.innerHTML = renderTable( freshData, title );&lt;br /&gt;
                    mw.hook( &#039;wikipage.content&#039; ).fire( $( el ) );&lt;br /&gt;
                }&lt;br /&gt;
            } ).catch( function () { /* Keep stale data on error */ } );&lt;br /&gt;
            return Promise.resolve( el );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Scenario 3: No cache -&amp;gt; Show loading state and fetch&lt;br /&gt;
        el.textContent = &#039;⏳ Loading…&#039;;&lt;br /&gt;
        return enqueue( sparql )&lt;br /&gt;
            .then( function ( data ) {&lt;br /&gt;
                el.innerHTML = renderTable( data, title );&lt;br /&gt;
                return el;&lt;br /&gt;
            } )&lt;br /&gt;
            .catch( function ( err ) {&lt;br /&gt;
                el.textContent = ( err &amp;amp;&amp;amp; err.name === &#039;AbortError&#039; )&lt;br /&gt;
                    ? &#039;⚠️ Timed out loading data.&#039;&lt;br /&gt;
                    : &#039;⚠️ Failed to load (Wikidata may be busy).&#039;;&lt;br /&gt;
            } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        var contextNode = ( $content &amp;amp;&amp;amp; $content[0] ) ? $content[0] : document,&lt;br /&gt;
            tables = contextNode.querySelectorAll( &#039;.wikidata-sparql-table:not([data-loaded])&#039; );&lt;br /&gt;
&lt;br /&gt;
        if ( !tables.length ) { return; }&lt;br /&gt;
&lt;br /&gt;
        // Lazy-loading with IntersectionObserver (only load tables when near viewport)&lt;br /&gt;
        if ( &#039;IntersectionObserver&#039; in window ) {&lt;br /&gt;
            var observer = new IntersectionObserver( function ( entries, obs ) {&lt;br /&gt;
                entries.forEach( function ( entry ) {&lt;br /&gt;
                    if ( entry.isIntersecting ) {&lt;br /&gt;
                        var el = entry.target;&lt;br /&gt;
                        obs.unobserve( el );&lt;br /&gt;
                        if ( !el.getAttribute( &#039;data-loaded&#039; ) ) {&lt;br /&gt;
                            el.setAttribute( &#039;data-loaded&#039;, &#039;1&#039; );&lt;br /&gt;
                            processTableElement( el ).then( function ( renderedEl ) {&lt;br /&gt;
                                if ( renderedEl ) { mw.hook( &#039;wikipage.content&#039; ).fire( $( renderedEl ) ); }&lt;br /&gt;
                            } );&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                } );&lt;br /&gt;
            }, { rootMargin: &#039;300px 0px&#039; } );&lt;br /&gt;
&lt;br /&gt;
            tables.forEach( function ( el ) { observer.observe( el ); } );&lt;br /&gt;
        } else {&lt;br /&gt;
            // Fallback for older browsers&lt;br /&gt;
            var renderPromises = Array.prototype.map.call( tables, function ( el ) {&lt;br /&gt;
                el.setAttribute( &#039;data-loaded&#039;, &#039;1&#039; );&lt;br /&gt;
                return processTableElement( el );&lt;br /&gt;
            } );&lt;br /&gt;
&lt;br /&gt;
            Promise.all( renderPromises ).then( function ( renderedElements ) {&lt;br /&gt;
                var validElements = renderedElements.filter( Boolean );&lt;br /&gt;
                if ( validElements.length ) {&lt;br /&gt;
                    mw.hook( &#039;wikipage.content&#039; ).fire( $( validElements ) );&lt;br /&gt;
                }&lt;br /&gt;
            } );&lt;br /&gt;
        }&lt;br /&gt;
    } );&lt;br /&gt;
} );&lt;br /&gt;
/* DO NOT ADD CODE BELOW THIS LINE */&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=MediaWiki:Common.js&amp;diff=18712</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=MediaWiki:Common.js&amp;diff=18712"/>
		<updated>2026-10-22T09:28:37Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Tout JavaScript présent ici sera exécuté par tous les utilisateurs à chaque chargement de page. */&lt;br /&gt;
/**&lt;br /&gt;
 * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally&lt;br /&gt;
 * loaded for all users on every wiki page. If possible create a gadget that is&lt;br /&gt;
 * enabled by default instead of adding it here (since gadgets are fully&lt;br /&gt;
 * optimized ResourceLoader modules with possibility to add dependencies etc.)&lt;br /&gt;
 *&lt;br /&gt;
 * Since Common.js isn&#039;t a gadget, there is no place to declare its&lt;br /&gt;
 * dependencies, so we have to lazy load them with mw.loader.using on demand and&lt;br /&gt;
 * then execute the rest in the callback. In most cases these dependencies will&lt;br /&gt;
 * be loaded (or loading) already and the callback will not be delayed. In case a&lt;br /&gt;
 * dependency hasn&#039;t arrived yet it&#039;ll make sure those are loaded before this.&lt;br /&gt;
 */&lt;br /&gt;
/* global mw, $ */&lt;br /&gt;
/* jshint strict:false, browser:true */&lt;br /&gt;
&lt;br /&gt;
mw.loader.using( [ &#039;mediawiki.util&#039; ] ).then( function () {&lt;br /&gt;
    mw.log.deprecate( window, &#039;addPortletLink&#039;, mw.util.addPortletLink, &#039;Use mw.util.addPortletLink instead&#039; );&lt;br /&gt;
&lt;br /&gt;
    var extraCSS = mw.util.getParamValue( &#039;withCSS&#039; ),&lt;br /&gt;
        extraJS  = mw.util.getParamValue( &#039;withJS&#039; );&lt;br /&gt;
&lt;br /&gt;
    if ( extraCSS ) {&lt;br /&gt;
        if ( /^MediaWiki:[^&amp;amp;&amp;lt;&amp;gt;=%#]*\.css$/.test( extraCSS ) ) {&lt;br /&gt;
            mw.loader.load( &#039;/w/index.php?title=&#039; + encodeURIComponent( extraCSS ) + &#039;&amp;amp;action=raw&amp;amp;ctype=text/css&#039;, &#039;text/css&#039; );&lt;br /&gt;
        } else {&lt;br /&gt;
            mw.notify( &#039;Only pages from the MediaWiki namespace are allowed.&#039;, { title: &#039;Invalid withCSS value&#039; } );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( extraJS ) {&lt;br /&gt;
        if ( /^MediaWiki:[^&amp;amp;&amp;lt;&amp;gt;=%#]*\.js$/.test( extraJS ) ) {&lt;br /&gt;
            mw.loader.load( &#039;/w/index.php?title=&#039; + encodeURIComponent( extraJS ) + &#039;&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
        } else {&lt;br /&gt;
            mw.notify( &#039;Only pages from the MediaWiki namespace are allowed.&#039;, { title: &#039;Invalid withJS value&#039; } );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Collapsible tables&lt;br /&gt;
     */&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        var $tables = $content.find( &#039;table.collapsible:not(.mw-collapsible)&#039; );&lt;br /&gt;
        if ( !$tables.length ) { return; }&lt;br /&gt;
&lt;br /&gt;
        $tables.addClass( &#039;mw-collapsible&#039; ).each( function () {&lt;br /&gt;
            if ( $( this ).hasClass( &#039;collapsed&#039; ) ) {&lt;br /&gt;
                $( this ).addClass( &#039;mw-collapsed&#039; );&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        mw.loader.using( &#039;jquery.makeCollapsible&#039; ).then( function () {&lt;br /&gt;
            $tables.makeCollapsible();&lt;br /&gt;
        } );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    mw.hook( &#039;wikipage.collapsibleContent&#039; ).add( function ( $collapsibleContent ) {&lt;br /&gt;
        var autoCollapseThreshold = 2,&lt;br /&gt;
            hasOuter = $collapsibleContent.parents( &#039;.outercollapse&#039; ).length &amp;gt; 0;&lt;br /&gt;
&lt;br /&gt;
        $collapsibleContent.each( function () {&lt;br /&gt;
            var $element = $( this );&lt;br /&gt;
            if ( $element.hasClass( &#039;collapsible&#039; ) ) {&lt;br /&gt;
                $element.find( &#039;tr:first &amp;gt; th:first&#039; ).prepend( $element.find( &#039;tr:first &amp;gt; * &amp;gt; .mw-collapsible-toggle&#039; ) );&lt;br /&gt;
            }&lt;br /&gt;
            if ( $collapsibleContent.length &amp;gt;= autoCollapseThreshold &amp;amp;&amp;amp; $element.hasClass( &#039;autocollapse&#039; ) ) {&lt;br /&gt;
                $element.data( &#039;mw-collapsible&#039; ).collapse();&lt;br /&gt;
            } else if ( $element.hasClass( &#039;innercollapse&#039; ) &amp;amp;&amp;amp; hasOuter ) {&lt;br /&gt;
                $element.data( &#039;mw-collapsible&#039; ).collapse();&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            var $toggle = $element.find( &#039;.mw-collapsible-toggle&#039; );&lt;br /&gt;
            if ( $toggle.length &amp;amp;&amp;amp; $toggle.parent()[0].style.color ) {&lt;br /&gt;
                $toggle.css( &#039;color&#039;, &#039;inherit&#039; ).find( &#039;.mw-collapsible-text&#039; ).css( &#039;color&#039;, &#039;inherit&#039; );&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Force interwiki links to open in a new tab&lt;br /&gt;
     */&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        $content.find( &#039;a.extiw&#039; ).attr( &#039;target&#039;, &#039;_blank&#039; ).attr( &#039;rel&#039;, &#039;noopener noreferrer&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * High-Performance Wikidata SPARQL Table Engine&lt;br /&gt;
     */&lt;br /&gt;
    var WIKIDATA_PREFIX     = &#039;http://www.wikidata.org/entity/&#039;,&lt;br /&gt;
        WIKIDATA_HTTPS      = &#039;https://www.wikidata.org/entity/&#039;,&lt;br /&gt;
        COMMONS_MARKER      = &#039;Special:FilePath/&#039;,&lt;br /&gt;
        SPARQL_CACHE_TTL    = 2 * 60 * 1000,       // 2 mins: serve cached version without network request&lt;br /&gt;
        SPARQL_STALE_TTL    = 6 * 60 * 60 * 1000,  // 6 hours: serve stale instantly, revalidate in background&lt;br /&gt;
        SPARQL_TIMEOUT      = 30000,               // 30s timeout&lt;br /&gt;
        SPARQL_MAX_PARALLEL = 2,                   // Concurrency limit&lt;br /&gt;
        SPARQL_RETRY_MAX    = 2,&lt;br /&gt;
        SPARQL_RETRY_BASE   = 1000;&lt;br /&gt;
&lt;br /&gt;
    function escapeHtml( text ) {&lt;br /&gt;
        return String( text )&lt;br /&gt;
            .replace( /&amp;amp;/g, &#039;&amp;amp;amp;&#039; )&lt;br /&gt;
            .replace( /&amp;lt;/g, &#039;&amp;amp;lt;&#039; )&lt;br /&gt;
            .replace( /&amp;gt;/g, &#039;&amp;amp;gt;&#039; )&lt;br /&gt;
            .replace( /&amp;quot;/g, &#039;&amp;amp;quot;&#039; )&lt;br /&gt;
            .replace( /&#039;/g, &#039;&amp;amp;#39;&#039; );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function hashKey( str ) {&lt;br /&gt;
        var h = 0x811c9dc5;&lt;br /&gt;
        for ( var i = 0; i &amp;lt; str.length; i++ ) {&lt;br /&gt;
            h ^= str.charCodeAt( i );&lt;br /&gt;
            h = ( h * 0x01000193 ) &amp;gt;&amp;gt;&amp;gt; 0;&lt;br /&gt;
        }&lt;br /&gt;
        return h.toString( 36 );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var memoryCache = {};&lt;br /&gt;
&lt;br /&gt;
    function detectStore() {&lt;br /&gt;
        var stores = [ &#039;localStorage&#039;, &#039;sessionStorage&#039; ];&lt;br /&gt;
        for ( var i = 0; i &amp;lt; stores.length; i++ ) {&lt;br /&gt;
            try {&lt;br /&gt;
                var s = window[ stores[i] ];&lt;br /&gt;
                s.setItem( &#039;__wdsparql_test__&#039;, &#039;1&#039; );&lt;br /&gt;
                s.removeItem( &#039;__wdsparql_test__&#039; );&lt;br /&gt;
                return s;&lt;br /&gt;
            } catch ( e ) { /* try next */ }&lt;br /&gt;
        }&lt;br /&gt;
        return null;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var store = detectStore();&lt;br /&gt;
&lt;br /&gt;
    function getCachedRecord( sparql ) {&lt;br /&gt;
        var key = &#039;wdsparql:&#039; + hashKey( sparql );&lt;br /&gt;
        if ( store ) {&lt;br /&gt;
            try {&lt;br /&gt;
                var raw = store.getItem( key );&lt;br /&gt;
                if ( raw ) { return JSON.parse( raw ); }&lt;br /&gt;
            } catch ( e ) {}&lt;br /&gt;
        }&lt;br /&gt;
        return memoryCache[ key ] || null;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function setCachedRecord( sparql, data ) {&lt;br /&gt;
        var key = &#039;wdsparql:&#039; + hashKey( sparql ),&lt;br /&gt;
            entry = { ts: Date.now(), data: data };&lt;br /&gt;
        memoryCache[ key ] = entry;&lt;br /&gt;
        if ( store ) {&lt;br /&gt;
            try {&lt;br /&gt;
                store.setItem( key, JSON.stringify( entry ) );&lt;br /&gt;
            } catch ( e ) {&lt;br /&gt;
                try {&lt;br /&gt;
                    // Prune old keys on storage quota hit&lt;br /&gt;
                    for ( var i = store.length - 1; i &amp;gt;= 0; i-- ) {&lt;br /&gt;
                        var k = store.key( i );&lt;br /&gt;
                        if ( k &amp;amp;&amp;amp; k.indexOf( &#039;wdsparql:&#039; ) === 0 ) { store.removeItem( k ); }&lt;br /&gt;
                    }&lt;br /&gt;
                    store.setItem( key, JSON.stringify( entry ) );&lt;br /&gt;
                } catch ( e2 ) {}&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // --- Concurrent Request Queue&lt;br /&gt;
    var inFlight = {}, queue = [], active = 0;&lt;br /&gt;
&lt;br /&gt;
    function pump() {&lt;br /&gt;
        while ( active &amp;lt; SPARQL_MAX_PARALLEL &amp;amp;&amp;amp; queue.length ) {&lt;br /&gt;
            var job = queue.shift();&lt;br /&gt;
            active++;&lt;br /&gt;
            runNetworkQuery( job.sparql ).then(&lt;br /&gt;
                function ( data ) { active--; pump(); job.resolve( data ); },&lt;br /&gt;
                function ( err )  { active--; pump(); job.reject( err ); }&lt;br /&gt;
            );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function enqueue( sparql ) {&lt;br /&gt;
        var key = hashKey( sparql );&lt;br /&gt;
        if ( inFlight[ key ] ) { return inFlight[ key ]; }&lt;br /&gt;
        var p = new Promise( function ( resolve, reject ) {&lt;br /&gt;
            queue.push( { sparql: sparql, resolve: resolve, reject: reject } );&lt;br /&gt;
        } );&lt;br /&gt;
        var cleaned = p.then(&lt;br /&gt;
            function ( result ) { delete inFlight[ key ]; return result; },&lt;br /&gt;
            function ( err )    { delete inFlight[ key ]; throw err; }&lt;br /&gt;
        );&lt;br /&gt;
        inFlight[ key ] = cleaned;&lt;br /&gt;
        pump();&lt;br /&gt;
        return cleaned;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function runNetworkQuery( sparql, attempt ) {&lt;br /&gt;
        attempt = attempt || 0;&lt;br /&gt;
        var controller = ( typeof AbortController !== &#039;undefined&#039; ) ? new AbortController() : null,&lt;br /&gt;
            timer = controller ? setTimeout( function () { controller.abort(); }, SPARQL_TIMEOUT ) : null,&lt;br /&gt;
            fetchUrl = &#039;https://query.wikidata.org/sparql?format=json&amp;amp;query=&#039; + encodeURIComponent( sparql );&lt;br /&gt;
&lt;br /&gt;
        return fetch( fetchUrl, {&lt;br /&gt;
            headers: { Accept: &#039;application/sparql-results+json&#039; },&lt;br /&gt;
            signal: controller ? controller.signal : undefined&lt;br /&gt;
        } )&lt;br /&gt;
            .then( function ( r ) {&lt;br /&gt;
                if ( timer ) { clearTimeout( timer ); }&lt;br /&gt;
                if ( ( r.status === 429 || r.status === 503 ) &amp;amp;&amp;amp; attempt &amp;lt; SPARQL_RETRY_MAX ) {&lt;br /&gt;
                    var wait = SPARQL_RETRY_BASE * Math.pow( 2, attempt ),&lt;br /&gt;
                        retryAfter = r.headers.get( &#039;Retry-After&#039; );&lt;br /&gt;
                    if ( retryAfter &amp;amp;&amp;amp; !isNaN( +retryAfter ) ) { wait = ( +retryAfter ) * 1000; }&lt;br /&gt;
                    return new Promise( function ( resolve ) { setTimeout( resolve, wait ); } )&lt;br /&gt;
                        .then( function () { return runNetworkQuery( sparql, attempt + 1 ); } );&lt;br /&gt;
                }&lt;br /&gt;
                if ( !r.ok ) { throw new Error( &#039;HTTP &#039; + r.status ); }&lt;br /&gt;
                return r.json();&lt;br /&gt;
            } )&lt;br /&gt;
            .then( function ( data ) {&lt;br /&gt;
                setCachedRecord( sparql, data );&lt;br /&gt;
                return data;&lt;br /&gt;
            } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Direct upload.wikimedia.org thumbnail construction bypassing Special:FilePath redirects&lt;br /&gt;
    function commonsThumbUrl( value, width ) {&lt;br /&gt;
        var idx = value.indexOf( COMMONS_MARKER );&lt;br /&gt;
        if ( idx === -1 ) return value;&lt;br /&gt;
        var rawFilename = value.substring( idx + COMMONS_MARKER.length );&lt;br /&gt;
        return &#039;https://commons.wikimedia.org/wiki/Special:Redirect/file/&#039; + rawFilename + &#039;?width=&#039; + width;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function renderTable( data, title ) {&lt;br /&gt;
        var vars = data.head.vars,&lt;br /&gt;
            rows = data.results.bindings,&lt;br /&gt;
            vLen = vars.length,&lt;br /&gt;
            html = [];&lt;br /&gt;
&lt;br /&gt;
        if ( title ) {&lt;br /&gt;
            html.push( &#039;&amp;lt;h3&amp;gt;&#039;, escapeHtml( title ), &#039;&amp;lt;/h3&amp;gt;&#039; );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        html.push( &#039;&amp;lt;table class=&amp;quot;wikitable sortable&amp;quot;&amp;gt;&amp;lt;thead&amp;gt;&amp;lt;tr&amp;gt;&#039; );&lt;br /&gt;
        for ( var i = 0; i &amp;lt; vLen; i++ ) {&lt;br /&gt;
            html.push( &#039;&amp;lt;th&amp;gt;&#039;, escapeHtml( vars[i].replace( /_/g, &#039; &#039; ) ), &#039;&amp;lt;/th&amp;gt;&#039; );&lt;br /&gt;
        }&lt;br /&gt;
        html.push( &#039;&amp;lt;/tr&amp;gt;&amp;lt;/thead&amp;gt;&amp;lt;tbody&amp;gt;&#039; );&lt;br /&gt;
&lt;br /&gt;
        for ( var r = 0, rLen = rows.length; r &amp;lt; rLen; r++ ) {&lt;br /&gt;
            var row = rows[r];&lt;br /&gt;
            html.push( &#039;&amp;lt;tr&amp;gt;&#039; );&lt;br /&gt;
            for ( var c = 0; c &amp;lt; vLen; c++ ) {&lt;br /&gt;
                var v = vars[c],&lt;br /&gt;
                    val = row[v] ? row[v].value : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
                if ( val.indexOf( COMMONS_MARKER ) !== -1 ) {&lt;br /&gt;
                    // Request 300px width thumbnail with max-height 200px CSS constraint&lt;br /&gt;
                    var thumb = commonsThumbUrl( val, 300 );&lt;br /&gt;
                    html.push(&lt;br /&gt;
                        &#039;&amp;lt;td&amp;gt;&amp;lt;img src=&amp;quot;&#039;, escapeHtml( thumb ), &#039;&amp;quot; style=&amp;quot;max-height:200px; height:auto; display:block; margin:0 auto;&amp;quot; alt=&amp;quot;&amp;quot; loading=&amp;quot;lazy&amp;quot; &#039;,&lt;br /&gt;
                        &#039;onerror=&amp;quot;this.onerror=null;this.replaceWith(document.createTextNode(\&#039;—\&#039;));&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
                    );&lt;br /&gt;
                } else if ( val.indexOf( WIKIDATA_PREFIX ) === 0 || val.indexOf( WIKIDATA_HTTPS ) === 0 ) {&lt;br /&gt;
                    var qid = val.substring( val.lastIndexOf( &#039;/&#039; ) + 1 );&lt;br /&gt;
                    html.push( &#039;&amp;lt;td&amp;gt;&amp;lt;a href=&amp;quot;https://www.wikidata.org/wiki/&#039;, qid, &#039;&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;&#039;, qid, &#039;&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&#039; );&lt;br /&gt;
                } else {&lt;br /&gt;
                    html.push( &#039;&amp;lt;td&amp;gt;&#039;, escapeHtml( val ), &#039;&amp;lt;/td&amp;gt;&#039; );&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            html.push( &#039;&amp;lt;/tr&amp;gt;&#039; );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        html.push( &#039;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&#039; );&lt;br /&gt;
        return html.join( &#039;&#039; );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function processTableElement( el ) {&lt;br /&gt;
        var sparql = el.getAttribute( &#039;data-sparql&#039; ),&lt;br /&gt;
            title  = el.getAttribute( &#039;data-title&#039; );&lt;br /&gt;
&lt;br /&gt;
        if ( !sparql ) { return Promise.resolve( null ); }&lt;br /&gt;
&lt;br /&gt;
        var record = getCachedRecord( sparql ),&lt;br /&gt;
            now = Date.now(),&lt;br /&gt;
            hasFreshCache = record &amp;amp;&amp;amp; ( now - record.ts &amp;lt;= SPARQL_CACHE_TTL ),&lt;br /&gt;
            hasStaleCache = record &amp;amp;&amp;amp; ( now - record.ts &amp;lt;= SPARQL_STALE_TTL );&lt;br /&gt;
&lt;br /&gt;
        // Scenario 1: Fresh cache available -&amp;gt; Render instantly with zero network requests&lt;br /&gt;
        if ( hasFreshCache ) {&lt;br /&gt;
            el.innerHTML = renderTable( record.data, title );&lt;br /&gt;
            return Promise.resolve( el );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Scenario 2: Stale cache available -&amp;gt; Render instantly, update in background (SWR)&lt;br /&gt;
        if ( hasStaleCache ) {&lt;br /&gt;
            el.innerHTML = renderTable( record.data, title );&lt;br /&gt;
            enqueue( sparql ).then( function ( freshData ) {&lt;br /&gt;
                // Silently update DOM if data has changed&lt;br /&gt;
                if ( JSON.stringify( freshData ) !== JSON.stringify( record.data ) ) {&lt;br /&gt;
                    el.innerHTML = renderTable( freshData, title );&lt;br /&gt;
                    mw.hook( &#039;wikipage.content&#039; ).fire( $( el ) );&lt;br /&gt;
                }&lt;br /&gt;
            } ).catch( function () { /* Keep stale data on error */ } );&lt;br /&gt;
            return Promise.resolve( el );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Scenario 3: No cache -&amp;gt; Show loading state and fetch&lt;br /&gt;
        el.textContent = &#039;⏳ Loading…&#039;;&lt;br /&gt;
        return enqueue( sparql )&lt;br /&gt;
            .then( function ( data ) {&lt;br /&gt;
                el.innerHTML = renderTable( data, title );&lt;br /&gt;
                return el;&lt;br /&gt;
            } )&lt;br /&gt;
            .catch( function ( err ) {&lt;br /&gt;
                el.textContent = ( err &amp;amp;&amp;amp; err.name === &#039;AbortError&#039; )&lt;br /&gt;
                    ? &#039;⚠️ Timed out loading data.&#039;&lt;br /&gt;
                    : &#039;⚠️ Failed to load (Wikidata may be busy).&#039;;&lt;br /&gt;
            } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        var contextNode = ( $content &amp;amp;&amp;amp; $content[0] ) ? $content[0] : document,&lt;br /&gt;
            tables = contextNode.querySelectorAll( &#039;.wikidata-sparql-table:not([data-loaded])&#039; );&lt;br /&gt;
&lt;br /&gt;
        if ( !tables.length ) { return; }&lt;br /&gt;
&lt;br /&gt;
        // Lazy-loading with IntersectionObserver (only load tables when near viewport)&lt;br /&gt;
        if ( &#039;IntersectionObserver&#039; in window ) {&lt;br /&gt;
            var observer = new IntersectionObserver( function ( entries, obs ) {&lt;br /&gt;
                entries.forEach( function ( entry ) {&lt;br /&gt;
                    if ( entry.isIntersecting ) {&lt;br /&gt;
                        var el = entry.target;&lt;br /&gt;
                        obs.unobserve( el );&lt;br /&gt;
                        if ( !el.getAttribute( &#039;data-loaded&#039; ) ) {&lt;br /&gt;
                            el.setAttribute( &#039;data-loaded&#039;, &#039;1&#039; );&lt;br /&gt;
                            processTableElement( el ).then( function ( renderedEl ) {&lt;br /&gt;
                                if ( renderedEl ) { mw.hook( &#039;wikipage.content&#039; ).fire( $( renderedEl ) ); }&lt;br /&gt;
                            } );&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                } );&lt;br /&gt;
            }, { rootMargin: &#039;300px 0px&#039; } );&lt;br /&gt;
&lt;br /&gt;
            tables.forEach( function ( el ) { observer.observe( el ); } );&lt;br /&gt;
        } else {&lt;br /&gt;
            // Fallback for older browsers&lt;br /&gt;
            var renderPromises = Array.prototype.map.call( tables, function ( el ) {&lt;br /&gt;
                el.setAttribute( &#039;data-loaded&#039;, &#039;1&#039; );&lt;br /&gt;
                return processTableElement( el );&lt;br /&gt;
            } );&lt;br /&gt;
&lt;br /&gt;
            Promise.all( renderPromises ).then( function ( renderedElements ) {&lt;br /&gt;
                var validElements = renderedElements.filter( Boolean );&lt;br /&gt;
                if ( validElements.length ) {&lt;br /&gt;
                    mw.hook( &#039;wikipage.content&#039; ).fire( $( validElements ) );&lt;br /&gt;
                }&lt;br /&gt;
            } );&lt;br /&gt;
        }&lt;br /&gt;
    } );&lt;br /&gt;
} );&lt;br /&gt;
/* DO NOT ADD CODE BELOW THIS LINE */&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=MediaWiki:Common.js&amp;diff=18631</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=MediaWiki:Common.js&amp;diff=18631"/>
		<updated>2026-09-21T12:58:01Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Tout JavaScript présent ici sera exécuté par tous les utilisateurs à chaque chargement de page. */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally&lt;br /&gt;
 * loaded for all users on every wiki page. If possible create a gadget that is&lt;br /&gt;
 * enabled by default instead of adding it here (since gadgets are fully&lt;br /&gt;
 * optimized ResourceLoader modules with possibility to add dependencies etc.)&lt;br /&gt;
 *&lt;br /&gt;
 * Since Common.js isn&#039;t a gadget, there is no place to declare its&lt;br /&gt;
 * dependencies, so we have to lazy load them with mw.loader.using on demand and&lt;br /&gt;
 * then execute the rest in the callback. In most cases these dependencies will&lt;br /&gt;
 * be loaded (or loading) already and the callback will not be delayed. In case a&lt;br /&gt;
 * dependency hasn&#039;t arrived yet it&#039;ll make sure those are loaded before this.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* global mw, $ */&lt;br /&gt;
/* jshint strict:false, browser:true */&lt;br /&gt;
&lt;br /&gt;
mw.loader.using( [ &#039;mediawiki.util&#039; ] ).then( function () {&lt;br /&gt;
&lt;br /&gt;
    mw.log.deprecate( window, &#039;addPortletLink&#039;, mw.util.addPortletLink, &#039;Use mw.util.addPortletLink instead&#039; );&lt;br /&gt;
&lt;br /&gt;
    var extraCSS = mw.util.getParamValue( &#039;withCSS&#039; ),&lt;br /&gt;
        extraJS  = mw.util.getParamValue( &#039;withJS&#039; );&lt;br /&gt;
&lt;br /&gt;
    if ( extraCSS ) {&lt;br /&gt;
        if ( /^MediaWiki:[^&amp;amp;&amp;lt;&amp;gt;=%#]*\.css$/.test( extraCSS ) ) {&lt;br /&gt;
            mw.loader.load( &#039;/w/index.php?title=&#039; + encodeURIComponent( extraCSS ) + &#039;&amp;amp;action=raw&amp;amp;ctype=text/css&#039;, &#039;text/css&#039; );&lt;br /&gt;
        } else {&lt;br /&gt;
            mw.notify( &#039;Only pages from the MediaWiki namespace are allowed.&#039;, { title: &#039;Invalid withCSS value&#039; } );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( extraJS ) {&lt;br /&gt;
        if ( /^MediaWiki:[^&amp;amp;&amp;lt;&amp;gt;=%#]*\.js$/.test( extraJS ) ) {&lt;br /&gt;
            mw.loader.load( &#039;/w/index.php?title=&#039; + encodeURIComponent( extraJS ) + &#039;&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
        } else {&lt;br /&gt;
            mw.notify( &#039;Only pages from the MediaWiki namespace are allowed.&#039;, { title: &#039;Invalid withJS value&#039; } );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Collapsible tables&lt;br /&gt;
     */&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        var $tables = $content.find( &#039;table.collapsible:not(.mw-collapsible)&#039; );&lt;br /&gt;
        if ( !$tables.length ) { return; }&lt;br /&gt;
&lt;br /&gt;
        $tables.addClass( &#039;mw-collapsible&#039; ).each( function () {&lt;br /&gt;
            if ( $( this ).hasClass( &#039;collapsed&#039; ) ) {&lt;br /&gt;
                $( this ).addClass( &#039;mw-collapsed&#039; );&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        mw.loader.using( &#039;jquery.makeCollapsible&#039; ).then( function () {&lt;br /&gt;
            $tables.makeCollapsible();&lt;br /&gt;
        } );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    mw.hook( &#039;wikipage.collapsibleContent&#039; ).add( function ( $collapsibleContent ) {&lt;br /&gt;
        var autoCollapseThreshold = 2,&lt;br /&gt;
            hasOuter = $collapsibleContent.parents( &#039;.outercollapse&#039; ).length &amp;gt; 0;&lt;br /&gt;
&lt;br /&gt;
        $collapsibleContent.each( function () {&lt;br /&gt;
            var $element = $( this );&lt;br /&gt;
&lt;br /&gt;
            if ( $element.hasClass( &#039;collapsible&#039; ) ) {&lt;br /&gt;
                $element.find( &#039;tr:first &amp;gt; th:first&#039; ).prepend( $element.find( &#039;tr:first &amp;gt; * &amp;gt; .mw-collapsible-toggle&#039; ) );&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            if ( $collapsibleContent.length &amp;gt;= autoCollapseThreshold &amp;amp;&amp;amp; $element.hasClass( &#039;autocollapse&#039; ) ) {&lt;br /&gt;
                $element.data( &#039;mw-collapsible&#039; ).collapse();&lt;br /&gt;
            } else if ( $element.hasClass( &#039;innercollapse&#039; ) &amp;amp;&amp;amp; hasOuter ) {&lt;br /&gt;
                $element.data( &#039;mw-collapsible&#039; ).collapse();&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            var $toggle = $element.find( &#039;.mw-collapsible-toggle&#039; );&lt;br /&gt;
            if ( $toggle.length &amp;amp;&amp;amp; $toggle.parent()[0].style.color ) {&lt;br /&gt;
                $toggle.css( &#039;color&#039;, &#039;inherit&#039; ).find( &#039;.mw-collapsible-text&#039; ).css( &#039;color&#039;, &#039;inherit&#039; );&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Force interwiki links to open in a new tab&lt;br /&gt;
     */&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        $content.find( &#039;a.extiw&#039; ).attr( &#039;target&#039;, &#039;_blank&#039; ).attr( &#039;rel&#039;, &#039;noopener noreferrer&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * High-Performance Wikidata SPARQL Table Engine&lt;br /&gt;
     */&lt;br /&gt;
    var WIKIDATA_PREFIX     = &#039;http://www.wikidata.org/entity/&#039;,&lt;br /&gt;
        WIKIDATA_HTTPS      = &#039;https://www.wikidata.org/entity/&#039;,&lt;br /&gt;
        COMMONS_MARKER      = &#039;Special:FilePath/&#039;,&lt;br /&gt;
        SPARQL_CACHE_TTL    = 2 * 60 * 1000,       // 2 mins: serve cached version without network request&lt;br /&gt;
        SPARQL_STALE_TTL    = 6 * 60 * 60 * 1000,  // 6 hours: serve stale instantly, revalidate in background&lt;br /&gt;
        SPARQL_TIMEOUT      = 30000,               // 30s timeout&lt;br /&gt;
        SPARQL_MAX_PARALLEL = 2,                   // Concurrency limit&lt;br /&gt;
        SPARQL_RETRY_MAX    = 2,&lt;br /&gt;
        SPARQL_RETRY_BASE   = 1000;&lt;br /&gt;
&lt;br /&gt;
    function escapeHtml( text ) {&lt;br /&gt;
        return String( text )&lt;br /&gt;
            .replace( /&amp;amp;/g, &#039;&amp;amp;amp;&#039; )&lt;br /&gt;
            .replace( /&amp;lt;/g, &#039;&amp;amp;lt;&#039; )&lt;br /&gt;
            .replace( /&amp;gt;/g, &#039;&amp;amp;gt;&#039; )&lt;br /&gt;
            .replace( /&amp;quot;/g, &#039;&amp;amp;quot;&#039; )&lt;br /&gt;
            .replace( /&#039;/g, &#039;&amp;amp;#39;&#039; );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function hashKey( str ) {&lt;br /&gt;
        var h = 0x811c9dc5;&lt;br /&gt;
        for ( var i = 0; i &amp;lt; str.length; i++ ) {&lt;br /&gt;
            h ^= str.charCodeAt( i );&lt;br /&gt;
            h = ( h * 0x01000193 ) &amp;gt;&amp;gt;&amp;gt; 0;&lt;br /&gt;
        }&lt;br /&gt;
        return h.toString( 36 );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var memoryCache = {};&lt;br /&gt;
&lt;br /&gt;
    function detectStore() {&lt;br /&gt;
        var stores = [ &#039;localStorage&#039;, &#039;sessionStorage&#039; ];&lt;br /&gt;
        for ( var i = 0; i &amp;lt; stores.length; i++ ) {&lt;br /&gt;
            try {&lt;br /&gt;
                var s = window[ stores[i] ];&lt;br /&gt;
                s.setItem( &#039;__wdsparql_test__&#039;, &#039;1&#039; );&lt;br /&gt;
                s.removeItem( &#039;__wdsparql_test__&#039; );&lt;br /&gt;
                return s;&lt;br /&gt;
            } catch ( e ) { /* try next */ }&lt;br /&gt;
        }&lt;br /&gt;
        return null;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var store = detectStore();&lt;br /&gt;
&lt;br /&gt;
    function getCachedRecord( sparql ) {&lt;br /&gt;
        var key = &#039;wdsparql:&#039; + hashKey( sparql );&lt;br /&gt;
        if ( store ) {&lt;br /&gt;
            try {&lt;br /&gt;
                var raw = store.getItem( key );&lt;br /&gt;
                if ( raw ) { return JSON.parse( raw ); }&lt;br /&gt;
            } catch ( e ) {}&lt;br /&gt;
        }&lt;br /&gt;
        return memoryCache[ key ] || null;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function setCachedRecord( sparql, data ) {&lt;br /&gt;
        var key = &#039;wdsparql:&#039; + hashKey( sparql ),&lt;br /&gt;
            entry = { ts: Date.now(), data: data };&lt;br /&gt;
&lt;br /&gt;
        memoryCache[ key ] = entry;&lt;br /&gt;
&lt;br /&gt;
        if ( store ) {&lt;br /&gt;
            try {&lt;br /&gt;
                store.setItem( key, JSON.stringify( entry ) );&lt;br /&gt;
            } catch ( e ) {&lt;br /&gt;
                try {&lt;br /&gt;
                    // Prune old keys on storage quota hit&lt;br /&gt;
                    for ( var i = store.length - 1; i &amp;gt;= 0; i-- ) {&lt;br /&gt;
                        var k = store.key( i );&lt;br /&gt;
                        if ( k &amp;amp;&amp;amp; k.indexOf( &#039;wdsparql:&#039; ) === 0 ) { store.removeItem( k ); }&lt;br /&gt;
                    }&lt;br /&gt;
                    store.setItem( key, JSON.stringify( entry ) );&lt;br /&gt;
                } catch ( e2 ) {}&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // --- Concurrent Request Queue&lt;br /&gt;
    var inFlight = {}, queue = [], active = 0;&lt;br /&gt;
&lt;br /&gt;
    function pump() {&lt;br /&gt;
        while ( active &amp;lt; SPARQL_MAX_PARALLEL &amp;amp;&amp;amp; queue.length ) {&lt;br /&gt;
            var job = queue.shift();&lt;br /&gt;
            active++;&lt;br /&gt;
            runNetworkQuery( job.sparql ).then(&lt;br /&gt;
                function ( data ) { active--; pump(); job.resolve( data ); },&lt;br /&gt;
                function ( err )  { active--; pump(); job.reject( err ); }&lt;br /&gt;
            );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function enqueue( sparql ) {&lt;br /&gt;
        var key = hashKey( sparql );&lt;br /&gt;
        if ( inFlight[ key ] ) { return inFlight[ key ]; }&lt;br /&gt;
&lt;br /&gt;
        var p = new Promise( function ( resolve, reject ) {&lt;br /&gt;
            queue.push( { sparql: sparql, resolve: resolve, reject: reject } );&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        var cleaned = p.then(&lt;br /&gt;
            function ( result ) { delete inFlight[ key ]; return result; },&lt;br /&gt;
            function ( err )    { delete inFlight[ key ]; throw err; }&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
        inFlight[ key ] = cleaned;&lt;br /&gt;
        pump();&lt;br /&gt;
        return cleaned;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function runNetworkQuery( sparql, attempt ) {&lt;br /&gt;
        attempt = attempt || 0;&lt;br /&gt;
        var controller = ( typeof AbortController !== &#039;undefined&#039; ) ? new AbortController() : null,&lt;br /&gt;
            timer = controller ? setTimeout( function () { controller.abort(); }, SPARQL_TIMEOUT ) : null,&lt;br /&gt;
            fetchUrl = &#039;https://query.wikidata.org/sparql?format=json&amp;amp;query=&#039; + encodeURIComponent( sparql );&lt;br /&gt;
&lt;br /&gt;
        return fetch( fetchUrl, {&lt;br /&gt;
            headers: { Accept: &#039;application/sparql-results+json&#039; },&lt;br /&gt;
            signal: controller ? controller.signal : undefined&lt;br /&gt;
        } )&lt;br /&gt;
            .then( function ( r ) {&lt;br /&gt;
                if ( timer ) { clearTimeout( timer ); }&lt;br /&gt;
&lt;br /&gt;
                if ( ( r.status === 429 || r.status === 503 ) &amp;amp;&amp;amp; attempt &amp;lt; SPARQL_RETRY_MAX ) {&lt;br /&gt;
                    var wait = SPARQL_RETRY_BASE * Math.pow( 2, attempt ),&lt;br /&gt;
                        retryAfter = r.headers.get( &#039;Retry-After&#039; );&lt;br /&gt;
                    if ( retryAfter &amp;amp;&amp;amp; !isNaN( +retryAfter ) ) { wait = ( +retryAfter ) * 1000; }&lt;br /&gt;
                    return new Promise( function ( resolve ) { setTimeout( resolve, wait ); } )&lt;br /&gt;
                        .then( function () { return runNetworkQuery( sparql, attempt + 1 ); } );&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                if ( !r.ok ) { throw new Error( &#039;HTTP &#039; + r.status ); }&lt;br /&gt;
                return r.json();&lt;br /&gt;
            } )&lt;br /&gt;
            .then( function ( data ) {&lt;br /&gt;
                setCachedRecord( sparql, data );&lt;br /&gt;
                return data;&lt;br /&gt;
            } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Direct upload.wikimedia.org thumbnail construction bypassing Special:FilePath redirects&lt;br /&gt;
    function commonsThumbUrl( value, width ) {&lt;br /&gt;
    var idx = value.indexOf( COMMONS_MARKER );&lt;br /&gt;
    if ( idx === -1 ) return value;&lt;br /&gt;
&lt;br /&gt;
    var rawFilename = value.substring( idx + COMMONS_MARKER.length );&lt;br /&gt;
    return &#039;https://commons.wikimedia.org/wiki/Special:Redirect/file/&#039; + rawFilename + &#039;?width=&#039; + width;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
    function renderTable( data, title ) {&lt;br /&gt;
        var vars = data.head.vars,&lt;br /&gt;
            rows = data.results.bindings,&lt;br /&gt;
            vLen = vars.length,&lt;br /&gt;
            html = [];&lt;br /&gt;
&lt;br /&gt;
        if ( title ) {&lt;br /&gt;
            html.push( &#039;&amp;lt;h3&amp;gt;&#039;, escapeHtml( title ), &#039;&amp;lt;/h3&amp;gt;&#039; );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        html.push( &#039;&amp;lt;table class=&amp;quot;wikitable sortable&amp;quot;&amp;gt;&amp;lt;thead&amp;gt;&amp;lt;tr&amp;gt;&#039; );&lt;br /&gt;
        for ( var i = 0; i &amp;lt; vLen; i++ ) {&lt;br /&gt;
            html.push( &#039;&amp;lt;th&amp;gt;&#039;, escapeHtml( vars[i].replace( /_/g, &#039; &#039; ) ), &#039;&amp;lt;/th&amp;gt;&#039; );&lt;br /&gt;
        }&lt;br /&gt;
        html.push( &#039;&amp;lt;/tr&amp;gt;&amp;lt;/thead&amp;gt;&amp;lt;tbody&amp;gt;&#039; );&lt;br /&gt;
&lt;br /&gt;
        for ( var r = 0, rLen = rows.length; r &amp;lt; rLen; r++ ) {&lt;br /&gt;
            var row = rows[r];&lt;br /&gt;
            html.push( &#039;&amp;lt;tr&amp;gt;&#039; );&lt;br /&gt;
            for ( var c = 0; c &amp;lt; vLen; c++ ) {&lt;br /&gt;
                var v = vars[c],&lt;br /&gt;
                    val = row[v] ? row[v].value : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
                if ( val.indexOf( COMMONS_MARKER ) !== -1 ) {&lt;br /&gt;
                    var thumb = commonsThumbUrl( val, 100 );&lt;br /&gt;
                    html.push(&lt;br /&gt;
                        &#039;&amp;lt;td&amp;gt;&amp;lt;img src=&amp;quot;&#039;, escapeHtml( thumb ), &#039;&amp;quot; style=&amp;quot;max-height:80px;&amp;quot; alt=&amp;quot;&amp;quot; loading=&amp;quot;lazy&amp;quot; &#039;,&lt;br /&gt;
                        &#039;onerror=&amp;quot;this.onerror=null;this.replaceWith(document.createTextNode(\&#039;—\&#039;));&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
                    );&lt;br /&gt;
                } else if ( val.indexOf( WIKIDATA_PREFIX ) === 0 || val.indexOf( WIKIDATA_HTTPS ) === 0 ) {&lt;br /&gt;
                    var qid = val.substring( val.lastIndexOf( &#039;/&#039; ) + 1 );&lt;br /&gt;
                    html.push( &#039;&amp;lt;td&amp;gt;&amp;lt;a href=&amp;quot;https://www.wikidata.org/wiki/&#039;, qid, &#039;&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;&#039;, qid, &#039;&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&#039; );&lt;br /&gt;
                } else {&lt;br /&gt;
                    html.push( &#039;&amp;lt;td&amp;gt;&#039;, escapeHtml( val ), &#039;&amp;lt;/td&amp;gt;&#039; );&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            html.push( &#039;&amp;lt;/tr&amp;gt;&#039; );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        html.push( &#039;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&#039; );&lt;br /&gt;
        return html.join( &#039;&#039; );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function processTableElement( el ) {&lt;br /&gt;
        var sparql = el.getAttribute( &#039;data-sparql&#039; ),&lt;br /&gt;
            title  = el.getAttribute( &#039;data-title&#039; );&lt;br /&gt;
&lt;br /&gt;
        if ( !sparql ) { return Promise.resolve( null ); }&lt;br /&gt;
&lt;br /&gt;
        var record = getCachedRecord( sparql ),&lt;br /&gt;
            now = Date.now(),&lt;br /&gt;
            hasFreshCache = record &amp;amp;&amp;amp; ( now - record.ts &amp;lt;= SPARQL_CACHE_TTL ),&lt;br /&gt;
            hasStaleCache = record &amp;amp;&amp;amp; ( now - record.ts &amp;lt;= SPARQL_STALE_TTL );&lt;br /&gt;
&lt;br /&gt;
        // Scenario 1: Fresh cache available -&amp;gt; Render instantly with zero network requests&lt;br /&gt;
        if ( hasFreshCache ) {&lt;br /&gt;
            el.innerHTML = renderTable( record.data, title );&lt;br /&gt;
            return Promise.resolve( el );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Scenario 2: Stale cache available -&amp;gt; Render instantly, update in background (SWR)&lt;br /&gt;
        if ( hasStaleCache ) {&lt;br /&gt;
            el.innerHTML = renderTable( record.data, title );&lt;br /&gt;
            enqueue( sparql ).then( function ( freshData ) {&lt;br /&gt;
                // Silently update DOM if data has changed&lt;br /&gt;
                if ( JSON.stringify( freshData ) !== JSON.stringify( record.data ) ) {&lt;br /&gt;
                    el.innerHTML = renderTable( freshData, title );&lt;br /&gt;
                    mw.hook( &#039;wikipage.content&#039; ).fire( $( el ) );&lt;br /&gt;
                }&lt;br /&gt;
            } ).catch( function () { /* Keep stale data on error */ } );&lt;br /&gt;
            return Promise.resolve( el );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Scenario 3: No cache -&amp;gt; Show loading state and fetch&lt;br /&gt;
        el.textContent = &#039;⏳ Loading…&#039;;&lt;br /&gt;
        return enqueue( sparql )&lt;br /&gt;
            .then( function ( data ) {&lt;br /&gt;
                el.innerHTML = renderTable( data, title );&lt;br /&gt;
                return el;&lt;br /&gt;
            } )&lt;br /&gt;
            .catch( function ( err ) {&lt;br /&gt;
                el.textContent = ( err &amp;amp;&amp;amp; err.name === &#039;AbortError&#039; )&lt;br /&gt;
                    ? &#039;⚠️ Timed out loading data.&#039;&lt;br /&gt;
                    : &#039;⚠️ Failed to load (Wikidata may be busy).&#039;;&lt;br /&gt;
            } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        var contextNode = ( $content &amp;amp;&amp;amp; $content[0] ) ? $content[0] : document,&lt;br /&gt;
            tables = contextNode.querySelectorAll( &#039;.wikidata-sparql-table:not([data-loaded])&#039; );&lt;br /&gt;
&lt;br /&gt;
        if ( !tables.length ) { return; }&lt;br /&gt;
&lt;br /&gt;
        var tablesToProcess = [];&lt;br /&gt;
&lt;br /&gt;
        // Lazy-loading with IntersectionObserver (only load tables when near viewport)&lt;br /&gt;
        if ( &#039;IntersectionObserver&#039; in window ) {&lt;br /&gt;
            var observer = new IntersectionObserver( function ( entries, obs ) {&lt;br /&gt;
                entries.forEach( function ( entry ) {&lt;br /&gt;
                    if ( entry.isIntersecting ) {&lt;br /&gt;
                        var el = entry.target;&lt;br /&gt;
                        obs.unobserve( el );&lt;br /&gt;
                        if ( !el.getAttribute( &#039;data-loaded&#039; ) ) {&lt;br /&gt;
                            el.setAttribute( &#039;data-loaded&#039;, &#039;1&#039; );&lt;br /&gt;
                            processTableElement( el ).then( function ( renderedEl ) {&lt;br /&gt;
                                if ( renderedEl ) { mw.hook( &#039;wikipage.content&#039; ).fire( $( renderedEl ) ); }&lt;br /&gt;
                            } );&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                } );&lt;br /&gt;
            }, { rootMargin: &#039;300px 0px&#039; } );&lt;br /&gt;
&lt;br /&gt;
            tables.forEach( function ( el ) { observer.observe( el ); } );&lt;br /&gt;
        } else {&lt;br /&gt;
            // Fallback for older browsers&lt;br /&gt;
            var renderPromises = Array.prototype.map.call( tables, function ( el ) {&lt;br /&gt;
                el.setAttribute( &#039;data-loaded&#039;, &#039;1&#039; );&lt;br /&gt;
                return processTableElement( el );&lt;br /&gt;
            } );&lt;br /&gt;
&lt;br /&gt;
            Promise.all( renderPromises ).then( function ( renderedElements ) {&lt;br /&gt;
                var validElements = renderedElements.filter( Boolean );&lt;br /&gt;
                if ( validElements.length ) {&lt;br /&gt;
                    mw.hook( &#039;wikipage.content&#039; ).fire( $( validElements ) );&lt;br /&gt;
                }&lt;br /&gt;
            } );&lt;br /&gt;
        }&lt;br /&gt;
    } );&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
/* DO NOT ADD CODE BELOW THIS LINE */&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=MediaWiki:Common.js&amp;diff=18630</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=MediaWiki:Common.js&amp;diff=18630"/>
		<updated>2026-09-21T12:55:18Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : Annulation des modifications 18629 de AdrianoRutz (discussion)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Tout JavaScript présent ici sera exécuté par tous les utilisateurs à chaque chargement de page. */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally&lt;br /&gt;
 * loaded for all users on every wiki page. If possible create a gadget that is&lt;br /&gt;
 * enabled by default instead of adding it here (since gadgets are fully&lt;br /&gt;
 * optimized ResourceLoader modules with possibility to add dependencies etc.)&lt;br /&gt;
 *&lt;br /&gt;
 * Since Common.js isn&#039;t a gadget, there is no place to declare its&lt;br /&gt;
 * dependencies, so we have to lazy load them with mw.loader.using on demand and&lt;br /&gt;
 * then execute the rest in the callback. In most cases these dependencies will&lt;br /&gt;
 * be loaded (or loading) already and the callback will not be delayed. In case a&lt;br /&gt;
 * dependency hasn&#039;t arrived yet it&#039;ll make sure those are loaded before this.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* global mw, $ */&lt;br /&gt;
/* jshint strict:false, browser:true */&lt;br /&gt;
&lt;br /&gt;
mw.loader.using( [ &#039;mediawiki.util&#039; ] ).then( function () {&lt;br /&gt;
&lt;br /&gt;
    mw.log.deprecate( window, &#039;addPortletLink&#039;, mw.util.addPortletLink, &#039;Use mw.util.addPortletLink instead&#039; );&lt;br /&gt;
&lt;br /&gt;
    var extraCSS = mw.util.getParamValue( &#039;withCSS&#039; ),&lt;br /&gt;
        extraJS  = mw.util.getParamValue( &#039;withJS&#039; );&lt;br /&gt;
&lt;br /&gt;
    if ( extraCSS ) {&lt;br /&gt;
        if ( /^MediaWiki:[^&amp;amp;&amp;lt;&amp;gt;=%#]*\.css$/.test( extraCSS ) ) {&lt;br /&gt;
            mw.loader.load( &#039;/w/index.php?title=&#039; + encodeURIComponent( extraCSS ) + &#039;&amp;amp;action=raw&amp;amp;ctype=text/css&#039;, &#039;text/css&#039; );&lt;br /&gt;
        } else {&lt;br /&gt;
            mw.notify( &#039;Only pages from the MediaWiki namespace are allowed.&#039;, { title: &#039;Invalid withCSS value&#039; } );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( extraJS ) {&lt;br /&gt;
        if ( /^MediaWiki:[^&amp;amp;&amp;lt;&amp;gt;=%#]*\.js$/.test( extraJS ) ) {&lt;br /&gt;
            mw.loader.load( &#039;/w/index.php?title=&#039; + encodeURIComponent( extraJS ) + &#039;&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
        } else {&lt;br /&gt;
            mw.notify( &#039;Only pages from the MediaWiki namespace are allowed.&#039;, { title: &#039;Invalid withJS value&#039; } );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Collapsible tables&lt;br /&gt;
     */&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        var $tables = $content.find( &#039;table.collapsible:not(.mw-collapsible)&#039; );&lt;br /&gt;
        if ( !$tables.length ) { return; }&lt;br /&gt;
&lt;br /&gt;
        $tables.addClass( &#039;mw-collapsible&#039; ).each( function () {&lt;br /&gt;
            if ( $( this ).hasClass( &#039;collapsed&#039; ) ) {&lt;br /&gt;
                $( this ).addClass( &#039;mw-collapsed&#039; );&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        mw.loader.using( &#039;jquery.makeCollapsible&#039; ).then( function () {&lt;br /&gt;
            $tables.makeCollapsible();&lt;br /&gt;
        } );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    mw.hook( &#039;wikipage.collapsibleContent&#039; ).add( function ( $collapsibleContent ) {&lt;br /&gt;
        var autoCollapseThreshold = 2,&lt;br /&gt;
            hasOuter = $collapsibleContent.parents( &#039;.outercollapse&#039; ).length &amp;gt; 0;&lt;br /&gt;
&lt;br /&gt;
        $collapsibleContent.each( function () {&lt;br /&gt;
            var $element = $( this );&lt;br /&gt;
&lt;br /&gt;
            if ( $element.hasClass( &#039;collapsible&#039; ) ) {&lt;br /&gt;
                $element.find( &#039;tr:first &amp;gt; th:first&#039; ).prepend( $element.find( &#039;tr:first &amp;gt; * &amp;gt; .mw-collapsible-toggle&#039; ) );&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            if ( $collapsibleContent.length &amp;gt;= autoCollapseThreshold &amp;amp;&amp;amp; $element.hasClass( &#039;autocollapse&#039; ) ) {&lt;br /&gt;
                $element.data( &#039;mw-collapsible&#039; ).collapse();&lt;br /&gt;
            } else if ( $element.hasClass( &#039;innercollapse&#039; ) &amp;amp;&amp;amp; hasOuter ) {&lt;br /&gt;
                $element.data( &#039;mw-collapsible&#039; ).collapse();&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            var $toggle = $element.find( &#039;.mw-collapsible-toggle&#039; );&lt;br /&gt;
            if ( $toggle.length &amp;amp;&amp;amp; $toggle.parent()[0].style.color ) {&lt;br /&gt;
                $toggle.css( &#039;color&#039;, &#039;inherit&#039; ).find( &#039;.mw-collapsible-text&#039; ).css( &#039;color&#039;, &#039;inherit&#039; );&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Force interwiki links to open in a new tab&lt;br /&gt;
     */&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        $content.find( &#039;a.extiw&#039; ).attr( &#039;target&#039;, &#039;_blank&#039; ).attr( &#039;rel&#039;, &#039;noopener noreferrer&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * High-Performance Wikidata SPARQL Table Engine&lt;br /&gt;
     */&lt;br /&gt;
    var WIKIDATA_PREFIX     = &#039;http://www.wikidata.org/entity/&#039;,&lt;br /&gt;
        WIKIDATA_HTTPS      = &#039;https://www.wikidata.org/entity/&#039;,&lt;br /&gt;
        COMMONS_MARKER      = &#039;Special:FilePath/&#039;,&lt;br /&gt;
        SPARQL_CACHE_TTL    = 2 * 60 * 1000,       // 2 mins: serve cached version without network request&lt;br /&gt;
        SPARQL_STALE_TTL    = 6 * 60 * 60 * 1000,  // 6 hours: serve stale instantly, revalidate in background&lt;br /&gt;
        SPARQL_TIMEOUT      = 30000,               // 30s timeout&lt;br /&gt;
        SPARQL_MAX_PARALLEL = 2,                   // Concurrency limit&lt;br /&gt;
        SPARQL_RETRY_MAX    = 2,&lt;br /&gt;
        SPARQL_RETRY_BASE   = 1000;&lt;br /&gt;
&lt;br /&gt;
    function escapeHtml( text ) {&lt;br /&gt;
        return String( text )&lt;br /&gt;
            .replace( /&amp;amp;/g, &#039;&amp;amp;amp;&#039; )&lt;br /&gt;
            .replace( /&amp;lt;/g, &#039;&amp;amp;lt;&#039; )&lt;br /&gt;
            .replace( /&amp;gt;/g, &#039;&amp;amp;gt;&#039; )&lt;br /&gt;
            .replace( /&amp;quot;/g, &#039;&amp;amp;quot;&#039; )&lt;br /&gt;
            .replace( /&#039;/g, &#039;&amp;amp;#39;&#039; );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function hashKey( str ) {&lt;br /&gt;
        var h = 0x811c9dc5;&lt;br /&gt;
        for ( var i = 0; i &amp;lt; str.length; i++ ) {&lt;br /&gt;
            h ^= str.charCodeAt( i );&lt;br /&gt;
            h = ( h * 0x01000193 ) &amp;gt;&amp;gt;&amp;gt; 0;&lt;br /&gt;
        }&lt;br /&gt;
        return h.toString( 36 );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* Fast MD5 implementation for converting Commons filenames directly to upload.wikimedia.org static URLs */&lt;br /&gt;
    function md5( string ) {&lt;br /&gt;
        function rotateLeft( lValue, iShiftBits ) {&lt;br /&gt;
            return ( lValue &amp;lt;&amp;lt; iShiftBits ) | ( lValue &amp;gt;&amp;gt;&amp;gt; ( 32 - iShiftBits ) );&lt;br /&gt;
        }&lt;br /&gt;
        function addUnsigned( lX, lY ) {&lt;br /&gt;
            var lX4, lY4, lX8, lY8, lResult;&lt;br /&gt;
            lX8 = ( lX &amp;amp; 0x80000000 );&lt;br /&gt;
            lY8 = ( lY &amp;amp; 0x80000000 );&lt;br /&gt;
            lX4 = ( lX &amp;amp; 0x40000000 );&lt;br /&gt;
            lY4 = ( lY &amp;amp; 0x40000000 );&lt;br /&gt;
            lResult = ( lX &amp;amp; 0x3FFFFFFF ) + ( lY &amp;amp; 0x3FFFFFFF );&lt;br /&gt;
            if ( lX4 &amp;amp; lY4 ) return ( lResult ^ 0x80000000 ^ lX8 ^ lY8 );&lt;br /&gt;
            if ( lX4 | lY4 ) {&lt;br /&gt;
                if ( lResult &amp;amp; 0x40000000 ) return ( lResult ^ 0xC0000000 ^ lX8 ^ lY8 );&lt;br /&gt;
                else return ( lResult ^ 0x40000000 ^ lX8 ^ lY8 );&lt;br /&gt;
            } else return ( lResult ^ lX8 ^ lY8 );&lt;br /&gt;
        }&lt;br /&gt;
        function F(x,y,z) { return (x &amp;amp; y) | ((~x) &amp;amp; z); }&lt;br /&gt;
        function G(x,y,z) { return (x &amp;amp; z) | (y &amp;amp; (~z)); }&lt;br /&gt;
        function H(x,y,z) { return (x ^ y ^ z); }&lt;br /&gt;
        function I(x,y,z) { return (y ^ (x | (~z))); }&lt;br /&gt;
        function FF(a,b,c,d,x,s,ac) {&lt;br /&gt;
            a = addUnsigned(a, addUnsigned(addUnsigned(F(b, c, d), x), ac));&lt;br /&gt;
            return addUnsigned(rotateLeft(a, s), b);&lt;br /&gt;
        }&lt;br /&gt;
        function GG(a,b,c,d,x,s,ac) {&lt;br /&gt;
            a = addUnsigned(a, addUnsigned(addUnsigned(G(b, c, d), x), ac));&lt;br /&gt;
            return addUnsigned(rotateLeft(a, s), b);&lt;br /&gt;
        }&lt;br /&gt;
        function HH(a,b,c,d,x,s,ac) {&lt;br /&gt;
            a = addUnsigned(a, addUnsigned(addUnsigned(H(b, c, d), x), ac));&lt;br /&gt;
            return addUnsigned(rotateLeft(a, s), b);&lt;br /&gt;
        }&lt;br /&gt;
        function II(a,b,c,d,x,s,ac) {&lt;br /&gt;
            a = addUnsigned(a, addUnsigned(addUnsigned(I(b, c, d), x), ac));&lt;br /&gt;
            return addUnsigned(rotateLeft(a, s), b);&lt;br /&gt;
        }&lt;br /&gt;
        function convertToWordArray(string) {&lt;br /&gt;
            var lWordCount;&lt;br /&gt;
            var lMessageLength = string.length;&lt;br /&gt;
            var lNumberOfWords_temp1 = lMessageLength + 8;&lt;br /&gt;
            var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64)) / 64;&lt;br /&gt;
            var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16;&lt;br /&gt;
            var lWordArray = Array(lNumberOfWords - 1);&lt;br /&gt;
            var lBytePosition = 0;&lt;br /&gt;
            var lByteCount = 0;&lt;br /&gt;
            while (lByteCount &amp;lt; lMessageLength) {&lt;br /&gt;
                lWordCount = (lByteCount - (lByteCount % 4)) / 4;&lt;br /&gt;
                lBytePosition = (lByteCount % 4) * 8;&lt;br /&gt;
                lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount) &amp;lt;&amp;lt; lBytePosition));&lt;br /&gt;
                lByteCount++;&lt;br /&gt;
            }&lt;br /&gt;
            lWordCount = (lByteCount - (lByteCount % 4)) / 4;&lt;br /&gt;
            lBytePosition = (lByteCount % 4) * 8;&lt;br /&gt;
            lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 &amp;lt;&amp;lt; lBytePosition);&lt;br /&gt;
            lWordArray[lNumberOfWords - 2] = lMessageLength &amp;lt;&amp;lt; 3;&lt;br /&gt;
            lWordArray[lNumberOfWords - 1] = lMessageLength &amp;gt;&amp;gt;&amp;gt; 29;&lt;br /&gt;
            return lWordArray;&lt;br /&gt;
        }&lt;br /&gt;
        function wordToHex(lValue) {&lt;br /&gt;
            var WordToHexValue = &amp;quot;&amp;quot;, WordToHexValue_temp = &amp;quot;&amp;quot;, lByte, lCount;&lt;br /&gt;
            for (lCount = 0; lCount &amp;lt;= 3; lCount++) {&lt;br /&gt;
                lByte = (lValue &amp;gt;&amp;gt;&amp;gt; (lCount * 8)) &amp;amp; 255;&lt;br /&gt;
                WordToHexValue_temp = &amp;quot;0&amp;quot; + lByte.toString(16);&lt;br /&gt;
                WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length - 2, 2);&lt;br /&gt;
            }&lt;br /&gt;
            return WordToHexValue;&lt;br /&gt;
        }&lt;br /&gt;
        var x = Array();&lt;br /&gt;
        var k, AA, BB, CC, DD, a, b, c, d;&lt;br /&gt;
        var S11=7, S12=12, S13=17, S14=22;&lt;br /&gt;
        var S21=5, S22=9 , S23=14, S24=20;&lt;br /&gt;
        var S31=4, S32=11, S33=16, S34=23;&lt;br /&gt;
        var S41=6, S42=10, S43=15, S44=21;&lt;br /&gt;
        var utf8Str = unescape(encodeURIComponent(string));&lt;br /&gt;
        x = convertToWordArray(utf8Str);&lt;br /&gt;
        a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;&lt;br /&gt;
        for (k = 0; k &amp;lt; x.length; k += 16) {&lt;br /&gt;
            AA = a; BB = b; CC = c; DD = d;&lt;br /&gt;
            a = FF(a,b,c,d,x[k+0], S11,0xD76AA478); d = FF(d,a,b,c,x[k+1], S12,0xE8C7B756);&lt;br /&gt;
            c = FF(c,d,a,b,x[k+2], S13,0x242070DB); b = FF(b,c,d,a,x[k+3], S14,0xC1BDCEEE);&lt;br /&gt;
            a = FF(a,b,c,d,x[k+4], S11,0xF57C0FAF); d = FF(d,a,b,c,x[k+5], S12,0x4787C62A);&lt;br /&gt;
            c = FF(c,d,a,b,x[k+6], S13,0xA8304613); b = FF(b,c,d,a,x[k+7], S14,0xFD469501);&lt;br /&gt;
            a = FF(a,b,c,d,x[k+8], S11,0x698098D8); d = FF(d,a,b,c,x[k+9], S12,0x8B44F7AF);&lt;br /&gt;
            c = FF(c,d,a,b,x[k+10],S13,0xFFFF5BB1); b = FF(b,c,d,a,x[k+11],S14,0x895CD7BE);&lt;br /&gt;
            a = FF(a,b,c,d,x[k+12],S11,0x6B901122); d = FF(d,a,b,c,x[k+13],S12,0xFD987193);&lt;br /&gt;
            c = FF(c,d,a,b,x[k+14],S13,0xA679438E); b = FF(b,c,d,a,x[k+15],S14,0x49B40821);&lt;br /&gt;
            a = GG(a,b,c,d,x[k+1], S21,0xF61E2562); d = GG(d,a,b,c,x[k+6], S22,0xC040B340);&lt;br /&gt;
            c = GG(c,d,a,b,x[k+11],S23,0x265E5A51); b = GG(b,c,d,a,x[k+0], S24,0xE9B6C7AA);&lt;br /&gt;
            a = GG(a,b,c,d,x[k+5], S21,0xD62F105D); d = GG(d,a,b,c,x[k+10],S22,0x02441453);&lt;br /&gt;
            c = GG(c,d,a,b,x[k+15],S23,0xD8A1E681); b = GG(b,c,d,a,x[k+4], S24,0xE7D3FBC8);&lt;br /&gt;
            a = GG(a,b,c,d,x[k+9], S21,0x21E1CDE6); d = GG(d,a,b,c,x[k+14],S22,0xC33707D6);&lt;br /&gt;
            c = GG(c,d,a,b,x[k+3], S23,0xF4D50D87); b = GG(b,c,d,a,x[k+8], S24,0x455A14ED);&lt;br /&gt;
            a = GG(a,b,c,d,x[k+13],S21,0xA9E3E905); d = GG(d,a,b,c,x[k+2], S22,0xFCEFA3F8);&lt;br /&gt;
            c = GG(c,d,a,b,x[k+7], S23,0x676F02D9); b = GG(b,c,d,a,x[k+12],S24,0x8D2A4C8A);&lt;br /&gt;
            a = HH(a,b,c,d,x[k+5], S31,0xFFFA3942); d = HH(d,a,b,c,x[k+8], S32,0x8771F681);&lt;br /&gt;
            c = HH(c,d,a,b,x[k+11],S33,0x6D9D6122); b = HH(b,c,d,a,x[k+14],S34,0xFDE5380C);&lt;br /&gt;
            a = HH(a,b,c,d,x[k+1], S31,0xA4BEEA44); d = HH(d,a,b,c,x[k+4], S32,0x4BDECFA9);&lt;br /&gt;
            c = HH(c,d,a,b,x[k+7], S33,0xF6BB4B60); b = HH(b,c,d,a,x[k+10],S34,0xBEBFBC70);&lt;br /&gt;
            a = HH(a,b,c,d,x[k+13],S31,0x289B7EC6); d = HH(d,a,b,c,x[k+0], S32,0xEAA127FA);&lt;br /&gt;
            c = HH(c,d,a,b,x[k+3], S33,0xD4EF3085); b = HH(b,c,d,a,x[k+6], S34,0x04881D05);&lt;br /&gt;
            a = HH(a,b,c,d,x[k+9], S31,0xD9D4D039); d = HH(d,a,b,c,x[k+12],S32,0xE6DB99E5);&lt;br /&gt;
            c = HH(c,d,a,b,x[k+15],S33,0x1FA27CF8); b = HH(b,c,d,a,x[k+2], S34,0xC4AC5665);&lt;br /&gt;
            a = II(a,b,c,d,x[k+0], S41,0xF4292244); d = II(d,a,b,c,x[k+7], S42,0x432AFF97);&lt;br /&gt;
            c = II(c,d,a,b,x[k+14],S43,0xAB9423A7); b = II(b,c,d,a,x[k+5], S44,0xFC93A039);&lt;br /&gt;
            a = II(a,b,c,d,x[k+12],S41,0x655B59C3); d = II(d,a,b,c,x[k+3], S42,0x8F0CCC92);&lt;br /&gt;
            c = II(c,d,a,b,x[k+10],S43,0xFFEFF47D); b = II(b,c,d,a,x[k+1], S44,0x85845DD1);&lt;br /&gt;
            a = II(a,b,c,d,x[k+8], S41,0x6FA87E4F); d = II(d,a,b,c,x[k+15],S42,0xFE2CE6E0);&lt;br /&gt;
            c = II(c,d,a,b,x[k+6], S43,0xA3014314); b = II(b,c,d,a,x[k+4], S44,0x4E0811A1);&lt;br /&gt;
            a = addUnsigned(a, AA); b = addUnsigned(b, BB); c = addUnsigned(c, CC); d = addUnsigned(d, DD);&lt;br /&gt;
        }&lt;br /&gt;
        return (wordToHex(a) + wordToHex(b) + wordToHex(c) + wordToHex(d)).toLowerCase();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var memoryCache = {};&lt;br /&gt;
&lt;br /&gt;
    function detectStore() {&lt;br /&gt;
        var stores = [ &#039;localStorage&#039;, &#039;sessionStorage&#039; ];&lt;br /&gt;
        for ( var i = 0; i &amp;lt; stores.length; i++ ) {&lt;br /&gt;
            try {&lt;br /&gt;
                var s = window[ stores[i] ];&lt;br /&gt;
                s.setItem( &#039;__wdsparql_test__&#039;, &#039;1&#039; );&lt;br /&gt;
                s.removeItem( &#039;__wdsparql_test__&#039; );&lt;br /&gt;
                return s;&lt;br /&gt;
            } catch ( e ) { /* try next */ }&lt;br /&gt;
        }&lt;br /&gt;
        return null;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var store = detectStore();&lt;br /&gt;
&lt;br /&gt;
    function getCachedRecord( sparql ) {&lt;br /&gt;
        var key = &#039;wdsparql:&#039; + hashKey( sparql );&lt;br /&gt;
        if ( store ) {&lt;br /&gt;
            try {&lt;br /&gt;
                var raw = store.getItem( key );&lt;br /&gt;
                if ( raw ) { return JSON.parse( raw ); }&lt;br /&gt;
            } catch ( e ) {}&lt;br /&gt;
        }&lt;br /&gt;
        return memoryCache[ key ] || null;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function setCachedRecord( sparql, data ) {&lt;br /&gt;
        var key = &#039;wdsparql:&#039; + hashKey( sparql ),&lt;br /&gt;
            entry = { ts: Date.now(), data: data };&lt;br /&gt;
&lt;br /&gt;
        memoryCache[ key ] = entry;&lt;br /&gt;
&lt;br /&gt;
        if ( store ) {&lt;br /&gt;
            try {&lt;br /&gt;
                store.setItem( key, JSON.stringify( entry ) );&lt;br /&gt;
            } catch ( e ) {&lt;br /&gt;
                try {&lt;br /&gt;
                    // Prune old keys on storage quota hit&lt;br /&gt;
                    for ( var i = store.length - 1; i &amp;gt;= 0; i-- ) {&lt;br /&gt;
                        var k = store.key( i );&lt;br /&gt;
                        if ( k &amp;amp;&amp;amp; k.indexOf( &#039;wdsparql:&#039; ) === 0 ) { store.removeItem( k ); }&lt;br /&gt;
                    }&lt;br /&gt;
                    store.setItem( key, JSON.stringify( entry ) );&lt;br /&gt;
                } catch ( e2 ) {}&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // --- Concurrent Request Queue&lt;br /&gt;
    var inFlight = {}, queue = [], active = 0;&lt;br /&gt;
&lt;br /&gt;
    function pump() {&lt;br /&gt;
        while ( active &amp;lt; SPARQL_MAX_PARALLEL &amp;amp;&amp;amp; queue.length ) {&lt;br /&gt;
            var job = queue.shift();&lt;br /&gt;
            active++;&lt;br /&gt;
            runNetworkQuery( job.sparql ).then(&lt;br /&gt;
                function ( data ) { active--; pump(); job.resolve( data ); },&lt;br /&gt;
                function ( err )  { active--; pump(); job.reject( err ); }&lt;br /&gt;
            );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function enqueue( sparql ) {&lt;br /&gt;
        var key = hashKey( sparql );&lt;br /&gt;
        if ( inFlight[ key ] ) { return inFlight[ key ]; }&lt;br /&gt;
&lt;br /&gt;
        var p = new Promise( function ( resolve, reject ) {&lt;br /&gt;
            queue.push( { sparql: sparql, resolve: resolve, reject: reject } );&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        var cleaned = p.then(&lt;br /&gt;
            function ( result ) { delete inFlight[ key ]; return result; },&lt;br /&gt;
            function ( err )    { delete inFlight[ key ]; throw err; }&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
        inFlight[ key ] = cleaned;&lt;br /&gt;
        pump();&lt;br /&gt;
        return cleaned;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function runNetworkQuery( sparql, attempt ) {&lt;br /&gt;
        attempt = attempt || 0;&lt;br /&gt;
        var controller = ( typeof AbortController !== &#039;undefined&#039; ) ? new AbortController() : null,&lt;br /&gt;
            timer = controller ? setTimeout( function () { controller.abort(); }, SPARQL_TIMEOUT ) : null,&lt;br /&gt;
            fetchUrl = &#039;https://query.wikidata.org/sparql?format=json&amp;amp;query=&#039; + encodeURIComponent( sparql );&lt;br /&gt;
&lt;br /&gt;
        return fetch( fetchUrl, {&lt;br /&gt;
            headers: { Accept: &#039;application/sparql-results+json&#039; },&lt;br /&gt;
            signal: controller ? controller.signal : undefined&lt;br /&gt;
        } )&lt;br /&gt;
            .then( function ( r ) {&lt;br /&gt;
                if ( timer ) { clearTimeout( timer ); }&lt;br /&gt;
&lt;br /&gt;
                if ( ( r.status === 429 || r.status === 503 ) &amp;amp;&amp;amp; attempt &amp;lt; SPARQL_RETRY_MAX ) {&lt;br /&gt;
                    var wait = SPARQL_RETRY_BASE * Math.pow( 2, attempt ),&lt;br /&gt;
                        retryAfter = r.headers.get( &#039;Retry-After&#039; );&lt;br /&gt;
                    if ( retryAfter &amp;amp;&amp;amp; !isNaN( +retryAfter ) ) { wait = ( +retryAfter ) * 1000; }&lt;br /&gt;
                    return new Promise( function ( resolve ) { setTimeout( resolve, wait ); } )&lt;br /&gt;
                        .then( function () { return runNetworkQuery( sparql, attempt + 1 ); } );&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                if ( !r.ok ) { throw new Error( &#039;HTTP &#039; + r.status ); }&lt;br /&gt;
                return r.json();&lt;br /&gt;
            } )&lt;br /&gt;
            .then( function ( data ) {&lt;br /&gt;
                setCachedRecord( sparql, data );&lt;br /&gt;
                return data;&lt;br /&gt;
            } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Direct upload.wikimedia.org thumbnail construction bypassing Special:FilePath redirects&lt;br /&gt;
    function commonsThumbUrl( value, width ) {&lt;br /&gt;
        var idx = value.indexOf( COMMONS_MARKER );&lt;br /&gt;
        if ( idx === -1 ) return value;&lt;br /&gt;
&lt;br /&gt;
        var filename = decodeURIComponent( value.substring( idx + COMMONS_MARKER.length ) ).replace( / /g, &#039;_&#039; ),&lt;br /&gt;
            hash = md5( filename ),&lt;br /&gt;
            a = hash.substr( 0, 1 ),&lt;br /&gt;
            b = hash.substr( 0, 2 );&lt;br /&gt;
&lt;br /&gt;
        return &#039;https://upload.wikimedia.org/wikipedia/commons/thumb/&#039; + a + &#039;/&#039; + b + &#039;/&#039; + encodeURIComponent( filename ) + &#039;/&#039; + width + &#039;px-&#039; + encodeURIComponent( filename );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function renderTable( data, title ) {&lt;br /&gt;
        var vars = data.head.vars,&lt;br /&gt;
            rows = data.results.bindings,&lt;br /&gt;
            vLen = vars.length,&lt;br /&gt;
            html = [];&lt;br /&gt;
&lt;br /&gt;
        if ( title ) {&lt;br /&gt;
            html.push( &#039;&amp;lt;h3&amp;gt;&#039;, escapeHtml( title ), &#039;&amp;lt;/h3&amp;gt;&#039; );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        html.push( &#039;&amp;lt;table class=&amp;quot;wikitable sortable&amp;quot;&amp;gt;&amp;lt;thead&amp;gt;&amp;lt;tr&amp;gt;&#039; );&lt;br /&gt;
        for ( var i = 0; i &amp;lt; vLen; i++ ) {&lt;br /&gt;
            html.push( &#039;&amp;lt;th&amp;gt;&#039;, escapeHtml( vars[i].replace( /_/g, &#039; &#039; ) ), &#039;&amp;lt;/th&amp;gt;&#039; );&lt;br /&gt;
        }&lt;br /&gt;
        html.push( &#039;&amp;lt;/tr&amp;gt;&amp;lt;/thead&amp;gt;&amp;lt;tbody&amp;gt;&#039; );&lt;br /&gt;
&lt;br /&gt;
        for ( var r = 0, rLen = rows.length; r &amp;lt; rLen; r++ ) {&lt;br /&gt;
            var row = rows[r];&lt;br /&gt;
            html.push( &#039;&amp;lt;tr&amp;gt;&#039; );&lt;br /&gt;
            for ( var c = 0; c &amp;lt; vLen; c++ ) {&lt;br /&gt;
                var v = vars[c],&lt;br /&gt;
                    val = row[v] ? row[v].value : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
                if ( val.indexOf( COMMONS_MARKER ) !== -1 ) {&lt;br /&gt;
                    var thumb = commonsThumbUrl( val, 100 );&lt;br /&gt;
                    html.push(&lt;br /&gt;
                        &#039;&amp;lt;td&amp;gt;&amp;lt;img src=&amp;quot;&#039;, escapeHtml( thumb ), &#039;&amp;quot; style=&amp;quot;max-height:80px;&amp;quot; alt=&amp;quot;&amp;quot; loading=&amp;quot;lazy&amp;quot; &#039;,&lt;br /&gt;
                        &#039;onerror=&amp;quot;this.onerror=null;this.replaceWith(document.createTextNode(\&#039;—\&#039;));&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
                    );&lt;br /&gt;
                } else if ( val.indexOf( WIKIDATA_PREFIX ) === 0 || val.indexOf( WIKIDATA_HTTPS ) === 0 ) {&lt;br /&gt;
                    var qid = val.substring( val.lastIndexOf( &#039;/&#039; ) + 1 );&lt;br /&gt;
                    html.push( &#039;&amp;lt;td&amp;gt;&amp;lt;a href=&amp;quot;https://www.wikidata.org/wiki/&#039;, qid, &#039;&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;&#039;, qid, &#039;&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&#039; );&lt;br /&gt;
                } else {&lt;br /&gt;
                    html.push( &#039;&amp;lt;td&amp;gt;&#039;, escapeHtml( val ), &#039;&amp;lt;/td&amp;gt;&#039; );&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            html.push( &#039;&amp;lt;/tr&amp;gt;&#039; );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        html.push( &#039;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&#039; );&lt;br /&gt;
        return html.join( &#039;&#039; );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function processTableElement( el ) {&lt;br /&gt;
        var sparql = el.getAttribute( &#039;data-sparql&#039; ),&lt;br /&gt;
            title  = el.getAttribute( &#039;data-title&#039; );&lt;br /&gt;
&lt;br /&gt;
        if ( !sparql ) { return Promise.resolve( null ); }&lt;br /&gt;
&lt;br /&gt;
        var record = getCachedRecord( sparql ),&lt;br /&gt;
            now = Date.now(),&lt;br /&gt;
            hasFreshCache = record &amp;amp;&amp;amp; ( now - record.ts &amp;lt;= SPARQL_CACHE_TTL ),&lt;br /&gt;
            hasStaleCache = record &amp;amp;&amp;amp; ( now - record.ts &amp;lt;= SPARQL_STALE_TTL );&lt;br /&gt;
&lt;br /&gt;
        // Scenario 1: Fresh cache available -&amp;gt; Render instantly with zero network requests&lt;br /&gt;
        if ( hasFreshCache ) {&lt;br /&gt;
            el.innerHTML = renderTable( record.data, title );&lt;br /&gt;
            return Promise.resolve( el );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Scenario 2: Stale cache available -&amp;gt; Render instantly, update in background (SWR)&lt;br /&gt;
        if ( hasStaleCache ) {&lt;br /&gt;
            el.innerHTML = renderTable( record.data, title );&lt;br /&gt;
            enqueue( sparql ).then( function ( freshData ) {&lt;br /&gt;
                // Silently update DOM if data has changed&lt;br /&gt;
                if ( JSON.stringify( freshData ) !== JSON.stringify( record.data ) ) {&lt;br /&gt;
                    el.innerHTML = renderTable( freshData, title );&lt;br /&gt;
                    mw.hook( &#039;wikipage.content&#039; ).fire( $( el ) );&lt;br /&gt;
                }&lt;br /&gt;
            } ).catch( function () { /* Keep stale data on error */ } );&lt;br /&gt;
            return Promise.resolve( el );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Scenario 3: No cache -&amp;gt; Show loading state and fetch&lt;br /&gt;
        el.textContent = &#039;⏳ Loading…&#039;;&lt;br /&gt;
        return enqueue( sparql )&lt;br /&gt;
            .then( function ( data ) {&lt;br /&gt;
                el.innerHTML = renderTable( data, title );&lt;br /&gt;
                return el;&lt;br /&gt;
            } )&lt;br /&gt;
            .catch( function ( err ) {&lt;br /&gt;
                el.textContent = ( err &amp;amp;&amp;amp; err.name === &#039;AbortError&#039; )&lt;br /&gt;
                    ? &#039;⚠️ Timed out loading data.&#039;&lt;br /&gt;
                    : &#039;⚠️ Failed to load (Wikidata may be busy).&#039;;&lt;br /&gt;
            } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        var contextNode = ( $content &amp;amp;&amp;amp; $content[0] ) ? $content[0] : document,&lt;br /&gt;
            tables = contextNode.querySelectorAll( &#039;.wikidata-sparql-table:not([data-loaded])&#039; );&lt;br /&gt;
&lt;br /&gt;
        if ( !tables.length ) { return; }&lt;br /&gt;
&lt;br /&gt;
        var tablesToProcess = [];&lt;br /&gt;
&lt;br /&gt;
        // Lazy-loading with IntersectionObserver (only load tables when near viewport)&lt;br /&gt;
        if ( &#039;IntersectionObserver&#039; in window ) {&lt;br /&gt;
            var observer = new IntersectionObserver( function ( entries, obs ) {&lt;br /&gt;
                entries.forEach( function ( entry ) {&lt;br /&gt;
                    if ( entry.isIntersecting ) {&lt;br /&gt;
                        var el = entry.target;&lt;br /&gt;
                        obs.unobserve( el );&lt;br /&gt;
                        if ( !el.getAttribute( &#039;data-loaded&#039; ) ) {&lt;br /&gt;
                            el.setAttribute( &#039;data-loaded&#039;, &#039;1&#039; );&lt;br /&gt;
                            processTableElement( el ).then( function ( renderedEl ) {&lt;br /&gt;
                                if ( renderedEl ) { mw.hook( &#039;wikipage.content&#039; ).fire( $( renderedEl ) ); }&lt;br /&gt;
                            } );&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                } );&lt;br /&gt;
            }, { rootMargin: &#039;300px 0px&#039; } );&lt;br /&gt;
&lt;br /&gt;
            tables.forEach( function ( el ) { observer.observe( el ); } );&lt;br /&gt;
        } else {&lt;br /&gt;
            // Fallback for older browsers&lt;br /&gt;
            var renderPromises = Array.prototype.map.call( tables, function ( el ) {&lt;br /&gt;
                el.setAttribute( &#039;data-loaded&#039;, &#039;1&#039; );&lt;br /&gt;
                return processTableElement( el );&lt;br /&gt;
            } );&lt;br /&gt;
&lt;br /&gt;
            Promise.all( renderPromises ).then( function ( renderedElements ) {&lt;br /&gt;
                var validElements = renderedElements.filter( Boolean );&lt;br /&gt;
                if ( validElements.length ) {&lt;br /&gt;
                    mw.hook( &#039;wikipage.content&#039; ).fire( $( validElements ) );&lt;br /&gt;
                }&lt;br /&gt;
            } );&lt;br /&gt;
        }&lt;br /&gt;
    } );&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
/* DO NOT ADD CODE BELOW THIS LINE */&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=MediaWiki:Common.js&amp;diff=18629</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=MediaWiki:Common.js&amp;diff=18629"/>
		<updated>2026-09-21T12:53:40Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Tout JavaScript présent ici sera exécuté par tous les utilisateurs à chaque chargement de page. */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally&lt;br /&gt;
 * loaded for all users on every wiki page. If possible create a gadget that is&lt;br /&gt;
 * enabled by default instead of adding it here (since gadgets are fully&lt;br /&gt;
 * optimized ResourceLoader modules with possibility to add dependencies etc.)&lt;br /&gt;
 *&lt;br /&gt;
 * Since Common.js isn&#039;t a gadget, there is no place to declare its&lt;br /&gt;
 * dependencies, so we have to lazy load them with mw.loader.using on demand and&lt;br /&gt;
 * then execute the rest in the callback. In most cases these dependencies will&lt;br /&gt;
 * be loaded (or loading) already and the callback will not be delayed. In case a&lt;br /&gt;
 * dependency hasn&#039;t arrived yet it&#039;ll make sure those are loaded before this.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* global mw, $ */&lt;br /&gt;
/* jshint strict:false, browser:true */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * MediaWiki:Common.js&lt;br /&gt;
 * &lt;br /&gt;
 * Common JavaScript for all users on this wiki.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
( function ( $, mw ) {&lt;br /&gt;
    &#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
    /* ==========================================================================&lt;br /&gt;
       1. Helper Utilities &amp;amp; Legacy Fixes&lt;br /&gt;
       ========================================================================== */&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Deprecation fallback for window.addPortletLink&lt;br /&gt;
     */&lt;br /&gt;
    window.addPortletLink = function () {&lt;br /&gt;
        return mw.util.addPortletLink.apply( mw.util, arguments );&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Dynamically loads a script from the MediaWiki namespace&lt;br /&gt;
     */&lt;br /&gt;
    function withJS( page ) {&lt;br /&gt;
        if ( !page || !/^MediaWiki:/.test( page ) ) {&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        mw.loader.load( mw.config.get( &#039;wgScript&#039; ) + &#039;?title=&#039; + encodeURIComponent( page ) + &#039;&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Dynamically loads a stylesheet from the MediaWiki namespace&lt;br /&gt;
     */&lt;br /&gt;
    function withCSS( page ) {&lt;br /&gt;
        if ( !page || !/^MediaWiki:/.test( page ) ) {&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        mw.loader.load( mw.config.get( &#039;wgScript&#039; ) + &#039;?title=&#039; + encodeURIComponent( page ) + &#039;&amp;amp;action=raw&amp;amp;ctype=text/css&#039;, &#039;text/css&#039; );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Open interwiki links in a new window/tab&lt;br /&gt;
     */&lt;br /&gt;
    function openInterwikiLinksInNewWindow( $content ) {&lt;br /&gt;
        $content.find( &#039;a.extiw, a.external&#039; ).each( function () {&lt;br /&gt;
            var href = $( this ).attr( &#039;href&#039; );&lt;br /&gt;
            if ( href &amp;amp;&amp;amp; href.indexOf( mw.config.get( &#039;wgServer&#039; ) ) === -1 ) {&lt;br /&gt;
                $( this ).attr( {&lt;br /&gt;
                    target: &#039;_blank&#039;,&lt;br /&gt;
                    rel: &#039;noopener noreferrer&#039;&lt;br /&gt;
                } );&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Converts legacy collapsible tables into MediaWiki collapsible elements&lt;br /&gt;
     */&lt;br /&gt;
    function setupCollapsibleElements( $content ) {&lt;br /&gt;
        $content.find( &#039;table.collapsible&#039; ).each( function () {&lt;br /&gt;
            var $table = $( this );&lt;br /&gt;
            $table.addClass( &#039;mw-collapsible&#039; );&lt;br /&gt;
            if ( $table.hasClass( &#039;collapsed&#039; ) ) {&lt;br /&gt;
                $table.addClass( &#039;mw-collapsed&#039; );&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    /* ==========================================================================&lt;br /&gt;
       2. Native MediaWiki Commons Image Resolver&lt;br /&gt;
       ========================================================================== */&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Fetches scaled thumbnail URLs directly using native MediaWiki Action API.&lt;br /&gt;
     * Batches file titles into a single API request for performance.&lt;br /&gt;
     * &lt;br /&gt;
     * @param {Array&amp;lt;string&amp;gt;} fileTitles Array of file titles or Special:FilePath URIs&lt;br /&gt;
     * @param {number} width Target thumbnail width in pixels&lt;br /&gt;
     * @return {jQuery.Promise} Resolves with a mapping object { cleanFileName: thumbUrl }&lt;br /&gt;
     */&lt;br /&gt;
    function resolveCommonsThumbnailsNative( fileTitles, width ) {&lt;br /&gt;
        width = width || 160;&lt;br /&gt;
        var deferred = $.Deferred();&lt;br /&gt;
&lt;br /&gt;
        if ( !fileTitles || !fileTitles.length ) {&lt;br /&gt;
            return deferred.resolve( {} ).promise();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Clean titles to standard &#039;File:Example.jpg&#039; format&lt;br /&gt;
        var titleMap = {};&lt;br /&gt;
        var cleanTitles = [];&lt;br /&gt;
&lt;br /&gt;
        $.each( fileTitles, function ( i, raw ) {&lt;br /&gt;
            var fileName = decodeURIComponent( raw ).replace( /^.*Special:FilePath\//, &#039;&#039; ).replace( /_/g, &#039; &#039; );&lt;br /&gt;
            var fullTitle = &#039;File:&#039; + fileName;&lt;br /&gt;
            titleMap[ fullTitle ] = raw;&lt;br /&gt;
            if ( cleanTitles.indexOf( fullTitle ) === -1 ) {&lt;br /&gt;
                cleanTitles.push( fullTitle );&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        // Batch call Wikimedia Commons MediaWiki API natively via mw.ForeignApi / mw.Api&lt;br /&gt;
        var api = new mw.ForeignApi( &#039;https://commons.wikimedia.org/w/api.php&#039; );&lt;br /&gt;
&lt;br /&gt;
        api.get( {&lt;br /&gt;
            action: &#039;query&#039;,&lt;br /&gt;
            titles: cleanTitles.join( &#039;|&#039; ),&lt;br /&gt;
            prop: &#039;imageinfo&#039;,&lt;br /&gt;
            iiprop: &#039;url&#039;,&lt;br /&gt;
            iiurlwidth: width,&lt;br /&gt;
            formatversion: 2&lt;br /&gt;
        } ).done( function ( data ) {&lt;br /&gt;
            var urlMap = {};&lt;br /&gt;
            if ( data &amp;amp;&amp;amp; data.query &amp;amp;&amp;amp; data.query.pages ) {&lt;br /&gt;
                $.each( data.query.pages, function ( i, page ) {&lt;br /&gt;
                    if ( page.imageinfo &amp;amp;&amp;amp; page.imageinfo[ 0 ] ) {&lt;br /&gt;
                        var info = page.imageinfo[ 0 ];&lt;br /&gt;
                        var origKey = titleMap[ page.title ];&lt;br /&gt;
                        urlMap[ origKey ] = info.thumburl || info.url;&lt;br /&gt;
                    }&lt;br /&gt;
                } );&lt;br /&gt;
            }&lt;br /&gt;
            deferred.resolve( urlMap );&lt;br /&gt;
        } ).fail( function () {&lt;br /&gt;
            deferred.resolve( {} ); // Fallback gracefully if API fails&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        return deferred.promise();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    /* ==========================================================================&lt;br /&gt;
       3. Wikidata SPARQL Table Engine&lt;br /&gt;
       ========================================================================== */&lt;br /&gt;
&lt;br /&gt;
    var SPARQL_ENDPOINT = &#039;https://query.wikidata.org/sparql&#039;;&lt;br /&gt;
    var SPARQL_MAX_PARALLEL = 2;&lt;br /&gt;
    var CACHE_FRESHNESS_MS = 2 * 60 * 1000;         // 2 Minutes (Fresh)&lt;br /&gt;
    var CACHE_EXPIRATION_MS = 6 * 60 * 60 * 1000;   // 6 Hours (Max TTL)&lt;br /&gt;
&lt;br /&gt;
    var activeRequests = 0;&lt;br /&gt;
    var requestQueue = [];&lt;br /&gt;
    var inFlightPromises = {};&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Compute a fast FNV-1a hash key for SPARQL string deduplication&lt;br /&gt;
     */&lt;br /&gt;
    function fnv1aHash( str ) {&lt;br /&gt;
        var hash = 0x811c9dc5;&lt;br /&gt;
        for ( var i = 0; i &amp;lt; str.length; i++ ) {&lt;br /&gt;
            hash ^= str.charCodeAt( i );&lt;br /&gt;
            hash += ( hash &amp;lt;&amp;lt; 1 ) + ( hash &amp;lt;&amp;lt; 4 ) + ( hash &amp;lt;&amp;lt; 7 ) + ( hash &amp;lt;&amp;lt; 8 ) + ( hash &amp;lt;&amp;lt; 24 );&lt;br /&gt;
        }&lt;br /&gt;
        return &#039;wdsparql:&#039; + ( hash &amp;gt;&amp;gt;&amp;gt; 0 ).toString( 36 );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Safe storage write wrapper with automatic cache pruning&lt;br /&gt;
     */&lt;br /&gt;
    function setCache( key, val ) {&lt;br /&gt;
        try {&lt;br /&gt;
            var data = {&lt;br /&gt;
                timestamp: Date.now(),&lt;br /&gt;
                payload: val&lt;br /&gt;
            };&lt;br /&gt;
            localStorage.setItem( key, JSON.stringify( data ) );&lt;br /&gt;
        } catch ( e ) {&lt;br /&gt;
            // Prune old SPARQL cache keys if quota exceeded&lt;br /&gt;
            for ( var k in localStorage ) {&lt;br /&gt;
                if ( k.indexOf( &#039;wdsparql:&#039; ) === 0 ) {&lt;br /&gt;
                    localStorage.removeItem( k );&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Retrieve items from cache with timestamp metadata&lt;br /&gt;
     */&lt;br /&gt;
    function getCache( key ) {&lt;br /&gt;
        try {&lt;br /&gt;
            var raw = localStorage.getItem( key );&lt;br /&gt;
            if ( !raw ) return null;&lt;br /&gt;
            var parsed = JSON.parse( raw );&lt;br /&gt;
            var age = Date.now() - parsed.timestamp;&lt;br /&gt;
            if ( age &amp;gt; CACHE_EXPIRATION_MS ) {&lt;br /&gt;
                localStorage.removeItem( key );&lt;br /&gt;
                return null;&lt;br /&gt;
            }&lt;br /&gt;
            return {&lt;br /&gt;
                isFresh: age &amp;lt; CACHE_FRESHNESS_MS,&lt;br /&gt;
                payload: parsed.payload&lt;br /&gt;
            };&lt;br /&gt;
        } catch ( e ) {&lt;br /&gt;
            return null;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Process throttled SPARQL execution queue&lt;br /&gt;
     */&lt;br /&gt;
    function processQueue() {&lt;br /&gt;
        if ( activeRequests &amp;gt;= SPARQL_MAX_PARALLEL || requestQueue.length === 0 ) {&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var task = requestQueue.shift();&lt;br /&gt;
        activeRequests++;&lt;br /&gt;
&lt;br /&gt;
        var hashKey = task.hashKey;&lt;br /&gt;
&lt;br /&gt;
        // Deduplicate in-flight network promises&lt;br /&gt;
        if ( inFlightPromises[ hashKey ] ) {&lt;br /&gt;
            inFlightPromises[ hashKey ].then( task.resolve ).catch( task.reject ).always( function () {&lt;br /&gt;
                activeRequests--;&lt;br /&gt;
                processQueue();&lt;br /&gt;
            } );&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var promise = $.ajax( {&lt;br /&gt;
            url: SPARQL_ENDPOINT,&lt;br /&gt;
            data: { query: task.sparql },&lt;br /&gt;
            dataType: &#039;json&#039;,&lt;br /&gt;
            headers: { &#039;Accept&#039;: &#039;application/sparql-results+json&#039; }&lt;br /&gt;
        } ).then( function ( data ) {&lt;br /&gt;
            setCache( hashKey, data );&lt;br /&gt;
            return data;&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        inFlightPromises[ hashKey ] = promise;&lt;br /&gt;
&lt;br /&gt;
        promise.done( task.resolve )&lt;br /&gt;
            .fail( function ( xhr, status, error ) {&lt;br /&gt;
                if ( xhr.status === 429 || xhr.status === 503 ) {&lt;br /&gt;
                    var retryAfter = parseInt( xhr.getResponseHeader( &#039;Retry-After&#039; ), 10 ) || 5;&lt;br /&gt;
                    setTimeout( function () {&lt;br /&gt;
                        requestQueue.unshift( task );&lt;br /&gt;
                    }, retryAfter * 1000 );&lt;br /&gt;
                } else {&lt;br /&gt;
                    task.reject( error );&lt;br /&gt;
                }&lt;br /&gt;
            } )&lt;br /&gt;
            .always( function () {&lt;br /&gt;
                delete inFlightPromises[ hashKey ];&lt;br /&gt;
                activeRequests--;&lt;br /&gt;
                processQueue();&lt;br /&gt;
            } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Queue a SPARQL query request&lt;br /&gt;
     */&lt;br /&gt;
    function fetchSparql( sparql ) {&lt;br /&gt;
        var hashKey = fnv1aHash( sparql );&lt;br /&gt;
        var cached = getCache( hashKey );&lt;br /&gt;
&lt;br /&gt;
        return $.Deferred( function ( deferred ) {&lt;br /&gt;
            if ( cached &amp;amp;&amp;amp; cached.isFresh ) {&lt;br /&gt;
                deferred.resolve( cached.payload );&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            if ( cached &amp;amp;&amp;amp; !cached.isFresh ) {&lt;br /&gt;
                deferred.resolve( cached.payload );&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            requestQueue.push( {&lt;br /&gt;
                sparql: sparql,&lt;br /&gt;
                hashKey: hashKey,&lt;br /&gt;
                resolve: function ( data ) {&lt;br /&gt;
                    if ( !cached ) deferred.resolve( data );&lt;br /&gt;
                },&lt;br /&gt;
                reject: function ( err ) {&lt;br /&gt;
                    if ( !cached ) deferred.reject( err );&lt;br /&gt;
                }&lt;br /&gt;
            } );&lt;br /&gt;
&lt;br /&gt;
            processQueue();&lt;br /&gt;
        } ).promise();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Renders bindings into a standard MediaWiki formatted wikitable using native image resolution&lt;br /&gt;
     */&lt;br /&gt;
    function renderSparqlTable( $container, data, title ) {&lt;br /&gt;
        var vars = data.head.vars;&lt;br /&gt;
        var bindings = data.results.bindings;&lt;br /&gt;
&lt;br /&gt;
        // Collect all Commons file references for native API batch resolution&lt;br /&gt;
        var imageFiles = [];&lt;br /&gt;
        $.each( bindings, function ( i, row ) {&lt;br /&gt;
            $.each( vars, function ( j, v ) {&lt;br /&gt;
                var cell = row[ v ];&lt;br /&gt;
                if ( cell &amp;amp;&amp;amp; cell.type === &#039;uri&#039; &amp;amp;&amp;amp; cell.value.indexOf( &#039;Special:FilePath/&#039; ) !== -1 ) {&lt;br /&gt;
                    imageFiles.push( cell.value );&lt;br /&gt;
                }&lt;br /&gt;
            } );&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        // Resolve images natively via MediaWiki API, then render DOM&lt;br /&gt;
        resolveCommonsThumbnailsNative( imageFiles, 160 ).done( function ( imageMap ) {&lt;br /&gt;
            var $table = $( &#039;&amp;lt;table&amp;gt;&#039; ).addClass( &#039;wikitable sortable wikidata-sparql-rendered&#039; );&lt;br /&gt;
&lt;br /&gt;
            if ( title ) {&lt;br /&gt;
                $table.append( $( &#039;&amp;lt;caption&amp;gt;&#039; ).text( title ) );&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // Header&lt;br /&gt;
            var $thead = $( &#039;&amp;lt;thead&amp;gt;&#039; );&lt;br /&gt;
            var $headerRow = $( &#039;&amp;lt;tr&amp;gt;&#039; );&lt;br /&gt;
            $.each( vars, function ( i, v ) {&lt;br /&gt;
                $headerRow.append( $( &#039;&amp;lt;th&amp;gt;&#039; ).text( v ) );&lt;br /&gt;
            } );&lt;br /&gt;
            $thead.append( $headerRow );&lt;br /&gt;
            $table.append( $thead );&lt;br /&gt;
&lt;br /&gt;
            // Body&lt;br /&gt;
            var $tbody = $( &#039;&amp;lt;tbody&amp;gt;&#039; );&lt;br /&gt;
            $.each( bindings, function ( i, row ) {&lt;br /&gt;
                var $row = $( &#039;&amp;lt;tr&amp;gt;&#039; );&lt;br /&gt;
                $.each( vars, function ( j, v ) {&lt;br /&gt;
                    var cell = row[ v ];&lt;br /&gt;
                    var $td = $( &#039;&amp;lt;td&amp;gt;&#039; );&lt;br /&gt;
&lt;br /&gt;
                    if ( !cell ) {&lt;br /&gt;
                        $td.html( &#039;&amp;amp;mdash;&#039; );&lt;br /&gt;
                    } else if ( cell.type === &#039;uri&#039; &amp;amp;&amp;amp; cell.value.indexOf( &#039;Special:FilePath/&#039; ) !== -1 ) {&lt;br /&gt;
                        var thumbUrl = imageMap[ cell.value ] || cell.value;&lt;br /&gt;
                        var $img = $( &#039;&amp;lt;img&amp;gt;&#039; ).attr( {&lt;br /&gt;
                            src: thumbUrl,&lt;br /&gt;
                            loading: &#039;lazy&#039;,&lt;br /&gt;
                            height: 80&lt;br /&gt;
                        } ).css( &#039;max-height&#039;, &#039;80px&#039; );&lt;br /&gt;
&lt;br /&gt;
                        var $link = $( &#039;&amp;lt;a&amp;gt;&#039; ).attr( {&lt;br /&gt;
                            href: cell.value,&lt;br /&gt;
                            target: &#039;_blank&#039;,&lt;br /&gt;
                            rel: &#039;noopener noreferrer&#039;&lt;br /&gt;
                        } ).append( $img );&lt;br /&gt;
&lt;br /&gt;
                        $td.append( $link );&lt;br /&gt;
                    } else if ( cell.type === &#039;uri&#039; &amp;amp;&amp;amp; cell.value.indexOf( &#039;http://www.wikidata.org/entity/&#039; ) === 0 ) {&lt;br /&gt;
                        var qid = cell.value.replace( &#039;http://www.wikidata.org/entity/&#039;, &#039;&#039; );&lt;br /&gt;
                        var $link = $( &#039;&amp;lt;a&amp;gt;&#039; ).attr( {&lt;br /&gt;
                            href: cell.value,&lt;br /&gt;
                            target: &#039;_blank&#039;,&lt;br /&gt;
                            rel: &#039;noopener noreferrer&#039;&lt;br /&gt;
                        } ).text( qid );&lt;br /&gt;
&lt;br /&gt;
                        $td.append( $link );&lt;br /&gt;
                    } else {&lt;br /&gt;
                        $td.text( cell.value );&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    $row.append( $td );&lt;br /&gt;
                } );&lt;br /&gt;
                $tbody.append( $row );&lt;br /&gt;
            } );&lt;br /&gt;
&lt;br /&gt;
            $table.append( $tbody );&lt;br /&gt;
            $container.empty().append( $table );&lt;br /&gt;
&lt;br /&gt;
            mw.loader.using( &#039;jquery.tablesorter&#039;, function () {&lt;br /&gt;
                $table.tablesorter();&lt;br /&gt;
            } );&lt;br /&gt;
        } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Initializes elements using the .wikidata-sparql-table class via IntersectionObserver&lt;br /&gt;
     */&lt;br /&gt;
    function initSparqlTables( $content ) {&lt;br /&gt;
        var $targets = $content.find( &#039;.wikidata-sparql-table:not(.wd-sparql-initialized)&#039; );&lt;br /&gt;
        if ( !$targets.length ) return;&lt;br /&gt;
&lt;br /&gt;
        var observer = new IntersectionObserver( function ( entries, obs ) {&lt;br /&gt;
            entries.forEach( function ( entry ) {&lt;br /&gt;
                if ( entry.isIntersecting ) {&lt;br /&gt;
                    var $elem = $( entry.target );&lt;br /&gt;
                    $elem.addClass( &#039;wd-sparql-initialized&#039; );&lt;br /&gt;
                    obs.unobserve( entry.target );&lt;br /&gt;
&lt;br /&gt;
                    var sparql = $elem.attr( &#039;data-sparql&#039; );&lt;br /&gt;
                    var title = $elem.attr( &#039;data-title&#039; );&lt;br /&gt;
&lt;br /&gt;
                    if ( !sparql ) return;&lt;br /&gt;
&lt;br /&gt;
                    $elem.html( &#039;&amp;lt;span class=&amp;quot;mw-ajax-loader&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; Loading Wikidata SPARQL results...&#039; );&lt;br /&gt;
&lt;br /&gt;
                    fetchSparql( sparql )&lt;br /&gt;
                        .done( function ( data ) {&lt;br /&gt;
                            renderSparqlTable( $elem, data, title );&lt;br /&gt;
                        } )&lt;br /&gt;
                        .fail( function () {&lt;br /&gt;
                            $elem.html( &#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;Failed to load SPARQL results from Wikidata.&amp;lt;/span&amp;gt;&#039; );&lt;br /&gt;
                        } );&lt;br /&gt;
                }&lt;br /&gt;
            } );&lt;br /&gt;
        }, { rootMargin: &#039;300px 0px&#039; } );&lt;br /&gt;
&lt;br /&gt;
        $targets.each( function () {&lt;br /&gt;
            observer.observe( this );&lt;br /&gt;
        } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* ==========================================================================&lt;br /&gt;
       4. Document Ready Hook&lt;br /&gt;
       ========================================================================== */&lt;br /&gt;
&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        openInterwikiLinksInNewWindow( $content );&lt;br /&gt;
        setupCollapsibleElements( $content );&lt;br /&gt;
        initSparqlTables( $content );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
}( jQuery, mediaWiki ) );&lt;br /&gt;
&lt;br /&gt;
/* DO NOT ADD CODE BELOW THIS LINE */&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=MediaWiki:Common.js&amp;diff=18628</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=MediaWiki:Common.js&amp;diff=18628"/>
		<updated>2026-09-21T12:46:59Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Tout JavaScript présent ici sera exécuté par tous les utilisateurs à chaque chargement de page. */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally&lt;br /&gt;
 * loaded for all users on every wiki page. If possible create a gadget that is&lt;br /&gt;
 * enabled by default instead of adding it here (since gadgets are fully&lt;br /&gt;
 * optimized ResourceLoader modules with possibility to add dependencies etc.)&lt;br /&gt;
 *&lt;br /&gt;
 * Since Common.js isn&#039;t a gadget, there is no place to declare its&lt;br /&gt;
 * dependencies, so we have to lazy load them with mw.loader.using on demand and&lt;br /&gt;
 * then execute the rest in the callback. In most cases these dependencies will&lt;br /&gt;
 * be loaded (or loading) already and the callback will not be delayed. In case a&lt;br /&gt;
 * dependency hasn&#039;t arrived yet it&#039;ll make sure those are loaded before this.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* global mw, $ */&lt;br /&gt;
/* jshint strict:false, browser:true */&lt;br /&gt;
&lt;br /&gt;
mw.loader.using( [ &#039;mediawiki.util&#039; ] ).then( function () {&lt;br /&gt;
&lt;br /&gt;
    mw.log.deprecate( window, &#039;addPortletLink&#039;, mw.util.addPortletLink, &#039;Use mw.util.addPortletLink instead&#039; );&lt;br /&gt;
&lt;br /&gt;
    var extraCSS = mw.util.getParamValue( &#039;withCSS&#039; ),&lt;br /&gt;
        extraJS  = mw.util.getParamValue( &#039;withJS&#039; );&lt;br /&gt;
&lt;br /&gt;
    if ( extraCSS ) {&lt;br /&gt;
        if ( /^MediaWiki:[^&amp;amp;&amp;lt;&amp;gt;=%#]*\.css$/.test( extraCSS ) ) {&lt;br /&gt;
            mw.loader.load( &#039;/w/index.php?title=&#039; + encodeURIComponent( extraCSS ) + &#039;&amp;amp;action=raw&amp;amp;ctype=text/css&#039;, &#039;text/css&#039; );&lt;br /&gt;
        } else {&lt;br /&gt;
            mw.notify( &#039;Only pages from the MediaWiki namespace are allowed.&#039;, { title: &#039;Invalid withCSS value&#039; } );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( extraJS ) {&lt;br /&gt;
        if ( /^MediaWiki:[^&amp;amp;&amp;lt;&amp;gt;=%#]*\.js$/.test( extraJS ) ) {&lt;br /&gt;
            mw.loader.load( &#039;/w/index.php?title=&#039; + encodeURIComponent( extraJS ) + &#039;&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
        } else {&lt;br /&gt;
            mw.notify( &#039;Only pages from the MediaWiki namespace are allowed.&#039;, { title: &#039;Invalid withJS value&#039; } );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Collapsible tables&lt;br /&gt;
     */&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        var $tables = $content.find( &#039;table.collapsible:not(.mw-collapsible)&#039; );&lt;br /&gt;
        if ( !$tables.length ) { return; }&lt;br /&gt;
&lt;br /&gt;
        $tables.addClass( &#039;mw-collapsible&#039; ).each( function () {&lt;br /&gt;
            if ( $( this ).hasClass( &#039;collapsed&#039; ) ) {&lt;br /&gt;
                $( this ).addClass( &#039;mw-collapsed&#039; );&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        mw.loader.using( &#039;jquery.makeCollapsible&#039; ).then( function () {&lt;br /&gt;
            $tables.makeCollapsible();&lt;br /&gt;
        } );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    mw.hook( &#039;wikipage.collapsibleContent&#039; ).add( function ( $collapsibleContent ) {&lt;br /&gt;
        var autoCollapseThreshold = 2,&lt;br /&gt;
            hasOuter = $collapsibleContent.parents( &#039;.outercollapse&#039; ).length &amp;gt; 0;&lt;br /&gt;
&lt;br /&gt;
        $collapsibleContent.each( function () {&lt;br /&gt;
            var $element = $( this );&lt;br /&gt;
&lt;br /&gt;
            if ( $element.hasClass( &#039;collapsible&#039; ) ) {&lt;br /&gt;
                $element.find( &#039;tr:first &amp;gt; th:first&#039; ).prepend( $element.find( &#039;tr:first &amp;gt; * &amp;gt; .mw-collapsible-toggle&#039; ) );&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            if ( $collapsibleContent.length &amp;gt;= autoCollapseThreshold &amp;amp;&amp;amp; $element.hasClass( &#039;autocollapse&#039; ) ) {&lt;br /&gt;
                $element.data( &#039;mw-collapsible&#039; ).collapse();&lt;br /&gt;
            } else if ( $element.hasClass( &#039;innercollapse&#039; ) &amp;amp;&amp;amp; hasOuter ) {&lt;br /&gt;
                $element.data( &#039;mw-collapsible&#039; ).collapse();&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            var $toggle = $element.find( &#039;.mw-collapsible-toggle&#039; );&lt;br /&gt;
            if ( $toggle.length &amp;amp;&amp;amp; $toggle.parent()[0].style.color ) {&lt;br /&gt;
                $toggle.css( &#039;color&#039;, &#039;inherit&#039; ).find( &#039;.mw-collapsible-text&#039; ).css( &#039;color&#039;, &#039;inherit&#039; );&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Force interwiki links to open in a new tab&lt;br /&gt;
     */&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        $content.find( &#039;a.extiw&#039; ).attr( &#039;target&#039;, &#039;_blank&#039; ).attr( &#039;rel&#039;, &#039;noopener noreferrer&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * High-Performance Wikidata SPARQL Table Engine&lt;br /&gt;
     */&lt;br /&gt;
    var WIKIDATA_PREFIX     = &#039;http://www.wikidata.org/entity/&#039;,&lt;br /&gt;
        WIKIDATA_HTTPS      = &#039;https://www.wikidata.org/entity/&#039;,&lt;br /&gt;
        COMMONS_MARKER      = &#039;Special:FilePath/&#039;,&lt;br /&gt;
        SPARQL_CACHE_TTL    = 2 * 60 * 1000,       // 2 mins: serve cached version without network request&lt;br /&gt;
        SPARQL_STALE_TTL    = 6 * 60 * 60 * 1000,  // 6 hours: serve stale instantly, revalidate in background&lt;br /&gt;
        SPARQL_TIMEOUT      = 30000,               // 30s timeout&lt;br /&gt;
        SPARQL_MAX_PARALLEL = 2,                   // Concurrency limit&lt;br /&gt;
        SPARQL_RETRY_MAX    = 2,&lt;br /&gt;
        SPARQL_RETRY_BASE   = 1000;&lt;br /&gt;
&lt;br /&gt;
    function escapeHtml( text ) {&lt;br /&gt;
        return String( text )&lt;br /&gt;
            .replace( /&amp;amp;/g, &#039;&amp;amp;amp;&#039; )&lt;br /&gt;
            .replace( /&amp;lt;/g, &#039;&amp;amp;lt;&#039; )&lt;br /&gt;
            .replace( /&amp;gt;/g, &#039;&amp;amp;gt;&#039; )&lt;br /&gt;
            .replace( /&amp;quot;/g, &#039;&amp;amp;quot;&#039; )&lt;br /&gt;
            .replace( /&#039;/g, &#039;&amp;amp;#39;&#039; );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function hashKey( str ) {&lt;br /&gt;
        var h = 0x811c9dc5;&lt;br /&gt;
        for ( var i = 0; i &amp;lt; str.length; i++ ) {&lt;br /&gt;
            h ^= str.charCodeAt( i );&lt;br /&gt;
            h = ( h * 0x01000193 ) &amp;gt;&amp;gt;&amp;gt; 0;&lt;br /&gt;
        }&lt;br /&gt;
        return h.toString( 36 );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* Fast MD5 implementation for converting Commons filenames directly to upload.wikimedia.org static URLs */&lt;br /&gt;
    function md5( string ) {&lt;br /&gt;
        function rotateLeft( lValue, iShiftBits ) {&lt;br /&gt;
            return ( lValue &amp;lt;&amp;lt; iShiftBits ) | ( lValue &amp;gt;&amp;gt;&amp;gt; ( 32 - iShiftBits ) );&lt;br /&gt;
        }&lt;br /&gt;
        function addUnsigned( lX, lY ) {&lt;br /&gt;
            var lX4, lY4, lX8, lY8, lResult;&lt;br /&gt;
            lX8 = ( lX &amp;amp; 0x80000000 );&lt;br /&gt;
            lY8 = ( lY &amp;amp; 0x80000000 );&lt;br /&gt;
            lX4 = ( lX &amp;amp; 0x40000000 );&lt;br /&gt;
            lY4 = ( lY &amp;amp; 0x40000000 );&lt;br /&gt;
            lResult = ( lX &amp;amp; 0x3FFFFFFF ) + ( lY &amp;amp; 0x3FFFFFFF );&lt;br /&gt;
            if ( lX4 &amp;amp; lY4 ) return ( lResult ^ 0x80000000 ^ lX8 ^ lY8 );&lt;br /&gt;
            if ( lX4 | lY4 ) {&lt;br /&gt;
                if ( lResult &amp;amp; 0x40000000 ) return ( lResult ^ 0xC0000000 ^ lX8 ^ lY8 );&lt;br /&gt;
                else return ( lResult ^ 0x40000000 ^ lX8 ^ lY8 );&lt;br /&gt;
            } else return ( lResult ^ lX8 ^ lY8 );&lt;br /&gt;
        }&lt;br /&gt;
        function F(x,y,z) { return (x &amp;amp; y) | ((~x) &amp;amp; z); }&lt;br /&gt;
        function G(x,y,z) { return (x &amp;amp; z) | (y &amp;amp; (~z)); }&lt;br /&gt;
        function H(x,y,z) { return (x ^ y ^ z); }&lt;br /&gt;
        function I(x,y,z) { return (y ^ (x | (~z))); }&lt;br /&gt;
        function FF(a,b,c,d,x,s,ac) {&lt;br /&gt;
            a = addUnsigned(a, addUnsigned(addUnsigned(F(b, c, d), x), ac));&lt;br /&gt;
            return addUnsigned(rotateLeft(a, s), b);&lt;br /&gt;
        }&lt;br /&gt;
        function GG(a,b,c,d,x,s,ac) {&lt;br /&gt;
            a = addUnsigned(a, addUnsigned(addUnsigned(G(b, c, d), x), ac));&lt;br /&gt;
            return addUnsigned(rotateLeft(a, s), b);&lt;br /&gt;
        }&lt;br /&gt;
        function HH(a,b,c,d,x,s,ac) {&lt;br /&gt;
            a = addUnsigned(a, addUnsigned(addUnsigned(H(b, c, d), x), ac));&lt;br /&gt;
            return addUnsigned(rotateLeft(a, s), b);&lt;br /&gt;
        }&lt;br /&gt;
        function II(a,b,c,d,x,s,ac) {&lt;br /&gt;
            a = addUnsigned(a, addUnsigned(addUnsigned(I(b, c, d), x), ac));&lt;br /&gt;
            return addUnsigned(rotateLeft(a, s), b);&lt;br /&gt;
        }&lt;br /&gt;
        function convertToWordArray(string) {&lt;br /&gt;
            var lWordCount;&lt;br /&gt;
            var lMessageLength = string.length;&lt;br /&gt;
            var lNumberOfWords_temp1 = lMessageLength + 8;&lt;br /&gt;
            var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64)) / 64;&lt;br /&gt;
            var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16;&lt;br /&gt;
            var lWordArray = Array(lNumberOfWords - 1);&lt;br /&gt;
            var lBytePosition = 0;&lt;br /&gt;
            var lByteCount = 0;&lt;br /&gt;
            while (lByteCount &amp;lt; lMessageLength) {&lt;br /&gt;
                lWordCount = (lByteCount - (lByteCount % 4)) / 4;&lt;br /&gt;
                lBytePosition = (lByteCount % 4) * 8;&lt;br /&gt;
                lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount) &amp;lt;&amp;lt; lBytePosition));&lt;br /&gt;
                lByteCount++;&lt;br /&gt;
            }&lt;br /&gt;
            lWordCount = (lByteCount - (lByteCount % 4)) / 4;&lt;br /&gt;
            lBytePosition = (lByteCount % 4) * 8;&lt;br /&gt;
            lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 &amp;lt;&amp;lt; lBytePosition);&lt;br /&gt;
            lWordArray[lNumberOfWords - 2] = lMessageLength &amp;lt;&amp;lt; 3;&lt;br /&gt;
            lWordArray[lNumberOfWords - 1] = lMessageLength &amp;gt;&amp;gt;&amp;gt; 29;&lt;br /&gt;
            return lWordArray;&lt;br /&gt;
        }&lt;br /&gt;
        function wordToHex(lValue) {&lt;br /&gt;
            var WordToHexValue = &amp;quot;&amp;quot;, WordToHexValue_temp = &amp;quot;&amp;quot;, lByte, lCount;&lt;br /&gt;
            for (lCount = 0; lCount &amp;lt;= 3; lCount++) {&lt;br /&gt;
                lByte = (lValue &amp;gt;&amp;gt;&amp;gt; (lCount * 8)) &amp;amp; 255;&lt;br /&gt;
                WordToHexValue_temp = &amp;quot;0&amp;quot; + lByte.toString(16);&lt;br /&gt;
                WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length - 2, 2);&lt;br /&gt;
            }&lt;br /&gt;
            return WordToHexValue;&lt;br /&gt;
        }&lt;br /&gt;
        var x = Array();&lt;br /&gt;
        var k, AA, BB, CC, DD, a, b, c, d;&lt;br /&gt;
        var S11=7, S12=12, S13=17, S14=22;&lt;br /&gt;
        var S21=5, S22=9 , S23=14, S24=20;&lt;br /&gt;
        var S31=4, S32=11, S33=16, S34=23;&lt;br /&gt;
        var S41=6, S42=10, S43=15, S44=21;&lt;br /&gt;
        var utf8Str = unescape(encodeURIComponent(string));&lt;br /&gt;
        x = convertToWordArray(utf8Str);&lt;br /&gt;
        a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;&lt;br /&gt;
        for (k = 0; k &amp;lt; x.length; k += 16) {&lt;br /&gt;
            AA = a; BB = b; CC = c; DD = d;&lt;br /&gt;
            a = FF(a,b,c,d,x[k+0], S11,0xD76AA478); d = FF(d,a,b,c,x[k+1], S12,0xE8C7B756);&lt;br /&gt;
            c = FF(c,d,a,b,x[k+2], S13,0x242070DB); b = FF(b,c,d,a,x[k+3], S14,0xC1BDCEEE);&lt;br /&gt;
            a = FF(a,b,c,d,x[k+4], S11,0xF57C0FAF); d = FF(d,a,b,c,x[k+5], S12,0x4787C62A);&lt;br /&gt;
            c = FF(c,d,a,b,x[k+6], S13,0xA8304613); b = FF(b,c,d,a,x[k+7], S14,0xFD469501);&lt;br /&gt;
            a = FF(a,b,c,d,x[k+8], S11,0x698098D8); d = FF(d,a,b,c,x[k+9], S12,0x8B44F7AF);&lt;br /&gt;
            c = FF(c,d,a,b,x[k+10],S13,0xFFFF5BB1); b = FF(b,c,d,a,x[k+11],S14,0x895CD7BE);&lt;br /&gt;
            a = FF(a,b,c,d,x[k+12],S11,0x6B901122); d = FF(d,a,b,c,x[k+13],S12,0xFD987193);&lt;br /&gt;
            c = FF(c,d,a,b,x[k+14],S13,0xA679438E); b = FF(b,c,d,a,x[k+15],S14,0x49B40821);&lt;br /&gt;
            a = GG(a,b,c,d,x[k+1], S21,0xF61E2562); d = GG(d,a,b,c,x[k+6], S22,0xC040B340);&lt;br /&gt;
            c = GG(c,d,a,b,x[k+11],S23,0x265E5A51); b = GG(b,c,d,a,x[k+0], S24,0xE9B6C7AA);&lt;br /&gt;
            a = GG(a,b,c,d,x[k+5], S21,0xD62F105D); d = GG(d,a,b,c,x[k+10],S22,0x02441453);&lt;br /&gt;
            c = GG(c,d,a,b,x[k+15],S23,0xD8A1E681); b = GG(b,c,d,a,x[k+4], S24,0xE7D3FBC8);&lt;br /&gt;
            a = GG(a,b,c,d,x[k+9], S21,0x21E1CDE6); d = GG(d,a,b,c,x[k+14],S22,0xC33707D6);&lt;br /&gt;
            c = GG(c,d,a,b,x[k+3], S23,0xF4D50D87); b = GG(b,c,d,a,x[k+8], S24,0x455A14ED);&lt;br /&gt;
            a = GG(a,b,c,d,x[k+13],S21,0xA9E3E905); d = GG(d,a,b,c,x[k+2], S22,0xFCEFA3F8);&lt;br /&gt;
            c = GG(c,d,a,b,x[k+7], S23,0x676F02D9); b = GG(b,c,d,a,x[k+12],S24,0x8D2A4C8A);&lt;br /&gt;
            a = HH(a,b,c,d,x[k+5], S31,0xFFFA3942); d = HH(d,a,b,c,x[k+8], S32,0x8771F681);&lt;br /&gt;
            c = HH(c,d,a,b,x[k+11],S33,0x6D9D6122); b = HH(b,c,d,a,x[k+14],S34,0xFDE5380C);&lt;br /&gt;
            a = HH(a,b,c,d,x[k+1], S31,0xA4BEEA44); d = HH(d,a,b,c,x[k+4], S32,0x4BDECFA9);&lt;br /&gt;
            c = HH(c,d,a,b,x[k+7], S33,0xF6BB4B60); b = HH(b,c,d,a,x[k+10],S34,0xBEBFBC70);&lt;br /&gt;
            a = HH(a,b,c,d,x[k+13],S31,0x289B7EC6); d = HH(d,a,b,c,x[k+0], S32,0xEAA127FA);&lt;br /&gt;
            c = HH(c,d,a,b,x[k+3], S33,0xD4EF3085); b = HH(b,c,d,a,x[k+6], S34,0x04881D05);&lt;br /&gt;
            a = HH(a,b,c,d,x[k+9], S31,0xD9D4D039); d = HH(d,a,b,c,x[k+12],S32,0xE6DB99E5);&lt;br /&gt;
            c = HH(c,d,a,b,x[k+15],S33,0x1FA27CF8); b = HH(b,c,d,a,x[k+2], S34,0xC4AC5665);&lt;br /&gt;
            a = II(a,b,c,d,x[k+0], S41,0xF4292244); d = II(d,a,b,c,x[k+7], S42,0x432AFF97);&lt;br /&gt;
            c = II(c,d,a,b,x[k+14],S43,0xAB9423A7); b = II(b,c,d,a,x[k+5], S44,0xFC93A039);&lt;br /&gt;
            a = II(a,b,c,d,x[k+12],S41,0x655B59C3); d = II(d,a,b,c,x[k+3], S42,0x8F0CCC92);&lt;br /&gt;
            c = II(c,d,a,b,x[k+10],S43,0xFFEFF47D); b = II(b,c,d,a,x[k+1], S44,0x85845DD1);&lt;br /&gt;
            a = II(a,b,c,d,x[k+8], S41,0x6FA87E4F); d = II(d,a,b,c,x[k+15],S42,0xFE2CE6E0);&lt;br /&gt;
            c = II(c,d,a,b,x[k+6], S43,0xA3014314); b = II(b,c,d,a,x[k+4], S44,0x4E0811A1);&lt;br /&gt;
            a = addUnsigned(a, AA); b = addUnsigned(b, BB); c = addUnsigned(c, CC); d = addUnsigned(d, DD);&lt;br /&gt;
        }&lt;br /&gt;
        return (wordToHex(a) + wordToHex(b) + wordToHex(c) + wordToHex(d)).toLowerCase();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var memoryCache = {};&lt;br /&gt;
&lt;br /&gt;
    function detectStore() {&lt;br /&gt;
        var stores = [ &#039;localStorage&#039;, &#039;sessionStorage&#039; ];&lt;br /&gt;
        for ( var i = 0; i &amp;lt; stores.length; i++ ) {&lt;br /&gt;
            try {&lt;br /&gt;
                var s = window[ stores[i] ];&lt;br /&gt;
                s.setItem( &#039;__wdsparql_test__&#039;, &#039;1&#039; );&lt;br /&gt;
                s.removeItem( &#039;__wdsparql_test__&#039; );&lt;br /&gt;
                return s;&lt;br /&gt;
            } catch ( e ) { /* try next */ }&lt;br /&gt;
        }&lt;br /&gt;
        return null;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var store = detectStore();&lt;br /&gt;
&lt;br /&gt;
    function getCachedRecord( sparql ) {&lt;br /&gt;
        var key = &#039;wdsparql:&#039; + hashKey( sparql );&lt;br /&gt;
        if ( store ) {&lt;br /&gt;
            try {&lt;br /&gt;
                var raw = store.getItem( key );&lt;br /&gt;
                if ( raw ) { return JSON.parse( raw ); }&lt;br /&gt;
            } catch ( e ) {}&lt;br /&gt;
        }&lt;br /&gt;
        return memoryCache[ key ] || null;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function setCachedRecord( sparql, data ) {&lt;br /&gt;
        var key = &#039;wdsparql:&#039; + hashKey( sparql ),&lt;br /&gt;
            entry = { ts: Date.now(), data: data };&lt;br /&gt;
&lt;br /&gt;
        memoryCache[ key ] = entry;&lt;br /&gt;
&lt;br /&gt;
        if ( store ) {&lt;br /&gt;
            try {&lt;br /&gt;
                store.setItem( key, JSON.stringify( entry ) );&lt;br /&gt;
            } catch ( e ) {&lt;br /&gt;
                try {&lt;br /&gt;
                    // Prune old keys on storage quota hit&lt;br /&gt;
                    for ( var i = store.length - 1; i &amp;gt;= 0; i-- ) {&lt;br /&gt;
                        var k = store.key( i );&lt;br /&gt;
                        if ( k &amp;amp;&amp;amp; k.indexOf( &#039;wdsparql:&#039; ) === 0 ) { store.removeItem( k ); }&lt;br /&gt;
                    }&lt;br /&gt;
                    store.setItem( key, JSON.stringify( entry ) );&lt;br /&gt;
                } catch ( e2 ) {}&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // --- Concurrent Request Queue&lt;br /&gt;
    var inFlight = {}, queue = [], active = 0;&lt;br /&gt;
&lt;br /&gt;
    function pump() {&lt;br /&gt;
        while ( active &amp;lt; SPARQL_MAX_PARALLEL &amp;amp;&amp;amp; queue.length ) {&lt;br /&gt;
            var job = queue.shift();&lt;br /&gt;
            active++;&lt;br /&gt;
            runNetworkQuery( job.sparql ).then(&lt;br /&gt;
                function ( data ) { active--; pump(); job.resolve( data ); },&lt;br /&gt;
                function ( err )  { active--; pump(); job.reject( err ); }&lt;br /&gt;
            );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function enqueue( sparql ) {&lt;br /&gt;
        var key = hashKey( sparql );&lt;br /&gt;
        if ( inFlight[ key ] ) { return inFlight[ key ]; }&lt;br /&gt;
&lt;br /&gt;
        var p = new Promise( function ( resolve, reject ) {&lt;br /&gt;
            queue.push( { sparql: sparql, resolve: resolve, reject: reject } );&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        var cleaned = p.then(&lt;br /&gt;
            function ( result ) { delete inFlight[ key ]; return result; },&lt;br /&gt;
            function ( err )    { delete inFlight[ key ]; throw err; }&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
        inFlight[ key ] = cleaned;&lt;br /&gt;
        pump();&lt;br /&gt;
        return cleaned;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function runNetworkQuery( sparql, attempt ) {&lt;br /&gt;
        attempt = attempt || 0;&lt;br /&gt;
        var controller = ( typeof AbortController !== &#039;undefined&#039; ) ? new AbortController() : null,&lt;br /&gt;
            timer = controller ? setTimeout( function () { controller.abort(); }, SPARQL_TIMEOUT ) : null,&lt;br /&gt;
            fetchUrl = &#039;https://query.wikidata.org/sparql?format=json&amp;amp;query=&#039; + encodeURIComponent( sparql );&lt;br /&gt;
&lt;br /&gt;
        return fetch( fetchUrl, {&lt;br /&gt;
            headers: { Accept: &#039;application/sparql-results+json&#039; },&lt;br /&gt;
            signal: controller ? controller.signal : undefined&lt;br /&gt;
        } )&lt;br /&gt;
            .then( function ( r ) {&lt;br /&gt;
                if ( timer ) { clearTimeout( timer ); }&lt;br /&gt;
&lt;br /&gt;
                if ( ( r.status === 429 || r.status === 503 ) &amp;amp;&amp;amp; attempt &amp;lt; SPARQL_RETRY_MAX ) {&lt;br /&gt;
                    var wait = SPARQL_RETRY_BASE * Math.pow( 2, attempt ),&lt;br /&gt;
                        retryAfter = r.headers.get( &#039;Retry-After&#039; );&lt;br /&gt;
                    if ( retryAfter &amp;amp;&amp;amp; !isNaN( +retryAfter ) ) { wait = ( +retryAfter ) * 1000; }&lt;br /&gt;
                    return new Promise( function ( resolve ) { setTimeout( resolve, wait ); } )&lt;br /&gt;
                        .then( function () { return runNetworkQuery( sparql, attempt + 1 ); } );&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                if ( !r.ok ) { throw new Error( &#039;HTTP &#039; + r.status ); }&lt;br /&gt;
                return r.json();&lt;br /&gt;
            } )&lt;br /&gt;
            .then( function ( data ) {&lt;br /&gt;
                setCachedRecord( sparql, data );&lt;br /&gt;
                return data;&lt;br /&gt;
            } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Direct upload.wikimedia.org thumbnail construction bypassing Special:FilePath redirects&lt;br /&gt;
    function commonsThumbUrl( value, width ) {&lt;br /&gt;
        var idx = value.indexOf( COMMONS_MARKER );&lt;br /&gt;
        if ( idx === -1 ) return value;&lt;br /&gt;
&lt;br /&gt;
        var filename = decodeURIComponent( value.substring( idx + COMMONS_MARKER.length ) ).replace( / /g, &#039;_&#039; ),&lt;br /&gt;
            hash = md5( filename ),&lt;br /&gt;
            a = hash.substr( 0, 1 ),&lt;br /&gt;
            b = hash.substr( 0, 2 );&lt;br /&gt;
&lt;br /&gt;
        return &#039;https://upload.wikimedia.org/wikipedia/commons/thumb/&#039; + a + &#039;/&#039; + b + &#039;/&#039; + encodeURIComponent( filename ) + &#039;/&#039; + width + &#039;px-&#039; + encodeURIComponent( filename );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function renderTable( data, title ) {&lt;br /&gt;
        var vars = data.head.vars,&lt;br /&gt;
            rows = data.results.bindings,&lt;br /&gt;
            vLen = vars.length,&lt;br /&gt;
            html = [];&lt;br /&gt;
&lt;br /&gt;
        if ( title ) {&lt;br /&gt;
            html.push( &#039;&amp;lt;h3&amp;gt;&#039;, escapeHtml( title ), &#039;&amp;lt;/h3&amp;gt;&#039; );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        html.push( &#039;&amp;lt;table class=&amp;quot;wikitable sortable&amp;quot;&amp;gt;&amp;lt;thead&amp;gt;&amp;lt;tr&amp;gt;&#039; );&lt;br /&gt;
        for ( var i = 0; i &amp;lt; vLen; i++ ) {&lt;br /&gt;
            html.push( &#039;&amp;lt;th&amp;gt;&#039;, escapeHtml( vars[i].replace( /_/g, &#039; &#039; ) ), &#039;&amp;lt;/th&amp;gt;&#039; );&lt;br /&gt;
        }&lt;br /&gt;
        html.push( &#039;&amp;lt;/tr&amp;gt;&amp;lt;/thead&amp;gt;&amp;lt;tbody&amp;gt;&#039; );&lt;br /&gt;
&lt;br /&gt;
        for ( var r = 0, rLen = rows.length; r &amp;lt; rLen; r++ ) {&lt;br /&gt;
            var row = rows[r];&lt;br /&gt;
            html.push( &#039;&amp;lt;tr&amp;gt;&#039; );&lt;br /&gt;
            for ( var c = 0; c &amp;lt; vLen; c++ ) {&lt;br /&gt;
                var v = vars[c],&lt;br /&gt;
                    val = row[v] ? row[v].value : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
                if ( val.indexOf( COMMONS_MARKER ) !== -1 ) {&lt;br /&gt;
                    var thumb = commonsThumbUrl( val, 100 );&lt;br /&gt;
                    html.push(&lt;br /&gt;
                        &#039;&amp;lt;td&amp;gt;&amp;lt;img src=&amp;quot;&#039;, escapeHtml( thumb ), &#039;&amp;quot; style=&amp;quot;max-height:80px;&amp;quot; alt=&amp;quot;&amp;quot; loading=&amp;quot;lazy&amp;quot; &#039;,&lt;br /&gt;
                        &#039;onerror=&amp;quot;this.onerror=null;this.replaceWith(document.createTextNode(\&#039;—\&#039;));&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
                    );&lt;br /&gt;
                } else if ( val.indexOf( WIKIDATA_PREFIX ) === 0 || val.indexOf( WIKIDATA_HTTPS ) === 0 ) {&lt;br /&gt;
                    var qid = val.substring( val.lastIndexOf( &#039;/&#039; ) + 1 );&lt;br /&gt;
                    html.push( &#039;&amp;lt;td&amp;gt;&amp;lt;a href=&amp;quot;https://www.wikidata.org/wiki/&#039;, qid, &#039;&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;&#039;, qid, &#039;&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&#039; );&lt;br /&gt;
                } else {&lt;br /&gt;
                    html.push( &#039;&amp;lt;td&amp;gt;&#039;, escapeHtml( val ), &#039;&amp;lt;/td&amp;gt;&#039; );&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            html.push( &#039;&amp;lt;/tr&amp;gt;&#039; );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        html.push( &#039;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&#039; );&lt;br /&gt;
        return html.join( &#039;&#039; );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function processTableElement( el ) {&lt;br /&gt;
        var sparql = el.getAttribute( &#039;data-sparql&#039; ),&lt;br /&gt;
            title  = el.getAttribute( &#039;data-title&#039; );&lt;br /&gt;
&lt;br /&gt;
        if ( !sparql ) { return Promise.resolve( null ); }&lt;br /&gt;
&lt;br /&gt;
        var record = getCachedRecord( sparql ),&lt;br /&gt;
            now = Date.now(),&lt;br /&gt;
            hasFreshCache = record &amp;amp;&amp;amp; ( now - record.ts &amp;lt;= SPARQL_CACHE_TTL ),&lt;br /&gt;
            hasStaleCache = record &amp;amp;&amp;amp; ( now - record.ts &amp;lt;= SPARQL_STALE_TTL );&lt;br /&gt;
&lt;br /&gt;
        // Scenario 1: Fresh cache available -&amp;gt; Render instantly with zero network requests&lt;br /&gt;
        if ( hasFreshCache ) {&lt;br /&gt;
            el.innerHTML = renderTable( record.data, title );&lt;br /&gt;
            return Promise.resolve( el );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Scenario 2: Stale cache available -&amp;gt; Render instantly, update in background (SWR)&lt;br /&gt;
        if ( hasStaleCache ) {&lt;br /&gt;
            el.innerHTML = renderTable( record.data, title );&lt;br /&gt;
            enqueue( sparql ).then( function ( freshData ) {&lt;br /&gt;
                // Silently update DOM if data has changed&lt;br /&gt;
                if ( JSON.stringify( freshData ) !== JSON.stringify( record.data ) ) {&lt;br /&gt;
                    el.innerHTML = renderTable( freshData, title );&lt;br /&gt;
                    mw.hook( &#039;wikipage.content&#039; ).fire( $( el ) );&lt;br /&gt;
                }&lt;br /&gt;
            } ).catch( function () { /* Keep stale data on error */ } );&lt;br /&gt;
            return Promise.resolve( el );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Scenario 3: No cache -&amp;gt; Show loading state and fetch&lt;br /&gt;
        el.textContent = &#039;⏳ Loading…&#039;;&lt;br /&gt;
        return enqueue( sparql )&lt;br /&gt;
            .then( function ( data ) {&lt;br /&gt;
                el.innerHTML = renderTable( data, title );&lt;br /&gt;
                return el;&lt;br /&gt;
            } )&lt;br /&gt;
            .catch( function ( err ) {&lt;br /&gt;
                el.textContent = ( err &amp;amp;&amp;amp; err.name === &#039;AbortError&#039; )&lt;br /&gt;
                    ? &#039;⚠️ Timed out loading data.&#039;&lt;br /&gt;
                    : &#039;⚠️ Failed to load (Wikidata may be busy).&#039;;&lt;br /&gt;
            } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        var contextNode = ( $content &amp;amp;&amp;amp; $content[0] ) ? $content[0] : document,&lt;br /&gt;
            tables = contextNode.querySelectorAll( &#039;.wikidata-sparql-table:not([data-loaded])&#039; );&lt;br /&gt;
&lt;br /&gt;
        if ( !tables.length ) { return; }&lt;br /&gt;
&lt;br /&gt;
        var tablesToProcess = [];&lt;br /&gt;
&lt;br /&gt;
        // Lazy-loading with IntersectionObserver (only load tables when near viewport)&lt;br /&gt;
        if ( &#039;IntersectionObserver&#039; in window ) {&lt;br /&gt;
            var observer = new IntersectionObserver( function ( entries, obs ) {&lt;br /&gt;
                entries.forEach( function ( entry ) {&lt;br /&gt;
                    if ( entry.isIntersecting ) {&lt;br /&gt;
                        var el = entry.target;&lt;br /&gt;
                        obs.unobserve( el );&lt;br /&gt;
                        if ( !el.getAttribute( &#039;data-loaded&#039; ) ) {&lt;br /&gt;
                            el.setAttribute( &#039;data-loaded&#039;, &#039;1&#039; );&lt;br /&gt;
                            processTableElement( el ).then( function ( renderedEl ) {&lt;br /&gt;
                                if ( renderedEl ) { mw.hook( &#039;wikipage.content&#039; ).fire( $( renderedEl ) ); }&lt;br /&gt;
                            } );&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                } );&lt;br /&gt;
            }, { rootMargin: &#039;300px 0px&#039; } );&lt;br /&gt;
&lt;br /&gt;
            tables.forEach( function ( el ) { observer.observe( el ); } );&lt;br /&gt;
        } else {&lt;br /&gt;
            // Fallback for older browsers&lt;br /&gt;
            var renderPromises = Array.prototype.map.call( tables, function ( el ) {&lt;br /&gt;
                el.setAttribute( &#039;data-loaded&#039;, &#039;1&#039; );&lt;br /&gt;
                return processTableElement( el );&lt;br /&gt;
            } );&lt;br /&gt;
&lt;br /&gt;
            Promise.all( renderPromises ).then( function ( renderedElements ) {&lt;br /&gt;
                var validElements = renderedElements.filter( Boolean );&lt;br /&gt;
                if ( validElements.length ) {&lt;br /&gt;
                    mw.hook( &#039;wikipage.content&#039; ).fire( $( validElements ) );&lt;br /&gt;
                }&lt;br /&gt;
            } );&lt;br /&gt;
        }&lt;br /&gt;
    } );&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
/* DO NOT ADD CODE BELOW THIS LINE */&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=MediaWiki:Common.js&amp;diff=18627</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=MediaWiki:Common.js&amp;diff=18627"/>
		<updated>2026-09-21T12:45:16Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Tout JavaScript présent ici sera exécuté par tous les utilisateurs à chaque chargement de page. */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally&lt;br /&gt;
 * loaded for all users on every wiki page. If possible create a gadget that is&lt;br /&gt;
 * enabled by default instead of adding it here (since gadgets are fully&lt;br /&gt;
 * optimized ResourceLoader modules with possibility to add dependencies etc.)&lt;br /&gt;
 *&lt;br /&gt;
 * Since Common.js isn&#039;t a gadget, there is no place to declare its&lt;br /&gt;
 * dependencies, so we have to lazy load them with mw.loader.using on demand and&lt;br /&gt;
 * then execute the rest in the callback. In most cases these dependencies will&lt;br /&gt;
 * be loaded (or loading) already and the callback will not be delayed. In case a&lt;br /&gt;
 * dependency hasn&#039;t arrived yet it&#039;ll make sure those are loaded before this.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* global mw, $ */&lt;br /&gt;
/* jshint strict:false, browser:true */&lt;br /&gt;
&lt;br /&gt;
mw.loader.using( [ &#039;mediawiki.util&#039; ] ).then( function () {&lt;br /&gt;
&lt;br /&gt;
    mw.log.deprecate( window, &#039;addPortletLink&#039;, mw.util.addPortletLink, &#039;Use mw.util.addPortletLink instead&#039; );&lt;br /&gt;
&lt;br /&gt;
    var extraCSS = mw.util.getParamValue( &#039;withCSS&#039; ),&lt;br /&gt;
        extraJS  = mw.util.getParamValue( &#039;withJS&#039; );&lt;br /&gt;
&lt;br /&gt;
    if ( extraCSS ) {&lt;br /&gt;
        if ( /^MediaWiki:[^&amp;amp;&amp;lt;&amp;gt;=%#]*\.css$/.test( extraCSS ) ) {&lt;br /&gt;
            mw.loader.load( &#039;/w/index.php?title=&#039; + encodeURIComponent( extraCSS ) + &#039;&amp;amp;action=raw&amp;amp;ctype=text/css&#039;, &#039;text/css&#039; );&lt;br /&gt;
        } else {&lt;br /&gt;
            mw.notify( &#039;Only pages from the MediaWiki namespace are allowed.&#039;, { title: &#039;Invalid withCSS value&#039; } );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( extraJS ) {&lt;br /&gt;
        if ( /^MediaWiki:[^&amp;amp;&amp;lt;&amp;gt;=%#]*\.js$/.test( extraJS ) ) {&lt;br /&gt;
            mw.loader.load( &#039;/w/index.php?title=&#039; + encodeURIComponent( extraJS ) + &#039;&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
        } else {&lt;br /&gt;
            mw.notify( &#039;Only pages from the MediaWiki namespace are allowed.&#039;, { title: &#039;Invalid withJS value&#039; } );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Collapsible tables&lt;br /&gt;
     */&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        var $tables = $content.find( &#039;table.collapsible:not(.mw-collapsible)&#039; );&lt;br /&gt;
        if ( !$tables.length ) { return; }&lt;br /&gt;
&lt;br /&gt;
        $tables.addClass( &#039;mw-collapsible&#039; ).each( function () {&lt;br /&gt;
            if ( $( this ).hasClass( &#039;collapsed&#039; ) ) {&lt;br /&gt;
                $( this ).addClass( &#039;mw-collapsed&#039; );&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        mw.loader.using( &#039;jquery.makeCollapsible&#039; ).then( function () {&lt;br /&gt;
            $tables.makeCollapsible();&lt;br /&gt;
        } );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    mw.hook( &#039;wikipage.collapsibleContent&#039; ).add( function ( $collapsibleContent ) {&lt;br /&gt;
        var autoCollapseThreshold = 2,&lt;br /&gt;
            hasOuter = $collapsibleContent.parents( &#039;.outercollapse&#039; ).length &amp;gt; 0;&lt;br /&gt;
&lt;br /&gt;
        $collapsibleContent.each( function () {&lt;br /&gt;
            var $element = $( this );&lt;br /&gt;
&lt;br /&gt;
            if ( $element.hasClass( &#039;collapsible&#039; ) ) {&lt;br /&gt;
                $element.find( &#039;tr:first &amp;gt; th:first&#039; ).prepend( $element.find( &#039;tr:first &amp;gt; * &amp;gt; .mw-collapsible-toggle&#039; ) );&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            if ( $collapsibleContent.length &amp;gt;= autoCollapseThreshold &amp;amp;&amp;amp; $element.hasClass( &#039;autocollapse&#039; ) ) {&lt;br /&gt;
                $element.data( &#039;mw-collapsible&#039; ).collapse();&lt;br /&gt;
            } else if ( $element.hasClass( &#039;innercollapse&#039; ) &amp;amp;&amp;amp; hasOuter ) {&lt;br /&gt;
                $element.data( &#039;mw-collapsible&#039; ).collapse();&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            var $toggle = $element.find( &#039;.mw-collapsible-toggle&#039; );&lt;br /&gt;
            if ( $toggle.length &amp;amp;&amp;amp; $toggle.parent()[0].style.color ) {&lt;br /&gt;
                $toggle.css( &#039;color&#039;, &#039;inherit&#039; ).find( &#039;.mw-collapsible-text&#039; ).css( &#039;color&#039;, &#039;inherit&#039; );&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Force interwiki links to open in a new tab&lt;br /&gt;
     */&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        $content.find( &#039;a.extiw&#039; ).attr( &#039;target&#039;, &#039;_blank&#039; ).attr( &#039;rel&#039;, &#039;noopener noreferrer&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * High-Performance Wikidata SPARQL Table Engine&lt;br /&gt;
     */&lt;br /&gt;
    var WIKIDATA_PREFIX     = &#039;http://www.wikidata.org/entity/&#039;,&lt;br /&gt;
        WIKIDATA_HTTPS      = &#039;https://www.wikidata.org/entity/&#039;,&lt;br /&gt;
        COMMONS_MARKER      = &#039;Special:FilePath/&#039;,&lt;br /&gt;
        SPARQL_CACHE_TTL    = 2 * 60 * 1000,       // 2 mins: serve cached version without network request&lt;br /&gt;
        SPARQL_STALE_TTL    = 6 * 60 * 60 * 1000,  // 6 hours: serve stale instantly, revalidate in background&lt;br /&gt;
        SPARQL_TIMEOUT      = 15000,               // 15s timeout&lt;br /&gt;
        SPARQL_MAX_PARALLEL = 2,                   // Concurrency limit&lt;br /&gt;
        SPARQL_RETRY_MAX    = 2,&lt;br /&gt;
        SPARQL_RETRY_BASE   = 1000;&lt;br /&gt;
&lt;br /&gt;
    function escapeHtml( text ) {&lt;br /&gt;
        return String( text )&lt;br /&gt;
            .replace( /&amp;amp;/g, &#039;&amp;amp;amp;&#039; )&lt;br /&gt;
            .replace( /&amp;lt;/g, &#039;&amp;amp;lt;&#039; )&lt;br /&gt;
            .replace( /&amp;gt;/g, &#039;&amp;amp;gt;&#039; )&lt;br /&gt;
            .replace( /&amp;quot;/g, &#039;&amp;amp;quot;&#039; )&lt;br /&gt;
            .replace( /&#039;/g, &#039;&amp;amp;#39;&#039; );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function hashKey( str ) {&lt;br /&gt;
        var h = 0x811c9dc5;&lt;br /&gt;
        for ( var i = 0; i &amp;lt; str.length; i++ ) {&lt;br /&gt;
            h ^= str.charCodeAt( i );&lt;br /&gt;
            h = ( h * 0x01000193 ) &amp;gt;&amp;gt;&amp;gt; 0;&lt;br /&gt;
        }&lt;br /&gt;
        return h.toString( 36 );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* Fast MD5 implementation for converting Commons filenames directly to upload.wikimedia.org static URLs */&lt;br /&gt;
    function md5( string ) {&lt;br /&gt;
        function rotateLeft( lValue, iShiftBits ) {&lt;br /&gt;
            return ( lValue &amp;lt;&amp;lt; iShiftBits ) | ( lValue &amp;gt;&amp;gt;&amp;gt; ( 32 - iShiftBits ) );&lt;br /&gt;
        }&lt;br /&gt;
        function addUnsigned( lX, lY ) {&lt;br /&gt;
            var lX4, lY4, lX8, lY8, lResult;&lt;br /&gt;
            lX8 = ( lX &amp;amp; 0x80000000 );&lt;br /&gt;
            lY8 = ( lY &amp;amp; 0x80000000 );&lt;br /&gt;
            lX4 = ( lX &amp;amp; 0x40000000 );&lt;br /&gt;
            lY4 = ( lY &amp;amp; 0x40000000 );&lt;br /&gt;
            lResult = ( lX &amp;amp; 0x3FFFFFFF ) + ( lY &amp;amp; 0x3FFFFFFF );&lt;br /&gt;
            if ( lX4 &amp;amp; lY4 ) return ( lResult ^ 0x80000000 ^ lX8 ^ lY8 );&lt;br /&gt;
            if ( lX4 | lY4 ) {&lt;br /&gt;
                if ( lResult &amp;amp; 0x40000000 ) return ( lResult ^ 0xC0000000 ^ lX8 ^ lY8 );&lt;br /&gt;
                else return ( lResult ^ 0x40000000 ^ lX8 ^ lY8 );&lt;br /&gt;
            } else return ( lResult ^ lX8 ^ lY8 );&lt;br /&gt;
        }&lt;br /&gt;
        function F(x,y,z) { return (x &amp;amp; y) | ((~x) &amp;amp; z); }&lt;br /&gt;
        function G(x,y,z) { return (x &amp;amp; z) | (y &amp;amp; (~z)); }&lt;br /&gt;
        function H(x,y,z) { return (x ^ y ^ z); }&lt;br /&gt;
        function I(x,y,z) { return (y ^ (x | (~z))); }&lt;br /&gt;
        function FF(a,b,c,d,x,s,ac) {&lt;br /&gt;
            a = addUnsigned(a, addUnsigned(addUnsigned(F(b, c, d), x), ac));&lt;br /&gt;
            return addUnsigned(rotateLeft(a, s), b);&lt;br /&gt;
        }&lt;br /&gt;
        function GG(a,b,c,d,x,s,ac) {&lt;br /&gt;
            a = addUnsigned(a, addUnsigned(addUnsigned(G(b, c, d), x), ac));&lt;br /&gt;
            return addUnsigned(rotateLeft(a, s), b);&lt;br /&gt;
        }&lt;br /&gt;
        function HH(a,b,c,d,x,s,ac) {&lt;br /&gt;
            a = addUnsigned(a, addUnsigned(addUnsigned(H(b, c, d), x), ac));&lt;br /&gt;
            return addUnsigned(rotateLeft(a, s), b);&lt;br /&gt;
        }&lt;br /&gt;
        function II(a,b,c,d,x,s,ac) {&lt;br /&gt;
            a = addUnsigned(a, addUnsigned(addUnsigned(I(b, c, d), x), ac));&lt;br /&gt;
            return addUnsigned(rotateLeft(a, s), b);&lt;br /&gt;
        }&lt;br /&gt;
        function convertToWordArray(string) {&lt;br /&gt;
            var lWordCount;&lt;br /&gt;
            var lMessageLength = string.length;&lt;br /&gt;
            var lNumberOfWords_temp1 = lMessageLength + 8;&lt;br /&gt;
            var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64)) / 64;&lt;br /&gt;
            var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16;&lt;br /&gt;
            var lWordArray = Array(lNumberOfWords - 1);&lt;br /&gt;
            var lBytePosition = 0;&lt;br /&gt;
            var lByteCount = 0;&lt;br /&gt;
            while (lByteCount &amp;lt; lMessageLength) {&lt;br /&gt;
                lWordCount = (lByteCount - (lByteCount % 4)) / 4;&lt;br /&gt;
                lBytePosition = (lByteCount % 4) * 8;&lt;br /&gt;
                lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount) &amp;lt;&amp;lt; lBytePosition));&lt;br /&gt;
                lByteCount++;&lt;br /&gt;
            }&lt;br /&gt;
            lWordCount = (lByteCount - (lByteCount % 4)) / 4;&lt;br /&gt;
            lBytePosition = (lByteCount % 4) * 8;&lt;br /&gt;
            lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 &amp;lt;&amp;lt; lBytePosition);&lt;br /&gt;
            lWordArray[lNumberOfWords - 2] = lMessageLength &amp;lt;&amp;lt; 3;&lt;br /&gt;
            lWordArray[lNumberOfWords - 1] = lMessageLength &amp;gt;&amp;gt;&amp;gt; 29;&lt;br /&gt;
            return lWordArray;&lt;br /&gt;
        }&lt;br /&gt;
        function wordToHex(lValue) {&lt;br /&gt;
            var WordToHexValue = &amp;quot;&amp;quot;, WordToHexValue_temp = &amp;quot;&amp;quot;, lByte, lCount;&lt;br /&gt;
            for (lCount = 0; lCount &amp;lt;= 3; lCount++) {&lt;br /&gt;
                lByte = (lValue &amp;gt;&amp;gt;&amp;gt; (lCount * 8)) &amp;amp; 255;&lt;br /&gt;
                WordToHexValue_temp = &amp;quot;0&amp;quot; + lByte.toString(16);&lt;br /&gt;
                WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length - 2, 2);&lt;br /&gt;
            }&lt;br /&gt;
            return WordToHexValue;&lt;br /&gt;
        }&lt;br /&gt;
        var x = Array();&lt;br /&gt;
        var k, AA, BB, CC, DD, a, b, c, d;&lt;br /&gt;
        var S11=7, S12=12, S13=17, S14=22;&lt;br /&gt;
        var S21=5, S22=9 , S23=14, S24=20;&lt;br /&gt;
        var S31=4, S32=11, S33=16, S34=23;&lt;br /&gt;
        var S41=6, S42=10, S43=15, S44=21;&lt;br /&gt;
        var utf8Str = unescape(encodeURIComponent(string));&lt;br /&gt;
        x = convertToWordArray(utf8Str);&lt;br /&gt;
        a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;&lt;br /&gt;
        for (k = 0; k &amp;lt; x.length; k += 16) {&lt;br /&gt;
            AA = a; BB = b; CC = c; DD = d;&lt;br /&gt;
            a = FF(a,b,c,d,x[k+0], S11,0xD76AA478); d = FF(d,a,b,c,x[k+1], S12,0xE8C7B756);&lt;br /&gt;
            c = FF(c,d,a,b,x[k+2], S13,0x242070DB); b = FF(b,c,d,a,x[k+3], S14,0xC1BDCEEE);&lt;br /&gt;
            a = FF(a,b,c,d,x[k+4], S11,0xF57C0FAF); d = FF(d,a,b,c,x[k+5], S12,0x4787C62A);&lt;br /&gt;
            c = FF(c,d,a,b,x[k+6], S13,0xA8304613); b = FF(b,c,d,a,x[k+7], S14,0xFD469501);&lt;br /&gt;
            a = FF(a,b,c,d,x[k+8], S11,0x698098D8); d = FF(d,a,b,c,x[k+9], S12,0x8B44F7AF);&lt;br /&gt;
            c = FF(c,d,a,b,x[k+10],S13,0xFFFF5BB1); b = FF(b,c,d,a,x[k+11],S14,0x895CD7BE);&lt;br /&gt;
            a = FF(a,b,c,d,x[k+12],S11,0x6B901122); d = FF(d,a,b,c,x[k+13],S12,0xFD987193);&lt;br /&gt;
            c = FF(c,d,a,b,x[k+14],S13,0xA679438E); b = FF(b,c,d,a,x[k+15],S14,0x49B40821);&lt;br /&gt;
            a = GG(a,b,c,d,x[k+1], S21,0xF61E2562); d = GG(d,a,b,c,x[k+6], S22,0xC040B340);&lt;br /&gt;
            c = GG(c,d,a,b,x[k+11],S23,0x265E5A51); b = GG(b,c,d,a,x[k+0], S24,0xE9B6C7AA);&lt;br /&gt;
            a = GG(a,b,c,d,x[k+5], S21,0xD62F105D); d = GG(d,a,b,c,x[k+10],S22,0x02441453);&lt;br /&gt;
            c = GG(c,d,a,b,x[k+15],S23,0xD8A1E681); b = GG(b,c,d,a,x[k+4], S24,0xE7D3FBC8);&lt;br /&gt;
            a = GG(a,b,c,d,x[k+9], S21,0x21E1CDE6); d = GG(d,a,b,c,x[k+14],S22,0xC33707D6);&lt;br /&gt;
            c = GG(c,d,a,b,x[k+3], S23,0xF4D50D87); b = GG(b,c,d,a,x[k+8], S24,0x455A14ED);&lt;br /&gt;
            a = GG(a,b,c,d,x[k+13],S21,0xA9E3E905); d = GG(d,a,b,c,x[k+2], S22,0xFCEFA3F8);&lt;br /&gt;
            c = GG(c,d,a,b,x[k+7], S23,0x676F02D9); b = GG(b,c,d,a,x[k+12],S24,0x8D2A4C8A);&lt;br /&gt;
            a = HH(a,b,c,d,x[k+5], S31,0xFFFA3942); d = HH(d,a,b,c,x[k+8], S32,0x8771F681);&lt;br /&gt;
            c = HH(c,d,a,b,x[k+11],S33,0x6D9D6122); b = HH(b,c,d,a,x[k+14],S34,0xFDE5380C);&lt;br /&gt;
            a = HH(a,b,c,d,x[k+1], S31,0xA4BEEA44); d = HH(d,a,b,c,x[k+4], S32,0x4BDECFA9);&lt;br /&gt;
            c = HH(c,d,a,b,x[k+7], S33,0xF6BB4B60); b = HH(b,c,d,a,x[k+10],S34,0xBEBFBC70);&lt;br /&gt;
            a = HH(a,b,c,d,x[k+13],S31,0x289B7EC6); d = HH(d,a,b,c,x[k+0], S32,0xEAA127FA);&lt;br /&gt;
            c = HH(c,d,a,b,x[k+3], S33,0xD4EF3085); b = HH(b,c,d,a,x[k+6], S34,0x04881D05);&lt;br /&gt;
            a = HH(a,b,c,d,x[k+9], S31,0xD9D4D039); d = HH(d,a,b,c,x[k+12],S32,0xE6DB99E5);&lt;br /&gt;
            c = HH(c,d,a,b,x[k+15],S33,0x1FA27CF8); b = HH(b,c,d,a,x[k+2], S34,0xC4AC5665);&lt;br /&gt;
            a = II(a,b,c,d,x[k+0], S41,0xF4292244); d = II(d,a,b,c,x[k+7], S42,0x432AFF97);&lt;br /&gt;
            c = II(c,d,a,b,x[k+14],S43,0xAB9423A7); b = II(b,c,d,a,x[k+5], S44,0xFC93A039);&lt;br /&gt;
            a = II(a,b,c,d,x[k+12],S41,0x655B59C3); d = II(d,a,b,c,x[k+3], S42,0x8F0CCC92);&lt;br /&gt;
            c = II(c,d,a,b,x[k+10],S43,0xFFEFF47D); b = II(b,c,d,a,x[k+1], S44,0x85845DD1);&lt;br /&gt;
            a = II(a,b,c,d,x[k+8], S41,0x6FA87E4F); d = II(d,a,b,c,x[k+15],S42,0xFE2CE6E0);&lt;br /&gt;
            c = II(c,d,a,b,x[k+6], S43,0xA3014314); b = II(b,c,d,a,x[k+4], S44,0x4E0811A1);&lt;br /&gt;
            a = addUnsigned(a, AA); b = addUnsigned(b, BB); c = addUnsigned(c, CC); d = addUnsigned(d, DD);&lt;br /&gt;
        }&lt;br /&gt;
        return (wordToHex(a) + wordToHex(b) + wordToHex(c) + wordToHex(d)).toLowerCase();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var memoryCache = {};&lt;br /&gt;
&lt;br /&gt;
    function detectStore() {&lt;br /&gt;
        var stores = [ &#039;localStorage&#039;, &#039;sessionStorage&#039; ];&lt;br /&gt;
        for ( var i = 0; i &amp;lt; stores.length; i++ ) {&lt;br /&gt;
            try {&lt;br /&gt;
                var s = window[ stores[i] ];&lt;br /&gt;
                s.setItem( &#039;__wdsparql_test__&#039;, &#039;1&#039; );&lt;br /&gt;
                s.removeItem( &#039;__wdsparql_test__&#039; );&lt;br /&gt;
                return s;&lt;br /&gt;
            } catch ( e ) { /* try next */ }&lt;br /&gt;
        }&lt;br /&gt;
        return null;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var store = detectStore();&lt;br /&gt;
&lt;br /&gt;
    function getCachedRecord( sparql ) {&lt;br /&gt;
        var key = &#039;wdsparql:&#039; + hashKey( sparql );&lt;br /&gt;
        if ( store ) {&lt;br /&gt;
            try {&lt;br /&gt;
                var raw = store.getItem( key );&lt;br /&gt;
                if ( raw ) { return JSON.parse( raw ); }&lt;br /&gt;
            } catch ( e ) {}&lt;br /&gt;
        }&lt;br /&gt;
        return memoryCache[ key ] || null;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function setCachedRecord( sparql, data ) {&lt;br /&gt;
        var key = &#039;wdsparql:&#039; + hashKey( sparql ),&lt;br /&gt;
            entry = { ts: Date.now(), data: data };&lt;br /&gt;
&lt;br /&gt;
        memoryCache[ key ] = entry;&lt;br /&gt;
&lt;br /&gt;
        if ( store ) {&lt;br /&gt;
            try {&lt;br /&gt;
                store.setItem( key, JSON.stringify( entry ) );&lt;br /&gt;
            } catch ( e ) {&lt;br /&gt;
                try {&lt;br /&gt;
                    // Prune old keys on storage quota hit&lt;br /&gt;
                    for ( var i = store.length - 1; i &amp;gt;= 0; i-- ) {&lt;br /&gt;
                        var k = store.key( i );&lt;br /&gt;
                        if ( k &amp;amp;&amp;amp; k.indexOf( &#039;wdsparql:&#039; ) === 0 ) { store.removeItem( k ); }&lt;br /&gt;
                    }&lt;br /&gt;
                    store.setItem( key, JSON.stringify( entry ) );&lt;br /&gt;
                } catch ( e2 ) {}&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // --- Concurrent Request Queue&lt;br /&gt;
    var inFlight = {}, queue = [], active = 0;&lt;br /&gt;
&lt;br /&gt;
    function pump() {&lt;br /&gt;
        while ( active &amp;lt; SPARQL_MAX_PARALLEL &amp;amp;&amp;amp; queue.length ) {&lt;br /&gt;
            var job = queue.shift();&lt;br /&gt;
            active++;&lt;br /&gt;
            runNetworkQuery( job.sparql ).then(&lt;br /&gt;
                function ( data ) { active--; pump(); job.resolve( data ); },&lt;br /&gt;
                function ( err )  { active--; pump(); job.reject( err ); }&lt;br /&gt;
            );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function enqueue( sparql ) {&lt;br /&gt;
        var key = hashKey( sparql );&lt;br /&gt;
        if ( inFlight[ key ] ) { return inFlight[ key ]; }&lt;br /&gt;
&lt;br /&gt;
        var p = new Promise( function ( resolve, reject ) {&lt;br /&gt;
            queue.push( { sparql: sparql, resolve: resolve, reject: reject } );&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        var cleaned = p.then(&lt;br /&gt;
            function ( result ) { delete inFlight[ key ]; return result; },&lt;br /&gt;
            function ( err )    { delete inFlight[ key ]; throw err; }&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
        inFlight[ key ] = cleaned;&lt;br /&gt;
        pump();&lt;br /&gt;
        return cleaned;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function runNetworkQuery( sparql, attempt ) {&lt;br /&gt;
        attempt = attempt || 0;&lt;br /&gt;
        var controller = ( typeof AbortController !== &#039;undefined&#039; ) ? new AbortController() : null,&lt;br /&gt;
            timer = controller ? setTimeout( function () { controller.abort(); }, SPARQL_TIMEOUT ) : null,&lt;br /&gt;
            fetchUrl = &#039;https://query.wikidata.org/sparql?format=json&amp;amp;query=&#039; + encodeURIComponent( sparql );&lt;br /&gt;
&lt;br /&gt;
        return fetch( fetchUrl, {&lt;br /&gt;
            headers: { Accept: &#039;application/sparql-results+json&#039; },&lt;br /&gt;
            signal: controller ? controller.signal : undefined&lt;br /&gt;
        } )&lt;br /&gt;
            .then( function ( r ) {&lt;br /&gt;
                if ( timer ) { clearTimeout( timer ); }&lt;br /&gt;
&lt;br /&gt;
                if ( ( r.status === 429 || r.status === 503 ) &amp;amp;&amp;amp; attempt &amp;lt; SPARQL_RETRY_MAX ) {&lt;br /&gt;
                    var wait = SPARQL_RETRY_BASE * Math.pow( 2, attempt ),&lt;br /&gt;
                        retryAfter = r.headers.get( &#039;Retry-After&#039; );&lt;br /&gt;
                    if ( retryAfter &amp;amp;&amp;amp; !isNaN( +retryAfter ) ) { wait = ( +retryAfter ) * 1000; }&lt;br /&gt;
                    return new Promise( function ( resolve ) { setTimeout( resolve, wait ); } )&lt;br /&gt;
                        .then( function () { return runNetworkQuery( sparql, attempt + 1 ); } );&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                if ( !r.ok ) { throw new Error( &#039;HTTP &#039; + r.status ); }&lt;br /&gt;
                return r.json();&lt;br /&gt;
            } )&lt;br /&gt;
            .then( function ( data ) {&lt;br /&gt;
                setCachedRecord( sparql, data );&lt;br /&gt;
                return data;&lt;br /&gt;
            } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Direct upload.wikimedia.org thumbnail construction bypassing Special:FilePath redirects&lt;br /&gt;
    function commonsThumbUrl( value, width ) {&lt;br /&gt;
        var idx = value.indexOf( COMMONS_MARKER );&lt;br /&gt;
        if ( idx === -1 ) return value;&lt;br /&gt;
&lt;br /&gt;
        var filename = decodeURIComponent( value.substring( idx + COMMONS_MARKER.length ) ).replace( / /g, &#039;_&#039; ),&lt;br /&gt;
            hash = md5( filename ),&lt;br /&gt;
            a = hash.substr( 0, 1 ),&lt;br /&gt;
            b = hash.substr( 0, 2 );&lt;br /&gt;
&lt;br /&gt;
        return &#039;https://upload.wikimedia.org/wikipedia/commons/thumb/&#039; + a + &#039;/&#039; + b + &#039;/&#039; + encodeURIComponent( filename ) + &#039;/&#039; + width + &#039;px-&#039; + encodeURIComponent( filename );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function renderTable( data, title ) {&lt;br /&gt;
        var vars = data.head.vars,&lt;br /&gt;
            rows = data.results.bindings,&lt;br /&gt;
            vLen = vars.length,&lt;br /&gt;
            html = [];&lt;br /&gt;
&lt;br /&gt;
        if ( title ) {&lt;br /&gt;
            html.push( &#039;&amp;lt;h3&amp;gt;&#039;, escapeHtml( title ), &#039;&amp;lt;/h3&amp;gt;&#039; );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        html.push( &#039;&amp;lt;table class=&amp;quot;wikitable sortable&amp;quot;&amp;gt;&amp;lt;thead&amp;gt;&amp;lt;tr&amp;gt;&#039; );&lt;br /&gt;
        for ( var i = 0; i &amp;lt; vLen; i++ ) {&lt;br /&gt;
            html.push( &#039;&amp;lt;th&amp;gt;&#039;, escapeHtml( vars[i].replace( /_/g, &#039; &#039; ) ), &#039;&amp;lt;/th&amp;gt;&#039; );&lt;br /&gt;
        }&lt;br /&gt;
        html.push( &#039;&amp;lt;/tr&amp;gt;&amp;lt;/thead&amp;gt;&amp;lt;tbody&amp;gt;&#039; );&lt;br /&gt;
&lt;br /&gt;
        for ( var r = 0, rLen = rows.length; r &amp;lt; rLen; r++ ) {&lt;br /&gt;
            var row = rows[r];&lt;br /&gt;
            html.push( &#039;&amp;lt;tr&amp;gt;&#039; );&lt;br /&gt;
            for ( var c = 0; c &amp;lt; vLen; c++ ) {&lt;br /&gt;
                var v = vars[c],&lt;br /&gt;
                    val = row[v] ? row[v].value : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
                if ( val.indexOf( COMMONS_MARKER ) !== -1 ) {&lt;br /&gt;
                    var thumb = commonsThumbUrl( val, 100 );&lt;br /&gt;
                    html.push(&lt;br /&gt;
                        &#039;&amp;lt;td&amp;gt;&amp;lt;img src=&amp;quot;&#039;, escapeHtml( thumb ), &#039;&amp;quot; style=&amp;quot;max-height:80px;&amp;quot; alt=&amp;quot;&amp;quot; loading=&amp;quot;lazy&amp;quot; &#039;,&lt;br /&gt;
                        &#039;onerror=&amp;quot;this.onerror=null;this.replaceWith(document.createTextNode(\&#039;—\&#039;));&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
                    );&lt;br /&gt;
                } else if ( val.indexOf( WIKIDATA_PREFIX ) === 0 || val.indexOf( WIKIDATA_HTTPS ) === 0 ) {&lt;br /&gt;
                    var qid = val.substring( val.lastIndexOf( &#039;/&#039; ) + 1 );&lt;br /&gt;
                    html.push( &#039;&amp;lt;td&amp;gt;&amp;lt;a href=&amp;quot;https://www.wikidata.org/wiki/&#039;, qid, &#039;&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;&#039;, qid, &#039;&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&#039; );&lt;br /&gt;
                } else {&lt;br /&gt;
                    html.push( &#039;&amp;lt;td&amp;gt;&#039;, escapeHtml( val ), &#039;&amp;lt;/td&amp;gt;&#039; );&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            html.push( &#039;&amp;lt;/tr&amp;gt;&#039; );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        html.push( &#039;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&#039; );&lt;br /&gt;
        return html.join( &#039;&#039; );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function processTableElement( el ) {&lt;br /&gt;
        var sparql = el.getAttribute( &#039;data-sparql&#039; ),&lt;br /&gt;
            title  = el.getAttribute( &#039;data-title&#039; );&lt;br /&gt;
&lt;br /&gt;
        if ( !sparql ) { return Promise.resolve( null ); }&lt;br /&gt;
&lt;br /&gt;
        var record = getCachedRecord( sparql ),&lt;br /&gt;
            now = Date.now(),&lt;br /&gt;
            hasFreshCache = record &amp;amp;&amp;amp; ( now - record.ts &amp;lt;= SPARQL_CACHE_TTL ),&lt;br /&gt;
            hasStaleCache = record &amp;amp;&amp;amp; ( now - record.ts &amp;lt;= SPARQL_STALE_TTL );&lt;br /&gt;
&lt;br /&gt;
        // Scenario 1: Fresh cache available -&amp;gt; Render instantly with zero network requests&lt;br /&gt;
        if ( hasFreshCache ) {&lt;br /&gt;
            el.innerHTML = renderTable( record.data, title );&lt;br /&gt;
            return Promise.resolve( el );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Scenario 2: Stale cache available -&amp;gt; Render instantly, update in background (SWR)&lt;br /&gt;
        if ( hasStaleCache ) {&lt;br /&gt;
            el.innerHTML = renderTable( record.data, title );&lt;br /&gt;
            enqueue( sparql ).then( function ( freshData ) {&lt;br /&gt;
                // Silently update DOM if data has changed&lt;br /&gt;
                if ( JSON.stringify( freshData ) !== JSON.stringify( record.data ) ) {&lt;br /&gt;
                    el.innerHTML = renderTable( freshData, title );&lt;br /&gt;
                    mw.hook( &#039;wikipage.content&#039; ).fire( $( el ) );&lt;br /&gt;
                }&lt;br /&gt;
            } ).catch( function () { /* Keep stale data on error */ } );&lt;br /&gt;
            return Promise.resolve( el );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Scenario 3: No cache -&amp;gt; Show loading state and fetch&lt;br /&gt;
        el.textContent = &#039;⏳ Loading…&#039;;&lt;br /&gt;
        return enqueue( sparql )&lt;br /&gt;
            .then( function ( data ) {&lt;br /&gt;
                el.innerHTML = renderTable( data, title );&lt;br /&gt;
                return el;&lt;br /&gt;
            } )&lt;br /&gt;
            .catch( function ( err ) {&lt;br /&gt;
                el.textContent = ( err &amp;amp;&amp;amp; err.name === &#039;AbortError&#039; )&lt;br /&gt;
                    ? &#039;⚠️ Timed out loading data.&#039;&lt;br /&gt;
                    : &#039;⚠️ Failed to load (Wikidata may be busy).&#039;;&lt;br /&gt;
            } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        var contextNode = ( $content &amp;amp;&amp;amp; $content[0] ) ? $content[0] : document,&lt;br /&gt;
            tables = contextNode.querySelectorAll( &#039;.wikidata-sparql-table:not([data-loaded])&#039; );&lt;br /&gt;
&lt;br /&gt;
        if ( !tables.length ) { return; }&lt;br /&gt;
&lt;br /&gt;
        var tablesToProcess = [];&lt;br /&gt;
&lt;br /&gt;
        // Lazy-loading with IntersectionObserver (only load tables when near viewport)&lt;br /&gt;
        if ( &#039;IntersectionObserver&#039; in window ) {&lt;br /&gt;
            var observer = new IntersectionObserver( function ( entries, obs ) {&lt;br /&gt;
                entries.forEach( function ( entry ) {&lt;br /&gt;
                    if ( entry.isIntersecting ) {&lt;br /&gt;
                        var el = entry.target;&lt;br /&gt;
                        obs.unobserve( el );&lt;br /&gt;
                        if ( !el.getAttribute( &#039;data-loaded&#039; ) ) {&lt;br /&gt;
                            el.setAttribute( &#039;data-loaded&#039;, &#039;1&#039; );&lt;br /&gt;
                            processTableElement( el ).then( function ( renderedEl ) {&lt;br /&gt;
                                if ( renderedEl ) { mw.hook( &#039;wikipage.content&#039; ).fire( $( renderedEl ) ); }&lt;br /&gt;
                            } );&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                } );&lt;br /&gt;
            }, { rootMargin: &#039;300px 0px&#039; } );&lt;br /&gt;
&lt;br /&gt;
            tables.forEach( function ( el ) { observer.observe( el ); } );&lt;br /&gt;
        } else {&lt;br /&gt;
            // Fallback for older browsers&lt;br /&gt;
            var renderPromises = Array.prototype.map.call( tables, function ( el ) {&lt;br /&gt;
                el.setAttribute( &#039;data-loaded&#039;, &#039;1&#039; );&lt;br /&gt;
                return processTableElement( el );&lt;br /&gt;
            } );&lt;br /&gt;
&lt;br /&gt;
            Promise.all( renderPromises ).then( function ( renderedElements ) {&lt;br /&gt;
                var validElements = renderedElements.filter( Boolean );&lt;br /&gt;
                if ( validElements.length ) {&lt;br /&gt;
                    mw.hook( &#039;wikipage.content&#039; ).fire( $( validElements ) );&lt;br /&gt;
                }&lt;br /&gt;
            } );&lt;br /&gt;
        }&lt;br /&gt;
    } );&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
/* DO NOT ADD CODE BELOW THIS LINE */&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=MediaWiki:Common.js&amp;diff=18626</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=MediaWiki:Common.js&amp;diff=18626"/>
		<updated>2026-09-21T12:41:19Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Tout JavaScript présent ici sera exécuté par tous les utilisateurs à chaque chargement de page. */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally&lt;br /&gt;
 * loaded for all users on every wiki page. If possible create a gadget that is&lt;br /&gt;
 * enabled by default instead of adding it here (since gadgets are fully&lt;br /&gt;
 * optimized ResourceLoader modules with possibility to add dependencies etc.)&lt;br /&gt;
 *&lt;br /&gt;
 * Since Common.js isn&#039;t a gadget, there is no place to declare its&lt;br /&gt;
 * dependencies, so we have to lazy load them with mw.loader.using on demand and&lt;br /&gt;
 * then execute the rest in the callback. In most cases these dependencies will&lt;br /&gt;
 * be loaded (or loading) already and the callback will not be delayed. In case a&lt;br /&gt;
 * dependency hasn&#039;t arrived yet it&#039;ll make sure those are loaded before this.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* global mw, $ */&lt;br /&gt;
/* jshint strict:false, browser:true */&lt;br /&gt;
&lt;br /&gt;
mw.loader.using( [ &#039;mediawiki.util&#039; ] ).then( function () {&lt;br /&gt;
&lt;br /&gt;
    mw.log.deprecate( window, &#039;addPortletLink&#039;, mw.util.addPortletLink, &#039;Use mw.util.addPortletLink instead&#039; );&lt;br /&gt;
&lt;br /&gt;
    var extraCSS = mw.util.getParamValue( &#039;withCSS&#039; ),&lt;br /&gt;
        extraJS  = mw.util.getParamValue( &#039;withJS&#039; );&lt;br /&gt;
&lt;br /&gt;
    if ( extraCSS ) {&lt;br /&gt;
        if ( /^MediaWiki:[^&amp;amp;&amp;lt;&amp;gt;=%#]*\.css$/.test( extraCSS ) ) {&lt;br /&gt;
            mw.loader.load( &#039;/w/index.php?title=&#039; + encodeURIComponent( extraCSS ) + &#039;&amp;amp;action=raw&amp;amp;ctype=text/css&#039;, &#039;text/css&#039; );&lt;br /&gt;
        } else {&lt;br /&gt;
            mw.notify( &#039;Only pages from the MediaWiki namespace are allowed.&#039;, { title: &#039;Invalid withCSS value&#039; } );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( extraJS ) {&lt;br /&gt;
        if ( /^MediaWiki:[^&amp;amp;&amp;lt;&amp;gt;=%#]*\.js$/.test( extraJS ) ) {&lt;br /&gt;
            mw.loader.load( &#039;/w/index.php?title=&#039; + encodeURIComponent( extraJS ) + &#039;&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
        } else {&lt;br /&gt;
            mw.notify( &#039;Only pages from the MediaWiki namespace are allowed.&#039;, { title: &#039;Invalid withJS value&#039; } );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Collapsible tables&lt;br /&gt;
     */&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        var $tables = $content.find( &#039;table.collapsible:not(.mw-collapsible)&#039; );&lt;br /&gt;
        if ( !$tables.length ) { return; }&lt;br /&gt;
&lt;br /&gt;
        $tables.addClass( &#039;mw-collapsible&#039; ).each( function () {&lt;br /&gt;
            if ( $( this ).hasClass( &#039;collapsed&#039; ) ) {&lt;br /&gt;
                $( this ).addClass( &#039;mw-collapsed&#039; );&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        mw.loader.using( &#039;jquery.makeCollapsible&#039; ).then( function () {&lt;br /&gt;
            $tables.makeCollapsible();&lt;br /&gt;
        } );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    mw.hook( &#039;wikipage.collapsibleContent&#039; ).add( function ( $collapsibleContent ) {&lt;br /&gt;
        var autoCollapseThreshold = 2,&lt;br /&gt;
            hasOuter = $collapsibleContent.parents( &#039;.outercollapse&#039; ).length &amp;gt; 0;&lt;br /&gt;
&lt;br /&gt;
        $collapsibleContent.each( function () {&lt;br /&gt;
            var $element = $( this );&lt;br /&gt;
&lt;br /&gt;
            if ( $element.hasClass( &#039;collapsible&#039; ) ) {&lt;br /&gt;
                $element.find( &#039;tr:first &amp;gt; th:first&#039; ).prepend( $element.find( &#039;tr:first &amp;gt; * &amp;gt; .mw-collapsible-toggle&#039; ) );&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            if ( $collapsibleContent.length &amp;gt;= autoCollapseThreshold &amp;amp;&amp;amp; $element.hasClass( &#039;autocollapse&#039; ) ) {&lt;br /&gt;
                $element.data( &#039;mw-collapsible&#039; ).collapse();&lt;br /&gt;
            } else if ( $element.hasClass( &#039;innercollapse&#039; ) &amp;amp;&amp;amp; hasOuter ) {&lt;br /&gt;
                $element.data( &#039;mw-collapsible&#039; ).collapse();&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            var $toggle = $element.find( &#039;.mw-collapsible-toggle&#039; );&lt;br /&gt;
            if ( $toggle.length &amp;amp;&amp;amp; $toggle.parent()[0].style.color ) {&lt;br /&gt;
                $toggle.css( &#039;color&#039;, &#039;inherit&#039; ).find( &#039;.mw-collapsible-text&#039; ).css( &#039;color&#039;, &#039;inherit&#039; );&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Force interwiki links to open in a new tab&lt;br /&gt;
     */&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        $content.find( &#039;a.extiw&#039; ).attr( &#039;target&#039;, &#039;_blank&#039; ).attr( &#039;rel&#039;, &#039;noopener noreferrer&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Wikidata SPARQL tables rendering&lt;br /&gt;
     *&lt;br /&gt;
     * - Images are no longer double-encoded (was silently breaking any filename&lt;br /&gt;
     *   with spaces/accents/apostrophes/etc. - that was the &amp;quot;some images show,&lt;br /&gt;
     *   some don&#039;t&amp;quot; bug).&lt;br /&gt;
     * - All queries on a page go through a small shared queue: max&lt;br /&gt;
     *   SPARQL_MAX_PARALLEL requests in flight at once, identical in-flight&lt;br /&gt;
     *   queries are de-duplicated to a single fetch, and 429/503 responses are&lt;br /&gt;
     *   retried with exponential backoff instead of just failing. This is what&lt;br /&gt;
     *   was getting pages with several tables rate-limited by WDQS.&lt;br /&gt;
     * - Results are still cached (now resilient to storage quota errors) so a&lt;br /&gt;
     *   repeat view of the same page doesn&#039;t hit WDQS again within the TTL.&lt;br /&gt;
     */&lt;br /&gt;
    var WIKIDATA_PREFIX     = &#039;http://www.wikidata.org/entity/&#039;,&lt;br /&gt;
        WIKIDATA_HTTPS      = &#039;https://www.wikidata.org/entity/&#039;,&lt;br /&gt;
        COMMONS_MARKER      = &#039;Special:FilePath/&#039;,&lt;br /&gt;
        SPARQL_CACHE_TTL    = 2 * 60 * 1000,       // 2 minutes caching&lt;br /&gt;
        SPARQL_TIMEOUT      = 20000,               // 20s&lt;br /&gt;
        SPARQL_MAX_PARALLEL = 2,                   // never more than 2 concurrent requests from one page load&lt;br /&gt;
        SPARQL_RETRY_MAX    = 3,&lt;br /&gt;
        SPARQL_RETRY_BASE   = 1000;                // ms, doubles each retry (plus Retry-After if the server sends one)&lt;br /&gt;
&lt;br /&gt;
    function escapeHtml( text ) {&lt;br /&gt;
        return String( text )&lt;br /&gt;
            .replace( /&amp;amp;/g, &#039;&amp;amp;amp;&#039; )&lt;br /&gt;
            .replace( /&amp;lt;/g, &#039;&amp;amp;lt;&#039; )&lt;br /&gt;
            .replace( /&amp;gt;/g, &#039;&amp;amp;gt;&#039; )&lt;br /&gt;
            .replace( /&amp;quot;/g, &#039;&amp;amp;quot;&#039; )&lt;br /&gt;
            .replace( /&#039;/g, &#039;&amp;amp;#39;&#039; );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Tiny fast string hash (FNV-1a) — just needs to be short &amp;amp; collision-unlikely for cache/queue keys&lt;br /&gt;
    function hashKey( str ) {&lt;br /&gt;
        var h = 0x811c9dc5;&lt;br /&gt;
        for ( var i = 0; i &amp;lt; str.length; i++ ) {&lt;br /&gt;
            h ^= str.charCodeAt( i );&lt;br /&gt;
            h = ( h * 0x01000193 ) &amp;gt;&amp;gt;&amp;gt; 0;&lt;br /&gt;
        }&lt;br /&gt;
        return h.toString( 36 );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // --- Cache: prefer localStorage (survives across page loads/sessions, so it&lt;br /&gt;
    // actually cuts repeat traffic to WDQS), fall back to sessionStorage, then&lt;br /&gt;
    // an in-memory map so caching failures never break rendering.&lt;br /&gt;
    var memoryCache = {};&lt;br /&gt;
&lt;br /&gt;
    function detectStore() {&lt;br /&gt;
        var stores = [ &#039;localStorage&#039;, &#039;sessionStorage&#039; ];&lt;br /&gt;
        for ( var i = 0; i &amp;lt; stores.length; i++ ) {&lt;br /&gt;
            try {&lt;br /&gt;
                var s = window[ stores[i] ];&lt;br /&gt;
                s.setItem( &#039;__wdsparql_test__&#039;, &#039;1&#039; );&lt;br /&gt;
                s.removeItem( &#039;__wdsparql_test__&#039; );&lt;br /&gt;
                return s;&lt;br /&gt;
            } catch ( e ) { /* try next */ }&lt;br /&gt;
        }&lt;br /&gt;
        return null;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var store = detectStore();&lt;br /&gt;
&lt;br /&gt;
    function pruneOldestCacheEntries( s, n ) {&lt;br /&gt;
        var entries = [];&lt;br /&gt;
        for ( var i = 0; i &amp;lt; s.length; i++ ) {&lt;br /&gt;
            var k = s.key( i );&lt;br /&gt;
            if ( k &amp;amp;&amp;amp; k.indexOf( &#039;wdsparql:&#039; ) === 0 ) {&lt;br /&gt;
                var ts = 0;&lt;br /&gt;
                try { ts = JSON.parse( s.getItem( k ) ).ts; } catch ( e ) { /* keep ts = 0, prune first */ }&lt;br /&gt;
                entries.push( { key: k, ts: ts } );&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        entries.sort( function ( a, b ) { return a.ts - b.ts; } );&lt;br /&gt;
        for ( var j = 0; j &amp;lt; Math.min( n, entries.length ); j++ ) {&lt;br /&gt;
            s.removeItem( entries[j].key );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function getCachedResult( sparql ) {&lt;br /&gt;
        var key = &#039;wdsparql:&#039; + hashKey( sparql );&lt;br /&gt;
&lt;br /&gt;
        if ( store ) {&lt;br /&gt;
            try {&lt;br /&gt;
                var raw = store.getItem( key );&lt;br /&gt;
                if ( raw ) {&lt;br /&gt;
                    var cached = JSON.parse( raw );&lt;br /&gt;
                    if ( Date.now() - cached.ts &amp;lt;= SPARQL_CACHE_TTL ) {&lt;br /&gt;
                        return cached.data;&lt;br /&gt;
                    }&lt;br /&gt;
                    store.removeItem( key );&lt;br /&gt;
                }&lt;br /&gt;
            } catch ( e ) { /* fall through to memory cache */ }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var mem = memoryCache[ key ];&lt;br /&gt;
        if ( mem &amp;amp;&amp;amp; Date.now() - mem.ts &amp;lt;= SPARQL_CACHE_TTL ) {&lt;br /&gt;
            return mem.data;&lt;br /&gt;
        }&lt;br /&gt;
        return null;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function setCachedResult( sparql, data ) {&lt;br /&gt;
        var key = &#039;wdsparql:&#039; + hashKey( sparql ),&lt;br /&gt;
            entry = { ts: Date.now(), data: data };&lt;br /&gt;
&lt;br /&gt;
        memoryCache[ key ] = entry;&lt;br /&gt;
&lt;br /&gt;
        if ( store ) {&lt;br /&gt;
            try {&lt;br /&gt;
                store.setItem( key, JSON.stringify( entry ) );&lt;br /&gt;
            } catch ( e ) {&lt;br /&gt;
                // Quota exceeded - prune the oldest wdsparql entries and try once more.&lt;br /&gt;
                try {&lt;br /&gt;
                    pruneOldestCacheEntries( store, 5 );&lt;br /&gt;
                    store.setItem( key, JSON.stringify( entry ) );&lt;br /&gt;
                } catch ( e2 ) {&lt;br /&gt;
                    // Give up on persistent caching; the memory cache still covers this pageview.&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // --- Request queue: caps concurrency and de-dupes identical in-flight queries&lt;br /&gt;
    var inFlight = {},&lt;br /&gt;
        queue = [],&lt;br /&gt;
        active = 0;&lt;br /&gt;
&lt;br /&gt;
    function pump() {&lt;br /&gt;
        while ( active &amp;lt; SPARQL_MAX_PARALLEL &amp;amp;&amp;amp; queue.length ) {&lt;br /&gt;
            var job = queue.shift();&lt;br /&gt;
            active++;&lt;br /&gt;
            runQuery( job.sparql ).then(&lt;br /&gt;
                function ( data ) { active--; pump(); job.resolve( data ); },&lt;br /&gt;
                function ( err )  { active--; pump(); job.reject( err ); }&lt;br /&gt;
            );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function enqueue( sparql ) {&lt;br /&gt;
        var key = hashKey( sparql );&lt;br /&gt;
        if ( inFlight[ key ] ) {&lt;br /&gt;
            return inFlight[ key ];&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var p = new Promise( function ( resolve, reject ) {&lt;br /&gt;
            queue.push( { sparql: sparql, resolve: resolve, reject: reject } );&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        var cleaned = p.then(&lt;br /&gt;
            function ( result ) { delete inFlight[ key ]; return result; },&lt;br /&gt;
            function ( err )    { delete inFlight[ key ]; throw err; }&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
        inFlight[ key ] = cleaned;&lt;br /&gt;
        pump();&lt;br /&gt;
        return cleaned;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function runQuery( sparql, attempt ) {&lt;br /&gt;
        attempt = attempt || 0;&lt;br /&gt;
&lt;br /&gt;
        var cached = getCachedResult( sparql );&lt;br /&gt;
        if ( cached ) {&lt;br /&gt;
            return Promise.resolve( cached );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var controller = ( typeof AbortController !== &#039;undefined&#039; ) ? new AbortController() : null,&lt;br /&gt;
            timer = controller ? setTimeout( function () { controller.abort(); }, SPARQL_TIMEOUT ) : null,&lt;br /&gt;
            fetchUrl = &#039;https://query.wikidata.org/sparql?format=json&amp;amp;query=&#039; + encodeURIComponent( sparql );&lt;br /&gt;
&lt;br /&gt;
        return fetch( fetchUrl, {&lt;br /&gt;
            headers: { Accept: &#039;application/sparql-results+json&#039; },&lt;br /&gt;
            signal: controller ? controller.signal : undefined&lt;br /&gt;
        } )&lt;br /&gt;
            .then( function ( r ) {&lt;br /&gt;
                if ( timer ) { clearTimeout( timer ); }&lt;br /&gt;
&lt;br /&gt;
                if ( ( r.status === 429 || r.status === 503 ) &amp;amp;&amp;amp; attempt &amp;lt; SPARQL_RETRY_MAX ) {&lt;br /&gt;
                    var wait = SPARQL_RETRY_BASE * Math.pow( 2, attempt ),&lt;br /&gt;
                        retryAfter = r.headers.get( &#039;Retry-After&#039; );&lt;br /&gt;
                    if ( retryAfter &amp;amp;&amp;amp; !isNaN( +retryAfter ) ) {&lt;br /&gt;
                        wait = ( +retryAfter ) * 1000;&lt;br /&gt;
                    }&lt;br /&gt;
                    return new Promise( function ( resolve ) { setTimeout( resolve, wait ); } )&lt;br /&gt;
                        .then( function () { return runQuery( sparql, attempt + 1 ); } );&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                if ( !r.ok ) { throw new Error( &#039;HTTP &#039; + r.status ); }&lt;br /&gt;
                return r.json();&lt;br /&gt;
            } )&lt;br /&gt;
            .then( function ( data ) {&lt;br /&gt;
                setCachedResult( sparql, data );&lt;br /&gt;
                return data;&lt;br /&gt;
            } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function fetchSparql( sparql ) {&lt;br /&gt;
        return enqueue( sparql );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function commonsThumbUrl( value, width ) {&lt;br /&gt;
    // Ensure spaces are converted to underscores so MediaWiki&#039;s Special:FilePath &lt;br /&gt;
    // routes correctly, while preserving existing percent-encoded characters.&lt;br /&gt;
    var formattedValue = value.replace( / /g, &#039;_&#039; ),&lt;br /&gt;
        thumb = formattedValue.replace( /^http:\/\//, &#039;https://&#039; ),&lt;br /&gt;
        sep = thumb.indexOf( &#039;?&#039; ) === -1 ? &#039;?&#039; : &#039;&amp;amp;&#039;;&lt;br /&gt;
    return thumb + sep + &#039;width=&#039; + width;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
    function renderTable( data, title ) {&lt;br /&gt;
        var vars = data.head.vars,&lt;br /&gt;
            rows = data.results.bindings,&lt;br /&gt;
            vLen = vars.length,&lt;br /&gt;
            html = [];&lt;br /&gt;
&lt;br /&gt;
        if ( title ) {&lt;br /&gt;
            html.push( &#039;&amp;lt;h3&amp;gt;&#039;, escapeHtml( title ), &#039;&amp;lt;/h3&amp;gt;&#039; );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        html.push( &#039;&amp;lt;table class=&amp;quot;wikitable sortable&amp;quot;&amp;gt;&amp;lt;thead&amp;gt;&amp;lt;tr&amp;gt;&#039; );&lt;br /&gt;
        for ( var i = 0; i &amp;lt; vLen; i++ ) {&lt;br /&gt;
            html.push( &#039;&amp;lt;th&amp;gt;&#039;, escapeHtml( vars[i].replace( /_/g, &#039; &#039; ) ), &#039;&amp;lt;/th&amp;gt;&#039; );&lt;br /&gt;
        }&lt;br /&gt;
        html.push( &#039;&amp;lt;/tr&amp;gt;&amp;lt;/thead&amp;gt;&amp;lt;tbody&amp;gt;&#039; );&lt;br /&gt;
&lt;br /&gt;
        for ( var r = 0, rLen = rows.length; r &amp;lt; rLen; r++ ) {&lt;br /&gt;
            var row = rows[r];&lt;br /&gt;
            html.push( &#039;&amp;lt;tr&amp;gt;&#039; );&lt;br /&gt;
            for ( var c = 0; c &amp;lt; vLen; c++ ) {&lt;br /&gt;
                var v = vars[c],&lt;br /&gt;
                    val = row[v] ? row[v].value : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
                if ( val.indexOf( COMMONS_MARKER ) !== -1 ) {&lt;br /&gt;
                    var thumb = commonsThumbUrl( val, 100 );&lt;br /&gt;
                    html.push(&lt;br /&gt;
                        &#039;&amp;lt;td&amp;gt;&amp;lt;img src=&amp;quot;&#039;, escapeHtml( thumb ), &#039;&amp;quot; style=&amp;quot;max-height:80px;&amp;quot; alt=&amp;quot;&amp;quot; loading=&amp;quot;lazy&amp;quot; &#039;,&lt;br /&gt;
                        &#039;onerror=&amp;quot;this.onerror=null;this.replaceWith(document.createTextNode(\&#039;—\&#039;));&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
                    );&lt;br /&gt;
                } else if ( val.indexOf( WIKIDATA_PREFIX ) === 0 || val.indexOf( WIKIDATA_HTTPS ) === 0 ) {&lt;br /&gt;
                    var qid = val.substring( val.lastIndexOf( &#039;/&#039; ) + 1 );&lt;br /&gt;
                    html.push( &#039;&amp;lt;td&amp;gt;&amp;lt;a href=&amp;quot;https://www.wikidata.org/wiki/&#039;, qid, &#039;&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;&#039;, qid, &#039;&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&#039; );&lt;br /&gt;
                } else {&lt;br /&gt;
                    html.push( &#039;&amp;lt;td&amp;gt;&#039;, escapeHtml( val ), &#039;&amp;lt;/td&amp;gt;&#039; );&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            html.push( &#039;&amp;lt;/tr&amp;gt;&#039; );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        html.push( &#039;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&#039; );&lt;br /&gt;
        return html.join( &#039;&#039; );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        var contextNode = ( $content &amp;amp;&amp;amp; $content[0] ) ? $content[0] : document,&lt;br /&gt;
            tables = contextNode.querySelectorAll( &#039;.wikidata-sparql-table:not([data-loaded])&#039; );&lt;br /&gt;
&lt;br /&gt;
        if ( !tables.length ) { return; }&lt;br /&gt;
&lt;br /&gt;
        var renderPromises = Array.prototype.map.call( tables, function ( el ) {&lt;br /&gt;
            el.setAttribute( &#039;data-loaded&#039;, &#039;1&#039; );&lt;br /&gt;
            var sparql = el.getAttribute( &#039;data-sparql&#039; ),&lt;br /&gt;
                title  = el.getAttribute( &#039;data-title&#039; );&lt;br /&gt;
&lt;br /&gt;
            if ( !sparql ) { return Promise.resolve( null ); }&lt;br /&gt;
            el.textContent = &#039;⏳ Loading…&#039;;&lt;br /&gt;
&lt;br /&gt;
            return fetchSparql( sparql )&lt;br /&gt;
                .then( function ( data ) {&lt;br /&gt;
                    el.innerHTML = renderTable( data, title );&lt;br /&gt;
                    return el;&lt;br /&gt;
                } )&lt;br /&gt;
                .catch( function ( err ) {&lt;br /&gt;
                    el.textContent = ( err &amp;amp;&amp;amp; err.name === &#039;AbortError&#039; )&lt;br /&gt;
                        ? &#039;⚠️ Timed out loading data.&#039;&lt;br /&gt;
                        : &#039;⚠️ Failed to load (Wikidata may be busy - it will use the cache on the next view).&#039;;&lt;br /&gt;
                } );&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        // Fire the sortable hook only once, after every table on the page has settled&lt;br /&gt;
        Promise.all( renderPromises ).then( function ( renderedElements ) {&lt;br /&gt;
            var validElements = renderedElements.filter( Boolean );&lt;br /&gt;
            if ( validElements.length ) {&lt;br /&gt;
                mw.hook( &#039;wikipage.content&#039; ).fire( $( validElements ) );&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
    } );&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
/* DO NOT ADD CODE BELOW THIS LINE */&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=MediaWiki:Common.js&amp;diff=18625</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=MediaWiki:Common.js&amp;diff=18625"/>
		<updated>2026-09-21T12:38:53Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Tout JavaScript présent ici sera exécuté par tous les utilisateurs à chaque chargement de page. */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally&lt;br /&gt;
 * loaded for all users on every wiki page. If possible create a gadget that is&lt;br /&gt;
 * enabled by default instead of adding it here (since gadgets are fully&lt;br /&gt;
 * optimized ResourceLoader modules with possibility to add dependencies etc.)&lt;br /&gt;
 *&lt;br /&gt;
 * Since Common.js isn&#039;t a gadget, there is no place to declare its&lt;br /&gt;
 * dependencies, so we have to lazy load them with mw.loader.using on demand and&lt;br /&gt;
 * then execute the rest in the callback. In most cases these dependencies will&lt;br /&gt;
 * be loaded (or loading) already and the callback will not be delayed. In case a&lt;br /&gt;
 * dependency hasn&#039;t arrived yet it&#039;ll make sure those are loaded before this.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* global mw, $ */&lt;br /&gt;
/* jshint strict:false, browser:true */&lt;br /&gt;
&lt;br /&gt;
mw.loader.using( [ &#039;mediawiki.util&#039; ] ).then( function () {&lt;br /&gt;
&lt;br /&gt;
    mw.log.deprecate( window, &#039;addPortletLink&#039;, mw.util.addPortletLink, &#039;Use mw.util.addPortletLink instead&#039; );&lt;br /&gt;
&lt;br /&gt;
    var extraCSS = mw.util.getParamValue( &#039;withCSS&#039; ),&lt;br /&gt;
        extraJS  = mw.util.getParamValue( &#039;withJS&#039; );&lt;br /&gt;
&lt;br /&gt;
    if ( extraCSS ) {&lt;br /&gt;
        if ( /^MediaWiki:[^&amp;amp;&amp;lt;&amp;gt;=%#]*\.css$/.test( extraCSS ) ) {&lt;br /&gt;
            mw.loader.load( &#039;/w/index.php?title=&#039; + encodeURIComponent( extraCSS ) + &#039;&amp;amp;action=raw&amp;amp;ctype=text/css&#039;, &#039;text/css&#039; );&lt;br /&gt;
        } else {&lt;br /&gt;
            mw.notify( &#039;Only pages from the MediaWiki namespace are allowed.&#039;, { title: &#039;Invalid withCSS value&#039; } );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( extraJS ) {&lt;br /&gt;
        if ( /^MediaWiki:[^&amp;amp;&amp;lt;&amp;gt;=%#]*\.js$/.test( extraJS ) ) {&lt;br /&gt;
            mw.loader.load( &#039;/w/index.php?title=&#039; + encodeURIComponent( extraJS ) + &#039;&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
        } else {&lt;br /&gt;
            mw.notify( &#039;Only pages from the MediaWiki namespace are allowed.&#039;, { title: &#039;Invalid withJS value&#039; } );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Collapsible tables&lt;br /&gt;
     */&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        var $tables = $content.find( &#039;table.collapsible:not(.mw-collapsible)&#039; );&lt;br /&gt;
        if ( !$tables.length ) { return; }&lt;br /&gt;
&lt;br /&gt;
        $tables.addClass( &#039;mw-collapsible&#039; ).each( function () {&lt;br /&gt;
            if ( $( this ).hasClass( &#039;collapsed&#039; ) ) {&lt;br /&gt;
                $( this ).addClass( &#039;mw-collapsed&#039; );&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        mw.loader.using( &#039;jquery.makeCollapsible&#039; ).then( function () {&lt;br /&gt;
            $tables.makeCollapsible();&lt;br /&gt;
        } );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    mw.hook( &#039;wikipage.collapsibleContent&#039; ).add( function ( $collapsibleContent ) {&lt;br /&gt;
        var autoCollapseThreshold = 2,&lt;br /&gt;
            hasOuter = $collapsibleContent.parents( &#039;.outercollapse&#039; ).length &amp;gt; 0;&lt;br /&gt;
&lt;br /&gt;
        $collapsibleContent.each( function () {&lt;br /&gt;
            var $element = $( this );&lt;br /&gt;
&lt;br /&gt;
            if ( $element.hasClass( &#039;collapsible&#039; ) ) {&lt;br /&gt;
                $element.find( &#039;tr:first &amp;gt; th:first&#039; ).prepend( $element.find( &#039;tr:first &amp;gt; * &amp;gt; .mw-collapsible-toggle&#039; ) );&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            if ( $collapsibleContent.length &amp;gt;= autoCollapseThreshold &amp;amp;&amp;amp; $element.hasClass( &#039;autocollapse&#039; ) ) {&lt;br /&gt;
                $element.data( &#039;mw-collapsible&#039; ).collapse();&lt;br /&gt;
            } else if ( $element.hasClass( &#039;innercollapse&#039; ) &amp;amp;&amp;amp; hasOuter ) {&lt;br /&gt;
                $element.data( &#039;mw-collapsible&#039; ).collapse();&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            var $toggle = $element.find( &#039;.mw-collapsible-toggle&#039; );&lt;br /&gt;
            if ( $toggle.length &amp;amp;&amp;amp; $toggle.parent()[0].style.color ) {&lt;br /&gt;
                $toggle.css( &#039;color&#039;, &#039;inherit&#039; ).find( &#039;.mw-collapsible-text&#039; ).css( &#039;color&#039;, &#039;inherit&#039; );&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Force interwiki links to open in a new tab&lt;br /&gt;
     */&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        $content.find( &#039;a.extiw&#039; ).attr( &#039;target&#039;, &#039;_blank&#039; ).attr( &#039;rel&#039;, &#039;noopener noreferrer&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Wikidata SPARQL tables rendering&lt;br /&gt;
     *&lt;br /&gt;
     * - Images are no longer double-encoded (was silently breaking any filename&lt;br /&gt;
     *   with spaces/accents/apostrophes/etc. - that was the &amp;quot;some images show,&lt;br /&gt;
     *   some don&#039;t&amp;quot; bug).&lt;br /&gt;
     * - All queries on a page go through a small shared queue: max&lt;br /&gt;
     *   SPARQL_MAX_PARALLEL requests in flight at once, identical in-flight&lt;br /&gt;
     *   queries are de-duplicated to a single fetch, and 429/503 responses are&lt;br /&gt;
     *   retried with exponential backoff instead of just failing. This is what&lt;br /&gt;
     *   was getting pages with several tables rate-limited by WDQS.&lt;br /&gt;
     * - Results are still cached (now resilient to storage quota errors) so a&lt;br /&gt;
     *   repeat view of the same page doesn&#039;t hit WDQS again within the TTL.&lt;br /&gt;
     */&lt;br /&gt;
    var WIKIDATA_PREFIX     = &#039;http://www.wikidata.org/entity/&#039;,&lt;br /&gt;
        WIKIDATA_HTTPS      = &#039;https://www.wikidata.org/entity/&#039;,&lt;br /&gt;
        COMMONS_MARKER      = &#039;Special:FilePath/&#039;,&lt;br /&gt;
        SPARQL_CACHE_TTL    = 2 * 60 * 1000,       // 2 minutes caching&lt;br /&gt;
        SPARQL_TIMEOUT      = 20000,               // 20s&lt;br /&gt;
        SPARQL_MAX_PARALLEL = 2,                   // never more than 2 concurrent requests from one page load&lt;br /&gt;
        SPARQL_RETRY_MAX    = 3,&lt;br /&gt;
        SPARQL_RETRY_BASE   = 1000;                // ms, doubles each retry (plus Retry-After if the server sends one)&lt;br /&gt;
&lt;br /&gt;
    function escapeHtml( text ) {&lt;br /&gt;
        return String( text )&lt;br /&gt;
            .replace( /&amp;amp;/g, &#039;&amp;amp;amp;&#039; )&lt;br /&gt;
            .replace( /&amp;lt;/g, &#039;&amp;amp;lt;&#039; )&lt;br /&gt;
            .replace( /&amp;gt;/g, &#039;&amp;amp;gt;&#039; )&lt;br /&gt;
            .replace( /&amp;quot;/g, &#039;&amp;amp;quot;&#039; )&lt;br /&gt;
            .replace( /&#039;/g, &#039;&amp;amp;#39;&#039; );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Tiny fast string hash (FNV-1a) — just needs to be short &amp;amp; collision-unlikely for cache/queue keys&lt;br /&gt;
    function hashKey( str ) {&lt;br /&gt;
        var h = 0x811c9dc5;&lt;br /&gt;
        for ( var i = 0; i &amp;lt; str.length; i++ ) {&lt;br /&gt;
            h ^= str.charCodeAt( i );&lt;br /&gt;
            h = ( h * 0x01000193 ) &amp;gt;&amp;gt;&amp;gt; 0;&lt;br /&gt;
        }&lt;br /&gt;
        return h.toString( 36 );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // --- Cache: prefer localStorage (survives across page loads/sessions, so it&lt;br /&gt;
    // actually cuts repeat traffic to WDQS), fall back to sessionStorage, then&lt;br /&gt;
    // an in-memory map so caching failures never break rendering.&lt;br /&gt;
    var memoryCache = {};&lt;br /&gt;
&lt;br /&gt;
    function detectStore() {&lt;br /&gt;
        var stores = [ &#039;localStorage&#039;, &#039;sessionStorage&#039; ];&lt;br /&gt;
        for ( var i = 0; i &amp;lt; stores.length; i++ ) {&lt;br /&gt;
            try {&lt;br /&gt;
                var s = window[ stores[i] ];&lt;br /&gt;
                s.setItem( &#039;__wdsparql_test__&#039;, &#039;1&#039; );&lt;br /&gt;
                s.removeItem( &#039;__wdsparql_test__&#039; );&lt;br /&gt;
                return s;&lt;br /&gt;
            } catch ( e ) { /* try next */ }&lt;br /&gt;
        }&lt;br /&gt;
        return null;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var store = detectStore();&lt;br /&gt;
&lt;br /&gt;
    function pruneOldestCacheEntries( s, n ) {&lt;br /&gt;
        var entries = [];&lt;br /&gt;
        for ( var i = 0; i &amp;lt; s.length; i++ ) {&lt;br /&gt;
            var k = s.key( i );&lt;br /&gt;
            if ( k &amp;amp;&amp;amp; k.indexOf( &#039;wdsparql:&#039; ) === 0 ) {&lt;br /&gt;
                var ts = 0;&lt;br /&gt;
                try { ts = JSON.parse( s.getItem( k ) ).ts; } catch ( e ) { /* keep ts = 0, prune first */ }&lt;br /&gt;
                entries.push( { key: k, ts: ts } );&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        entries.sort( function ( a, b ) { return a.ts - b.ts; } );&lt;br /&gt;
        for ( var j = 0; j &amp;lt; Math.min( n, entries.length ); j++ ) {&lt;br /&gt;
            s.removeItem( entries[j].key );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function getCachedResult( sparql ) {&lt;br /&gt;
        var key = &#039;wdsparql:&#039; + hashKey( sparql );&lt;br /&gt;
&lt;br /&gt;
        if ( store ) {&lt;br /&gt;
            try {&lt;br /&gt;
                var raw = store.getItem( key );&lt;br /&gt;
                if ( raw ) {&lt;br /&gt;
                    var cached = JSON.parse( raw );&lt;br /&gt;
                    if ( Date.now() - cached.ts &amp;lt;= SPARQL_CACHE_TTL ) {&lt;br /&gt;
                        return cached.data;&lt;br /&gt;
                    }&lt;br /&gt;
                    store.removeItem( key );&lt;br /&gt;
                }&lt;br /&gt;
            } catch ( e ) { /* fall through to memory cache */ }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var mem = memoryCache[ key ];&lt;br /&gt;
        if ( mem &amp;amp;&amp;amp; Date.now() - mem.ts &amp;lt;= SPARQL_CACHE_TTL ) {&lt;br /&gt;
            return mem.data;&lt;br /&gt;
        }&lt;br /&gt;
        return null;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function setCachedResult( sparql, data ) {&lt;br /&gt;
        var key = &#039;wdsparql:&#039; + hashKey( sparql ),&lt;br /&gt;
            entry = { ts: Date.now(), data: data };&lt;br /&gt;
&lt;br /&gt;
        memoryCache[ key ] = entry;&lt;br /&gt;
&lt;br /&gt;
        if ( store ) {&lt;br /&gt;
            try {&lt;br /&gt;
                store.setItem( key, JSON.stringify( entry ) );&lt;br /&gt;
            } catch ( e ) {&lt;br /&gt;
                // Quota exceeded - prune the oldest wdsparql entries and try once more.&lt;br /&gt;
                try {&lt;br /&gt;
                    pruneOldestCacheEntries( store, 5 );&lt;br /&gt;
                    store.setItem( key, JSON.stringify( entry ) );&lt;br /&gt;
                } catch ( e2 ) {&lt;br /&gt;
                    // Give up on persistent caching; the memory cache still covers this pageview.&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // --- Request queue: caps concurrency and de-dupes identical in-flight queries&lt;br /&gt;
    var inFlight = {},&lt;br /&gt;
        queue = [],&lt;br /&gt;
        active = 0;&lt;br /&gt;
&lt;br /&gt;
    function pump() {&lt;br /&gt;
        while ( active &amp;lt; SPARQL_MAX_PARALLEL &amp;amp;&amp;amp; queue.length ) {&lt;br /&gt;
            var job = queue.shift();&lt;br /&gt;
            active++;&lt;br /&gt;
            runQuery( job.sparql ).then(&lt;br /&gt;
                function ( data ) { active--; pump(); job.resolve( data ); },&lt;br /&gt;
                function ( err )  { active--; pump(); job.reject( err ); }&lt;br /&gt;
            );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function enqueue( sparql ) {&lt;br /&gt;
        var key = hashKey( sparql );&lt;br /&gt;
        if ( inFlight[ key ] ) {&lt;br /&gt;
            return inFlight[ key ];&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var p = new Promise( function ( resolve, reject ) {&lt;br /&gt;
            queue.push( { sparql: sparql, resolve: resolve, reject: reject } );&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        var cleaned = p.then(&lt;br /&gt;
            function ( result ) { delete inFlight[ key ]; return result; },&lt;br /&gt;
            function ( err )    { delete inFlight[ key ]; throw err; }&lt;br /&gt;
        );&lt;br /&gt;
&lt;br /&gt;
        inFlight[ key ] = cleaned;&lt;br /&gt;
        pump();&lt;br /&gt;
        return cleaned;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function runQuery( sparql, attempt ) {&lt;br /&gt;
        attempt = attempt || 0;&lt;br /&gt;
&lt;br /&gt;
        var cached = getCachedResult( sparql );&lt;br /&gt;
        if ( cached ) {&lt;br /&gt;
            return Promise.resolve( cached );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var controller = ( typeof AbortController !== &#039;undefined&#039; ) ? new AbortController() : null,&lt;br /&gt;
            timer = controller ? setTimeout( function () { controller.abort(); }, SPARQL_TIMEOUT ) : null,&lt;br /&gt;
            fetchUrl = &#039;https://query.wikidata.org/sparql?format=json&amp;amp;query=&#039; + encodeURIComponent( sparql );&lt;br /&gt;
&lt;br /&gt;
        return fetch( fetchUrl, {&lt;br /&gt;
            headers: { Accept: &#039;application/sparql-results+json&#039; },&lt;br /&gt;
            signal: controller ? controller.signal : undefined&lt;br /&gt;
        } )&lt;br /&gt;
            .then( function ( r ) {&lt;br /&gt;
                if ( timer ) { clearTimeout( timer ); }&lt;br /&gt;
&lt;br /&gt;
                if ( ( r.status === 429 || r.status === 503 ) &amp;amp;&amp;amp; attempt &amp;lt; SPARQL_RETRY_MAX ) {&lt;br /&gt;
                    var wait = SPARQL_RETRY_BASE * Math.pow( 2, attempt ),&lt;br /&gt;
                        retryAfter = r.headers.get( &#039;Retry-After&#039; );&lt;br /&gt;
                    if ( retryAfter &amp;amp;&amp;amp; !isNaN( +retryAfter ) ) {&lt;br /&gt;
                        wait = ( +retryAfter ) * 1000;&lt;br /&gt;
                    }&lt;br /&gt;
                    return new Promise( function ( resolve ) { setTimeout( resolve, wait ); } )&lt;br /&gt;
                        .then( function () { return runQuery( sparql, attempt + 1 ); } );&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                if ( !r.ok ) { throw new Error( &#039;HTTP &#039; + r.status ); }&lt;br /&gt;
                return r.json();&lt;br /&gt;
            } )&lt;br /&gt;
            .then( function ( data ) {&lt;br /&gt;
                setCachedResult( sparql, data );&lt;br /&gt;
                return data;&lt;br /&gt;
            } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function fetchSparql( sparql ) {&lt;br /&gt;
        return enqueue( sparql );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function commonsThumbUrl( value, width ) {&lt;br /&gt;
        // `value` is already a percent-encoded URI straight from the SPARQL JSON&lt;br /&gt;
        // results. Re-encoding it here (the old code&#039;s encodeURI() call) double-&lt;br /&gt;
        // escapes any filename with spaces/accents/quotes/etc., which silently&lt;br /&gt;
        // breaks the &amp;lt;img src&amp;gt; for those rows only - that was the root cause of&lt;br /&gt;
        // &amp;quot;some images show, some don&#039;t&amp;quot;. Just append the width param.&lt;br /&gt;
        var thumb = value.replace( /^http:\/\//, &#039;https://&#039; ),&lt;br /&gt;
            sep = thumb.indexOf( &#039;?&#039; ) === -1 ? &#039;?&#039; : &#039;&amp;amp;&#039;;&lt;br /&gt;
        return thumb + sep + &#039;width=&#039; + width;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function renderTable( data, title ) {&lt;br /&gt;
        var vars = data.head.vars,&lt;br /&gt;
            rows = data.results.bindings,&lt;br /&gt;
            vLen = vars.length,&lt;br /&gt;
            html = [];&lt;br /&gt;
&lt;br /&gt;
        if ( title ) {&lt;br /&gt;
            html.push( &#039;&amp;lt;h3&amp;gt;&#039;, escapeHtml( title ), &#039;&amp;lt;/h3&amp;gt;&#039; );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        html.push( &#039;&amp;lt;table class=&amp;quot;wikitable sortable&amp;quot;&amp;gt;&amp;lt;thead&amp;gt;&amp;lt;tr&amp;gt;&#039; );&lt;br /&gt;
        for ( var i = 0; i &amp;lt; vLen; i++ ) {&lt;br /&gt;
            html.push( &#039;&amp;lt;th&amp;gt;&#039;, escapeHtml( vars[i].replace( /_/g, &#039; &#039; ) ), &#039;&amp;lt;/th&amp;gt;&#039; );&lt;br /&gt;
        }&lt;br /&gt;
        html.push( &#039;&amp;lt;/tr&amp;gt;&amp;lt;/thead&amp;gt;&amp;lt;tbody&amp;gt;&#039; );&lt;br /&gt;
&lt;br /&gt;
        for ( var r = 0, rLen = rows.length; r &amp;lt; rLen; r++ ) {&lt;br /&gt;
            var row = rows[r];&lt;br /&gt;
            html.push( &#039;&amp;lt;tr&amp;gt;&#039; );&lt;br /&gt;
            for ( var c = 0; c &amp;lt; vLen; c++ ) {&lt;br /&gt;
                var v = vars[c],&lt;br /&gt;
                    val = row[v] ? row[v].value : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
                if ( val.indexOf( COMMONS_MARKER ) !== -1 ) {&lt;br /&gt;
                    var thumb = commonsThumbUrl( val, 100 );&lt;br /&gt;
                    html.push(&lt;br /&gt;
                        &#039;&amp;lt;td&amp;gt;&amp;lt;img src=&amp;quot;&#039;, escapeHtml( thumb ), &#039;&amp;quot; style=&amp;quot;max-height:80px;&amp;quot; alt=&amp;quot;&amp;quot; loading=&amp;quot;lazy&amp;quot; &#039;,&lt;br /&gt;
                        &#039;onerror=&amp;quot;this.onerror=null;this.replaceWith(document.createTextNode(\&#039;—\&#039;));&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
                    );&lt;br /&gt;
                } else if ( val.indexOf( WIKIDATA_PREFIX ) === 0 || val.indexOf( WIKIDATA_HTTPS ) === 0 ) {&lt;br /&gt;
                    var qid = val.substring( val.lastIndexOf( &#039;/&#039; ) + 1 );&lt;br /&gt;
                    html.push( &#039;&amp;lt;td&amp;gt;&amp;lt;a href=&amp;quot;https://www.wikidata.org/wiki/&#039;, qid, &#039;&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;&#039;, qid, &#039;&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&#039; );&lt;br /&gt;
                } else {&lt;br /&gt;
                    html.push( &#039;&amp;lt;td&amp;gt;&#039;, escapeHtml( val ), &#039;&amp;lt;/td&amp;gt;&#039; );&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            html.push( &#039;&amp;lt;/tr&amp;gt;&#039; );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        html.push( &#039;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&#039; );&lt;br /&gt;
        return html.join( &#039;&#039; );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        var contextNode = ( $content &amp;amp;&amp;amp; $content[0] ) ? $content[0] : document,&lt;br /&gt;
            tables = contextNode.querySelectorAll( &#039;.wikidata-sparql-table:not([data-loaded])&#039; );&lt;br /&gt;
&lt;br /&gt;
        if ( !tables.length ) { return; }&lt;br /&gt;
&lt;br /&gt;
        var renderPromises = Array.prototype.map.call( tables, function ( el ) {&lt;br /&gt;
            el.setAttribute( &#039;data-loaded&#039;, &#039;1&#039; );&lt;br /&gt;
            var sparql = el.getAttribute( &#039;data-sparql&#039; ),&lt;br /&gt;
                title  = el.getAttribute( &#039;data-title&#039; );&lt;br /&gt;
&lt;br /&gt;
            if ( !sparql ) { return Promise.resolve( null ); }&lt;br /&gt;
            el.textContent = &#039;⏳ Loading…&#039;;&lt;br /&gt;
&lt;br /&gt;
            return fetchSparql( sparql )&lt;br /&gt;
                .then( function ( data ) {&lt;br /&gt;
                    el.innerHTML = renderTable( data, title );&lt;br /&gt;
                    return el;&lt;br /&gt;
                } )&lt;br /&gt;
                .catch( function ( err ) {&lt;br /&gt;
                    el.textContent = ( err &amp;amp;&amp;amp; err.name === &#039;AbortError&#039; )&lt;br /&gt;
                        ? &#039;⚠️ Timed out loading data.&#039;&lt;br /&gt;
                        : &#039;⚠️ Failed to load (Wikidata may be busy - it will use the cache on the next view).&#039;;&lt;br /&gt;
                } );&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        // Fire the sortable hook only once, after every table on the page has settled&lt;br /&gt;
        Promise.all( renderPromises ).then( function ( renderedElements ) {&lt;br /&gt;
            var validElements = renderedElements.filter( Boolean );&lt;br /&gt;
            if ( validElements.length ) {&lt;br /&gt;
                mw.hook( &#039;wikipage.content&#039; ).fire( $( validElements ) );&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
    } );&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
/* DO NOT ADD CODE BELOW THIS LINE */&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=MediaWiki:Common.js&amp;diff=18624</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=MediaWiki:Common.js&amp;diff=18624"/>
		<updated>2026-09-21T12:07:06Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Tout JavaScript présent ici sera exécuté par tous les utilisateurs à chaque chargement de page. */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally&lt;br /&gt;
 * loaded for all users on every wiki page. If possible create a gadget that is&lt;br /&gt;
 * enabled by default instead of adding it here (since gadgets are fully&lt;br /&gt;
 * optimized ResourceLoader modules with possibility to add dependencies etc.)&lt;br /&gt;
 *&lt;br /&gt;
 * Since Common.js isn&#039;t a gadget, there is no place to declare its&lt;br /&gt;
 * dependencies, so we have to lazy load them with mw.loader.using on demand and&lt;br /&gt;
 * then execute the rest in the callback. In most cases these dependencies will&lt;br /&gt;
 * be loaded (or loading) already and the callback will not be delayed. In case a&lt;br /&gt;
 * dependency hasn&#039;t arrived yet it&#039;ll make sure those are loaded before this.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* global mw, $ */&lt;br /&gt;
/* jshint strict:false, browser:true */&lt;br /&gt;
&lt;br /&gt;
mw.loader.using( [ &#039;mediawiki.util&#039; ] ).then( function () {&lt;br /&gt;
&lt;br /&gt;
    mw.log.deprecate( window, &#039;addPortletLink&#039;, mw.util.addPortletLink, &#039;Use mw.util.addPortletLink instead&#039; );&lt;br /&gt;
&lt;br /&gt;
    var extraCSS = mw.util.getParamValue( &#039;withCSS&#039; ),&lt;br /&gt;
        extraJS  = mw.util.getParamValue( &#039;withJS&#039; );&lt;br /&gt;
&lt;br /&gt;
    if ( extraCSS ) {&lt;br /&gt;
        if ( /^MediaWiki:[^&amp;amp;&amp;lt;&amp;gt;=%#]*\.css$/.test( extraCSS ) ) {&lt;br /&gt;
            mw.loader.load( &#039;/w/index.php?title=&#039; + encodeURIComponent( extraCSS ) + &#039;&amp;amp;action=raw&amp;amp;ctype=text/css&#039;, &#039;text/css&#039; );&lt;br /&gt;
        } else {&lt;br /&gt;
            mw.notify( &#039;Only pages from the MediaWiki namespace are allowed.&#039;, { title: &#039;Invalid withCSS value&#039; } );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( extraJS ) {&lt;br /&gt;
        if ( /^MediaWiki:[^&amp;amp;&amp;lt;&amp;gt;=%#]*\.js$/.test( extraJS ) ) {&lt;br /&gt;
            mw.loader.load( &#039;/w/index.php?title=&#039; + encodeURIComponent( extraJS ) + &#039;&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
        } else {&lt;br /&gt;
            mw.notify( &#039;Only pages from the MediaWiki namespace are allowed.&#039;, { title: &#039;Invalid withJS value&#039; } );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Collapsible tables&lt;br /&gt;
     */&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        var $tables = $content.find( &#039;table.collapsible:not(.mw-collapsible)&#039; );&lt;br /&gt;
        if ( !$tables.length ) { return; }&lt;br /&gt;
&lt;br /&gt;
        $tables.addClass( &#039;mw-collapsible&#039; ).each( function () {&lt;br /&gt;
            if ( $( this ).hasClass( &#039;collapsed&#039; ) ) {&lt;br /&gt;
                $( this ).addClass( &#039;mw-collapsed&#039; );&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        mw.loader.using( &#039;jquery.makeCollapsible&#039; ).then( function () {&lt;br /&gt;
            $tables.makeCollapsible();&lt;br /&gt;
        } );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    mw.hook( &#039;wikipage.collapsibleContent&#039; ).add( function ( $collapsibleContent ) {&lt;br /&gt;
        var autoCollapseThreshold = 2,&lt;br /&gt;
            hasOuter = $collapsibleContent.parents( &#039;.outercollapse&#039; ).length &amp;gt; 0;&lt;br /&gt;
&lt;br /&gt;
        $collapsibleContent.each( function () {&lt;br /&gt;
            var $element = $( this );&lt;br /&gt;
&lt;br /&gt;
            if ( $element.hasClass( &#039;collapsible&#039; ) ) {&lt;br /&gt;
                $element.find( &#039;tr:first &amp;gt; th:first&#039; ).prepend( $element.find( &#039;tr:first &amp;gt; * &amp;gt; .mw-collapsible-toggle&#039; ) );&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            if ( $collapsibleContent.length &amp;gt;= autoCollapseThreshold &amp;amp;&amp;amp; $element.hasClass( &#039;autocollapse&#039; ) ) {&lt;br /&gt;
                $element.data( &#039;mw-collapsible&#039; ).collapse();&lt;br /&gt;
            } else if ( $element.hasClass( &#039;innercollapse&#039; ) &amp;amp;&amp;amp; hasOuter ) {&lt;br /&gt;
                $element.data( &#039;mw-collapsible&#039; ).collapse();&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            var $toggle = $element.find( &#039;.mw-collapsible-toggle&#039; );&lt;br /&gt;
            if ( $toggle.length &amp;amp;&amp;amp; $toggle.parent()[0].style.color ) {&lt;br /&gt;
                $toggle.css( &#039;color&#039;, &#039;inherit&#039; ).find( &#039;.mw-collapsible-text&#039; ).css( &#039;color&#039;, &#039;inherit&#039; );&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Force interwiki links to open in a new tab&lt;br /&gt;
     */&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        $content.find( &#039;a.extiw&#039; ).attr( &#039;target&#039;, &#039;_blank&#039; ).attr( &#039;rel&#039;, &#039;noopener noreferrer&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Optimized Wikidata SPARQL tables rendering&lt;br /&gt;
     */&lt;br /&gt;
    var WIKIDATA_PREFIX  = &#039;http://www.wikidata.org/entity/&#039;,&lt;br /&gt;
        WIKIDATA_HTTPS   = &#039;https://www.wikidata.org/entity/&#039;,&lt;br /&gt;
        COMMONS_MARKER   = &#039;Special:FilePath/&#039;,&lt;br /&gt;
        SPARQL_CACHE_TTL = 15 * 60 * 1000, // 15 minutes&lt;br /&gt;
        SPARQL_TIMEOUT   = 15000; // 15 seconds — fail loudly instead of spinning forever&lt;br /&gt;
&lt;br /&gt;
    function escapeHtml( text ) {&lt;br /&gt;
        return String( text )&lt;br /&gt;
            .replace( /&amp;amp;/g, &#039;&amp;amp;amp;&#039; )&lt;br /&gt;
            .replace( /&amp;lt;/g, &#039;&amp;amp;lt;&#039; )&lt;br /&gt;
            .replace( /&amp;gt;/g, &#039;&amp;amp;gt;&#039; )&lt;br /&gt;
            .replace( /&amp;quot;/g, &#039;&amp;amp;quot;&#039; )&lt;br /&gt;
            .replace( /&#039;/g, &#039;&amp;amp;#39;&#039; );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Tiny fast string hash (FNV-1a) — just needs to be short &amp;amp; collision-unlikely for cache keys&lt;br /&gt;
    function hashKey( str ) {&lt;br /&gt;
        var h = 0x811c9dc5;&lt;br /&gt;
        for ( var i = 0; i &amp;lt; str.length; i++ ) {&lt;br /&gt;
            h ^= str.charCodeAt( i );&lt;br /&gt;
            h = ( h * 0x01000193 ) &amp;gt;&amp;gt;&amp;gt; 0;&lt;br /&gt;
        }&lt;br /&gt;
        return h.toString( 36 );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function getCachedResult( sparql ) {&lt;br /&gt;
        try {&lt;br /&gt;
            var raw = sessionStorage.getItem( &#039;wdsparql:&#039; + hashKey( sparql ) );&lt;br /&gt;
            if ( !raw ) { return null; }&lt;br /&gt;
            var cached = JSON.parse( raw );&lt;br /&gt;
            if ( Date.now() - cached.ts &amp;gt; SPARQL_CACHE_TTL ) { return null; }&lt;br /&gt;
            return cached.data;&lt;br /&gt;
        } catch ( e ) {&lt;br /&gt;
            return null; // sessionStorage unavailable/full/private mode — just skip caching&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function setCachedResult( sparql, data ) {&lt;br /&gt;
        try {&lt;br /&gt;
            sessionStorage.setItem( &#039;wdsparql:&#039; + hashKey( sparql ), JSON.stringify( { ts: Date.now(), data: data } ) );&lt;br /&gt;
        } catch ( e ) {&lt;br /&gt;
            // quota exceeded or unavailable — ignore, caching is a nice-to-have&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function fetchSparql( sparql ) {&lt;br /&gt;
        var cached = getCachedResult( sparql );&lt;br /&gt;
        if ( cached ) {&lt;br /&gt;
            return Promise.resolve( cached );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var controller = ( typeof AbortController !== &#039;undefined&#039; ) ? new AbortController() : null,&lt;br /&gt;
            timer = controller ? setTimeout( function () { controller.abort(); }, SPARQL_TIMEOUT ) : null,&lt;br /&gt;
            fetchUrl = &#039;https://query.wikidata.org/sparql?format=json&amp;amp;query=&#039; + encodeURIComponent( sparql );&lt;br /&gt;
&lt;br /&gt;
        return fetch( fetchUrl, {&lt;br /&gt;
            headers: { Accept: &#039;application/json&#039; },&lt;br /&gt;
            signal: controller ? controller.signal : undefined&lt;br /&gt;
        } )&lt;br /&gt;
            .then( function ( r ) {&lt;br /&gt;
                if ( timer ) { clearTimeout( timer ); }&lt;br /&gt;
                if ( !r.ok ) { throw new Error( &#039;HTTP &#039; + r.status ); }&lt;br /&gt;
                return r.json();&lt;br /&gt;
            } )&lt;br /&gt;
            .then( function ( data ) {&lt;br /&gt;
                setCachedResult( sparql, data );&lt;br /&gt;
                return data;&lt;br /&gt;
            } );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function renderTable( data, title ) {&lt;br /&gt;
        var vars = data.head.vars,&lt;br /&gt;
            rows = data.results.bindings,&lt;br /&gt;
            vLen = vars.length,&lt;br /&gt;
            html = [];&lt;br /&gt;
&lt;br /&gt;
        if ( title ) {&lt;br /&gt;
            html.push( &#039;&amp;lt;h3&amp;gt;&#039;, escapeHtml( title ), &#039;&amp;lt;/h3&amp;gt;&#039; );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        html.push( &#039;&amp;lt;table class=&amp;quot;wikitable sortable&amp;quot;&amp;gt;&amp;lt;thead&amp;gt;&amp;lt;tr&amp;gt;&#039; );&lt;br /&gt;
        for ( var i = 0; i &amp;lt; vLen; i++ ) {&lt;br /&gt;
            html.push( &#039;&amp;lt;th&amp;gt;&#039;, escapeHtml( vars[i].replace( /_/g, &#039; &#039; ) ), &#039;&amp;lt;/th&amp;gt;&#039; );&lt;br /&gt;
        }&lt;br /&gt;
        html.push( &#039;&amp;lt;/tr&amp;gt;&amp;lt;/thead&amp;gt;&amp;lt;tbody&amp;gt;&#039; );&lt;br /&gt;
&lt;br /&gt;
        for ( var r = 0, rLen = rows.length; r &amp;lt; rLen; r++ ) {&lt;br /&gt;
            var row = rows[r];&lt;br /&gt;
            html.push( &#039;&amp;lt;tr&amp;gt;&#039; );&lt;br /&gt;
            for ( var c = 0; c &amp;lt; vLen; c++ ) {&lt;br /&gt;
                var v = vars[c],&lt;br /&gt;
                    val = row[v] ? row[v].value : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
                if ( val.indexOf( COMMONS_MARKER ) !== -1 ) {&lt;br /&gt;
                    var thumb = val.replace( /^http:\/\//, &#039;https://&#039; );&lt;br /&gt;
                    html.push( &#039;&amp;lt;td&amp;gt;&amp;lt;img src=&amp;quot;&#039;, encodeURI( thumb ), &#039;?width=100&amp;quot; style=&amp;quot;max-height:80px;&amp;quot; alt=&amp;quot;&amp;quot; loading=&amp;quot;lazy&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&#039; );&lt;br /&gt;
                } else if ( val.indexOf( WIKIDATA_PREFIX ) === 0 || val.indexOf( WIKIDATA_HTTPS ) === 0 ) {&lt;br /&gt;
                    var qid = val.substring( val.lastIndexOf( &#039;/&#039; ) + 1 );&lt;br /&gt;
                    html.push( &#039;&amp;lt;td&amp;gt;&amp;lt;a href=&amp;quot;https://www.wikidata.org/wiki/&#039;, qid, &#039;&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;&#039;, qid, &#039;&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&#039; );&lt;br /&gt;
                } else {&lt;br /&gt;
                    html.push( &#039;&amp;lt;td&amp;gt;&#039;, escapeHtml( val ), &#039;&amp;lt;/td&amp;gt;&#039; );&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            html.push( &#039;&amp;lt;/tr&amp;gt;&#039; );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        html.push( &#039;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&#039; );&lt;br /&gt;
        return html.join( &#039;&#039; );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        var contextNode = ( $content &amp;amp;&amp;amp; $content[0] ) ? $content[0] : document,&lt;br /&gt;
            tables = contextNode.querySelectorAll( &#039;.wikidata-sparql-table:not([data-loaded])&#039; );&lt;br /&gt;
&lt;br /&gt;
        if ( !tables.length ) { return; }&lt;br /&gt;
&lt;br /&gt;
        var renderPromises = Array.prototype.map.call( tables, function ( el ) {&lt;br /&gt;
            el.setAttribute( &#039;data-loaded&#039;, &#039;1&#039; );&lt;br /&gt;
            var sparql = el.getAttribute( &#039;data-sparql&#039; ),&lt;br /&gt;
                title  = el.getAttribute( &#039;data-title&#039; );&lt;br /&gt;
&lt;br /&gt;
            if ( !sparql ) { return Promise.resolve( null ); }&lt;br /&gt;
            el.textContent = &#039;⏳ Loading…&#039;;&lt;br /&gt;
&lt;br /&gt;
            return fetchSparql( sparql )&lt;br /&gt;
                .then( function ( data ) {&lt;br /&gt;
                    el.innerHTML = renderTable( data, title );&lt;br /&gt;
                    return el;&lt;br /&gt;
                } )&lt;br /&gt;
                .catch( function ( err ) {&lt;br /&gt;
                    el.textContent = ( err &amp;amp;&amp;amp; err.name === &#039;AbortError&#039; )&lt;br /&gt;
                        ? &#039;⚠️ Timed out loading data.&#039;&lt;br /&gt;
                        : &#039;⚠️ Failed to load.&#039;;&lt;br /&gt;
                } );&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        // Fire the sortable hook only once, after every table on the page has settled&lt;br /&gt;
        Promise.all( renderPromises ).then( function ( renderedElements ) {&lt;br /&gt;
            var validElements = renderedElements.filter( Boolean );&lt;br /&gt;
            if ( validElements.length ) {&lt;br /&gt;
                mw.hook( &#039;wikipage.content&#039; ).fire( $( validElements ) );&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
    } );&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
/* DO NOT ADD CODE BELOW THIS LINE */&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=MediaWiki:Common.js&amp;diff=18623</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=MediaWiki:Common.js&amp;diff=18623"/>
		<updated>2026-09-21T12:03:27Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Tout JavaScript présent ici sera exécuté par tous les utilisateurs à chaque chargement de page. */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally&lt;br /&gt;
 * loaded for all users on every wiki page. If possible create a gadget that is&lt;br /&gt;
 * enabled by default instead of adding it here (since gadgets are fully&lt;br /&gt;
 * optimized ResourceLoader modules with possibility to add dependencies etc.)&lt;br /&gt;
 *&lt;br /&gt;
 * Since Common.js isn&#039;t a gadget, there is no place to declare its&lt;br /&gt;
 * dependencies, so we have to lazy load them with mw.loader.using on demand and&lt;br /&gt;
 * then execute the rest in the callback. In most cases these dependencies will&lt;br /&gt;
 * be loaded (or loading) already and the callback will not be delayed. In case a&lt;br /&gt;
 * dependency hasn&#039;t arrived yet it&#039;ll make sure those are loaded before this.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* global mw, $ */&lt;br /&gt;
/* jshint strict:false, browser:true */&lt;br /&gt;
&lt;br /&gt;
mw.loader.using( [ &#039;mediawiki.util&#039; ] ).then( function () {&lt;br /&gt;
&lt;br /&gt;
    mw.log.deprecate( window, &#039;addPortletLink&#039;, mw.util.addPortletLink, &#039;Use mw.util.addPortletLink instead&#039; );&lt;br /&gt;
&lt;br /&gt;
    var extraCSS = mw.util.getParamValue( &#039;withCSS&#039; ),&lt;br /&gt;
        extraJS  = mw.util.getParamValue( &#039;withJS&#039; );&lt;br /&gt;
&lt;br /&gt;
    if ( extraCSS ) {&lt;br /&gt;
        if ( /^MediaWiki:[^&amp;amp;&amp;lt;&amp;gt;=%#]*\.css$/.test( extraCSS ) ) {&lt;br /&gt;
            mw.loader.load( &#039;/w/index.php?title=&#039; + encodeURIComponent( extraCSS ) + &#039;&amp;amp;action=raw&amp;amp;ctype=text/css&#039;, &#039;text/css&#039; );&lt;br /&gt;
        } else {&lt;br /&gt;
            mw.notify( &#039;Only pages from the MediaWiki namespace are allowed.&#039;, { title: &#039;Invalid withCSS value&#039; } );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( extraJS ) {&lt;br /&gt;
        if ( /^MediaWiki:[^&amp;amp;&amp;lt;&amp;gt;=%#]*\.js$/.test( extraJS ) ) {&lt;br /&gt;
            mw.loader.load( &#039;/w/index.php?title=&#039; + encodeURIComponent( extraJS ) + &#039;&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
        } else {&lt;br /&gt;
            mw.notify( &#039;Only pages from the MediaWiki namespace are allowed.&#039;, { title: &#039;Invalid withJS value&#039; } );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Collapsible tables&lt;br /&gt;
     */&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        var $tables = $content.find( &#039;table.collapsible:not(.mw-collapsible)&#039; );&lt;br /&gt;
        if ( !$tables.length ) { return; }&lt;br /&gt;
&lt;br /&gt;
        $tables.addClass( &#039;mw-collapsible&#039; ).each( function () {&lt;br /&gt;
            if ( $( this ).hasClass( &#039;collapsed&#039; ) ) {&lt;br /&gt;
                $( this ).addClass( &#039;mw-collapsed&#039; );&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        mw.loader.using( &#039;jquery.makeCollapsible&#039; ).then( function () {&lt;br /&gt;
            $tables.makeCollapsible();&lt;br /&gt;
        } );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    mw.hook( &#039;wikipage.collapsibleContent&#039; ).add( function ( $collapsibleContent ) {&lt;br /&gt;
        var autoCollapseThreshold = 2,&lt;br /&gt;
            hasOuter = $collapsibleContent.parents( &#039;.outercollapse&#039; ).length &amp;gt; 0;&lt;br /&gt;
&lt;br /&gt;
        $collapsibleContent.each( function () {&lt;br /&gt;
            var $element = $( this );&lt;br /&gt;
&lt;br /&gt;
            if ( $element.hasClass( &#039;collapsible&#039; ) ) {&lt;br /&gt;
                $element.find( &#039;tr:first &amp;gt; th:first&#039; ).prepend( $element.find( &#039;tr:first &amp;gt; * &amp;gt; .mw-collapsible-toggle&#039; ) );&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            if ( $collapsibleContent.length &amp;gt;= autoCollapseThreshold &amp;amp;&amp;amp; $element.hasClass( &#039;autocollapse&#039; ) ) {&lt;br /&gt;
                $element.data( &#039;mw-collapsible&#039; ).collapse();&lt;br /&gt;
            } else if ( $element.hasClass( &#039;innercollapse&#039; ) &amp;amp;&amp;amp; hasOuter ) {&lt;br /&gt;
                $element.data( &#039;mw-collapsible&#039; ).collapse();&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            var $toggle = $element.find( &#039;.mw-collapsible-toggle&#039; );&lt;br /&gt;
            if ( $toggle.length &amp;amp;&amp;amp; $toggle.parent()[0].style.color ) {&lt;br /&gt;
                $toggle.css( &#039;color&#039;, &#039;inherit&#039; ).find( &#039;.mw-collapsible-text&#039; ).css( &#039;color&#039;, &#039;inherit&#039; );&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Force interwiki links to open in a new tab&lt;br /&gt;
     */&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        $content.find( &#039;a.extiw&#039; ).attr( &#039;target&#039;, &#039;_blank&#039; ).attr( &#039;rel&#039;, &#039;noopener noreferrer&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Optimized Wikidata SPARQL tables rendering&lt;br /&gt;
     */&lt;br /&gt;
    var WIKIDATA_PREFIX = &#039;http://www.wikidata.org/entity/&#039;,&lt;br /&gt;
        WIKIDATA_HTTPS  = &#039;https://www.wikidata.org/entity/&#039;,&lt;br /&gt;
        COMMONS_MARKER  = &#039;Special:FilePath/&#039;;&lt;br /&gt;
&lt;br /&gt;
    function escapeHtml( text ) {&lt;br /&gt;
        return String( text )&lt;br /&gt;
            .replace( /&amp;amp;/g, &#039;&amp;amp;amp;&#039; )&lt;br /&gt;
            .replace( /&amp;lt;/g, &#039;&amp;amp;lt;&#039; )&lt;br /&gt;
            .replace( /&amp;gt;/g, &#039;&amp;amp;gt;&#039; )&lt;br /&gt;
            .replace( /&amp;quot;/g, &#039;&amp;amp;quot;&#039; )&lt;br /&gt;
            .replace( /&#039;/g, &#039;&amp;amp;#39;&#039; );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        var contextNode = ($content &amp;amp;&amp;amp; $content[0]) ? $content[0] : document,&lt;br /&gt;
            tables = contextNode.querySelectorAll( &#039;.wikidata-sparql-table:not([data-loaded])&#039; );&lt;br /&gt;
&lt;br /&gt;
        if ( !tables.length ) { return; }&lt;br /&gt;
&lt;br /&gt;
        var renderPromises = Array.prototype.map.call( tables, function ( el ) {&lt;br /&gt;
            el.setAttribute( &#039;data-loaded&#039;, &#039;1&#039; );&lt;br /&gt;
            var sparql = el.getAttribute( &#039;data-sparql&#039; ),&lt;br /&gt;
                title  = el.getAttribute( &#039;data-title&#039; );&lt;br /&gt;
&lt;br /&gt;
            if ( !sparql ) { return Promise.resolve(); }&lt;br /&gt;
            el.textContent = &#039;⏳ Loading…&#039;;&lt;br /&gt;
&lt;br /&gt;
            var fetchUrl = &#039;https://query.wikidata.org/sparql?format=json&amp;amp;query=&#039; + encodeURIComponent( sparql );&lt;br /&gt;
&lt;br /&gt;
            return fetch( fetchUrl, { headers: { Accept: &#039;application/json&#039; } } )&lt;br /&gt;
                .then( function ( r ) { return r.json(); } )&lt;br /&gt;
                .then( function ( data ) {&lt;br /&gt;
                    var vars = data.head.vars,&lt;br /&gt;
                        rows = data.results.bindings,&lt;br /&gt;
                        html = [],&lt;br /&gt;
                        vLen = vars.length;&lt;br /&gt;
&lt;br /&gt;
                    if ( title ) {&lt;br /&gt;
                        html.push( &#039;&amp;lt;h3&amp;gt;&#039;, escapeHtml( title ), &#039;&amp;lt;/h3&amp;gt;&#039; );&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    html.push( &#039;&amp;lt;table class=&amp;quot;wikitable sortable&amp;quot;&amp;gt;&amp;lt;thead&amp;gt;&amp;lt;tr&amp;gt;&#039; );&lt;br /&gt;
                    for ( var i = 0; i &amp;lt; vLen; i++ ) {&lt;br /&gt;
                        html.push( &#039;&amp;lt;th&amp;gt;&#039;, escapeHtml( vars[i].replace( /_/g, &#039; &#039; ) ), &#039;&amp;lt;/th&amp;gt;&#039; );&lt;br /&gt;
                    }&lt;br /&gt;
                    html.push( &#039;&amp;lt;/tr&amp;gt;&amp;lt;/thead&amp;gt;&amp;lt;tbody&amp;gt;&#039; );&lt;br /&gt;
&lt;br /&gt;
                    for ( var r = 0, rLen = rows.length; r &amp;lt; rLen; r++ ) {&lt;br /&gt;
                        var row = rows[r];&lt;br /&gt;
                        html.push( &#039;&amp;lt;tr&amp;gt;&#039; );&lt;br /&gt;
                        for ( var c = 0; c &amp;lt; vLen; c++ ) {&lt;br /&gt;
                            var v = vars[c],&lt;br /&gt;
                                val = row[v] ? row[v].value : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
                            if ( val.indexOf( COMMONS_MARKER ) !== -1 ) {&lt;br /&gt;
                                var thumb = val.replace( /^http:\/\//, &#039;https://&#039; );&lt;br /&gt;
                                html.push( &#039;&amp;lt;td&amp;gt;&amp;lt;img src=&amp;quot;&#039;, encodeURI( thumb ), &#039;?width=100&amp;quot; style=&amp;quot;max-height:80px;&amp;quot; alt=&amp;quot;&amp;quot; loading=&amp;quot;lazy&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&#039; );&lt;br /&gt;
                            } else if ( val.indexOf( WIKIDATA_PREFIX ) === 0 || val.indexOf( WIKIDATA_HTTPS ) === 0 ) {&lt;br /&gt;
                                var qid = val.substring( val.lastIndexOf( &#039;/&#039; ) + 1 );&lt;br /&gt;
                                html.push( &#039;&amp;lt;td&amp;gt;&amp;lt;a href=&amp;quot;https://www.wikidata.org/wiki/&#039;, qid, &#039;&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;&#039;, qid, &#039;&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&#039; );&lt;br /&gt;
                            } else {&lt;br /&gt;
                                html.push( &#039;&amp;lt;td&amp;gt;&#039;, escapeHtml( val ), &#039;&amp;lt;/td&amp;gt;&#039; );&lt;br /&gt;
                            }&lt;br /&gt;
                        }&lt;br /&gt;
                        html.push( &#039;&amp;lt;/tr&amp;gt;&#039; );&lt;br /&gt;
                    }&lt;br /&gt;
&lt;br /&gt;
                    html.push( &#039;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&#039; );&lt;br /&gt;
                    el.innerHTML = html.join( &#039;&#039; );&lt;br /&gt;
                    return el;&lt;br /&gt;
                } )&lt;br /&gt;
                .catch( function () {&lt;br /&gt;
                    el.textContent = &#039;⚠️ Failed to load.&#039;;&lt;br /&gt;
                } );&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        Promise.all( renderPromises ).then( function ( renderedElements ) {&lt;br /&gt;
            var validElements = renderedElements.filter( Boolean );&lt;br /&gt;
            if ( validElements.length ) {&lt;br /&gt;
                mw.hook( &#039;wikipage.content&#039; ).fire( $( validElements ) );&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
    } );&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
/* DO NOT ADD CODE BELOW THIS LINE */&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=MediaWiki:Common.js&amp;diff=18622</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=MediaWiki:Common.js&amp;diff=18622"/>
		<updated>2026-09-21T10:44:16Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Tout JavaScript présent ici sera exécuté par tous les utilisateurs à chaque chargement de page. */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally&lt;br /&gt;
 * loaded for all users on every wiki page. If possible create a gadget that is&lt;br /&gt;
 * enabled by default instead of adding it here (since gadgets are fully&lt;br /&gt;
 * optimized ResourceLoader modules with possibility to add dependencies etc.)&lt;br /&gt;
 *&lt;br /&gt;
 * Since Common.js isn&#039;t a gadget, there is no place to declare its&lt;br /&gt;
 * dependencies, so we have to lazy load them with mw.loader.using on demand and&lt;br /&gt;
 * then execute the rest in the callback. In most cases these dependencies will&lt;br /&gt;
 * be loaded (or loading) already and the callback will not be delayed. In case a&lt;br /&gt;
 * dependency hasn&#039;t arrived yet it&#039;ll make sure those are loaded before this.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* global mw, $ */&lt;br /&gt;
/* jshint strict:false, browser:true */&lt;br /&gt;
&lt;br /&gt;
// Modern ES6+ syntax is standard across all MediaWiki supported browsers&lt;br /&gt;
mw.loader.using( [ &#039;mediawiki.util&#039; ] ).then( function () {&lt;br /&gt;
    /* Begin of mw.loader.using callback */&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Map addPortletLink to mw.util&lt;br /&gt;
     * @deprecated&lt;br /&gt;
     */&lt;br /&gt;
    mw.log.deprecate( window, &#039;addPortletLink&#039;, mw.util.addPortletLink, &#039;Use mw.util.addPortletLink instead&#039; );&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Load JS and CSS by URL&lt;br /&gt;
     */&lt;br /&gt;
    var extraCSS = mw.util.getParamValue( &#039;withCSS&#039; ),&lt;br /&gt;
        extraJS  = mw.util.getParamValue( &#039;withJS&#039; );&lt;br /&gt;
&lt;br /&gt;
    if ( extraCSS ) {&lt;br /&gt;
        if ( /^MediaWiki:[^&amp;amp;&amp;lt;&amp;gt;=%#]*\.css$/.test( extraCSS ) ) {&lt;br /&gt;
            mw.loader.load( &#039;/w/index.php?title=&#039; + encodeURIComponent( extraCSS ) + &#039;&amp;amp;action=raw&amp;amp;ctype=text/css&#039;, &#039;text/css&#039; );&lt;br /&gt;
        } else {&lt;br /&gt;
            mw.notify( &#039;Only pages from the MediaWiki namespace are allowed.&#039;, { title: &#039;Invalid withCSS value&#039; } );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( extraJS ) {&lt;br /&gt;
        if ( /^MediaWiki:[^&amp;amp;&amp;lt;&amp;gt;=%#]*\.js$/.test( extraJS ) ) {&lt;br /&gt;
            mw.loader.load( &#039;/w/index.php?title=&#039; + encodeURIComponent( extraJS ) + &#039;&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
        } else {&lt;br /&gt;
            mw.notify( &#039;Only pages from the MediaWiki namespace are allowed.&#039;, { title: &#039;Invalid withJS value&#039; } );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Collapsible tables (shim for legacy .collapsible)&lt;br /&gt;
     */&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        var $tables = $content.find( &#039;table.collapsible:not(.mw-collapsible)&#039; );&lt;br /&gt;
&lt;br /&gt;
        if ( !$tables.length ) { return; }&lt;br /&gt;
&lt;br /&gt;
        $tables.addClass( &#039;mw-collapsible&#039; ).each( function () {&lt;br /&gt;
            if ( $( this ).hasClass( &#039;collapsed&#039; ) ) {&lt;br /&gt;
                $( this ).addClass( &#039;mw-collapsed&#039; );&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        mw.loader.using( &#039;jquery.makeCollapsible&#039; ).then( function () {&lt;br /&gt;
            $tables.makeCollapsible();&lt;br /&gt;
        } );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Support autocollapse, innercollapse, outercollapse&lt;br /&gt;
     */&lt;br /&gt;
    mw.hook( &#039;wikipage.collapsibleContent&#039; ).add( function ( $collapsibleContent ) {&lt;br /&gt;
        var autoCollapseThreshold = 2,&lt;br /&gt;
            hasOuter = $collapsibleContent.parents( &#039;.outercollapse&#039; ).length &amp;gt; 0;&lt;br /&gt;
&lt;br /&gt;
        $collapsibleContent.each( function () {&lt;br /&gt;
            var $element = $( this );&lt;br /&gt;
&lt;br /&gt;
            if ( $element.hasClass( &#039;collapsible&#039; ) ) {&lt;br /&gt;
                $element.find( &#039;tr:first &amp;gt; th:first&#039; ).prepend( $element.find( &#039;tr:first &amp;gt; * &amp;gt; .mw-collapsible-toggle&#039; ) );&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            if ( $collapsibleContent.length &amp;gt;= autoCollapseThreshold &amp;amp;&amp;amp; $element.hasClass( &#039;autocollapse&#039; ) ) {&lt;br /&gt;
                $element.data( &#039;mw-collapsible&#039; ).collapse();&lt;br /&gt;
            } else if ( $element.hasClass( &#039;innercollapse&#039; ) &amp;amp;&amp;amp; hasOuter ) {&lt;br /&gt;
                $element.data( &#039;mw-collapsible&#039; ).collapse();&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            var $toggle = $element.find( &#039;.mw-collapsible-toggle&#039; );&lt;br /&gt;
            if ( $toggle.length &amp;amp;&amp;amp; $toggle.parent()[0].style.color ) {&lt;br /&gt;
                $toggle.css( &#039;color&#039;, &#039;inherit&#039; ).find( &#039;.mw-collapsible-text&#039; ).css( &#039;color&#039;, &#039;inherit&#039; );&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Force interwiki links (e.g. [[wikidata:...]]) to open in a new tab&lt;br /&gt;
     */&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        $content.find( &#039;a.extiw&#039; ).attr( &#039;target&#039;, &#039;_blank&#039; ).attr( &#039;rel&#039;, &#039;noopener noreferrer&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* End of mw.loader.using callback */&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Wikidata SPARQL tables rendering&lt;br /&gt;
     */&lt;br /&gt;
    var WIKIDATA_REGEX = /https?:\/\/www\.wikidata\.org\/entity\/(Q\d+)/g,&lt;br /&gt;
        COMMONS_REGEX  = /^https?:\/\/commons\.wikimedia\.org\/wiki\/Special:FilePath\//i;&lt;br /&gt;
&lt;br /&gt;
    function escapeHtml( text ) {&lt;br /&gt;
        return String( text )&lt;br /&gt;
            .replace( /&amp;amp;/g, &#039;&amp;amp;amp;&#039; )&lt;br /&gt;
            .replace( /&amp;lt;/g, &#039;&amp;amp;lt;&#039; )&lt;br /&gt;
            .replace( /&amp;gt;/g, &#039;&amp;amp;gt;&#039; )&lt;br /&gt;
            .replace( /&amp;quot;/g, &#039;&amp;amp;quot;&#039; )&lt;br /&gt;
            .replace( /&#039;/g, &#039;&amp;amp;#39;&#039; );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        var tables = ($content ? $content[0] : document).querySelectorAll( &#039;.wikidata-sparql-table:not([data-loaded])&#039; );&lt;br /&gt;
        if ( !tables.length ) { return; }&lt;br /&gt;
&lt;br /&gt;
        tables.forEach( function ( el ) {&lt;br /&gt;
            el.setAttribute( &#039;data-loaded&#039;, &#039;1&#039; );&lt;br /&gt;
            var sparql = el.getAttribute( &#039;data-sparql&#039; ),&lt;br /&gt;
                title  = el.getAttribute( &#039;data-title&#039; );&lt;br /&gt;
&lt;br /&gt;
            if ( !sparql ) { return; }&lt;br /&gt;
            el.textContent = &#039;⏳ Loading…&#039;;&lt;br /&gt;
&lt;br /&gt;
            fetch( &#039;https://query.wikidata.org/sparql?format=json&amp;amp;query=&#039; + encodeURIComponent( sparql ), {&lt;br /&gt;
                headers: { Accept: &#039;application/json&#039; }&lt;br /&gt;
            } )&lt;br /&gt;
            .then( function ( r ) { return r.json(); } )&lt;br /&gt;
            .then( function ( data ) {&lt;br /&gt;
                var vars = data.head.vars,&lt;br /&gt;
                    rows = data.results.bindings,&lt;br /&gt;
                    html = [],&lt;br /&gt;
                    vLen = vars.length;&lt;br /&gt;
&lt;br /&gt;
                if ( title ) {&lt;br /&gt;
                    html.push( &#039;&amp;lt;h3&amp;gt;&#039;, escapeHtml( title ), &#039;&amp;lt;/h3&amp;gt;&#039; );&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                html.push( &#039;&amp;lt;table class=&amp;quot;wikitable sortable&amp;quot;&amp;gt;&amp;lt;thead&amp;gt;&amp;lt;tr&amp;gt;&#039; );&lt;br /&gt;
                for ( var i = 0; i &amp;lt; vLen; i++ ) {&lt;br /&gt;
                    // FIX #1: Fixed closing &amp;lt;/th&amp;gt; tag (previously &amp;lt;th&amp;gt;)&lt;br /&gt;
                    html.push( &#039;&amp;lt;th&amp;gt;&#039;, escapeHtml( vars[i].replace( /_/g, &#039; &#039; ) ), &#039;&amp;lt;/th&amp;gt;&#039; );&lt;br /&gt;
                }&lt;br /&gt;
                html.push( &#039;&amp;lt;/tr&amp;gt;&amp;lt;/thead&amp;gt;&amp;lt;tbody&amp;gt;&#039; );&lt;br /&gt;
&lt;br /&gt;
                for ( var r = 0, rLen = rows.length; r &amp;lt; rLen; r++ ) {&lt;br /&gt;
                    var row = rows[r];&lt;br /&gt;
                    html.push( &#039;&amp;lt;tr&amp;gt;&#039; );&lt;br /&gt;
                    for ( var c = 0; c &amp;lt; vLen; c++ ) {&lt;br /&gt;
                        var v = vars[c],&lt;br /&gt;
                            val = row[v] ? row[v].value : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
                        if ( COMMONS_REGEX.test( val ) ) {&lt;br /&gt;
                            var thumb = val.replace( /^http:\/\//, &#039;https://&#039; );&lt;br /&gt;
                            html.push( &#039;&amp;lt;td&amp;gt;&amp;lt;img src=&amp;quot;&#039;, encodeURI( thumb ), &#039;?width=100&amp;quot; style=&amp;quot;max-height:80px;&amp;quot; alt=&amp;quot;&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&#039; );&lt;br /&gt;
                        } else if ( WIKIDATA_REGEX.test( val ) ) {&lt;br /&gt;
                            val = val.replace( WIKIDATA_REGEX, &#039;&amp;lt;a href=&amp;quot;https://www.wikidata.org/wiki/$1&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;$1&amp;lt;/a&amp;gt;&#039; );&lt;br /&gt;
                            html.push( &#039;&amp;lt;td&amp;gt;&#039;, val, &#039;&amp;lt;/td&amp;gt;&#039; );&lt;br /&gt;
                        } else {&lt;br /&gt;
                            // FIX #2: Escape raw text/label content to prevent layout breakage&lt;br /&gt;
                            html.push( &#039;&amp;lt;td&amp;gt;&#039;, escapeHtml( val ), &#039;&amp;lt;/td&amp;gt;&#039; );&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                    html.push( &#039;&amp;lt;/tr&amp;gt;&#039; );&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                html.push( &#039;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&#039; );&lt;br /&gt;
                el.innerHTML = html.join(&#039;&#039;);&lt;br /&gt;
&lt;br /&gt;
                // Trigger MediaWiki table sorting module if loaded&lt;br /&gt;
                mw.hook( &#039;wikipage.content&#039; ).fire( $( el ) );&lt;br /&gt;
            } )&lt;br /&gt;
            .catch( function () {&lt;br /&gt;
                el.textContent = &#039;⚠️ Failed to load.&#039;;&lt;br /&gt;
            } );&lt;br /&gt;
        } );&lt;br /&gt;
    } );&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
/* DO NOT ADD CODE BELOW THIS LINE */&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=Module:WikidataTable&amp;diff=18621</id>
		<title>Module:WikidataTable</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=Module:WikidataTable&amp;diff=18621"/>
		<updated>2026-09-21T10:41:43Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    -- Fetch arguments from frame or parent template frame&lt;br /&gt;
    local getArgs = function(key)&lt;br /&gt;
        return (frame.args and frame.args[key]) &lt;br /&gt;
            or (frame:getParent() and frame:getParent().args and frame:getParent().args[key]) &lt;br /&gt;
            or &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local sparql = getArgs(&amp;quot;sparql&amp;quot;)&lt;br /&gt;
    local title  = getArgs(&amp;quot;title&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if sparql == &amp;quot;&amp;quot; then&lt;br /&gt;
        return &amp;quot;⚠️ No SPARQL query provided.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Clean query string&lt;br /&gt;
    sparql = sparql:gsub(&#039;&amp;lt;nowiki&amp;gt;&#039;, &#039;&#039;):gsub(&#039;&amp;lt;/nowiki&amp;gt;&#039;, &#039;&#039;)&lt;br /&gt;
                   :gsub(&#039;\194\160&#039;, &#039; &#039;) -- Remove non-breaking spaces&lt;br /&gt;
                   :gsub(&#039;%s+&#039;, &#039; &#039;)     -- Collapse spaces and newlines&lt;br /&gt;
&lt;br /&gt;
    local function htmlEncode(s)&lt;br /&gt;
        return s:gsub(&#039;&amp;amp;&#039;, &#039;&amp;amp;amp;&#039;)&lt;br /&gt;
                :gsub(&#039;&amp;quot;&#039;, &#039;&amp;amp;quot;&#039;)&lt;br /&gt;
                :gsub(&#039;&amp;lt;&#039;, &#039;&amp;amp;lt;&#039;)&lt;br /&gt;
                :gsub(&#039;&amp;gt;&#039;, &#039;&amp;amp;gt;&#039;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return string.format(&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;wikidata-sparql-table&amp;quot; data-sparql=&amp;quot;%s&amp;quot; data-title=&amp;quot;%s&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        htmlEncode(sparql),&lt;br /&gt;
        htmlEncode(title)&lt;br /&gt;
    )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=Module:WikidataTable&amp;diff=18620</id>
		<title>Module:WikidataTable</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=Module:WikidataTable&amp;diff=18620"/>
		<updated>2026-09-21T10:36:20Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    -- Fetch arguments, defaulting to empty string&lt;br /&gt;
    local sparql = frame.args.sparql or &amp;quot;&amp;quot;&lt;br /&gt;
    local title  = frame.args.title  or &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    -- Use frame:getParent() as fallback if parameters are passed directly to the template&lt;br /&gt;
    if sparql == &amp;quot;&amp;quot; and frame:getParent() then&lt;br /&gt;
        sparql = frame:getParent().args.sparql or &amp;quot;&amp;quot;&lt;br /&gt;
        title  = frame:getParent().args.title  or &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if sparql == &amp;quot;&amp;quot; then&lt;br /&gt;
        return &amp;quot;⚠️ No SPARQL query provided.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local function cleanAndEncode(s)&lt;br /&gt;
        -- 1. Replace UTF-8 non-breaking spaces (\194\160) with standard spaces&lt;br /&gt;
        s = s:gsub(&#039;\194\160&#039;, &#039; &#039;)&lt;br /&gt;
        &lt;br /&gt;
        -- 2. Collapse all newlines, tabs, and multiple spaces into single standard spaces&lt;br /&gt;
        s = s:gsub(&#039;%s+&#039;, &#039; &#039;)&lt;br /&gt;
        &lt;br /&gt;
        -- 3. Trim leading and trailing whitespace&lt;br /&gt;
        s = mw.text.trim(s)&lt;br /&gt;
&lt;br /&gt;
        -- 4. Escape special HTML attribute characters&lt;br /&gt;
        return s:gsub(&#039;&amp;amp;&#039;, &#039;&amp;amp;amp;&#039;)&lt;br /&gt;
                :gsub(&#039;&amp;quot;&#039;, &#039;&amp;amp;quot;&#039;)&lt;br /&gt;
                :gsub(&#039;&amp;lt;&#039;, &#039;&amp;amp;lt;&#039;)&lt;br /&gt;
                :gsub(&#039;&amp;gt;&#039;, &#039;&amp;amp;gt;&#039;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local cleanSparql = cleanAndEncode(sparql)&lt;br /&gt;
    local cleanTitle  = cleanAndEncode(title)&lt;br /&gt;
&lt;br /&gt;
    -- Return compact HTML output without outer whitespace or trailing newlines&lt;br /&gt;
    return string.format(&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;wikidata-sparql-table&amp;quot; data-sparql=&amp;quot;%s&amp;quot; data-title=&amp;quot;%s&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        cleanSparql,&lt;br /&gt;
        cleanTitle&lt;br /&gt;
    )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=Vocabulaire_grimpe&amp;diff=18619</id>
		<title>Vocabulaire grimpe</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=Vocabulaire_grimpe&amp;diff=18619"/>
		<updated>2026-09-21T10:35:59Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : Révocation d’une modification de AdrianoRutz (discussion) vers la dernière version de CopainsCastors&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[Fichier:Fotothek df ps 0000628 Sport ^ Felsen.jpg|vignette|Grimpeur en fissure]]&lt;br /&gt;
&lt;br /&gt;
==Matériel d&#039;escalade==&lt;br /&gt;
{{#invoke:WikidataTable|render&lt;br /&gt;
| title = Matériel d&#039;escalade du grimpeur&lt;br /&gt;
| sparql = SELECT ?item ?itemLabel ?image WHERE {&lt;br /&gt;
  VALUES ?item { wd:Q284523 wd:Q1774271 wd:Q1774270 wd:Q973632 wd:Q2141382 wd:Q1774102 wd:Q588395 wd:Q1384878}&lt;br /&gt;
  OPTIONAL { ?item wdt:P18 ?image. }&lt;br /&gt;
  SERVICE wikibase:label { bd:serviceParam wikibase:language &amp;quot;fr,de,it,en&amp;quot;. }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Noeuds==&lt;br /&gt;
{{#invoke:WikidataTable|render&lt;br /&gt;
| title = Noeuds utilisés en escalade&lt;br /&gt;
| sparql = SELECT ?item ?itemLabel ?image WHERE {&lt;br /&gt;
  VALUES ?item { wd:Q732975 wd:Q930352 wd:Q1348740 wd:Q1788384}&lt;br /&gt;
  OPTIONAL { ?item wdt:P18 ?image. }&lt;br /&gt;
  SERVICE wikibase:label { bd:serviceParam wikibase:language &amp;quot;fr,de,it,en&amp;quot;. }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
https://commons.wikimedia.org/wiki/Category:Climbing_knots&lt;br /&gt;
&lt;br /&gt;
==Technique d&#039;escalade==&lt;br /&gt;
{{#invoke:WikidataTable|render&lt;br /&gt;
| title = Techniques d&#039;escalade&lt;br /&gt;
| sparql = SELECT ?item ?itemLabel ?image WHERE {&lt;br /&gt;
  VALUES ?item { wd:Q123225638 wd:Q253101}&lt;br /&gt;
  OPTIONAL { ?item wdt:P18 ?image. }&lt;br /&gt;
  SERVICE wikibase:label { bd:serviceParam wikibase:language &amp;quot;fr,de,it,en&amp;quot;. }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
A voir pour une requête avec Q1774249&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Equipement pour voie==&lt;br /&gt;
{{#invoke:WikidataTable|render&lt;br /&gt;
| title = Equipement pour voie&lt;br /&gt;
| sparql = SELECT ?item ?itemLabel ?image WHERE {&lt;br /&gt;
  VALUES ?item { wd:Q1885474 wd:Q3561963 wd:Q1404337 wd:Q1751668}&lt;br /&gt;
  OPTIONAL { ?item wdt:P18 ?image. }&lt;br /&gt;
  SERVICE wikibase:label { bd:serviceParam wikibase:language &amp;quot;fr,de,it,en&amp;quot;. }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Paroie (naturelle)==&lt;br /&gt;
&lt;br /&gt;
Prise : Q500023&lt;br /&gt;
== Articles connexes ==&lt;br /&gt;
&lt;br /&gt;
* [[Vocabulaire alpin]]&lt;br /&gt;
* [[Vocabulaire ski]]&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=Vocabulaire_grimpe&amp;diff=18618</id>
		<title>Vocabulaire grimpe</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=Vocabulaire_grimpe&amp;diff=18618"/>
		<updated>2026-09-21T10:35:42Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[Fichier:Fotothek df ps 0000628 Sport ^ Felsen.jpg|vignette|Grimpeur en fissure]]&lt;br /&gt;
&lt;br /&gt;
==Matériel d&#039;escalade==&lt;br /&gt;
{{#invoke:WikidataTable|render&lt;br /&gt;
| title = Matériel d&#039;escalade du grimpeur&lt;br /&gt;
| sparql = SELECT ?item ?itemLabel ?image WHERE {&lt;br /&gt;
  VALUES ?item { wd:Q284523 wd:Q1774271 wd:Q1774270 wd:Q973632 wd:Q2141382 wd:Q1774102 wd:Q588395 wd:Q1384878}&lt;br /&gt;
  OPTIONAL { ?item wdt:P18 ?image. }&lt;br /&gt;
  SERVICE wikibase:label { bd:serviceParam wikibase:language &amp;quot;fr,de,it,en&amp;quot;. }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Noeuds==&lt;br /&gt;
{{#invoke:WikidataTable|render&lt;br /&gt;
| title = Noeuds utilisés en escalade&lt;br /&gt;
| sparql = SELECT ?item ?itemLabel ?image WHERE {&lt;br /&gt;
VALUES ?item { wd:Q732975 wd:Q930352 wd:Q1348740 wd:Q1788384}&lt;br /&gt;
OPTIONAL { ?item wdt:P18 ?image. }&lt;br /&gt;
SERVICE wikibase:label { bd:serviceParam wikibase:language &amp;quot;fr,de,it,en&amp;quot;. }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
https://commons.wikimedia.org/wiki/Category:Climbing_knots&lt;br /&gt;
&lt;br /&gt;
==Technique d&#039;escalade==&lt;br /&gt;
{{#invoke:WikidataTable|render&lt;br /&gt;
| title = Techniques d&#039;escalade&lt;br /&gt;
| sparql = SELECT ?item ?itemLabel ?image WHERE {&lt;br /&gt;
  VALUES ?item { wd:Q123225638 wd:Q253101}&lt;br /&gt;
  OPTIONAL { ?item wdt:P18 ?image. }&lt;br /&gt;
  SERVICE wikibase:label { bd:serviceParam wikibase:language &amp;quot;fr,de,it,en&amp;quot;. }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
A voir pour une requête avec Q1774249&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Equipement pour voie==&lt;br /&gt;
{{#invoke:WikidataTable|render&lt;br /&gt;
| title = Equipement pour voie&lt;br /&gt;
| sparql = SELECT ?item ?itemLabel ?image WHERE {&lt;br /&gt;
  VALUES ?item { wd:Q1885474 wd:Q3561963 wd:Q1404337 wd:Q1751668}&lt;br /&gt;
  OPTIONAL { ?item wdt:P18 ?image. }&lt;br /&gt;
  SERVICE wikibase:label { bd:serviceParam wikibase:language &amp;quot;fr,de,it,en&amp;quot;. }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Paroie (naturelle)==&lt;br /&gt;
&lt;br /&gt;
Prise : Q500023&lt;br /&gt;
== Articles connexes ==&lt;br /&gt;
&lt;br /&gt;
* [[Vocabulaire alpin]]&lt;br /&gt;
* [[Vocabulaire ski]]&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=Module:WikidataTable&amp;diff=18617</id>
		<title>Module:WikidataTable</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=Module:WikidataTable&amp;diff=18617"/>
		<updated>2026-09-21T10:34:14Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
    local sparql = frame.args.sparql or &amp;quot;&amp;quot;&lt;br /&gt;
    local title  = frame.args.title  or &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if sparql == &amp;quot;&amp;quot; then&lt;br /&gt;
        return &amp;quot;⚠️ No SPARQL query provided.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local function htmlEncode(s)&lt;br /&gt;
        return s:gsub(&#039;\194\160&#039;, &#039; &#039;)           -- Normalize non-breaking spaces&lt;br /&gt;
                :gsub(&#039;&amp;amp;&#039;, &#039;&amp;amp;amp;&#039;)              -- Escape &amp;amp;&lt;br /&gt;
                :gsub(&#039;&amp;quot;&#039;, &#039;&amp;amp;quot;&#039;)             -- Escape &amp;quot;&lt;br /&gt;
                :gsub(&#039;&amp;lt;&#039;, &#039;&amp;amp;lt;&#039;)               -- Escape &amp;lt;&lt;br /&gt;
                :gsub(&#039;&amp;gt;&#039;, &#039;&amp;amp;gt;&#039;)               -- Escape &amp;gt;&lt;br /&gt;
                :gsub(&#039;\r?\n&#039;, &#039; &#039;)              -- Collapse multi-line queries onto one line&lt;br /&gt;
                :gsub(&#039;%s+&#039;, &#039; &#039;)                -- Clean up multiple consecutive spaces&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return string.format(&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;wikidata-sparql-table&amp;quot; data-sparql=&amp;quot;%s&amp;quot; data-title=&amp;quot;%s&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        htmlEncode(sparql),&lt;br /&gt;
        htmlEncode(title)&lt;br /&gt;
    )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=MediaWiki:Common.js&amp;diff=18616</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=MediaWiki:Common.js&amp;diff=18616"/>
		<updated>2026-09-21T09:33:28Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Tout JavaScript présent ici sera exécuté par tous les utilisateurs à chaque chargement de page. */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally&lt;br /&gt;
 * loaded for all users on every wiki page. If possible create a gadget that is&lt;br /&gt;
 * enabled by default instead of adding it here (since gadgets are fully&lt;br /&gt;
 * optimized ResourceLoader modules with possibility to add dependencies etc.)&lt;br /&gt;
 *&lt;br /&gt;
 * Since Common.js isn&#039;t a gadget, there is no place to declare its&lt;br /&gt;
 * dependencies, so we have to lazy load them with mw.loader.using on demand and&lt;br /&gt;
 * then execute the rest in the callback. In most cases these dependencies will&lt;br /&gt;
 * be loaded (or loading) already and the callback will not be delayed. In case a&lt;br /&gt;
 * dependency hasn&#039;t arrived yet it&#039;ll make sure those are loaded before this.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* global mw, $ */&lt;br /&gt;
/* jshint strict:false, browser:true */&lt;br /&gt;
&lt;br /&gt;
// Modern ES6+ syntax is standard across all MediaWiki supported browsers&lt;br /&gt;
mw.loader.using( [ &#039;mediawiki.util&#039; ] ).then( function () {&lt;br /&gt;
    /* Begin of mw.loader.using callback */&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Map addPortletLink to mw.util&lt;br /&gt;
     * @deprecated&lt;br /&gt;
     */&lt;br /&gt;
    mw.log.deprecate( window, &#039;addPortletLink&#039;, mw.util.addPortletLink, &#039;Use mw.util.addPortletLink instead&#039; );&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Load JS and CSS by URL&lt;br /&gt;
     */&lt;br /&gt;
    var extraCSS = mw.util.getParamValue( &#039;withCSS&#039; ),&lt;br /&gt;
        extraJS  = mw.util.getParamValue( &#039;withJS&#039; );&lt;br /&gt;
&lt;br /&gt;
    if ( extraCSS ) {&lt;br /&gt;
        if ( /^MediaWiki:[^&amp;amp;&amp;lt;&amp;gt;=%#]*\.css$/.test( extraCSS ) ) {&lt;br /&gt;
            mw.loader.load( &#039;/w/index.php?title=&#039; + encodeURIComponent( extraCSS ) + &#039;&amp;amp;action=raw&amp;amp;ctype=text/css&#039;, &#039;text/css&#039; );&lt;br /&gt;
        } else {&lt;br /&gt;
            mw.notify( &#039;Only pages from the MediaWiki namespace are allowed.&#039;, { title: &#039;Invalid withCSS value&#039; } );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( extraJS ) {&lt;br /&gt;
        if ( /^MediaWiki:[^&amp;amp;&amp;lt;&amp;gt;=%#]*\.js$/.test( extraJS ) ) {&lt;br /&gt;
            mw.loader.load( &#039;/w/index.php?title=&#039; + encodeURIComponent( extraJS ) + &#039;&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
        } else {&lt;br /&gt;
            mw.notify( &#039;Only pages from the MediaWiki namespace are allowed.&#039;, { title: &#039;Invalid withJS value&#039; } );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Collapsible tables (shim for legacy .collapsible)&lt;br /&gt;
     */&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        var $tables = $content.find( &#039;table.collapsible:not(.mw-collapsible)&#039; );&lt;br /&gt;
&lt;br /&gt;
        if ( !$tables.length ) { return; }&lt;br /&gt;
&lt;br /&gt;
        $tables.addClass( &#039;mw-collapsible&#039; ).each( function () {&lt;br /&gt;
            if ( $( this ).hasClass( &#039;collapsed&#039; ) ) {&lt;br /&gt;
                $( this ).addClass( &#039;mw-collapsed&#039; );&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        mw.loader.using( &#039;jquery.makeCollapsible&#039; ).then( function () {&lt;br /&gt;
            $tables.makeCollapsible();&lt;br /&gt;
        } );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Support autocollapse, innercollapse, outercollapse&lt;br /&gt;
     */&lt;br /&gt;
    mw.hook( &#039;wikipage.collapsibleContent&#039; ).add( function ( $collapsibleContent ) {&lt;br /&gt;
        var autoCollapseThreshold = 2,&lt;br /&gt;
            hasOuter = $collapsibleContent.parents( &#039;.outercollapse&#039; ).length &amp;gt; 0;&lt;br /&gt;
&lt;br /&gt;
        $collapsibleContent.each( function () {&lt;br /&gt;
            var $element = $( this );&lt;br /&gt;
&lt;br /&gt;
            if ( $element.hasClass( &#039;collapsible&#039; ) ) {&lt;br /&gt;
                $element.find( &#039;tr:first &amp;gt; th:first&#039; ).prepend( $element.find( &#039;tr:first &amp;gt; * &amp;gt; .mw-collapsible-toggle&#039; ) );&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            if ( $collapsibleContent.length &amp;gt;= autoCollapseThreshold &amp;amp;&amp;amp; $element.hasClass( &#039;autocollapse&#039; ) ) {&lt;br /&gt;
                $element.data( &#039;mw-collapsible&#039; ).collapse();&lt;br /&gt;
            } else if ( $element.hasClass( &#039;innercollapse&#039; ) &amp;amp;&amp;amp; hasOuter ) {&lt;br /&gt;
                $element.data( &#039;mw-collapsible&#039; ).collapse();&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            var $toggle = $element.find( &#039;.mw-collapsible-toggle&#039; );&lt;br /&gt;
            if ( $toggle.length &amp;amp;&amp;amp; $toggle.parent()[0].style.color ) {&lt;br /&gt;
                $toggle.css( &#039;color&#039;, &#039;inherit&#039; ).find( &#039;.mw-collapsible-text&#039; ).css( &#039;color&#039;, &#039;inherit&#039; );&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Force interwiki links (e.g. [[wikidata:...]]) to open in a new tab&lt;br /&gt;
     */&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        $content.find( &#039;a.extiw&#039; ).attr( &#039;target&#039;, &#039;_blank&#039; ).attr( &#039;rel&#039;, &#039;noopener noreferrer&#039; );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* End of mw.loader.using callback */&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Wikidata SPARQL tables rendering&lt;br /&gt;
     */&lt;br /&gt;
    var WIKIDATA_REGEX = /https?:\/\/www\.wikidata\.org\/entity\/(Q\d+)/g,&lt;br /&gt;
        COMMONS_REGEX  = /^https?:\/\/commons\.wikimedia\.org\/wiki\/Special:FilePath\//i;&lt;br /&gt;
&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        var tables = ($content ? $content[0] : document).querySelectorAll( &#039;.wikidata-sparql-table:not([data-loaded])&#039; );&lt;br /&gt;
        if ( !tables.length ) { return; }&lt;br /&gt;
&lt;br /&gt;
        tables.forEach( function ( el ) {&lt;br /&gt;
            el.setAttribute( &#039;data-loaded&#039;, &#039;1&#039; );&lt;br /&gt;
            var sparql = el.getAttribute( &#039;data-sparql&#039; ),&lt;br /&gt;
                title  = el.getAttribute( &#039;data-title&#039; );&lt;br /&gt;
&lt;br /&gt;
            if ( !sparql ) { return; }&lt;br /&gt;
            el.textContent = &#039;⏳ Loading…&#039;;&lt;br /&gt;
&lt;br /&gt;
            fetch( &#039;https://query.wikidata.org/sparql?format=json&amp;amp;query=&#039; + encodeURIComponent( sparql ), {&lt;br /&gt;
                headers: { Accept: &#039;application/json&#039; }&lt;br /&gt;
            } )&lt;br /&gt;
            .then( function ( r ) { return r.json(); } )&lt;br /&gt;
            .then( function ( data ) {&lt;br /&gt;
                var vars = data.head.vars,&lt;br /&gt;
                    rows = data.results.bindings,&lt;br /&gt;
                    html = [],&lt;br /&gt;
                    vLen = vars.length;&lt;br /&gt;
&lt;br /&gt;
                if ( title ) {&lt;br /&gt;
                    html.push( &#039;&amp;lt;h3&amp;gt;&#039;, title, &#039;&amp;lt;/h3&amp;gt;&#039; );&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                html.push( &#039;&amp;lt;table class=&amp;quot;wikitable sortable&amp;quot;&amp;gt;&amp;lt;thead&amp;gt;&amp;lt;tr&amp;gt;&#039; );&lt;br /&gt;
                for ( var i = 0; i &amp;lt; vLen; i++ ) {&lt;br /&gt;
                    html.push( &#039;&amp;lt;th&amp;gt;&#039;, vars[i].replace( /_/g, &#039; &#039; ), &#039;&amp;lt;th&amp;gt;&#039; );&lt;br /&gt;
                }&lt;br /&gt;
                html.push( &#039;&amp;lt;/tr&amp;gt;&amp;lt;/thead&amp;gt;&amp;lt;tbody&amp;gt;&#039; );&lt;br /&gt;
&lt;br /&gt;
                for ( var r = 0, rLen = rows.length; r &amp;lt; rLen; r++ ) {&lt;br /&gt;
                    var row = rows[r];&lt;br /&gt;
                    html.push( &#039;&amp;lt;tr&amp;gt;&#039; );&lt;br /&gt;
                    for ( var c = 0; c &amp;lt; vLen; c++ ) {&lt;br /&gt;
                        var v = vars[c],&lt;br /&gt;
                            val = row[v] ? row[v].value : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
                        if ( COMMONS_REGEX.test( val ) ) {&lt;br /&gt;
                            var thumb = val.replace( /^http:\/\//, &#039;https://&#039; );&lt;br /&gt;
                            html.push( &#039;&amp;lt;td&amp;gt;&amp;lt;img src=&amp;quot;&#039;, thumb, &#039;?width=100&amp;quot; style=&amp;quot;max-height:80px;&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&#039; );&lt;br /&gt;
                        } else {&lt;br /&gt;
                            val = val.replace( WIKIDATA_REGEX, &#039;&amp;lt;a href=&amp;quot;https://www.wikidata.org/wiki/$1&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;$1&amp;lt;/a&amp;gt;&#039; );&lt;br /&gt;
                            html.push( &#039;&amp;lt;td&amp;gt;&#039;, val, &#039;&amp;lt;/td&amp;gt;&#039; );&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                    html.push( &#039;&amp;lt;/tr&amp;gt;&#039; );&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                html.push( &#039;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&#039; );&lt;br /&gt;
                el.innerHTML = html.join(&#039;&#039;);&lt;br /&gt;
&lt;br /&gt;
                // Trigger MediaWiki table sorting module if loaded&lt;br /&gt;
                mw.hook( &#039;wikipage.content&#039; ).fire( $( el ) );&lt;br /&gt;
            } )&lt;br /&gt;
            .catch( function () {&lt;br /&gt;
                el.textContent = &#039;⚠️ Failed to load.&#039;;&lt;br /&gt;
            } );&lt;br /&gt;
        } );&lt;br /&gt;
    } );&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
/* DO NOT ADD CODE BELOW THIS LINE */&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=MediaWiki:Common.js&amp;diff=18614</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=MediaWiki:Common.js&amp;diff=18614"/>
		<updated>2026-09-20T14:10:54Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : performance&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Tout JavaScript présent ici sera exécuté par tous les utilisateurs à chaque chargement de page. */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally&lt;br /&gt;
 * loaded for all users on every wiki page. If possible create a gadget that is&lt;br /&gt;
 * enabled by default instead of adding it here (since gadgets are fully&lt;br /&gt;
 * optimized ResourceLoader modules with possibility to add dependencies etc.)&lt;br /&gt;
 *&lt;br /&gt;
 * Since Common.js isn&#039;t a gadget, there is no place to declare its&lt;br /&gt;
 * dependencies, so we have to lazy load them with mw.loader.using on demand and&lt;br /&gt;
 * then execute the rest in the callback. In most cases these dependencies will&lt;br /&gt;
 * be loaded (or loading) already and the callback will not be delayed. In case a&lt;br /&gt;
 * dependency hasn&#039;t arrived yet it&#039;ll make sure those are loaded before this.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* global mw, $ */&lt;br /&gt;
/* jshint strict:false, browser:true */&lt;br /&gt;
&lt;br /&gt;
// Modern ES6+ syntax is standard across all MediaWiki supported browsers&lt;br /&gt;
mw.loader.using( [ &#039;mediawiki.util&#039; ] ).then( function () {&lt;br /&gt;
    /* Begin of mw.loader.using callback */&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Map addPortletLink to mw.util&lt;br /&gt;
     * @deprecated&lt;br /&gt;
     */&lt;br /&gt;
    mw.log.deprecate( window, &#039;addPortletLink&#039;, mw.util.addPortletLink, &#039;Use mw.util.addPortletLink instead&#039; );&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Load JS and CSS by URL&lt;br /&gt;
     */&lt;br /&gt;
    var extraCSS = mw.util.getParamValue( &#039;withCSS&#039; ),&lt;br /&gt;
        extraJS  = mw.util.getParamValue( &#039;withJS&#039; );&lt;br /&gt;
&lt;br /&gt;
    if ( extraCSS ) {&lt;br /&gt;
        if ( /^MediaWiki:[^&amp;amp;&amp;lt;&amp;gt;=%#]*\.css$/.test( extraCSS ) ) {&lt;br /&gt;
            mw.loader.load( &#039;/w/index.php?title=&#039; + encodeURIComponent( extraCSS ) + &#039;&amp;amp;action=raw&amp;amp;ctype=text/css&#039;, &#039;text/css&#039; );&lt;br /&gt;
        } else {&lt;br /&gt;
            mw.notify( &#039;Only pages from the MediaWiki namespace are allowed.&#039;, { title: &#039;Invalid withCSS value&#039; } );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if ( extraJS ) {&lt;br /&gt;
        if ( /^MediaWiki:[^&amp;amp;&amp;lt;&amp;gt;=%#]*\.js$/.test( extraJS ) ) {&lt;br /&gt;
            mw.loader.load( &#039;/w/index.php?title=&#039; + encodeURIComponent( extraJS ) + &#039;&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
        } else {&lt;br /&gt;
            mw.notify( &#039;Only pages from the MediaWiki namespace are allowed.&#039;, { title: &#039;Invalid withJS value&#039; } );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Collapsible tables (shim for legacy .collapsible)&lt;br /&gt;
     */&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        var $tables = $content.find( &#039;table.collapsible:not(.mw-collapsible)&#039; );&lt;br /&gt;
&lt;br /&gt;
        if ( !$tables.length ) { return; }&lt;br /&gt;
&lt;br /&gt;
        $tables.addClass( &#039;mw-collapsible&#039; ).each( function () {&lt;br /&gt;
            if ( $( this ).hasClass( &#039;collapsed&#039; ) ) {&lt;br /&gt;
                $( this ).addClass( &#039;mw-collapsed&#039; );&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
&lt;br /&gt;
        mw.loader.using( &#039;jquery.makeCollapsible&#039; ).then( function () {&lt;br /&gt;
            $tables.makeCollapsible();&lt;br /&gt;
        } );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Support autocollapse, innercollapse, outercollapse&lt;br /&gt;
     */&lt;br /&gt;
    mw.hook( &#039;wikipage.collapsibleContent&#039; ).add( function ( $collapsibleContent ) {&lt;br /&gt;
        var autoCollapseThreshold = 2,&lt;br /&gt;
            hasOuter = $collapsibleContent.parents( &#039;.outercollapse&#039; ).length &amp;gt; 0;&lt;br /&gt;
&lt;br /&gt;
        $collapsibleContent.each( function () {&lt;br /&gt;
            var $element = $( this );&lt;br /&gt;
&lt;br /&gt;
            if ( $element.hasClass( &#039;collapsible&#039; ) ) {&lt;br /&gt;
                $element.find( &#039;tr:first &amp;gt; th:first&#039; ).prepend( $element.find( &#039;tr:first &amp;gt; * &amp;gt; .mw-collapsible-toggle&#039; ) );&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            if ( $collapsibleContent.length &amp;gt;= autoCollapseThreshold &amp;amp;&amp;amp; $element.hasClass( &#039;autocollapse&#039; ) ) {&lt;br /&gt;
                $element.data( &#039;mw-collapsible&#039; ).collapse();&lt;br /&gt;
            } else if ( $element.hasClass( &#039;innercollapse&#039; ) &amp;amp;&amp;amp; hasOuter ) {&lt;br /&gt;
                $element.data( &#039;mw-collapsible&#039; ).collapse();&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            var $toggle = $element.find( &#039;.mw-collapsible-toggle&#039; );&lt;br /&gt;
            if ( $toggle.length &amp;amp;&amp;amp; $toggle.parent()[0].style.color ) {&lt;br /&gt;
                $toggle.css( &#039;color&#039;, &#039;inherit&#039; ).find( &#039;.mw-collapsible-text&#039; ).css( &#039;color&#039;, &#039;inherit&#039; );&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
    } );&lt;br /&gt;
&lt;br /&gt;
    /* End of mw.loader.using callback */&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Wikidata SPARQL tables rendering&lt;br /&gt;
     */&lt;br /&gt;
    var WIKIDATA_REGEX = /https?:\/\/www\.wikidata\.org\/entity\/(Q\d+)/g,&lt;br /&gt;
        COMMONS_REGEX  = /^https?:\/\/commons\.wikimedia\.org\/wiki\/Special:FilePath\//i;&lt;br /&gt;
&lt;br /&gt;
    mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {&lt;br /&gt;
        var tables = ($content ? $content[0] : document).querySelectorAll( &#039;.wikidata-sparql-table:not([data-loaded])&#039; );&lt;br /&gt;
        if ( !tables.length ) { return; }&lt;br /&gt;
&lt;br /&gt;
        tables.forEach( function ( el ) {&lt;br /&gt;
            el.setAttribute( &#039;data-loaded&#039;, &#039;1&#039; );&lt;br /&gt;
            var sparql = el.getAttribute( &#039;data-sparql&#039; ),&lt;br /&gt;
                title  = el.getAttribute( &#039;data-title&#039; );&lt;br /&gt;
&lt;br /&gt;
            if ( !sparql ) { return; }&lt;br /&gt;
            el.textContent = &#039;⏳ Loading…&#039;;&lt;br /&gt;
&lt;br /&gt;
            fetch( &#039;https://query.wikidata.org/sparql?format=json&amp;amp;query=&#039; + encodeURIComponent( sparql ), {&lt;br /&gt;
                headers: { Accept: &#039;application/json&#039; }&lt;br /&gt;
            } )&lt;br /&gt;
            .then( function ( r ) { return r.json(); } )&lt;br /&gt;
            .then( function ( data ) {&lt;br /&gt;
                var vars = data.head.vars,&lt;br /&gt;
                    rows = data.results.bindings,&lt;br /&gt;
                    html = [],&lt;br /&gt;
                    vLen = vars.length;&lt;br /&gt;
&lt;br /&gt;
                if ( title ) {&lt;br /&gt;
                    html.push( &#039;&amp;lt;h3&amp;gt;&#039;, title, &#039;&amp;lt;/h3&amp;gt;&#039; );&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                html.push( &#039;&amp;lt;table class=&amp;quot;wikitable sortable&amp;quot;&amp;gt;&amp;lt;thead&amp;gt;&amp;lt;tr&amp;gt;&#039; );&lt;br /&gt;
                for ( var i = 0; i &amp;lt; vLen; i++ ) {&lt;br /&gt;
                    html.push( &#039;&amp;lt;th&amp;gt;&#039;, vars[i].replace( /_/g, &#039; &#039; ), &#039;&amp;lt;th&amp;gt;&#039; );&lt;br /&gt;
                }&lt;br /&gt;
                html.push( &#039;&amp;lt;/tr&amp;gt;&amp;lt;/thead&amp;gt;&amp;lt;tbody&amp;gt;&#039; );&lt;br /&gt;
&lt;br /&gt;
                for ( var r = 0, rLen = rows.length; r &amp;lt; rLen; r++ ) {&lt;br /&gt;
                    var row = rows[r];&lt;br /&gt;
                    html.push( &#039;&amp;lt;tr&amp;gt;&#039; );&lt;br /&gt;
                    for ( var c = 0; c &amp;lt; vLen; c++ ) {&lt;br /&gt;
                        var v = vars[c],&lt;br /&gt;
                            val = row[v] ? row[v].value : &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
                        if ( COMMONS_REGEX.test( val ) ) {&lt;br /&gt;
                            var thumb = val.replace( /^http:\/\//, &#039;https://&#039; );&lt;br /&gt;
                            html.push( &#039;&amp;lt;td&amp;gt;&amp;lt;img src=&amp;quot;&#039;, thumb, &#039;?width=100&amp;quot; style=&amp;quot;max-height:80px;&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&#039; );&lt;br /&gt;
                        } else {&lt;br /&gt;
                            val = val.replace( WIKIDATA_REGEX, &#039;&amp;lt;a href=&amp;quot;https://www.wikidata.org/wiki/$1&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;$1&amp;lt;/a&amp;gt;&#039; );&lt;br /&gt;
                            html.push( &#039;&amp;lt;td&amp;gt;&#039;, val, &#039;&amp;lt;/td&amp;gt;&#039; );&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                    html.push( &#039;&amp;lt;/tr&amp;gt;&#039; );&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                html.push( &#039;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&#039; );&lt;br /&gt;
                el.innerHTML = html.join(&#039;&#039;);&lt;br /&gt;
&lt;br /&gt;
                // Trigger MediaWiki table sorting module if loaded&lt;br /&gt;
                mw.hook( &#039;wikipage.content&#039; ).fire( $( el ) );&lt;br /&gt;
            } )&lt;br /&gt;
            .catch( function () {&lt;br /&gt;
                el.textContent = &#039;⚠️ Failed to load.&#039;;&lt;br /&gt;
            } );&lt;br /&gt;
        } );&lt;br /&gt;
    } );&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
/* DO NOT ADD CODE BELOW THIS LINE */&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=MediaWiki:Common.js&amp;diff=18613</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=MediaWiki:Common.js&amp;diff=18613"/>
		<updated>2026-09-20T14:04:57Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Tout JavaScript présent ici sera exécuté par tous les utilisateurs à chaque chargement de page. */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally&lt;br /&gt;
 * loaded for all users on every wiki page. If possible create a gadget that is&lt;br /&gt;
 * enabled by default instead of adding it here (since gadgets are fully&lt;br /&gt;
 * optimized ResourceLoader modules with possibility to add dependencies etc.)&lt;br /&gt;
 *&lt;br /&gt;
 * Since Common.js isn&#039;t a gadget, there is no place to declare its&lt;br /&gt;
 * dependencies, so we have to lazy load them with mw.loader.using on demand and&lt;br /&gt;
 * then execute the rest in the callback. In most cases these dependencies will&lt;br /&gt;
 * be loaded (or loading) already and the callback will not be delayed. In case a&lt;br /&gt;
 * dependency hasn&#039;t arrived yet it&#039;ll make sure those are loaded before this.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* global mw, $ */&lt;br /&gt;
/* jshint strict:false, browser:true */&lt;br /&gt;
&lt;br /&gt;
mw.loader.using( [ &#039;mediawiki.util&#039; ] ).done( function () {&lt;br /&gt;
	/* Begin of mw.loader.using callback */&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Map addPortletLink to mw.util&lt;br /&gt;
	 * @deprecated: Use mw.util.addPortletLink instead.&lt;br /&gt;
	 */&lt;br /&gt;
	mw.log.deprecate( window, &#039;addPortletLink&#039;, mw.util.addPortletLink, &#039;Use mw.util.addPortletLink instead&#039; );&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @source www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL&lt;br /&gt;
	 * @rev 6&lt;br /&gt;
	 */&lt;br /&gt;
	var extraCSS = mw.util.getParamValue( &#039;withCSS&#039; ),&lt;br /&gt;
		extraJS = mw.util.getParamValue( &#039;withJS&#039; );&lt;br /&gt;
&lt;br /&gt;
	if ( extraCSS ) {&lt;br /&gt;
		if ( extraCSS.match( /^MediaWiki:[^&amp;amp;&amp;lt;&amp;gt;=%#]*\.css$/ ) ) {&lt;br /&gt;
			mw.loader.load( &#039;/w/index.php?title=&#039; + extraCSS + &#039;&amp;amp;action=raw&amp;amp;ctype=text/css&#039;, &#039;text/css&#039; );&lt;br /&gt;
		} else {&lt;br /&gt;
			mw.notify( &#039;Only pages from the MediaWiki namespace are allowed.&#039;, { title: &#039;Invalid withCSS value&#039; } );&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ( extraJS ) {&lt;br /&gt;
		if ( extraJS.match( /^MediaWiki:[^&amp;amp;&amp;lt;&amp;gt;=%#]*\.js$/ ) ) {&lt;br /&gt;
			mw.loader.load( &#039;/w/index.php?title=&#039; + extraJS + &#039;&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
		} else {&lt;br /&gt;
			mw.notify( &#039;Only pages from the MediaWiki namespace are allowed.&#039;, { title: &#039;Invalid withJS value&#039; } );&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Collapsible tables; reimplemented with mw-collapsible&lt;br /&gt;
	 * Styling is also in place to avoid FOUC&lt;br /&gt;
	 *&lt;br /&gt;
	 * Allows tables to be collapsed, showing only the header. See [[Help:Collapsing]].&lt;br /&gt;
	 * @version 3.0.0 (2018-05-20)&lt;br /&gt;
	 * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-collapsibleTables.js&lt;br /&gt;
	 * @author [[User:R. Koot]]&lt;br /&gt;
	 * @author [[User:Krinkle]]&lt;br /&gt;
	 * @author [[User:TheDJ]]&lt;br /&gt;
	 * @deprecated Since MediaWiki 1.20: Use class=&amp;quot;mw-collapsible&amp;quot; instead which&lt;br /&gt;
	 * is supported in MediaWiki core. Shimmable since MediaWiki 1.32&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {jQuery} $content&lt;br /&gt;
	 */&lt;br /&gt;
	function makeCollapsibleMwCollapsible( $content ) {&lt;br /&gt;
		var $tables = $content&lt;br /&gt;
			.find( &#039;table.collapsible:not(.mw-collapsible)&#039; )&lt;br /&gt;
			.addClass( &#039;mw-collapsible&#039; );&lt;br /&gt;
&lt;br /&gt;
		$.each( $tables, function ( index, table ) {&lt;br /&gt;
			// mw.log.warn( &#039;This page is using the deprecated class collapsible. Please replace it with mw-collapsible.&#039;);&lt;br /&gt;
			if ( $( table ).hasClass( &#039;collapsed&#039; ) ) {&lt;br /&gt;
				$( table ).addClass( &#039;mw-collapsed&#039; );&lt;br /&gt;
				// mw.log.warn( &#039;This page is using the deprecated class collapsed. Please replace it with mw-collapsed.&#039;);&lt;br /&gt;
			}&lt;br /&gt;
		} );&lt;br /&gt;
		if ( $tables.length &amp;gt; 0 ) {&lt;br /&gt;
			mw.loader.using( &#039;jquery.makeCollapsible&#039; ).then( function () {&lt;br /&gt;
				$tables.makeCollapsible();&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	mw.hook( &#039;wikipage.content&#039; ).add( makeCollapsibleMwCollapsible );&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Add support to mw-collapsible for autocollapse, innercollapse and outercollapse&lt;br /&gt;
	 *&lt;br /&gt;
	 * Maintainers: TheDJ&lt;br /&gt;
	 */&lt;br /&gt;
	function mwCollapsibleSetup( $collapsibleContent ) {&lt;br /&gt;
		var $element,&lt;br /&gt;
			$toggle,&lt;br /&gt;
			autoCollapseThreshold = 2;&lt;br /&gt;
		$.each( $collapsibleContent, function ( index, element ) {&lt;br /&gt;
			$element = $( element );&lt;br /&gt;
			if ( $element.hasClass( &#039;collapsible&#039; ) ) {&lt;br /&gt;
				$element.find( &#039;tr:first &amp;gt; th:first&#039; ).prepend( $element.find( &#039;tr:first &amp;gt; * &amp;gt; .mw-collapsible-toggle&#039; ) );&lt;br /&gt;
			}&lt;br /&gt;
			if ( $collapsibleContent.length &amp;gt;= autoCollapseThreshold &amp;amp;&amp;amp; $element.hasClass( &#039;autocollapse&#039; ) ) {&lt;br /&gt;
				$element.data( &#039;mw-collapsible&#039; ).collapse();&lt;br /&gt;
			} else if ( $element.hasClass( &#039;innercollapse&#039; ) ) {&lt;br /&gt;
				if ( $element.parents( &#039;.outercollapse&#039; ).length &amp;gt; 0 ) {&lt;br /&gt;
					$element.data( &#039;mw-collapsible&#039; ).collapse();&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			// because of colored backgrounds, style the link in the text color&lt;br /&gt;
			// to ensure accessible contrast&lt;br /&gt;
			$toggle = $element.find( &#039;.mw-collapsible-toggle&#039; );&lt;br /&gt;
			if ( $toggle.length ) {&lt;br /&gt;
				// Make the toggle inherit text color (Updated for T333357 2023-04-29)&lt;br /&gt;
				if ( $toggle.parent()[ 0 ].style.color ) {&lt;br /&gt;
					$toggle.css( &#039;color&#039;, &#039;inherit&#039; );&lt;br /&gt;
					$toggle.find( &#039;.mw-collapsible-text&#039; ).css( &#039;color&#039;, &#039;inherit&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	mw.hook( &#039;wikipage.collapsibleContent&#039; ).add( mwCollapsibleSetup );&lt;br /&gt;
&lt;br /&gt;
	/* End of mw.loader.using callback */&lt;br /&gt;
&lt;br /&gt;
	/* Wikidata SPARQL tables */&lt;br /&gt;
	mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
		document.querySelectorAll( &#039;.wikidata-sparql-table:not([data-loaded])&#039; ).forEach( function ( el ) {&lt;br /&gt;
			el.setAttribute( &#039;data-loaded&#039;, &#039;1&#039; );&lt;br /&gt;
			var sparql = el.getAttribute( &#039;data-sparql&#039; );&lt;br /&gt;
			var title  = el.getAttribute( &#039;data-title&#039; );&lt;br /&gt;
			el.textContent = &#039;⏳ Loading…&#039;;&lt;br /&gt;
			fetch( &#039;https://query.wikidata.org/sparql?format=json&amp;amp;query=&#039; + encodeURIComponent( sparql ),&lt;br /&gt;
			{ headers: { Accept: &#039;application/json&#039; } } )&lt;br /&gt;
			.then( function ( r ) { return r.json(); } )&lt;br /&gt;
			.then( function ( data ) {&lt;br /&gt;
				var vars = data.head.vars;&lt;br /&gt;
				var rows = data.results.bindings;&lt;br /&gt;
				var html = &#039;&#039;;&lt;br /&gt;
				if ( title ) html += &#039;&amp;lt;h3&amp;gt;&#039; + title + &#039;&amp;lt;/h3&amp;gt;&#039;;&lt;br /&gt;
				html += &#039;&amp;lt;table class=&amp;quot;wikitable sortable&amp;quot;&amp;gt;&amp;lt;thead&amp;gt;&amp;lt;tr&amp;gt;&#039;;&lt;br /&gt;
				vars.forEach( function ( v ) { html += &#039;&amp;lt;th&amp;gt;&#039; + v.replace( /_/g, &#039; &#039; ) + &#039;&amp;lt;/th&amp;gt;&#039;; } );&lt;br /&gt;
				html += &#039;&amp;lt;/tr&amp;gt;&amp;lt;/thead&amp;gt;&amp;lt;tbody&amp;gt;&#039;;&lt;br /&gt;
				rows.forEach( function ( row ) {&lt;br /&gt;
					html += &#039;&amp;lt;tr&amp;gt;&#039;;&lt;br /&gt;
					vars.forEach( function ( v ) {&lt;br /&gt;
						var val = row[ v ] ? row[ v ].value : &#039;&#039;;&lt;br /&gt;
						if ( /^https?:\/\/commons\.wikimedia\.org\/wiki\/Special:FilePath\//i.test( val ) ) {&lt;br /&gt;
							var thumb = val.replace( /^http:\/\//, &#039;https://&#039; );&lt;br /&gt;
							html += &#039;&amp;lt;td&amp;gt;&amp;lt;img src=&amp;quot;&#039; + thumb + &#039;?width=100&amp;quot; style=&amp;quot;max-height:80px;&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&#039;;&lt;br /&gt;
						} else {&lt;br /&gt;
							val = val.replace( /https?:\/\/www\.wikidata\.org\/entity\/(Q\d+)/,&lt;br /&gt;
							&#039;&amp;lt;a href=&amp;quot;https://www.wikidata.org/wiki/$1&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;$1&amp;lt;/a&amp;gt;&#039; );&lt;br /&gt;
							html += &#039;&amp;lt;td&amp;gt;&#039; + val + &#039;&amp;lt;/td&amp;gt;&#039;;&lt;br /&gt;
						}&lt;br /&gt;
					} );&lt;br /&gt;
					html += &#039;&amp;lt;/tr&amp;gt;&#039;;&lt;br /&gt;
				} );&lt;br /&gt;
				html += &#039;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&#039;;&lt;br /&gt;
				el.innerHTML = html;&lt;br /&gt;
			} )&lt;br /&gt;
			.catch( function () { el.textContent = &#039;⚠️ Failed to load.&#039;; } );&lt;br /&gt;
		} );&lt;br /&gt;
	} );&lt;br /&gt;
} );&lt;br /&gt;
/* DO NOT ADD CODE BELOW THIS LINE */&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=Utilisateur:AdrianoRutz&amp;diff=18464</id>
		<title>Utilisateur:AdrianoRutz</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=Utilisateur:AdrianoRutz&amp;diff=18464"/>
		<updated>2026-07-14T08:37:58Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;blockquote&amp;gt;😊&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Databox|item=Q97455964}}&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=Utilisateur:AdrianoRutz/common.js&amp;diff=18463</id>
		<title>Utilisateur:AdrianoRutz/common.js</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=Utilisateur:AdrianoRutz/common.js&amp;diff=18463"/>
		<updated>2026-07-14T08:37:27Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : Page blanchie&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=Utilisateur:AdrianoRutz&amp;diff=18462</id>
		<title>Utilisateur:AdrianoRutz</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=Utilisateur:AdrianoRutz&amp;diff=18462"/>
		<updated>2026-07-14T08:31:10Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;blockquote&amp;gt;😊&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;wd-databox-loader&amp;quot; data-qid=&amp;quot;Q2013&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=Utilisateur:AdrianoRutz/common.js&amp;diff=18461</id>
		<title>Utilisateur:AdrianoRutz/common.js</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=Utilisateur:AdrianoRutz/common.js&amp;diff=18461"/>
		<updated>2026-07-14T08:29:15Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;( function () {&lt;br /&gt;
	&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
	// Mêmes propriétés que la property_blacklist du module Lua&lt;br /&gt;
	var PROPERTY_BLACKLIST = {&lt;br /&gt;
		P360: 1, P4224: 1, P935: 1, P1472: 1, P1612: 1, P373: 1, P3722: 1,&lt;br /&gt;
		P1151: 1, P1424: 1, P910: 1, P1200: 1, P1792: 1, P1464: 1, P1465: 1,&lt;br /&gt;
		P1791: 1, P1740: 1, P2033: 1, P2517: 1, P4195: 1, P1754: 1, P301: 1,&lt;br /&gt;
		P971: 1, P3876: 1, P1753: 1, P3921: 1, P1204: 1, P1423: 1, P1709: 1,&lt;br /&gt;
		P3950: 1, P2888: 1, P1382: 1, P527: 1, P2670: 1, P3113: 1, P2737: 1,&lt;br /&gt;
		P2738: 1, P2445: 1, P1963: 1, P3176: 1, P1889: 1, P460: 1, P2959: 1,&lt;br /&gt;
		P2860: 1, P5125: 1, P5008: 1, P2559: 1, P1343: 1, P972: 1, P1282: 1,&lt;br /&gt;
		P4839: 1, P6104: 1, P5996: 1, P2357: 1, P31: 1&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	var EXCLUDED_DATATYPES = {&lt;br /&gt;
		&#039;commonsMedia&#039;: 1,&lt;br /&gt;
		&#039;external-id&#039;: 1,&lt;br /&gt;
		&#039;quantity&#039;: 1,&lt;br /&gt;
		&#039;wikibase-property&#039;: 1,&lt;br /&gt;
		&#039;geo-shape&#039;: 1,&lt;br /&gt;
		&#039;tabular-data&#039;: 1&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	var LANG = &#039;fr&#039;; // adapte si besoin&lt;br /&gt;
&lt;br /&gt;
	function wbApi( params ) {&lt;br /&gt;
		var base = &#039;https://www.wikidata.org/w/api.php?origin=*&amp;amp;format=json&#039;;&lt;br /&gt;
		var qs = Object.keys( params ).map( function ( k ) {&lt;br /&gt;
			return k + &#039;=&#039; + encodeURIComponent( params[ k ] );&lt;br /&gt;
		} ).join( &#039;&amp;amp;&#039; );&lt;br /&gt;
		return fetch( base + &#039;&amp;amp;&#039; + qs ).then( function ( r ) { return r.json(); } );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function formatSnak( snak, labelCache ) {&lt;br /&gt;
		if ( snak.snaktype === &#039;novalue&#039; ) return &#039;—&#039;;&lt;br /&gt;
		if ( snak.snaktype === &#039;somevalue&#039; ) return &#039;inconnu&#039;;&lt;br /&gt;
		var v = snak.datavalue.value;&lt;br /&gt;
		switch ( snak.datatype ) {&lt;br /&gt;
			case &#039;wikibase-item&#039;:&lt;br /&gt;
				var qid = &#039;Q&#039; + v[ &#039;numeric-id&#039; ];&lt;br /&gt;
				var lbl = ( labelCache[ qid ] &amp;amp;&amp;amp; labelCache[ qid ].label ) || qid;&lt;br /&gt;
				return &#039;&amp;lt;a href=&amp;quot;https://www.wikidata.org/wiki/&#039; + qid + &#039;&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;&#039; + lbl + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
			case &#039;time&#039;:&lt;br /&gt;
				var m = /^\+?(-?\d+)-(\d{2})-(\d{2})/.exec( v.time );&lt;br /&gt;
				return m ? ( m[ 1 ] + ( v.precision &amp;gt;= 10 ? &#039;-&#039; + m[ 2 ] : &#039;&#039; ) + ( v.precision &amp;gt;= 11 ? &#039;-&#039; + m[ 3 ] : &#039;&#039; ) ) : v.time;&lt;br /&gt;
			case &#039;url&#039;:&lt;br /&gt;
				return &#039;&amp;lt;a href=&amp;quot;&#039; + v + &#039;&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;&#039; + v + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
			case &#039;monolingualtext&#039;:&lt;br /&gt;
				return v.text;&lt;br /&gt;
			case &#039;globe-coordinate&#039;:&lt;br /&gt;
				return v.latitude.toFixed( 4 ) + &#039;, &#039; + v.longitude.toFixed( 4 ) +&lt;br /&gt;
					&#039; &amp;lt;a href=&amp;quot;https://www.openstreetmap.org/?mlat=&#039; + v.latitude + &#039;&amp;amp;mlon=&#039; + v.longitude + &#039;&amp;amp;zoom=12&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;🗺️&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
			default:&lt;br /&gt;
				return String( v );&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function buildDatabox( entity, propLabels, itemLabels, containerEl ) {&lt;br /&gt;
		var label = ( entity.labels &amp;amp;&amp;amp; entity.labels[ LANG ] &amp;amp;&amp;amp; entity.labels[ LANG ].value ) || entity.id;&lt;br /&gt;
		var desc = ( entity.descriptions &amp;amp;&amp;amp; entity.descriptions[ LANG ] &amp;amp;&amp;amp; entity.descriptions[ LANG ].value ) || &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
		var box = document.createElement( &#039;div&#039; );&lt;br /&gt;
		box.className = &#039;wd-databox&#039;;&lt;br /&gt;
		box.style.cssText = &#039;float:right;border:1px solid #a2a9b1;max-width:300px;padding:0 0.4em;margin:0 0 0.4em 0.4em;font-size:90%;&#039;;&lt;br /&gt;
&lt;br /&gt;
		var title = document.createElement( &#039;div&#039; );&lt;br /&gt;
		title.style.cssText = &#039;text-align:center;background:#f9f9f9;padding:0.5em 0;margin:0.5em 0;font-size:120%;font-weight:bold;&#039;;&lt;br /&gt;
		title.textContent = label.charAt( 0 ).toUpperCase() + label.slice( 1 );&lt;br /&gt;
		box.appendChild( title );&lt;br /&gt;
&lt;br /&gt;
		if ( desc ) {&lt;br /&gt;
			var descEl = document.createElement( &#039;div&#039; );&lt;br /&gt;
			descEl.style.cssText = &#039;text-align:center;font-style:italic;margin-bottom:0.5em;&#039;;&lt;br /&gt;
			descEl.textContent = desc;&lt;br /&gt;
			box.appendChild( descEl );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var claims = entity.claims || {};&lt;br /&gt;
		if ( claims.P18 &amp;amp;&amp;amp; claims.P18[ 0 ] &amp;amp;&amp;amp; claims.P18[ 0 ].mainsnak.datavalue ) {&lt;br /&gt;
			var filename = claims.P18[ 0 ].mainsnak.datavalue.value;&lt;br /&gt;
			var img = document.createElement( &#039;img&#039; );&lt;br /&gt;
			img.src = &#039;https://commons.wikimedia.org/wiki/Special:FilePath/&#039; + encodeURIComponent( filename ) + &#039;?width=280&#039;;&lt;br /&gt;
			img.style.cssText = &#039;display:block;margin:0 auto 0.5em;max-width:100%;&#039;;&lt;br /&gt;
			img.alt = filename;&lt;br /&gt;
			box.appendChild( img );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var table = document.createElement( &#039;table&#039; );&lt;br /&gt;
		table.style.cssText = &#039;width:100%;table-layout:fixed;word-break:break-word;&#039;;&lt;br /&gt;
&lt;br /&gt;
		if ( claims.P31 &amp;amp;&amp;amp; claims.P31.length ) {&lt;br /&gt;
			var caption = document.createElement( &#039;caption&#039; );&lt;br /&gt;
			caption.style.cssText = &#039;background:#f9f9f9;font-weight:bold;margin-top:0.2em;&#039;;&lt;br /&gt;
			caption.innerHTML = claims.P31.slice( 0, 5 ).map( function ( c ) {&lt;br /&gt;
				return formatSnak( c.mainsnak, itemLabels );&lt;br /&gt;
			} ).join( &#039;, &#039; );&lt;br /&gt;
			table.appendChild( caption );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		Object.keys( claims ).forEach( function ( pid ) {&lt;br /&gt;
			if ( pid === &#039;P18&#039; ) return;&lt;br /&gt;
			if ( PROPERTY_BLACKLIST[ pid ] ) return;&lt;br /&gt;
			var statements = claims[ pid ];&lt;br /&gt;
			var datatype = statements[ 0 ].mainsnak.datatype;&lt;br /&gt;
			if ( EXCLUDED_DATATYPES[ datatype ] ) return;&lt;br /&gt;
			if ( statements.length &amp;gt; 5 ) return;&lt;br /&gt;
&lt;br /&gt;
			var tr = document.createElement( &#039;tr&#039; );&lt;br /&gt;
			var th = document.createElement( &#039;th&#039; );&lt;br /&gt;
			th.style.cssText = &#039;text-align:left;vertical-align:top;&#039;;&lt;br /&gt;
			var plabel = ( propLabels[ pid ] &amp;amp;&amp;amp; propLabels[ pid ].label ) || pid;&lt;br /&gt;
			th.textContent = plabel.charAt( 0 ).toUpperCase() + plabel.slice( 1 );&lt;br /&gt;
&lt;br /&gt;
			var td = document.createElement( &#039;td&#039; );&lt;br /&gt;
			td.style.cssText = &#039;vertical-align:top;&#039;;&lt;br /&gt;
			td.innerHTML = statements.map( function ( s ) {&lt;br /&gt;
				return formatSnak( s.mainsnak, itemLabels );&lt;br /&gt;
			} ).join( &#039;; &#039; ) +&lt;br /&gt;
				&#039; &amp;lt;a href=&amp;quot;https://www.wikidata.org/wiki/&#039; + entity.id + &#039;#&#039; + pid + &#039;&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot; style=&amp;quot;font-size:85%;&amp;quot;&amp;gt;✎&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
			tr.appendChild( th );&lt;br /&gt;
			tr.appendChild( td );&lt;br /&gt;
			table.appendChild( tr );&lt;br /&gt;
		} );&lt;br /&gt;
&lt;br /&gt;
		box.appendChild( table );&lt;br /&gt;
		containerEl.innerHTML = &#039;&#039;;&lt;br /&gt;
		containerEl.appendChild( box );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function loadDatabox( containerEl ) {&lt;br /&gt;
		var qid = containerEl.getAttribute( &#039;data-qid&#039; );&lt;br /&gt;
		if ( !qid ) return;&lt;br /&gt;
&lt;br /&gt;
		wbApi( { action: &#039;wbgetentities&#039;, ids: qid, languages: LANG, props: &#039;labels|descriptions|claims&#039; } )&lt;br /&gt;
			.then( function ( data ) {&lt;br /&gt;
				var entity = data.entities[ qid ];&lt;br /&gt;
				if ( !entity || entity.missing !== undefined ) {&lt;br /&gt;
					containerEl.textContent = &#039;Élément Wikidata introuvable : &#039; + qid;&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				var pids = Object.keys( entity.claims || {} );&lt;br /&gt;
				var refQids = {};&lt;br /&gt;
				pids.forEach( function ( pid ) {&lt;br /&gt;
					entity.claims[ pid ].forEach( function ( c ) {&lt;br /&gt;
						if ( c.mainsnak.datatype === &#039;wikibase-item&#039; &amp;amp;&amp;amp; c.mainsnak.snaktype === &#039;value&#039; ) {&lt;br /&gt;
							refQids[ &#039;Q&#039; + c.mainsnak.datavalue.value[ &#039;numeric-id&#039; ] ] = 1;&lt;br /&gt;
						}&lt;br /&gt;
					} );&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				var idsToLabel = pids.concat( Object.keys( refQids ) );&lt;br /&gt;
				if ( !idsToLabel.length ) {&lt;br /&gt;
					buildDatabox( entity, {}, {}, containerEl );&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				var chunks = [];&lt;br /&gt;
				for ( var i = 0; i &amp;lt; idsToLabel.length; i += 50 ) {&lt;br /&gt;
					chunks.push( idsToLabel.slice( i, i + 50 ) );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				Promise.all( chunks.map( function ( chunk ) {&lt;br /&gt;
					return wbApi( { action: &#039;wbgetentities&#039;, ids: chunk.join( &#039;|&#039; ), languages: LANG, props: &#039;labels&#039; } );&lt;br /&gt;
				} ) ).then( function ( results ) {&lt;br /&gt;
					var propLabels = {}, itemLabels = {};&lt;br /&gt;
					results.forEach( function ( res ) {&lt;br /&gt;
						Object.keys( res.entities ).forEach( function ( id ) {&lt;br /&gt;
							var lbl = res.entities[ id ].labels &amp;amp;&amp;amp; res.entities[ id ].labels[ LANG ];&lt;br /&gt;
							var target = id.charAt( 0 ) === &#039;P&#039; ? propLabels : itemLabels;&lt;br /&gt;
							target[ id ] = { label: lbl ? lbl.value : id };&lt;br /&gt;
						} );&lt;br /&gt;
					} );&lt;br /&gt;
					buildDatabox( entity, propLabels, itemLabels, containerEl );&lt;br /&gt;
				} );&lt;br /&gt;
			} )&lt;br /&gt;
			.catch( function ( err ) {&lt;br /&gt;
				containerEl.textContent = &#039;Erreur de chargement Wikidata : &#039; + err.message;&lt;br /&gt;
			} );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function init() {&lt;br /&gt;
		console.log( &#039;wd-databox: init() lancé, éléments trouvés :&#039;, document.querySelectorAll( &#039;.wd-databox-loader&#039; ).length );&lt;br /&gt;
		document.querySelectorAll( &#039;.wd-databox-loader&#039; ).forEach( loadDatabox );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Déclenchement robuste : fonctionne peu importe le timing de chargement du script&lt;br /&gt;
	if ( window.mw &amp;amp;&amp;amp; mw.hook ) {&lt;br /&gt;
		mw.hook( &#039;wikipage.content&#039; ).add( init );&lt;br /&gt;
	} else {&lt;br /&gt;
		// Filet de sécurité si mw.hook n&#039;est pas disponible pour une raison quelconque&lt;br /&gt;
		if ( document.readyState === &#039;loading&#039; ) {&lt;br /&gt;
			document.addEventListener( &#039;DOMContentLoaded&#039;, init );&lt;br /&gt;
		} else {&lt;br /&gt;
			init();&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=Utilisateur:AdrianoRutz/common.js&amp;diff=18460</id>
		<title>Utilisateur:AdrianoRutz/common.js</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=Utilisateur:AdrianoRutz/common.js&amp;diff=18460"/>
		<updated>2026-07-14T08:16:35Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : Page créée avec « ( function () { 	&amp;#039;use strict&amp;#039;;  	// Mêmes propriétés que la property_blacklist du module Lua 	var PROPERTY_BLACKLIST = { 		P360: 1, P4224: 1, P935: 1, P1472: 1, P1612: 1, P373: 1, P3722: 1, 		P1151: 1, P1424: 1, P910: 1, P1200: 1, P1792: 1, P1464: 1, P1465: 1, 		P1791: 1, P1740: 1, P2033: 1, P2517: 1, P4195: 1, P1754: 1, P301: 1, 		P971: 1, P3876: 1, P1753: 1, P3921: 1, P1204: 1, P1423: 1, P1709: 1, 		P3950: 1, P2888: 1, P1382: 1, P527: 1, P2670: 1, P3113: 1,... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;( function () {&lt;br /&gt;
	&#039;use strict&#039;;&lt;br /&gt;
&lt;br /&gt;
	// Mêmes propriétés que la property_blacklist du module Lua&lt;br /&gt;
	var PROPERTY_BLACKLIST = {&lt;br /&gt;
		P360: 1, P4224: 1, P935: 1, P1472: 1, P1612: 1, P373: 1, P3722: 1,&lt;br /&gt;
		P1151: 1, P1424: 1, P910: 1, P1200: 1, P1792: 1, P1464: 1, P1465: 1,&lt;br /&gt;
		P1791: 1, P1740: 1, P2033: 1, P2517: 1, P4195: 1, P1754: 1, P301: 1,&lt;br /&gt;
		P971: 1, P3876: 1, P1753: 1, P3921: 1, P1204: 1, P1423: 1, P1709: 1,&lt;br /&gt;
		P3950: 1, P2888: 1, P1382: 1, P527: 1, P2670: 1, P3113: 1, P2737: 1,&lt;br /&gt;
		P2738: 1, P2445: 1, P1963: 1, P3176: 1, P1889: 1, P460: 1, P2959: 1,&lt;br /&gt;
		P2860: 1, P5125: 1, P5008: 1, P2559: 1, P1343: 1, P972: 1, P1282: 1,&lt;br /&gt;
		P4839: 1, P6104: 1, P5996: 1, P2357: 1, P31: 1&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	var EXCLUDED_DATATYPES = {&lt;br /&gt;
		&#039;commonsMedia&#039;: 1,&lt;br /&gt;
		&#039;external-id&#039;: 1,&lt;br /&gt;
		&#039;quantity&#039;: 1,&lt;br /&gt;
		&#039;wikibase-property&#039;: 1,&lt;br /&gt;
		&#039;geo-shape&#039;: 1,&lt;br /&gt;
		&#039;tabular-data&#039;: 1&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	var LANG = &#039;fr&#039;; // adapte si besoin&lt;br /&gt;
&lt;br /&gt;
	function wbApi( params ) {&lt;br /&gt;
		var base = &#039;https://www.wikidata.org/w/api.php?origin=*&amp;amp;format=json&#039;;&lt;br /&gt;
		var qs = Object.keys( params ).map( function ( k ) {&lt;br /&gt;
			return k + &#039;=&#039; + encodeURIComponent( params[ k ] );&lt;br /&gt;
		} ).join( &#039;&amp;amp;&#039; );&lt;br /&gt;
		return fetch( base + &#039;&amp;amp;&#039; + qs ).then( function ( r ) { return r.json(); } );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function formatSnak( snak, labelCache ) {&lt;br /&gt;
		if ( snak.snaktype === &#039;novalue&#039; ) return &#039;—&#039;;&lt;br /&gt;
		if ( snak.snaktype === &#039;somevalue&#039; ) return &#039;inconnu&#039;;&lt;br /&gt;
		var v = snak.datavalue.value;&lt;br /&gt;
		switch ( snak.datatype ) {&lt;br /&gt;
			case &#039;wikibase-item&#039;:&lt;br /&gt;
				var qid = &#039;Q&#039; + v[ &#039;numeric-id&#039; ];&lt;br /&gt;
				var lbl = ( labelCache[ qid ] &amp;amp;&amp;amp; labelCache[ qid ].label ) || qid;&lt;br /&gt;
				return &#039;&amp;lt;a href=&amp;quot;https://www.wikidata.org/wiki/&#039; + qid + &#039;&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;&#039; + lbl + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
			case &#039;time&#039;:&lt;br /&gt;
				var m = /^\+?(-?\d+)-(\d{2})-(\d{2})/.exec( v.time );&lt;br /&gt;
				return m ? ( m[ 1 ] + ( v.precision &amp;gt;= 10 ? &#039;-&#039; + m[ 2 ] : &#039;&#039; ) + ( v.precision &amp;gt;= 11 ? &#039;-&#039; + m[ 3 ] : &#039;&#039; ) ) : v.time;&lt;br /&gt;
			case &#039;url&#039;:&lt;br /&gt;
				return &#039;&amp;lt;a href=&amp;quot;&#039; + v + &#039;&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;&#039; + v + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
			case &#039;monolingualtext&#039;:&lt;br /&gt;
				return v.text;&lt;br /&gt;
			case &#039;globe-coordinate&#039;:&lt;br /&gt;
				return v.latitude.toFixed( 4 ) + &#039;, &#039; + v.longitude.toFixed( 4 ) +&lt;br /&gt;
					&#039; &amp;lt;a href=&amp;quot;https://www.openstreetmap.org/?mlat=&#039; + v.latitude + &#039;&amp;amp;mlon=&#039; + v.longitude + &#039;&amp;amp;zoom=12&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;🗺️&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
			default:&lt;br /&gt;
				return String( v );&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function buildDatabox( entity, propLabels, itemLabels, containerEl ) {&lt;br /&gt;
		var label = ( entity.labels &amp;amp;&amp;amp; entity.labels[ LANG ] &amp;amp;&amp;amp; entity.labels[ LANG ].value ) || entity.id;&lt;br /&gt;
		var desc = ( entity.descriptions &amp;amp;&amp;amp; entity.descriptions[ LANG ] &amp;amp;&amp;amp; entity.descriptions[ LANG ].value ) || &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
		var box = document.createElement( &#039;div&#039; );&lt;br /&gt;
		box.className = &#039;wd-databox&#039;;&lt;br /&gt;
		box.style.cssText = &#039;float:right;border:1px solid #a2a9b1;max-width:300px;padding:0 0.4em;margin:0 0 0.4em 0.4em;font-size:90%;&#039;;&lt;br /&gt;
&lt;br /&gt;
		var title = document.createElement( &#039;div&#039; );&lt;br /&gt;
		title.style.cssText = &#039;text-align:center;background:#f9f9f9;padding:0.5em 0;margin:0.5em 0;font-size:120%;font-weight:bold;&#039;;&lt;br /&gt;
		title.textContent = label.charAt( 0 ).toUpperCase() + label.slice( 1 );&lt;br /&gt;
		box.appendChild( title );&lt;br /&gt;
&lt;br /&gt;
		if ( desc ) {&lt;br /&gt;
			var descEl = document.createElement( &#039;div&#039; );&lt;br /&gt;
			descEl.style.cssText = &#039;text-align:center;font-style:italic;margin-bottom:0.5em;&#039;;&lt;br /&gt;
			descEl.textContent = desc;&lt;br /&gt;
			box.appendChild( descEl );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Image P18 via Special:FilePath (redirige vers Commons, pas de CORS nécessaire pour &amp;lt;img&amp;gt;)&lt;br /&gt;
		var claims = entity.claims || {};&lt;br /&gt;
		if ( claims.P18 &amp;amp;&amp;amp; claims.P18[ 0 ] &amp;amp;&amp;amp; claims.P18[ 0 ].mainsnak.datavalue ) {&lt;br /&gt;
			var filename = claims.P18[ 0 ].mainsnak.datavalue.value;&lt;br /&gt;
			var img = document.createElement( &#039;img&#039; );&lt;br /&gt;
			img.src = &#039;https://commons.wikimedia.org/wiki/Special:FilePath/&#039; + encodeURIComponent( filename ) + &#039;?width=280&#039;;&lt;br /&gt;
			img.style.cssText = &#039;display:block;margin:0 auto 0.5em;max-width:100%;&#039;;&lt;br /&gt;
			img.alt = filename;&lt;br /&gt;
			box.appendChild( img );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var table = document.createElement( &#039;table&#039; );&lt;br /&gt;
		table.style.cssText = &#039;width:100%;table-layout:fixed;word-break:break-word;&#039;;&lt;br /&gt;
&lt;br /&gt;
		// Ligne P31 en caption&lt;br /&gt;
		if ( claims.P31 &amp;amp;&amp;amp; claims.P31.length ) {&lt;br /&gt;
			var caption = document.createElement( &#039;caption&#039; );&lt;br /&gt;
			caption.style.cssText = &#039;background:#f9f9f9;font-weight:bold;margin-top:0.2em;&#039;;&lt;br /&gt;
			caption.innerHTML = claims.P31.slice( 0, 5 ).map( function ( c ) {&lt;br /&gt;
				return formatSnak( c.mainsnak, itemLabels );&lt;br /&gt;
			} ).join( &#039;, &#039; );&lt;br /&gt;
			table.appendChild( caption );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		Object.keys( claims ).forEach( function ( pid ) {&lt;br /&gt;
			if ( pid === &#039;P18&#039; ) return; // déjà affiché comme image&lt;br /&gt;
			if ( PROPERTY_BLACKLIST[ pid ] ) return;&lt;br /&gt;
			var statements = claims[ pid ];&lt;br /&gt;
			var datatype = statements[ 0 ].mainsnak.datatype;&lt;br /&gt;
			if ( EXCLUDED_DATATYPES[ datatype ] ) return;&lt;br /&gt;
			if ( statements.length &amp;gt; 5 ) return;&lt;br /&gt;
&lt;br /&gt;
			var tr = document.createElement( &#039;tr&#039; );&lt;br /&gt;
			var th = document.createElement( &#039;th&#039; );&lt;br /&gt;
			th.style.cssText = &#039;text-align:left;vertical-align:top;&#039;;&lt;br /&gt;
			var plabel = ( propLabels[ pid ] &amp;amp;&amp;amp; propLabels[ pid ].label ) || pid;&lt;br /&gt;
			th.textContent = plabel.charAt( 0 ).toUpperCase() + plabel.slice( 1 );&lt;br /&gt;
&lt;br /&gt;
			var td = document.createElement( &#039;td&#039; );&lt;br /&gt;
			td.style.cssText = &#039;vertical-align:top;&#039;;&lt;br /&gt;
			td.innerHTML = statements.map( function ( s ) {&lt;br /&gt;
				return formatSnak( s.mainsnak, itemLabels );&lt;br /&gt;
			} ).join( &#039;; &#039; ) +&lt;br /&gt;
				&#039; &amp;lt;a href=&amp;quot;https://www.wikidata.org/wiki/&#039; + entity.id + &#039;#&#039; + pid + &#039;&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot; style=&amp;quot;font-size:85%;&amp;quot;&amp;gt;✎&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
&lt;br /&gt;
			tr.appendChild( th );&lt;br /&gt;
			tr.appendChild( td );&lt;br /&gt;
			table.appendChild( tr );&lt;br /&gt;
		} );&lt;br /&gt;
&lt;br /&gt;
		box.appendChild( table );&lt;br /&gt;
		containerEl.innerHTML = &#039;&#039;;&lt;br /&gt;
		containerEl.appendChild( box );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function loadDatabox( containerEl ) {&lt;br /&gt;
		var qid = containerEl.getAttribute( &#039;data-qid&#039; );&lt;br /&gt;
		if ( !qid ) return;&lt;br /&gt;
&lt;br /&gt;
		wbApi( { action: &#039;wbgetentities&#039;, ids: qid, languages: LANG, props: &#039;labels|descriptions|claims&#039; } )&lt;br /&gt;
			.then( function ( data ) {&lt;br /&gt;
				var entity = data.entities[ qid ];&lt;br /&gt;
				if ( !entity || entity.missing !== undefined ) {&lt;br /&gt;
					containerEl.textContent = &#039;Élément Wikidata introuvable : &#039; + qid;&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// Collecter tous les PID des propriétés utilisées + tous les QID référencés en valeur&lt;br /&gt;
				var pids = Object.keys( entity.claims || {} );&lt;br /&gt;
				var refQids = {};&lt;br /&gt;
				pids.forEach( function ( pid ) {&lt;br /&gt;
					entity.claims[ pid ].forEach( function ( c ) {&lt;br /&gt;
						if ( c.mainsnak.datatype === &#039;wikibase-item&#039; &amp;amp;&amp;amp; c.mainsnak.snaktype === &#039;value&#039; ) {&lt;br /&gt;
							refQids[ &#039;Q&#039; + c.mainsnak.datavalue.value[ &#039;numeric-id&#039; ] ] = 1;&lt;br /&gt;
						}&lt;br /&gt;
					} );&lt;br /&gt;
				} );&lt;br /&gt;
&lt;br /&gt;
				var idsToLabel = pids.concat( Object.keys( refQids ) );&lt;br /&gt;
				if ( !idsToLabel.length ) {&lt;br /&gt;
					buildDatabox( entity, {}, {}, containerEl );&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				// L&#039;API limite à 50 ids par requête : on découpe si besoin&lt;br /&gt;
				var chunks = [];&lt;br /&gt;
				for ( var i = 0; i &amp;lt; idsToLabel.length; i += 50 ) {&lt;br /&gt;
					chunks.push( idsToLabel.slice( i, i + 50 ) );&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				Promise.all( chunks.map( function ( chunk ) {&lt;br /&gt;
					return wbApi( { action: &#039;wbgetentities&#039;, ids: chunk.join( &#039;|&#039; ), languages: LANG, props: &#039;labels&#039; } );&lt;br /&gt;
				} ) ).then( function ( results ) {&lt;br /&gt;
					var propLabels = {}, itemLabels = {};&lt;br /&gt;
					results.forEach( function ( res ) {&lt;br /&gt;
						Object.keys( res.entities ).forEach( function ( id ) {&lt;br /&gt;
							var lbl = res.entities[ id ].labels &amp;amp;&amp;amp; res.entities[ id ].labels[ LANG ];&lt;br /&gt;
							var target = id.charAt( 0 ) === &#039;P&#039; ? propLabels : itemLabels;&lt;br /&gt;
							target[ id ] = { label: lbl ? lbl.value : id };&lt;br /&gt;
						} );&lt;br /&gt;
					} );&lt;br /&gt;
					buildDatabox( entity, propLabels, itemLabels, containerEl );&lt;br /&gt;
				} );&lt;br /&gt;
			} )&lt;br /&gt;
			.catch( function ( err ) {&lt;br /&gt;
				containerEl.textContent = &#039;Erreur de chargement Wikidata : &#039; + err.message;&lt;br /&gt;
			} );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function init() {&lt;br /&gt;
		document.querySelectorAll( &#039;.wd-databox-loader&#039; ).forEach( loadDatabox );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ( document.readyState === &#039;loading&#039; ) {&lt;br /&gt;
		document.addEventListener( &#039;DOMContentLoaded&#039;, init );&lt;br /&gt;
	} else {&lt;br /&gt;
		init();&lt;br /&gt;
	}&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=Mod%C3%A8le:Databox&amp;diff=18459</id>
		<title>Modèle:Databox</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=Mod%C3%A8le:Databox&amp;diff=18459"/>
		<updated>2026-07-14T08:02:24Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{Documentation}}&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
{{#invoke:Databox|databox&lt;br /&gt;
  | useImage={{{useImage|}}}&lt;br /&gt;
  | excludeProperties={{{excludeProperties|}}}&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=Liste_des_assurances_sociales&amp;diff=18456</id>
		<title>Liste des assurances sociales</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=Liste_des_assurances_sociales&amp;diff=18456"/>
		<updated>2026-07-14T07:57:33Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cette page liste les principales &#039;&#039;&#039;assurances sociales suisses&#039;&#039;&#039; avec leurs sigles en français, allemand et italien, ainsi que leur identifiant [[wikidata:Q1519147|Wikidata]] (système de données ouvertes et liées).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+Assurances sociales suisses&lt;br /&gt;
! Sigle FR&lt;br /&gt;
! Français&lt;br /&gt;
! Deutsch&lt;br /&gt;
! Italiano&lt;br /&gt;
! Pilier&lt;br /&gt;
! Wikidata&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;AVS&#039;&#039;&#039;&lt;br /&gt;
| [[AVS - Assurance-Vieillesse et Survivants]]&lt;br /&gt;
| AHV – Alters- und Hinterlassenenversicherung&lt;br /&gt;
| AVS – Assicurazione per la vecchiaia e per i superstiti&lt;br /&gt;
| 1er pilier&lt;br /&gt;
| {{Wikidata-lien|Q438864}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;AI&#039;&#039;&#039;&lt;br /&gt;
| [[AI - Assurance Invalidité]]&lt;br /&gt;
| IV – Invalidenversicherung&lt;br /&gt;
| AI – Assicurazione per l&#039;invalidità&lt;br /&gt;
| 1er pilier&lt;br /&gt;
| {{Wikidata-lien|Q1441972}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PC&#039;&#039;&#039;&lt;br /&gt;
| [[PC - Prestation Complémentaire]]&lt;br /&gt;
| EL – Ergänzungsleistungen&lt;br /&gt;
| PC – Prestazioni complementari&lt;br /&gt;
| 1er pilier&lt;br /&gt;
| {{Wikidata-lien|Q1235329}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PP / LPP&#039;&#039;&#039;&lt;br /&gt;
| [[PP - Prévoyance Professionnelle]]&lt;br /&gt;
| BVG – Berufliche Vorsorge&lt;br /&gt;
| LPP – Legge sulla previdenza professionale&lt;br /&gt;
| 2e pilier&lt;br /&gt;
| {{Wikidata-lien|Q17633893}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;LAMal&#039;&#039;&#039;&lt;br /&gt;
| [[Amal - Assurance MALadie]]&lt;br /&gt;
| KVG – Krankenversicherungsgesetz&lt;br /&gt;
| LAMal – Legge sull&#039;assicurazione malattie&lt;br /&gt;
| Obligatoire&lt;br /&gt;
| {{Wikidata-lien|Q1786606}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;AA / LAA&#039;&#039;&#039;&lt;br /&gt;
| [[AA - Assurance-Accident]]&lt;br /&gt;
| UVG – Unfallversicherungsgesetz&lt;br /&gt;
| LAINF – Legge sull&#039;assicurazione contro gli infortuni&lt;br /&gt;
| Obligatoire&lt;br /&gt;
| {{Wikidata-lien|Q2493213}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;APG&#039;&#039;&#039;&lt;br /&gt;
| [[APG - Assurance Perte de Gain]]&lt;br /&gt;
| EO – Erwerbsersatzordnung&lt;br /&gt;
| IPG – Indennità di perdita di guadagno&lt;br /&gt;
| 1er pilier&lt;br /&gt;
| {{Wikidata-lien|Q1120554}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;AC&#039;&#039;&#039;&lt;br /&gt;
| [[AC - Assurance-Chômage]]&lt;br /&gt;
| ALV – Arbeitslosenversicherung&lt;br /&gt;
| AD – Assicurazione contro la disoccupazione&lt;br /&gt;
| 1er pilier&lt;br /&gt;
| {{Wikidata-lien|Q628524}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;AF&#039;&#039;&#039;&lt;br /&gt;
| [[AF - Allocation Familiales]]&lt;br /&gt;
| FamZ – Familienzulagen&lt;br /&gt;
| AF – Assegni familiari&lt;br /&gt;
| Famille&lt;br /&gt;
| {{Wikidata-lien|Q1395318}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Ptra&#039;&#039;&#039;&lt;br /&gt;
| [[Ptra - Prestations TRAnsitoires pour chômeurs âgés]]&lt;br /&gt;
| ÜL – Überbrückungsleistungen für ältere Arbeitslose&lt;br /&gt;
| PTr – Prestazioni transitorie per disoccupati anziani&lt;br /&gt;
| 1er pilier&lt;br /&gt;
| {{Wikidata-lien|Q1519147}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{WikidataTable |&lt;br /&gt;
title = Assurances sociales en Suisse |&lt;br /&gt;
sparql = SELECT ?item ?itemLabel WHERE {&lt;br /&gt;
  ?item wdt:P31/wdt:P279* wd:Q2483208;&lt;br /&gt;
        wdt:P17 wd:Q39.&lt;br /&gt;
  SERVICE wikibase:label { bd:serviceParam wikibase:language &amp;quot;fr&amp;quot;. }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Voir aussi ==&lt;br /&gt;
* [[wikidata:Q1519147|Sécurité sociale en Suisse sur Wikidata]]&lt;br /&gt;
* [https://www.bsv.admin.ch Office fédéral des assurances sociales (OFAS)]&lt;br /&gt;
* [[Vocabulaire finance]]&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=Alpes_vaudoises&amp;diff=18455</id>
		<title>Alpes vaudoises</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=Alpes_vaudoises&amp;diff=18455"/>
		<updated>2026-07-14T07:56:42Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:Col_des_Pauvres.jpg|vignette|Le col des Pauvres dans les Alpes vaudoises.]]&lt;br /&gt;
Les &#039;&#039;&#039;Alpes vaudoises&#039;&#039;&#039; (en allemand : &#039;&#039;{{lang|de|Waadtländer Alpen}}&#039;&#039;) sont un ensemble [[Montagne|montagneux]] des [[Alpes suisses]] situé dans les cantons de [[Canton de Vaud|Vaud]], du [[Canton du Valais|Valais]] et de [[Canton de Berne|Berne]] dans l&#039;ouest du pays. Leur point culminant est le sommet des [[Les Diablerets (sommet)|Diablerets]] à {{unité|3216|mètres}} d&#039;altitude.&lt;br /&gt;
&lt;br /&gt;
Elles sont parfois également appelées Alpes calcaires bernoises occidentales et considérées comme une extension des [[Alpes bernoises]]. Selon la [[Subdivision orographique internationale unifiée du système alpin|SOIUSA]], elles constituent donc la sous-section occidentale 12.III des Alpes bernoises au sens large. Dans les guides alpins du [[Club alpin suisse]], elles sont regroupées avec les Préalpes vaudoises&amp;lt;ref&amp;gt;&#039;&#039;Guide des Alpes et Préalpes vaudoises&#039;&#039;, Guide du Club alpin suisse&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Principaux sommets ==&lt;br /&gt;
Les principaux sommets des Alpes vaudoises sont :&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! width=&amp;quot;200&amp;quot; |Nom&lt;br /&gt;
! width=&amp;quot;200&amp;quot; |[[Altitude]]&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|[[Sommet des Diablerets]]&lt;br /&gt;
|{{unité|3216|m}}&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|[[Oldehore|Oldehore (Becca d&#039;Audon)]]&lt;br /&gt;
|{{unité|3123|m}}&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|[[Grand Muveran]]&lt;br /&gt;
|{{unité|3051|m}}&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|[[Tête Ronde (Alpes bernoises)|Tête Ronde]]&lt;br /&gt;
|{{unité|3036|m}}&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|[[Sex Rouge (Les Diablerets)|Sex Rouge]]&lt;br /&gt;
|{{unité|2971|m}}&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|[[Dents de Morcles|Grand Dent de Morcles]]&lt;br /&gt;
|{{unité|2968|m}}&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|[[Dents de Morcles|Petite Dent de Morcles]]&lt;br /&gt;
|{{unité|2929|m}}&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|[[Dent Favre]]&lt;br /&gt;
|{{unité|2916|m}}&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|[[Tête à Pierre Grept]]&lt;br /&gt;
|{{unité|2904|m}}&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|Tête Noire&lt;br /&gt;
|{{unité|2871|m}}&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|Tête aux Veillon&lt;br /&gt;
|{{unité|2846|m}}&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|Pointe de Paneirosse&lt;br /&gt;
|{{unité|2840|m}}&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|[[Petit Muveran]]&lt;br /&gt;
|{{unité|2810|m}}&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|Le Pacheu&lt;br /&gt;
|{{unité|2798|m}}&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|[[Culan (sommet)|Culan]]&lt;br /&gt;
|{{unité|2789|m}}&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|Tête d&#039;Enfer&lt;br /&gt;
|{{unité|2761|m}}&lt;br /&gt;
|-&lt;br /&gt;
|17&lt;br /&gt;
|Roc Champion&lt;br /&gt;
|{{unité|2747|m}}&lt;br /&gt;
|-&lt;br /&gt;
|18&lt;br /&gt;
|Pierre qu&#039;Abotse&lt;br /&gt;
|{{unité|2735|m}}&lt;br /&gt;
|-&lt;br /&gt;
|19&lt;br /&gt;
|Tête de Tsernou&lt;br /&gt;
|{{unité|2732|m}}&lt;br /&gt;
|-&lt;br /&gt;
|20&lt;br /&gt;
|Pointe d&#039;Aufalle&lt;br /&gt;
|{{unité|2725|m}}&lt;br /&gt;
|-&lt;br /&gt;
|21&lt;br /&gt;
|[[Pointe des Martinets]]&lt;br /&gt;
|{{unité|2653|m}}&lt;br /&gt;
|-&lt;br /&gt;
|22&lt;br /&gt;
|Pointe des Encrennes&lt;br /&gt;
|{{unité|2644|m}}&lt;br /&gt;
|-&lt;br /&gt;
|23&lt;br /&gt;
|Tête à Grosjean&lt;br /&gt;
|{{unité|2607|m}}&lt;br /&gt;
|-&lt;br /&gt;
|24&lt;br /&gt;
|Tête de Bellalué&lt;br /&gt;
|{{unité|2604|m}}&lt;br /&gt;
|-&lt;br /&gt;
|25&lt;br /&gt;
|Pointe des Perris Blancs&lt;br /&gt;
|{{unité|2577|m}}&lt;br /&gt;
|-&lt;br /&gt;
|26&lt;br /&gt;
|[[Le Tarent]]&lt;br /&gt;
|{{unité|2548|m}}&lt;br /&gt;
|-&lt;br /&gt;
|27&lt;br /&gt;
|[[La Pare]]&lt;br /&gt;
|{{unité|2540|m}}&lt;br /&gt;
|-&lt;br /&gt;
|28&lt;br /&gt;
|Pointe de Pré-Fleuri&lt;br /&gt;
|{{unité|2482|m}}&lt;br /&gt;
|-&lt;br /&gt;
|29&lt;br /&gt;
|[[Haute Pointe]] ([[arête de l&#039;Argentine]])&lt;br /&gt;
|{{unité|2422|m}}&lt;br /&gt;
|-&lt;br /&gt;
|30&lt;br /&gt;
|[[Tour d&#039;Aï]]&lt;br /&gt;
|{{unité|2331|m}}&lt;br /&gt;
|}&lt;br /&gt;
N.B. La liste des sommets vaudois n&#039;est pas complète et est susceptible d&#039;être modifiée.&lt;br /&gt;
&lt;br /&gt;
{{WikidataTable |&lt;br /&gt;
title = Alpes vaudoises |&lt;br /&gt;
sparql = SELECT DISTINCT ?Élément ?ÉlémentLabel ?Image ?Altitude WHERE {&lt;br /&gt;
  VALUES ?mountain_summit {&lt;br /&gt;
    wd:Q8502&lt;br /&gt;
    wd:Q207326&lt;br /&gt;
  }&lt;br /&gt;
  VALUES ?vaud_alps {&lt;br /&gt;
    wd:Q663811&lt;br /&gt;
  }&lt;br /&gt;
  ?Élément wdt:P31 ?mountain_summit;&lt;br /&gt;
        wdt:P4552 ?vaud_alps;&lt;br /&gt;
        wdt:P2044 ?Altitude.&lt;br /&gt;
  SERVICE wikibase:label { bd:serviceParam wikibase:language &amp;quot;fr&amp;quot;. }&lt;br /&gt;
  OPTIONAL {?Élément wdt:P18 ?Image}&lt;br /&gt;
}&lt;br /&gt;
ORDER BY DESC(?Altitude)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{WikidataTable |&lt;br /&gt;
title = Alpes pré-vaudoises |&lt;br /&gt;
sparql = SELECT DISTINCT ?Élément ?ÉlémentLabel ?Image ?Altitude WHERE {&lt;br /&gt;
  VALUES ?mountain_summit {&lt;br /&gt;
    wd:Q8502&lt;br /&gt;
    wd:Q207326&lt;br /&gt;
  }&lt;br /&gt;
  VALUES ?vaud_prealps {&lt;br /&gt;
    wd:Q1726262&lt;br /&gt;
  }&lt;br /&gt;
  ?Élément wdt:P31 ?mountain_summit;&lt;br /&gt;
           wdt:P4552 ?vaud_prealps;&lt;br /&gt;
           wdt:P2044 ?Altitude.&lt;br /&gt;
  SERVICE wikibase:label { bd:serviceParam wikibase:language &amp;quot;fr&amp;quot;. }&lt;br /&gt;
  OPTIONAL {?Élément wdt:P18 ?Image}&lt;br /&gt;
}&lt;br /&gt;
ORDER BY DESC(?Altitude)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{WikidataTable |&lt;br /&gt;
title = Sommets situés dans le canton de Vaud |&lt;br /&gt;
sparql = SELECT DISTINCT ?Élément ?ÉlémentLabel ?Image ?Altitude WHERE {&lt;br /&gt;
  VALUES ?mountain_summit {&lt;br /&gt;
    wd:Q8502&lt;br /&gt;
    wd:Q207326&lt;br /&gt;
  }&lt;br /&gt;
  VALUES ?vaud {&lt;br /&gt;
    wd:Q12771&lt;br /&gt;
  }&lt;br /&gt;
  ?Élément wdt:P31 ?mountain_summit;&lt;br /&gt;
           wdt:P131 ?vaud;&lt;br /&gt;
           wdt:P2044 ?Altitude.&lt;br /&gt;
  SERVICE wikibase:label { bd:serviceParam wikibase:language &amp;quot;fr&amp;quot;. }&lt;br /&gt;
  OPTIONAL {?Élément wdt:P18 ?Image}&lt;br /&gt;
}&lt;br /&gt;
ORDER BY DESC(?Altitude)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
{{Références}}&lt;br /&gt;
&lt;br /&gt;
== Voir aussi ==&lt;br /&gt;
&lt;br /&gt;
=== Articles connexes ===&lt;br /&gt;
&lt;br /&gt;
* [[Préalpes vaudoises]]&lt;br /&gt;
* [[Liste des stations suisses de sports d&#039;hiver#Alpes|Liste des stations de sports d&#039;hiver des Alpes et Préalpes vaudoises]]&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=Mod%C3%A8le:Databox&amp;diff=18453</id>
		<title>Modèle:Databox</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=Mod%C3%A8le:Databox&amp;diff=18453"/>
		<updated>2026-07-14T07:36:25Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#invoke:Databox|databox|useImage={{{useImage|}}}|excludeProperties={{{excludeProperties|}}}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{Documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=Wikidata&amp;diff=18452</id>
		<title>Wikidata</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=Wikidata&amp;diff=18452"/>
		<updated>2026-07-13T18:37:51Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wikidata, la base de connaissances qui fait circuler le savoir =&lt;br /&gt;
&lt;br /&gt;
[https://www.wikidata.org/wiki/Q2013 Wikidata] fête chaque année un peu plus d&#039;existence, et pourtant beaucoup de personnes qui consultent [https://www.wikidata.org/wiki/Q52 Wikipédia] tous les jours ignorent encore qu&#039;elle existe. C&#039;est peut-être normal : une bonne infrastructure est une infrastructure qu&#039;on ne voit pas.&lt;br /&gt;
&lt;br /&gt;
Wikidata est une sorte de colonne vertébrale des informations sur les Wikipédias: les informations affichées dans la plupart des infobox en proviennent, qu&#039;il s&#039;agisse d&#039;une date de naissance, d&#039;une superficie ou d&#039;une population.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;Une donnée qui reste enfermée dans une seule langue n&#039;est qu&#039;à moitié partagée.&#039;&#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Un entrepôt, pas une vitrine ==&lt;br /&gt;
&lt;br /&gt;
Wikidata n&#039;est pas un site que l&#039;on consulte comme un dictionnaire. C&#039;est une [https://www.wikidata.org/wiki/Q33002955 base de connaissances] libre, éditable par toute personne, où chaque élément (un lieu, une personne, un concept, une molécule) devient un identifiant stable : un &#039;&#039;&#039;Q&#039;&#039;&#039;, suivi d&#039;un numéro. Chaque relation entre ces éléments passe par une propriété, un &#039;&#039;&#039;P&#039;&#039;&#039;, elle aussi documentée et débattue collectivement.&lt;br /&gt;
&lt;br /&gt;
Cette structure, un peu austère au premier abord, est justement ce qui permet à la donnée de voyager. Une fois qu&#039;une information existe dans Wikidata, elle peut alimenter automatiquement des infoboîtes sur des dizaines de Wikipédia, sans traduction manuelle, sans copier-coller, et surtout sans que quelqu&#039;un doive la remettre à jour cent fois aux cent mêmes endroits.&lt;br /&gt;
&lt;br /&gt;
=== Quelques propriétés de base ===&lt;br /&gt;
&lt;br /&gt;
Pour se faire une idée concrète, voici quelques propriétés fréquemment utilisées, notamment déjà répertoriées sur ce wiki :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! P !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.wikidata.org/wiki/Property:P17 P17] || Pays dont fait partie&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.wikidata.org/wiki/Property:P31 P31] || nature de l&#039;élément (&#039;&#039;instance of&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.wikidata.org/wiki/Property:P131 P131] || localisation administrative&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.wikidata.org/wiki/Property:P571 P571] || date de création&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.wikidata.org/wiki/Property:P625 P625] || coordonnées géographiques&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Quelques éléments de base ===&lt;br /&gt;
&lt;br /&gt;
Et quelques éléments fondamentaux, parmi les premiers créés sur Wikidata :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Q !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.wikidata.org/wiki/Q1 Q1] || Univers&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.wikidata.org/wiki/Q39 Q39] || Suisse&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Le rôle discret des modules ===&lt;br /&gt;
&lt;br /&gt;
Une bonne partie du travail communautaire autour de Wikidata ne se voit jamais en façade. Elle se passe dans des modules Lua, des requêtes [https://www.wikidata.org/wiki/Q54871 SPARQL], des discussions de page de discussion, des correctifs d&#039;une ligne qui, une fois fusionnés, améliorent silencieusement des milliers d&#039;articles.&lt;br /&gt;
&lt;br /&gt;
C&#039;est exactement ce genre de travail qui permet, par exemple, à un article sur une commune vaudoise d&#039;afficher automatiquement sa population, son blason ou ses communes limitrophes à jour, simplement parce que quelqu&#039;un, quelque part, a corrigé la donnée une fois pour toutes dans Wikidata.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;Pas besoin d&#039;apprendre SPARQL pour bénéficier de Wikidata. Mais ceux qui l&#039;apprennent en démultiplient la portée pour tout le monde.&#039;&#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela concerne la Romandie ==&lt;br /&gt;
&lt;br /&gt;
La Suisse romande a tout à gagner à s&#039;investir dans Wikidata : la structure multilingue de la base convient particulièrement bien à une région où le français côtoie l&#039;allemand, l&#039;italien et le romanche au sein d&#039;un même pays. Une information correcte, sourcée et structurée une fois en Wikidata profite immédiatement aux quatre versions linguistiques de Wikipédia, sans travail de traduction supplémentaire.&lt;br /&gt;
&lt;br /&gt;
Les communautés locales, les bibliothèques, les archives cantonales, les musées et les institutions patrimoniales romandes ont d&#039;ailleurs déjà commencé à y verser une partie de leurs données via des projets de type [https://www.wikidata.org/wiki/Q1043404 GLAM] (Galleries, Libraries, Archives, Museums). Chaque notice d&#039;autorité liée, chaque photographie historique documentée avec ses métadonnées, devient un point d&#039;ancrage réutilisable par toute la chaîne de projets Wikimedia, et bien au-delà.&lt;br /&gt;
&lt;br /&gt;
=== Des requêtes, pas des tableaux figés ===&lt;br /&gt;
&lt;br /&gt;
Un des aspects les plus sous-estimés de Wikidata, c&#039;est le [https://query.wikidata.org service de requêtes], qui permet d&#039;interroger l&#039;ensemble de la base en direct. On peut par exemple demander la liste des communes de Suisse romande dont la population a diminué depuis 1990, ou la liste des autrices et auteurs francophones nés à Genève, sans jamais avoir besoin de construire soi-même ce tableau.&lt;br /&gt;
&lt;br /&gt;
Ce n&#039;est pas juste pratique : c&#039;est une manière différente de penser la connaissance. Plutôt que des pages figées, on obtient des vues dynamiques sur une réalité qui continue d&#039;être mise à jour par la communauté.&lt;br /&gt;
&lt;br /&gt;
== Ce qui reste fragile ==&lt;br /&gt;
&lt;br /&gt;
Rien de tout cela ne fonctionne sans entretien. Wikidata vit de vandalisme corrigé, de doublons fusionnés, de contradictions résolues, de modélisations discutées puis affinées au fil des années. Une bonne partie du travail invisible consiste justement à maintenir la cohérence de la base plutôt qu&#039;à y ajouter sans cesse de nouvelles données.&lt;br /&gt;
&lt;br /&gt;
C&#039;est un travail lent, rarement visible, mais c&#039;est précisément ce travail qui permet à tout le reste de tenir.&lt;br /&gt;
&lt;br /&gt;
== Ressources importantes ==&lt;br /&gt;
&lt;br /&gt;
Quelques points d&#039;entrée utiles pour aller plus loin, au-delà de cette page :&lt;br /&gt;
&lt;br /&gt;
* [https://www.wikidata.org/wiki/Wikidata:Main_Page Wikidata:Main Page] — le portail officiel du projet.&lt;br /&gt;
* [https://www.wikidata.org/wiki/Wikidata:Introduction Wikidata:Introduction] — présentation générale, en français, du fonctionnement de la base.&lt;br /&gt;
* [https://www.wikidata.org/wiki/Wikidata:Glossary Wikidata:Glossary] — pour se repérer dans le vocabulaire (élément, propriété, déclaration, qualificateur, référence…).&lt;br /&gt;
* [https://www.wikidata.org/wiki/Help:Sources Help:Sources] — comment sourcer correctement une déclaration.&lt;br /&gt;
* [https://www.wikidata.org/wiki/Wikidata:Notability Wikidata:Notability] — les critères qui définissent si un sujet mérite un élément.&lt;br /&gt;
* [https://query.wikidata.org Wikidata Query Service] — l&#039;interface pour écrire et exécuter des requêtes SPARQL, avec de nombreux exemples prêts à l&#039;emploi.&lt;br /&gt;
* [https://www.wikidata.org/wiki/Wikidata:SPARQL_tutorial Wikidata:SPARQL tutorial] — pour apprendre SPARQL pas à pas.&lt;br /&gt;
* [https://tools.wmflabs.org/quickstatements/ QuickStatements] — l&#039;outil le plus utilisé pour importer ou corriger des données en masse.&lt;br /&gt;
* [https://openrefine.org OpenRefine] — pour nettoyer des jeux de données avant de les envoyer sur Wikidata.&lt;br /&gt;
* [https://www.wikidata.org/wiki/Wikidata:Tours Wikidata:Tours] — des tutoriels interactifs directement dans l&#039;interface, idéaux pour commencer.&lt;br /&gt;
* [https://www.wikidata.org/wiki/Wikidata:WikiProject_Switzerland Wikidata:WikiProject Switzerland] — le groupe de travail dédié à la Suisse, pertinent pour la Romandie.&lt;br /&gt;
* [https://www.wikidata.org/wiki/Wikidata:Project_chat Wikidata:Project chat] — l&#039;endroit où poser une question à la communauté internationale.&lt;br /&gt;
* [https://scholia.toolforge.org Scholia] — pour visualiser les profils bibliométriques et institutionnels construits à partir de Wikidata.&lt;br /&gt;
&lt;br /&gt;
== Recommandations pour les novices ==&lt;br /&gt;
&lt;br /&gt;
Se lancer sur Wikidata peut sembler intimidant au premier abord, la structure en éléments et propriétés est différente de celle d&#039;un wiki de texte classique. Quelques conseils pour bien commencer :&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Créez un compte&#039;&#039;&#039; avant de contribuer : cela permet de suivre son historique de modifications et facilite les échanges avec la communauté.&lt;br /&gt;
* &#039;&#039;&#039;Commencez par les tutoriels interactifs&#039;&#039;&#039; de [https://www.wikidata.org/wiki/Wikidata:Tours Wikidata:Tours] plutôt que de vous lancer directement dans l&#039;édition d&#039;éléments complexes.&lt;br /&gt;
* &#039;&#039;&#039;Sourcez systématiquement vos déclarations.&#039;&#039;&#039; Une donnée sans référence est une donnée fragile, susceptible d&#039;être supprimée ou contestée ; voir [https://www.wikidata.org/wiki/Help:Sources Help:Sources].&lt;br /&gt;
* &#039;&#039;&#039;Vérifiez la notoriété du sujet&#039;&#039;&#039; avant de créer un nouvel élément, en vous référant à [https://www.wikidata.org/wiki/Wikidata:Notability Wikidata:Notability].&lt;br /&gt;
* &#039;&#039;&#039;Utilisez le service de requêtes en lecture seule&#039;&#039;&#039; au début : explorer les données existantes via [https://query.wikidata.org Wikidata Query Service] est un excellent moyen de comprendre comment les autres modélisent des sujets similaires au vôtre.&lt;br /&gt;
* &#039;&#039;&#039;Ne modélisez pas seul(e) un sujet complexe.&#039;&#039;&#039; Si un type d&#039;objet vous semble ambigu (une réaction chimique, une œuvre collective, une entité historique disparue), consultez d&#039;abord les pages de discussion existantes ou posez la question sur [https://www.wikidata.org/wiki/Wikidata:Project_chat Project chat].&lt;br /&gt;
* &#039;&#039;&#039;Rejoignez le WikiProject Suisse&#039;&#039;&#039; ([https://www.wikidata.org/wiki/Wikidata:WikiProject_Switzerland lien]) pour coordonner votre travail avec d&#039;autres contributrices et contributeurs romands, et éviter les doublons.&lt;br /&gt;
* &#039;&#039;&#039;Faites attention aux contraintes de propriété&#039;&#039;&#039; (property constraints) : Wikidata signale automatiquement certaines incohérences (format invalide, valeur hors plage, doublon potentiel) directement sur la page de l&#039;élément.&lt;br /&gt;
* &#039;&#039;&#039;Petits pas, grande portée.&#039;&#039;&#039; Corriger une seule date, ajouter une seule source, relier un seul élément à une notice d&#039;autorité : chacun de ces gestes profite immédiatement à toutes les Wikipédias qui réutilisent cette donnée.&lt;br /&gt;
&lt;br /&gt;
== Comment contribuer, concrètement ==&lt;br /&gt;
&lt;br /&gt;
* Créer ou compléter un élément Wikidata pour une personnalité, un lieu ou une association romande qui n&#039;y figure pas encore.&lt;br /&gt;
* Ajouter des sources aux affirmations déjà présentes.&lt;br /&gt;
* Relier les [https://www.wikidata.org/wiki/Q17280 notices d&#039;autorité] locales (bibliothèques, archives) à leurs éléments Wikidata correspondants.&lt;br /&gt;
* Participer aux ateliers WikiRomandie, où l&#039;on apprend collectivement à modéliser correctement une donnée avant de la publier.&lt;br /&gt;
&lt;br /&gt;
Aucune contribution n&#039;est trop petite. Un élément créé, une source ajoutée, une erreur corrigée : chacun de ces gestes reste dans la base et continue de servir bien après que la personne qui l&#039;a fait soit passée à autre chose.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;Si vous éditez Wikidata, corrigez une donnée, reliez une notice d&#039;autorité ou animez un atelier en Romandie : merci. Ce travail ne compte que parce que vous êtes là.&#039;&#039;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Wikidata]]&lt;br /&gt;
[[Catégorie:WikiRomandie]]&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=Alpes_vaudoises&amp;diff=18361</id>
		<title>Alpes vaudoises</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=Alpes_vaudoises&amp;diff=18361"/>
		<updated>2026-05-28T18:22:45Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:Col_des_Pauvres.jpg|vignette|Le col des Pauvres dans les Alpes vaudoises.]]&lt;br /&gt;
Les &#039;&#039;&#039;Alpes vaudoises&#039;&#039;&#039; (en allemand : &#039;&#039;{{lang|de|Waadtländer Alpen}}&#039;&#039;) sont un ensemble [[Montagne|montagneux]] des [[Alpes suisses]] situé dans les cantons de [[Canton de Vaud|Vaud]], du [[Canton du Valais|Valais]] et de [[Canton de Berne|Berne]] dans l&#039;ouest du pays. Leur point culminant est le sommet des [[Les Diablerets (sommet)|Diablerets]] à {{unité|3216|mètres}} d&#039;altitude.&lt;br /&gt;
&lt;br /&gt;
Elles sont parfois également appelées Alpes calcaires bernoises occidentales et considérées comme une extension des [[Alpes bernoises]]. Selon la [[Subdivision orographique internationale unifiée du système alpin|SOIUSA]], elles constituent donc la sous-section occidentale 12.III des Alpes bernoises au sens large. Dans les guides alpins du [[Club alpin suisse]], elles sont regroupées avec les Préalpes vaudoises&amp;lt;ref&amp;gt;&#039;&#039;Guide des Alpes et Préalpes vaudoises&#039;&#039;, Guide du Club alpin suisse&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Principaux sommets ==&lt;br /&gt;
Les principaux sommets des Alpes vaudoises sont :&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! width=&amp;quot;200&amp;quot; |Nom&lt;br /&gt;
! width=&amp;quot;200&amp;quot; |[[Altitude]]&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|[[Sommet des Diablerets]]&lt;br /&gt;
|{{unité|3216|m}}&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|[[Oldehore|Oldehore (Becca d&#039;Audon)]]&lt;br /&gt;
|{{unité|3123|m}}&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|[[Grand Muveran]]&lt;br /&gt;
|{{unité|3051|m}}&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|[[Tête Ronde (Alpes bernoises)|Tête Ronde]]&lt;br /&gt;
|{{unité|3036|m}}&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|[[Sex Rouge (Les Diablerets)|Sex Rouge]]&lt;br /&gt;
|{{unité|2971|m}}&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|[[Dents de Morcles|Grand Dent de Morcles]]&lt;br /&gt;
|{{unité|2968|m}}&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|[[Dents de Morcles|Petite Dent de Morcles]]&lt;br /&gt;
|{{unité|2929|m}}&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|[[Dent Favre]]&lt;br /&gt;
|{{unité|2916|m}}&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|[[Tête à Pierre Grept]]&lt;br /&gt;
|{{unité|2904|m}}&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|Tête Noire&lt;br /&gt;
|{{unité|2871|m}}&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|Tête aux Veillon&lt;br /&gt;
|{{unité|2846|m}}&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|Pointe de Paneirosse&lt;br /&gt;
|{{unité|2840|m}}&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|[[Petit Muveran]]&lt;br /&gt;
|{{unité|2810|m}}&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|Le Pacheu&lt;br /&gt;
|{{unité|2798|m}}&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|[[Culan (sommet)|Culan]]&lt;br /&gt;
|{{unité|2789|m}}&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|Tête d&#039;Enfer&lt;br /&gt;
|{{unité|2761|m}}&lt;br /&gt;
|-&lt;br /&gt;
|17&lt;br /&gt;
|Roc Champion&lt;br /&gt;
|{{unité|2747|m}}&lt;br /&gt;
|-&lt;br /&gt;
|18&lt;br /&gt;
|Pierre qu&#039;Abotse&lt;br /&gt;
|{{unité|2735|m}}&lt;br /&gt;
|-&lt;br /&gt;
|19&lt;br /&gt;
|Tête de Tsernou&lt;br /&gt;
|{{unité|2732|m}}&lt;br /&gt;
|-&lt;br /&gt;
|20&lt;br /&gt;
|Pointe d&#039;Aufalle&lt;br /&gt;
|{{unité|2725|m}}&lt;br /&gt;
|-&lt;br /&gt;
|21&lt;br /&gt;
|[[Pointe des Martinets]]&lt;br /&gt;
|{{unité|2653|m}}&lt;br /&gt;
|-&lt;br /&gt;
|22&lt;br /&gt;
|Pointe des Encrennes&lt;br /&gt;
|{{unité|2644|m}}&lt;br /&gt;
|-&lt;br /&gt;
|23&lt;br /&gt;
|Tête à Grosjean&lt;br /&gt;
|{{unité|2607|m}}&lt;br /&gt;
|-&lt;br /&gt;
|24&lt;br /&gt;
|Tête de Bellalué&lt;br /&gt;
|{{unité|2604|m}}&lt;br /&gt;
|-&lt;br /&gt;
|25&lt;br /&gt;
|Pointe des Perris Blancs&lt;br /&gt;
|{{unité|2577|m}}&lt;br /&gt;
|-&lt;br /&gt;
|26&lt;br /&gt;
|[[Le Tarent]]&lt;br /&gt;
|{{unité|2548|m}}&lt;br /&gt;
|-&lt;br /&gt;
|27&lt;br /&gt;
|[[La Pare]]&lt;br /&gt;
|{{unité|2540|m}}&lt;br /&gt;
|-&lt;br /&gt;
|28&lt;br /&gt;
|Pointe de Pré-Fleuri&lt;br /&gt;
|{{unité|2482|m}}&lt;br /&gt;
|-&lt;br /&gt;
|29&lt;br /&gt;
|[[Haute Pointe]] ([[arête de l&#039;Argentine]])&lt;br /&gt;
|{{unité|2422|m}}&lt;br /&gt;
|-&lt;br /&gt;
|30&lt;br /&gt;
|[[Tour d&#039;Aï]]&lt;br /&gt;
|{{unité|2331|m}}&lt;br /&gt;
|}&lt;br /&gt;
N.B. La liste des sommets vaudois n&#039;est pas complète et est susceptible d&#039;être modifiée.&lt;br /&gt;
&lt;br /&gt;
{{#invoke:WikidataTable|render&lt;br /&gt;
| title = Alpes vaudoises&lt;br /&gt;
| sparql = SELECT DISTINCT ?Élément ?ÉlémentLabel ?Image ?Altitude WHERE {&lt;br /&gt;
  VALUES ?mountain_summit {&lt;br /&gt;
    wd:Q8502&lt;br /&gt;
    wd:Q207326&lt;br /&gt;
  }&lt;br /&gt;
  VALUES ?vaud_alps {&lt;br /&gt;
    wd:Q663811&lt;br /&gt;
  }&lt;br /&gt;
  ?Élément wdt:P31 ?mountain_summit;&lt;br /&gt;
        wdt:P4552 ?vaud_alps;&lt;br /&gt;
        wdt:P2044 ?Altitude.&lt;br /&gt;
  SERVICE wikibase:label { bd:serviceParam wikibase:language &amp;quot;fr&amp;quot;. }&lt;br /&gt;
  OPTIONAL {?Élément wdt:P18 ?Image}&lt;br /&gt;
}&lt;br /&gt;
ORDER BY DESC(?Altitude)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:WikidataTable|render&lt;br /&gt;
| title = Alpes pré-vaudoises&lt;br /&gt;
| sparql = SELECT DISTINCT ?Élément ?ÉlémentLabel ?Image ?Altitude WHERE {&lt;br /&gt;
  VALUES ?mountain_summit {&lt;br /&gt;
    wd:Q8502&lt;br /&gt;
    wd:Q207326&lt;br /&gt;
  }&lt;br /&gt;
  VALUES ?vaud_prealps {&lt;br /&gt;
    wd:Q1726262&lt;br /&gt;
  }&lt;br /&gt;
  ?Élément wdt:P31 ?mountain_summit;&lt;br /&gt;
           wdt:P4552 ?vaud_prealps;&lt;br /&gt;
           wdt:P2044 ?Altitude.&lt;br /&gt;
  SERVICE wikibase:label { bd:serviceParam wikibase:language &amp;quot;fr&amp;quot;. }&lt;br /&gt;
  OPTIONAL {?Élément wdt:P18 ?Image}&lt;br /&gt;
}&lt;br /&gt;
ORDER BY DESC(?Altitude)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:WikidataTable|render&lt;br /&gt;
| title = Sommets situés dans le canton de Vaud&lt;br /&gt;
| sparql = SELECT DISTINCT ?Élément ?ÉlémentLabel ?Image ?Altitude WHERE {&lt;br /&gt;
  VALUES ?mountain_summit {&lt;br /&gt;
    wd:Q8502&lt;br /&gt;
    wd:Q207326&lt;br /&gt;
  }&lt;br /&gt;
  VALUES ?vaud {&lt;br /&gt;
    wd:Q12771&lt;br /&gt;
  }&lt;br /&gt;
  ?Élément wdt:P31 ?mountain_summit;&lt;br /&gt;
           wdt:P131 ?vaud;&lt;br /&gt;
           wdt:P2044 ?Altitude.&lt;br /&gt;
  SERVICE wikibase:label { bd:serviceParam wikibase:language &amp;quot;fr&amp;quot;. }&lt;br /&gt;
  OPTIONAL {?Élément wdt:P18 ?Image}&lt;br /&gt;
}&lt;br /&gt;
ORDER BY DESC(?Altitude)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
{{Références}}&lt;br /&gt;
&lt;br /&gt;
== Voir aussi ==&lt;br /&gt;
&lt;br /&gt;
=== Articles connexes ===&lt;br /&gt;
&lt;br /&gt;
* [[Préalpes vaudoises]]&lt;br /&gt;
* [[Liste des stations suisses de sports d&#039;hiver#Alpes|Liste des stations de sports d&#039;hiver des Alpes et Préalpes vaudoises]]&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=Alpes_vaudoises&amp;diff=18358</id>
		<title>Alpes vaudoises</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=Alpes_vaudoises&amp;diff=18358"/>
		<updated>2026-05-28T14:51:51Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:Col_des_Pauvres.jpg|vignette|Le col des Pauvres dans les Alpes vaudoises.]]&lt;br /&gt;
Les &#039;&#039;&#039;Alpes vaudoises&#039;&#039;&#039; (en allemand : &#039;&#039;{{lang|de|Waadtländer Alpen}}&#039;&#039;) sont un ensemble [[Montagne|montagneux]] des [[Alpes suisses]] situé dans les cantons de [[Canton de Vaud|Vaud]], du [[Canton du Valais|Valais]] et de [[Canton de Berne|Berne]] dans l&#039;ouest du pays. Leur point culminant est le sommet des [[Les Diablerets (sommet)|Diablerets]] à {{unité|3216|mètres}} d&#039;altitude.&lt;br /&gt;
&lt;br /&gt;
Elles sont parfois également appelées Alpes calcaires bernoises occidentales et considérées comme une extension des [[Alpes bernoises]]. Selon la [[Subdivision orographique internationale unifiée du système alpin|SOIUSA]], elles constituent donc la sous-section occidentale 12.III des Alpes bernoises au sens large. Dans les guides alpins du [[Club alpin suisse]], elles sont regroupées avec les Préalpes vaudoises&amp;lt;ref&amp;gt;&#039;&#039;Guide des Alpes et Préalpes vaudoises&#039;&#039;, Guide du Club alpin suisse&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Principaux sommets ==&lt;br /&gt;
Les principaux sommets des Alpes vaudoises sont :&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! width=&amp;quot;200&amp;quot; |Nom&lt;br /&gt;
! width=&amp;quot;200&amp;quot; |[[Altitude]]&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|[[Sommet des Diablerets]]&lt;br /&gt;
|{{unité|3216|m}}&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|[[Oldehore|Oldehore (Becca d&#039;Audon)]]&lt;br /&gt;
|{{unité|3123|m}}&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|[[Grand Muveran]]&lt;br /&gt;
|{{unité|3051|m}}&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|[[Tête Ronde (Alpes bernoises)|Tête Ronde]]&lt;br /&gt;
|{{unité|3036|m}}&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|[[Sex Rouge (Les Diablerets)|Sex Rouge]]&lt;br /&gt;
|{{unité|2971|m}}&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|[[Dents de Morcles|Grand Dent de Morcles]]&lt;br /&gt;
|{{unité|2968|m}}&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|[[Dents de Morcles|Petite Dent de Morcles]]&lt;br /&gt;
|{{unité|2929|m}}&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|[[Dent Favre]]&lt;br /&gt;
|{{unité|2916|m}}&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|[[Tête à Pierre Grept]]&lt;br /&gt;
|{{unité|2904|m}}&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|Tête Noire&lt;br /&gt;
|{{unité|2871|m}}&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|Tête aux Veillon&lt;br /&gt;
|{{unité|2846|m}}&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|Pointe de Paneirosse&lt;br /&gt;
|{{unité|2840|m}}&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|[[Petit Muveran]]&lt;br /&gt;
|{{unité|2810|m}}&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|Le Pacheu&lt;br /&gt;
|{{unité|2798|m}}&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|[[Culan (sommet)|Culan]]&lt;br /&gt;
|{{unité|2789|m}}&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|Tête d&#039;Enfer&lt;br /&gt;
|{{unité|2761|m}}&lt;br /&gt;
|-&lt;br /&gt;
|17&lt;br /&gt;
|Roc Champion&lt;br /&gt;
|{{unité|2747|m}}&lt;br /&gt;
|-&lt;br /&gt;
|18&lt;br /&gt;
|Pierre qu&#039;Abotse&lt;br /&gt;
|{{unité|2735|m}}&lt;br /&gt;
|-&lt;br /&gt;
|19&lt;br /&gt;
|Tête de Tsernou&lt;br /&gt;
|{{unité|2732|m}}&lt;br /&gt;
|-&lt;br /&gt;
|20&lt;br /&gt;
|Pointe d&#039;Aufalle&lt;br /&gt;
|{{unité|2725|m}}&lt;br /&gt;
|-&lt;br /&gt;
|21&lt;br /&gt;
|[[Pointe des Martinets]]&lt;br /&gt;
|{{unité|2653|m}}&lt;br /&gt;
|-&lt;br /&gt;
|22&lt;br /&gt;
|Pointe des Encrennes&lt;br /&gt;
|{{unité|2644|m}}&lt;br /&gt;
|-&lt;br /&gt;
|23&lt;br /&gt;
|Tête à Grosjean&lt;br /&gt;
|{{unité|2607|m}}&lt;br /&gt;
|-&lt;br /&gt;
|24&lt;br /&gt;
|Tête de Bellalué&lt;br /&gt;
|{{unité|2604|m}}&lt;br /&gt;
|-&lt;br /&gt;
|25&lt;br /&gt;
|Pointe des Perris Blancs&lt;br /&gt;
|{{unité|2577|m}}&lt;br /&gt;
|-&lt;br /&gt;
|26&lt;br /&gt;
|[[Le Tarent]]&lt;br /&gt;
|{{unité|2548|m}}&lt;br /&gt;
|-&lt;br /&gt;
|27&lt;br /&gt;
|[[La Pare]]&lt;br /&gt;
|{{unité|2540|m}}&lt;br /&gt;
|-&lt;br /&gt;
|28&lt;br /&gt;
|Pointe de Pré-Fleuri&lt;br /&gt;
|{{unité|2482|m}}&lt;br /&gt;
|-&lt;br /&gt;
|29&lt;br /&gt;
|[[Haute Pointe]] ([[arête de l&#039;Argentine]])&lt;br /&gt;
|{{unité|2422|m}}&lt;br /&gt;
|-&lt;br /&gt;
|30&lt;br /&gt;
|[[Tour d&#039;Aï]]&lt;br /&gt;
|{{unité|2331|m}}&lt;br /&gt;
|}&lt;br /&gt;
N.B. La liste des sommets vaudois n&#039;est pas complète et est susceptible d&#039;être modifiée.&lt;br /&gt;
&lt;br /&gt;
{{#invoke:WikidataTable|render&lt;br /&gt;
| title = Alpes vaudoises&lt;br /&gt;
| sparql = SELECT DISTINCT ?item ?itemLabel ?elevation WHERE {&lt;br /&gt;
  VALUES ?mountain_summit {&lt;br /&gt;
    wd:Q8502&lt;br /&gt;
    wd:Q207326&lt;br /&gt;
  }&lt;br /&gt;
  VALUES ?vaud_alps {&lt;br /&gt;
    wd:Q663811&lt;br /&gt;
  }&lt;br /&gt;
  ?item wdt:P31 ?mountain_summit;&lt;br /&gt;
        wdt:P4552 ?vaud_alps;&lt;br /&gt;
        wdt:P2044 ?elevation.&lt;br /&gt;
  SERVICE wikibase:label { bd:serviceParam wikibase:language &amp;quot;fr&amp;quot;. }&lt;br /&gt;
}&lt;br /&gt;
ORDER BY DESC(?elevation)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:WikidataTable|render&lt;br /&gt;
| title = Alpes pré-vaudoises&lt;br /&gt;
| sparql = SELECT DISTINCT ?item ?itemLabel ?elevation WHERE {&lt;br /&gt;
  VALUES ?mountain_summit {&lt;br /&gt;
    wd:Q8502&lt;br /&gt;
    wd:Q207326&lt;br /&gt;
  }&lt;br /&gt;
  VALUES ?vaud_prealps {&lt;br /&gt;
    wd:Q1726262&lt;br /&gt;
  }&lt;br /&gt;
  ?item wdt:P31 ?mountain_summit;&lt;br /&gt;
        wdt:P4552 ?vaud_prealps;&lt;br /&gt;
        wdt:P2044 ?elevation.&lt;br /&gt;
  SERVICE wikibase:label { bd:serviceParam wikibase:language &amp;quot;fr&amp;quot;. }&lt;br /&gt;
}&lt;br /&gt;
ORDER BY DESC(?elevation)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:WikidataTable|render&lt;br /&gt;
| title = Sommets situés dans le canton de Vaud&lt;br /&gt;
| sparql = SELECT DISTINCT ?item ?itemLabel ?elevation WHERE {&lt;br /&gt;
  VALUES ?mountain_summit {&lt;br /&gt;
    wd:Q8502&lt;br /&gt;
    wd:Q207326&lt;br /&gt;
  }&lt;br /&gt;
  VALUES ?vaud {&lt;br /&gt;
    wd:Q12771&lt;br /&gt;
  }&lt;br /&gt;
  ?item wdt:P31 ?mountain_summit;&lt;br /&gt;
        wdt:P131 ?vaud;&lt;br /&gt;
        wdt:P2044 ?elevation.&lt;br /&gt;
  SERVICE wikibase:label { bd:serviceParam wikibase:language &amp;quot;fr&amp;quot;. }&lt;br /&gt;
}&lt;br /&gt;
ORDER BY DESC(?elevation)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
{{Références}}&lt;br /&gt;
&lt;br /&gt;
== Voir aussi ==&lt;br /&gt;
&lt;br /&gt;
=== Articles connexes ===&lt;br /&gt;
&lt;br /&gt;
* [[Préalpes vaudoises]]&lt;br /&gt;
* [[Liste des stations suisses de sports d&#039;hiver#Alpes|Liste des stations de sports d&#039;hiver des Alpes et Préalpes vaudoises]]&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=Alpes_vaudoises&amp;diff=18357</id>
		<title>Alpes vaudoises</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=Alpes_vaudoises&amp;diff=18357"/>
		<updated>2026-05-28T14:50:28Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:Col_des_Pauvres.jpg|vignette|Le col des Pauvres dans les Alpes vaudoises.]]&lt;br /&gt;
Les &#039;&#039;&#039;Alpes vaudoises&#039;&#039;&#039; (en allemand : &#039;&#039;{{lang|de|Waadtländer Alpen}}&#039;&#039;) sont un ensemble [[Montagne|montagneux]] des [[Alpes suisses]] situé dans les cantons de [[Canton de Vaud|Vaud]], du [[Canton du Valais|Valais]] et de [[Canton de Berne|Berne]] dans l&#039;ouest du pays. Leur point culminant est le sommet des [[Les Diablerets (sommet)|Diablerets]] à {{unité|3216|mètres}} d&#039;altitude.&lt;br /&gt;
&lt;br /&gt;
Elles sont parfois également appelées Alpes calcaires bernoises occidentales et considérées comme une extension des [[Alpes bernoises]]. Selon la [[Subdivision orographique internationale unifiée du système alpin|SOIUSA]], elles constituent donc la sous-section occidentale 12.III des Alpes bernoises au sens large. Dans les guides alpins du [[Club alpin suisse]], elles sont regroupées avec les Préalpes vaudoises&amp;lt;ref&amp;gt;&#039;&#039;Guide des Alpes et Préalpes vaudoises&#039;&#039;, Guide du Club alpin suisse&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Principaux sommets ==&lt;br /&gt;
Les principaux sommets des Alpes vaudoises sont :&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! width=&amp;quot;200&amp;quot; |Nom&lt;br /&gt;
! width=&amp;quot;200&amp;quot; |[[Altitude]]&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|[[Sommet des Diablerets]]&lt;br /&gt;
|{{unité|3216|m}}&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|[[Oldehore|Oldehore (Becca d&#039;Audon)]]&lt;br /&gt;
|{{unité|3123|m}}&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|[[Grand Muveran]]&lt;br /&gt;
|{{unité|3051|m}}&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|[[Tête Ronde (Alpes bernoises)|Tête Ronde]]&lt;br /&gt;
|{{unité|3036|m}}&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|[[Sex Rouge (Les Diablerets)|Sex Rouge]]&lt;br /&gt;
|{{unité|2971|m}}&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|[[Dents de Morcles|Grand Dent de Morcles]]&lt;br /&gt;
|{{unité|2968|m}}&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|[[Dents de Morcles|Petite Dent de Morcles]]&lt;br /&gt;
|{{unité|2929|m}}&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|[[Dent Favre]]&lt;br /&gt;
|{{unité|2916|m}}&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|[[Tête à Pierre Grept]]&lt;br /&gt;
|{{unité|2904|m}}&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|Tête Noire&lt;br /&gt;
|{{unité|2871|m}}&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|Tête aux Veillon&lt;br /&gt;
|{{unité|2846|m}}&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|Pointe de Paneirosse&lt;br /&gt;
|{{unité|2840|m}}&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|[[Petit Muveran]]&lt;br /&gt;
|{{unité|2810|m}}&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|Le Pacheu&lt;br /&gt;
|{{unité|2798|m}}&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|[[Culan (sommet)|Culan]]&lt;br /&gt;
|{{unité|2789|m}}&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|Tête d&#039;Enfer&lt;br /&gt;
|{{unité|2761|m}}&lt;br /&gt;
|-&lt;br /&gt;
|17&lt;br /&gt;
|Roc Champion&lt;br /&gt;
|{{unité|2747|m}}&lt;br /&gt;
|-&lt;br /&gt;
|18&lt;br /&gt;
|Pierre qu&#039;Abotse&lt;br /&gt;
|{{unité|2735|m}}&lt;br /&gt;
|-&lt;br /&gt;
|19&lt;br /&gt;
|Tête de Tsernou&lt;br /&gt;
|{{unité|2732|m}}&lt;br /&gt;
|-&lt;br /&gt;
|20&lt;br /&gt;
|Pointe d&#039;Aufalle&lt;br /&gt;
|{{unité|2725|m}}&lt;br /&gt;
|-&lt;br /&gt;
|21&lt;br /&gt;
|[[Pointe des Martinets]]&lt;br /&gt;
|{{unité|2653|m}}&lt;br /&gt;
|-&lt;br /&gt;
|22&lt;br /&gt;
|Pointe des Encrennes&lt;br /&gt;
|{{unité|2644|m}}&lt;br /&gt;
|-&lt;br /&gt;
|23&lt;br /&gt;
|Tête à Grosjean&lt;br /&gt;
|{{unité|2607|m}}&lt;br /&gt;
|-&lt;br /&gt;
|24&lt;br /&gt;
|Tête de Bellalué&lt;br /&gt;
|{{unité|2604|m}}&lt;br /&gt;
|-&lt;br /&gt;
|25&lt;br /&gt;
|Pointe des Perris Blancs&lt;br /&gt;
|{{unité|2577|m}}&lt;br /&gt;
|-&lt;br /&gt;
|26&lt;br /&gt;
|[[Le Tarent]]&lt;br /&gt;
|{{unité|2548|m}}&lt;br /&gt;
|-&lt;br /&gt;
|27&lt;br /&gt;
|[[La Pare]]&lt;br /&gt;
|{{unité|2540|m}}&lt;br /&gt;
|-&lt;br /&gt;
|28&lt;br /&gt;
|Pointe de Pré-Fleuri&lt;br /&gt;
|{{unité|2482|m}}&lt;br /&gt;
|-&lt;br /&gt;
|29&lt;br /&gt;
|[[Haute Pointe]] ([[arête de l&#039;Argentine]])&lt;br /&gt;
|{{unité|2422|m}}&lt;br /&gt;
|-&lt;br /&gt;
|30&lt;br /&gt;
|[[Tour d&#039;Aï]]&lt;br /&gt;
|{{unité|2331|m}}&lt;br /&gt;
|}&lt;br /&gt;
N.B. La liste des sommets vaudois n&#039;est pas complète et est susceptible d&#039;être modifiée.&lt;br /&gt;
&lt;br /&gt;
{{#invoke:WikidataTable|render&lt;br /&gt;
| title = Sommets situés dans le canton de Vaud&lt;br /&gt;
| sparql = SELECT DISTINCT ?item ?itemLabel ?elevation WHERE {&lt;br /&gt;
  VALUES ?mountain_summit {&lt;br /&gt;
    wd:Q8502&lt;br /&gt;
    wd:Q207326&lt;br /&gt;
  }&lt;br /&gt;
  VALUES ?vaud {&lt;br /&gt;
    wd:Q12771&lt;br /&gt;
  }&lt;br /&gt;
  ?item wdt:P31 ?mountain_summit;&lt;br /&gt;
        wdt:P131 ?vaud;&lt;br /&gt;
        wdt:P2044 ?elevation.&lt;br /&gt;
  SERVICE wikibase:label { bd:serviceParam wikibase:language &amp;quot;fr&amp;quot;. }&lt;br /&gt;
}&lt;br /&gt;
ORDER BY DESC(?elevation)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:WikidataTable|render&lt;br /&gt;
| title = Alpes vaudoises&lt;br /&gt;
| sparql = SELECT DISTINCT ?item ?itemLabel ?elevation WHERE {&lt;br /&gt;
  VALUES ?mountain_summit {&lt;br /&gt;
    wd:Q8502&lt;br /&gt;
    wd:Q207326&lt;br /&gt;
  }&lt;br /&gt;
  VALUES ?vaud_alps {&lt;br /&gt;
    wd:Q663811&lt;br /&gt;
  }&lt;br /&gt;
  ?item wdt:P31 ?mountain_summit;&lt;br /&gt;
        wdt:P4552 ?vaud_alps;&lt;br /&gt;
        wdt:P2044 ?elevation.&lt;br /&gt;
  SERVICE wikibase:label { bd:serviceParam wikibase:language &amp;quot;fr&amp;quot;. }&lt;br /&gt;
}&lt;br /&gt;
ORDER BY DESC(?elevation)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:WikidataTable|render&lt;br /&gt;
| title = Alpes pré-vaudoises&lt;br /&gt;
| sparql = SELECT DISTINCT ?item ?itemLabel ?elevation WHERE {&lt;br /&gt;
  VALUES ?mountain_summit {&lt;br /&gt;
    wd:Q8502&lt;br /&gt;
    wd:Q207326&lt;br /&gt;
  }&lt;br /&gt;
  VALUES ?vaud_prealps {&lt;br /&gt;
    wd:Q1726262&lt;br /&gt;
  }&lt;br /&gt;
  ?item wdt:P31 ?mountain_summit;&lt;br /&gt;
        wdt:P4552 ?vaud_prealps;&lt;br /&gt;
        wdt:P2044 ?elevation.&lt;br /&gt;
  SERVICE wikibase:label { bd:serviceParam wikibase:language &amp;quot;fr&amp;quot;. }&lt;br /&gt;
}&lt;br /&gt;
ORDER BY DESC(?elevation)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
{{Références}}&lt;br /&gt;
&lt;br /&gt;
== Voir aussi ==&lt;br /&gt;
&lt;br /&gt;
=== Articles connexes ===&lt;br /&gt;
&lt;br /&gt;
* [[Préalpes vaudoises]]&lt;br /&gt;
* [[Liste des stations suisses de sports d&#039;hiver#Alpes|Liste des stations de sports d&#039;hiver des Alpes et Préalpes vaudoises]]&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=Alpes_vaudoises&amp;diff=18356</id>
		<title>Alpes vaudoises</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=Alpes_vaudoises&amp;diff=18356"/>
		<updated>2026-05-28T14:47:45Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:Col_des_Pauvres.jpg|vignette|Le col des Pauvres dans les Alpes vaudoises.]]&lt;br /&gt;
Les &#039;&#039;&#039;Alpes vaudoises&#039;&#039;&#039; (en allemand : &#039;&#039;{{lang|de|Waadtländer Alpen}}&#039;&#039;) sont un ensemble [[Montagne|montagneux]] des [[Alpes suisses]] situé dans les cantons de [[Canton de Vaud|Vaud]], du [[Canton du Valais|Valais]] et de [[Canton de Berne|Berne]] dans l&#039;ouest du pays. Leur point culminant est le sommet des [[Les Diablerets (sommet)|Diablerets]] à {{unité|3216|mètres}} d&#039;altitude.&lt;br /&gt;
&lt;br /&gt;
Elles sont parfois également appelées Alpes calcaires bernoises occidentales et considérées comme une extension des [[Alpes bernoises]]. Selon la [[Subdivision orographique internationale unifiée du système alpin|SOIUSA]], elles constituent donc la sous-section occidentale 12.III des Alpes bernoises au sens large. Dans les guides alpins du [[Club alpin suisse]], elles sont regroupées avec les Préalpes vaudoises&amp;lt;ref&amp;gt;&#039;&#039;Guide des Alpes et Préalpes vaudoises&#039;&#039;, Guide du Club alpin suisse&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Principaux sommets ==&lt;br /&gt;
Les principaux sommets des Alpes vaudoises sont :&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! width=&amp;quot;200&amp;quot; |Nom&lt;br /&gt;
! width=&amp;quot;200&amp;quot; |[[Altitude]]&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|[[Sommet des Diablerets]]&lt;br /&gt;
|{{unité|3216|m}}&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|[[Oldehore|Oldehore (Becca d&#039;Audon)]]&lt;br /&gt;
|{{unité|3123|m}}&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|[[Grand Muveran]]&lt;br /&gt;
|{{unité|3051|m}}&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|[[Tête Ronde (Alpes bernoises)|Tête Ronde]]&lt;br /&gt;
|{{unité|3036|m}}&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|[[Sex Rouge (Les Diablerets)|Sex Rouge]]&lt;br /&gt;
|{{unité|2971|m}}&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|[[Dents de Morcles|Grand Dent de Morcles]]&lt;br /&gt;
|{{unité|2968|m}}&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|[[Dents de Morcles|Petite Dent de Morcles]]&lt;br /&gt;
|{{unité|2929|m}}&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|[[Dent Favre]]&lt;br /&gt;
|{{unité|2916|m}}&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|[[Tête à Pierre Grept]]&lt;br /&gt;
|{{unité|2904|m}}&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|Tête Noire&lt;br /&gt;
|{{unité|2871|m}}&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|Tête aux Veillon&lt;br /&gt;
|{{unité|2846|m}}&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|Pointe de Paneirosse&lt;br /&gt;
|{{unité|2840|m}}&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|[[Petit Muveran]]&lt;br /&gt;
|{{unité|2810|m}}&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|Le Pacheu&lt;br /&gt;
|{{unité|2798|m}}&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|[[Culan (sommet)|Culan]]&lt;br /&gt;
|{{unité|2789|m}}&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|Tête d&#039;Enfer&lt;br /&gt;
|{{unité|2761|m}}&lt;br /&gt;
|-&lt;br /&gt;
|17&lt;br /&gt;
|Roc Champion&lt;br /&gt;
|{{unité|2747|m}}&lt;br /&gt;
|-&lt;br /&gt;
|18&lt;br /&gt;
|Pierre qu&#039;Abotse&lt;br /&gt;
|{{unité|2735|m}}&lt;br /&gt;
|-&lt;br /&gt;
|19&lt;br /&gt;
|Tête de Tsernou&lt;br /&gt;
|{{unité|2732|m}}&lt;br /&gt;
|-&lt;br /&gt;
|20&lt;br /&gt;
|Pointe d&#039;Aufalle&lt;br /&gt;
|{{unité|2725|m}}&lt;br /&gt;
|-&lt;br /&gt;
|21&lt;br /&gt;
|[[Pointe des Martinets]]&lt;br /&gt;
|{{unité|2653|m}}&lt;br /&gt;
|-&lt;br /&gt;
|22&lt;br /&gt;
|Pointe des Encrennes&lt;br /&gt;
|{{unité|2644|m}}&lt;br /&gt;
|-&lt;br /&gt;
|23&lt;br /&gt;
|Tête à Grosjean&lt;br /&gt;
|{{unité|2607|m}}&lt;br /&gt;
|-&lt;br /&gt;
|24&lt;br /&gt;
|Tête de Bellalué&lt;br /&gt;
|{{unité|2604|m}}&lt;br /&gt;
|-&lt;br /&gt;
|25&lt;br /&gt;
|Pointe des Perris Blancs&lt;br /&gt;
|{{unité|2577|m}}&lt;br /&gt;
|-&lt;br /&gt;
|26&lt;br /&gt;
|[[Le Tarent]]&lt;br /&gt;
|{{unité|2548|m}}&lt;br /&gt;
|-&lt;br /&gt;
|27&lt;br /&gt;
|[[La Pare]]&lt;br /&gt;
|{{unité|2540|m}}&lt;br /&gt;
|-&lt;br /&gt;
|28&lt;br /&gt;
|Pointe de Pré-Fleuri&lt;br /&gt;
|{{unité|2482|m}}&lt;br /&gt;
|-&lt;br /&gt;
|29&lt;br /&gt;
|[[Haute Pointe]] ([[arête de l&#039;Argentine]])&lt;br /&gt;
|{{unité|2422|m}}&lt;br /&gt;
|-&lt;br /&gt;
|30&lt;br /&gt;
|[[Tour d&#039;Aï]]&lt;br /&gt;
|{{unité|2331|m}}&lt;br /&gt;
|}&lt;br /&gt;
N.B. La liste des sommets vaudois n&#039;est pas complète et est susceptible d&#039;être modifiée.&lt;br /&gt;
&lt;br /&gt;
{{#invoke:WikidataTable|render&lt;br /&gt;
| title = Sommets vaudois&lt;br /&gt;
| sparql = SELECT DISTINCT ?item ?itemLabel ?elevation WHERE {&lt;br /&gt;
  VALUES ?mountain_summit {&lt;br /&gt;
    wd:Q8502&lt;br /&gt;
    wd:Q207326&lt;br /&gt;
  }&lt;br /&gt;
  VALUES ?vaud {&lt;br /&gt;
    wd:Q12771&lt;br /&gt;
  }&lt;br /&gt;
  ?item wdt:P31 ?mountain_summit;&lt;br /&gt;
        wdt:P131 ?vaud;&lt;br /&gt;
        wdt:P2044 ?elevation.&lt;br /&gt;
  SERVICE wikibase:label { bd:serviceParam wikibase:language &amp;quot;fr&amp;quot;. }&lt;br /&gt;
}&lt;br /&gt;
ORDER BY DESC(?elevation)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:WikidataTable|render&lt;br /&gt;
| title = Sommets vaudois v2&lt;br /&gt;
| sparql = SELECT DISTINCT ?item ?itemLabel ?elevation WHERE {&lt;br /&gt;
  VALUES ?mountain_summit {&lt;br /&gt;
    wd:Q8502&lt;br /&gt;
    wd:Q207326&lt;br /&gt;
  }&lt;br /&gt;
  VALUES ?vaud_alps {&lt;br /&gt;
    wd:Q663811&lt;br /&gt;
  }&lt;br /&gt;
  ?item wdt:P31 ?mountain_summit;&lt;br /&gt;
        wdt:P4552 ?vaud_alps;&lt;br /&gt;
        wdt:P2044 ?elevation.&lt;br /&gt;
  SERVICE wikibase:label { bd:serviceParam wikibase:language &amp;quot;fr&amp;quot;. }&lt;br /&gt;
}&lt;br /&gt;
ORDER BY DESC(?elevation)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
{{Références}}&lt;br /&gt;
&lt;br /&gt;
== Voir aussi ==&lt;br /&gt;
&lt;br /&gt;
=== Articles connexes ===&lt;br /&gt;
&lt;br /&gt;
* [[Préalpes vaudoises]]&lt;br /&gt;
* [[Liste des stations suisses de sports d&#039;hiver#Alpes|Liste des stations de sports d&#039;hiver des Alpes et Préalpes vaudoises]]&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=Alpes_vaudoises&amp;diff=18355</id>
		<title>Alpes vaudoises</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=Alpes_vaudoises&amp;diff=18355"/>
		<updated>2026-05-28T14:45:33Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:Col_des_Pauvres.jpg|vignette|Le col des Pauvres dans les Alpes vaudoises.]]&lt;br /&gt;
Les &#039;&#039;&#039;Alpes vaudoises&#039;&#039;&#039; (en allemand : &#039;&#039;{{lang|de|Waadtländer Alpen}}&#039;&#039;) sont un ensemble [[Montagne|montagneux]] des [[Alpes suisses]] situé dans les cantons de [[Canton de Vaud|Vaud]], du [[Canton du Valais|Valais]] et de [[Canton de Berne|Berne]] dans l&#039;ouest du pays. Leur point culminant est le sommet des [[Les Diablerets (sommet)|Diablerets]] à {{unité|3216|mètres}} d&#039;altitude.&lt;br /&gt;
&lt;br /&gt;
Elles sont parfois également appelées Alpes calcaires bernoises occidentales et considérées comme une extension des [[Alpes bernoises]]. Selon la [[Subdivision orographique internationale unifiée du système alpin|SOIUSA]], elles constituent donc la sous-section occidentale 12.III des Alpes bernoises au sens large. Dans les guides alpins du [[Club alpin suisse]], elles sont regroupées avec les Préalpes vaudoises&amp;lt;ref&amp;gt;&#039;&#039;Guide des Alpes et Préalpes vaudoises&#039;&#039;, Guide du Club alpin suisse&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Principaux sommets ==&lt;br /&gt;
Les principaux sommets des Alpes vaudoises sont :&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! width=&amp;quot;200&amp;quot; |Nom&lt;br /&gt;
! width=&amp;quot;200&amp;quot; |[[Altitude]]&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|[[Sommet des Diablerets]]&lt;br /&gt;
|{{unité|3216|m}}&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|[[Oldehore|Oldehore (Becca d&#039;Audon)]]&lt;br /&gt;
|{{unité|3123|m}}&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|[[Grand Muveran]]&lt;br /&gt;
|{{unité|3051|m}}&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|[[Tête Ronde (Alpes bernoises)|Tête Ronde]]&lt;br /&gt;
|{{unité|3036|m}}&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|[[Sex Rouge (Les Diablerets)|Sex Rouge]]&lt;br /&gt;
|{{unité|2971|m}}&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|[[Dents de Morcles|Grand Dent de Morcles]]&lt;br /&gt;
|{{unité|2968|m}}&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|[[Dents de Morcles|Petite Dent de Morcles]]&lt;br /&gt;
|{{unité|2929|m}}&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|[[Dent Favre]]&lt;br /&gt;
|{{unité|2916|m}}&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|[[Tête à Pierre Grept]]&lt;br /&gt;
|{{unité|2904|m}}&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|Tête Noire&lt;br /&gt;
|{{unité|2871|m}}&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|Tête aux Veillon&lt;br /&gt;
|{{unité|2846|m}}&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|Pointe de Paneirosse&lt;br /&gt;
|{{unité|2840|m}}&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|[[Petit Muveran]]&lt;br /&gt;
|{{unité|2810|m}}&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|Le Pacheu&lt;br /&gt;
|{{unité|2798|m}}&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|[[Culan (sommet)|Culan]]&lt;br /&gt;
|{{unité|2789|m}}&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|Tête d&#039;Enfer&lt;br /&gt;
|{{unité|2761|m}}&lt;br /&gt;
|-&lt;br /&gt;
|17&lt;br /&gt;
|Roc Champion&lt;br /&gt;
|{{unité|2747|m}}&lt;br /&gt;
|-&lt;br /&gt;
|18&lt;br /&gt;
|Pierre qu&#039;Abotse&lt;br /&gt;
|{{unité|2735|m}}&lt;br /&gt;
|-&lt;br /&gt;
|19&lt;br /&gt;
|Tête de Tsernou&lt;br /&gt;
|{{unité|2732|m}}&lt;br /&gt;
|-&lt;br /&gt;
|20&lt;br /&gt;
|Pointe d&#039;Aufalle&lt;br /&gt;
|{{unité|2725|m}}&lt;br /&gt;
|-&lt;br /&gt;
|21&lt;br /&gt;
|[[Pointe des Martinets]]&lt;br /&gt;
|{{unité|2653|m}}&lt;br /&gt;
|-&lt;br /&gt;
|22&lt;br /&gt;
|Pointe des Encrennes&lt;br /&gt;
|{{unité|2644|m}}&lt;br /&gt;
|-&lt;br /&gt;
|23&lt;br /&gt;
|Tête à Grosjean&lt;br /&gt;
|{{unité|2607|m}}&lt;br /&gt;
|-&lt;br /&gt;
|24&lt;br /&gt;
|Tête de Bellalué&lt;br /&gt;
|{{unité|2604|m}}&lt;br /&gt;
|-&lt;br /&gt;
|25&lt;br /&gt;
|Pointe des Perris Blancs&lt;br /&gt;
|{{unité|2577|m}}&lt;br /&gt;
|-&lt;br /&gt;
|26&lt;br /&gt;
|[[Le Tarent]]&lt;br /&gt;
|{{unité|2548|m}}&lt;br /&gt;
|-&lt;br /&gt;
|27&lt;br /&gt;
|[[La Pare]]&lt;br /&gt;
|{{unité|2540|m}}&lt;br /&gt;
|-&lt;br /&gt;
|28&lt;br /&gt;
|Pointe de Pré-Fleuri&lt;br /&gt;
|{{unité|2482|m}}&lt;br /&gt;
|-&lt;br /&gt;
|29&lt;br /&gt;
|[[Haute Pointe]] ([[arête de l&#039;Argentine]])&lt;br /&gt;
|{{unité|2422|m}}&lt;br /&gt;
|-&lt;br /&gt;
|30&lt;br /&gt;
|[[Tour d&#039;Aï]]&lt;br /&gt;
|{{unité|2331|m}}&lt;br /&gt;
|}&lt;br /&gt;
N.B. La liste des sommets vaudois n&#039;est pas complète et est susceptible d&#039;être modifiée.&lt;br /&gt;
&lt;br /&gt;
{{#invoke:WikidataTable|render&lt;br /&gt;
| title = Sommets vaudois&lt;br /&gt;
| sparql = SELECT DISTINCT ?item ?itemLabel ?elevation WHERE {&lt;br /&gt;
  VALUES ?mountain_summit {&lt;br /&gt;
    wd:Q8502&lt;br /&gt;
    wd:Q207326&lt;br /&gt;
  }&lt;br /&gt;
  VALUES ?vaud {&lt;br /&gt;
    wd:Q12771&lt;br /&gt;
  }&lt;br /&gt;
  ?item wdt:P31 ?mountain_summit;&lt;br /&gt;
        wdt:P131 ?vaud;&lt;br /&gt;
        wdt:P2044 ?elevation.&lt;br /&gt;
  SERVICE wikibase:label { bd:serviceParam wikibase:language &amp;quot;fr&amp;quot;. }&lt;br /&gt;
}&lt;br /&gt;
ORDER BY DESC(?elevation)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:WikidataTable|render&lt;br /&gt;
| title = Sommets vaudois v2&lt;br /&gt;
| sparql = SELECT DISTINCT ?item ?itemLabel ?elevation WHERE {&lt;br /&gt;
  VALUES ?mountain_summit {&lt;br /&gt;
    wd:Q8502&lt;br /&gt;
    wd:Q207326&lt;br /&gt;
  }&lt;br /&gt;
  VALUES ?vaud_prealps {&lt;br /&gt;
    wd:Q1726262&lt;br /&gt;
  }&lt;br /&gt;
  ?item wdt:P31 ?mountain_summit;&lt;br /&gt;
        wdt:P4552 ?vaud_prealps;&lt;br /&gt;
        wdt:P2044 ?elevation.&lt;br /&gt;
  SERVICE wikibase:label { bd:serviceParam wikibase:language &amp;quot;fr&amp;quot;. }&lt;br /&gt;
}&lt;br /&gt;
ORDER BY DESC(?elevation)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
{{Références}}&lt;br /&gt;
&lt;br /&gt;
== Voir aussi ==&lt;br /&gt;
&lt;br /&gt;
=== Articles connexes ===&lt;br /&gt;
&lt;br /&gt;
* [[Préalpes vaudoises]]&lt;br /&gt;
* [[Liste des stations suisses de sports d&#039;hiver#Alpes|Liste des stations de sports d&#039;hiver des Alpes et Préalpes vaudoises]]&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=Alpes_vaudoises&amp;diff=18353</id>
		<title>Alpes vaudoises</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=Alpes_vaudoises&amp;diff=18353"/>
		<updated>2026-05-28T14:04:25Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:Col_des_Pauvres.jpg|vignette|Le col des Pauvres dans les Alpes vaudoises.]]&lt;br /&gt;
Les &#039;&#039;&#039;Alpes vaudoises&#039;&#039;&#039; (en allemand : &#039;&#039;{{lang|de|Waadtländer Alpen}}&#039;&#039;) sont un ensemble [[Montagne|montagneux]] des [[Alpes suisses]] situé dans les cantons de [[Canton de Vaud|Vaud]], du [[Canton du Valais|Valais]] et de [[Canton de Berne|Berne]] dans l&#039;ouest du pays. Leur point culminant est le sommet des [[Les Diablerets (sommet)|Diablerets]] à {{unité|3216|mètres}} d&#039;altitude.&lt;br /&gt;
&lt;br /&gt;
Elles sont parfois également appelées Alpes calcaires bernoises occidentales et considérées comme une extension des [[Alpes bernoises]]. Selon la [[Subdivision orographique internationale unifiée du système alpin|SOIUSA]], elles constituent donc la sous-section occidentale 12.III des Alpes bernoises au sens large. Dans les guides alpins du [[Club alpin suisse]], elles sont regroupées avec les Préalpes vaudoises&amp;lt;ref&amp;gt;&#039;&#039;Guide des Alpes et Préalpes vaudoises&#039;&#039;, Guide du Club alpin suisse&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Principaux sommets ==&lt;br /&gt;
Les principaux sommets des Alpes vaudoises sont :&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! width=&amp;quot;200&amp;quot; |Nom&lt;br /&gt;
! width=&amp;quot;200&amp;quot; |[[Altitude]]&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|[[Sommet des Diablerets]]&lt;br /&gt;
|{{unité|3216|m}}&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|[[Oldehore|Oldehore (Becca d&#039;Audon)]]&lt;br /&gt;
|{{unité|3123|m}}&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|[[Grand Muveran]]&lt;br /&gt;
|{{unité|3051|m}}&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|[[Tête Ronde (Alpes bernoises)|Tête Ronde]]&lt;br /&gt;
|{{unité|3036|m}}&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|[[Sex Rouge (Les Diablerets)|Sex Rouge]]&lt;br /&gt;
|{{unité|2971|m}}&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|[[Dents de Morcles|Grand Dent de Morcles]]&lt;br /&gt;
|{{unité|2968|m}}&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|[[Dents de Morcles|Petite Dent de Morcles]]&lt;br /&gt;
|{{unité|2929|m}}&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|[[Dent Favre]]&lt;br /&gt;
|{{unité|2916|m}}&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|[[Tête à Pierre Grept]]&lt;br /&gt;
|{{unité|2904|m}}&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|Tête Noire&lt;br /&gt;
|{{unité|2871|m}}&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|Tête aux Veillon&lt;br /&gt;
|{{unité|2846|m}}&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|Pointe de Paneirosse&lt;br /&gt;
|{{unité|2840|m}}&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|[[Petit Muveran]]&lt;br /&gt;
|{{unité|2810|m}}&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|Le Pacheu&lt;br /&gt;
|{{unité|2798|m}}&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|[[Culan (sommet)|Culan]]&lt;br /&gt;
|{{unité|2789|m}}&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|Tête d&#039;Enfer&lt;br /&gt;
|{{unité|2761|m}}&lt;br /&gt;
|-&lt;br /&gt;
|17&lt;br /&gt;
|Roc Champion&lt;br /&gt;
|{{unité|2747|m}}&lt;br /&gt;
|-&lt;br /&gt;
|18&lt;br /&gt;
|Pierre qu&#039;Abotse&lt;br /&gt;
|{{unité|2735|m}}&lt;br /&gt;
|-&lt;br /&gt;
|19&lt;br /&gt;
|Tête de Tsernou&lt;br /&gt;
|{{unité|2732|m}}&lt;br /&gt;
|-&lt;br /&gt;
|20&lt;br /&gt;
|Pointe d&#039;Aufalle&lt;br /&gt;
|{{unité|2725|m}}&lt;br /&gt;
|-&lt;br /&gt;
|21&lt;br /&gt;
|[[Pointe des Martinets]]&lt;br /&gt;
|{{unité|2653|m}}&lt;br /&gt;
|-&lt;br /&gt;
|22&lt;br /&gt;
|Pointe des Encrennes&lt;br /&gt;
|{{unité|2644|m}}&lt;br /&gt;
|-&lt;br /&gt;
|23&lt;br /&gt;
|Tête à Grosjean&lt;br /&gt;
|{{unité|2607|m}}&lt;br /&gt;
|-&lt;br /&gt;
|24&lt;br /&gt;
|Tête de Bellalué&lt;br /&gt;
|{{unité|2604|m}}&lt;br /&gt;
|-&lt;br /&gt;
|25&lt;br /&gt;
|Pointe des Perris Blancs&lt;br /&gt;
|{{unité|2577|m}}&lt;br /&gt;
|-&lt;br /&gt;
|26&lt;br /&gt;
|[[Le Tarent]]&lt;br /&gt;
|{{unité|2548|m}}&lt;br /&gt;
|-&lt;br /&gt;
|27&lt;br /&gt;
|[[La Pare]]&lt;br /&gt;
|{{unité|2540|m}}&lt;br /&gt;
|-&lt;br /&gt;
|28&lt;br /&gt;
|Pointe de Pré-Fleuri&lt;br /&gt;
|{{unité|2482|m}}&lt;br /&gt;
|-&lt;br /&gt;
|29&lt;br /&gt;
|[[Haute Pointe]] ([[arête de l&#039;Argentine]])&lt;br /&gt;
|{{unité|2422|m}}&lt;br /&gt;
|-&lt;br /&gt;
|30&lt;br /&gt;
|[[Tour d&#039;Aï]]&lt;br /&gt;
|{{unité|2331|m}}&lt;br /&gt;
|}&lt;br /&gt;
N.B. La liste des sommets vaudois n&#039;est pas complète et est susceptible d&#039;être modifiée.&lt;br /&gt;
&lt;br /&gt;
{{#invoke:WikidataTable|render&lt;br /&gt;
| title = Sommets vaudois&lt;br /&gt;
| sparql = SELECT DISTINCT ?item ?itemLabel ?elevation WHERE {&lt;br /&gt;
  VALUES ?mountain_summit {&lt;br /&gt;
    wd:Q8502&lt;br /&gt;
    wd:Q207326&lt;br /&gt;
  }&lt;br /&gt;
  VALUES ?vaud {&lt;br /&gt;
    wd:Q12771&lt;br /&gt;
  }&lt;br /&gt;
  ?item wdt:P31 ?mountain_summit;&lt;br /&gt;
        wdt:P131 ?vaud;&lt;br /&gt;
        wdt:P2044 ?elevation.&lt;br /&gt;
  SERVICE wikibase:label { bd:serviceParam wikibase:language &amp;quot;fr&amp;quot;. }&lt;br /&gt;
}&lt;br /&gt;
ORDER BY DESC(?elevation)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
{{Références}}&lt;br /&gt;
&lt;br /&gt;
== Voir aussi ==&lt;br /&gt;
&lt;br /&gt;
=== Articles connexes ===&lt;br /&gt;
&lt;br /&gt;
* [[Préalpes vaudoises]]&lt;br /&gt;
* [[Liste des stations suisses de sports d&#039;hiver#Alpes|Liste des stations de sports d&#039;hiver des Alpes et Préalpes vaudoises]]&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=Alpes_vaudoises&amp;diff=18351</id>
		<title>Alpes vaudoises</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=Alpes_vaudoises&amp;diff=18351"/>
		<updated>2026-05-28T14:01:03Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : /* Principaux sommets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:Col_des_Pauvres.jpg|vignette|Le col des Pauvres dans les Alpes vaudoises.]]&lt;br /&gt;
Les &#039;&#039;&#039;Alpes vaudoises&#039;&#039;&#039; (en allemand : &#039;&#039;{{lang|de|Waadtländer Alpen}}&#039;&#039;) sont un ensemble [[Montagne|montagneux]] des [[Alpes suisses]] situé dans les cantons de [[Canton de Vaud|Vaud]], du [[Canton du Valais|Valais]] et de [[Canton de Berne|Berne]] dans l&#039;ouest du pays. Leur point culminant est le sommet des [[Les Diablerets (sommet)|Diablerets]] à {{unité|3216|mètres}} d&#039;altitude.&lt;br /&gt;
&lt;br /&gt;
Elles sont parfois également appelées Alpes calcaires bernoises occidentales et considérées comme une extension des [[Alpes bernoises]]. Selon la [[Subdivision orographique internationale unifiée du système alpin|SOIUSA]], elles constituent donc la sous-section occidentale 12.III des Alpes bernoises au sens large. Dans les guides alpins du [[Club alpin suisse]], elles sont regroupées avec les Préalpes vaudoises&amp;lt;ref&amp;gt;&#039;&#039;Guide des Alpes et Préalpes vaudoises&#039;&#039;, Guide du Club alpin suisse&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Principaux sommets ==&lt;br /&gt;
Les principaux sommets des Alpes vaudoises sont :&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! width=&amp;quot;200&amp;quot; |Nom&lt;br /&gt;
! width=&amp;quot;200&amp;quot; |[[Altitude]]&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|[[Sommet des Diablerets]]&lt;br /&gt;
|{{unité|3216|m}}&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|[[Oldehore|Oldehore (Becca d&#039;Audon)]]&lt;br /&gt;
|{{unité|3123|m}}&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|[[Grand Muveran]]&lt;br /&gt;
|{{unité|3051|m}}&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|[[Tête Ronde (Alpes bernoises)|Tête Ronde]]&lt;br /&gt;
|{{unité|3036|m}}&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|[[Sex Rouge (Les Diablerets)|Sex Rouge]]&lt;br /&gt;
|{{unité|2971|m}}&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|[[Dents de Morcles|Grand Dent de Morcles]]&lt;br /&gt;
|{{unité|2968|m}}&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|[[Dents de Morcles|Petite Dent de Morcles]]&lt;br /&gt;
|{{unité|2929|m}}&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|[[Dent Favre]]&lt;br /&gt;
|{{unité|2916|m}}&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|[[Tête à Pierre Grept]]&lt;br /&gt;
|{{unité|2904|m}}&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|Tête Noire&lt;br /&gt;
|{{unité|2871|m}}&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|Tête aux Veillon&lt;br /&gt;
|{{unité|2846|m}}&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|Pointe de Paneirosse&lt;br /&gt;
|{{unité|2840|m}}&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|[[Petit Muveran]]&lt;br /&gt;
|{{unité|2810|m}}&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|Le Pacheu&lt;br /&gt;
|{{unité|2798|m}}&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|[[Culan (sommet)|Culan]]&lt;br /&gt;
|{{unité|2789|m}}&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|Tête d&#039;Enfer&lt;br /&gt;
|{{unité|2761|m}}&lt;br /&gt;
|-&lt;br /&gt;
|17&lt;br /&gt;
|Roc Champion&lt;br /&gt;
|{{unité|2747|m}}&lt;br /&gt;
|-&lt;br /&gt;
|18&lt;br /&gt;
|Pierre qu&#039;Abotse&lt;br /&gt;
|{{unité|2735|m}}&lt;br /&gt;
|-&lt;br /&gt;
|19&lt;br /&gt;
|Tête de Tsernou&lt;br /&gt;
|{{unité|2732|m}}&lt;br /&gt;
|-&lt;br /&gt;
|20&lt;br /&gt;
|Pointe d&#039;Aufalle&lt;br /&gt;
|{{unité|2725|m}}&lt;br /&gt;
|-&lt;br /&gt;
|21&lt;br /&gt;
|[[Pointe des Martinets]]&lt;br /&gt;
|{{unité|2653|m}}&lt;br /&gt;
|-&lt;br /&gt;
|22&lt;br /&gt;
|Pointe des Encrennes&lt;br /&gt;
|{{unité|2644|m}}&lt;br /&gt;
|-&lt;br /&gt;
|23&lt;br /&gt;
|Tête à Grosjean&lt;br /&gt;
|{{unité|2607|m}}&lt;br /&gt;
|-&lt;br /&gt;
|24&lt;br /&gt;
|Tête de Bellalué&lt;br /&gt;
|{{unité|2604|m}}&lt;br /&gt;
|-&lt;br /&gt;
|25&lt;br /&gt;
|Pointe des Perris Blancs&lt;br /&gt;
|{{unité|2577|m}}&lt;br /&gt;
|-&lt;br /&gt;
|26&lt;br /&gt;
|[[Le Tarent]]&lt;br /&gt;
|{{unité|2548|m}}&lt;br /&gt;
|-&lt;br /&gt;
|27&lt;br /&gt;
|[[La Pare]]&lt;br /&gt;
|{{unité|2540|m}}&lt;br /&gt;
|-&lt;br /&gt;
|28&lt;br /&gt;
|Pointe de Pré-Fleuri&lt;br /&gt;
|{{unité|2482|m}}&lt;br /&gt;
|-&lt;br /&gt;
|29&lt;br /&gt;
|[[Haute Pointe]] ([[arête de l&#039;Argentine]])&lt;br /&gt;
|{{unité|2422|m}}&lt;br /&gt;
|-&lt;br /&gt;
|30&lt;br /&gt;
|[[Tour d&#039;Aï]]&lt;br /&gt;
|{{unité|2331|m}}&lt;br /&gt;
|}&lt;br /&gt;
N.B. La liste des sommets vaudois n&#039;est pas complète et est susceptible d&#039;être modifiée.&lt;br /&gt;
&lt;br /&gt;
{{#invoke:WikidataTable|render&lt;br /&gt;
| title = Sommets vaudois&lt;br /&gt;
| sparql = SELECT DISTINCT ?item ?itemLabel ?elevation WHERE {&lt;br /&gt;
  VALUES ?mountain_summit {&lt;br /&gt;
    wd:Q8502   # mountain&lt;br /&gt;
    wd:Q207326 # summit&lt;br /&gt;
  }&lt;br /&gt;
  ?item wdt:P31 ?mountain_summit;   # mountain or summit&lt;br /&gt;
        wdt:P131 wd:Q12771;         # canton de Vaud&lt;br /&gt;
        wdt:P2044 ?elevation.       # altitude&lt;br /&gt;
  SERVICE wikibase:label { bd:serviceParam wikibase:language &amp;quot;fr&amp;quot;. }&lt;br /&gt;
}&lt;br /&gt;
ORDER BY DESC(?elevation)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
{{Références}}&lt;br /&gt;
&lt;br /&gt;
== Voir aussi ==&lt;br /&gt;
&lt;br /&gt;
=== Articles connexes ===&lt;br /&gt;
&lt;br /&gt;
* [[Préalpes vaudoises]]&lt;br /&gt;
* [[Liste des stations suisses de sports d&#039;hiver#Alpes|Liste des stations de sports d&#039;hiver des Alpes et Préalpes vaudoises]]&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=Alpes_vaudoises&amp;diff=18350</id>
		<title>Alpes vaudoises</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=Alpes_vaudoises&amp;diff=18350"/>
		<updated>2026-05-28T14:00:30Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : /* Principaux sommets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:Col_des_Pauvres.jpg|vignette|Le col des Pauvres dans les Alpes vaudoises.]]&lt;br /&gt;
Les &#039;&#039;&#039;Alpes vaudoises&#039;&#039;&#039; (en allemand : &#039;&#039;{{lang|de|Waadtländer Alpen}}&#039;&#039;) sont un ensemble [[Montagne|montagneux]] des [[Alpes suisses]] situé dans les cantons de [[Canton de Vaud|Vaud]], du [[Canton du Valais|Valais]] et de [[Canton de Berne|Berne]] dans l&#039;ouest du pays. Leur point culminant est le sommet des [[Les Diablerets (sommet)|Diablerets]] à {{unité|3216|mètres}} d&#039;altitude.&lt;br /&gt;
&lt;br /&gt;
Elles sont parfois également appelées Alpes calcaires bernoises occidentales et considérées comme une extension des [[Alpes bernoises]]. Selon la [[Subdivision orographique internationale unifiée du système alpin|SOIUSA]], elles constituent donc la sous-section occidentale 12.III des Alpes bernoises au sens large. Dans les guides alpins du [[Club alpin suisse]], elles sont regroupées avec les Préalpes vaudoises&amp;lt;ref&amp;gt;&#039;&#039;Guide des Alpes et Préalpes vaudoises&#039;&#039;, Guide du Club alpin suisse&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Principaux sommets ==&lt;br /&gt;
Les principaux sommets des Alpes vaudoises sont :&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! width=&amp;quot;200&amp;quot; |Nom&lt;br /&gt;
! width=&amp;quot;200&amp;quot; |[[Altitude]]&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|[[Sommet des Diablerets]]&lt;br /&gt;
|{{unité|3216|m}}&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|[[Oldehore|Oldehore (Becca d&#039;Audon)]]&lt;br /&gt;
|{{unité|3123|m}}&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|[[Grand Muveran]]&lt;br /&gt;
|{{unité|3051|m}}&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|[[Tête Ronde (Alpes bernoises)|Tête Ronde]]&lt;br /&gt;
|{{unité|3036|m}}&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|[[Sex Rouge (Les Diablerets)|Sex Rouge]]&lt;br /&gt;
|{{unité|2971|m}}&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|[[Dents de Morcles|Grand Dent de Morcles]]&lt;br /&gt;
|{{unité|2968|m}}&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|[[Dents de Morcles|Petite Dent de Morcles]]&lt;br /&gt;
|{{unité|2929|m}}&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|[[Dent Favre]]&lt;br /&gt;
|{{unité|2916|m}}&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|[[Tête à Pierre Grept]]&lt;br /&gt;
|{{unité|2904|m}}&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|Tête Noire&lt;br /&gt;
|{{unité|2871|m}}&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|Tête aux Veillon&lt;br /&gt;
|{{unité|2846|m}}&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|Pointe de Paneirosse&lt;br /&gt;
|{{unité|2840|m}}&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|[[Petit Muveran]]&lt;br /&gt;
|{{unité|2810|m}}&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|Le Pacheu&lt;br /&gt;
|{{unité|2798|m}}&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|[[Culan (sommet)|Culan]]&lt;br /&gt;
|{{unité|2789|m}}&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|Tête d&#039;Enfer&lt;br /&gt;
|{{unité|2761|m}}&lt;br /&gt;
|-&lt;br /&gt;
|17&lt;br /&gt;
|Roc Champion&lt;br /&gt;
|{{unité|2747|m}}&lt;br /&gt;
|-&lt;br /&gt;
|18&lt;br /&gt;
|Pierre qu&#039;Abotse&lt;br /&gt;
|{{unité|2735|m}}&lt;br /&gt;
|-&lt;br /&gt;
|19&lt;br /&gt;
|Tête de Tsernou&lt;br /&gt;
|{{unité|2732|m}}&lt;br /&gt;
|-&lt;br /&gt;
|20&lt;br /&gt;
|Pointe d&#039;Aufalle&lt;br /&gt;
|{{unité|2725|m}}&lt;br /&gt;
|-&lt;br /&gt;
|21&lt;br /&gt;
|[[Pointe des Martinets]]&lt;br /&gt;
|{{unité|2653|m}}&lt;br /&gt;
|-&lt;br /&gt;
|22&lt;br /&gt;
|Pointe des Encrennes&lt;br /&gt;
|{{unité|2644|m}}&lt;br /&gt;
|-&lt;br /&gt;
|23&lt;br /&gt;
|Tête à Grosjean&lt;br /&gt;
|{{unité|2607|m}}&lt;br /&gt;
|-&lt;br /&gt;
|24&lt;br /&gt;
|Tête de Bellalué&lt;br /&gt;
|{{unité|2604|m}}&lt;br /&gt;
|-&lt;br /&gt;
|25&lt;br /&gt;
|Pointe des Perris Blancs&lt;br /&gt;
|{{unité|2577|m}}&lt;br /&gt;
|-&lt;br /&gt;
|26&lt;br /&gt;
|[[Le Tarent]]&lt;br /&gt;
|{{unité|2548|m}}&lt;br /&gt;
|-&lt;br /&gt;
|27&lt;br /&gt;
|[[La Pare]]&lt;br /&gt;
|{{unité|2540|m}}&lt;br /&gt;
|-&lt;br /&gt;
|28&lt;br /&gt;
|Pointe de Pré-Fleuri&lt;br /&gt;
|{{unité|2482|m}}&lt;br /&gt;
|-&lt;br /&gt;
|29&lt;br /&gt;
|[[Haute Pointe]] ([[arête de l&#039;Argentine]])&lt;br /&gt;
|{{unité|2422|m}}&lt;br /&gt;
|-&lt;br /&gt;
|30&lt;br /&gt;
|[[Tour d&#039;Aï]]&lt;br /&gt;
|{{unité|2331|m}}&lt;br /&gt;
|}&lt;br /&gt;
N.B. La liste des sommets vaudois n&#039;est pas complète et est susceptible d&#039;être modifiée.&lt;br /&gt;
&lt;br /&gt;
{{#invoke:WikidataTable|render&lt;br /&gt;
| title = Sommets vaudois&lt;br /&gt;
| sparql = SELECT DISTINCT ?item ?itemLabel ?elevation WHERE {&lt;br /&gt;
  VALUES ?mountain_summit {&lt;br /&gt;
    wd:Q8502   # mountain&lt;br /&gt;
    wd:Q207326 # summit&lt;br /&gt;
  }&lt;br /&gt;
  ?item wdt:P31 ?mountain_summit;   # mountain or summit&lt;br /&gt;
        wdt:P131 wd:Q12771;   # canton de Vaud&lt;br /&gt;
        wdt:P2044 ?elevation. # altitude&lt;br /&gt;
  SERVICE wikibase:label { bd:serviceParam wikibase:language &amp;quot;fr&amp;quot;. }&lt;br /&gt;
}&lt;br /&gt;
ORDER BY DESC(?elevation)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
{{Références}}&lt;br /&gt;
&lt;br /&gt;
== Voir aussi ==&lt;br /&gt;
&lt;br /&gt;
=== Articles connexes ===&lt;br /&gt;
&lt;br /&gt;
* [[Préalpes vaudoises]]&lt;br /&gt;
* [[Liste des stations suisses de sports d&#039;hiver#Alpes|Liste des stations de sports d&#039;hiver des Alpes et Préalpes vaudoises]]&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=Alpes_vaudoises&amp;diff=18349</id>
		<title>Alpes vaudoises</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=Alpes_vaudoises&amp;diff=18349"/>
		<updated>2026-05-28T13:59:52Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : /* Principaux sommets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:Col_des_Pauvres.jpg|vignette|Le col des Pauvres dans les Alpes vaudoises.]]&lt;br /&gt;
Les &#039;&#039;&#039;Alpes vaudoises&#039;&#039;&#039; (en allemand : &#039;&#039;{{lang|de|Waadtländer Alpen}}&#039;&#039;) sont un ensemble [[Montagne|montagneux]] des [[Alpes suisses]] situé dans les cantons de [[Canton de Vaud|Vaud]], du [[Canton du Valais|Valais]] et de [[Canton de Berne|Berne]] dans l&#039;ouest du pays. Leur point culminant est le sommet des [[Les Diablerets (sommet)|Diablerets]] à {{unité|3216|mètres}} d&#039;altitude.&lt;br /&gt;
&lt;br /&gt;
Elles sont parfois également appelées Alpes calcaires bernoises occidentales et considérées comme une extension des [[Alpes bernoises]]. Selon la [[Subdivision orographique internationale unifiée du système alpin|SOIUSA]], elles constituent donc la sous-section occidentale 12.III des Alpes bernoises au sens large. Dans les guides alpins du [[Club alpin suisse]], elles sont regroupées avec les Préalpes vaudoises&amp;lt;ref&amp;gt;&#039;&#039;Guide des Alpes et Préalpes vaudoises&#039;&#039;, Guide du Club alpin suisse&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Principaux sommets ==&lt;br /&gt;
Les principaux sommets des Alpes vaudoises sont :&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! width=&amp;quot;200&amp;quot; |Nom&lt;br /&gt;
! width=&amp;quot;200&amp;quot; |[[Altitude]]&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|[[Sommet des Diablerets]]&lt;br /&gt;
|{{unité|3216|m}}&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|[[Oldehore|Oldehore (Becca d&#039;Audon)]]&lt;br /&gt;
|{{unité|3123|m}}&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|[[Grand Muveran]]&lt;br /&gt;
|{{unité|3051|m}}&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|[[Tête Ronde (Alpes bernoises)|Tête Ronde]]&lt;br /&gt;
|{{unité|3036|m}}&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|[[Sex Rouge (Les Diablerets)|Sex Rouge]]&lt;br /&gt;
|{{unité|2971|m}}&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|[[Dents de Morcles|Grand Dent de Morcles]]&lt;br /&gt;
|{{unité|2968|m}}&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|[[Dents de Morcles|Petite Dent de Morcles]]&lt;br /&gt;
|{{unité|2929|m}}&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
|[[Dent Favre]]&lt;br /&gt;
|{{unité|2916|m}}&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
|[[Tête à Pierre Grept]]&lt;br /&gt;
|{{unité|2904|m}}&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|Tête Noire&lt;br /&gt;
|{{unité|2871|m}}&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|Tête aux Veillon&lt;br /&gt;
|{{unité|2846|m}}&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|Pointe de Paneirosse&lt;br /&gt;
|{{unité|2840|m}}&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|[[Petit Muveran]]&lt;br /&gt;
|{{unité|2810|m}}&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|Le Pacheu&lt;br /&gt;
|{{unité|2798|m}}&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|[[Culan (sommet)|Culan]]&lt;br /&gt;
|{{unité|2789|m}}&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|Tête d&#039;Enfer&lt;br /&gt;
|{{unité|2761|m}}&lt;br /&gt;
|-&lt;br /&gt;
|17&lt;br /&gt;
|Roc Champion&lt;br /&gt;
|{{unité|2747|m}}&lt;br /&gt;
|-&lt;br /&gt;
|18&lt;br /&gt;
|Pierre qu&#039;Abotse&lt;br /&gt;
|{{unité|2735|m}}&lt;br /&gt;
|-&lt;br /&gt;
|19&lt;br /&gt;
|Tête de Tsernou&lt;br /&gt;
|{{unité|2732|m}}&lt;br /&gt;
|-&lt;br /&gt;
|20&lt;br /&gt;
|Pointe d&#039;Aufalle&lt;br /&gt;
|{{unité|2725|m}}&lt;br /&gt;
|-&lt;br /&gt;
|21&lt;br /&gt;
|[[Pointe des Martinets]]&lt;br /&gt;
|{{unité|2653|m}}&lt;br /&gt;
|-&lt;br /&gt;
|22&lt;br /&gt;
|Pointe des Encrennes&lt;br /&gt;
|{{unité|2644|m}}&lt;br /&gt;
|-&lt;br /&gt;
|23&lt;br /&gt;
|Tête à Grosjean&lt;br /&gt;
|{{unité|2607|m}}&lt;br /&gt;
|-&lt;br /&gt;
|24&lt;br /&gt;
|Tête de Bellalué&lt;br /&gt;
|{{unité|2604|m}}&lt;br /&gt;
|-&lt;br /&gt;
|25&lt;br /&gt;
|Pointe des Perris Blancs&lt;br /&gt;
|{{unité|2577|m}}&lt;br /&gt;
|-&lt;br /&gt;
|26&lt;br /&gt;
|[[Le Tarent]]&lt;br /&gt;
|{{unité|2548|m}}&lt;br /&gt;
|-&lt;br /&gt;
|27&lt;br /&gt;
|[[La Pare]]&lt;br /&gt;
|{{unité|2540|m}}&lt;br /&gt;
|-&lt;br /&gt;
|28&lt;br /&gt;
|Pointe de Pré-Fleuri&lt;br /&gt;
|{{unité|2482|m}}&lt;br /&gt;
|-&lt;br /&gt;
|29&lt;br /&gt;
|[[Haute Pointe]] ([[arête de l&#039;Argentine]])&lt;br /&gt;
|{{unité|2422|m}}&lt;br /&gt;
|-&lt;br /&gt;
|30&lt;br /&gt;
|[[Tour d&#039;Aï]]&lt;br /&gt;
|{{unité|2331|m}}&lt;br /&gt;
|}&lt;br /&gt;
N.B. La liste des sommets vaudois n&#039;est pas complète et est susceptible d&#039;être modifiée.&lt;br /&gt;
&lt;br /&gt;
{{#invoke:WikidataTable|render&lt;br /&gt;
| title = Sommets vaudois&lt;br /&gt;
| sparql = SELECT DISTINCT ?item ?itemLabel ?elevation WHERE {&lt;br /&gt;
  VALUES ?mountain_summit {&lt;br /&gt;
    wd:Q8502   # mountain&lt;br /&gt;
    wd:Q207326 # summit&lt;br /&gt;
  }&lt;br /&gt;
  ?item wdt:P31 wd:Q207326;   # mountain or summit&lt;br /&gt;
        wdt:P131 wd:Q12771;   # canton de Vaud&lt;br /&gt;
        wdt:P2044 ?elevation. # altitude&lt;br /&gt;
  SERVICE wikibase:label { bd:serviceParam wikibase:language &amp;quot;fr&amp;quot;. }&lt;br /&gt;
}&lt;br /&gt;
ORDER BY DESC(?elevation)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
{{Références}}&lt;br /&gt;
&lt;br /&gt;
== Voir aussi ==&lt;br /&gt;
&lt;br /&gt;
=== Articles connexes ===&lt;br /&gt;
&lt;br /&gt;
* [[Préalpes vaudoises]]&lt;br /&gt;
* [[Liste des stations suisses de sports d&#039;hiver#Alpes|Liste des stations de sports d&#039;hiver des Alpes et Préalpes vaudoises]]&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=Module:Databox&amp;diff=18165</id>
		<title>Module:Databox</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=Module:Databox&amp;diff=18165"/>
		<updated>2026-04-12T21:24:09Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : Page créée avec « local property_blacklist = {     &amp;#039;P360&amp;#039;, --is a list of     &amp;#039;P4224&amp;#039;, --category contains     &amp;#039;P935&amp;#039;, -- Commons gallery     &amp;#039;P1472&amp;#039;, -- Commons Creator page     &amp;#039;P1612&amp;#039;, -- Commons Institution page     &amp;#039;P373&amp;#039;, -- Commons category     &amp;#039;P3722&amp;#039;, -- Commons maps category     &amp;#039;P1151&amp;#039;, -- topic&amp;#039;s main Wikimedia portal     &amp;#039;P1424&amp;#039;, -- topic&amp;#039;s main template     &amp;#039;P910&amp;#039;, -- topic&amp;#039;s main category     &amp;#039;P1200&amp;#039;, -- bodies of water basin category     &amp;#039;P1792&amp;#039;, -- category of ass... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local property_blacklist = {&lt;br /&gt;
    &#039;P360&#039;, --is a list of&lt;br /&gt;
    &#039;P4224&#039;, --category contains&lt;br /&gt;
    &#039;P935&#039;, -- Commons gallery&lt;br /&gt;
    &#039;P1472&#039;, -- Commons Creator page&lt;br /&gt;
    &#039;P1612&#039;, -- Commons Institution page&lt;br /&gt;
    &#039;P373&#039;, -- Commons category&lt;br /&gt;
    &#039;P3722&#039;, -- Commons maps category&lt;br /&gt;
    &#039;P1151&#039;, -- topic&#039;s main Wikimedia portal&lt;br /&gt;
    &#039;P1424&#039;, -- topic&#039;s main template&lt;br /&gt;
    &#039;P910&#039;, -- topic&#039;s main category&lt;br /&gt;
    &#039;P1200&#039;, -- bodies of water basin category&lt;br /&gt;
    &#039;P1792&#039;, -- category of associated people&lt;br /&gt;
    &#039;P1464&#039;, -- category for people born here&lt;br /&gt;
    &#039;P1465&#039;, -- category for people who died here&lt;br /&gt;
    &#039;P1791&#039;, -- category of people buried here&lt;br /&gt;
    &#039;P1740&#039;, -- category for films shot at this location&lt;br /&gt;
    &#039;P2033&#039;, -- Category for pictures taken with camera&lt;br /&gt;
    &#039;P2517&#039;, -- category for recipients of this award&lt;br /&gt;
    &#039;P4195&#039;, -- category for employees of the organization&lt;br /&gt;
    &#039;P1754&#039;, -- category related to list&lt;br /&gt;
    &#039;P301&#039;, -- category&#039;s main topic&lt;br /&gt;
    &#039;P971&#039;, -- category combines topics&lt;br /&gt;
    &#039;P3876&#039;, -- category for alumni of educational institution&lt;br /&gt;
    &#039;P1753&#039;, -- list related to category&lt;br /&gt;
    &#039;P3921&#039;, -- Wikidata SPARQL query equivalent&lt;br /&gt;
    &#039;P1204&#039;, -- Wikimedia portal&#039;s main topic&lt;br /&gt;
    &#039;P1423&#039;, -- template&#039;s main topic&lt;br /&gt;
    &#039;P1709&#039;, -- equivalent class&lt;br /&gt;
    &#039;P3950&#039;, -- narrower external class&lt;br /&gt;
    &#039;P2888&#039;, -- exact match&lt;br /&gt;
    &#039;P1382&#039;, -- coincident with&lt;br /&gt;
    &#039;P527&#039;, -- has part&lt;br /&gt;
    &#039;P2670&#039;, -- has parts of the class&lt;br /&gt;
    &#039;P3113&#039;, -- does not have part&lt;br /&gt;
    &#039;P2737&#039;, -- union of&lt;br /&gt;
    &#039;P2738&#039;, -- disjoint union of&lt;br /&gt;
    &#039;P2445&#039;, -- metasubclass of&lt;br /&gt;
    &#039;P1963&#039;, -- properties for this type&lt;br /&gt;
    &#039;P3176&#039;, -- uses property&lt;br /&gt;
    &#039;P1889&#039;, -- different from&lt;br /&gt;
    &#039;P460&#039;, -- said to be the same as&lt;br /&gt;
    &#039;P2959&#039;, -- permanent duplicated item&lt;br /&gt;
    &#039;P2860&#039;, -- cites&lt;br /&gt;
    &#039;P5125&#039;, -- wikimedia outline&lt;br /&gt;
    &#039;P5008&#039;, -- on focus list of Wikimedia project&lt;br /&gt;
    &#039;P2559&#039;, -- Wikidata usage instructions&lt;br /&gt;
    &#039;P1343&#039;, -- described by source&lt;br /&gt;
    &#039;P972&#039;, --  catalogu&lt;br /&gt;
    &#039;P1282&#039;, -- OSM tag or key&lt;br /&gt;
    &#039;P4839&#039;, -- Wolfram Language entity code&lt;br /&gt;
    &#039;P6104&#039;, -- Maintained by Wikiproject&lt;br /&gt;
    &#039;P5996&#039;, -- Category for films in this language&lt;br /&gt;
    &#039;P2357&#039;, -- Code Classification of Instructional Program&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function valuesToKeys(array)&lt;br /&gt;
	local result = {}&lt;br /&gt;
	for _, v in pairs(array) do&lt;br /&gt;
		result[v] = true&lt;br /&gt;
	end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.formatBlackList(frame)&lt;br /&gt;
	local template = frame.args[1]&lt;br /&gt;
	local res = &amp;quot;&amp;quot;&lt;br /&gt;
	for i, prop in ipairs(property_blacklist) do&lt;br /&gt;
		res = res .. &amp;quot;* &amp;quot; .. frame:expandTemplate{title=template,args = { prop  }} .. &amp;quot;\n&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	return res&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getLegend(image_statement, lang)&lt;br /&gt;
&lt;br /&gt;
	if image_statement.qualifiers and image_statement.qualifiers[&amp;quot;P2096&amp;quot;] then&lt;br /&gt;
&lt;br /&gt;
		for k, v in pairs (image_statement.qualifiers[&amp;quot;P2096&amp;quot;]) do&lt;br /&gt;
			if v.datavalue.value.language == lang then&lt;br /&gt;
				return mw.wikibase.formatValue(v)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.databox(frame)&lt;br /&gt;
    local args = frame:getParent().args&lt;br /&gt;
    local itemId = nil&lt;br /&gt;
    if args.item then&lt;br /&gt;
        itemId = args.item&lt;br /&gt;
    end&lt;br /&gt;
    local lang = mw.language.getContentLanguage()&lt;br /&gt;
    local item = mw.wikibase.getEntity(itemId)&lt;br /&gt;
&lt;br /&gt;
    if item == nil then&lt;br /&gt;
        mw.addWarning(&amp;quot;Wikidata item not found&amp;quot;)&lt;br /&gt;
        return &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local classes = mw.getCurrentFrame():expandTemplate{ title = &#039;Classes début infobox&#039;, args = { version = &#039;3&#039; } }&lt;br /&gt;
    classes = classes .. &#039; large&#039;&lt;br /&gt;
&lt;br /&gt;
    local databoxRoot = mw.html.create(&#039;div&#039;)&lt;br /&gt;
        :addClass(classes)&lt;br /&gt;
        :css({&lt;br /&gt;
            float = &#039;right&#039;,&lt;br /&gt;
            border = &#039;1px solid var(--border-color-base, #a2a9b1)&#039;,&lt;br /&gt;
            [&#039;max-width&#039;] = &#039;300px&#039;,&lt;br /&gt;
            padding = &#039;0 0.4em&#039;,&lt;br /&gt;
            margin = &#039;0 0 0.4em 0.4em&#039;,&lt;br /&gt;
        })&lt;br /&gt;
&lt;br /&gt;
	local label = item:getLabel()&lt;br /&gt;
    --Title&lt;br /&gt;
    databoxRoot:tag(&#039;div&#039;)&lt;br /&gt;
        :css({&lt;br /&gt;
            [&#039;text-align&#039;] = &#039;center&#039;,&lt;br /&gt;
            [&#039;background-color&#039;] = &#039;var(--couleur-fond-boite-grise, #f9f9f9)&#039;,&lt;br /&gt;
			color = &#039;inherit&#039;,&lt;br /&gt;
            padding = &#039;0.5em 0&#039;,&lt;br /&gt;
            margin = &#039;0.5em 0&#039;,&lt;br /&gt;
            [&#039;font-size&#039;] = &#039;120%&#039;,&lt;br /&gt;
            [&#039;font-weight&#039;] = &#039;bold&#039;,&lt;br /&gt;
        })&lt;br /&gt;
        :wikitext(&lt;br /&gt;
        	  (label and lang:ucfirst(label))&lt;br /&gt;
        	  or mw.title.getCurrentTitle().text&lt;br /&gt;
        )&lt;br /&gt;
&lt;br /&gt;
     --Image&lt;br /&gt;
    local images = item:getBestStatements(&#039;P18&#039;)&lt;br /&gt;
&lt;br /&gt;
    if #images == 1 then&lt;br /&gt;
&lt;br /&gt;
    	local caption = getLegend(images[1], lang:getCode())&lt;br /&gt;
    	local captionobj&lt;br /&gt;
&lt;br /&gt;
    	local image_wikitext = &#039;[[File:&#039; .. images[1].mainsnak.datavalue.value .. &#039;|frameless|300px]]&#039;&lt;br /&gt;
&lt;br /&gt;
		local imageobj = mw.html.create(&#039;div&#039;)&lt;br /&gt;
			:addClass(&amp;quot;images&amp;quot;)&lt;br /&gt;
			:css(style or {padding =&#039;2px 0&#039;,})&lt;br /&gt;
			:wikitext(image_wikitext)&lt;br /&gt;
			:done()&lt;br /&gt;
&lt;br /&gt;
    	if caption then&lt;br /&gt;
    		captionobj = mw.html.create(&#039;div&#039;)&lt;br /&gt;
    			:addClass(&amp;quot;legend&amp;quot;)&lt;br /&gt;
				:wikitext(caption)&lt;br /&gt;
				:done()&lt;br /&gt;
    	end&lt;br /&gt;
		databoxRoot&lt;br /&gt;
           	:tag(&#039;div&#039;)&lt;br /&gt;
           	:node(imageobj)&lt;br /&gt;
           	:node(captionobj)&lt;br /&gt;
           	:done()&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    --Table&lt;br /&gt;
    local dataTable = databoxRoot&lt;br /&gt;
        :tag(&#039;table&#039;)&lt;br /&gt;
        :css({&lt;br /&gt;
            [&#039;text-align&#039;] = &#039;left&#039;,&lt;br /&gt;
            -- [&#039;font-size&#039;] = &#039;90%&#039;,&lt;br /&gt;
            [&#039;word-break&#039;] = &#039;break-word&#039;,&lt;br /&gt;
            [&#039;width&#039;] = &#039;100%&#039;,&lt;br /&gt;
            [&#039;table-layout&#039;] = &#039;fixed&#039;,&lt;br /&gt;
        })&lt;br /&gt;
&lt;br /&gt;
    dataTable:tag(&#039;caption&#039;)&lt;br /&gt;
             :css({&lt;br /&gt;
             	[&#039;background-color&#039;] = &#039;var(--couleur-fond-boite-grise, #f9f9f9)&#039;,&lt;br /&gt;
				color = &#039;inherit&#039;,&lt;br /&gt;
             	[&#039;font-weight&#039;] = &#039;bold&#039;,&lt;br /&gt;
             	[&#039;margin-top&#039;] = &#039;0.2em&#039;,&lt;br /&gt;
             })&lt;br /&gt;
    		 :wikitext(item:formatStatements(&#039;P31&#039;).value)&lt;br /&gt;
&lt;br /&gt;
    local properties = mw.wikibase.orderProperties(item:getProperties())&lt;br /&gt;
    local property_blacklist_hash = valuesToKeys(property_blacklist)&lt;br /&gt;
    property_blacklist_hash[&#039;P31&#039;] = true --Special property&lt;br /&gt;
&lt;br /&gt;
	local edit_message = mw.message.new(&#039;vector-view-edit&#039;):plain()&lt;br /&gt;
    for _, property in pairs(properties) do&lt;br /&gt;
        local datatype = item.claims[property][1].mainsnak.datatype&lt;br /&gt;
        if datatype ~= &#039;commonsMedia&#039; and datatype ~= &#039;external-id&#039; and datatype ~= &#039;quantity&#039; and datatype ~= &#039;wikibase-property&#039; and datatype ~= &#039;geo-shape&#039; and datatype ~= &#039;tabular-data&#039; and not property_blacklist_hash[property] and #item:getBestStatements(property) &amp;lt;= 5 then&lt;br /&gt;
            local propertyValue = item:formatStatements(property)&lt;br /&gt;
            dataTable:tag(&#039;tr&#039;)&lt;br /&gt;
                :tag(&#039;th&#039;)&lt;br /&gt;
                    :attr(&#039;scope&#039;, &#039;row&#039;)&lt;br /&gt;
                    :wikitext(lang:ucfirst(propertyValue.label)):done()&lt;br /&gt;
                :tag(&#039;td&#039;)&lt;br /&gt;
                    :wikitext(frame:preprocess(propertyValue.value))&lt;br /&gt;
                    :wikitext(&#039;&amp;amp;nbsp;[[File:OOjs UI icon edit-ltr.svg|&#039; .. edit_message .. &#039;|12px|baseline|class=noviewer noprint skin-invert|link=https://www.wikidata.org/wiki/&#039; .. item.id .. &#039;#&#039; .. property .. &#039;]]&#039;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
     --Map&lt;br /&gt;
    local coordinates_statements = item:getBestStatements(&#039;P625&#039;)&lt;br /&gt;
    if #coordinates_statements == 1 and coordinates_statements[1].mainsnak.datavalue and coordinates_statements[1].mainsnak.datavalue.value.globe == &#039;http://www.wikidata.org/entity/Q2&#039; then&lt;br /&gt;
        --We build the call to mapframe&lt;br /&gt;
        local latitude = coordinates_statements[1].mainsnak.datavalue.value.latitude&lt;br /&gt;
        local longitude = coordinates_statements[1].mainsnak.datavalue.value.longitude&lt;br /&gt;
        local geojson = {&lt;br /&gt;
            type = &#039;Feature&#039;,&lt;br /&gt;
            geometry = {&lt;br /&gt;
                type = &#039;Point&#039;,&lt;br /&gt;
                coordinates = { longitude, latitude }&lt;br /&gt;
            },&lt;br /&gt;
            properties = {&lt;br /&gt;
                title = item:getLabel() or mw.title.getCurrentTitle().text,&lt;br /&gt;
                [&#039;marker-symbol&#039;] = &#039;marker&#039;,&lt;br /&gt;
                [&#039;marker-color&#039;] =  &#039;#224422&#039;,&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        databoxRoot:wikitext(frame:extensionTag(&#039;mapframe&#039;, mw.text.jsonEncode(geojson), {&lt;br /&gt;
            height = 300,&lt;br /&gt;
            width = 300,&lt;br /&gt;
            frameless = &#039;frameless&#039;,&lt;br /&gt;
            align = &#039;center&#039;,&lt;br /&gt;
            latitude = latitude,&lt;br /&gt;
            longitude = longitude,&lt;br /&gt;
            zoom = zoom&lt;br /&gt;
        }))&lt;br /&gt;
     end&lt;br /&gt;
&lt;br /&gt;
     return tostring(databoxRoot)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=MediaWiki:Common.js&amp;diff=18164</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=MediaWiki:Common.js&amp;diff=18164"/>
		<updated>2026-04-12T21:11:47Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Tout JavaScript présent ici sera exécuté par tous les utilisateurs à chaque chargement de page. */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally&lt;br /&gt;
 * loaded for all users on every wiki page. If possible create a gadget that is&lt;br /&gt;
 * enabled by default instead of adding it here (since gadgets are fully&lt;br /&gt;
 * optimized ResourceLoader modules with possibility to add dependencies etc.)&lt;br /&gt;
 *&lt;br /&gt;
 * Since Common.js isn&#039;t a gadget, there is no place to declare its&lt;br /&gt;
 * dependencies, so we have to lazy load them with mw.loader.using on demand and&lt;br /&gt;
 * then execute the rest in the callback. In most cases these dependencies will&lt;br /&gt;
 * be loaded (or loading) already and the callback will not be delayed. In case a&lt;br /&gt;
 * dependency hasn&#039;t arrived yet it&#039;ll make sure those are loaded before this.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* global mw, $ */&lt;br /&gt;
/* jshint strict:false, browser:true */&lt;br /&gt;
&lt;br /&gt;
mw.loader.using( [ &#039;mediawiki.util&#039; ] ).done( function () {&lt;br /&gt;
	/* Begin of mw.loader.using callback */&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Map addPortletLink to mw.util&lt;br /&gt;
	 * @deprecated: Use mw.util.addPortletLink instead.&lt;br /&gt;
	 */&lt;br /&gt;
	mw.log.deprecate( window, &#039;addPortletLink&#039;, mw.util.addPortletLink, &#039;Use mw.util.addPortletLink instead&#039; );&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @source www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL&lt;br /&gt;
	 * @rev 6&lt;br /&gt;
	 */&lt;br /&gt;
	var extraCSS = mw.util.getParamValue( &#039;withCSS&#039; ),&lt;br /&gt;
		extraJS = mw.util.getParamValue( &#039;withJS&#039; );&lt;br /&gt;
&lt;br /&gt;
	if ( extraCSS ) {&lt;br /&gt;
		if ( extraCSS.match( /^MediaWiki:[^&amp;amp;&amp;lt;&amp;gt;=%#]*\.css$/ ) ) {&lt;br /&gt;
			mw.loader.load( &#039;/w/index.php?title=&#039; + extraCSS + &#039;&amp;amp;action=raw&amp;amp;ctype=text/css&#039;, &#039;text/css&#039; );&lt;br /&gt;
		} else {&lt;br /&gt;
			mw.notify( &#039;Only pages from the MediaWiki namespace are allowed.&#039;, { title: &#039;Invalid withCSS value&#039; } );&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ( extraJS ) {&lt;br /&gt;
		if ( extraJS.match( /^MediaWiki:[^&amp;amp;&amp;lt;&amp;gt;=%#]*\.js$/ ) ) {&lt;br /&gt;
			mw.loader.load( &#039;/w/index.php?title=&#039; + extraJS + &#039;&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
		} else {&lt;br /&gt;
			mw.notify( &#039;Only pages from the MediaWiki namespace are allowed.&#039;, { title: &#039;Invalid withJS value&#039; } );&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Collapsible tables; reimplemented with mw-collapsible&lt;br /&gt;
	 * Styling is also in place to avoid FOUC&lt;br /&gt;
	 *&lt;br /&gt;
	 * Allows tables to be collapsed, showing only the header. See [[Help:Collapsing]].&lt;br /&gt;
	 * @version 3.0.0 (2018-05-20)&lt;br /&gt;
	 * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-collapsibleTables.js&lt;br /&gt;
	 * @author [[User:R. Koot]]&lt;br /&gt;
	 * @author [[User:Krinkle]]&lt;br /&gt;
	 * @author [[User:TheDJ]]&lt;br /&gt;
	 * @deprecated Since MediaWiki 1.20: Use class=&amp;quot;mw-collapsible&amp;quot; instead which&lt;br /&gt;
	 * is supported in MediaWiki core. Shimmable since MediaWiki 1.32&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {jQuery} $content&lt;br /&gt;
	 */&lt;br /&gt;
	function makeCollapsibleMwCollapsible( $content ) {&lt;br /&gt;
		var $tables = $content&lt;br /&gt;
			.find( &#039;table.collapsible:not(.mw-collapsible)&#039; )&lt;br /&gt;
			.addClass( &#039;mw-collapsible&#039; );&lt;br /&gt;
&lt;br /&gt;
		$.each( $tables, function ( index, table ) {&lt;br /&gt;
			// mw.log.warn( &#039;This page is using the deprecated class collapsible. Please replace it with mw-collapsible.&#039;);&lt;br /&gt;
			if ( $( table ).hasClass( &#039;collapsed&#039; ) ) {&lt;br /&gt;
				$( table ).addClass( &#039;mw-collapsed&#039; );&lt;br /&gt;
				// mw.log.warn( &#039;This page is using the deprecated class collapsed. Please replace it with mw-collapsed.&#039;);&lt;br /&gt;
			}&lt;br /&gt;
		} );&lt;br /&gt;
		if ( $tables.length &amp;gt; 0 ) {&lt;br /&gt;
			mw.loader.using( &#039;jquery.makeCollapsible&#039; ).then( function () {&lt;br /&gt;
				$tables.makeCollapsible();&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	mw.hook( &#039;wikipage.content&#039; ).add( makeCollapsibleMwCollapsible );&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Add support to mw-collapsible for autocollapse, innercollapse and outercollapse&lt;br /&gt;
	 *&lt;br /&gt;
	 * Maintainers: TheDJ&lt;br /&gt;
	 */&lt;br /&gt;
	function mwCollapsibleSetup( $collapsibleContent ) {&lt;br /&gt;
		var $element,&lt;br /&gt;
			$toggle,&lt;br /&gt;
			autoCollapseThreshold = 2;&lt;br /&gt;
		$.each( $collapsibleContent, function ( index, element ) {&lt;br /&gt;
			$element = $( element );&lt;br /&gt;
			if ( $element.hasClass( &#039;collapsible&#039; ) ) {&lt;br /&gt;
				$element.find( &#039;tr:first &amp;gt; th:first&#039; ).prepend( $element.find( &#039;tr:first &amp;gt; * &amp;gt; .mw-collapsible-toggle&#039; ) );&lt;br /&gt;
			}&lt;br /&gt;
			if ( $collapsibleContent.length &amp;gt;= autoCollapseThreshold &amp;amp;&amp;amp; $element.hasClass( &#039;autocollapse&#039; ) ) {&lt;br /&gt;
				$element.data( &#039;mw-collapsible&#039; ).collapse();&lt;br /&gt;
			} else if ( $element.hasClass( &#039;innercollapse&#039; ) ) {&lt;br /&gt;
				if ( $element.parents( &#039;.outercollapse&#039; ).length &amp;gt; 0 ) {&lt;br /&gt;
					$element.data( &#039;mw-collapsible&#039; ).collapse();&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			// because of colored backgrounds, style the link in the text color&lt;br /&gt;
			// to ensure accessible contrast&lt;br /&gt;
			$toggle = $element.find( &#039;.mw-collapsible-toggle&#039; );&lt;br /&gt;
			if ( $toggle.length ) {&lt;br /&gt;
				// Make the toggle inherit text color (Updated for T333357 2023-04-29)&lt;br /&gt;
				if ( $toggle.parent()[ 0 ].style.color ) {&lt;br /&gt;
					$toggle.css( &#039;color&#039;, &#039;inherit&#039; );&lt;br /&gt;
					$toggle.find( &#039;.mw-collapsible-text&#039; ).css( &#039;color&#039;, &#039;inherit&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	mw.hook( &#039;wikipage.collapsibleContent&#039; ).add( mwCollapsibleSetup );&lt;br /&gt;
&lt;br /&gt;
	/* End of mw.loader.using callback */&lt;br /&gt;
&lt;br /&gt;
	/* Wikidata SPARQL tables */&lt;br /&gt;
	mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    document.querySelectorAll( &#039;.wikidata-sparql-table:not([data-loaded])&#039; ).forEach( function ( el ) {&lt;br /&gt;
        el.setAttribute( &#039;data-loaded&#039;, &#039;1&#039; );&lt;br /&gt;
        var sparql = el.getAttribute( &#039;data-sparql&#039; );&lt;br /&gt;
        var title  = el.getAttribute( &#039;data-title&#039; );&lt;br /&gt;
&lt;br /&gt;
        el.textContent = &#039;⏳ Loading…&#039;;&lt;br /&gt;
&lt;br /&gt;
        fetch( &#039;https://query.wikidata.org/sparql?format=json&amp;amp;query=&#039; + encodeURIComponent( sparql ),&lt;br /&gt;
            { headers: { Accept: &#039;application/json&#039; } } )&lt;br /&gt;
        .then( function ( r ) { return r.json(); } )&lt;br /&gt;
        .then( function ( data ) {&lt;br /&gt;
            var vars = data.head.vars;&lt;br /&gt;
            var rows = data.results.bindings;&lt;br /&gt;
            var html = &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
            if ( title ) html += &#039;&amp;lt;h3&amp;gt;&#039; + title + &#039;&amp;lt;/h3&amp;gt;&#039;;&lt;br /&gt;
            html += &#039;&amp;lt;table class=&amp;quot;wikitable sortable&amp;quot;&amp;gt;&amp;lt;thead&amp;gt;&amp;lt;tr&amp;gt;&#039;;&lt;br /&gt;
            vars.forEach( function ( v ) { html += &#039;&amp;lt;th&amp;gt;&#039; + v.replace( /_/g, &#039; &#039; ) + &#039;&amp;lt;/th&amp;gt;&#039;; } );&lt;br /&gt;
            html += &#039;&amp;lt;/tr&amp;gt;&amp;lt;/thead&amp;gt;&amp;lt;tbody&amp;gt;&#039;;&lt;br /&gt;
            rows.forEach( function ( row ) {&lt;br /&gt;
                html += &#039;&amp;lt;tr&amp;gt;&#039;;&lt;br /&gt;
                vars.forEach( function ( v ) {&lt;br /&gt;
                    var val = row[ v ] ? row[ v ].value : &#039;&#039;;&lt;br /&gt;
                    if ( /^https?:\/\/commons\.wikimedia\.org\/wiki\/Special:FilePath\//i.test( val ) ) {&lt;br /&gt;
                        var thumb = val.replace( /^http:\/\//, &#039;https://&#039; );&lt;br /&gt;
                        html += &#039;&amp;lt;td&amp;gt;&amp;lt;img src=&amp;quot;&#039; + thumb + &#039;?width=100&amp;quot; style=&amp;quot;max-height:80px;&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&#039;;&lt;br /&gt;
                    } else {&lt;br /&gt;
                        val = val.replace( /https?:\/\/www\.wikidata\.org\/entity\/(Q\d+)/,&lt;br /&gt;
                            &#039;&amp;lt;a href=&amp;quot;https://www.wikidata.org/wiki/$1&amp;quot;&amp;gt;$1&amp;lt;/a&amp;gt;&#039; );&lt;br /&gt;
                        html += &#039;&amp;lt;td&amp;gt;&#039; + val + &#039;&amp;lt;/td&amp;gt;&#039;;&lt;br /&gt;
                    }&lt;br /&gt;
                } );&lt;br /&gt;
                html += &#039;&amp;lt;/tr&amp;gt;&#039;;&lt;br /&gt;
            } );&lt;br /&gt;
            html += &#039;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&#039;;&lt;br /&gt;
            el.innerHTML = html;&lt;br /&gt;
        } )&lt;br /&gt;
        .catch( function () { el.textContent = &#039;⚠️ Failed to load.&#039;; } );&lt;br /&gt;
    } );&lt;br /&gt;
} );&lt;br /&gt;
} );&lt;br /&gt;
/* DO NOT ADD CODE BELOW THIS LINE */&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=MediaWiki:Common.js&amp;diff=18163</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=MediaWiki:Common.js&amp;diff=18163"/>
		<updated>2026-04-12T21:09:54Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Tout JavaScript présent ici sera exécuté par tous les utilisateurs à chaque chargement de page. */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally&lt;br /&gt;
 * loaded for all users on every wiki page. If possible create a gadget that is&lt;br /&gt;
 * enabled by default instead of adding it here (since gadgets are fully&lt;br /&gt;
 * optimized ResourceLoader modules with possibility to add dependencies etc.)&lt;br /&gt;
 *&lt;br /&gt;
 * Since Common.js isn&#039;t a gadget, there is no place to declare its&lt;br /&gt;
 * dependencies, so we have to lazy load them with mw.loader.using on demand and&lt;br /&gt;
 * then execute the rest in the callback. In most cases these dependencies will&lt;br /&gt;
 * be loaded (or loading) already and the callback will not be delayed. In case a&lt;br /&gt;
 * dependency hasn&#039;t arrived yet it&#039;ll make sure those are loaded before this.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* global mw, $ */&lt;br /&gt;
/* jshint strict:false, browser:true */&lt;br /&gt;
&lt;br /&gt;
mw.loader.using( [ &#039;mediawiki.util&#039; ] ).done( function () {&lt;br /&gt;
	/* Begin of mw.loader.using callback */&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Map addPortletLink to mw.util&lt;br /&gt;
	 * @deprecated: Use mw.util.addPortletLink instead.&lt;br /&gt;
	 */&lt;br /&gt;
	mw.log.deprecate( window, &#039;addPortletLink&#039;, mw.util.addPortletLink, &#039;Use mw.util.addPortletLink instead&#039; );&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @source www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL&lt;br /&gt;
	 * @rev 6&lt;br /&gt;
	 */&lt;br /&gt;
	var extraCSS = mw.util.getParamValue( &#039;withCSS&#039; ),&lt;br /&gt;
		extraJS = mw.util.getParamValue( &#039;withJS&#039; );&lt;br /&gt;
&lt;br /&gt;
	if ( extraCSS ) {&lt;br /&gt;
		if ( extraCSS.match( /^MediaWiki:[^&amp;amp;&amp;lt;&amp;gt;=%#]*\.css$/ ) ) {&lt;br /&gt;
			mw.loader.load( &#039;/w/index.php?title=&#039; + extraCSS + &#039;&amp;amp;action=raw&amp;amp;ctype=text/css&#039;, &#039;text/css&#039; );&lt;br /&gt;
		} else {&lt;br /&gt;
			mw.notify( &#039;Only pages from the MediaWiki namespace are allowed.&#039;, { title: &#039;Invalid withCSS value&#039; } );&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ( extraJS ) {&lt;br /&gt;
		if ( extraJS.match( /^MediaWiki:[^&amp;amp;&amp;lt;&amp;gt;=%#]*\.js$/ ) ) {&lt;br /&gt;
			mw.loader.load( &#039;/w/index.php?title=&#039; + extraJS + &#039;&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
		} else {&lt;br /&gt;
			mw.notify( &#039;Only pages from the MediaWiki namespace are allowed.&#039;, { title: &#039;Invalid withJS value&#039; } );&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Collapsible tables; reimplemented with mw-collapsible&lt;br /&gt;
	 * Styling is also in place to avoid FOUC&lt;br /&gt;
	 *&lt;br /&gt;
	 * Allows tables to be collapsed, showing only the header. See [[Help:Collapsing]].&lt;br /&gt;
	 * @version 3.0.0 (2018-05-20)&lt;br /&gt;
	 * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-collapsibleTables.js&lt;br /&gt;
	 * @author [[User:R. Koot]]&lt;br /&gt;
	 * @author [[User:Krinkle]]&lt;br /&gt;
	 * @author [[User:TheDJ]]&lt;br /&gt;
	 * @deprecated Since MediaWiki 1.20: Use class=&amp;quot;mw-collapsible&amp;quot; instead which&lt;br /&gt;
	 * is supported in MediaWiki core. Shimmable since MediaWiki 1.32&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {jQuery} $content&lt;br /&gt;
	 */&lt;br /&gt;
	function makeCollapsibleMwCollapsible( $content ) {&lt;br /&gt;
		var $tables = $content&lt;br /&gt;
			.find( &#039;table.collapsible:not(.mw-collapsible)&#039; )&lt;br /&gt;
			.addClass( &#039;mw-collapsible&#039; );&lt;br /&gt;
&lt;br /&gt;
		$.each( $tables, function ( index, table ) {&lt;br /&gt;
			// mw.log.warn( &#039;This page is using the deprecated class collapsible. Please replace it with mw-collapsible.&#039;);&lt;br /&gt;
			if ( $( table ).hasClass( &#039;collapsed&#039; ) ) {&lt;br /&gt;
				$( table ).addClass( &#039;mw-collapsed&#039; );&lt;br /&gt;
				// mw.log.warn( &#039;This page is using the deprecated class collapsed. Please replace it with mw-collapsed.&#039;);&lt;br /&gt;
			}&lt;br /&gt;
		} );&lt;br /&gt;
		if ( $tables.length &amp;gt; 0 ) {&lt;br /&gt;
			mw.loader.using( &#039;jquery.makeCollapsible&#039; ).then( function () {&lt;br /&gt;
				$tables.makeCollapsible();&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	mw.hook( &#039;wikipage.content&#039; ).add( makeCollapsibleMwCollapsible );&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Add support to mw-collapsible for autocollapse, innercollapse and outercollapse&lt;br /&gt;
	 *&lt;br /&gt;
	 * Maintainers: TheDJ&lt;br /&gt;
	 */&lt;br /&gt;
	function mwCollapsibleSetup( $collapsibleContent ) {&lt;br /&gt;
		var $element,&lt;br /&gt;
			$toggle,&lt;br /&gt;
			autoCollapseThreshold = 2;&lt;br /&gt;
		$.each( $collapsibleContent, function ( index, element ) {&lt;br /&gt;
			$element = $( element );&lt;br /&gt;
			if ( $element.hasClass( &#039;collapsible&#039; ) ) {&lt;br /&gt;
				$element.find( &#039;tr:first &amp;gt; th:first&#039; ).prepend( $element.find( &#039;tr:first &amp;gt; * &amp;gt; .mw-collapsible-toggle&#039; ) );&lt;br /&gt;
			}&lt;br /&gt;
			if ( $collapsibleContent.length &amp;gt;= autoCollapseThreshold &amp;amp;&amp;amp; $element.hasClass( &#039;autocollapse&#039; ) ) {&lt;br /&gt;
				$element.data( &#039;mw-collapsible&#039; ).collapse();&lt;br /&gt;
			} else if ( $element.hasClass( &#039;innercollapse&#039; ) ) {&lt;br /&gt;
				if ( $element.parents( &#039;.outercollapse&#039; ).length &amp;gt; 0 ) {&lt;br /&gt;
					$element.data( &#039;mw-collapsible&#039; ).collapse();&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			// because of colored backgrounds, style the link in the text color&lt;br /&gt;
			// to ensure accessible contrast&lt;br /&gt;
			$toggle = $element.find( &#039;.mw-collapsible-toggle&#039; );&lt;br /&gt;
			if ( $toggle.length ) {&lt;br /&gt;
				// Make the toggle inherit text color (Updated for T333357 2023-04-29)&lt;br /&gt;
				if ( $toggle.parent()[ 0 ].style.color ) {&lt;br /&gt;
					$toggle.css( &#039;color&#039;, &#039;inherit&#039; );&lt;br /&gt;
					$toggle.find( &#039;.mw-collapsible-text&#039; ).css( &#039;color&#039;, &#039;inherit&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	mw.hook( &#039;wikipage.collapsibleContent&#039; ).add( mwCollapsibleSetup );&lt;br /&gt;
&lt;br /&gt;
	/* End of mw.loader.using callback */&lt;br /&gt;
&lt;br /&gt;
	/* Wikidata SPARQL tables */&lt;br /&gt;
	mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
    document.querySelectorAll( &#039;.wikidata-sparql-table:not([data-loaded])&#039; ).forEach( function ( el ) {&lt;br /&gt;
        el.setAttribute( &#039;data-loaded&#039;, &#039;1&#039; );&lt;br /&gt;
        var sparql = el.getAttribute( &#039;data-sparql&#039; );&lt;br /&gt;
        var title  = el.getAttribute( &#039;data-title&#039; );&lt;br /&gt;
&lt;br /&gt;
        el.textContent = &#039;⏳ Loading…&#039;;&lt;br /&gt;
&lt;br /&gt;
        fetch( &#039;https://query.wikidata.org/sparql?format=json&amp;amp;query=&#039; + encodeURIComponent( sparql ),&lt;br /&gt;
            { headers: { Accept: &#039;application/json&#039; } } )&lt;br /&gt;
        .then( function ( r ) { return r.json(); } )&lt;br /&gt;
        .then( function ( data ) {&lt;br /&gt;
            var vars = data.head.vars;&lt;br /&gt;
            var rows = data.results.bindings;&lt;br /&gt;
            var html = &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
            if ( title ) html += &#039;&amp;lt;h3&amp;gt;&#039; + title + &#039;&amp;lt;/h3&amp;gt;&#039;;&lt;br /&gt;
            html += &#039;&amp;lt;table class=&amp;quot;wikitable sortable&amp;quot;&amp;gt;&amp;lt;thead&amp;gt;&amp;lt;tr&amp;gt;&#039;;&lt;br /&gt;
            vars.forEach( function ( v ) { html += &#039;&amp;lt;th&amp;gt;&#039; + v.replace( /_/g, &#039; &#039; ) + &#039;&amp;lt;/th&amp;gt;&#039;; } );&lt;br /&gt;
            html += &#039;&amp;lt;/tr&amp;gt;&amp;lt;/thead&amp;gt;&amp;lt;tbody&amp;gt;&#039;;&lt;br /&gt;
            rows.forEach( function ( row ) {&lt;br /&gt;
                html += &#039;&amp;lt;tr&amp;gt;&#039;;&lt;br /&gt;
                vars.forEach( function ( v ) {&lt;br /&gt;
                    var val = row[ v ] ? row[ v ].value : &#039;&#039;;&lt;br /&gt;
                    if ( /^https?:\/\/commons\.wikimedia\.org\/wiki\/Special:FilePath\//i.test( val ) ) {&lt;br /&gt;
                        var thumb = val.replace( /^http:\/\//, &#039;https://&#039; );&lt;br /&gt;
                        html += &#039;&amp;lt;td&amp;gt;&amp;lt;img src=&amp;quot;&#039; + thumb + &#039;?width=100&amp;quot; style=&amp;quot;max-height:80px;&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&#039;;&lt;br /&gt;
                    } else {&lt;br /&gt;
                        val = val.replace( /https?:\/\/www\.wikidata\.org\/entity\/(Q\d+)/,&lt;br /&gt;
                            &#039;&amp;lt;a href=&amp;quot;https://www.wikidata.org/wiki/$1&amp;quot;&amp;gt;$1&amp;lt;/a&amp;gt;&#039; );&lt;br /&gt;
                        html += &#039;&amp;lt;td&amp;gt;&#039; + val + &#039;&amp;lt;/td&amp;gt;&#039;;&lt;br /&gt;
                    }&lt;br /&gt;
                } );&lt;br /&gt;
                html += &#039;&amp;lt;/tr&amp;gt;&#039;;&lt;br /&gt;
            } );&lt;br /&gt;
            html += &#039;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&#039;;&lt;br /&gt;
            el.innerHTML = html;&lt;br /&gt;
        } )&lt;br /&gt;
        .catch( function () { el.textContent = &#039;⚠️ Failed to load.&#039;; } );&lt;br /&gt;
    } );&lt;br /&gt;
} );&lt;br /&gt;
/* DO NOT ADD CODE BELOW THIS LINE */&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=MediaWiki:Common.js&amp;diff=18162</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=MediaWiki:Common.js&amp;diff=18162"/>
		<updated>2026-04-12T21:06:47Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Tout JavaScript présent ici sera exécuté par tous les utilisateurs à chaque chargement de page. */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally&lt;br /&gt;
 * loaded for all users on every wiki page. If possible create a gadget that is&lt;br /&gt;
 * enabled by default instead of adding it here (since gadgets are fully&lt;br /&gt;
 * optimized ResourceLoader modules with possibility to add dependencies etc.)&lt;br /&gt;
 *&lt;br /&gt;
 * Since Common.js isn&#039;t a gadget, there is no place to declare its&lt;br /&gt;
 * dependencies, so we have to lazy load them with mw.loader.using on demand and&lt;br /&gt;
 * then execute the rest in the callback. In most cases these dependencies will&lt;br /&gt;
 * be loaded (or loading) already and the callback will not be delayed. In case a&lt;br /&gt;
 * dependency hasn&#039;t arrived yet it&#039;ll make sure those are loaded before this.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* global mw, $ */&lt;br /&gt;
/* jshint strict:false, browser:true */&lt;br /&gt;
&lt;br /&gt;
mw.loader.using( [ &#039;mediawiki.util&#039; ] ).done( function () {&lt;br /&gt;
	/* Begin of mw.loader.using callback */&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Map addPortletLink to mw.util&lt;br /&gt;
	 * @deprecated: Use mw.util.addPortletLink instead.&lt;br /&gt;
	 */&lt;br /&gt;
	mw.log.deprecate( window, &#039;addPortletLink&#039;, mw.util.addPortletLink, &#039;Use mw.util.addPortletLink instead&#039; );&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * @source www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL&lt;br /&gt;
	 * @rev 6&lt;br /&gt;
	 */&lt;br /&gt;
	var extraCSS = mw.util.getParamValue( &#039;withCSS&#039; ),&lt;br /&gt;
		extraJS = mw.util.getParamValue( &#039;withJS&#039; );&lt;br /&gt;
&lt;br /&gt;
	if ( extraCSS ) {&lt;br /&gt;
		if ( extraCSS.match( /^MediaWiki:[^&amp;amp;&amp;lt;&amp;gt;=%#]*\.css$/ ) ) {&lt;br /&gt;
			mw.loader.load( &#039;/w/index.php?title=&#039; + extraCSS + &#039;&amp;amp;action=raw&amp;amp;ctype=text/css&#039;, &#039;text/css&#039; );&lt;br /&gt;
		} else {&lt;br /&gt;
			mw.notify( &#039;Only pages from the MediaWiki namespace are allowed.&#039;, { title: &#039;Invalid withCSS value&#039; } );&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ( extraJS ) {&lt;br /&gt;
		if ( extraJS.match( /^MediaWiki:[^&amp;amp;&amp;lt;&amp;gt;=%#]*\.js$/ ) ) {&lt;br /&gt;
			mw.loader.load( &#039;/w/index.php?title=&#039; + extraJS + &#039;&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; );&lt;br /&gt;
		} else {&lt;br /&gt;
			mw.notify( &#039;Only pages from the MediaWiki namespace are allowed.&#039;, { title: &#039;Invalid withJS value&#039; } );&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Collapsible tables; reimplemented with mw-collapsible&lt;br /&gt;
	 * Styling is also in place to avoid FOUC&lt;br /&gt;
	 *&lt;br /&gt;
	 * Allows tables to be collapsed, showing only the header. See [[Help:Collapsing]].&lt;br /&gt;
	 * @version 3.0.0 (2018-05-20)&lt;br /&gt;
	 * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-collapsibleTables.js&lt;br /&gt;
	 * @author [[User:R. Koot]]&lt;br /&gt;
	 * @author [[User:Krinkle]]&lt;br /&gt;
	 * @author [[User:TheDJ]]&lt;br /&gt;
	 * @deprecated Since MediaWiki 1.20: Use class=&amp;quot;mw-collapsible&amp;quot; instead which&lt;br /&gt;
	 * is supported in MediaWiki core. Shimmable since MediaWiki 1.32&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param {jQuery} $content&lt;br /&gt;
	 */&lt;br /&gt;
	function makeCollapsibleMwCollapsible( $content ) {&lt;br /&gt;
		var $tables = $content&lt;br /&gt;
			.find( &#039;table.collapsible:not(.mw-collapsible)&#039; )&lt;br /&gt;
			.addClass( &#039;mw-collapsible&#039; );&lt;br /&gt;
&lt;br /&gt;
		$.each( $tables, function ( index, table ) {&lt;br /&gt;
			// mw.log.warn( &#039;This page is using the deprecated class collapsible. Please replace it with mw-collapsible.&#039;);&lt;br /&gt;
			if ( $( table ).hasClass( &#039;collapsed&#039; ) ) {&lt;br /&gt;
				$( table ).addClass( &#039;mw-collapsed&#039; );&lt;br /&gt;
				// mw.log.warn( &#039;This page is using the deprecated class collapsed. Please replace it with mw-collapsed.&#039;);&lt;br /&gt;
			}&lt;br /&gt;
		} );&lt;br /&gt;
		if ( $tables.length &amp;gt; 0 ) {&lt;br /&gt;
			mw.loader.using( &#039;jquery.makeCollapsible&#039; ).then( function () {&lt;br /&gt;
				$tables.makeCollapsible();&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	mw.hook( &#039;wikipage.content&#039; ).add( makeCollapsibleMwCollapsible );&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Add support to mw-collapsible for autocollapse, innercollapse and outercollapse&lt;br /&gt;
	 *&lt;br /&gt;
	 * Maintainers: TheDJ&lt;br /&gt;
	 */&lt;br /&gt;
	function mwCollapsibleSetup( $collapsibleContent ) {&lt;br /&gt;
		var $element,&lt;br /&gt;
			$toggle,&lt;br /&gt;
			autoCollapseThreshold = 2;&lt;br /&gt;
		$.each( $collapsibleContent, function ( index, element ) {&lt;br /&gt;
			$element = $( element );&lt;br /&gt;
			if ( $element.hasClass( &#039;collapsible&#039; ) ) {&lt;br /&gt;
				$element.find( &#039;tr:first &amp;gt; th:first&#039; ).prepend( $element.find( &#039;tr:first &amp;gt; * &amp;gt; .mw-collapsible-toggle&#039; ) );&lt;br /&gt;
			}&lt;br /&gt;
			if ( $collapsibleContent.length &amp;gt;= autoCollapseThreshold &amp;amp;&amp;amp; $element.hasClass( &#039;autocollapse&#039; ) ) {&lt;br /&gt;
				$element.data( &#039;mw-collapsible&#039; ).collapse();&lt;br /&gt;
			} else if ( $element.hasClass( &#039;innercollapse&#039; ) ) {&lt;br /&gt;
				if ( $element.parents( &#039;.outercollapse&#039; ).length &amp;gt; 0 ) {&lt;br /&gt;
					$element.data( &#039;mw-collapsible&#039; ).collapse();&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			// because of colored backgrounds, style the link in the text color&lt;br /&gt;
			// to ensure accessible contrast&lt;br /&gt;
			$toggle = $element.find( &#039;.mw-collapsible-toggle&#039; );&lt;br /&gt;
			if ( $toggle.length ) {&lt;br /&gt;
				// Make the toggle inherit text color (Updated for T333357 2023-04-29)&lt;br /&gt;
				if ( $toggle.parent()[ 0 ].style.color ) {&lt;br /&gt;
					$toggle.css( &#039;color&#039;, &#039;inherit&#039; );&lt;br /&gt;
					$toggle.find( &#039;.mw-collapsible-text&#039; ).css( &#039;color&#039;, &#039;inherit&#039; );&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	mw.hook( &#039;wikipage.collapsibleContent&#039; ).add( mwCollapsibleSetup );&lt;br /&gt;
&lt;br /&gt;
	/* End of mw.loader.using callback */&lt;br /&gt;
&lt;br /&gt;
	/* Wikidata SPARQL tables */&lt;br /&gt;
	mw.hook( &#039;wikipage.content&#039; ).add( function () {&lt;br /&gt;
		document.querySelectorAll( &#039;.wikidata-sparql-table:not([data-loaded])&#039; ).forEach( function ( el ) {&lt;br /&gt;
			el.setAttribute( &#039;data-loaded&#039;, &#039;1&#039; );&lt;br /&gt;
			var sparql = el.getAttribute( &#039;data-sparql&#039; );&lt;br /&gt;
			var title  = el.getAttribute( &#039;data-title&#039; );&lt;br /&gt;
&lt;br /&gt;
			el.textContent = &#039;⏳ Loading…&#039;;&lt;br /&gt;
&lt;br /&gt;
			fetch( &#039;https://query.wikidata.org/sparql?format=json&amp;amp;query=&#039; + encodeURIComponent( sparql ),&lt;br /&gt;
				{ headers: { Accept: &#039;application/json&#039; } } )&lt;br /&gt;
			.then( function ( r ) { return r.json(); } )&lt;br /&gt;
			.then( function ( data ) {&lt;br /&gt;
				var vars = data.head.vars;&lt;br /&gt;
				var rows = data.results.bindings;&lt;br /&gt;
				var html = &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
				if ( title ) html += &#039;&amp;lt;h3&amp;gt;&#039; + title + &#039;&amp;lt;/h3&amp;gt;&#039;;&lt;br /&gt;
				html += &#039;&amp;lt;table class=&amp;quot;wikitable sortable&amp;quot;&amp;gt;&amp;lt;thead&amp;gt;&amp;lt;tr&amp;gt;&#039;;&lt;br /&gt;
				vars.forEach( function ( v ) { html += &#039;&amp;lt;th&amp;gt;&#039; + v + &#039;&amp;lt;/th&amp;gt;&#039;; } );&lt;br /&gt;
				html += &#039;&amp;lt;/tr&amp;gt;&amp;lt;/thead&amp;gt;&amp;lt;tbody&amp;gt;&#039;;&lt;br /&gt;
				rows.forEach( function ( row ) {&lt;br /&gt;
					html += &#039;&amp;lt;tr&amp;gt;&#039;;&lt;br /&gt;
					vars.forEach( function ( v ) { html += &#039;&amp;lt;th&amp;gt;&#039; + v.replace(/_/g, &#039; &#039;) + &#039;&amp;lt;/th&amp;gt;&#039;; } );&lt;br /&gt;
						var val = row[ v ] ? row[ v ].value : &#039;&#039;;&lt;br /&gt;
						if ( /^https?:\/\/commons\.wikimedia\.org\/wiki\/Special:FilePath\//i.test( val ) ) {&lt;br /&gt;
						    var thumb = val.replace( /^http:\/\//, &#039;https://&#039; );&lt;br /&gt;
						    html += &#039;&amp;lt;td&amp;gt;&amp;lt;img src=&amp;quot;&#039; + thumb + &#039;?width=100&amp;quot; style=&amp;quot;max-height:80px;&amp;quot; /&amp;gt;&amp;lt;/td&amp;gt;&#039;;&lt;br /&gt;
						} else {&lt;br /&gt;
						    val = val.replace( /https?:\/\/www\.wikidata\.org\/entity\/(Q\d+)/,&lt;br /&gt;
						        &#039;&amp;lt;a href=&amp;quot;https://www.wikidata.org/wiki/$1&amp;quot;&amp;gt;$1&amp;lt;/a&amp;gt;&#039; );&lt;br /&gt;
						    html += &#039;&amp;lt;td&amp;gt;&#039; + val + &#039;&amp;lt;/td&amp;gt;&#039;;&lt;br /&gt;
						}&lt;br /&gt;
					} );&lt;br /&gt;
					html += &#039;&amp;lt;/tr&amp;gt;&#039;;&lt;br /&gt;
				} );&lt;br /&gt;
				html += &#039;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&#039;;&lt;br /&gt;
				el.innerHTML = html;&lt;br /&gt;
			} )&lt;br /&gt;
			.catch( function () { el.textContent = &#039;⚠️ Failed to load.&#039;; } );&lt;br /&gt;
		} );&lt;br /&gt;
	} );&lt;br /&gt;
} );&lt;br /&gt;
/* DO NOT ADD CODE BELOW THIS LINE */&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=Biodiversit%C3%A9_%C3%A0_Bienne&amp;diff=18161</id>
		<title>Biodiversité à Bienne</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=Biodiversit%C3%A9_%C3%A0_Bienne&amp;diff=18161"/>
		<updated>2026-04-12T21:05:47Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:CH Biel Schüss.JPG|vignette|350x350px|Un peu de verdure et d&#039;eau en ville de Bienne]]&lt;br /&gt;
De (brèves) listes d&#039;espèces vivant à Bienne.&lt;br /&gt;
&lt;br /&gt;
== Faune ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
!Nom fr&lt;br /&gt;
!Nom all&lt;br /&gt;
!Photo&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|[[Castor d&#039;Europe|Castor]]&lt;br /&gt;
|Biber&lt;br /&gt;
|&lt;br /&gt;
|Plus gros rongeur d&#039;Europe. Il vit dans l&#039;eau.&lt;br /&gt;
|-&lt;br /&gt;
|[[Crapaud commun (Bufo bufo)|Crapaud commun]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Crapaud présent aux [[marais de Mâche]]&lt;br /&gt;
|-&lt;br /&gt;
|Crapaud calamite&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Crapaud présent en petit nombre aux marais de Mâche&lt;br /&gt;
|-&lt;br /&gt;
|Foulque macroule&lt;br /&gt;
|Blässhuhn&lt;br /&gt;
|[[Fichier:Foulque macroule et poussin.JPG|centré|vignette|152x152px|Foulque macroule avec poussin]]&lt;br /&gt;
|Oiseau d&#039;eau&lt;br /&gt;
|-&lt;br /&gt;
|[[Grenouille rousse (Rana temporaria)|Grenouille rousse]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Genouille présente aux marais de Mâche&lt;br /&gt;
|-&lt;br /&gt;
|Hérisson&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:WikidataTable|render&lt;br /&gt;
| title = Quelques espèces de Wikidata&lt;br /&gt;
| sparql = SELECT ?QID ?Nom_fr ?Nom_de ?Description_fr ?Description_de (SAMPLE(?Image) AS ?Image) WHERE {&lt;br /&gt;
  VALUES ?QID {&lt;br /&gt;
    wd:Q47542&lt;br /&gt;
    wd:Q146375&lt;br /&gt;
    wd:Q622886&lt;br /&gt;
    wd:Q25376&lt;br /&gt;
    wd:Q27465&lt;br /&gt;
    wd:Q6145&lt;br /&gt;
  }&lt;br /&gt;
  ?QID wdt:P18 ?Image.&lt;br /&gt;
  ?QID rdfs:label ?Nom_fr.&lt;br /&gt;
  ?QID rdfs:label ?Nom_de.&lt;br /&gt;
  ?QID schema:description ?Description_fr.&lt;br /&gt;
  ?QID schema:description ?Description_de.&lt;br /&gt;
  FILTER(LANG(?Nom_fr) = &amp;quot;fr&amp;quot;)&lt;br /&gt;
  FILTER(LANG(?Nom_de) = &amp;quot;de&amp;quot;)&lt;br /&gt;
  FILTER(LANG(?Description_fr) = &amp;quot;fr&amp;quot;)&lt;br /&gt;
  FILTER(LANG(?Description_de) = &amp;quot;de&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
GROUP BY ?QID ?Nom_fr ?Nom_de ?Description_fr ?Description_de&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Flore ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+Espèces présente en ville de Bienne&lt;br /&gt;
!Nom fr&lt;br /&gt;
!Nom all&lt;br /&gt;
!Photo&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|[https://fr.wikipedia.org/wiki/Houx Houx]&lt;br /&gt;
|Stechpalme&lt;br /&gt;
|[[Fichier:Houx.png|alt=Arbuste|centré|vignette|200x200px|Buisson de houx près de la gare]]&lt;br /&gt;
|Arbuste épineux à feuillage persistant&lt;br /&gt;
|-&lt;br /&gt;
|[https://fr.wikipedia.org/wiki/Lierre_grimpant Lierre]&lt;br /&gt;
|Efeu&lt;br /&gt;
|[[Fichier:Lierre.png|centré|vignette|200x200px|Lierre grimpant autour d&#039;une barrière avec des baies]]&lt;br /&gt;
|Plante grimpante à feuilles persistantes.&lt;br /&gt;
|-&lt;br /&gt;
|Cyprès de chine&lt;br /&gt;
|Tränen-Zypresse&lt;br /&gt;
|[[Fichier:Cypres de Chine.png|centré|vignette|215x215px|Un cyprès de Chine adulte]]&lt;br /&gt;
|Un arbre d&#039;ornement originaire du sud de la Chine.&lt;br /&gt;
|-&lt;br /&gt;
|Pâquerette&lt;br /&gt;
|&lt;br /&gt;
|[[Fichier:Paquerette.jpeg|centré|vignette|200x200px|Pâquerette dans un gazon]]&lt;br /&gt;
|Une plante avec une fleure avec des pétales blancs et un centre jaune.&lt;br /&gt;
|-&lt;br /&gt;
|Primevère&lt;br /&gt;
|Primeln&lt;br /&gt;
|[[Fichier:Primevere.jpeg|centré|vignette|150x150px|Primevère]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Epine-vinette&lt;br /&gt;
|&lt;br /&gt;
|[[Fichier:Epine-vinette.jpeg|centré|vignette|200x200px|Epine-vinette]]&lt;br /&gt;
|Arbuste avec des feuilles rouges et des épines.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Insectes ==&lt;br /&gt;
&lt;br /&gt;
== Ressources ==&lt;br /&gt;
&lt;br /&gt;
* Projet de la ville &amp;quot;[https://www.biel-bienne.ch/fr/inventaire-flore.html/3735 Inventaire de la flore]&amp;quot; en partenariat avec [https://www.infoflora.ch/fr/ Info flora]&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=Biodiversit%C3%A9_%C3%A0_Bienne&amp;diff=18160</id>
		<title>Biodiversité à Bienne</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=Biodiversit%C3%A9_%C3%A0_Bienne&amp;diff=18160"/>
		<updated>2026-04-12T21:04:06Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:CH Biel Schüss.JPG|vignette|350x350px|Un peu de verdure et d&#039;eau en ville de Bienne]]&lt;br /&gt;
De (brèves) listes d&#039;espèces vivant à Bienne.&lt;br /&gt;
&lt;br /&gt;
== Faune ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
!Nom fr&lt;br /&gt;
!Nom all&lt;br /&gt;
!Photo&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|[[Castor d&#039;Europe|Castor]]&lt;br /&gt;
|Biber&lt;br /&gt;
|&lt;br /&gt;
|Plus gros rongeur d&#039;Europe. Il vit dans l&#039;eau.&lt;br /&gt;
|-&lt;br /&gt;
|[[Crapaud commun (Bufo bufo)|Crapaud commun]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Crapaud présent aux [[marais de Mâche]]&lt;br /&gt;
|-&lt;br /&gt;
|Crapaud calamite&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Crapaud présent en petit nombre aux marais de Mâche&lt;br /&gt;
|-&lt;br /&gt;
|Foulque macroule&lt;br /&gt;
|Blässhuhn&lt;br /&gt;
|[[Fichier:Foulque macroule et poussin.JPG|centré|vignette|152x152px|Foulque macroule avec poussin]]&lt;br /&gt;
|Oiseau d&#039;eau&lt;br /&gt;
|-&lt;br /&gt;
|[[Grenouille rousse (Rana temporaria)|Grenouille rousse]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Genouille présente aux marais de Mâche&lt;br /&gt;
|-&lt;br /&gt;
|Hérisson&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:WikidataTable|render&lt;br /&gt;
| title = Quelques espèces de Wikidata&lt;br /&gt;
| sparql = SELECT ?QID ?Nom_fr ?Nom_de ?Description_fr ?Description_de ?Image WHERE {&lt;br /&gt;
  VALUES ?QID {&lt;br /&gt;
    wd:Q47542&lt;br /&gt;
    wd:Q146375&lt;br /&gt;
    wd:Q622886&lt;br /&gt;
    wd:Q25376&lt;br /&gt;
    wd:Q27465&lt;br /&gt;
    wd:Q6145&lt;br /&gt;
  }&lt;br /&gt;
  ?QID wdt:P18 ?Image.&lt;br /&gt;
  ?QID rdfs:label ?Nom_fr.&lt;br /&gt;
  ?QID rdfs:label ?Nom_de.&lt;br /&gt;
  ?QID schema:description ?Description_fr.&lt;br /&gt;
  ?QID schema:description ?Description_de.&lt;br /&gt;
  FILTER(LANG(?Nom_fr) = &amp;quot;fr&amp;quot;)&lt;br /&gt;
  FILTER(LANG(?Nom_de) = &amp;quot;de&amp;quot;)&lt;br /&gt;
  FILTER(LANG(?Description_fr) = &amp;quot;fr&amp;quot;)&lt;br /&gt;
  FILTER(LANG(?Description_de) = &amp;quot;de&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Flore ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+Espèces présente en ville de Bienne&lt;br /&gt;
!Nom fr&lt;br /&gt;
!Nom all&lt;br /&gt;
!Photo&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|[https://fr.wikipedia.org/wiki/Houx Houx]&lt;br /&gt;
|Stechpalme&lt;br /&gt;
|[[Fichier:Houx.png|alt=Arbuste|centré|vignette|200x200px|Buisson de houx près de la gare]]&lt;br /&gt;
|Arbuste épineux à feuillage persistant&lt;br /&gt;
|-&lt;br /&gt;
|[https://fr.wikipedia.org/wiki/Lierre_grimpant Lierre]&lt;br /&gt;
|Efeu&lt;br /&gt;
|[[Fichier:Lierre.png|centré|vignette|200x200px|Lierre grimpant autour d&#039;une barrière avec des baies]]&lt;br /&gt;
|Plante grimpante à feuilles persistantes.&lt;br /&gt;
|-&lt;br /&gt;
|Cyprès de chine&lt;br /&gt;
|Tränen-Zypresse&lt;br /&gt;
|[[Fichier:Cypres de Chine.png|centré|vignette|215x215px|Un cyprès de Chine adulte]]&lt;br /&gt;
|Un arbre d&#039;ornement originaire du sud de la Chine.&lt;br /&gt;
|-&lt;br /&gt;
|Pâquerette&lt;br /&gt;
|&lt;br /&gt;
|[[Fichier:Paquerette.jpeg|centré|vignette|200x200px|Pâquerette dans un gazon]]&lt;br /&gt;
|Une plante avec une fleure avec des pétales blancs et un centre jaune.&lt;br /&gt;
|-&lt;br /&gt;
|Primevère&lt;br /&gt;
|Primeln&lt;br /&gt;
|[[Fichier:Primevere.jpeg|centré|vignette|150x150px|Primevère]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Epine-vinette&lt;br /&gt;
|&lt;br /&gt;
|[[Fichier:Epine-vinette.jpeg|centré|vignette|200x200px|Epine-vinette]]&lt;br /&gt;
|Arbuste avec des feuilles rouges et des épines.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Insectes ==&lt;br /&gt;
&lt;br /&gt;
== Ressources ==&lt;br /&gt;
&lt;br /&gt;
* Projet de la ville &amp;quot;[https://www.biel-bienne.ch/fr/inventaire-flore.html/3735 Inventaire de la flore]&amp;quot; en partenariat avec [https://www.infoflora.ch/fr/ Info flora]&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=Biodiversit%C3%A9_%C3%A0_Bienne&amp;diff=18159</id>
		<title>Biodiversité à Bienne</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=Biodiversit%C3%A9_%C3%A0_Bienne&amp;diff=18159"/>
		<updated>2026-04-12T20:56:19Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:CH Biel Schüss.JPG|vignette|350x350px|Un peu de verdure et d&#039;eau en ville de Bienne]]&lt;br /&gt;
De (brèves) listes d&#039;espèces vivant à Bienne.&lt;br /&gt;
&lt;br /&gt;
== Faune ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
!Nom fr&lt;br /&gt;
!Nom all&lt;br /&gt;
!Photo&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|[[Castor d&#039;Europe|Castor]]&lt;br /&gt;
|Biber&lt;br /&gt;
|&lt;br /&gt;
|Plus gros rongeur d&#039;Europe. Il vit dans l&#039;eau.&lt;br /&gt;
|-&lt;br /&gt;
|[[Crapaud commun (Bufo bufo)|Crapaud commun]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Crapaud présent aux [[marais de Mâche]]&lt;br /&gt;
|-&lt;br /&gt;
|Crapaud calamite&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Crapaud présent en petit nombre aux marais de Mâche&lt;br /&gt;
|-&lt;br /&gt;
|Foulque macroule&lt;br /&gt;
|Blässhuhn&lt;br /&gt;
|[[Fichier:Foulque macroule et poussin.JPG|centré|vignette|152x152px|Foulque macroule avec poussin]]&lt;br /&gt;
|Oiseau d&#039;eau&lt;br /&gt;
|-&lt;br /&gt;
|[[Grenouille rousse (Rana temporaria)|Grenouille rousse]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Genouille présente aux marais de Mâche&lt;br /&gt;
|-&lt;br /&gt;
|Hérisson&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wikidata&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Nom&lt;br /&gt;
!Q&lt;br /&gt;
|-&lt;br /&gt;
|Foulque macroule&lt;br /&gt;
|Q25376&lt;br /&gt;
|-&lt;br /&gt;
|Hérisson&lt;br /&gt;
|Q6120&lt;br /&gt;
|-&lt;br /&gt;
|Grenouille rousse&lt;br /&gt;
|Q27465&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:WikidataTable|render&lt;br /&gt;
| title = Quelques espèces de Wikidata&lt;br /&gt;
| sparql = SELECT ?QID ?Nom_fr ?Nom_de ?Description_fr ?Description_de ?Image WHERE {&lt;br /&gt;
  VALUES ?QID {&lt;br /&gt;
    wd:Q25376&lt;br /&gt;
    wd:Q6120&lt;br /&gt;
    wd:Q27465&lt;br /&gt;
  }&lt;br /&gt;
  ?QID wdt:P18 ?Image.&lt;br /&gt;
  ?QID rdfs:label ?Nom_fr.&lt;br /&gt;
  ?QID rdfs:label ?Nom_de.&lt;br /&gt;
  ?QID schema:description ?Description_fr.&lt;br /&gt;
  ?QID schema:description ?Description_de.&lt;br /&gt;
  FILTER(LANG(?Nom_fr) = &amp;quot;fr&amp;quot;)&lt;br /&gt;
  FILTER(LANG(?Nom_de) = &amp;quot;de&amp;quot;)&lt;br /&gt;
  FILTER(LANG(?Description_fr) = &amp;quot;fr&amp;quot;)&lt;br /&gt;
  FILTER(LANG(?Description_de) = &amp;quot;de&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Flore ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+Espèces présente en ville de Bienne&lt;br /&gt;
!Nom fr&lt;br /&gt;
!Nom all&lt;br /&gt;
!Photo&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|[https://fr.wikipedia.org/wiki/Houx Houx]&lt;br /&gt;
|Stechpalme&lt;br /&gt;
|[[Fichier:Houx.png|alt=Arbuste|centré|vignette|200x200px|Buisson de houx près de la gare]]&lt;br /&gt;
|Arbuste épineux à feuillage persistant&lt;br /&gt;
|-&lt;br /&gt;
|[https://fr.wikipedia.org/wiki/Lierre_grimpant Lierre]&lt;br /&gt;
|Efeu&lt;br /&gt;
|[[Fichier:Lierre.png|centré|vignette|200x200px|Lierre grimpant autour d&#039;une barrière avec des baies]]&lt;br /&gt;
|Plante grimpante à feuilles persistantes.&lt;br /&gt;
|-&lt;br /&gt;
|Cyprès de chine&lt;br /&gt;
|Tränen-Zypresse&lt;br /&gt;
|[[Fichier:Cypres de Chine.png|centré|vignette|215x215px|Un cyprès de Chine adulte]]&lt;br /&gt;
|Un arbre d&#039;ornement originaire du sud de la Chine.&lt;br /&gt;
|-&lt;br /&gt;
|Pâquerette&lt;br /&gt;
|&lt;br /&gt;
|[[Fichier:Paquerette.jpeg|centré|vignette|200x200px|Pâquerette dans un gazon]]&lt;br /&gt;
|Une plante avec une fleure avec des pétales blancs et un centre jaune.&lt;br /&gt;
|-&lt;br /&gt;
|Primevère&lt;br /&gt;
|Primeln&lt;br /&gt;
|[[Fichier:Primevere.jpeg|centré|vignette|150x150px|Primevère]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Epine-vinette&lt;br /&gt;
|&lt;br /&gt;
|[[Fichier:Epine-vinette.jpeg|centré|vignette|200x200px|Epine-vinette]]&lt;br /&gt;
|Arbuste avec des feuilles rouges et des épines.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Insectes ==&lt;br /&gt;
&lt;br /&gt;
== Ressources ==&lt;br /&gt;
&lt;br /&gt;
* Projet de la ville &amp;quot;[https://www.biel-bienne.ch/fr/inventaire-flore.html/3735 Inventaire de la flore]&amp;quot; en partenariat avec [https://www.infoflora.ch/fr/ Info flora]&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=Biodiversit%C3%A9_%C3%A0_Bienne&amp;diff=18158</id>
		<title>Biodiversité à Bienne</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=Biodiversit%C3%A9_%C3%A0_Bienne&amp;diff=18158"/>
		<updated>2026-04-12T20:55:51Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:CH Biel Schüss.JPG|vignette|350x350px|Un peu de verdure et d&#039;eau en ville de Bienne]]&lt;br /&gt;
De (brèves) listes d&#039;espèces vivant à Bienne.&lt;br /&gt;
&lt;br /&gt;
== Faune ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
!Nom fr&lt;br /&gt;
!Nom all&lt;br /&gt;
!Photo&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|[[Castor d&#039;Europe|Castor]]&lt;br /&gt;
|Biber&lt;br /&gt;
|&lt;br /&gt;
|Plus gros rongeur d&#039;Europe. Il vit dans l&#039;eau.&lt;br /&gt;
|-&lt;br /&gt;
|[[Crapaud commun (Bufo bufo)|Crapaud commun]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Crapaud présent aux [[marais de Mâche]]&lt;br /&gt;
|-&lt;br /&gt;
|Crapaud calamite&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Crapaud présent en petit nombre aux marais de Mâche&lt;br /&gt;
|-&lt;br /&gt;
|Foulque macroule&lt;br /&gt;
|Blässhuhn&lt;br /&gt;
|[[Fichier:Foulque macroule et poussin.JPG|centré|vignette|152x152px|Foulque macroule avec poussin]]&lt;br /&gt;
|Oiseau d&#039;eau&lt;br /&gt;
|-&lt;br /&gt;
|[[Grenouille rousse (Rana temporaria)|Grenouille rousse]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Genouille présente aux marais de Mâche&lt;br /&gt;
|-&lt;br /&gt;
|Hérisson&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wikidata&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Nom&lt;br /&gt;
!Q&lt;br /&gt;
|-&lt;br /&gt;
|Foulque macroule&lt;br /&gt;
|Q25376&lt;br /&gt;
|-&lt;br /&gt;
|Hérisson&lt;br /&gt;
|Q6120&lt;br /&gt;
|-&lt;br /&gt;
|Grenouille rousse&lt;br /&gt;
|Q27465&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:WikidataTable|render&lt;br /&gt;
| title = Quelques espèces de Wikidata&lt;br /&gt;
| sparql = SELECT ?QID ?Nom_fr ?Nom_de ?Desc_fr ?Desc_de ?Image WHERE {&lt;br /&gt;
  VALUES ?QID {&lt;br /&gt;
    wd:Q25376&lt;br /&gt;
    wd:Q6120&lt;br /&gt;
    wd:Q27465&lt;br /&gt;
  }&lt;br /&gt;
  ?QID wdt:P18 ?Image.&lt;br /&gt;
  ?QID rdfs:label ?Nom_fr.&lt;br /&gt;
  ?QID rdfs:label ?Nom_de.&lt;br /&gt;
  ?QID schema:description ?Description_fr.&lt;br /&gt;
  ?QID schema:description ?Desccription_de.&lt;br /&gt;
  FILTER(LANG(?Nom_fr) = &amp;quot;fr&amp;quot;)&lt;br /&gt;
  FILTER(LANG(?Nom_de) = &amp;quot;de&amp;quot;)&lt;br /&gt;
  FILTER(LANG(?Desc_fr) = &amp;quot;fr&amp;quot;)&lt;br /&gt;
  FILTER(LANG(?Desc_de) = &amp;quot;de&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Flore ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+Espèces présente en ville de Bienne&lt;br /&gt;
!Nom fr&lt;br /&gt;
!Nom all&lt;br /&gt;
!Photo&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|[https://fr.wikipedia.org/wiki/Houx Houx]&lt;br /&gt;
|Stechpalme&lt;br /&gt;
|[[Fichier:Houx.png|alt=Arbuste|centré|vignette|200x200px|Buisson de houx près de la gare]]&lt;br /&gt;
|Arbuste épineux à feuillage persistant&lt;br /&gt;
|-&lt;br /&gt;
|[https://fr.wikipedia.org/wiki/Lierre_grimpant Lierre]&lt;br /&gt;
|Efeu&lt;br /&gt;
|[[Fichier:Lierre.png|centré|vignette|200x200px|Lierre grimpant autour d&#039;une barrière avec des baies]]&lt;br /&gt;
|Plante grimpante à feuilles persistantes.&lt;br /&gt;
|-&lt;br /&gt;
|Cyprès de chine&lt;br /&gt;
|Tränen-Zypresse&lt;br /&gt;
|[[Fichier:Cypres de Chine.png|centré|vignette|215x215px|Un cyprès de Chine adulte]]&lt;br /&gt;
|Un arbre d&#039;ornement originaire du sud de la Chine.&lt;br /&gt;
|-&lt;br /&gt;
|Pâquerette&lt;br /&gt;
|&lt;br /&gt;
|[[Fichier:Paquerette.jpeg|centré|vignette|200x200px|Pâquerette dans un gazon]]&lt;br /&gt;
|Une plante avec une fleure avec des pétales blancs et un centre jaune.&lt;br /&gt;
|-&lt;br /&gt;
|Primevère&lt;br /&gt;
|Primeln&lt;br /&gt;
|[[Fichier:Primevere.jpeg|centré|vignette|150x150px|Primevère]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Epine-vinette&lt;br /&gt;
|&lt;br /&gt;
|[[Fichier:Epine-vinette.jpeg|centré|vignette|200x200px|Epine-vinette]]&lt;br /&gt;
|Arbuste avec des feuilles rouges et des épines.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Insectes ==&lt;br /&gt;
&lt;br /&gt;
== Ressources ==&lt;br /&gt;
&lt;br /&gt;
* Projet de la ville &amp;quot;[https://www.biel-bienne.ch/fr/inventaire-flore.html/3735 Inventaire de la flore]&amp;quot; en partenariat avec [https://www.infoflora.ch/fr/ Info flora]&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=Biodiversit%C3%A9_%C3%A0_Bienne&amp;diff=18157</id>
		<title>Biodiversité à Bienne</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=Biodiversit%C3%A9_%C3%A0_Bienne&amp;diff=18157"/>
		<updated>2026-04-12T20:50:30Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:CH Biel Schüss.JPG|vignette|350x350px|Un peu de verdure et d&#039;eau en ville de Bienne]]&lt;br /&gt;
De (brèves) listes d&#039;espèces vivant à Bienne.&lt;br /&gt;
&lt;br /&gt;
== Faune ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
!Nom fr&lt;br /&gt;
!Nom all&lt;br /&gt;
!Photo&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|[[Castor d&#039;Europe|Castor]]&lt;br /&gt;
|Biber&lt;br /&gt;
|&lt;br /&gt;
|Plus gros rongeur d&#039;Europe. Il vit dans l&#039;eau.&lt;br /&gt;
|-&lt;br /&gt;
|[[Crapaud commun (Bufo bufo)|Crapaud commun]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Crapaud présent aux [[marais de Mâche]]&lt;br /&gt;
|-&lt;br /&gt;
|Crapaud calamite&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Crapaud présent en petit nombre aux marais de Mâche&lt;br /&gt;
|-&lt;br /&gt;
|Foulque macroule&lt;br /&gt;
|Blässhuhn&lt;br /&gt;
|[[Fichier:Foulque macroule et poussin.JPG|centré|vignette|152x152px|Foulque macroule avec poussin]]&lt;br /&gt;
|Oiseau d&#039;eau&lt;br /&gt;
|-&lt;br /&gt;
|[[Grenouille rousse (Rana temporaria)|Grenouille rousse]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Genouille présente aux marais de Mâche&lt;br /&gt;
|-&lt;br /&gt;
|Hérisson&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wikidata&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Nom&lt;br /&gt;
!Q&lt;br /&gt;
|-&lt;br /&gt;
|Foulque macroule&lt;br /&gt;
|Q25376&lt;br /&gt;
|-&lt;br /&gt;
|Hérisson&lt;br /&gt;
|Q6120&lt;br /&gt;
|-&lt;br /&gt;
|Grenouille rousse&lt;br /&gt;
|Q27465&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:WikidataTable|render&lt;br /&gt;
| title = Quelques espèces de Wikidata&lt;br /&gt;
| sparql = SELECT ?QID ?Nom_fr ?Nom_de ?Image WHERE {&lt;br /&gt;
  VALUES ?QID {&lt;br /&gt;
    wd:Q25376&lt;br /&gt;
    wd:Q6120&lt;br /&gt;
    wd:Q27465&lt;br /&gt;
  }&lt;br /&gt;
  ?QID wdt:P18 ?Image.&lt;br /&gt;
  ?QID rdfs:label ?Nom_fr.&lt;br /&gt;
  ?QID rdfs:label ?Nom_de.&lt;br /&gt;
  FILTER(LANG(?Nom_fr) = &amp;quot;fr&amp;quot;)&lt;br /&gt;
  FILTER(LANG(?Nom_de) = &amp;quot;de&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Flore ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|+Espèces présente en ville de Bienne&lt;br /&gt;
!Nom fr&lt;br /&gt;
!Nom all&lt;br /&gt;
!Photo&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|[https://fr.wikipedia.org/wiki/Houx Houx]&lt;br /&gt;
|Stechpalme&lt;br /&gt;
|[[Fichier:Houx.png|alt=Arbuste|centré|vignette|200x200px|Buisson de houx près de la gare]]&lt;br /&gt;
|Arbuste épineux à feuillage persistant&lt;br /&gt;
|-&lt;br /&gt;
|[https://fr.wikipedia.org/wiki/Lierre_grimpant Lierre]&lt;br /&gt;
|Efeu&lt;br /&gt;
|[[Fichier:Lierre.png|centré|vignette|200x200px|Lierre grimpant autour d&#039;une barrière avec des baies]]&lt;br /&gt;
|Plante grimpante à feuilles persistantes.&lt;br /&gt;
|-&lt;br /&gt;
|Cyprès de chine&lt;br /&gt;
|Tränen-Zypresse&lt;br /&gt;
|[[Fichier:Cypres de Chine.png|centré|vignette|215x215px|Un cyprès de Chine adulte]]&lt;br /&gt;
|Un arbre d&#039;ornement originaire du sud de la Chine.&lt;br /&gt;
|-&lt;br /&gt;
|Pâquerette&lt;br /&gt;
|&lt;br /&gt;
|[[Fichier:Paquerette.jpeg|centré|vignette|200x200px|Pâquerette dans un gazon]]&lt;br /&gt;
|Une plante avec une fleure avec des pétales blancs et un centre jaune.&lt;br /&gt;
|-&lt;br /&gt;
|Primevère&lt;br /&gt;
|Primeln&lt;br /&gt;
|[[Fichier:Primevere.jpeg|centré|vignette|150x150px|Primevère]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Epine-vinette&lt;br /&gt;
|&lt;br /&gt;
|[[Fichier:Epine-vinette.jpeg|centré|vignette|200x200px|Epine-vinette]]&lt;br /&gt;
|Arbuste avec des feuilles rouges et des épines.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Insectes ==&lt;br /&gt;
&lt;br /&gt;
== Ressources ==&lt;br /&gt;
&lt;br /&gt;
* Projet de la ville &amp;quot;[https://www.biel-bienne.ch/fr/inventaire-flore.html/3735 Inventaire de la flore]&amp;quot; en partenariat avec [https://www.infoflora.ch/fr/ Info flora]&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=Liste_des_assurances_sociales&amp;diff=18156</id>
		<title>Liste des assurances sociales</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=Liste_des_assurances_sociales&amp;diff=18156"/>
		<updated>2026-04-12T20:40:53Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cette page liste les principales &#039;&#039;&#039;assurances sociales suisses&#039;&#039;&#039; avec leurs sigles en français, allemand et italien, ainsi que leur identifiant [[wikidata:Q1519147|Wikidata]] (système de données ouvertes et liées).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+Assurances sociales suisses&lt;br /&gt;
! Sigle FR&lt;br /&gt;
! Français&lt;br /&gt;
! Deutsch&lt;br /&gt;
! Italiano&lt;br /&gt;
! Pilier&lt;br /&gt;
! Wikidata&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;AVS&#039;&#039;&#039;&lt;br /&gt;
| [[AVS - Assurance-Vieillesse et Survivants]]&lt;br /&gt;
| AHV – Alters- und Hinterlassenenversicherung&lt;br /&gt;
| AVS – Assicurazione per la vecchiaia e per i superstiti&lt;br /&gt;
| 1er pilier&lt;br /&gt;
| {{Wikidata-lien|Q438864}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;AI&#039;&#039;&#039;&lt;br /&gt;
| [[AI - Assurance Invalidité]]&lt;br /&gt;
| IV – Invalidenversicherung&lt;br /&gt;
| AI – Assicurazione per l&#039;invalidità&lt;br /&gt;
| 1er pilier&lt;br /&gt;
| {{Wikidata-lien|Q1441972}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PC&#039;&#039;&#039;&lt;br /&gt;
| [[PC - Prestation Complémentaire]]&lt;br /&gt;
| EL – Ergänzungsleistungen&lt;br /&gt;
| PC – Prestazioni complementari&lt;br /&gt;
| 1er pilier&lt;br /&gt;
| {{Wikidata-lien|Q1235329}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PP / LPP&#039;&#039;&#039;&lt;br /&gt;
| [[PP - Prévoyance Professionnelle]]&lt;br /&gt;
| BVG – Berufliche Vorsorge&lt;br /&gt;
| LPP – Legge sulla previdenza professionale&lt;br /&gt;
| 2e pilier&lt;br /&gt;
| {{Wikidata-lien|Q17633893}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;LAMal&#039;&#039;&#039;&lt;br /&gt;
| [[Amal - Assurance MALadie]]&lt;br /&gt;
| KVG – Krankenversicherungsgesetz&lt;br /&gt;
| LAMal – Legge sull&#039;assicurazione malattie&lt;br /&gt;
| Obligatoire&lt;br /&gt;
| {{Wikidata-lien|Q1786606}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;AA / LAA&#039;&#039;&#039;&lt;br /&gt;
| [[AA - Assurance-Accident]]&lt;br /&gt;
| UVG – Unfallversicherungsgesetz&lt;br /&gt;
| LAINF – Legge sull&#039;assicurazione contro gli infortuni&lt;br /&gt;
| Obligatoire&lt;br /&gt;
| {{Wikidata-lien|Q2493213}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;APG&#039;&#039;&#039;&lt;br /&gt;
| [[APG - Assurance Perte de Gain]]&lt;br /&gt;
| EO – Erwerbsersatzordnung&lt;br /&gt;
| IPG – Indennità di perdita di guadagno&lt;br /&gt;
| 1er pilier&lt;br /&gt;
| {{Wikidata-lien|Q1120554}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;AC&#039;&#039;&#039;&lt;br /&gt;
| [[AC - Assurance-Chômage]]&lt;br /&gt;
| ALV – Arbeitslosenversicherung&lt;br /&gt;
| AD – Assicurazione contro la disoccupazione&lt;br /&gt;
| 1er pilier&lt;br /&gt;
| {{Wikidata-lien|Q628524}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;AF&#039;&#039;&#039;&lt;br /&gt;
| [[AF - Allocation Familiales]]&lt;br /&gt;
| FamZ – Familienzulagen&lt;br /&gt;
| AF – Assegni familiari&lt;br /&gt;
| Famille&lt;br /&gt;
| {{Wikidata-lien|Q1395318}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Ptra&#039;&#039;&#039;&lt;br /&gt;
| [[Ptra - Prestations TRAnsitoires pour chômeurs âgés]]&lt;br /&gt;
| ÜL – Überbrückungsleistungen für ältere Arbeitslose&lt;br /&gt;
| PTr – Prestazioni transitorie per disoccupati anziani&lt;br /&gt;
| 1er pilier&lt;br /&gt;
| {{Wikidata-lien|Q1519147}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{#invoke:WikidataTable|render&lt;br /&gt;
| title = Assurances sociales en Suisse&lt;br /&gt;
| sparql = SELECT ?item ?itemLabel WHERE {&lt;br /&gt;
  ?item wdt:P31/wdt:P279* wd:Q2483208;&lt;br /&gt;
        wdt:P17 wd:Q39.&lt;br /&gt;
  SERVICE wikibase:label { bd:serviceParam wikibase:language &amp;quot;fr&amp;quot;. }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Voir aussi ==&lt;br /&gt;
* [[wikidata:Q1519147|Sécurité sociale en Suisse sur Wikidata]]&lt;br /&gt;
* [https://www.bsv.admin.ch Office fédéral des assurances sociales (OFAS)]&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
	<entry>
		<id>https://wikiromandie.org/index.php?title=Liste_des_assurances_sociales&amp;diff=18146</id>
		<title>Liste des assurances sociales</title>
		<link rel="alternate" type="text/html" href="https://wikiromandie.org/index.php?title=Liste_des_assurances_sociales&amp;diff=18146"/>
		<updated>2026-04-12T17:45:49Z</updated>

		<summary type="html">&lt;p&gt;AdrianoRutz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cette page liste les principales &#039;&#039;&#039;assurances sociales suisses&#039;&#039;&#039; avec leurs sigles en français, allemand et italien, ainsi que leur identifiant [[wikidata:Q1519147|Wikidata]] (système de données ouvertes et liées).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+Assurances sociales suisses&lt;br /&gt;
! Sigle FR&lt;br /&gt;
! Français&lt;br /&gt;
! Deutsch&lt;br /&gt;
! Italiano&lt;br /&gt;
! Pilier&lt;br /&gt;
! Wikidata&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;AVS&#039;&#039;&#039;&lt;br /&gt;
| [[AVS - Assurance-Vieillesse et Survivants]]&lt;br /&gt;
| AHV – Alters- und Hinterlassenenversicherung&lt;br /&gt;
| AVS – Assicurazione per la vecchiaia e per i superstiti&lt;br /&gt;
| 1er pilier&lt;br /&gt;
| {{Wikidata-lien|Q438864}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;AI&#039;&#039;&#039;&lt;br /&gt;
| [[AI - Assurance Invalidité]]&lt;br /&gt;
| IV – Invalidenversicherung&lt;br /&gt;
| AI – Assicurazione per l&#039;invalidità&lt;br /&gt;
| 1er pilier&lt;br /&gt;
| {{Wikidata-lien|Q1441972}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PC&#039;&#039;&#039;&lt;br /&gt;
| [[PC - Prestation Complémentaire]]&lt;br /&gt;
| EL – Ergänzungsleistungen&lt;br /&gt;
| PC – Prestazioni complementari&lt;br /&gt;
| 1er pilier&lt;br /&gt;
| {{Wikidata-lien|Q1235329}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PP / LPP&#039;&#039;&#039;&lt;br /&gt;
| [[PP - Prévoyance Professionnelle]]&lt;br /&gt;
| BVG – Berufliche Vorsorge&lt;br /&gt;
| LPP – Legge sulla previdenza professionale&lt;br /&gt;
| 2e pilier&lt;br /&gt;
| {{Wikidata-lien|Q17633893}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;LAMal&#039;&#039;&#039;&lt;br /&gt;
| [[Amal - Assurance MALadie]]&lt;br /&gt;
| KVG – Krankenversicherungsgesetz&lt;br /&gt;
| LAMal – Legge sull&#039;assicurazione malattie&lt;br /&gt;
| Obligatoire&lt;br /&gt;
| {{Wikidata-lien|Q1786606}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;AA / LAA&#039;&#039;&#039;&lt;br /&gt;
| [[AA - Assurance-Accident]]&lt;br /&gt;
| UVG – Unfallversicherungsgesetz&lt;br /&gt;
| LAINF – Legge sull&#039;assicurazione contro gli infortuni&lt;br /&gt;
| Obligatoire&lt;br /&gt;
| {{Wikidata-lien|Q2493213}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;APG&#039;&#039;&#039;&lt;br /&gt;
| [[APG - Assurance Perte de Gain]]&lt;br /&gt;
| EO – Erwerbsersatzordnung&lt;br /&gt;
| IPG – Indennità di perdita di guadagno&lt;br /&gt;
| 1er pilier&lt;br /&gt;
| {{Wikidata-lien|Q1120554}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;AC&#039;&#039;&#039;&lt;br /&gt;
| [[AC - Assurance-Chômage]]&lt;br /&gt;
| ALV – Arbeitslosenversicherung&lt;br /&gt;
| AD – Assicurazione contro la disoccupazione&lt;br /&gt;
| 1er pilier&lt;br /&gt;
| {{Wikidata-lien|Q628524}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;AF&#039;&#039;&#039;&lt;br /&gt;
| [[AF - Allocation Familiales]]&lt;br /&gt;
| FamZ – Familienzulagen&lt;br /&gt;
| AF – Assegni familiari&lt;br /&gt;
| Famille&lt;br /&gt;
| {{Wikidata-lien|Q1395318}}&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Ptra&#039;&#039;&#039;&lt;br /&gt;
| [[Ptra - Prestations TRAnsitoires pour chômeurs âgés]]&lt;br /&gt;
| ÜL – Überbrückungsleistungen für ältere Arbeitslose&lt;br /&gt;
| PTr – Prestazioni transitorie per disoccupati anziani&lt;br /&gt;
| 1er pilier&lt;br /&gt;
| {{Wikidata-lien|Q1519147}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{#invoke:WikidataTable|render&lt;br /&gt;
| title = Assurances sociales en Suisse&lt;br /&gt;
| sparql = SELECT ?item ?itemLabel WHERE {&lt;br /&gt;
  ?item wdt:P31/wdt:P279* wd:Q2483208;&lt;br /&gt;
        wdt:P17 wd:Q39.&lt;br /&gt;
  SERVICE wikibase:label { bd:serviceParam wikibase:language &amp;quot;fr&amp;quot;. }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
TEST&lt;br /&gt;
{{#invoke:WikidataTable|render&lt;br /&gt;
| title = Ecussons en Suisse&lt;br /&gt;
| sparql = SELECT ?item ?itemLabel ?image WHERE {&lt;br /&gt;
  ?item wdt:P31 wd:Q331357;&lt;br /&gt;
        wdt:P17 wd:Q39;&lt;br /&gt;
        wdt:P18 ?image.&lt;br /&gt;
  SERVICE wikibase:label { bd:serviceParam wikibase:language &amp;quot;fr&amp;quot;. }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Voir aussi ==&lt;br /&gt;
* [[wikidata:Q1519147|Sécurité sociale en Suisse sur Wikidata]]&lt;br /&gt;
* [https://www.bsv.admin.ch Office fédéral des assurances sociales (OFAS)]&lt;/div&gt;</summary>
		<author><name>AdrianoRutz</name></author>
	</entry>
</feed>