aboutText = {
const { initializeApp, getApps, getApp } = await import("https://www.gstatic.com/firebasejs/10.14.1/firebase-app.js");
const { getFirestore, collection, onSnapshot } = await import("https://www.gstatic.com/firebasejs/10.14.1/firebase-firestore.js");
const firebaseConfig = {
apiKey: "AIzaSyD1FLnIrd86qOsFPLi5y1q_EIU0lhL5gxc",
authDomain: "evdtoolkit.firebaseapp.com",
projectId: "evdtoolkit",
storageBucket: "evdtoolkit.firebasestorage.app",
messagingSenderId: "1002374431151",
appId: "1:1002374431151:web:fe3724bb1f39eb4744af5a"
};
const app = getApps().length ? getApp() : initializeApp(firebaseConfig);
const db = getFirestore(app);
return Generators.observe(notify => {
const unsubscribe = onSnapshot(collection(db, "AboutText"), snapshot => {
notify(snapshot.docs.map(d => d.data()).sort((a, b) => (a.order ?? 999) - (b.order ?? 999)));
});
return unsubscribe;
});
}โน๏ธ About
Information about the EVD Safety Toolkit
aboutPurpose = {
const { getApps, getApp } = await import("https://www.gstatic.com/firebasejs/10.14.1/firebase-app.js");
const { getFirestore, collection, onSnapshot } = await import("https://www.gstatic.com/firebasejs/10.14.1/firebase-firestore.js");
const db = getFirestore(getApp());
return Generators.observe(notify => {
const unsubscribe = onSnapshot(collection(db, "AboutEducationalPurpose"), snapshot => {
notify(snapshot.docs.map(d => d.data()).sort((a, b) => (a.order ?? 999) - (b.order ?? 999)));
});
return unsubscribe;
});
}App Overview
overviewParagraphs.length === 0
? html`<p>The EVD Toolkit is an educational platform designed to support understanding of external ventricular drain (EVD) management, troubleshooting, transport safety, ICP monitoring principles, and neurocritical care education.</p>`
: html`<div>${overviewParagraphs.map(p => `<p>${p.text}</p>`).join("")}</div>`Educational Purpose
Global Collaborators
collaborators = {
const { initializeApp, getApps, getApp } = await import("https://www.gstatic.com/firebasejs/10.14.1/firebase-app.js");
const { getFirestore, collection, onSnapshot } = await import("https://www.gstatic.com/firebasejs/10.14.1/firebase-firestore.js");
const firebaseConfig = {
apiKey: "AIzaSyD1FLnIrd86qOsFPLi5y1q_EIU0lhL5gxc",
authDomain: "evdtoolkit.firebaseapp.com",
projectId: "evdtoolkit",
storageBucket: "evdtoolkit.firebasestorage.app",
messagingSenderId: "1002374431151",
appId: "1:1002374431151:web:fe3724bb1f39eb4744af5a"
};
const app = getApps().length ? getApp() : initializeApp(firebaseConfig);
const db = getFirestore(app);
// Live listener โ updates automatically whenever Collaborators
// changes in Firestore, no page reload needed.
return Generators.observe(notify => {
const unsubscribe = onSnapshot(collection(db, "Collaborators"), snapshot => {
notify(
snapshot.docs
.map(d => d.data())
.sort((a, b) => (a.order ?? 999) - (b.order ?? 999))
);
});
return unsubscribe;
});
}// Port of AboutView.swift's people-sorting rule: ordered items first
// (by order), then unordered items alphabetically by name.
sortPeople = function(people) {
const ordered = people.filter(p => p.order != null).sort((a, b) => a.order - b.order);
const unordered = people.filter(p => p.order == null).sort((a, b) => (a.name ?? "").localeCompare(b.name ?? ""));
return [...ordered, ...unordered];
}function peopleList(people) {
return people.length === 0
? html`<div class="fs-empty">Loadingโฆ</div>`
: html`<div>${people.map(p => `
<div class="fs-ref-entry">
<p class="fs-ref-title">${p.name ?? ""}</p>
<p class="fs-ref-authors">${p.Role ?? ""}</p>
<p class="fs-ref-journal">${p.Affiliation ?? ""}${[p.City, p.Country].filter(Boolean).length ? ` โ ${[p.City, p.Country].filter(Boolean).join(", ")}` : ""}</p>
</div>
`).join("")}</div>`
}