<olympic-medal-ranking> with JavaScript
by WebComponents
HTML
<h1>One Web Component <olympic-medal-ranking></h1>
<h1>displays the whole Olympic Medal Ranking</h1>
<h3><a href="https://github.com/olympic-medal-ranking/olympic-medal-ranking.github.io">
Documentation and code available on GitHub</a></h3>
<h2><olympic-medal-ranking></olympic-medal-ranking></h2>
<olympic-medal-ranking></olympic-medal-ranking>
<style id="PARTS">
/* global CSS styles pre-defined "parts" inside shadowDOM */
olympic-medal-ranking {
&::part(table) {
max-width: 550px;
}
&::part(header) {
font-size: 230%;
color: goldenrod;
text-shadow: 1px 1px 1px black;
}
&::part(medal) {
font-weight: bold;
}
&::part(rank),
&::part(countrycode),
&::part(medaltotal) {
font-weight: normal;
color: grey;
}
}
</style>
<hr>
<h2><olympic-medal-ranking total="5" lang="FRA"></olympic-medal-ranking></h2>
<p>
<a href="https://odf.olympictech.org/2024-Paris/codes/HTML/og_cc/Language.htm">IOC language codes</a>
</p>
<olympic-medal-ranking total="5" lang="FRA">Classement des Médailles Olympiques de Paris
2024</olympic-medal-ranking>
<style>
olympic-medal-ranking[lang="FRA"] {
&::part(header) {
font-size: 170%;
font-weight: bold;
}
}
</style>
<hr>
<h2><olympic-medal-ranking flag="EU" filter="EU"></olympic-medal-ranking></h2>
<olympic-medal-ranking flag="EU" filter="EU">
European Union Medal Ranking
</olympic-medal-ranking>
<style>
olympic-medal-ranking[flag="EU"] {
&::part(thead) {
background: #003399;
}
&::part(header) {
background:...
JavaScript
!(function () {
// safely load Flag WebComponents
if (!customElements.get("flag-olympic"))
document.head.append(Object.assign(document.createElement("script"), {
src: "//flagmeister.github.io/elements.flagmeister.min.js",
//async: true,
//onload: () => console.log(`Loaded ${src}`)
}))
})();
customElements.whenDefined("flag-olympic").then(() => {
customElements.define("olympic-medal-ranking", class extends HTMLElement {
async connectedCallback() {
setTimeout(() => this.connectedCallback(), 3e5);
//BUG!this.innerHTML = "Loading Olympic Medal Ranking..."; // show loading message
const LANG = this.getAttribute("lang") || "ENG";
// API will probably be different for future Olympics
const API = `//olympics.com/OG2024/data/CIS_MedalNOCs~lang=${LANG}~comp=OG2024.json`;
//const LANGS = "ENG,FRA,GER,SPA,ITA,CHI"; // optional UI languages
const FLAGS =...