User:Mike Dillon/Scripts/params.js

From Wikipedia, the free encyclopedia

Note: After saving, you have to bypass your browser's cache to see the changes. In Internet Explorer and Firefox, hold down the Ctrl key and click the Refresh or Reload button. Opera users have to clear their caches through Tools→Preferences, see the instructions for Opera. Konqueror and Safari users can just click the Reload button.

/* <pre><nowiki> */
 
// function getParameterMap(url): Parses a URL and extracts the query string parameters;
//     if no URL is provided, uses the current URL. Caches parsed parameters between invocations.
var getParameterMap = (function () {
    // URL parameters cache: key=url, value=paramMap
    var urlParamMaps = {};
 
    return function (url) {
        // If no URL is passed in, use the current page's URL
        if (!url) {
            url = location.href;
        }
 
        // If the parameters for this URL have already been parsed, return them
        if (urlParamMaps[url]) return urlParamMaps[url];
 
        // Set up a new map for the parameters to be parsed
        var paramMap = {};
 
        // Split the URL from the query string
        var search = url.split("?", 2)[1];
        if (search) {
            // Split query string on "&"
            var kvs = search.split("&");
            for (var i in kvs) {
                // Split each key-value pair on the equals sign
                var kv = kvs[i].split("=", 2);
                var key = kv[0];
                var value = decodeURIComponent(kv[1]);
 
                // On the first occurence of a key, seed an empty array into paramMap
                if (!paramMap[key]) {
                    paramMap[key] = [];
                }
 
                // Push the new value onto the value list for the key in paramMap
                paramMap[key].push(value);
            }
        }
 
        // Cache the paramMap to avoid parsing for all parameter requests
        urlParamMaps[url] = paramMap;
 
        return paramMap;
    };
})();
 
// function getParameterValues(key, url): Extracts the list of values for a particular key
//     from the given URL; if no URL is provided, uses the current URL.
//     Returns null if the parameter was not in the URL.
function getParameterValues(key, url) {
    return getParameterMap(url)[key];
}
 
// function getParameterValues(key, url): Extracts the values for a particular key
//     from the given URL; if no URL is provided, uses the current URL.
//     If there is more than one value for the given key, the first value is returned.
//     Returns null if the parameter was not in the URL.
function getParameter(key, url) {
    var values = getParameterValues(key, url);
    return values ? values[0] : null;
}
 
// function getParameterNames(url): Extracts the list of parameter names
//     from the given URL; if no URL is provided, uses the current URL.
function getParameterNames(url) {
    var names = [];
    for (var n in getParameterMap(url)) {
        names.push(n);
    }
    return names;
}
 
/* </nowiki></pre> */