User:Subh83/JavaScriptTools/utilsCommunications.js

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.
/****************************************************
* Created by Subhrajit Bhattacharya [[User:Subh83]] *
* Licensed under GNU-GPL v3.0                       *
*****************************************************/
var UserSubh83_utilsCommunications = true;


// ================================================================
/*** URL encoding, special character encoding, URL reading, etc. utils ***/

function XEncodeURIComponent(str) {
    var ret = encodeURIComponent(str);
    ret = ret.replace(/;/g, "%3B");
    ret = ret.replace(/\\/g, "%22");
    ret = ret.replace(/'/g, "%27");

    return ret;
}

function HTMLSpecialCharactersEncode(str) {
    return str.replace(/&/g, "&amp;").replace(/>/g, "&gt;").replace(/</g, "&lt;").replace(/"/g, "&quot;");
}

function GETparam(name) {
    var regexS = "[\\?&]"+name+"=([^&#]*)";
    var regex = new RegExp( regexS );
    var results = regex.exec(window.location.href);
    if( results == null ) return false;
    else return results[1];
}


// ================================================================
/*** XMLHttp request helper functions ***/

// From User:Supadawg/util.js
function createXMLHTTP( method, uri, callback, options ) {
    var xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest()
                                        : window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP")
                                                               : null;
    if (xmlhttp) {
        xmlhttp.onreadystatechange = callback;
        xmlhttp.open( method, uri, true );

        if (options && options.headers)
            for (var key in options.headers)
                xmlhttp.setRequestHeader(key, options.headers[key]);

        var body = null;
        if ( options && options["body"] )
            body = options["body"];
        xmlhttp.send( body );
    }
    return xmlhttp;
}


// Wikipedia specific: Fetch the source text of a wiki page
var xmlhttpWIKITEXT;
var xmlhttpWIKITEXTSent = false;
var xmlhttpWIKITEXTDone = false;

var FetchWikiTextAndPerformAction_lastReturn = false;
function FetchWikiTextAndPerformAction(pagename, secNum, ActionFun, params, cycles) {
    // 'ActionFun' needs to be handle to a function that takes 2 parameters.
    //     The first is the wikitext, and the second is a structure containing other parameters.
    //     That is, ActionFun(WikiText, params);
    // Set 'secNum' to -1 to get full page.
    cycles = (typeof(cycles) != 'undefined') ? cycles : 50;
    if (cycles <= 0) return;
    FetchWikiTextAndPerformAction_lastReturn = false;
 
    if (!xmlhttpWIKITEXTSent) {
        var fetchURL = (wgServer+wgScript)+"?action=raw&title="+pagename;
        if (secNum >= 0) fetchURL += "&section="+secNum;
        xmlhttpWIKITEXTSent = true;
        xmlhttpWIKITEXT = createXMLHTTP("GET", fetchURL, function(){xmlhttpWIKITEXTDone=true;} );
    }
 
    if (!xmlhttpWIKITEXTDone || !xmlhttpWIKITEXT || xmlhttpWIKITEXT.readyState!=4)
        setTimeout(FetchWikiTextAndPerformAction, 200, pagename, secNum, ActionFun, params, cycles-1);
    else {
        xmlhttpWIKITEXTSent = false;
        xmlhttpWIKITEXTDone = false;
 
        if (xmlhttpWIKITEXT.status == 200) {
            // Main actions
            FetchWikiTextAndPerformAction_lastReturn = ActionFun(xmlhttpWIKITEXT.responseText, params);
            return ret;
        } else 
            alert("Problem retrieving data - status: " + xmlhttpWIKITEXT.status);
    }
}

// ================================================================
/*** For handling cookies ***/

function setCookie(name, value) {
    document.cookie = name + "=" +  value + "; path=/";
}

function getCookie(name) {
    var nameeq = name + "=";
    var cookies = document.cookie.split(';');
    for(var i=0; i < cookies.length; i++) {
        nameval = cookies[i].split("=");
        if ( nameval[0].replace(/^\s*/, "").replace(/\s*$/, "") == name)
            return nameval[1];
    }
    return null;
}

function delCookie(name) {
    setCookie(name, "", -1);
}