MediaWiki:Gadget-ForcePreview.js

Poznámka: Po uložení musíte vyprázdnit mezipaměť vašeho prohlížeče, jinak změny neuvidíte.

// <syntaxhighlight lang="javascript">
jQuery(function($) {
	var action = mw.config.get( 'wgAction' );
	if (action !== 'edit' && action !== 'submit') return;

	try {
		if (!('sessionStorage' in window && window.sessionStorage !== null)) return;
	} catch (e) {
		return;
	}

	if (typeof mediaWiki != 'undefined') mediaWiki.loader.load('jquery.ui');
	else if (typeof mw != 'undefined') mw.usability.load(['$.ui','$.ui.dialog','$.ui.draggable','$.ui.resizable'], function() {});

	var i18n = {
		'en': {
			'warningtitle': 'Use preview, please',
			'warning': 'It seems you are frequently saving your edits. If you want to view your changes, click <i>Show preview</i>. Only after you are satisfied with the results, click <i>Save changes</i>. Saving often is inappropriate, <a href="//en.wikipedia.org/wiki/Help:Show_preview" target="_blank"><u>click here to learn why</u></a>.',
			'warning2': 'Repeated saving of edits is inappropriate (<a href="//en.wikipedia.org/wiki/Help:Show_preview" target="_blank"><u>click here to learn why</u></a>). Review your changes using preview and click <i>Save changes</i> only when satisfied with the results.',
			'previewbtn': 'Show preview',
			'overridebtn': 'I really want to save the changes now'
		},
		'cs': {
			'warningtitle': 'Používejte, prosíme, náhled',
			'warning': 'Vypadá to, že opakovaně ukládáte provedené změny. Pokud si chcete prohlédnout své úpravy, klikněte na <i>Ukázat náhled</i>. Teprve až budete spokojeni s výsledkem, klikněte na <i>Zveřejnit změny</i>. Časté ukládání změn je nevhodné, <a href="//cs.wikipedia.org/wiki/N%C3%A1pov%C4%9Bda:N%C3%A1hled" target="_blank"><u>přečtěte si proč</u></a>.',
			'warning2': 'Opakované ukládání změn je nevhodné (<a href="//cs.wikipedia.org/wiki/N%C3%A1pov%C4%9Bda:N%C3%A1hled" target="_blank"><u>přečtěte si proč</u></a>). Nejprve si prohlédněte své úpravy v náhledu, teprve až budete spokojeni s výsledkem, klikněte na <i>Zveřejnit změny</i>.',
			'previewbtn': 'Ukázat náhled',
			'overridebtn': 'Opravdu už chci uložit změny'
		}
	};
	var msgs = i18n[mw.config.get( 'wgUserLanguage' )] || i18n[mw.config.get( 'wgContentLanguage' )] || i18n.en;

	var serializeState = function(state) {
		return state.page + '#' + state.section + '#' + state.beenwarned + '#' + state.time;
	};

	var deserializeState = function(str) {
		if (!str) return null;
		var parts = str.split('#');
		return { page: parts[0], section: parts[1], beenwarned: parts[2], time: parts[3] };
	};

	var showDlg = function(title, message, btns) {
		var dlgprops = {
			modal: true,
			width: 450,
			height: 250,
			buttons: btns
		};
		$('<div title="' + title + '"><p><span class="ui-icon ui-icon-alert" style="float:left; margin:0 7px 20px 0;"></span>' + message + '</p></div>').dialog(dlgprops);
	};

	var dialogOverride = false;

	$('#wpSave').click(function() {
		if (window.forcePreviewDisabled) return;
		if ($('.mw-explainconflict').length > 0) return;
		if (dialogOverride)
		{
			dialogOverride = false;
			return true;
		}
		var newState = { page: mw.config.get( 'wgPageName' ), section: $('input[name=wpSection]').val(), beenwarned: 0, time: new Date().valueOf() };
		var currState = deserializeState(sessionStorage["forcePreview.State"]);

		if (currState && currState.page == newState.page && currState.section == newState.section && (newState.time - currState.time) < 60000) {
			// saving the same page/section, not later than 10 minutes after saving the previous edit
			var btns = {};
			if (currState.beenwarned > 0)
			{
				btns[msgs.previewbtn] = function() {
					$(this).dialog('close');
					newState.beenwarned = 0;
					sessionStorage["forcePreview.State"] = serializeState(newState);
					$('#wpPreview').click();
				};

				showDlg(msgs.warningtitle, msgs.warning2, btns);
				return false;
			}
			else
			{
				btns[msgs.overridebtn] = function() {
					$(this).dialog('close');
					++newState.beenwarned;
					sessionStorage["forcePreview.State"] = serializeState(newState);
					dialogOverride = true;
					$('#wpSave').click();
				};
				btns[msgs.previewbtn] = function() {
					$(this).dialog('close');
					$('#wpPreview').click();
				};

				showDlg(msgs.warningtitle, msgs.warning, btns);
				return false;
			}
		} else {
			// everything is fine, save the information
			sessionStorage["forcePreview.State"] = serializeState(newState);
			return true;
		}
	});
});
// </syntaxhighlight>