MediaWiki:Gadget-DiffDialog.js

Från Wikipedia

OBS: Efter du har publicerat sidan kan du behöva tömma din webbläsares cache för att se ändringarna.

  • Firefox / Safari: Håll ned Skift och klicka på Uppdatera sidan eller tryck Ctrl-F5 eller Ctrl-R (⌘-R på Mac)
  • Google Chrome: Tryck Ctrl-Skift-R (⌘-Skift-R på Mac)
  • Internet Explorer / Edge: Håll ned Ctrl och klicka på Uppdatera eller tryck Ctrl-F5
  • Opera: Tryck Ctrl-F5.
$( function () {
	'use strict';
	$( '.mw-changeslist' ).on( 'mouseover', '.mw-changeslist-diff', function( e ) {
		var rev = $( e.target ).closest( 'li' ).attr( 'data-mw-revid' );
		if ( rev ) {
			( new mw.Api() ).get( {
				action: 'compare',
				fromrev: rev,
				torelative: 'prev',
				formatversion: 2
			} ).done( function( data ) {
				var compare = data.compare;
				var body;
				var title;
				var str;
				// Creating and opening a simple dialog window.

				// Subclass Dialog class. Note that the OOjs inheritClass() method extends the parent constructor's prototype and static methods and properties to the child constructor.

				function MyDialog( config ) {
					MyDialog.super.call( this, config );
				}
				var myDialog;
				if ( compare ) {
					body = compare.body;
					if ( compare.fromtitle && compare.totitle ) {
						if ( compare.fromtitle === compare.totitle ) {
							title = compare.fromtitle;
						}
					}
					if ( body ) {
						str = '<table class="diff">';
						if ( title ) {
							str += '<caption>' + mw.html.escape( title ) + '</caption>';
						}
						str += '<tbody>' + body + '</tbody></table>';
						OO.inheritClass( MyDialog, OO.ui.Dialog );

						// Specify a title statically (or, alternatively, with data passed to the opening() method).
						MyDialog.static.name = 'gadgetdiffdialogdialog';
						MyDialog.static.title = 'Simple dialog';

						// Customize the initialize() function: This is where to add content to the dialog body and set up event handlers.
						MyDialog.prototype.initialize = function () {
							// Call the parent method
							MyDialog.super.prototype.initialize.call( this );
							// Create and append a layout and some content.
							this.content = new OO.ui.PanelLayout( { padded: true, expanded: false } );
							this.content.$element.append( str );
							this.$body.append( this.content.$element );
							$( '.oo-ui-windowManager' ).click( function( e ) {
								if ( !$( e.target ).parents().filter( '.oo-ui-window' ).length ) {
									myDialog.close();
								}
							} );
						};

						// Use the getTeardownProcess() method to perform actions whenever the dialog is closed.
						// This method provides access to data passed into the window's close() method
						// or the window manager's closeWindow() method.
						MyDialog.prototype.getTeardownProcess = function ( data ) {
							return MyDialog.super.prototype.getTeardownProcess.call( this, data )
							.first( function () {
								// Perform any cleanup as needed
								$( '.oo-ui-windowManager' ).remove();
								$( 'body' ).attr( 'style', '' );
							}, this );
						};

						// Make the window.
						myDialog = new MyDialog();

						// Create and append a window manager, which will open and close the window.
						var windowManager = new OO.ui.WindowManager();
						$( 'body' ).append( windowManager.$element );

						// Add the window to the window manager using the addWindows() method.
						windowManager.addWindows( [ myDialog ] );

						// Open the window!
						windowManager.openWindow( myDialog );
					}
				}
			} );
		}
	} );
} );