Skip to content

Commit 569e112

Browse files
committed
Show a version chooser for the spec pages
1 parent 412ec75 commit 569e112

File tree

2 files changed

+89
-60
lines changed

2 files changed

+89
-60
lines changed

js/listanchors.js

Lines changed: 85 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,91 @@ function addAnchors()
3030
}
3131
}
3232

33+
// Add a version selector button
34+
function addVersionSelector() {
35+
// Latest version offered by the archive builds
36+
// This needs to be manually updated after new versions have been archived
37+
var currentArchivedVersion = 78;
38+
// build URLs for dlang.org: DDoc + Dox
39+
var ddocModuleURL = document.body.id.replace(/[.]/g, "_") + ".html";
40+
var ddoxModuleURL = document.body.id.replace(/[.]/g, "/") + ".html";
41+
var root = "phobos/";
42+
43+
var isSpec = window.location.pathname.indexOf("/spec/") >= 0;
44+
if (isSpec) {
45+
root = "spec/";
46+
var uriParts = window.location.pathname.split("/");
47+
ddocModuleURL = uriParts[uriParts.length - 1];
48+
// these versions use a different layout
49+
var plainSpecVersions = ["2.066", "2.067", "2.068", "2.069"];
50+
}
51+
52+
// build list of versions available in the docarchives
53+
var archivedVersions = [];
54+
while (currentArchivedVersion >= 66) {
55+
archivedVersions.push("2.0" + currentArchivedVersion--);
56+
}
57+
archivedVersions = archivedVersions.map(function(e) {
58+
var currentRoot = root;
59+
if (isSpec && plainSpecVersions.indexOf(e) >= 0) {
60+
currentRoot = "";
61+
}
62+
return {
63+
name: e,
64+
url: "https://docarchives.dlang.io/v" + e + ".0/" + currentRoot + ddocModuleURL,
65+
selected: false,
66+
};
67+
});
68+
69+
var rootURL = location.href.split(/\/(phobos|library|spec)(-prerelease)?/)[0]
70+
var onlineVersions;
71+
if (isSpec) {
72+
onlineVersions = [{
73+
name: "master",
74+
url: rootURL + "/spec/" + ddocModuleURL,
75+
}];
76+
} else {
77+
onlineVersions = [{
78+
name: "master",
79+
url: rootURL + "/phobos-prerelease/" + ddocModuleURL,
80+
},{
81+
name: "master (ddox)",
82+
url: rootURL + "/library-prerelease/" + ddoxModuleURL,
83+
},{
84+
name: "stable",
85+
url: rootURL + "/phobos/" + ddocModuleURL,
86+
},{
87+
name: "stable (ddox)",
88+
url: rootURL + "/library/" + ddoxModuleURL,
89+
}];
90+
}
91+
92+
// set the current URL as selected
93+
var currentURL = location.href.split(/[#?]/)[0];
94+
onlineVersions.forEach(function(v, i) {
95+
onlineVersions[i].selected = v.url === currentURL;
96+
});
97+
// Don't show the option chooser if the page hasn't been recognized
98+
// For example, Ddox symbol pages are currently not supported
99+
if (onlineVersions.filter(function(v){return v.selected}).length === 0)
100+
return;
101+
102+
// build select box of all versions and append to current DOM
103+
var versions = onlineVersions.concat(archivedVersions);
104+
var options = versions.map(function(e, i){
105+
return "<option value='" + i + "'" + (e.selected ? "selected" : "") + ">" + e.name + "</option>";
106+
});
107+
$("h1").after("<div class='version-changer-container fa-select'><select id='version-changer'>" + options.join("") + "</select></div>");
108+
// attach event listener to select box -> change URL
109+
$("#version-changer").change(function(){
110+
var selected = parseInt($(this).find("option:selected").val());
111+
var option = versions[selected];
112+
if (!option.selected) {
113+
window.location.href = option.url;
114+
}
115+
});
116+
}
117+
33118
function listanchors()
34119
{
35120
var hideTop = (typeof inhibitQuickIndex !== 'undefined');
@@ -90,67 +175,7 @@ function listanchors()
90175
e.innerHTML = newText;
91176

92177
}
93-
function addVersionSelector() {
94-
// Latest version offered by the archive builds
95-
// This needs to be manually updated after new versions have been archived
96-
var currentArchivedVersion = 78;
97-
// build URLs for dlang.org: DDoc + Dox
98-
var ddocModuleURL = document.body.id.replace(/[.]/g, "_") + ".html";
99-
var ddoxModuleURL = document.body.id.replace(/[.]/g, "/") + ".html";
100-
101-
// build list of versions available in the docarchives
102-
var archivedVersions = [];
103-
while (currentArchivedVersion >= 66) {
104-
archivedVersions.push("2.0" + currentArchivedVersion--);
105-
}
106-
archivedVersions = archivedVersions.map(function(e) {
107-
return {
108-
name: e,
109-
url: "https://docarchives.dlang.io/v" + e + ".0/phobos/" + ddocModuleURL,
110-
selected: false,
111-
};
112-
});
113-
114-
var rootURL = location.href.split(/\/(phobos|library)(-prerelease)?/)[0]
115-
var onlineVersions = [{
116-
name: "master",
117-
url: rootURL + "/phobos-prerelease/" + ddocModuleURL,
118-
},{
119-
name: "master (ddox)",
120-
url: rootURL + "/library-prerelease/" + ddoxModuleURL,
121-
},{
122-
name: "stable",
123-
url: rootURL + "/phobos/" + ddocModuleURL,
124-
},{
125-
name: "stable (ddox)",
126-
url: rootURL + "/library/" + ddoxModuleURL,
127-
}];
128178

129-
// set the current URL as selected
130-
var currentURL = location.href.split(/[#?]/)[0];
131-
onlineVersions.forEach(function(v, i) {
132-
onlineVersions[i].selected = v.url === currentURL;
133-
});
134-
// Don't show the option chooser if the page hasn't been recognized
135-
// For example, Ddox symbol pages are currently not supported
136-
if (onlineVersions.filter(function(v){return v.selected}).length === 0)
137-
return;
138-
139-
// build select box of all versions and append to current DOM
140-
var versions = onlineVersions.concat(archivedVersions);
141-
var options = versions.map(function(e, i){
142-
return "<option value='" + i + "'" + (e.selected ? "selected" : "") + ">" + e.name + "</option>";
143-
});
144-
$("h1").after("<div class='version-changer-container fa-select'><select id='version-changer'>" + options.join("") + "</select></div>");
145-
// attach event listener to select box -> change URL
146-
$("#version-changer").change(function(){
147-
var selected = parseInt($(this).find("option:selected").val());
148-
var option = versions[selected];
149-
if (!option.selected) {
150-
window.location.href = option.url;
151-
}
152-
});
153-
}
154179
addAnchors();
155180
addVersionSelector();
156181
}

spec/spec.ddoc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,3 +108,7 @@ SPEC_PREV=<div style="float: left">$(FA_ICON angle-left) $1</div>
108108
CLEAR=<div style="clear:both"></div>
109109
RAWHTML=$0
110110
_=
111+
LAYOUT_SUFFIX =
112+
$(SCRIPTLOAD ../js/listanchors.js)
113+
$(SCRIPT jQuery(document).ready(addVersionSelector);)
114+
_=

0 commit comments

Comments
 (0)