Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

MediaWiki:Gadget-database-util.js: Difference between revisions

MediaWiki interface page
Content added Content deleted
mNo edit summary
mNo edit summary
Line 1: Line 1:
// ( function ( $, mw, psw ) {
( function ( $, mw, psw ) {
// 'use strict';
'use strict';


/*
/*
Line 180: Line 180:
$( selector ).empty()
$( selector ).empty()
.append( $( results.parse.text['*'] ) );
.append( $( results.parse.text['*'] ) );
$( selector + ' table' ).tablesorter();
mw.loader.using('jquery.tablesorter', function() {
$( selector + ' table' ).tablesorter();
} );
} );
} );
};
};
Line 188: Line 191:
Object.preventExtensions( SearchWidget );
Object.preventExtensions( SearchWidget );
pswiki.db = {
psw.db = {
QueryOptions: QueryOptions,
QueryOptions: QueryOptions,
DisplayOptions: DisplayOptions,
DisplayOptions: DisplayOptions,
Line 194: Line 197:
};
};
// } )( jQuery, mediaWiki, pswiki );
} )( jQuery, mediaWiki, pswiki );

Revision as of 00:45, 22 December 2021

( function ( $, mw, psw ) {
	'use strict';

	/*
	 * QueryOptions
	 */
	function QueryOptions() {
		this.queryParams = {};
		this.getters = {};
		
		this.fieldset = new OO.ui.FieldsetLayout( {
		    label: 'Query options',
		    items: []
		} );
	}
	
	QueryOptions.prototype.addButtonGroup = function( param, fieldOptions, widgetOptions ) {
		var toggleButtons = widgetOptions.items.map( function ( item ) {
			var btn = new OO.ui.ButtonOptionWidget( {
				data: item.data,
				label: item.label
			} );
			
			return btn;
		} );
			
		var widget = new OO.ui.ButtonSelectWidget( {
			items: toggleButtons,
			align: widgetOptions.align || 'left',
			multiselect: widgetOptions.multiselect || false
		} );
		
		this.fieldset.addItems( [
			new OO.ui.FieldLayout( widget, {
				label: fieldOptions.label,
				align: fieldOptions.align || 'top'
			} )
		] );
		
		this.getters[ param ] = function() {
			var selected = widget.findSelectedItems();
			
			if ( Array.isArray( selected ) ) {
				return selected.map( function ( item ) { 
					return item.getData();
				} );
			} else if ( selected !== null ) {
				return [ selected.getData() ];
			}
			
			return [];
		};
	};
	
	QueryOptions.prototype.addCheckbox = function ( param, fieldOptions, widgetOptions ) {
		var widget = new OO.ui.CheckboxInputWidget( {
	        selected: widgetOptions.selected || false
		} );
		
		this.fieldset.addItems( [
			new OO.ui.FieldLayout( widget, {
				label: fieldOptions.label,
				align: fieldOptions.align || 'inline'
			} )
		] );
		
		this.getters[ param ] = function() {
			var selected = widget.isSelected();
			
			if ( selected ) {
				return widgetOptions.dataTrue;
			}
			
			return widgetOptions.dataFalse;
		};
	};
	
	QueryOptions.prototype.addCheckboxMulti = function( param, fieldOptions, widgetOptions ) {
		
	};
	
	QueryOptions.prototype.getOptions = function() {
		var opts = {};
		
		for ( var key in this.getters ) {
			opts[ key ] = this.getters[ key ]();
		}
		
		return opts;
	};
	
	/*
	 * DisplayOptions
	 */
	function DisplayOptions() {
		this.displayOptions = {};
		
		this.fieldset = new OO.ui.FieldsetLayout( {
		    label: 'Display options',
		    items: []
		} );
	}
	
	DisplayOptions.prototype.addColumnSelector = function( columns ) {
	
	};
	
	DisplayOptions.prototype.getOptions = function() {
		
	};
	
	
	function SearchWidget( optionConfig, searchConfig ) {
		this.api = new mw.Api();
		
		this.fieldset = new OO.ui.FieldsetLayout();
		
		this.submitButton = new OO.ui.ButtonInputWidget( { 
			label: 'Search',
			flags: [ 'primary', 'progressive' ],
			align: 'left',
			icon: 'search'
		} );
		this.submitButton.on( 'click', this.search.bind( this ) );
		
		if ( optionConfig.queryOptions ) {
			this.queryOptions = optionConfig.queryOptions;
			this.fieldset.addItems( [
				optionConfig.queryOptions.fieldset
			] );
		}
		
		if ( optionConfig.displayOptions ) {
			this.fieldset.addItems( [
				optionConfig.displayOptions.fieldset
			] );
		}
		
		this.fieldset.addItems( [
	    	new OO.ui.FieldLayout( this.submitButton )
		] );
		
		this.tableSelector = searchConfig.selector;
		this.template      = searchConfig.template;
	}
	
	SearchWidget.prototype.search = function() {
		const params = [];
		
		if ( this.queryOptions ) {
			const options = this.queryOptions.getOptions();
			for ( var key in options ) {
				params.push( '|' + key + ' = ' + options[ key ] );
			}
		}
		
		if ( this.displayOptions ) {
			const options = this.displayOptions.getOptions();
			for ( var key in options ) {
				params.push( '|' + key + ' = ' + options[ key ] );
			}
		}

		var text = '{' + '{' +
			this.template + '\n' + 
			params.join('\n') + 
			'\n}}';
		console.log( text );
			
		var selector = this.tableSelector;
		
		this.api.get( {
			action: 'parse',
			title: mw.config.get( 'wgPageName' ),
			prop: 'text',
			text: text,
			maxage: 3600,
			smaxage: 3600
		} ).done( function( results ) {
			$( selector ).empty()
				.append( $( results.parse.text['*'] ) );
				
			mw.loader.using('jquery.tablesorter', function() {
				$( selector + ' table' ).tablesorter();
			} );
		} );
	};
	
	Object.preventExtensions( QueryOptions );
	Object.preventExtensions( DisplayOptions );
	Object.preventExtensions( SearchWidget );
	
	psw.db = {
		QueryOptions: QueryOptions,
		DisplayOptions: DisplayOptions,
		SearchWidget: SearchWidget
	};
		
} )( jQuery, mediaWiki, pswiki );
Cookies help us deliver our services. By using our services, you agree to our use of cookies.