blob: cecf83fe95aba7acbd919d2e8160b45a40f69663 [file] [log] [blame]
(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();
}());