MediaWiki:Gadget-tabbedwindow.js

/** * * tabbedWindow.js * * It embeds an OOUI tabbed window on all pages in the API namespace on MediaWiki.org. * Each tab of the window contains sample code in a programming language (PHP, Javascript, Python, etc.) * demonstrating the use of the MediaWiki Action API. * * @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-v3-or-Later * @licstart The following is the entire license notice for the JavaScript code in this gadget. * * Copyright (C) 2019 Jay Prakash  and contributors * * The JavaScript/Gadget code in this page is free software: you can * redistribute it and/or modify it under the terms of the GNU * General Public License (GNU GPL) as published by the Free Software * Foundation, either version 3 of the License, or (at your option) * any later version. The code is distributed WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU GPL for more details. * * As additional permission under GNU GPL version 3 section 7, you * may distribute non-source (e.g., minimized or compacted) forms of * that code without the copy of the GNU GPL normally required by * section 4, provided you include this license notice and a URL * through which recipients can access the Corresponding Source. * * @licend  The above is the entire license notice for the JavaScript/Gadget code in this gadget. */

( function {	'use strict';

/**	 * This function fetches sample code in different programming languages * from the sub-sections of the section "Sample Code" and places * them into an OOUI tabbed window. * 	 */	function makeTabWindow { var tabs = [];

$( '.mw-gadget-tabbedwindow' ).each( function {

$( this ).find( 'h3 > .mw-editsection' ).remove;

var indexLayout = new OO.ui.IndexLayout( {				expanded: false			} );

$( this ).find( 'h3' ).each( function {				var htmlcontent = '',					id;				id = $(this).find('span[class=mw-headline]').attr('id');				$('a[href="#'+ id +'"]').remove;				$( this ).nextUntil( 'h3' ).each(function{ htmlcontent += '\n' + $(this).prop( 'outerHTML' ); });

tabs.push( new OO.ui.TabPanelLayout( $( this ).text, { expanded: false, label: $( this ).text, content: [ new OO.ui.HtmlSnippet( htmlcontent ) ]				} )				);			} );

indexLayout.addTabPanels( tabs ); tabs = [];

var panelLayout = new OO.ui.PanelLayout( {				expanded: false,				framed: true,				content: [ indexLayout ]			} );

$( this ).empty.append( panelLayout.$element );

$( '.oo-ui-indexLayout-stackLayout > .oo-ui-panelLayout' ).css( 'padding', '0.5em' ); } );	}

$.when( mw.loader.using( 'mediawiki.Title' ), $.ready ).then( function {

var supportedNamespaces = [ 'API' ], action = mw.config.get( 'wgAction' ), namespace = mw.config.get( 'wgCanonicalNamespace' ), mwTitle = mw.Title.newFromText( mw.config.get( 'wgPageName' ) ), isTalkPage = mwTitle.isTalkPage, tabwindow = $( '.mw-gadget-tabbedwindow' ).length;

if ( action === 'view' &&			namespace.indexOf( supportedNamespaces ) !== -1 &&			!isTalkPage &&			tabwindow > 0		) { // Viewing an API subject page with tabs on it, let's make them nice! $.when( mw.loader.using( 'oojs-ui', 'oojs-ui-core' ), $.ready ).then( function {				makeTabWindow;			}); }	} );

} );