MediaWiki:Gadget-defaultsummaries.js

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
  1 /*
  2 * Modified version of https://en.wikipedia.org/wiki/MediaWiki:Gadget-defaultsummaries.js
  3 */
  4 
  5 $(function() {
  6 	var $summaryBox = $( '#wpSummary' ),
  7 		$saveButton = $( '#wpSave' ),
  8 		lastkey = 'rsw-defsum-last',
  9 		uselastkey = 'rsw-defsum-uselast',
 10 		hasls =  false,
 11 		minorSummaries = [
 12 			'Fixed spelling',
 13 			'Correcting [[RS:LAYOUT|page layout]]',
 14 			'Revert vandalism',
 15 			'Reworded',
 16 			'Remove [[RS:POLICIES|policy]] violation'
 17 		],
 18 		articleSummaries = [
 19 			'Expanding',
 20 			'Adding [[RS:REF|refs]]',
 21 			'Adding links',
 22 			'Maintenance'
 23 		],
 24 		nonArticleSummaries = [
 25 			'Reply',
 26 			'Comment',
 27 			'Support',
 28 			'Oppose'
 29 		];
 30 	
 31 	try {
 32 		localStorage.setItem('test', 'test')
 33 		localStorage.removeItem('test')
 34 		hasls = true;
 35 	} catch (e) {
 36 		mw.warn('Browser does not support localStorage');
 37 		hasls =  false;
 38 	}
 39 
 40 	function addOptionsToDropdown( dropdown, optionTexts ) {
 41 		dropdown.menu.addItems( optionTexts.map( function ( optionText ) {
 42 			return new OO.ui.MenuOptionWidget( { label: optionText } );
 43 		} ) );
 44 	}
 45 
 46 	function onSummarySelect( option ) {
 47 		// Save the original value of the edit summary field
 48 		var editsummOriginalSummary = $summaryBox.val(),
 49 			canned = option.getLabel(),
 50 			newSummary = editsummOriginalSummary;
 51 
 52 		// Append old edit summary with space, if exists,
 53 		// and last character != space
 54 		if ( newSummary.length !== 0 && newSummary.charAt( newSummary.length - 1 ) !== ' ' ) {
 55 			newSummary += ' ';
 56 		}
 57 		newSummary += canned;
 58 		$summaryBox.val( newSummary ).trigger( 'change' );
 59 	}
 60 	
 61 	function useLastChange ( selected ) {
 62 		if (!hasls) {
 63 			return;
 64 		}
 65 		if (!selected) {
 66 			localStorage.setItem(uselastkey, 'false');
 67 			return;
 68 		}
 69 		
 70 		localStorage.setItem(uselastkey, 'true');
 71 		var lastSum = localStorage.getItem( lastkey );
 72 		if (lastSum) {
 73 			$summaryBox.val( lastSum ).trigger( 'change' );
 74 		}
 75 	}
 76 
 77 	function insertSummaryOptions( $insertBeforeThis, dropdownWidth ) {
 78 		// For convenience, add a dropdown box with some canned edit
 79 		// summaries to the form.
 80 		var namespace = mw.config.get( 'wgNamespaceNumber' ),
 81 			dropdown = new OO.ui.DropdownWidget( {
 82 				label: 'Pre-defined summaries'
 83 			} ),
 84 			minorDropdown = new OO.ui.DropdownWidget( {
 85 				label: 'Pre-defined minor summaries'
 86 			} ),
 87 			useLastTog = new OO.ui.CheckboxInputWidget( {
 88 				selected: false
 89 			} ),
 90 			togLay = new OO.ui.FieldLayout( useLastTog, {
 91 				label: 'Use last summary',
 92 				align: 'inline'
 93 			} );
 94 
 95 		dropdown.$element.css( 'width', dropdownWidth );
 96 		dropdown.menu.on( 'select', onSummarySelect );
 97 
 98 		minorDropdown.$element.css( 'width', dropdownWidth );
 99 		minorDropdown.menu.on( 'select', onSummarySelect );
100 
101 		addOptionsToDropdown( minorDropdown, minorSummaries );
102 		
103 		if (hasls) {
104 			var lastSummary = localStorage.getItem( lastkey ),
105 				useLast = localStorage.getItem( uselastkey );
106 			useLastTog.on('change', useLastChange );
107 			if ( useLast == 'true' ) {
108 				useLastTog.setSelected(true);
109 			}
110 			if (lastSummary) {
111 				articleSummaries.unshift(lastSummary);
112 				nonArticleSummaries.unshift(lastSummary);
113 			}
114 		} else {
115 			useLastTog.setDisabled(true);
116 		}
117 
118 		if ( namespace === 0 ) {
119 			addOptionsToDropdown( dropdown, articleSummaries );
120 		} else {
121 			addOptionsToDropdown( dropdown, nonArticleSummaries );
122 		}
123 
124 		togLay.$element.css('margin-top', 0);
125 		$insertBeforeThis.before( togLay.$element );
126 		$insertBeforeThis.before( dropdown.$element );
127 		$insertBeforeThis.before( minorDropdown.$element );
128 	}
129 	
130 	function onSave() {
131 		mw.log('saving article');
132 		var summary = $summaryBox.val();
133 		localStorage.setItem(lastkey, summary);
134 	}
135 	
136 	// VisualEditor
137 	mw.hook( 've.saveDialog.stateChanged' ).add( function () {
138 		var target, $saveOptions;
139 		// .ve-init-mw-viewPageTarget-saveDialog-checkboxes
140 		if ( $( 'body' ).data( 'wppresent' ) ) { return; }
141 		$( 'body' ).data( 'wppresent', 'true' );
142 
143 		target = ve.init.target;
144 		$saveOptions = target.saveDialog.$saveOptions;
145 		$summaryBox = target.saveDialog.editSummaryInput.$input;
146 		$saveButton = target.saveDialog.$primaryActions.find('a');
147 		
148 		if ( !$saveOptions.length ) {
149 			return;
150 		}
151 		$saveButton.on('click', onSave);
152 		
153 		insertSummaryOptions( $saveOptions );
154 	} );
155 	// WikiEditor
156 	$.when( mw.loader.using( 'oojs-ui-core' ), $.ready ).then( function () {
157 		var $editCheckboxes = $( '.editCheckboxes' );
158 		
159 		// If we failed to find the editCheckboxes class
160 		if ( !$editCheckboxes.length ) {
161 			return;
162 		}
163 		
164 		$saveButton.on('click', onSave);
165 		
166 		insertSummaryOptions( $editCheckboxes, '48%' );
167 	} );
168 })