From 4aeeceebc9a1b1400248e960e3505cdcc1ff975e Mon Sep 17 00:00:00 2001 From: "Lang, Simon" Date: Mon, 10 Jun 2024 01:22:42 +0200 Subject: [PATCH] added styling and elo-graphs --- public/elotracker/chart-integration.js | 117 ++++++++++++++++++ public/elotracker/get.php | 9 ++ public/elotracker/index.php | 51 +++++++- public/elotracker/styles.css | 162 +++++++++++++++++++++++++ public/img/uem-logo.png | Bin 0 -> 29238 bytes 5 files changed, 334 insertions(+), 5 deletions(-) create mode 100644 public/elotracker/chart-integration.js create mode 100644 public/elotracker/get.php create mode 100644 public/img/uem-logo.png diff --git a/public/elotracker/chart-integration.js b/public/elotracker/chart-integration.js new file mode 100644 index 0000000..188a986 --- /dev/null +++ b/public/elotracker/chart-integration.js @@ -0,0 +1,117 @@ +window.onload = async function(){ + const charts = document.getElementsByClassName("progress-chart"); + for (const chart of charts) { + let puuid = chart.id.split("-"); + puuid.splice(0,2); + puuid = puuid.join("-"); + fetch(`get.php?puuid=${puuid}`, { + method: "GET", + }) + .then(res => res.json()) + .then(entries => { + let xValues = []; + let yValues = []; + for (const entriesKey in entries) { + let points = rank_to_points(entries[entriesKey]["tier"], entries[entriesKey]["rank"], entries[entriesKey]["points"]); + xValues.push(entriesKey); + yValues.push(points); + } + new Chart(`progress-chart-${puuid}`, { + type: "line", + data: { + labels: xValues, + datasets: [{ + fill: false, + borderColor: "rgba(150,150,175)", + backgroundColor: "rgba(150,150,175)", + data: yValues + }] + }, + options: { + plugins: { + legend: {display: false}, + tooltip: { + callbacks: { + label: function(context) { + return format_rank(entries[context.label]["tier"],entries[context.label]["rank"],entries[context.label]["points"]) + } + } + } + }, + scales: { + y: { + display: true, + stepSize: 100, + ticks: { + callback: (value) => { + return points_to_rankstring(value,false); + } + } + }, + }, + } + }); + }) + .catch(e => console.error(e)) + } + +}; + +function rank_to_points(tier,rank,lp) { + const apex_tiers = (tier === "MASTER" || tier === "GRANDMASTER" || tier === "CHALLENGER"); + const tiers = { + "DIAMOND": 2400, + "EMERALD": 2000, + "PLATINUM": 1600, + "GOLD": 1200, + "SILVER": 800, + "BRONZE": 400, + "IRON": 0, + }; + const ranks = { + "I": 300, + "II": 200, + "III": 100, + "IV": 0, + }; + if (apex_tiers) { + return 2800 + lp; + } else { + return tiers[tier] + ranks[rank] + lp; + } +} +function points_to_rankstring(points, include_LP = true) { + const apex_tiers = (points >= 2800); + let lp = (apex_tiers) ? points - 2800 : points%100 + let rank = (points-lp)%400; + let tier = (points-lp-rank); + const tiers = { + 2400: "Diamond", + 2000: "Emerald", + 1600: "Platinum", + 1200: "Gold", + 800: "Silver", + 400: "Bronze", + 0: "Iron", + }; + const ranks = { + 300: "I", + 200: "II", + 100: "III", + 0: "IV", + }; + + let rank_string = (apex_tiers) ? "Master" : tiers[tier]; + if (!apex_tiers) rank_string += ` ${ranks[rank]}`; + if (include_LP || apex_tiers) rank_string += ` ${lp} LP`; + return rank_string; +} + +function format_rank(tier,rank,lp) { + tier = tier.charAt(0).toUpperCase()+tier.slice(1).toLowerCase(); + const apex_tiers = (tier === "Master" || tier === "Grandmaster" || tier === "Challenger"); + let rank_string = tier; + if (!apex_tiers) rank_string += ` ${rank}`; + rank_string += ` ${lp} LP`; + return rank_string; +} \ No newline at end of file diff --git a/public/elotracker/get.php b/public/elotracker/get.php new file mode 100644 index 0000000..9dac816 --- /dev/null +++ b/public/elotracker/get.php @@ -0,0 +1,9 @@ +entries[$puuid]); \ No newline at end of file diff --git a/public/elotracker/index.php b/public/elotracker/index.php index c417ab3..c556440 100644 --- a/public/elotracker/index.php +++ b/public/elotracker/index.php @@ -4,6 +4,7 @@ UEM Elo Tracker + UEM LoL Elo-Challenge"; +echo "
"; +echo "
"; +echo "
"; +$placement_counter = 1; foreach ($tracker->getProgressions() as $puuid => $progress){ + echo "
"; $entries = $tracker->entries[$puuid]; $account = $tracker->accounts[$puuid]; + $start_elo = reset($entries); + if ($start_elo->tier == "MASTER" || $start_elo->tier == "GRANDMASTER" || $start_elo->tier == "CHALLENGER") $start_elo->rank = ""; + $current_elo = end($entries); + if ($current_elo->tier == "MASTER" || $current_elo->tier == "GRANDMASTER" || $current_elo->tier == "CHALLENGER") $current_elo->rank = ""; + $progress = ($progress>=0) ? "+$progress" : $progress; + $tier_lowercase = strtolower($current_elo->tier); + $start_tier_lowercase = strtolower($start_elo->tier); + $tier_ucfirst = ucfirst($tier_lowercase); + $start_tier_ucfirst = ucfirst($start_tier_lowercase); + $gained_lp_sign = ($progress > 0) ? " plus-lp" : (($progress < 0) ? " minus-lp" : "no-lp"); + + echo "$placement_counter."; + + echo "
+ +

$account->gameName#$account->tagLine

+

$progress LP

+
"; + + echo "
"; - echo "

$account->gameName#$account->tagLine: $progress

"; - foreach ($entries as $date => $elo){ - $eloValue = $elo->value(); - echo "$date → $eloValue
"; - } + echo "
+
+ + {$start_tier_ucfirst} {$start_elo->rank}
{$start_elo->points} LP
+
+ → +
+ + {$tier_ucfirst} {$current_elo->rank}
{$current_elo->points} LP
+
+
"; + echo "
"; + echo ""; + $placement_counter++; } +echo "
"; +echo "
"; ?> + diff --git a/public/elotracker/styles.css b/public/elotracker/styles.css index e69de29..7e3f100 100644 --- a/public/elotracker/styles.css +++ b/public/elotracker/styles.css @@ -0,0 +1,162 @@ +:root { + --def-grey: hsl(110 00% 82% / 1); + --plus-green: hsl(110 80% 82% / 1); + --minus-red: hsl(0 80% 82% / 1); + --gold-1: #d29b35; + --silver-2: #b7b7b7; + --bronze-3: #b76833; +} +html { + color-scheme: dark; +} +body { + background: #161c21; + color: #d2d2d2; + font-family: Verdana, sans-serif; +} +h1 { + text-align: center; +} + +.uem-logo-header { + display: flex; + align-items: center; + justify-content: center; + margin-bottom: 24px; +} +img.uem-logo { + height: 120px; +} + +.leaderboard { + display: flex; + flex-direction: column; + align-items: center; +} +.leaderboard-list { + display: flex; + flex-direction: column; + align-items: stretch; + gap: 16px; + max-width: 600px; +} +.leaderboard-element { + display: grid; + grid-template-columns: 64px 1fr auto; + grid-template-rows: 1.5fr 0.5fr; + border: solid 4px #6a818f; + border-radius: 20px; + padding: 16px 16px 16px 36px; + transition: background-color 200ms ease-out; +} +.leaderboard-element:hover { + background-color: #1f2931; +} +.leaderboard-element.place-1 { + border: solid 4px var(--gold-1); +} +.leaderboard-element.place-1 .placement { + color: var(--gold-1); +} +.leaderboard-element.place-2 { + border: solid 4px #b7b7b7; +} +.leaderboard-element.place-2 .placement { + color: var(--silver-2); +} +.leaderboard-element.place-3 { + border: solid 4px #b76833; +} +.leaderboard-element.place-3 .placement { + color: var(--bronze-3); +} + +.leaderboard-element .ranked-emblem { + display: flex; + align-items: center; + justify-content: center; + padding: 0 16px; +} +.leaderboard-element .ranked-emblem img { + width: 72px; + aspect-ratio: 1/1; +} +.leaderboard-element img.ranked-mini-crest { + width: 24px; + aspect-ratio: 1/1 +} + +.leaderboard-element .placement { + display: flex; + align-items: center; + justify-content: center; + grid-row-start: 1; + grid-row-end: 3; + font-size: 2.5em; + font-weight: 700; + margin-right: 24px; +} + +.leaderboard-element .player-info { + display: grid; + grid-template-rows: 1fr 0.9fr; + grid-template-columns: 72px auto; + align-items: center; + grid-column: 2; +} +.leaderboard-element .ranked-emblem { + grid-column: 3; +} + +.playername .riot-tag { + color: #707070; +} +.player-info>img { + grid-row-start: 1; + grid-row-end: 3; + grid-column: 1; + border-radius: 8px; +} +.player-info .playername { + grid-row: 1; + grid-column: 2; + margin: 0; +} +.player-info .lp-gained { + align-self: flex-start; + grid-row: 2; + grid-column: 2; + font-size: 1.5em; + margin: 0; + padding-left: 12px; +} +.player-info .lp-gained.plus-lp { + color: var(--plus-green); +} +.player-info .lp-gained.minus-lp { + color: var(--minus-red); +} +.player-info .lp-gained.no-lp { + color: var(--def-grey); +} + +.leaderboard-element .elo-gained { + grid-column-start: 2; + grid-column-end: 4; + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + gap: 4px; +} +.rank { + display: flex; + flex-direction: column; + align-items: center; +} +.rank .rank-desc { + text-align: center; +} +.elo-gained .rank-LP { + font-size: 0.8em; +} \ No newline at end of file diff --git a/public/img/uem-logo.png b/public/img/uem-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a3352db9803affb4d2a06dd530fad5fdb522a5a2 GIT binary patch literal 29238 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