Skip to content

Commit 1a5c4a7

Browse files
authored
Fix base_url in error pages. (mkdocs#1599)
Closes mkdocs#1598.
1 parent da3a252 commit 1a5c4a7

File tree

3 files changed

+24
-10
lines changed

3 files changed

+24
-10
lines changed

mkdocs/commands/build.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ def get_context(nav, files, config, page=None, base_url=''):
5252
'nav': nav,
5353
'pages': files.documentation_pages(),
5454

55-
'base_url': base_url.rstrip('/'),
55+
'base_url': base_url,
5656

5757
'extra_css': extra_css,
5858
'extra_javascript': extra_javascript,
@@ -78,8 +78,10 @@ def _build_template(name, template, files, config, nav):
7878
if utils.is_error_template(name):
7979
# Force absolute URLs in the nav of error pages and account for the
8080
# possability that the docs root might be different than the server root.
81-
# See https://github.com/mkdocs/mkdocs/issues/77
82-
base_url = utils.urlparse(config['site_url']).path
81+
# See https://github.com/mkdocs/mkdocs/issues/77.
82+
# However, if site_url is not set, assume the docs root and server root
83+
# are the same. See https://github.com/mkdocs/mkdocs/issues/1598.
84+
base_url = utils.urlparse(config['site_url'] or '/').path
8385
else:
8486
base_url = utils.get_relative_url('.', name)
8587

mkdocs/contrib/search/templates/search/main.js

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,20 @@ function getSearchTermFromLocation() {
99
}
1010
}
1111

12+
function joinUrl (base, path) {
13+
if (path.substring(0, 1) === "/") {
14+
// path starts with `/`. Thus it is absolute.
15+
return path;
16+
}
17+
if (base.substring(base.length-1) === "/") {
18+
// base ends with `/`
19+
return base + path;
20+
}
21+
return base + "/" + path;
22+
}
23+
1224
function formatResult (location, title, summary) {
13-
return '<article><h3><a href="' + base_url + '/' + location + '">'+ title + '</a></h3><p>' + summary +'</p></article>';
25+
return '<article><h3><a href="' + joinUrl(base_url, location) + '">'+ title + '</a></h3><p>' + summary +'</p></article>';
1426
}
1527

1628
function displayResults (results) {
@@ -67,7 +79,7 @@ function onWorkerMessage (e) {
6779
if (!window.Worker) {
6880
console.log('Web Worker API not supported');
6981
// load index in main thread
70-
$.getScript(base_url + "/search/worker.js").done(function () {
82+
$.getScript(joinUrl(base_url, "search/worker.js")).done(function () {
7183
console.log('Loaded worker');
7284
init();
7385
window.postMessage = function (msg) {
@@ -78,7 +90,7 @@ if (!window.Worker) {
7890
});
7991
} else {
8092
// Wrap search in a web worker
81-
var searchWorker = new Worker(base_url + "/search/worker.js");
93+
var searchWorker = new Worker(joinUrl(base_url, "search/worker.js"));
8294
searchWorker.postMessage({init: true});
8395
searchWorker.onmessage = onWorkerMessage;
8496
}

mkdocs/tests/build_tests.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,22 +91,22 @@ def test_context_base_url_relative_no_page_use_directory_urls(self):
9191
def test_context_base_url_absolute_no_page(self):
9292
cfg = load_config(use_directory_urls=False)
9393
context = build.get_context(mock.Mock(), mock.Mock(), cfg, base_url='/')
94-
self.assertEqual(context['base_url'], '')
94+
self.assertEqual(context['base_url'], '/')
9595

9696
def test_context_base_url__absolute_no_page_use_directory_urls(self):
9797
cfg = load_config()
9898
context = build.get_context(mock.Mock(), mock.Mock(), cfg, base_url='/')
99-
self.assertEqual(context['base_url'], '')
99+
self.assertEqual(context['base_url'], '/')
100100

101101
def test_context_base_url_absolute_nested_no_page(self):
102102
cfg = load_config(use_directory_urls=False)
103103
context = build.get_context(mock.Mock(), mock.Mock(), cfg, base_url='/foo/')
104-
self.assertEqual(context['base_url'], '/foo')
104+
self.assertEqual(context['base_url'], '/foo/')
105105

106106
def test_context_base_url__absolute_nested_no_page_use_directory_urls(self):
107107
cfg = load_config()
108108
context = build.get_context(mock.Mock(), mock.Mock(), cfg, base_url='/foo/')
109-
self.assertEqual(context['base_url'], '/foo')
109+
self.assertEqual(context['base_url'], '/foo/')
110110

111111
def test_context_extra_css_js_from_homepage(self):
112112
nav_cfg = [

0 commit comments

Comments
 (0)