User:Bradv/splittalk.js

/* splitTalk = { enabled:  true, width:    null };
 * Split-screen talk page
 * Author: User:Bradv

splitTalk.init = function { if (mw.config.get('wgAction') == "view" && mw.config.get('wgNamespaceNumber') == 1) { // check to see if article exists var li = document.getElementById('ca-nstab-main'); if (li) { if (li.className != 'new') { splitTalk.loadCookies; if (splitTalk.enabled) { splitTalk.draw; }           }        }    } };

splitTalk.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('splitTalk_width'); if (w) { splitTalk.width = w;   } };

splitTalk.saveCookies=function { var cend = "; expires=Tue, 31-Dec-2030 23:59:59 GMT; path=/"; document.cookie = 'splitTalk_width=' + splitTalk.width.toString + cend; };

splitTalk.draw=function { var aj = sajax_init_object; if (aj) { var w = splitTalk.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='splitTalk_placeholder'; style.width=w; style.top='0px'; style.right='0px'; style.bottom='0px'; style.zIndex=90; style.position='fixed'; style.backgroundColor=document.defaultView.getComputedStyle(container, null).backgroundColor; }       container.appendChild(ph);

var slider = document.createElement('div'); with (slider) { id='splitTalk_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 (splitTalk) { 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; }           }        }

var content = document.createElement('div'); with (content) { 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(content); aj.onreadystatechange = function { if(aj.readyState == 4 && aj.status == 200) { var htm; htm = aj.responseText; content.innerHTML = htm; //               content.id = 'bodyContent'; //TODO: Find a better way to make the page format correctly }                             }        var url = mw.config.get('wgScript') + '?title=' + mw.config.get('wgTitle').replace(' ', '_', "g").replace('&', '%26', "g") + '&action=render'; //       var url = mw.config.get('wgArticlePath').replace('$1', mw.config.get('wgTitle')); aj.open("GET", url, true); aj.send(null); }   };

addOnloadHook(splitTalk.init);