MediaWiki:Common.js
Page de l’interface de MediaWiki
Autres actions
Note : après avoir publié vos modifications, il se peut que vous deviez forcer le rechargement complet du cache de votre navigateur pour voir les changements.
- Firefox / Safari : maintenez la touche Maj (Shift) en cliquant sur le bouton Actualiser ou appuyez sur Ctrl + F5 ou Ctrl + R (⌘ + R sur un Mac).
- Google Chrome : appuyez sur Ctrl + Maj + R (⌘ + Shift + R sur un Mac).
- Edge : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl + F5.
( function () {
'use strict';
var css = [
'#tj-pdf-overlay {',
' display: none;',
' position: fixed;',
' top: 0; left: 0; right: 0; bottom: 0;',
' background: rgba(0,0,0,0.75);',
' z-index: 9999;',
' align-items: center;',
' justify-content: center;',
'}',
'#tj-pdf-overlay.actif {',
' display: flex;',
'}',
'#tj-pdf-boite {',
' background: #1a1a2e;',
' border-radius: 6px;',
' width: 90vw;',
' height: 92vh;',
' display: flex;',
' flex-direction: column;',
' overflow: hidden;',
' box-shadow: 0 8px 32px rgba(0,0,0,0.6);',
'}',
'#tj-pdf-entete {',
' display: flex;',
' align-items: center;',
' justify-content: space-between;',
' padding: 8px 14px;',
' background: #16213e;',
' color: #e0e0e0;',
' font-family: sans-serif;',
' font-size: 13px;',
' border-bottom: 1px solid #0f3460;',
' flex-shrink: 0;',
'}',
'#tj-pdf-titre {',
' font-weight: bold;',
' color: #a8c7fa;',
' white-space: nowrap;',
' overflow: hidden;',
' text-overflow: ellipsis;',
' max-width: 70%;',
'}',
'#tj-pdf-actions {',
' display: flex;',
' gap: 10px;',
' align-items: center;',
'}',
'#tj-pdf-actions a {',
' color: #a8c7fa;',
' text-decoration: none;',
' font-size: 12px;',
' border: 1px solid #0f3460;',
' padding: 3px 8px;',
' border-radius: 3px;',
'}',
'#tj-pdf-actions a:hover { background: #0f3460; }',
'#tj-pdf-fermer {',
' cursor: pointer;',
' color: #e0e0e0;',
' font-size: 20px;',
' line-height: 1;',
' padding: 2px 6px;',
' border-radius: 3px;',
'}',
'#tj-pdf-fermer:hover { background: #c0392b; color: #fff; }',
'#tj-pdf-iframe {',
' flex: 1;',
' border: none;',
' width: 100%;',
'}'
].join( '\n' );
var style = document.createElement( 'style' );
style.textContent = css;
document.head.appendChild( style );
var overlay = document.createElement( 'div' );
overlay.id = 'tj-pdf-overlay';
overlay.innerHTML = [
'<div id="tj-pdf-boite">',
' <div id="tj-pdf-entete">',
' <span id="tj-pdf-titre">Document</span>',
' <div id="tj-pdf-actions">',
' <a id="tj-pdf-telecharger" href="#" target="_blank">⬇ Télécharger</a>',
' <span id="tj-pdf-fermer" title="Fermer">✕</span>',
' </div>',
' </div>',
' <iframe id="tj-pdf-iframe" allowfullscreen></iframe>',
'</div>'
].join( '' );
document.body.appendChild( overlay );
var BASE_VIEWER = '/pdfjs/web/viewer.html';
function nomFichier( chemin ) {
return chemin.split( '/' ).pop().replace( /\.pdf$/i, '' )
.replace( /[-_]/g, ' ' );
}
function ouvrirViewer( fichier, page, citation ) {
page = parseInt( page, 10 ) || 1;
var url = BASE_VIEWER + '?file=' + encodeURIComponent( fichier ) + '&page=' + page + '&disableHistory=true&disableRange=true&disableStream=true';
if ( citation ) { url += '&citation=' + encodeURIComponent( citation ); }
url += '#page=' + page + '&zoom=page-width';
document.getElementById( 'tj-pdf-titre' ).textContent = nomFichier( fichier );
document.getElementById( 'tj-pdf-telecharger' ).href = fichier;
document.getElementById( 'tj-pdf-iframe' ).src = url;
overlay.classList.add( 'actif' );
document.body.style.overflow = 'hidden';
}
function fermerViewer() {
overlay.classList.remove( 'actif' );
document.body.style.overflow = '';
}
document.getElementById( 'tj-pdf-fermer' ).addEventListener( 'click', fermerViewer );
overlay.addEventListener( 'click', function ( e ) { if ( e.target === overlay ) { fermerViewer(); } } );
document.addEventListener( 'keydown', function ( e ) { if ( e.key === 'Escape' ) { fermerViewer(); } } );
document.addEventListener( 'click', function ( e ) {
var el = e.target.closest( '.tj-sourcedoc' );
if ( !el ) { return; }
e.preventDefault();
ouvrirViewer( el.dataset.fichier, el.dataset.page, el.dataset.citation || '' );
} );
} )();
/* ══ TJ-Encyclopédie — Page d'accueil ══ */
mw.hook( 'wikipage.content' ).add( function () {
if ( mw.config.get( 'wgPageName' ) !== 'Accueil' ) return;
var catColors = {
'Histoire': { bg: '#c9a84c', text: '#3a2800' },
'Doctrine': { bg: '#7f77dd', text: '#fff' },
'Science': { bg: '#1d9e75', text: '#fff' },
'Biographie': { bg: '#d85a30', text: '#fff' },
'Controverses': { bg: '#e24b4a', text: '#fff' },
'Société': { bg: '#378add', text: '#fff' },
'Bibliographie': { bg: '#639922', text: '#fff' }
};
/* ── SLIDER ── */
var slideEls = document.querySelectorAll( '#tj-slider-data .tj-slide' );
var slides = [];
slideEls.forEach( function ( el ) {
slides.push( {
bg: el.getAttribute( 'data-bg' ),
href: el.getAttribute( 'data-href' ),
icon: el.getAttribute( 'data-icon' ),
label: el.getAttribute( 'data-label' ),
desc: el.getAttribute( 'data-desc' )
} );
} );
var current = 0;
var sliderEl = document.getElementById( 'tj-slider' );
var dotsEl = document.getElementById( 'tj-dots' );
if ( sliderEl && slides.length ) {
function renderSlide( i ) {
var s = slides[ i ];
sliderEl.style.background = s.bg;
sliderEl.style.cursor = 'pointer';
sliderEl.onclick = function () { window.location.href = s.href; };
document.getElementById( 'tj-slide-icon' ).textContent = s.icon;
document.getElementById( 'tj-slide-label' ).textContent = s.label;
document.getElementById( 'tj-slide-desc' ).textContent = s.desc;
document.querySelectorAll( '.tj-dot' ).forEach( function ( d, di ) {
d.style.opacity = di === i ? '1' : '0.35';
d.style.width = di === i ? '24px' : '8px';
} );
}
slides.forEach( function ( _, i ) {
var d = document.createElement( 'span' );
d.className = 'tj-dot';
d.addEventListener( 'click', function ( e ) {
e.stopPropagation();
current = i;
renderSlide( i );
} );
dotsEl.appendChild( d );
} );
renderSlide( 0 );
setInterval( function () {
current = ( current + 1 ) % slides.length;
renderSlide( current );
}, 3500 );
}
/* ── CATÉGORIES ── */
var catEls = document.querySelectorAll( '#tj-cats-data .tj-catdata' );
var catsDiv = document.getElementById( 'tj-cats' );
if ( catsDiv && catEls.length ) {
catEls.forEach( function ( el ) {
var href = el.getAttribute( 'data-href' );
var icon = el.getAttribute( 'data-icon' );
var label = el.getAttribute( 'data-label' );
var div = document.createElement( 'div' );
div.className = 'tj-cat';
div.innerHTML = '<div class="tj-cat-icon">' + icon + '</div>'
+ '<div class="tj-cat-overlay"></div>'
+ '<span class="tj-cat-label">' + label + '</span>';
div.addEventListener( 'click', function () { window.location.href = href; } );
catsDiv.appendChild( div );
} );
}
/* ── DERNIERS ARTICLES ── */
var container = document.getElementById( 'tj-articles' );
if ( !container ) return;
$.ajax( {
url: mw.util.wikiScript( 'api' ),
data: { action: 'query', list: 'recentchanges', rctype: 'edit|new', rcnamespace: '0', rclimit: '300', rcprop: 'title', format: 'json' },
success: function ( data ) {
var seen = [], pages = [];
( data.query.recentchanges || [] ).forEach( function ( rc ) {
if ( seen.indexOf( rc.title ) === -1 && rc.title !== 'Accueil' ) {
seen.push( rc.title );
if ( pages.length < 12 ) pages.push( rc.title );
}
} );
if ( !pages.length ) { container.innerHTML = '<p class="tj-empty">Aucun article récent.</p>'; return; }
chargerImages( pages );
}
} );
function chargerImages( titres ) {
$.ajax( {
url: mw.util.wikiScript( 'api' ),
data: { action: 'query', titles: titres.join( '|' ), prop: 'pageimages|categories', piprop: 'thumbnail', pithumbsize: '400', cllimit: '5', format: 'json' },
success: function ( data ) {
var pages = data.query.pages;
var cartes = titres.map( function ( titre ) {
var page = null;
Object.values( pages ).forEach( function ( p ) { if ( p.title === titre ) page = p; } );
if ( !page ) return null;
var catLabel = '';
( page.categories || [] ).forEach( function ( c ) {
Object.keys( catColors ).forEach( function ( cl ) { if ( c.title.indexOf( cl ) !== -1 && !catLabel ) catLabel = cl; } );
} );
return { title: page.title, thumb: page.thumbnail ? page.thumbnail.source : null, cat: catLabel };
} ).filter( Boolean );
afficherCartes( cartes );
}
} );
}
function afficherCartes( cartes ) {
var html = '';
cartes.forEach( function ( c ) {
var url = mw.util.getUrl( c.title );
var bgStyle = c.thumb ? 'background-image:url(' + c.thumb + ');background-size:cover;background-position:center;' : 'background-color:#1a1a2a;';
var col = catColors[ c.cat ] || { bg: '#c9a84c', text: '#3a2800' };
html += '<a class="tj-art-card" href="' + url + '">'
+ '<div class="tj-art-bg" style="' + bgStyle + '"></div>'
+ '<div class="tj-art-overlay"></div>'
+ '<div class="tj-art-content">'
+ ( c.cat ? '<span class="tj-art-badge" style="background:' + col.bg + ';color:' + col.text + ';">' + c.cat + '</span>' : '' )
+ '<div class="tj-art-title">' + mw.html.escape( c.title ) + '</div>'
+ '</div></a>';
} );
container.innerHTML = html || '<p class="tj-empty">Aucun article récent.</p>';
}
} );
/* ── Le saviez-vous : clic sur la box = ouvre l'article ── */
( function () {
var idx = { 1: 0, 2: 0 };
function chargerImages( bloc, articles ) {
jQuery.ajax( {
url: mw.util.wikiScript( 'api' ),
data: { action: 'query', titles: articles.join( '|' ), prop: 'pageimages', piprop: 'thumbnail', pithumbsize: '600', format: 'json' },
success: function ( data ) {
Object.values( data.query.pages ).forEach( function ( p ) {
if ( !p.thumbnail ) return;
var i = articles.indexOf( p.title );
if ( i === -1 ) return;
var el = document.getElementById( 'tj-sbg-' + bloc + '-' + i );
if ( el ) el.style.backgroundImage = 'url(' + p.thumbnail.source + ')';
} );
}
} );
}
function afficher( bloc, i ) {
var items = document.querySelectorAll( '#tj-saviez-' + bloc + ' .tj-saviez-item' );
if ( !items.length ) return;
i = ( i + items.length ) % items.length;
idx[ bloc ] = i;
items.forEach( function ( el ) { el.classList.remove( 'actif' ); } );
items[ i ].classList.add( 'actif' );
}
function indexAleatoire( bloc, nbItems ) {
if ( nbItems <= 1 ) return 0;
var i;
do {
i = Math.floor( Math.random() * nbItems );
} while ( i === idx[ bloc ] );
return i;
}
mw.hook( 'wikipage.content' ).add( function () {
if ( !document.getElementById( 'tj-saviez-wrapper' ) ) return;
document.querySelectorAll( '.tj-saviez-item[data-href]' ).forEach( function ( item ) {
var href = item.getAttribute( 'data-href' );
item.addEventListener( 'click', function () { window.location.href = href; } );
} );
[ 1, 2 ].forEach( function ( bloc ) {
var items = document.querySelectorAll( '#tj-saviez-' + bloc + ' .tj-saviez-item' );
var articles = [];
items.forEach( function ( el ) { articles.push( el.getAttribute( 'data-article' ) ); } );
chargerImages( bloc, articles );
// Départ aléatoire aussi, au lieu de toujours commencer à 0
afficher( bloc, Math.floor( Math.random() * items.length ) );
} );
setInterval( function () {
var n1 = document.querySelectorAll( '#tj-saviez-1 .tj-saviez-item' ).length;
afficher( 1, indexAleatoire( 1, n1 ) );
}, 10000 );
setInterval( function () {
var n2 = document.querySelectorAll( '#tj-saviez-2 .tj-saviez-item' ).length;
afficher( 2, indexAleatoire( 2, n2 ) );
}, 12000 );
} );
} )();