User:MisterLambda/monobook.js

/* splitPreview = { enabled:  true, width:    null }; splitPreview.init = function { if (wgAction == "edit" || wgAction == "submit") { splitPreview.loadCookies; if (splitPreview.enabled) { splitPreview.draw; }   } }; splitPreview.loadCookies=function { function readCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') { c = c.substring(1,c.length); } if (c.indexOf(nameEQ) === 0) { return c.substring(nameEQ.length,c.length); } }       return ''; }   var w = readCookie('splitPreview_width'); if (w) { splitPreview.width = w;   } }; splitPreview.saveCookies=function { var cend = "; expires=Tue, 31-Dec-2030 23:59:59 GMT; path=/"; document.cookie = 'splitPreview_width=' + splitPreview.width.toString + cend; }; splitPreview.draw=function { var wp = document.getElementById('wikiPreview'); if (wp) { var w = splitPreview.width; if (!w) { w = window.innerWidth / 3 + 'px'; }       //Make room var topbar = document.evaluate('//div[@id="p-personal"]//div[@class="pBody"]',            document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null); if (topbar.singleNodeValue) { topbar = topbar.singleNodeValue; topbar.style.marginRight=w; }       //Find the container where the placeholder goes. //This differs between monobook and modern skins. var container = document.getElementById('content'); if (!container) { container = document.getElementById('mw_content'); }       container.style.marginRight = w;        var ph = document.createElement('div'); with (ph) { id='splitPreview_placeholder'; style.width=w; style.top='0px'; style.right='0px'; style.bottom='0px'; style.zIndex=90; style.position='fixed'; style.backgroundColor=document.defaultView.getComputedStyle(document.body, null).backgroundColor; //innerHTML = "Testing... "; }       container.appendChild(ph); var slider = document.createElement('div'); with (slider) { id='splitPreview_slider'; style.position='absolute'; style.width='.5em'; style.top='0px'; style.left='0px'; style.bottom='0px'; style.borderLeft='1px solid #aaaaaa'; style.cursor='w-resize'; style.float='left'; }       ph.appendChild(slider); slider.onmousedown=function(event) { event.preventDefault; slider.initialWidth = parseInt( window.innerWidth - event.clientX - ph.offsetWidth ); window.onmouseup=function(event) { window.onmousemove=null; window.onmouseup=null; with (splitPreview) { width=w; saveCookies; }           }            window.onmousemove=function(event) { if (event.clientX > (window.innerWidth / 3)) { w=window.innerWidth - event.clientX - slider.initialWidth+'px'; topbar.style.marginRight=w; ph.style.width=w; container.style.marginRight=w; }           }        }        with (wp) { style.position='absolute'; style.top='0px'; style.left='0.5em'; style.right='0.5em'; style.bottom='0px'; style.float='right'; style.overflow='auto'; }       ph.appendChild(wp); } }; addOnloadHook(splitPreview.init);
 * Split-screen Edit Preview
 * Author: User:Bradv

/* A heavily modified and expanded version of this code is now in use across the entire SourceWatch wiki. Here's a direct link to the code. A particular enhancement in the SourceWatch code is that it provides a dropdown next to the edit summary textfield containing common edit summaries. Selecting one of these automatically inserts that summary into the textfield. The code also examines which subproject of SourceWatch the page belongs to, and adds an appropriate prefix to the edit summary. */ function addForceSummary {   if(!/&action=edit/.test(window.location.href) && !/&action=submit/.test(window.location.href)) return; if(/&section=new/.test(window.location.href)) return; if(!document.forms.editform) return; document.forms.editform.wpSave.onclick = forceSummary; // The second invocation of this will cause extra annoyance if there is no edit summary present. If there *is* an edit summary, the dialog box will not appear. document.forms.editform.wpSave.onfocus = forceSummary; } function forceSummary {   if(!document.forms.editform.wpSummary.value.replace(/^(?:\/\\*.*\\*\/)? *(.*) *$/,'$1'))   {        var r = prompt('Are you sure you want to submit without adding a summary?\nTo add a summary, type it in the box below:','no reason'); if(r == null) { return false; } document.forms.editform.wpSummary.value = r;   } return true; } addOnloadHook(addForceSummary);
 * Usage :Include a call to  in your page load function
 * Possible improvements :Make any form submission force a summary. Note that requiring an edit summary on preview or diff is not useful since "save" still needs to gain focus or be clicked before a commit can occur.