Cambios

Saltar a: navegación, buscar

MediaWiki:Common.js

105 bytes añadidos, 07:02 10 abr 2014
sin resumen de edición
( function() {
'use strict';
/**
* Instead of cluttering up the global scope with
*/
window.mcw = {};
/* Legacy support */
mcw.baseURL = '/';
mcw.wikiURL = '/';
/* Variables for interface text used throughout the script, for ease of translating */
mcw.i18n = {
hideText: 'hide',
showText: 'show',
// Page loader
loadErrorTitle: 'An error occurred loading the content',
// File upload
defaultLicense: 'License'
};
/* Add extra buttons to the classic toolbar */
if ( mw.user.options.get( 'showtoolbar' ) && !mw.user.options.get( 'usebetatoolbar' ) ) {
importScript( 'MediaWiki:Toolbar.js' );
}
/* Wait for DOMContentLoaded */
$( function() {
/**
* Collapsible tables
return false;
}
var buttonText = ' <span class="collapsible-button">[<span class="jslink">' + mcw.i18n.hideText + '</span>]</span> ';
$content.each( function() {
var $table = $( this ), $header, $collapseButton, firstWidth, secondWidth;
// This table is already collapsible
if ( $table.data( 'collapsible' ) ) {
return true;
}
// Use the collapse-button if specified otherwise the first header cell of the first row
$header = $table.find( 'tr:first .collapse-button' );
$header = $table.find( 'tr:first > th:first' );
}
// No header or the table body is empty
if ( !$header.length || !$table.find( 'tr:not(tr:first)' ).text().replace( /\n/g, '' ).length ) {
return true;
}
// For the button to float properly, it has to be /before/ the cell text
if ( $table.hasClass( 'collapse-button-none' ) ) {
$header.prepend( buttonText );
}
// Find max button size, and set its min-width to it
$collapseButton = $table.find( '.collapsible-button' );
$collapseButton.find( '> .jslink' ).text( mcw.i18n.showText );
secondWidth = $collapseButton.width();
if ( firstWidth != secondWidth ) {
if ( firstWidth < secondWidth ) {
}
}
// Set the text back to hide if it's not collapsed to begin with
if ( !$table.hasClass( 'collapsed' ) ) {
$collapseButton.find( '> .jslink' ).text( mcw.i18n.hideText );
}
$table.data( 'collapsible', true );
} );
};
$( '#mw-content-text' ).on( 'click', 'table.collapsible .collapsible-button .jslink', function( e ) {
var $table = $( this ).closest( 'table.collapsible' );
// Stop table sorting activating when clicking the link
e.stopPropagation();
if ( $table.hasClass( 'collapsed' ) ) {
$table.removeClass( 'collapsed' ).addClass( 'expanded' );
} );
mcw.makeCollapsible();
/**
* Fix edit summary prompt for undo
document.getElementsByName( 'wpAutoSummary' )[0].value='1';
}
/**
* Element animator
};
mcw.animation();
/**
* Pause grid GUI templates (e.g. [[Template:Grid/Crafting Table]]) on mouseover
}
}, '.grid-generic, .grid-Crafting_Table, .grid-Furnace, .grid-Brewing_Stand' );
/**
* Add fake last-child class in navboxes for IE8
$( '.navbox-list li:last' ).addClass( 'last-child' );
}
/**
* Page loader
// regardless of if something is clicked
mw.loader.load( 'jquery.spinner' );
var $buttonText = $( '<span/>' )
.addClass( 'load-page-button' )
$loadPage.find( '.mw-headline:first' ).each( function() {
var $button, firstWidth, secondWidth;
// Add the button
$( this ).append( $buttonText.clone() );
// Find max button size, and set its min-width to it
$button = $( this ).find( '> .load-page-button' );
$button.find( '> .jslink' ).text( mcw.i18n.showText );
secondWidth = $button.width();
if ( firstWidth != secondWidth ) {
if ( firstWidth < secondWidth ) {
} );
}
$( '#mw-content-text' ).on( 'click', '.load-page-button > .jslink', function() {
var $this = $( this ),
$body = $this.closest( '.load-page' ),
$content = $body.find( '.load-page-content' );
if ( !$body.data( 'loaded' ) ) {
var oldButton = $button.html();
$button.html( $.createSpinner() );
} );
new mw.Api().get( {
action: 'parse',
} ).done( function( data ) {
$content.html( data.parse.text['*'] ).show();
$button.html( oldButton ).find( '> .jslink' ).text( mcw.i18n.hideText );
$body.data( 'loaded', true );
// Add Ajax compatible functions here
// TODO: Use mw.hook once we get MW1.22
} ).fail( function( _, error ) {
$button.html( oldButton );
var errorText = '';
if ( error.textStatus ) {
errorText = error.error.info;
}
mw.notify( errorText, { title: mcw.i18n.loadErrorTitle, autoHide: false } );
} );
}
} );
/**
* Make simple search suggestions box separately styled
$( '.suggestions:first' ).addClass( 'searchbar' );
} );
/**
* Collapsible details for [[Template:History2]]
/*if ( $( '.history2' ).find( 'pre' ).length ) {
var histExpandText = 'View snapshot history', histCollapseText = 'Hide snapshot history';
$( '.history2 th:first' ).append( '<span class="toggleHistDetails">[<span class="jslink">' + histExpandText + '</span>]</span>' );
var histLink = $( '.toggleHistDetails .jslink' );
histLink.click( function() {
return true;
}
var header = $( this ), row = header, text = header.find( '> td' ).html() + '</td></tr>',
rowspan = header.find( '> th' ).prop( 'rowspan' );
row.addClass( 'overview' );
if ( rowspan > 1 ) {
}
row.addClass( 'overview' );
text += '\n<tr><td>' + row.find( '> td' ).html() + '</td></tr>';
}
}
var versions = text.split( '<pre>' ), data = [];
rowspan = 0;
$.each( versions, function() {
var parts = this.split( '</' + 'pre>' ), version = parts[0].replace( /\n/g, '' ), text = parts[1];
if ( !version || !text ) {
return true;
}
text = text.replace( /<tr>/g, '<tr class="details">' );
if ( text.slice( text.lastIndexOf( '</tr>' ) ).indexOf( '<td>' ) > -1 ) {
text = text.slice( 0, text.lastIndexOf( '</tr>' ) );
}
if ( text.slice( text.lastIndexOf( '<td>' ) ).indexOf( '</td>' ) < 0 ) {
text += '</td></tr>';
}
if ( version.match( /\d\dw\d\d\w/ ) ) {
version = '<a title="Version history/Development versions" href="/' + 'Version_history/Development_versions#' + version + '">' + version + '</a>';
version = '<a title="Version history" href="/' + 'Version_history#' + version + '">' + version + '</a>';
}
var rows;
if ( text.match( /<td>/g ) ) {
data.push( '<th rowspan="' + rows + '">' + version + '</th><td>' + text );
} );
var html = '<tr class="details"><th rowspan="' + rowspan + '">' + header.find( '> th' ).html() + '</th>' + data.join( '<tr class="details">' );
$( '<table>' + html + '</table>' ).find( 'td > ol' ).each( function() {
html = html.split( '<ol>' + text + '</ol>' ).join( '<ul>' + text + '</ul>' );
} );
row.after( html );
} );
$( '.history2 .overview' ).hide();
}
if ( histLink.text() === histExpandText) {
histLink.text( histCollapseText );
} );
}*/
/**
* Issue tracker loader
var page = $( '#issue-list' ).data( 'name' ) || mw.config.get( 'wgPageName' ),
amount = $( '#issue-list' ).data( 'num' ) || 20;
if ( $.isArray( page ) ) {
page = page.join( '" OR summary ~ "' );
}
var jql = encodeURIComponent( 'project in (MC, MCPE) AND resolution = Unresolved AND ( summary ~ "' + page + '" )' );
$.ajax(
'https://mojang.atlassian.net/rest/api/latest/search?maxResults=' + amount + '&fields=summary&jql=' + jql
return false;
}
var compIssues = [], pocketIssues = [];
$.each( search.issues, function() {
}
} );
var html = '';
if ( compIssues.length ) {
html += '\n<p><b>Pocket Edition:</b></p><ul>' + pocketIssues.join( '\n' ) + '</ul>';
}
if ( search.total > amount ) {
var extra = search.total - amount;
html += '\n<p><a href="https://mojang.atlassian.net/issues/?jql=' + jql + '">View ' + extra + ' more result';
if ( extra > 1 ) {
html += 's';
}
html += '</a></p>';
}
$( '#issue-list' ).html( html );
} );
}
*/
/**
* Set unlicensed as the default license on file pages
$( '#wpLicense' ).val( mcw.i18n.defaultLicense );
}
mw.loader.using( 'mediawiki.legacy.upload', function() {
var change = setInterval( function() {
} );
}
/**
* Creates minecraft style tooltips
create: function() {
var tooltip;
$( '#mw-content-text' ).on( {
'mouseenter.minetip': function( e ) {
title = $elem.data( 'minetip-title' ),
description = $elem.data( 'minetip-text' );
// No title or title only contains formatting codes
if ( title === undefined || title && title.replace( /&([0-9a-fl-o])|\s+/g, '' ) === '' ) {
title += attrTitle;
}
if ( title ) {
// Set the retrieved title as data for future use
}
}
$elem.add( '*', $elem ).filter( '[title]' ).removeAttr( 'title' );
if ( title === 0 ) {
return;
}
var text = '<span class="title">' + title + '&f</span>';
if ( description ) {
'&f</span>';
}
if ( !$( '#minetip-tooltip' ).length ) {
$( 'body' ).append( '<div id="minetip-tooltip"/>' );
}
tooltip = $( '#minetip-tooltip' );
// Add classes for minecraft formatting codes
while ( text.match( /&[0-9a-el-o]/ ) ) {
// Remove reset formatting
text = text.replace( /&f/g, '' );
tooltip.html( text );
// Trigger a mouse movement to position the tooltip
$elem.trigger( 'mousemove', e );
return;
}
// Get event data from remote trigger
e = trigger || e;
var top = e.clientY - 34,
left = e.clientX + 14,
width = tooltip.outerWidth( true ),
height = tooltip.outerHeight( true ),
$win = $( window ),
winWidth = $win.width(),
winHeight = $win.height();
// If going off the right of the screen, go to the left of the cursor
if ( left + width > winWidth ) {
left -= width + 36;
}
// If now going off to the left of the screen, resort to going below the cursor
if ( left < 0 ) {
left = 0;
top += 82;
// Go above the cursor if too low
if ( top + height > winHeight ) {
top = winHeight - height;
}
// Apply the positions
tooltip.css( {
return;
}
tooltip.remove();
}
description = $( this ).data( 'minetip-text' ),
existingTitle = $( this ).attr( 'title' ) || $( this ).find( '> a:first' ).attr( 'title' );
if ( title || title === 0 || $( this ).attr( 'title' ) ) {
// Remove titles within so they don't interfere
$( this ).find( '[title]' ).removeAttr( 'title' );
}
if ( title === 0 ) {
$( this ).removeAttr( 'title' );
$( this ).data( 'minetip-title', existingTitle );
}
var text = title || existingTitle;
if ( description ) {
text += '\n' + description;
}
// Remove formatting
text = text.replace( /&([0-9a-fl-o])/g, '' )
.replace( /\//g, '\n' )
.replace( /&#47;/g, '/' );
$( this ).attr( 'title', text );
} ).off( '.minetip' );
}
};
if ( mcw.useNativeMinetip ) {
mcw.minetip.native();
mcw.minetip.create();
}
} );
} )();
552
ediciones

Menú de navegación