diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2022-03-18 16:21:19 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2022-03-23 12:08:56 +0000 |
commit | 8827704443363068db7181bc0698cbda5d35b01d (patch) | |
tree | 2582d1398e36ea533134dcd555b795e03b79f1df /documentation/sphinx-static/switchers.js | |
parent | 767eb1c71c4fbb95dff6aa59b9a87211ef663d7c (diff) | |
download | poky-8827704443363068db7181bc0698cbda5d35b01d.tar.gz |
set_versions/switchers.js: Allow switchers.js version information to be autogenerated
A horrible blunt hammer approach to updating the version information in
switchers.js based on the available tag information.
To merge and work correctly, this will need a change to the autobuilder-helper
docs generation code to pull the swicthers.js and script from master, then
to run the script. That should hopefully remove the need for other patching
even on old docs branches though.
(From yocto-docs rev: dc858c8b2ffdb792fe8cef05fab3d752aa858f78)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'documentation/sphinx-static/switchers.js')
-rw-r--r-- | documentation/sphinx-static/switchers.js | 244 |
1 files changed, 0 insertions, 244 deletions
diff --git a/documentation/sphinx-static/switchers.js b/documentation/sphinx-static/switchers.js deleted file mode 100644 index af7e334906..0000000000 --- a/documentation/sphinx-static/switchers.js +++ /dev/null | |||
@@ -1,244 +0,0 @@ | |||
1 | /* | ||
2 | NOTE FOR RELEASE MAINTAINERS: | ||
3 | This file only needs updating in the development release ("master" branch) | ||
4 | When documentation for stable releases is built, | ||
5 | the latest version from "master" is used | ||
6 | by https://git.yoctoproject.org/yocto-autobuilder-helper/tree/scripts/run-docs-build | ||
7 | */ | ||
8 | |||
9 | (function() { | ||
10 | 'use strict'; | ||
11 | |||
12 | var all_versions = { | ||
13 | 'dev': 'dev (3.5)', | ||
14 | '3.4.2': '3.4.2', | ||
15 | '3.3.5': '3.3.5', | ||
16 | '3.2.4': '3.2.4', | ||
17 | '3.1.15': '3.1.15', | ||
18 | '3.0.4': '3.0.4', | ||
19 | '2.7.4': '2.7.4', | ||
20 | }; | ||
21 | |||
22 | var all_doctypes = { | ||
23 | 'single': 'Individual Webpages', | ||
24 | 'mega': "All-in-one 'Mega' Manual", | ||
25 | }; | ||
26 | |||
27 | // Simple version comparision | ||
28 | // Return 1 if a > b | ||
29 | // Return -1 if a < b | ||
30 | // Return 0 if a == b | ||
31 | function ver_compare(a, b) { | ||
32 | if (a == "dev") { | ||
33 | return 1; | ||
34 | } | ||
35 | |||
36 | if (a === b) { | ||
37 | return 0; | ||
38 | } | ||
39 | |||
40 | var a_components = a.split("."); | ||
41 | var b_components = b.split("."); | ||
42 | |||
43 | var len = Math.min(a_components.length, b_components.length); | ||
44 | |||
45 | // loop while the components are equal | ||
46 | for (var i = 0; i < len; i++) { | ||
47 | // A bigger than B | ||
48 | if (parseInt(a_components[i]) > parseInt(b_components[i])) { | ||
49 | return 1; | ||
50 | } | ||
51 | |||
52 | // B bigger than A | ||
53 | if (parseInt(a_components[i]) < parseInt(b_components[i])) { | ||
54 | return -1; | ||
55 | } | ||
56 | } | ||
57 | |||
58 | // If one's a prefix of the other, the longer one is greater. | ||
59 | if (a_components.length > b_components.length) { | ||
60 | return 1; | ||
61 | } | ||
62 | |||
63 | if (a_components.length < b_components.length) { | ||
64 | return -1; | ||
65 | } | ||
66 | |||
67 | // Otherwise they are the same. | ||
68 | return 0; | ||
69 | } | ||
70 | |||
71 | function build_version_select(current_series, current_version) { | ||
72 | var buf = ['<select>']; | ||
73 | |||
74 | $.each(all_versions, function(version, title) { | ||
75 | var series = version.substr(0, 3); | ||
76 | if (series == current_series) { | ||
77 | if (version == current_version) | ||
78 | buf.push('<option value="' + version + '" selected="selected">' + title + '</option>'); | ||
79 | else | ||
80 | buf.push('<option value="' + version + '">' + title + '</option>'); | ||
81 | |||
82 | if (version != current_version) | ||
83 | buf.push('<option value="' + current_version + '" selected="selected">' + current_version + '</option>'); | ||
84 | } else { | ||
85 | buf.push('<option value="' + version + '">' + title + '</option>'); | ||
86 | } | ||
87 | }); | ||
88 | |||
89 | buf.push('</select>'); | ||
90 | return buf.join(''); | ||
91 | } | ||
92 | |||
93 | function build_doctype_select(current_doctype) { | ||
94 | var buf = ['<select>']; | ||
95 | |||
96 | $.each(all_doctypes, function(doctype, title) { | ||
97 | if (doctype == current_doctype) | ||
98 | buf.push('<option value="' + doctype + '" selected="selected">' + | ||
99 | all_doctypes[current_doctype] + '</option>'); | ||
100 | else | ||
101 | buf.push('<option value="' + doctype + '">' + title + '</option>'); | ||
102 | }); | ||
103 | if (!(current_doctype in all_doctypes)) { | ||
104 | // In case we're browsing a doctype that is not yet in all_doctypes. | ||
105 | buf.push('<option value="' + current_doctype + '" selected="selected">' + | ||
106 | current_doctype + '</option>'); | ||
107 | all_doctypes[current_doctype] = current_doctype; | ||
108 | } | ||
109 | buf.push('</select>'); | ||
110 | return buf.join(''); | ||
111 | } | ||
112 | |||
113 | function navigate_to_first_existing(urls) { | ||
114 | // Navigate to the first existing URL in urls. | ||
115 | var url = urls.shift(); | ||
116 | |||
117 | // Web browsers won't redirect file:// urls to file urls using ajax but | ||
118 | // its useful for local testing | ||
119 | if (url.startsWith("file://")) { | ||
120 | window.location.href = url; | ||
121 | return; | ||
122 | } | ||
123 | |||
124 | if (urls.length == 0) { | ||
125 | window.location.href = url; | ||
126 | return; | ||
127 | } | ||
128 | $.ajax({ | ||
129 | url: url, | ||
130 | success: function() { | ||
131 | window.location.href = url; | ||
132 | }, | ||
133 | error: function() { | ||
134 | navigate_to_first_existing(urls); | ||
135 | } | ||
136 | }); | ||
137 | } | ||
138 | |||
139 | function get_docroot_url() { | ||
140 | var url = window.location.href; | ||
141 | var root = DOCUMENTATION_OPTIONS.URL_ROOT; | ||
142 | |||
143 | var urlarray = url.split('/'); | ||
144 | // Trim off anything after '/' | ||
145 | urlarray.pop(); | ||
146 | var depth = (root.match(/\.\.\//g) || []).length; | ||
147 | for (var i = 0; i < depth; i++) { | ||
148 | urlarray.pop(); | ||
149 | } | ||
150 | |||
151 | return urlarray.join('/') + '/'; | ||
152 | } | ||
153 | |||
154 | function on_version_switch() { | ||
155 | var selected_version = $(this).children('option:selected').attr('value'); | ||
156 | var url = window.location.href; | ||
157 | var current_version = DOCUMENTATION_OPTIONS.VERSION; | ||
158 | var docroot = get_docroot_url() | ||
159 | |||
160 | var new_versionpath = selected_version + '/'; | ||
161 | if (selected_version == "dev") | ||
162 | new_versionpath = ''; | ||
163 | |||
164 | // dev versions have no version prefix | ||
165 | if (current_version == "dev") { | ||
166 | var new_url = docroot + new_versionpath + url.replace(docroot, ""); | ||
167 | var fallback_url = docroot + new_versionpath; | ||
168 | } else { | ||
169 | var new_url = url.replace('/' + current_version + '/', '/' + new_versionpath); | ||
170 | var fallback_url = new_url.replace(url.replace(docroot, ""), ""); | ||
171 | } | ||
172 | |||
173 | console.log(get_docroot_url()) | ||
174 | console.log(url + " to url " + new_url); | ||
175 | console.log(url + " to fallback " + fallback_url); | ||
176 | |||
177 | if (new_url != url) { | ||
178 | navigate_to_first_existing([ | ||
179 | new_url, | ||
180 | fallback_url, | ||
181 | 'https://www.yoctoproject.org/docs/', | ||
182 | ]); | ||
183 | } | ||
184 | } | ||
185 | |||
186 | function on_doctype_switch() { | ||
187 | var selected_doctype = $(this).children('option:selected').attr('value'); | ||
188 | var url = window.location.href; | ||
189 | if (selected_doctype == 'mega') { | ||
190 | var docroot = get_docroot_url() | ||
191 | var current_version = DOCUMENTATION_OPTIONS.VERSION; | ||
192 | // Assume manuals before 3.2 are using old docbook mega-manual | ||
193 | if (ver_compare(current_version, "3.2") < 0) { | ||
194 | var new_url = docroot + "mega-manual/mega-manual.html"; | ||
195 | } else { | ||
196 | var new_url = docroot + "singleindex.html"; | ||
197 | } | ||
198 | } else { | ||
199 | var new_url = url.replace("singleindex.html", "index.html") | ||
200 | } | ||
201 | |||
202 | if (new_url != url) { | ||
203 | navigate_to_first_existing([ | ||
204 | new_url, | ||
205 | 'https://www.yoctoproject.org/docs/', | ||
206 | ]); | ||
207 | } | ||
208 | } | ||
209 | |||
210 | // Returns the current doctype based upon the url | ||
211 | function doctype_segment_from_url(url) { | ||
212 | if (url.includes("singleindex") || url.includes("mega-manual")) | ||
213 | return "mega"; | ||
214 | return "single"; | ||
215 | } | ||
216 | |||
217 | $(document).ready(function() { | ||
218 | var release = DOCUMENTATION_OPTIONS.VERSION; | ||
219 | var current_doctype = doctype_segment_from_url(window.location.href); | ||
220 | var current_series = release.substr(0, 3); | ||
221 | var version_select = build_version_select(current_series, release); | ||
222 | |||
223 | $('.version_switcher_placeholder').html(version_select); | ||
224 | $('.version_switcher_placeholder select').bind('change', on_version_switch); | ||
225 | |||
226 | var doctype_select = build_doctype_select(current_doctype); | ||
227 | |||
228 | $('.doctype_switcher_placeholder').html(doctype_select); | ||
229 | $('.doctype_switcher_placeholder select').bind('change', on_doctype_switch); | ||
230 | |||
231 | if (ver_compare(release, "3.1") < 0) { | ||
232 | $('#outdated-warning').html('Version ' + release + ' of the project is now considered obsolete, please select and use a more recent version'); | ||
233 | $('#outdated-warning').css('padding', '.5em'); | ||
234 | } else if (release != "dev") { | ||
235 | $.each(all_versions, function(version, title) { | ||
236 | var series = version.substr(0, 3); | ||
237 | if (series == current_series && version != release) { | ||
238 | $('#outdated-warning').html('This document is for outdated version ' + release + ', you should select the latest release version in this series, ' + version + '.'); | ||
239 | $('#outdated-warning').css('padding', '.5em'); | ||
240 | } | ||
241 | }); | ||
242 | } | ||
243 | }); | ||
244 | })(); | ||