User:KnightMiner/editSummaryPresets.js - minecraft.fandom.com

Treść tej podstrony pochodzi z artykułu „User:KnightMiner/editSummaryPresets.js” w domenie minecraft.fandom.com na licencji CC BY-NC-SA 3.0
/**
 * Function to append the summary
 */
var input;
function onSelectSummaries() {
	if (!input) {
		// find its input and cache for later
		var inputs = $('#wpSummaryWidget input');
		if(inputs.length === 0) {
			return;
		}
		input = inputs[0];
	}
	var newSummary = input.value;

	// Append old edit summary with space, if exists,
	// and last character != space
	if(newSummary.length > 0 && newSummary.charAt(newSummary.length - 1) !== ' ') {
		newSummary += ' ';
	}
	newSummary += this.options[this.selectedIndex].text;
	input.value = newSummary;
}

/**
 * Helper to create the option elements
 */
function createOption(optionText, username = null) {
	var option = document.createElement( 'option' );
	if(username) {
		optionText = optionText.replace( /\{user\}/g, username );
	}
	option.appendChild(document.createTextNode(optionText));
	return option;
}

/**
 * Function which adds the select dropdown in
 */
$(function() {
	// ensure the summar widget exists
	if(!document.getElementById('wpSummaryWidget')) {
		return;
	}

	// Create the dropdown box
	var dropdown = document.createElement('select');
	dropdown.style.width = "50%";
	dropdown.style.margin = "10px 4px 0 0";
	dropdown.onchange = onSelectSummaries;

	// Add the default "Summary presets" to the box
	var option = createOption('Summary presets');
	option.disabled = true;
	option.selected = true;
	dropdown.appendChild( option );

	// Add support for the {user} keyword
	mw.loader.using( 'mediawiki.api', function() {
		new mw.Api().get({
			action: 'query',
			titles: mw.config.get( 'wgPageName' ),
			prop: 'revisions',
			rvprop: 'user',
			formatversion: 2
		}).done(function({query: {pages}}) {
			
			// find the summary element again, as page load order causes the old reference to be invalid
			var summaryElement = document.getElementById('wpSummaryWidget');
			if(!summaryElement) {
				return;
			}

			// Add summaries based on user's variable
			// ensure we have data
			var username = null;
			if (!pages[0].missing) {
				username = pages[0].revisions[0].user;
			}
			for (var i=0; i < customSummaries.length; i++) {
				var summary = customSummaries[i];
				if(typeof summary === 'string') {
					dropdown.appendChild(createOption(summary, username));
				} else {
					// filter for namespaces if they exist
					if(summary.namespaces) {
						var namespace = mw.config.get('wgNamespaceNumber');
						var type = namespace % 2 ? "talk" : "main";
						// if we are not in the required namespace, skip
						if(!summary.namespaces.includes(namespace) && !summary.namespaces.includes(type)) {
							continue;
						}
					}
					// just a value? insert that
					if(summary.value) {
						dropdown.appendChild(createOption(summary.value, username));
					} else {
						// otherwise go for an optgroup
						var optgroup = document.createElement( 'optgroup' );
						optgroup.label = summary.label;
						for(var v = 0; v < summary.values.length; v++) {
							optgroup.appendChild(createOption(summary.values[v], username));
						}
						
						dropdown.appendChild(optgroup);
					}
				}
			}
			summaryElement.appendChild(dropdown);
		});
	});
});