Javascript examples/DefaultSummaries

tbd @
/**  ============================================================
 * START Defaultsummaries
 * adds selection boxes for default edit summaries
 *
 * @source https://en.wikipedia.org/wiki/MediaWiki:Gadget-defaultsummaries.js
 * @version 01.08.2024, adapted for Wiki Aventurica
 * @author [[wpen:User:ErrantX]], [[wpen:User:MC10]] on https://en.wikipedia.org
 */
( function () { // Wrap with anonymous function
	var $summaryBox = $( '#wpSummary' ),
		minorSummaries = [
			'Interne Links korrigiert',
			'Rechtschreibung/Grammatik/Zeichensetzung korrigiert',
			'Formatfehler korrigiert',
			'Inhaltlicher Fehler korrigiert',
			'Unbegründete Inhaltsentfernung zurückgesetzt',
			'Spam/Vandalismus/Test zurückgesetzt'
		],
		articleSummaries = [
			'Inhalt hinzugefügt',
			'Quellen hinzugefügt',
			'Kategorien überarbeitet',
			'Externe Links überarbeitet',
			'Format überarbeitet',
			'Artikel überarbeitet',
			'[[Hilfe:Quellen|Unbelegte]] Spielweltinformationen entfernt'
		],
		nonArticleSummaries = [
			'Seite überarbeitet',
			'Fehler korrigiert'
		],
		talkPageSummaries = [
			'Frage',
			'Antwort',
			'Meinung',
			'Kommentar',
			'Vorschlag',
			'Hinweis',
			'Zustimmung',
			'Dank'
		];

	function addOptionsToDropdown( dropdown, optionTexts ) {
		dropdown.menu.addItems( optionTexts.map( function ( optionText ) {
			return new OO.ui.MenuOptionWidget( { label: optionText } );
		} ) );
	}

	function onSummarySelect( option ) {
		// Save the original value of the edit summary field
		var editsummOriginalSummary = $summaryBox.val(),
			canned = option.getLabel(),
			newSummary = editsummOriginalSummary;

		// Append old edit summary with space, if exists,
		// and last character != space
		if ( newSummary.length !== 0 && newSummary.charAt( newSummary.length - 1 ) !== ' ' ) {
			newSummary += ' ';
		}
		newSummary += canned;
		$summaryBox.val( newSummary ).trigger( 'change' );
	}

	function getSummaryDropdowns() {
		// For convenience, add a dropdown box with some canned edit
		// summaries to the form.
		var namespace = mw.config.get( 'wgNamespaceNumber' ),
			dropdown = new OO.ui.DropdownWidget( {
				label: 'Übliche Bearbeitungszusammenfassungen - bitte nutzen'
			} ),
			minorDropdown = new OO.ui.DropdownWidget( {
				label: 'Zusammenfassungen für kleine Änderungen'
			} );

		dropdown.menu.on( 'select', onSummarySelect );
		minorDropdown.menu.on( 'select', onSummarySelect );

		addOptionsToDropdown( minorDropdown, minorSummaries );

		if ( namespace === 0 ) {
			addOptionsToDropdown( dropdown, articleSummaries );
		} else {
			addOptionsToDropdown( dropdown, nonArticleSummaries );
			if ( namespace % 2 !== 0 ) {
				addOptionsToDropdown( dropdown, talkPageSummaries );
			} else if (namespace === 118 ) {
				addOptionsToDropdown( dropdown, articleSummaries );
			}
		}
		return dropdown.$element.add( minorDropdown.$element );
	}
	// VisualEditor
	mw.hook( 've.saveDialog.stateChanged' ).add( function () {
		var target, $saveOptions, $dropdowns;
		// .ve-init-mw-viewPageTarget-saveDialog-checkboxes
		if ( $( 'body' ).data( 'wppresent' ) ) {
			return;
		}
		$( 'body' ).data( 'wppresent', 'true' );

		target = ve.init.target;
		$saveOptions = target.saveDialog.$saveOptions;
		$summaryBox = target.saveDialog.editSummaryInput.$input;
		if ( !$saveOptions.length ) {
			return;
		}
		$dropdowns = getSummaryDropdowns();
		$saveOptions.before( $dropdowns );
	} );
	// WikiEditor
	$.when( mw.loader.using( 'oojs-ui-core' ), $.ready ).then( function () {
		var $dropdowns,
			$editCheckboxes = $( '.editCheckboxes' );

		// If we failed to find the editCheckboxes class
		if ( !$editCheckboxes.length ) {
			return;
		}
		$dropdowns = getSummaryDropdowns();
		$dropdowns.css( {
			width: '48%',
			'padding-bottom': '1em'
		} );
		$editCheckboxes.before( $dropdowns );
	} );
}() );

/*  
 * END Defaultsummaries
 * ============================================================
 */