User:Zenexer/test-mode.js
Appearance
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. A guide to help you find broken scripts is available. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump. This code will be executed when previewing this page. |
![]() | Documentation for this user script can be added at User:Zenexer/test-mode. This user script seems to have an accompanying .css page at User:Zenexer/test-mode.css. |
tes/*globals api, escapeQuotesHTML, addPortletLink, importScriptURI, wgPageName, addOnloadHook, wgNamespaceNumber, sortables_init, createCollapseButtons, createNavigationBarToggleButton, window, wgAction, ajaxPreviewExec */
// Script to re-render page with context title 'test<some number>-'. See {{tl|test-mode}} for why this is useful.
// Script by Bawolff, feel free to ask if you have any questions.
// Some minor changes by Zenexer. Original is at [[User:Bawolff/test-mode.js]].
//
// To install add importScript('User:Zenexer/test-mode.js') to [[Special:MyPage/monobook.js]]
// (replace monobook with skin if you use different skin).
//
// Known issue: <source> tags don't work (since they add css to head, which doesn't get picked up). Perhaps fixed on next wmf update.
// Only works on vector and monobook. YMMV on other skins. [Zenexer: This might not be true anymore. Untested.]
// Could have better support for edit mode.
//-------------------
importScriptURI('//en.wikinews.org/w/index.php?title=User:Bawolff/mwapilib2.js&action=raw&ctype=text/javascript&smaxage=259200');
var testMode = {
init: function () {
if (wgNamespaceNumber === -1) return; //no special
var editing = false;
if ((wgAction === 'submit' || wgAction === 'edit')) {
editing = true;
//add show preview with test mode.
var button = document.createElement('button');
button.type = 'button';
button.id = 'testModePreviewButton';
button.onclick = function () { testMode.exec(true); };
button.appendChild(document.createTextNode('Preview in testing mode'));
var prev = document.getElementById('wpDiff');
prev.parentNode.insertBefore(button, prev);
}
mw.util.addPortletLink('p-tb', 'javascript:testMode.exec(' + editing + ')%3Bvoid%200', 'Display in test mode', 'testModePreviewSidebarLink', 'View page using alternative templates that are being tested. See [[template:Test-mode]] for details.');
},
exec: function (editing) {
var testNum = prompt('Which test mode do you wish to use? (1, 2 or 3)', '1');
switch (testNum) {
case 1:
case 2:
case 3:
break;
default:
testNum = 1;
break;
}
var page;
if (editing) {
page = document.getElementById('wpTextbox1').value; //use edit box
} else {
page = '{{:' + wgPageName + '}}';
}
Bawolff.APIC.api(page).parse('Test' + testNum + '-').lift(this.display, testNum, editing).exec();
},
display: function (text, mode, editing) {
var body = document.getElementById('wikiPreview');
body = body ? body : document.getElementById('bodyContent');
body.style.display = 'block';
var titleMsg = '<br/><small>(Testing mode ' + escapeQuotesHTML(mode) + '. <source> tags and anything else that adds dynamic css/js may not display properly.';
if (!editing) titleMsg += ' <a onclick="location.reload(); return false;" href="#">Reload</a> for normal view.';
titleMsg += ')</small>';
var warn = document.getElementById('testModeWarning');
if (warn) {
warn.innerHTML = titleMsg;
} else {
var title = document.getElementById('firstHeading');
title.innerHTML += '<span id="testModeWarning">' + titleMsg + '</span>';
}
body.innerHTML = text;
//call various js hooks (stolen from [[user:js/ajaxPreview]])
sortables_init();
if (window.createCollapseButtons){//en.wp
createCollapseButtons();
createNavigationBarToggleButton();
}
if (window.ajaxPreviewExec) ajaxPreviewExec(body);
}
}
addOnloadHook(testMode.init);