MediaWiki:Common.js
Página de la interfaz de MediaWiki
Más acciones
Nota: Después de publicar, quizás necesite actualizar la caché de su navegador para ver los cambios.
- Firefox/Safari: Mantenga presionada la tecla Shift mientras pulsa el botón Actualizar, o presiona Ctrl+F5 o Ctrl+R (⌘+R en Mac)
- Google Chrome: presione Ctrl+Shift+R (⌘+Shift+R en Mac)
- Edge: mantenga presionada Ctrl mientras pulsa Actualizar, o presione Ctrl+F5
/* ===== FUNCIONALIDAD GENERAL ===== */
$( function() {
// 1. Mostrar avatar junto al nombre de usuario
if ( mw.config.exists( 'wgUserAvatar' ) {
var avatarUrl = mw.util.getUrl( 'File:' + mw.config.get( 'wgUserAvatar' ), {
width: 24
});
$('#pt-userpage, .mw-userlink').prepend(
$('<img>').addClass('user-avatar').attr( 'src', avatarUrl )
);
}
// 2. Panel de administración mejorado (solo para admins)
if ( mw.config.get( 'wgUserGroups' ).includes( 'sysop' ) ) {
// Añadir contador dinámico de actividades
addAdminCounters();
// Añadir enlace rápido al panel
mw.util.addPortletLink(
'p-tb',
mw.util.getUrl( 'Special:Analytics' ),
'<i class="fas fa-chart-line"></i> Panel',
't-adminpanel',
'Acceso rápido al panel de administración'
);
}
// 3. Mejorar visualización de estadísticas
if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Analytics' ) {
enhanceAnalyticsDashboard();
}
});
/* ===== FUNCIONES AVANZADAS ===== */
function addAdminCounters() {
// Contador de páginas nuevas (últimas 24h)
$.get( mw.util.wikiScript( 'api' ), {
action: 'query',
list: 'recentchanges',
rctype: 'new',
rclimit: 1,
rcend: new Date( Date.now() - 86400000 ).toISOString(),
format: 'json'
} ).done( function( data ) {
var count = data.query.recentchanges.length;
$( '#adminlinks a[href*="Special:NewPages"]' )
.append( '<span class="admin-badge">+' + count + '</span>' );
} );
// Contador de ediciones pendientes
$.get( mw.util.wikiScript( 'api' ), {
action: 'query',
list: 'recentchanges',
rclimit: 1,
rcdir: 'older',
rcprop: 'flags',
format: 'json'
} ).done( function( data ) {
var count = data.query.recentchanges.length;
$( '#adminlinks a[href*="Special:RecentChanges"]' )
.append( '<span class="admin-badge">' + count + '</span>' );
} );
}
function enhanceAnalyticsDashboard() {
// Convertir tablas en gráficos interactivos
$( '.wikitable' ).each( function() {
var $table = $( this );
if ( $table.find( 'th' ).length > 1 ) {
$table.addClass( 'analytics-table' )
.wrap( '<div class="table-responsive"></div>' );
// Añadir botón de exportación
$table.before(
'<button class="export-btn" data-table="' + $table.attr( 'id' ) + '">' +
'<i class="fas fa-download"></i> Exportar</button>'
);
}
});
// Configurar eventos de exportación
$( '.export-btn' ).on( 'click', function() {
var tableId = $( this ).data( 'table' );
exportTableToCSV( tableId );
});
}
function exportTableToCSV( tableId ) {
var $table = $( '#' + tableId );
var csv = [];
var $rows = $table.find( 'tr' );
$rows.each( function() {
var row = [];
$( this ).find( 'th, td' ).each( function() {
row.push( $( this ).text().trim() );
});
csv.push( row.join( ',' ) );
});
var csvContent = csv.join( '\n' );
var encodedUri = encodeURI( 'data:text/csv;charset=utf-8,' + csvContent );
var link = document.createElement( 'a' );
link.setAttribute( 'href', encodedUri );
link.setAttribute( 'download', 'estadisticas_' + new Date().toISOString().slice(0,10) + '.csv' );
document.body.appendChild( link );
link.click();
document.body.removeChild( link );
}
/* ===== MEJORAS DE USABILIDAD ===== */
// Tooltips para iconos del panel
$( document ).ready( function() {
$( '#adminlinks [class^="fa-"]' ).each( function() {
var $icon = $( this );
$icon.parent().attr( 'title', $icon.parent().text().trim() );
});
} );
// Cargar FontAwesome si no está presente
if ( !$( 'link[href*="font-awesome"]' ).length ) {
$( 'head' ).append(
'<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">'
);
}