(function () { // regexes as strings // NOTE: // these patterns should NOT contain capturing groups (parentheses) // because they might be combined with other regexes var DOCS_VERSION_PATTERN = "(?:[\\d\\.]+x?|dev|latest)"; var DOCS_LANGUAGE_PATTERN = "\\w\\w(?:-\\w\\w)?"; var DOCS_VERSION_PATH_PATTERN = "docs\\/" + DOCS_LANGUAGE_PATTERN + "\\/" + DOCS_VERSION_PATTERN; function splitDocsURL(url) { var splitPattern = new RegExp("(" + DOCS_VERSION_PATH_PATTERN + ")"); return url.split(splitPattern); } function transformOldURL(oldURL) { var splitURL = splitDocsURL(oldURL); var baseURL = splitURL[0]; var versionString = splitURL[1]; var pageExtension = splitURL.slice(2).join(""); // get rid of the fragment and replace underscores with slashes // also remove the ".md" extension pageExtension = pageExtension.split("#")[0]; pageExtension = pageExtension.replace(".md", ""); pageExtension = pageExtension.replace(/_/g, "/"); // undo special cases of paths that really do contain underscores // NOTE: // this list is complete; in the pre-migration docs, no other // directories or files contained underscores pageExtension = pageExtension.replace("config/ref", "config_ref"); pageExtension = pageExtension.replace("plugin/ref", "plugin_ref"); pageExtension = pageExtension.replace("display/name", "display_name"); pageExtension = pageExtension.replace("platform/plugin/versioning/ref", "platform_plugin_versioning_ref"); return baseURL + versionString + pageExtension; } function getDevURL(url) { var replaceWhat = new RegExp("docs\\/(" + DOCS_LANGUAGE_PATTERN + ")\\/" + DOCS_VERSION_PATTERN); var replaceWith = "docs/$1/dev"; return url.replace(replaceWhat, replaceWith); } function getRootURL(url) { var splitURL = splitDocsURL(url); var baseURL = splitURL[0]; var versionString = splitURL[1]; return baseURL + versionString + "/"; } function isDocsURL(url) { var testPattern = new RegExp(DOCS_VERSION_PATH_PATTERN); return testPattern.test(url); } function showNewRedirect(url) { $("#new-redirect-link").attr("href", url); $("#not-found-redirect-alert").css("display", "block"); } function showDevRedirect(url) { $("#dev-redirect-link").attr("href", url); $("#no-version-redirect-alert").css("display", "block"); } function showRootRedirect(url) { $("#root-redirect-link").attr("href", url); $("#no-page-redirect-alert").css("display", "block"); } function main() { var url = window.location.href; if (!isDocsURL(url)) { return; } // get related URLs var rootURL = getRootURL(url); var devURL = getDevURL(url); var newURL = transformOldURL(url); // try the root URL $.ajax({ url: rootURL, statusCode: { // if the root exists, check if the new URL exists 200: function () { $.ajax({ url: newURL, statusCode: { // redirect to the new URL if it exists 200: function () { showNewRedirect(newURL) }, // if the new URL doesn't exist, redirect to root 404: function() { showRootRedirect(rootURL) } } }); }, // if root doesn't exist, assume that the version // is invalid and redirect to dev 404: function () { showDevRedirect(devURL) } } }); } main(); }());