Jump to content

User:Bradv/splittalk.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.
/*
* Split-screen talk page
*     Author: User:Bradv
*/
splitTalk = {
    enabled:   true,
    width:     null
};

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);