From 651b78d8e6e0183a29e8cef0862b286ee6b048b7 Mon Sep 17 00:00:00 2001 From: Simon Willison Date: Tue, 28 Mar 2023 23:07:21 -0700 Subject: [PATCH] Redesign ?_extra=extras a bit, refs #262 --- datasette/views/table.py | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/datasette/views/table.py b/datasette/views/table.py index 8c133c26..c102c103 100644 --- a/datasette/views/table.py +++ b/datasette/views/table.py @@ -1539,17 +1539,27 @@ async def table_view_data( async def extra_extras(): "Available ?_extra= blocks" - return { - "available": [ - { - "name": key[len("extra_") :], - "doc": fn.__doc__, - } - for key, fn in registry._registry.items() - if key.startswith("extra_") - ], - "selected": list(extras), - } + all_extras = [ + (key[len("extra_") :], fn.__doc__) + for key, fn in registry._registry.items() + if key.startswith("extra_") + ] + return [ + { + "name": name, + "description": doc, + "toggle_url": datasette.absolute_url( + request, + datasette.urls.path( + path_with_added_args(request, {"_extra": name}) + if name not in extras + else path_with_removed_args(request, {"_extra": name}) + ), + ), + "selected": name in extras, + } + for name, doc in all_extras + ] async def extra_facets_timed_out(extra_facet_results): return extra_facet_results["timed_out"]