User:Mike Dillon/Scripts/params.js
< User:Mike Dillon | Scripts
Note: You may have to bypass your browser’s cache to see the changes. In addition, after saving a sitewide CSS file such as MediaWiki:Common.css, it will take 5-10 minutes before the changes take effect, even if you clear your cache.
- Mozilla / Firefox / Safari: hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (Command-R on a Macintosh);
- Konqueror and Chrome: click Reload or press F5;
- Opera: clear the cache in Tools → Preferences;
- Internet Explorer: hold Ctrl while clicking Refresh, or press Ctrl-F5.
- This script lacks a documentation subpage. Please create it.
- Useful links: root page • root page’s subpages • links • redirects • your own
// 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;
}
// Remove the anchor, if any
url = url.replace(/#.*/, '');
// 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;
}