Add trailing slash on directories in website mode to assist with relative asset links

This commit is contained in:
Miguel Jacq 2023-10-17 17:45:23 +11:00
parent 7c11266107
commit cf6a6e4590
No known key found for this signature in database
GPG Key ID: 59B3F0C24135C6A9
2 changed files with 15 additions and 9 deletions

View File

@ -131,7 +131,7 @@ class SendBaseModeWeb:
self.set_file_info_custom(filenames, processed_size_callback) self.set_file_info_custom(filenames, processed_size_callback)
def directory_listing(self, filenames, path="", filesystem_path=None): def directory_listing(self, filenames, path="", filesystem_path=None, add_trailing_slash=False):
# Tell the GUI about the directory listing # Tell the GUI about the directory listing
history_id = self.cur_history_id history_id = self.cur_history_id
self.cur_history_id += 1 self.cur_history_id += 1
@ -150,12 +150,12 @@ class SendBaseModeWeb:
breadcrumbs_leaf = breadcrumbs.pop()[0] breadcrumbs_leaf = breadcrumbs.pop()[0]
# If filesystem_path is None, this is the root directory listing # If filesystem_path is None, this is the root directory listing
files, dirs = self.build_directory_listing(path, filenames, filesystem_path) files, dirs = self.build_directory_listing(path, filenames, filesystem_path, add_trailing_slash)
return self.directory_listing_template( return self.directory_listing_template(
path, files, dirs, breadcrumbs, breadcrumbs_leaf path, files, dirs, breadcrumbs, breadcrumbs_leaf
) )
def build_directory_listing(self, path, filenames, filesystem_path): def build_directory_listing(self, path, filenames, filesystem_path, add_trailing_slash=False):
files = [] files = []
dirs = [] dirs = []
@ -168,9 +168,14 @@ class SendBaseModeWeb:
is_dir = os.path.isdir(this_filesystem_path) is_dir = os.path.isdir(this_filesystem_path)
if is_dir: if is_dir:
dirs.append( if add_trailing_slash:
{"link": os.path.join(f"/{path}", filename), "basename": filename} dirs.append(
) {"link": os.path.join(f"/{path}", filename, ""), "basename": filename}
)
else:
dirs.append(
{"link": os.path.join(f"/{path}", filename), "basename": filename}
)
else: else:
size = os.path.getsize(this_filesystem_path) size = os.path.getsize(this_filesystem_path)
size_human = self.common.human_readable_filesize(size) size_human = self.common.human_readable_filesize(size)

View File

@ -84,12 +84,13 @@ class WebsiteModeWeb(SendBaseModeWeb):
return self.stream_individual_file(self.files[index_path]) return self.stream_individual_file(self.files[index_path])
else: else:
# Otherwise, render directory listing # Otherwise, render directory listing, and enforce trailing slash
# which can help with relative asset links in sub-directories.
filenames = [] filenames = []
for filename in os.listdir(filesystem_path): for filename in os.listdir(filesystem_path):
filenames.append(filename) filenames.append(filename)
filenames.sort() filenames.sort()
return self.directory_listing(filenames, path, filesystem_path) return self.directory_listing(filenames, path, filesystem_path, True)
# If it's a file # If it's a file
elif os.path.isfile(filesystem_path): elif os.path.isfile(filesystem_path):
@ -112,7 +113,7 @@ class WebsiteModeWeb(SendBaseModeWeb):
# Root directory listing # Root directory listing
filenames = list(self.root_files) filenames = list(self.root_files)
filenames.sort() filenames.sort()
return self.directory_listing(filenames, path) return self.directory_listing(filenames, path, None, True)
else: else:
# If the path isn't found, throw a 404 # If the path isn't found, throw a 404