ui: show MP and novel tracks separately
Browse files- index.html +26 -3
index.html
CHANGED
|
@@ -206,6 +206,7 @@
|
|
| 206 |
<div class="card">
|
| 207 |
<h2><span id="t_board_h"></span><span class="cnt" id="counts"></span></h2>
|
| 208 |
<div id="divbar"></div>
|
|
|
|
| 209 |
<div class="scroll">
|
| 210 |
<table>
|
| 211 |
<thead><tr id="head"></tr></thead>
|
|
@@ -285,6 +286,8 @@ const T = {
|
|
| 285 |
mcounts:(m,n)=>`๋ชจ๋ธ ${m} ยท ์ ์ถ ${n}`,
|
| 286 |
mlegend:`<span><i></i>์ต๊ณ ์ ์</span><span><u></u>ํ๊ท </span><span>์ ์ถ ์</span>`,
|
| 287 |
tabs:{board:"๋ํ ยท ์์ํ", guide:"์ฐธ๊ฐ ๊ฐ์ด๋", models:"๋ชจ๋ธ๋ณ ์ฑ๊ณผ"},
|
|
|
|
|
|
|
| 288 |
divs:{all:"์ ์ฒด", fluoride:"๋ถํ๋ฌผ", halide:"์ผํยท๋ธ๋กฌํยท์์ค๋ํ", sulfide:"ํฉํ๋ฌผ",
|
| 289 |
oxide:"์ฐํ๋ฌผ", nitride:"์งํ๋ฌผ", hydride:"์์ํ๋ฌผ", other:"๊ธฐํ"},
|
| 290 |
divnote:"์์ด์จ ๊ณจ๊ฒฉ์ ๋ฐ๋ผ ๋ถ๋ฌธ์ ๋๋ด์ต๋๋ค. <b>์ ์๋ ๋ถ๋ฌธ๊ณผ ๋ฌด๊ดํ๊ฒ ๋์ผํ ๊ธฐ์ค</b>์ผ๋ก ๋งค๊ฒจ์ง๋ฉฐ, ๋ถ๋ฌธ์ ๊ฐ์ ํํ ๊ณ์ด ์์์ ๋น๊ตํ์๋ผ๊ณ ๋ ๊ฒ์
๋๋ค.",
|
|
@@ -367,6 +370,8 @@ const T = {
|
|
| 367 |
mcounts:(m,n)=>`${m} models ยท ${n} entries`,
|
| 368 |
mlegend:`<span><i></i>Best score</span><span><u></u>Mean</span><span>Entries</span>`,
|
| 369 |
tabs:{board:"Challenge ยท Board", guide:"How to take part", models:"By model"},
|
|
|
|
|
|
|
| 370 |
divs:{all:"All", fluoride:"Fluoride", halide:"Chloride / bromide / iodide", sulfide:"Sulfide",
|
| 371 |
oxide:"Oxide", nitride:"Nitride", hydride:"Hydride", other:"Other"},
|
| 372 |
divnote:"Divisions follow the anion framework. <b>Scores are identical across divisions</b> - the split is there so you can compare within a chemical family.",
|
|
@@ -521,7 +526,7 @@ const COLS = ["rank","cand","user","who","date","oxidation","li_stability","nove
|
|
| 521 |
// ํ๊ฐ ์ปค์ง๋ฉด ํ๊บผ๋ฒ์ ๊ทธ๋ฆฌ์ง ์๊ณ ํ ํ์ด์ง์ฉ ๊ทธ๋ฆฐ๋ค.
|
| 522 |
const PAGE_SIZE = 500;
|
| 523 |
let LANG = "ko", DATA = null, SEASONS = [], SEASON = 1;
|
| 524 |
-
let sortKey = "total", sortDir = -1, page = 0, DIV = "all";
|
| 525 |
const t = () => T[LANG];
|
| 526 |
|
| 527 |
let ME = null;
|
|
@@ -713,6 +718,21 @@ function renderDivBar(){
|
|
| 713 |
});
|
| 714 |
}
|
| 715 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 716 |
function renderPager(total,pages){
|
| 717 |
const host = $("#pager"), d = t();
|
| 718 |
if(pages<=1){ host.innerHTML=""; return; }
|
|
@@ -757,9 +777,12 @@ function render(){
|
|
| 757 |
});
|
| 758 |
|
| 759 |
renderDivBar();
|
|
|
|
| 760 |
// ๋ถ๋ฌธ์ ๊ณ ๋ฅด๋ฉด ๊ทธ ๋ถ๋ฌธ + ๊ธฐ์ค๋ฌผ์ง๋ง ๋จ๊ธด๋ค. ๊ธฐ์ค๋ฌผ์ง์ ์ฒ๋๋ผ ํญ์ ๋ณด์ฌ์ผ ํ๋ค.
|
| 761 |
-
|
| 762 |
: DATA.entries.filter(e=>e.is_anchor || e.division===DIV);
|
|
|
|
|
|
|
| 763 |
const all = pool.slice().sort((a,b)=>{
|
| 764 |
const x=sortVal(a,sortKey), y=sortVal(b,sortKey);
|
| 765 |
if(x<y) return -sortDir; if(x>y) return sortDir; return 0;
|
|
@@ -789,7 +812,7 @@ function render(){
|
|
| 789 |
+ (unscored ? ` <span class="pill warn">${esc(hk || d.hold)}</span>` : "");
|
| 790 |
const has = (e.detail && Object.keys(e.detail).length) || (unscored && e.gate);
|
| 791 |
return `<tr class="${cls}${has?" pick":""}"${has?` data-i="${e.candidate_id}"`:""}>
|
| 792 |
-
<td class="num">${(DIV==="all" ? e.rank : e.div_rank) ?? "โ"}</td>
|
| 793 |
<td>${esc(e.formula||e.candidate_id||"")}${e.masked?' <span class="pill">๐</span>':""}</td>
|
| 794 |
<td>${who}</td><td>${esc(e.model_name||"")}</td><td>${dt}</td>
|
| 795 |
${num("oxidation")}${num("li_stability")}${num("novelty")}
|
|
|
|
| 206 |
<div class="card">
|
| 207 |
<h2><span id="t_board_h"></span><span class="cnt" id="counts"></span></h2>
|
| 208 |
<div id="divbar"></div>
|
| 209 |
+
<div id="trackbar"></div>
|
| 210 |
<div class="scroll">
|
| 211 |
<table>
|
| 212 |
<thead><tr id="head"></tr></thead>
|
|
|
|
| 286 |
mcounts:(m,n)=>`๋ชจ๋ธ ${m} ยท ์ ์ถ ${n}`,
|
| 287 |
mlegend:`<span><i></i>์ต๊ณ ์ ์</span><span><u></u>ํ๊ท </span><span>์ ์ถ ์</span>`,
|
| 288 |
tabs:{board:"๋ํ ยท ์์ํ", guide:"์ฐธ๊ฐ ๊ฐ์ด๋", models:"๋ชจ๋ธ๋ณ ์ฑ๊ณผ"},
|
| 289 |
+
tracks:{all:"์ ์ฒด", mp:"MP ์๋ก (MP ๊ฐ์ผ๋ก ์ฑ์ )", novel:"์ ๊ท ์กฐ์ฑ (์ง์ ๊ณ์ฐ)"},
|
| 290 |
+
tracknote:"MP ์ ๊ฐ์ด ์์ผ๋ฉด ๊ทธ ๊ฐ์, ์์ผ๋ฉด ์ ํฌ๊ฐ ์ง์ ๊ณ์ฐํฉ๋๋ค. ๋ ์์ ๋๊ธ์ด ๋ฌ๋ผ (๊ฐ์ ์กฐ์ฑ 40๊ฑด ์ค์ธก, ์ง์ ๊ณ์ฐ ์ชฝ์ด 88%์์ ํ๊ท 1.0์ ๋ฎ์) ์์๋ฅผ ๋ฐ๋ก ๋งค๊น๋๋ค.",
|
| 291 |
divs:{all:"์ ์ฒด", fluoride:"๋ถํ๋ฌผ", halide:"์ผํยท๋ธ๋กฌํยท์์ค๋ํ", sulfide:"ํฉํ๋ฌผ",
|
| 292 |
oxide:"์ฐํ๋ฌผ", nitride:"์งํ๋ฌผ", hydride:"์์ํ๋ฌผ", other:"๊ธฐํ"},
|
| 293 |
divnote:"์์ด์จ ๊ณจ๊ฒฉ์ ๋ฐ๋ผ ๋ถ๋ฌธ์ ๋๋ด์ต๋๋ค. <b>์ ์๋ ๋ถ๋ฌธ๊ณผ ๋ฌด๊ดํ๊ฒ ๋์ผํ ๊ธฐ์ค</b>์ผ๋ก ๋งค๊ฒจ์ง๋ฉฐ, ๋ถ๋ฌธ์ ๊ฐ์ ํํ ๊ณ์ด ์์์ ๋น๊ตํ์๋ผ๊ณ ๋ ๊ฒ์
๋๋ค.",
|
|
|
|
| 370 |
mcounts:(m,n)=>`${m} models ยท ${n} entries`,
|
| 371 |
mlegend:`<span><i></i>Best score</span><span><u></u>Mean</span><span>Entries</span>`,
|
| 372 |
tabs:{board:"Challenge ยท Board", guide:"How to take part", models:"By model"},
|
| 373 |
+
tracks:{all:"All", mp:"In MP (scored on MP values)", novel:"Novel (computed here)"},
|
| 374 |
+
tracknote:"Where Materials Project has a value we use it; where it does not, we compute one. The two rulers disagree (40 identical compositions measured; the computed path scores 1.0 point lower on 88% of them), so the two are ranked separately.",
|
| 375 |
divs:{all:"All", fluoride:"Fluoride", halide:"Chloride / bromide / iodide", sulfide:"Sulfide",
|
| 376 |
oxide:"Oxide", nitride:"Nitride", hydride:"Hydride", other:"Other"},
|
| 377 |
divnote:"Divisions follow the anion framework. <b>Scores are identical across divisions</b> - the split is there so you can compare within a chemical family.",
|
|
|
|
| 526 |
// ํ๊ฐ ์ปค์ง๋ฉด ํ๊บผ๋ฒ์ ๊ทธ๋ฆฌ์ง ์๊ณ ํ ํ์ด์ง์ฉ ๊ทธ๋ฆฐ๋ค.
|
| 527 |
const PAGE_SIZE = 500;
|
| 528 |
let LANG = "ko", DATA = null, SEASONS = [], SEASON = 1;
|
| 529 |
+
let sortKey = "total", sortDir = -1, page = 0, DIV = "all", TRK = "all";
|
| 530 |
const t = () => T[LANG];
|
| 531 |
|
| 532 |
let ME = null;
|
|
|
|
| 718 |
});
|
| 719 |
}
|
| 720 |
|
| 721 |
+
function renderTrackBar(){
|
| 722 |
+
const d = t(), host = $("#trackbar");
|
| 723 |
+
if(!host) return;
|
| 724 |
+
const tally = {all:0, mp:0, novel:0};
|
| 725 |
+
(DATA.entries||[]).forEach(e=>{ if(e.is_anchor) return; tally.all++;
|
| 726 |
+
if(e.track==="mp") tally.mp++; else if(e.track==="novel") tally.novel++; });
|
| 727 |
+
if(!tally.mp && !tally.novel){ host.innerHTML=""; return; }
|
| 728 |
+
const btn=(k,n)=>`<button data-k="${k}" class="${k===TRK?"on":""}">${esc(d.tracks[k]||k)}<span class="dn">${n}</span></button>`;
|
| 729 |
+
host.innerHTML = btn("all",tally.all)+btn("mp",tally.mp)+btn("novel",tally.novel)
|
| 730 |
+
+ `<div class="sub" style="margin-top:6px">${esc(d.tracknote||"")}</div>`;
|
| 731 |
+
host.querySelectorAll("button[data-k]").forEach(b=>b.onclick=()=>{
|
| 732 |
+
TRK=b.dataset.k; page=0; render();
|
| 733 |
+
});
|
| 734 |
+
}
|
| 735 |
+
|
| 736 |
function renderPager(total,pages){
|
| 737 |
const host = $("#pager"), d = t();
|
| 738 |
if(pages<=1){ host.innerHTML=""; return; }
|
|
|
|
| 777 |
});
|
| 778 |
|
| 779 |
renderDivBar();
|
| 780 |
+
renderTrackBar();
|
| 781 |
// ๋ถ๋ฌธ์ ๊ณ ๋ฅด๋ฉด ๊ทธ ๋ถ๋ฌธ + ๊ธฐ์ค๋ฌผ์ง๋ง ๋จ๊ธด๋ค. ๊ธฐ์ค๋ฌผ์ง์ ์ฒ๋๋ผ ํญ์ ๋ณด์ฌ์ผ ํ๋ค.
|
| 782 |
+
let pool = DIV==="all" ? DATA.entries
|
| 783 |
: DATA.entries.filter(e=>e.is_anchor || e.division===DIV);
|
| 784 |
+
// ๊ธฐ์ค๋ฌผ์ง์ ์ฒ๋๋ผ ์ด๋ ํธ๋์ ๊ณจ๋ผ๋ ๋จ๊ธด๋ค.
|
| 785 |
+
if(TRK!=="all") pool = pool.filter(e=>e.is_anchor || e.track===TRK);
|
| 786 |
const all = pool.slice().sort((a,b)=>{
|
| 787 |
const x=sortVal(a,sortKey), y=sortVal(b,sortKey);
|
| 788 |
if(x<y) return -sortDir; if(x>y) return sortDir; return 0;
|
|
|
|
| 812 |
+ (unscored ? ` <span class="pill warn">${esc(hk || d.hold)}</span>` : "");
|
| 813 |
const has = (e.detail && Object.keys(e.detail).length) || (unscored && e.gate);
|
| 814 |
return `<tr class="${cls}${has?" pick":""}"${has?` data-i="${e.candidate_id}"`:""}>
|
| 815 |
+
<td class="num">${(TRK!=="all" ? e.track_rank : (DIV==="all" ? e.rank : e.div_rank)) ?? "โ"}</td>
|
| 816 |
<td>${esc(e.formula||e.candidate_id||"")}${e.masked?' <span class="pill">๐</span>':""}</td>
|
| 817 |
<td>${who}</td><td>${esc(e.model_name||"")}</td><td>${dt}</td>
|
| 818 |
${num("oxidation")}${num("li_stability")}${num("novelty")}
|