Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 28 additions & 25 deletions _quarto.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,10 @@ project:
port: 5555
pre-render:
- python py_scripts/update_api_version.py
- python py_scripts/update_backend_process_support.py
- python py_scripts/check_images.py
resources:
- _data/backend_process_support.json
render:
- "*.qmd"
- "*.md"
Expand Down Expand Up @@ -50,18 +53,22 @@ website:
- sidebar:support
left:
- text: "About"
href: about.qmd
menu:
- text: "About openEO"
href: about.qmd
- text: "Project Steering Committee (PSC)"
href: psc.qmd
- text: "Services"
href: https://hub.openeo.org/
target: _blank
- text: "News"
href: news/news.qmd
- text: "Meetings"
href: meetings.qmd
- text: "Events"
href: events/events.qmd
- text: "PSC"
href: psc.qmd
- text: "Community"
menu:
- text: "News"
href: news/news.qmd
- text: "Meetings"
href: meetings.qmd
- text: "Events"
href: events/events.qmd

search: true
sidebar:
Expand All @@ -73,7 +80,7 @@ website:
text: Contact
- href: https://forum.dataspace.copernicus.eu/c/openeo/28
text: CDSE Forum
- href: Examples.qmd
- href: examples.qmd
text: Notebook examples
- id: user_documentation
title: "User Documentation"
Expand All @@ -82,25 +89,21 @@ website:
- href: documentation/cookbook.qmd
text: COOKBOOK
- section: KEY CONCEPTS
href: documentation/keyconcepts.qmd
contents:
- href: 404-not-found.qmd
- href: documentation/key_concepts/glossary.qmd
text: Glossary
- href: documentation/key_concepts/backend.qmd
text: Backends
- href: documentation/keyconcepts/openeo_api.qmd
- href: documentation/key_concepts/datacube.qmd
text: Datacube
- href: documentation/keyconcepts/processes.qmd
- href: documentation/key_concepts/processes.qmd
text: Processes
- section: SETUP
href: documentation/setup.qmd
- section: DATA DISCOVERY
href: documentation/data_discovery.qmd
contents:
- href: 404-not-found.qmd
text: Collections
- href: 404-not-found.qmd
text: Load Collections
- href: 404-not-found.qmd
text: Load STAC metadata
- href: documentation/key_concepts/architecture.qmd
text: openEO Architecture
- href: documentation/setup.qmd
text: SETUP
- href: documentation/data_discovery.qmd
text: DATA DISCOVERY
- section: CUBE OPERATIONS
href: documentation/cube_operations.qmd
contents:
Expand Down
3 changes: 1 addition & 2 deletions contact.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,7 @@ Germany<br />
The email address below is meant for general topics around the openEO project, openEO PSC, openEO API specification, or openEO process specification.
The email address below is **NOT** meant for technical support regarding specific service providers or client implementations.

- If you need help with specific service providers (e.g. openEO Platform or CDSE), please use their support channels.
- [openEO Platform Support Forum](https://forums.openeo.cloud)
- If you need help with specific service providers (e.g. CDSE), please use their support channels.
- [Copernicus Dataspace Ecosystem Support](https://helpcenter.dataspace.copernicus.eu/hc/en-gb/community/topics)
- If you need help with specific clients, please use the corresponding GitHub issue trackers:
- [Python client](https://github.com/Open-EO/openeo-python-client/issues)
Expand Down
77 changes: 38 additions & 39 deletions custom.html
Original file line number Diff line number Diff line change
Expand Up @@ -26,54 +26,53 @@
window.addEventListener('popstate', setActiveClassForCurrentUrl);
window.addEventListener('hashchange', setActiveClassForCurrentUrl);

document.addEventListener("DOMContentLoaded", function () {
const badges = Array.from(document.querySelectorAll(".tag-filter-badge"));
document.addEventListener("DOMContentLoaded", async function () {
const items = Array.from(document.querySelectorAll(".tag-filter-item"));
if (badges.length === 0 || items.length === 0) return;

const filterUi = document.querySelector(".tag-filter-ui");
if (items.length === 0 || !filterUi) return;
const staticBadges = Array.from(document.querySelectorAll(".tag-filter-badge"));
const hasLiveProcesses = items.some((item) => item.hasAttribute("data-process"));
let support = null;
if (hasLiveProcesses) {
try {
const url = new URL("../../_data/backend_process_support.json", window.location.href);
const response = await fetch(url);
if (!response.ok) throw new Error(`HTTP ${response.status}`);
support = await response.json();
} catch (error) { console.warn("Could not load backend process support data.", error); }
}
const getTags = (item) => {
const fromDataAttr = (item.getAttribute("data-tags") || "")
.toLowerCase()
.split(/\s+/)
.filter(Boolean);

if (fromDataAttr.length > 0) {
return new Set(fromDataAttr);
if (support && item.hasAttribute("data-process")) {
return new Set(item.getAttribute("data-process").split(/[\s,]+/).flatMap((id) => support.processes[id] || []));
}

const fromBadges = Array.from(item.querySelectorAll(".badge"))
.flatMap((el) => Array.from(el.classList))
.filter((cls) => cls.startsWith("badge-"))
.map((cls) => cls.replace("badge-", "").toLowerCase());

return new Set(fromBadges);
return new Set((item.getAttribute("data-tags") || "").toLowerCase().split(/\s+/).filter(Boolean));
};

let badges = staticBadges;
if (support) {
const availableTags = [...new Set(items.flatMap((item) => [...getTags(item)]))].sort();
filterUi.replaceChildren();
badges = availableTags.map((tag) => {
const button = document.createElement("button");
button.className = "tag-filter-badge active";
button.dataset.tag = tag;
button.textContent = support.backends[tag]?.label || tag;
filterUi.appendChild(button);
return button;
});
}
if (badges.length === 0) return;
const applyFilter = () => {
const activeBadges = badges.filter((b) => b.classList.contains("active"));
const selectedTags = new Set(activeBadges.map((b) => b.getAttribute("data-tag")));

const selectedTags = new Set(badges.filter((badge) => badge.classList.contains("active")).map((badge) => badge.dataset.tag));
items.forEach((item) => {
const tags = getTags(item);
const visible = Array.from(selectedTags).some((tag) => tags.has(tag));
item.hidden = !visible;
const tags = getTags(item);
item.hidden = ![...selectedTags].some((tag) => tags.has(tag));
});
};

badges.forEach((badge) => {
badge.addEventListener("click", function (e) {
e.preventDefault();
this.classList.toggle("active");
this.classList.toggle("inactive");
applyFilter();
});
});

badges.forEach((badge) => badge.addEventListener("click", function (event) {
event.preventDefault(); this.classList.toggle("active"); this.classList.toggle("inactive"); applyFilter();
}));
applyFilter();
});



});
window.onload = () => {
const brand = document.querySelector('.navbar-brand');
if (brand) {
Expand Down
Loading
Loading