Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
function makeMediaTool() {
	const mediaTemplate = [ {
		type: 'mwTransclusionBlock',
		attributes: {
			mw: {
				parts: [ {
					template: {
						target: {
							href: 'Template:Media',
							wt: 'Media'
						},
						params: {
							1: {
								wt: 'Filename.ext'
							}
						}
					}
				} ]
			}
		}
	}, {
		type: '/mwTransclusionBlock'
	} ];

	function InsertAndOpenCommand( name, options ) {
		InsertAndOpenCommand.parent.call( this, name, null, null, options );
	}
	OO.inheritClass( InsertAndOpenCommand, ve.ui.Command );

	InsertAndOpenCommand.prototype.execute = function( surface, args ) {
		args = args || this.args;
		surface.getModel().getFragment().collapseToEnd().insertContent( args[0], args[1] ).select();
		surface.execute( 'window', 'open', 'transclusion' );
		return true;
	};

	ve.ui.commandRegistry.register(
		new InsertAndOpenCommand( 'mediaCommand', {
			args: [ mediaTemplate, false ],
			supportedSelections: [ 'linear' ]
		} )
	);

	function MediaTool() {
		MediaTool.parent.apply( this, arguments );
	}
	OO.inheritClass( MediaTool, ve.ui.MWTransclusionDialogTool );

	MediaTool.static.name = 'media';
	MediaTool.static.group = 'insert';
	MediaTool.static.title = 'Media';
	MediaTool.static.commandName = 'mediaCommand';
	ve.ui.toolFactory.register( MediaTool );

}

mw.hook( 've.loadModules' ).add( addPlugin => addPlugin( makeMediaTool ) );