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>