Commit 57f8d218 by David Baumgold

Merge pull request #599 from edx/db/fix-studio-login-next

Assign isExternal JS function to window object
parents 16b5b951 82ac5606
// checks whether or not the url is external to the local site. // checks whether or not the url is external to the local site.
// generously provided by StackOverflow: http://stackoverflow.com/questions/6238351/fastest-way-to-detect-external-urls // generously provided by StackOverflow: http://stackoverflow.com/questions/6238351/fastest-way-to-detect-external-urls
function isExternal(url) { window.isExternal = function (url) {
// parse the url into protocol, host, path, query, and fragment. More information can be found here: http://tools.ietf.org/html/rfc3986#appendix-B // parse the url into protocol, host, path, query, and fragment. More information can be found here: http://tools.ietf.org/html/rfc3986#appendix-B
var match = url.match(/^([^:\/?#]+:)?(?:\/\/([^\/?#]*))?([^?#]+)?(\?[^#]*)?(#.*)?/); var match = url.match(/^([^:\/?#]+:)?(?:\/\/([^\/?#]*))?([^?#]+)?(\?[^#]*)?(#.*)?/);
// match[1] matches a protocol if one exists in the url // match[1] matches a protocol if one exists in the url
// if the protocol in the url does not match the protocol in the window's location, this url is considered external // if the protocol in the url does not match the protocol in the window's location, this url is considered external
if (typeof match[1] === "string" && if (typeof match[1] === "string" &&
match[1].length > 0 match[1].length > 0 &&
&& match[1].toLowerCase() !== location.protocol) match[1].toLowerCase() !== location.protocol)
return true; return true;
// match[2] matches the host if one exists in the url // match[2] matches the host if one exists in the url
// if the host in the url does not match the host of the window location, this url is considered external // if the host in the url does not match the host of the window location, this url is considered external
if (typeof match[2] === "string" && if (typeof match[2] === "string" &&
match[2].length > 0 && match[2].length > 0 &&
// this regex removes the port number if it patches the current location's protocol // this regex removes the port number if it patches the current location's protocol
match[2].replace(new RegExp(":("+{"http:":80,"https:":443}[location.protocol]+")?$"), "") !== location.host) match[2].replace(new RegExp(":("+{"http:":80,"https:":443}[location.protocol]+")?$"), "") !== location.host)
return true; return true;
return false; return false;
} };
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment