SeaWolf-AI commited on
Commit
8e1a6ec
ยท
verified ยท
1 Parent(s): 70561cd

ui: show MP and novel tracks separately

Browse files
Files changed (1) hide show
  1. 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
- const pool = DIV==="all" ? DATA.entries
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")}