diff --git a/themes/xmpp.org/layouts/shortcodes/xeps-table.html b/themes/xmpp.org/layouts/shortcodes/xeps-table.html
index f5622c46d..1ae5d2f37 100644
--- a/themes/xmpp.org/layouts/shortcodes/xeps-table.html
+++ b/themes/xmpp.org/layouts/shortcodes/xeps-table.html
@@ -97,6 +97,7 @@
Filter XEPs
XEP-{{- $number_str -}} |
{{- .title -}} |
+
+ {{- if .supersededby -}}
+
+ {{- end -}}
+ |
{{- .type -}} |
{{- .status -}} |
{{- .last_revision_date -}} |
diff --git a/themes/xmpp.org/static/js/scripts.js b/themes/xmpp.org/static/js/scripts.js
index cc496a8ff..7dfd8bd82 100644
--- a/themes/xmpp.org/static/js/scripts.js
+++ b/themes/xmpp.org/static/js/scripts.js
@@ -66,7 +66,9 @@ document.addEventListener("DOMContentLoaded", () => {
}
}
- initialize_bootstrap_tooltips()
+ initialize_bootstrap_popovers();
+
+ initialize_bootstrap_tooltips();
software_resize_extensions_collapse();
});
@@ -76,6 +78,11 @@ function initialize_bootstrap_tooltips() {
const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl))
}
+function initialize_bootstrap_popovers() {
+ const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]')
+ const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl))
+}
+
// Page /extensions/
function filter_xeps() {
const xeplist = document.getElementById("xeplist");
diff --git a/tools/prepare_xep_list.py b/tools/prepare_xep_list.py
index 0bebcc546..779748de4 100755
--- a/tools/prepare_xep_list.py
+++ b/tools/prepare_xep_list.py
@@ -68,6 +68,20 @@ def fix_status(status: str) -> str:
if tag.text is not None:
tag_list.append(tag.text) # noqa: PERF401
+ supersedes_list: list[str] = []
+ supersedes = xep.find("supersedes")
+ if supersedes is not None:
+ for spec in supersedes.findall("spec"):
+ if spec.text is not None:
+ supersedes_list.append(spec.text) # noqa: PERF401
+
+ supersededby_list: list[str] = []
+ supersededby = xep.find("supersededby")
+ if supersededby is not None:
+ for spec in supersededby.findall("spec"):
+ if spec.text is not None:
+ supersededby_list.append(spec.text) # noqa: PERF401
+
date = None
version = None
initials = None
@@ -100,6 +114,8 @@ def fix_status(status: str) -> str:
"type": xep_type,
"abstract": abstract,
"tags": tag_list,
+ "supersedes": supersedes_list,
+ "supersededby": supersededby_list,
},
)
xeps_sorted = sorted(xeps, key=lambda xep: xep["number"])