Cambios

Saltar a: navegación, buscar

MediaWiki:Common.js

10 137 bytes añadidos, 20:45 17 abr 2014
sin resumen de edición
/* Cualquier código JavaScript escrito aquí se cargará para todos los usuarios en cada página. *///<source lang="JavaScript"> /** Extra toolbar options ****************************************************** * * Description: Adds extra buttons to the editing toolbar. * * To disable this script, add <code>mwCustomEditButtons = */ if (mwCustomEditButtons) { mwCustomEditButtons.push({ "imageFile": "http://upload.wikimedia.org/wikipedia/en/c/c8/Button_redirect.png", "speedTip": "Redirect", "tagOpen": "#REDIRECT [[", "tagClose": "]]", "sampleText": "Target page name" }); mwCustomEditButtons.push({ "imageFile": "http://upload.wikimedia.org/wikipedia/en/c/c9/Button_strike.png", "speedTip": "Strike", "tagOpen": "<s>", "tagClose": "</s>", "sampleText": "Strike-through text" }); mwCustomEditButtons.push({ "imageFile": "http://upload.wikimedia.org/wikipedia/en/1/13/Button_enter.png", "speedTip": "Line break", "tagOpen": "<br />", "tagClose": "", "sampleText": "" }); mwCustomEditButtons.push({ "imageFile": "http://upload.wikimedia.org/wikipedia/en/8/80/Button_upper_letter.png", "speedTip": "Superscript", "tagOpen": "<sup>", "tagClose": "</sup>", "sampleText": "Superscript text" }); mwCustomEditButtons.push({ "imageFile": "http://upload.wikimedia.org/wikipedia/en/7/70/Button_lower_letter.png", "speedTip": "Subscript", "tagOpen": "<sub>", "tagClose": "</sub>", "sampleText": "Subscript text" }); mwCustomEditButtons.push({ "imageFile": "http://upload.wikimedia.org/wikipedia/en/5/58/Button_small.png", "speedTip": "Small", "tagOpen": "<small>", "tagClose": "</small>", "sampleText": "Small Text" }); mwCustomEditButtons.push({ "imageFile": "http://upload.wikimedia.org/wikipedia/en/3/34/Button_hide_comment.png", "speedTip": "Insert hidden Comment", "tagOpen": "<!-- ", "tagClose": " -->", "sampleText": "Comment" }); mwCustomEditButtons.push({ "imageFile": "http://upload.wikimedia.org/wikipedia/en/1/12/Button_gallery.png", "speedTip": "Insert a picture gallery", "tagOpen": "\n<gallery>\n", "tagClose": "\n</gallery>", "sampleText": "Image:Example.jpg|Caption1\nImage:Example.jpg|Caption2" }); mwCustomEditButtons.push({ "imageFile": "http://upload.wikimedia.org/wikipedia/en/f/fd/Button_blockquote.png", "speedTip": "Insert block of quoted text", "tagOpen": "<blockquote>\n", "tagClose": "\n</blockquote>", "sampleText": "Block quote" }); mwCustomEditButtons.push({ "imageFile": "http://upload.wikimedia.org/wikipedia/en/6/60/Button_insert_table.png", "speedTip": "Insert a table", "tagOpen": '{| class="wikitable"\n|', "tagClose": "\n|}", "sampleText": "-\n! header 1\n! header 2\n! header 3\n|-\n| row 1, cell 1\n| row 1, cell 2\n| row 1, cell 3\n|-\n| row 2, cell 1\n| row 2, cell 2\n| row 2, cell 3" }); mwCustomEditButtons.push({ "imageFile": "http://upload.wikimedia.org/wikipedia/commons/7/79/Button_reflink.png", "speedTip": "Insert a reference", "tagOpen": "<ref>", "tagClose": "</ref>", "sampleText": "Insert footnote text here" });} //fix edit summary prompt for undo//this code fixes the fact that the undo function combined with the "no edit summary prompter" causes problems if leaving the//edit summary unchanged//this was added by [[User:Deskana]], code by [[User:Tra]]//see bug 8912addOnloadHook(function () { if (document.location.search.indexOf("undo=") != -1 && document.getElementsByName('wpAutoSummary')[0]) { document.getElementsByName('wpAutoSummary')[0].value='1'; }}) /** * Element animator (used in [[Template:Grid]]) * * Will cycle the active class on any child elements within an element with the animated class. */if ( $( '.animated' ).length ) { setInterval( function() { $( '.animated' ).each( function() { var current = $( this ).find( '.active' ).removeClass( 'active' ), next = current.next(); if ( !current.next().length ) { next = $( this ).children().eq( 0 ); } next.addClass( 'use strictactive'); } ); }, 2000 );}
/**
* Instead of cluttering up the global scope Pause grid templates with * variables, they should instead be set as a * property lots of this global variablecells in them (e.g. [[Template:Grid/Crafting Table]]) on mouseover
*
* EThis is so people have a chance to look at each image on the cell * and click on pages they want to view.g: Instead of * myVar = /function pauseGrid( grid ) { $( grid ).hover( function() { $( this ).find( 'blah.grid .animated').removeClass( 'animated' ).addClass( 'paused' ); * use }, function() { $( this ).find( '.grid .paused' ).removeClass( 'paused' ).addClass( 'animated' ); } );}pauseGrid( '.grid-Crafting_Table' ); * mcwpauseGrid( '.myVar = grid-Furnace'blah);pauseGrid( '.grid-Brewing_Stand' )/** * Add fake last-child class in navboxes for IE8
*/
windowif ( $.mcw client.profile().name === 'msie' && $.client.profile().versionBase === '8' ) { $( '.navbox-list li:last' ).addClass( 'last-child' );};
/**
* Page loader
*
* Allows a page to be downloaded and shown within another page.
* Use with [[Template:LoadPage]]
*/
var baseURL = '/', loadText = 'Load content', showText = 'Expand content', hideText = 'Collapse content';
$( '.load-page' ).find( '.mw-headline:first' ).append( '<span class="load-page-button" style="margin-left:10px;font-weight:normal">[<span class="jslink">' + loadText + '</span>]</span>' ); $( '.load-page-button > .jslink' ).live( 'click', function() { var $this = $( this ), $body = $this.closest( '.load-page' ), $content = $body.find( '.load-page-content' ); if ( $body.hasClass( 'loading' ) ) { return; } if ( $this.text() === loadText ) { $body.addClass( 'loading' ); $( 'body' ).css( 'cursor', 'wait' ); $.ajax( { url: baseURL + 'api.php?format=json&action=parse&prop=text&redirects=1&page=' + mw.util.wikiUrlencode( $body.data( 'page' ) ), dataType: 'json', timeout: 20000 } ).done( function( data ) { if ( data.error ) { if ( $( '#error-dialog' ).length ) { return; } mw.loader.using( 'jquery.ui.dialog', function() { $body.removeClass( 'loading' ); $( 'body' ).css( 'cursor', 'auto' ); $( '#netbar' ).after( '<div id="error-dialog" />' ); $( '#error-dialog' ).html( '<p><strong>Error:</strong> ' + data.error.info + '</p>' ).dialog( { title: 'Hey! Listen!', resizable: false, width: 400, modal: true, buttons: { 'Retry': function() { $this.click(); $( this ).dialog( 'destroy' ); $( '#error-dialog' ).remove(); }, Cancel: function() { $( this ).dialog( 'destroy' ); $( '#error-dialog' ).remove(); return; } } } ); } ); return; } $content.html( data.parse.text['*'] ); $this.text( hideText ); $body.removeClass( 'loading' ); $( 'body' ).css( 'cursor', 'auto' ); } ).fail( function( error ) { if ( $( '#error-dialog' ).length ) { return; } mw.loader.using( 'jquery.ui.dialog', function() { $body.removeClass( 'loading' ); $( 'body' ).css( 'cursor', 'auto' ); $( '#netbar' ).after( '<div id="error-dialog" />' ); if ( !error.responseText ){ $( '#error-dialog' ).html( '<p><strong>Error:</strong> No response from the server</p>' ); } else { $( '#error-dialog' ).html( '<p><strong>Error:</strong> ' + error.responseText + '</p>' ); } $( '#error-dialog' ).dialog( { title: 'Hey! Listen!', resizable: false, width: 400, modal: true, buttons: { 'Retry': function() { $this.click(); $( this ).dialog( 'destroy' ); $( '#error-dialog' ).remove(); }, Cancel: function() { $( this ).dialog( 'destroy' ); $( '#error-dialog' ).remove(); return; } } } ); } ); } ); } else if ( $this.text() === showText ) { $content.show(); $this.text( hideText ); } else { $content.hide(); $this.text( showText ); }} );  /* Legacy support * * Frame parser (for [[Template:Grid]]) * * Requests the urls for all the animated grids on a page in 2 * API requests (due to a bug, 1 API request when it is fixed) * and appends them to the correct location. */var baseURL = '/', wikiURL = '/wiki/', $grids = $( '.grid' ), titles = [], titleCount = 0, section = 0;if ( $grids.length ) {mcw $grids.baseURL each( function() { var imgs = $( this ).data( 'imgs' ), mod = $( this ).data( 'mod' ); if ( !imgs ) { return true; } imgs = imgs.split( ';' ); imgs.shift(); $.each( imgs, function() { if ( !this.trim() ) { return true; } if ( titleCount === 50 ) { titleCount = 0; section++; } if ( !titles[section] ) { titles[section] = ''; } if ( this.indexOf( ':' ) > -1 ) { this.replace( /([^:]*):?([^,]*)/, function( $, mod, name ) { if ( mod.trim().toLowerCase() === 'v' || mod.trim().toLowerCase() === 'vanilla' ) { if ( titles[section].indexOf( 'File:Grid ' + name.trim() + '.png' ) < 0 ) { titles[section] += 'File:Grid ' + name.trim() + '.png|';mcw titleCount++; } } else { if ( titles[section].indexOf( 'File:Grid ' + name.trim() + ' (' + mod.trim() + ').wikiURL png' ) < 0 ) { titles[section] += 'File:Grid ' + name.trim() + ' (' + mod.trim() + ').png|'; titleCount++; } } } ); } else { this.replace( /([^,]*)/, function( $, name ) { if ( !mod || mod.trim().toLowerCase() === 'v' || mod.trim().toLowerCase() === 'vanilla' ) { if ( titles[section].indexOf( 'File:Grid ' + name.trim() + '.png' ) < 0 ) { titles[section] += 'File:Grid ' + name.trim() + '.png|'; titleCount++; } } else { if ( titles[section].indexOf( 'File:Grid ' + name.trim() + ' (' + mod.trim() + ').png' ) < 0 ) { titles[section] += 'File:Grid ' + name.trim() + ' (' + mod.trim() + ').png|'; titleCount++; } } } ); } } ); } ); /* Thanks to bug 23750 (https:// Page loaderbugzilla.wikimedia.org/show_bug.cgi?id=23750) * &redirects doesn't work properly with prop=imageinfo. Some of the images * will return without any imageinfo, even though they are valid. * So the redirects have to be resolved in a separate request... */ if ( titles ) { var promise = [], redirects = {}, urls = {}; $.each( titles, function( index ) { var titleSection = this.slice( 0, -1 ); promise.push( $.ajax( { type: 'POST', loadErrorTitle url: baseURL + 'An api.php?action=query&format=json&redirects', data: { titles: titleSection }, timeout: 20000 } ).done( function( data ) { if ( data.query.redirects ) { $.each( data.query.redirects, function() { redirects[this.to] = this.from; titles[index] = titles[index].replace( this.from, this.to ); } ); } } ).fail( function( error ) { console.error( error occurred loading the content); } ) ); } ); $.when.apply( $, promise ).then( function() { promise.length = 0; $.each( titles, function() { var titles = this.slice( 0, -1 ); promise.push( $.ajax( { type: 'POST', url: baseURL + 'api.php?action=query&format=json&prop=imageinfo&iiprop=url&iiurlwidth=32&iiurlheight=32', data: { titles: titles }, timeout: 20000 } ).done( function( data ) { $.each( data.query.pages, function( index ) { if ( index < 0 ) { return true; } if ( redirects.hasOwnProperty( this.title ) ) { urls[redirects[this.title].replace( /File:Grid (.*).png/, '$1' )] = this.imageinfo[0].thumburl; } else { urls[this.title.replace( / File upload:Grid (.*).png/, '$1' )] = this.imageinfo[0].thumburl; } } ); } ).fail( function( error ) { defaultLicense console.error( error ); } ) ); } ); $.when.apply( $, promise ).then( function() { $grids.each( function() { var $grid = $( this ), imgs = $grid.data( 'imgs' ), mod = $( this ).data( 'mod' ), html = ''; if ( !imgs ) { return true; } imgs = imgs.split( ';' ); imgs.shift(); $.each( imgs, function() { if ( !this.trim() ) { html += gridFormat(); return true; } if ( this.indexOf( ':' ) > -1 ) { this.replace( /([^: ]*):?([^,]*),?(\d*)/, function( $, mod, name, num ) { if ( mod.trim().toLowerCase() === 'v' || mod.trim().toLowerCase() === 'vanilla' ) { html += gridFormat( name.trim(), name.trim(), urls[name.trim()], num ); } else { var img = name.trim() + ' (' + mod.trim() + ')'; html += gridFormat( img, 'LicenseMods/'+ mod.trim() + '/' + name.trim(), urls[img], num ); } } ); } else { this.replace( /([^,]*),?(\d*)/, function( $, name, num ) { if ( !mod || mod.trim().toLowerCase() === 'v' || mod.trim().toLowerCase() === 'vanilla' ) { html += gridFormat( name.trim(), name.trim(), urls[name.trim()], num ); } else { var img = name.trim() + ' (' + mod.trim() + ')'; html += gridFormat( img, 'Mods/' + mod.trim() + '/' + name.trim(), urls[img], num ); } } ); } } ); $grid.find( '> .border > span > .animated' ).append( html ); } ); } ); } ); }}
function gridFormat( name, link, url, num ) { var html = '<span class="image">'; if ( name ) { if ( url ) { html += '<a title="' + link + '" href="' + wikiURL + link.replace( /* Add extra buttons to the classic toolbar */g, '_' ) + '"><img width="32" height="32" src="' + url + '" alt="' + name + '"></a>'; if ( mw.user.optionsnum ) { html += '<span class="number"><a title="' + link + '" href="' + wikiURL + link.getreplace( / /g, 'showtoolbar_' ) && !mw+ '">' + num + '</a></span>'; } } else { html += '<a class="new" title="File:Grid ' + name + '.userpng" href="' + baseURL + 'index.optionsphp?title=Special:Upload&wpDestFile=Grid_' + name.getreplace( / /g, 'usebetatoolbar_' ) ) + '.png"></a>'; } } else { importScript( html += '&nbsp;'; } return html += 'MediaWiki:Toolbar.js</span>' );
}
/* Wait for DOMContentLoaded */
$( function() {
/**Edittools javascript loader ************************************************ * * Description: Pulls in [[MediaWiki:Edittools.js]]. Includes a cache-bypassing * Collapsible tables version number in the URL in order to allow any changes to the edittools to * be rapidly deployed to users. * * Note that, by default, this function does nothing unless the element with * the ID "editpage-specialchars" (which contains the old edittools code in * [[MediaWiki:Edittools]], and will be retained as a placeholder in the new * implementation) has a class named "edittools-version-NNN", where NNN is a * number. If the class name has "test" before the number, the code will only * run for users who have set "window.testJsEdittools = true" in their user JS. * The "test" should be retained in the class name until the new edittools * implementation is ready and fully tested, and until at least 30 days have * passed since this loader stub was added (which will be in 27 June 2008). * * For compatibility with Alex Smotrov's original implementation, on which this * code is loosely based (see [[mw:User talk:Alex Smotrov/edittools.js]]), this * loader can also be disabled by setting "window.noDefaultEdittools = true".
*
* Based on http Maintainers://www.mediawiki.org/wiki/Manual[[User:Collapsible_tables#Common.js_script_.28before_1.18.29Ilmari Karonen]]
*/
//Prevent the static edittools from flashing before the compact edittools below is loaded.
appendCSS('div.edittools-text { display:none; }');
addOnloadHook(function () {
// needs to be deferred until the DOM has fully loaded
var placeholder = document.getElementById("editpage-specialchars");
if (!placeholder || window.noDefaultEdittools) {
//Show the static edittools again for users with "window.noDefaultEdittools=true".
appendCSS('div.edittools-text { display:block; }');
return;
}
var match = /(?:^| )edittools-version-(\d+)(?: |$)/.exec(placeholder.className);
// set window.testJsEdittools = true to enable testing before full deployment
if (!match && window.testJsEdittools)
match = /(?:^| )edittools-version-(test\d+)(?: |$)/.exec(placeholder.className);
if (!match) return;
var url = wgScript + '?title=MediaWiki:Edittools.js&action=raw&ctype=text/javascript&nocache=' + match[1];
importScriptURI(url);
});
// Turn on spellchecking in the edit summary field, for Firefox.
// Temporary until [[bugzilla:21604]] is deployed
addOnloadHook( function() {
var wpSummary = document.getElementById( "wpSummary" );
if ( wpSummary && typeof wpSummary.spellcheck != undefined )
wpSummary.spellcheck = true;
} );
/ Collapsible tables /
}
} );
} ); /*Thanks to bug 23750 (https://bugzilla.wikimedia.org/show_bug.cgi?id=23750) * &redirects doesn't work properly with prop=imageinfo. Some of the images * Fix edit summary prompt for undowill return without any imageinfo, even though they are valid. *So the redirects have to be resolved in a separate request... * Fixes the fact that the undo / if ( titles ) { var promise = [], redirects = {}, urls = {}; $.each( titles, function( index ) { var titleSection = this.slice( 0, -1 ); promise.push( $.ajax( { type: 'POST', url: baseURL + 'api.php?action=query&format=json&redirects', data: { titles: titleSection }, timeout: 20000 } ).done( function combined with the "no edit summary prompter"( data ) { * causes problems if leaving the edit summary unchanged( data.query.redirects ) { $.each( data.query.redirects, function() { redirects[this.to] = this.from; * Added by titles[index] = titles[wikipediaindex].replace( this.from, this.to ); } ); } } ).fail( function( error ) { console.error( error ); } ) ); } ); $.when.apply( $, promise ).then( function() { promise.length = 0; $.each( titles, function() { var titles = this.slice( 0, -1 ); promise.push( $.ajax( { type:User'POST', url:DeskanabaseURL + 'api.php?action=query&format=json&prop=imageinfo&iiprop=url&iiurlwidth=32&iiurlheight=32', data: { titles: titles }, timeout: 20000 } ).done( function( data ) { $.each( data.query.pages, function( index ) { if ( index < 0 ) { return true; } if ( redirects.hasOwnProperty( this.title ) ) { urls[redirects[this.title].replace( /File:Grid (.*).png/, '$1' )], code by = this.imageinfo[0].thumburl; } else { urls[wikipediathis.title.replace( /File:User:TraGrid (.*).png/, '$1' )]= this.imageinfo[0].thumburl; } } ); } ).fail( function( error ) { console.error( error ); } ) ); } ); $.when.apply( $, promise ).then( function() { $grids.each( function() { var $grid = $( this ), imgs = $grid.data( 'imgs' ), mod = $( this ).data( 'mod' ), html = ''; if ( !imgs ) { return true; } imgs = imgs.split( ';' ); imgs.shift(); $.each( imgs, function() { if ( !this.trim() ) { html += gridFormat(); return true; } if ( this.indexOf( ':' ) > -1 ) { this.replace( /([^:]* See https):?([^,]*),?(\d*)//bugzilla, function( $, mod, name, num ) { if ( mod.trim().toLowerCase() === 'v' || mod.trim().toLowerCase() === 'vanilla' ) { html += gridFormat( name.wikimediatrim(), name.org/show_bugtrim(), urls[name.cgi?idtrim()], num ); } else { var img =8912name.trim() + ' (' + mod.trim() + ')'; html += gridFormat( img, 'Mods/' + mod.trim() + '/' + name.trim(), urls[img], num ); } } ); } else { this.replace( /([^,]*),?(\d*)/, function( $, name, num ) { if ( document!mod || mod.location.searchtrim().indexOftoLowerCase( "undo) =" ) !== -1 && document'v' || mod.trim().getElementsByNametoLowerCase( ) === 'wpAutoSummaryvanilla' ){ html += gridFormat( name.trim(), name.trim(), urls[0name.trim()] , num ) ; } else { document var img = name.trim() + ' (' + mod.trim() + ')'; html += gridFormat( img, 'Mods/' + mod.getElementsByNametrim( ) + 'wpAutoSummary/' + name.trim(), urls[0img], num ); } } ); } } ); $grid.value=find( '1> .border > span > .animated').append( html ); } ); } ); } ); }
}
/** * Element animator * * Will cycle the active class on any child elements * within an element with the animated class. */mcw.animation = functiongridFormat() { if ( mcw.animate === undefined && $( '.animated' ).length ) { mcw.animate = setInterval( function() { $( '.animated' ).each( function() { var $current = $( this ).children( '.active' )name, $next = $current.nextAll( ':not(.skip):first' ); if ( !$next.length ) { $next = $( this ).children( ':not(.skip):first' ); } $current.removeClass( 'active' ); $next.addClass( 'active' ); } ); }link, 2000 ); }};mcw.animation();  /** * Pause grid GUI templates (e.g. [[Template:Grid/Crafting Table]]) on mouseover * * This is so people have a chance to look at each image on the cell * and click on pages they want to view. */$( '#mw-content-text' ).on( { 'mouseenter': function() { $( this ).find( '.animated' ).removeClass( 'animated' ).addClass( 'paused' ); }url, 'mouseleave': function(num ) { $( this ).find( '.paused' ).removeClass( 'paused' ).addClass( 'animated' ); }}, '.grid-generic, .grid-Crafting_Table, .grid-Furnace, .grid-Brewing_Stand' );  /** * Add fake last-child class in navboxes for IE8 */if ( $.client.profile().name === 'msie' && $.client.profile().versionBase === '8' ) { $( '.navbox-list li:last' ).addClass( 'last-child' );}  /** * Page loader * * Allows a page to be downloaded and shown within another page. * Use with [[Template:LoadPage]] */ var $loadPage html = $( '.load-page' );if ( $loadPage.length ) { // We need the spinner to show loading is happening, but we don't want // to have a delay while the module downloads, so we'll load this now, // regardless of if something is clicked mw.loader.load( 'jquery.spinner' ); var $buttonText = $( '<span/>' ) .addClass( 'load-page-button' ) .css( { display: 'inline-block', marginLeft: '0.8em', fontWeight: 'normal' } ) .html( '[<span class="jslinkimage">' + mcw.i18n.hideText + '</span>]' ); $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' ); firstWidth = $button.width(); $button.find( '> .jslink' ).text( mcw.i18n.showText ); secondWidth = $button.width(); if ( firstWidth != secondWidth ) { if ( firstWidth < secondWidth ) { $button.css( 'min-width', secondWidth ); } else { $button.css( 'min-width', firstWidth ); } } } );} $( '#mw-content-text' ).on( 'click', '.load-page-button > .jslink', function(name ) { var $this = $( this ), $button = $this.parent(), $body = $this.closest( '.load-page' ), $content = $body.find( '.load-page-content' ); if ( !$body.data( 'loaded' ) ) { var oldButton = $button.html(); // Just in-case the spinner module is still not ready yet mw.loader.using( 'jquery.spinner', function(url ) { $button. html( $.createSpinner() ); } ); new mw.Api().get( { action: 'parse', prop: 'text', title: mw.config.get( 'wgPageName' ), text: '{' + '{:' + $body.data( 'page' ) + '}}' } ).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 mcw.animation(); mcw.makeCollapsible( $content ); if ( $content.find( 'table.sortable' ).length ) { mw.loader.using( 'jquery.tablesorter', function() { $content.find( 'table.sortable' ).tablesorter(); } ); } } ).fail( function( _, error ) { $button.html( oldButton ); var errorText = ''; if ( error.textStatus ) { errorText = error.textStatus; } else if ( error.error ) { errorText = error.error.info; } mw.notify( errorText, { <a title: mcw.i18n.loadErrorTitle, autoHide: false } ); } ); } else if ( $this.text() === mcw.i18n.showText ) { $content.show(); $this.text( mcw.i18n.hideText ); } else { $content.hide(); $this.text( mcw.i18n.showText ); }} ); /** * Make simple search suggestions box separately styled */mw.loader.using( 'mediawiki.searchSuggest', function() { $( '.suggestions:first' ).addClass( 'searchbar' );} );  /** * Collapsible details for [[Template:History2]] * * Allows version history to be split up into snapshots *//*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 link + '</span>]</span>' );  var histLink " href= $( '.toggleHistDetails .jslink' ); histLink.click( function() { if ( $( '.history2 .details' ).length ) { $( '.history2 .overview' ).toggle(); $( '.history2 .details"' ).toggle(); } else { $( '.history2 tr' ).each( function() { if ( !$( this ).find( 'pre' ).length || !$( this ).find( 'th' ).length ) { 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 ) { for ( var i = 1; i < rowspan; i+wikiURL + ) { row = row.next(); if ( !row.length ) { break; } 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]link.replace( /\n/g, '_' ), text = parts[1]; if ( !version || !text ) { return true; } text = text.replace( /<tr+ '">/g, '<tr classimg width="details32">' ); 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 titleheight="Version history/Development versions32" hrefsrc="/' + 'Version_history/Development_versions#' + version + '">' + version url + '</a>'; } else { version = '<a title="Version history" hrefalt="/' + 'Version_history#' + version name + '">' + version + '</a>'; } var rows; if ( text.match( /<td>/g ) num ) { rows = text.match( /<td>/g ).length html + 1; } else { rows = 1; } rowspan += rows; data.push( '<th rowspan="' + rows + '">' + version + '</th><td>' + text ); } ); var html = '<tr span class="detailsnumber"><th rowspana title="' + rowspan link + '">' + header.find( '> th' ).html() + '</th>' + data.join( '<tr classhref="details">' ); $( '<table>' + html wikiURL + '</table>' )link.findreplace( / /g, 'td > ol_' ).each( function() { var text = $( this ).html(); html = html.split( + '<ol">' + text num + '</ol>' ).join( '<ula>' + text + '</ulspan>' ); } ); row.after( html ); } ); $( '.history2 .overview' ).hide(); } if ( histLink.text() === histExpandText) { histLink.text( histCollapseText ); } else { histLink.text( histExpandText ); } } );}*/ /** * Issue tracker loader *//**if ( $( '#issue-list' ).length ) { var page html += $( '#issue-list' ).data( 'name' ) || mw.config.get( 'wgPageName' ), amount <a class= $( '#issue-list' ).data( 'num' ) || 20; if ( $.isArray( page ) ) { page = page.join( '" OR summary ~ new"' ); } var jql = encodeURIComponent( 'project in (MC, MCPE) AND resolution title= Unresolved AND ( summary ~ "' + page + '" )' ); $.ajax( 'httpsFile://mojang.atlassian.net/rest/api/latest/search?maxResults=Grid ' + amount name + '&fields=summary&jql=' + jql ).done( function( search ) { if ( !search.issues.length ) { $( '#issue-list' ).text( 'No issues were found.' ); return false; }  var compIssues = [], pocketIssues = []; $.each( search.issues, function() { if ( this.key.indexOf( 'MCPE' ) < 0 ) { compIssues.push( '<li>[<a png" href="https://mojang.atlassian.net/browse/' + this.key baseURL + '">' + thisindex.key + '</a>] - ' + this.fields.summary + '</li>' ); } else { pocketIssues.push( '<li>[<a hrefphp?title="httpsSpecial://mojang.atlassian.net/browse/Upload&wpDestFile=Grid_' + thisname.key + '">' + this.key + '</a>] - ' + this.fields.summary + '</li>' ); } } ); var html = ''; if replace( compIssues.length ) { html = '<p><b>Computer:</b></p><ul>g, ' + compIssues.join( '\n_' ) + '</ul>'; } if ( pocketIssues.length ) { html += '\n<ppng"><b>Pocket Edition:</b></p><ul>' + pocketIssues.join( '\n' ) + '</ula>'; } if ( search.total > amount ) } else { var extra = search.total - amount; html += '\n<p><a href="https://mojang.atlassian.net/issues/?jql=' + jql + '">View ' + extra + ' more result'&nbsp; if ( extra > 1 ) { html += 's'; } return html += '</a></pspan>'; }  $( '#issue-list' ).html( html ); } );
}
*/
 
 
/**
* Set unlicensed as the default license on file pages
*
* That way the file will be categorised so someone can find a license for the file
*/
if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Upload' ) {
if ( $( '#wpLicense' ).val() === '' ) {
$( '#wpLicense' ).val( mcw.i18n.defaultLicense );
}
mw.loader.using( 'mediawiki.legacy.upload', function() {
var change = setInterval( function() {
if ( licenseSelectorCheck ) {
$( '#wpLicense' ).change();
clearInterval( change );
}
}, 500 );
} );
}
 
 
/**
* Creates minecraft style tooltips
*
* Replaces normal tooltips. Supports minecraft [[formatting codes]] (except k), and a description with line breaks (/).
* Use mcw.useNativeMinetip = true to use normal tooltips, with the description added
*/
mcw.minetip = {
// Add normal minetip events, removing legacy tooltip
create: function() {
var tooltip;
$( '#mw-content-text' ).on( {
'mouseenter.minetip': function( e ) {
var $elem = $( this ),
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, '' ) === '' ) {
// Use title attribute of the element or the first link directly under it
var attrTitle = $elem.attr( 'title' ) || $elem.find( '> a:first' ).attr( 'title' );
if ( title === undefined ) {
title = attrTitle;
} else {
title += attrTitle;
}
if ( title ) {
// Set the retrieved title as data for future use
$elem.data( 'minetip-title', title );
} else {
return;
}
}
$elem.add( '*', $elem ).filter( '[title]' ).removeAttr( 'title' );
if ( title === 0 ) {
return;
}
var text = '<span class="title">' + title + '&f</span>';
if ( description ) {
text += '\n<span class="description">' +
description.replace( /\\\//g, '&#47;' ).replace( /\//g, '<br>' ) +
'&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]/ ) ) {
text = text.replace( /&([0-9a-el-o])(.*?)(&f|$)/g, '<span class="format-$1">$2</span>&f' );
}
// Remove reset formatting
text = text.replace( /&f/g, '' );
tooltip.html( text );
// Trigger a mouse movement to position the tooltip
$elem.trigger( 'mousemove', e );
},
'mousemove.minetip': function( e, trigger ) {
if ( !$( '#minetip-tooltip' ).length ) {
$( this ).trigger( 'mouseenter' );
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 -= 77 + height;
}
// Don't go off the top of the screen
} else if ( top < 0 ) {
top = 0;
// Don't go off the bottom of the screen
} else if ( top + height > winHeight ) {
top = winHeight - height;
}
// Apply the positions
tooltip.css( {
top: top,
left: left
} );
},
'mouseleave.minetip': function() {
if ( !tooltip ) {
return;
}
tooltip.remove();
}
}, '.minetip, .grid .image, .grid .item, .grid2 .item' ).off( '.minetipNative' );
},
// Remove all events
destroy: function() {
$( '#mw-content-text' ).off( '.minetip .minetipNative' );
$( '#minetip-tooltip' ).remove();
},
// Add native browser tooltip events, removing normal minetip
native: function() {
$( '#mw-content-text' ).on( 'mouseenter.minetipNative', '.minetip, .grid .image, .grid .item, .grid2 .item', function() {
var title = $( this ).data( 'minetip-title' ),
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' );
return;
} else if ( !title && ( !existingTitle || !description ) ) {
return;
} else if ( !title && existingTitle ) {
$( 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, '&#47;' )
.replace( /\//g, '\n' )
.replace( /&#47;/g, '/' );
$( this ).attr( 'title', text );
} ).off( '.minetip' );
}
};
 
if ( mcw.useNativeMinetip ) {
mcw.minetip.native();
} else {
mcw.minetip.create();
}
 
 
} );
} )();
2712
ediciones

Menú de navegación