From 0a1261eb8419e728d3d6a8e5350645b69e090c87 Mon Sep 17 00:00:00 2001 From: Jarno <jarnowesthof@gmail.com> Date: Fri, 17 Feb 2023 19:16:37 +0100 Subject: [PATCH] WebHost: Add tutorials to sitemap and hide settings link for games without settings (#1452) * WebHost: Add tutorials to sitemap and hide settings link for games without settings * Fixed some typing imports --- Utils.py | 7 +++++-- WebHostLib/misc.py | 6 ++++-- WebHostLib/templates/siteMap.html | 17 +++++++++++++++-- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/Utils.py b/Utils.py index 133f1c45..010cc3e5 100644 --- a/Utils.py +++ b/Utils.py @@ -12,7 +12,7 @@ import io import collections import importlib import logging -from typing import BinaryIO, Coroutine, Optional, Set +from typing import BinaryIO, Coroutine, Optional, Set, Dict, Any, Union from yaml import load, load_all, dump, SafeLoader @@ -662,7 +662,10 @@ def messagebox(title: str, text: str, error: bool = False) -> None: def title_sorted(data: typing.Sequence, key=None, ignore: typing.Set = frozenset(("a", "the"))): """Sorts a sequence of text ignoring typical articles like "a" or "the" in the beginning.""" - def sorter(element: str) -> str: + def sorter(element: Union[str, Dict[str, Any]]) -> str: + if (not isinstance(element, str)): + element = element["title"] + parts = element.split(maxsplit=1) if parts[0].lower() in ignore: return parts[1].lower() diff --git a/WebHostLib/misc.py b/WebHostLib/misc.py index aa5467d6..bf9f4e2f 100644 --- a/WebHostLib/misc.py +++ b/WebHostLib/misc.py @@ -1,5 +1,6 @@ import datetime import os +from typing import List, Dict, Union import jinja2.exceptions from flask import request, redirect, url_for, render_template, Response, session, abort, send_from_directory @@ -163,8 +164,9 @@ def get_datapackage(): @app.route('/index') @app.route('/sitemap') def get_sitemap(): - available_games = [] + available_games: List[Dict[str, Union[str, bool]]] = [] for game, world in AutoWorldRegister.world_types.items(): if not world.hidden: - available_games.append(game) + has_settings: bool = isinstance(world.web.settings_page, bool) and world.web.settings_page + available_games.append({ 'title': game, 'has_settings': has_settings }) return render_template("siteMap.html", games=available_games) diff --git a/WebHostLib/templates/siteMap.html b/WebHostLib/templates/siteMap.html index 6d1816d5..1cfb71f8 100644 --- a/WebHostLib/templates/siteMap.html +++ b/WebHostLib/templates/siteMap.html @@ -29,17 +29,30 @@ <li><a href="/glossary/en">Glossary</a></li> </ul> + <h2>Tutorials</h2> + <ul> + <li><a href="/tutorial/Archipelago/setup/en">Multiworld Setup Tutorial</a></li> + <li><a href="/tutorial/Archipelago/using_website/en">Website User Guide</a></li> + <li><a href="/tutorial/Archipelago/mac/en">Setup Guide for Mac</a></li> + <li><a href="/tutorial/Archipelago/commands/en">Server and Client Commands</a></li> + <li><a href="/tutorial/Archipelago/advanced_settings/en">Advanced YAML Guide</a></li> + <li><a href="/tutorial/Archipelago/triggers/en">Triggers Guide</a></li> + <li><a href="/tutorial/Archipelago/plando/en">Plando Guide</a></li> + </ul> + <h2>Game Info Pages</h2> <ul> {% for game in games | title_sorted %} - <li><a href="{{ url_for('game_info', game=game, lang='en') }}">{{ game }}</a></li> + <li><a href="{{ url_for('game_info', game=game['title'], lang='en') }}">{{ game['title'] }}</a></li> {% endfor %} </ul> <h2>Game Settings Pages</h2> <ul> {% for game in games | title_sorted %} - <li><a href="{{ url_for('player_settings', game=game) }}">{{ game }}</a></li> + {% if game['has_settings'] %} + <li><a href="{{ url_for('player_settings', game=game['title']) }}">{{ game['title'] }}</a></li> + {% endif %} {% endfor %} </ul> </div>