MediaWiki:Gadget-references.js: Różnice pomiędzy wersjami

Z Wikisłownika – wolnego słownika wielojęzycznego
Usunięta treść Dodana treść
zapamietaj stan zwiniecia/rozwiniecia pomiedzy zaladowaniami strony (Specjalna:Diff/7454770)
zapamietaj stan za pierwszym kliknieciem
Linia 139: Linia 139:
referencesGadget.changeLanguage.call( referencesGadget.gui.$select.get( 0 ) );
referencesGadget.changeLanguage.call( referencesGadget.gui.$select.get( 0 ) );
mw.storage.set( storageAutostartKey, "1" );
};
};



Wersja z 18:45, 29 paź 2020

/*
 * @author: [[:pl:User:Beau]], [[:pl:User:Peter Bowman]]
 */

var referencesGadget = mw.libs.referencesGadget = {
		version: 14,
		categories: [],
		templates: {},
		gui: {},
		api: null
	},
	config = mw.config.get( [
		'wgNamespaceIds',
		'wgAction'
	] ),
	modules = [
		'ext.gadget.lib-toolbar',
		'ext.gadget.style-summary-buttons',
		'mediawiki.storage',
		'mediawiki.api',
		'jquery.textSelection'
	],
	cacheOpts = {
		maxage: 28800,
		smaxage: 600
	},
	$wpTextbox = null,
	storageAutostartKey = 'ext.gadget.references.autostart',
	storageSelectionKey = 'ext.gadget.references.selection';

referencesGadget.fetchLanguages = function () {
	referencesGadget.api.get( $.extend( {
		formatversion: 2,
		list: 'categorymembers',
		cmlimit: 'max',
		cmnamespace: config.wgNamespaceIds.category,
		cmtitle: 'Kategoria:Szablony źródeł'
	}, cacheOpts ) )
	.done( referencesGadget.gotLanguages );
};

referencesGadget.gotLanguages = function ( response ) {
	$.each( response.query.categorymembers, function ( i, obj ) {
		var matches;
		
		if ( obj.ns === config.wgNamespaceIds.category ) {
			matches = obj.title.match( /\((.+?)\)$/ );

			if ( matches ) {
				referencesGadget.categories.push( {
					title: matches[ 1 ],
					name: obj.title
				} );
			}
		}
	} );

	// sortuj nazwy
	referencesGadget.categories.sort( function ( a, b ) {
		return a.title.localeCompare( b.title, 'pl' );
	} );

	mw.libs.toolbarGadget.addButton( {
		icon: '//upload.wikimedia.org/wikipedia/commons/b/bf/Button_easy_cite_pl.png',
		title: mw.format( 'Wstawianie źródeł (wersja $1)', referencesGadget.version ),
		alt: 'Wstaw źródło',
		id: 'referencesGadgetButton',
		onclick: referencesGadget.showPanel
	} );
	
	if ( Number( mw.storage.get( storageAutostartKey ) ) ) {
		referencesGadget.showPanel();
	}
};

referencesGadget.fetchTemplates = function ( cmtitle ) {
	referencesGadget.api.get( $.extend( {
		formatversion: 2,
		list: 'categorymembers',
		cmlimit: 'max',
		cmnamespace: config.wgNamespaceIds.template,
		cmtitle: cmtitle,
		requestid: cmtitle
	}, cacheOpts ) )
	.done( referencesGadget.gotTemplates );
};

referencesGadget.gotTemplates = function ( response ) {
	var templates = [];

	$.each( response.query.categorymembers, function ( i, obj ) {
		if ( obj.ns === config.wgNamespaceIds.template ) {
			templates.push( obj.title.replace( /^Szablon:/, '' ) );
		}
	} );
	
	// sortuj
	templates.sort( function ( a, b ) {
		return a.localeCompare( b, 'pl' );
	} );
	
	referencesGadget.templates[ response.requestid ] = templates;
	referencesGadget.updateTemplateSelector( templates );
};

referencesGadget.showPanel = function () {
	var selected;
	
	if ( referencesGadget.gui.$panel ) {
		referencesGadget.gui.$panel.toggle();
		mw.storage.set( storageAutostartKey, Number( referencesGadget.gui.$panel.is( ':visible' ) ) );
		return;
	}
	
	referencesGadget.gui.$panel = $( '<div>' )
		.addClass( 'references-panel' )
		.append( 'Język: ' );
	
	referencesGadget.gui.$select = $( '<select>' )
		.appendTo( referencesGadget.gui.$panel )
		.on( 'change', referencesGadget.changeLanguage );

	selected = mw.storage.get( storageSelectionKey );

	$.each( referencesGadget.categories, function ( i, obj ) {
		$( '<option>' )
			.val( obj.name )
			.prop( 'selected', obj.name === selected )
			.append( obj.title )
			.appendTo( referencesGadget.gui.$select );
	} );

	referencesGadget.gui.$links = $( '<div>' )
		.addClass( 'userSummaryButtons' )
		.appendTo( referencesGadget.gui.$panel )
		.on( 'click', 'a', referencesGadget.insertTemplate );

	referencesGadget.gui.$panel.insertBefore( '#wpTextbox1' );
	
	referencesGadget.changeLanguage.call( referencesGadget.gui.$select.get( 0 ) );
	
	mw.storage.set( storageAutostartKey, "1" );
};

referencesGadget.changeLanguage = function () {
	var option = this.options[ this.selectedIndex ],
		cmtitle = option.value;

	mw.storage.set( storageSelectionKey, cmtitle );

	if ( referencesGadget.templates[ cmtitle ] ) {
		referencesGadget.updateTemplateSelector( referencesGadget.templates[ cmtitle ] );
	} else {
		referencesGadget.fetchTemplates( cmtitle );
	}
};

referencesGadget.updateTemplateSelector = function ( list ) {
	referencesGadget.gui.$links.empty();
	
	$.each( list, function ( i, title ) {
		$( '<a>' )
			.attr( 'title', title )
			.append( title )
			.appendTo( referencesGadget.gui.$links )
			.after( ' ' );
	} );
};

referencesGadget.insertTemplate = function () {
	var content = this.title;
	
	if (
		window.customReferencesArgs &&
		typeof customReferencesArgs[ this.title ] === 'string'
	) {
		content += customReferencesArgs[ this.title ];
	}
	
	$wpTextbox.textSelection( 'encapsulateSelection', {
		pre: '<ref>{' + '{' + content,
		post: '}}</ref>'
	} );
};

if ( [ 'edit', 'submit' ].indexOf( config.wgAction ) !== -1 ) {
	$.when(
		mw.loader.using( modules ),
		$.ready
	).done( function () {
		$wpTextbox = $( '#wpTextbox1' );
		referencesGadget.api = new mw.Api();
		referencesGadget.fetchLanguages();
	} );
}