User:Mike Dillon/Scripts/params.js

/* */

// 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; }

/* */