User:Bawolff/test-mode.js

From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
/*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.

//To install add importScript('User:Bawolff/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.
//could have better support for edit mode.

//-------------------

mw.loader.load('http://en.wikinews.org/w/index.php?title=User:Bawolff/mwapilib2.js&action=raw&ctype=text/javascript&smaxage=259200');

var testMode = {
 init: function () {
  //if (mw.config.get('wgAction') === 'edit') return; //doesn't work in non-show preview edit.
  if (mw.config.get('wgNamespaceNumber') === -1) return; //no special

  var editing = false;
  if ((mw.config.get('wgAction') === 'submit' || mw.config.get('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 testNumb = prompt('Which test mode do you wish to use? (1, 2 or 3)', '1');
  var contextTitle = 'Test' + (testNumb? testNumb: '1') + '-';
  var page;
  if (editing) page = document.getElementById('wpTextbox1').value; //use edit box
  else page = '{{:' + mw.config.get('wgPageName') + '}}';

  api(page).parse(contextTitle).lift(this.display, testNumb, editing).exec();
  return;
 },
 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) + '. &lt;source&gt; tags and anything else that adds dynamic css/js may not display properly.';
  if (!editing) titleMsg += ' <a onclick="location.reload()" 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);