Compare commits
7 commits
Author | SHA1 | Date | |
---|---|---|---|
b63d8625b3 | |||
63d5562483 | |||
f4b5f3529a | |||
7ad9a85dc1 | |||
57285c22f9 | |||
4a4212950e | |||
dc0453fa64 |
10 changed files with 3849 additions and 1 deletions
4
.vscode/settings.json
vendored
Normal file
4
.vscode/settings.json
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"editor.formatOnSave": false,
|
||||
"editor.formatOnPaste": false
|
||||
}
|
|
@ -1,3 +1,4 @@
|
|||
# eliste
|
||||
|
||||
The digitalrock.de eliste with some patches.
|
||||
The digitalrock.de eliste with some patches.
|
||||
Adaped from [Ralf Becker / ranking](https://github.com/ralfbecker/ranking/tree/master/sitemgr/digitalrock).
|
BIN
blueRockBadge.png
Normal file
BIN
blueRockBadge.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 46 KiB |
BIN
copy-link.png
Normal file
BIN
copy-link.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 105 KiB |
349
dr_list.css
Normal file
349
dr_list.css
Normal file
|
@ -0,0 +1,349 @@
|
|||
/**
|
||||
* digital ROCK CSS for jQuery based Javascript API
|
||||
*
|
||||
* @link http://www.digitalrock.de
|
||||
* @author Ralf Becker <RalfBecker@digitalROCK.de>
|
||||
* @copyright 2010-13 by RalfBecker@digitalROCK.de
|
||||
* @version $Id$
|
||||
*/
|
||||
|
||||
table.DrTable {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/**
|
||||
* Background etc. for header rows
|
||||
*/
|
||||
table.DrTable thead, table.DrTable tbody th {
|
||||
background-color: #c0c0c0;
|
||||
}
|
||||
/**
|
||||
* Background etc. for body rows
|
||||
*/
|
||||
table.DrTable tbody {
|
||||
background-color: #f0f0f0;
|
||||
}
|
||||
/**
|
||||
* Center all columns by default
|
||||
*/
|
||||
table.DrTable th, table.DrTable td {
|
||||
text-align: center;
|
||||
}
|
||||
/**
|
||||
* Left justify text columns like name
|
||||
*/
|
||||
table.DrTable th.lastname, table.DrTable td.lastname, table.DrTable td.firstname, table.DrTable td.boulder,
|
||||
table.DrTable td.team_name, table.DrTable tbody th, .Starters table.DrTable th, .Starters table.DrTable td,
|
||||
table.DrTable th.federation, table.DrTable td.federation, table.DrTable th.rgz, table.DrTable td.rgz,
|
||||
table.DrTable th.city, table.DrTable td.city, table.DrTable th.footer {
|
||||
padding-left: 5px;
|
||||
text-align: left;
|
||||
}
|
||||
table.DrTable td.final_points, table.DrTable td.quali_points {
|
||||
padding-right: 5px;
|
||||
text-align: right;
|
||||
}
|
||||
table.DrTable td.final_points {
|
||||
padding-right: 15px;
|
||||
}
|
||||
table.DrTable tbody th a {
|
||||
padding-left: 10px;
|
||||
font-weight: normal;
|
||||
}
|
||||
table.DrTable.boulder2018 tbody td[class^="result"] {
|
||||
min-width: 6em;
|
||||
}
|
||||
table.DrTable.boulder2018 tbody td.result_rank {
|
||||
min-width: 0;
|
||||
}
|
||||
/**
|
||||
* alignment of multiple values in a column by align_td_nbsp function
|
||||
*/
|
||||
table.DrTable td div.tdAlign2 { width: 30%; display: inline-block; }
|
||||
table.DrTable td div.tdAlign2:first-child { width: 60%; display: inline-block; }
|
||||
table.DrTable td div.tdAlign3 { width: 20%; display: inline-block; }
|
||||
table.DrTable td div.tdAlign3:first-child { width: 40%; display: inline-block; }
|
||||
table.DrTable td div.tdAlign4 { width: 16%; display: inline-block; }
|
||||
table.DrTable td div.tdAlign4:first-child { width: 50%; display: inline-block; }
|
||||
/**
|
||||
* Capitalize names
|
||||
*/
|
||||
.lastname {
|
||||
text-transform: uppercase;
|
||||
}
|
||||
.Starters .lastname:after {
|
||||
content: ", ";
|
||||
}
|
||||
|
||||
/**
|
||||
* Hide names (this is only for show, no real name below filter)
|
||||
*/
|
||||
tr.hideNames .lastname, tr.hideNames .firstname {
|
||||
-webkit-filter: blur(2px) grayscale(1) opacity(50%);
|
||||
filter: blur(2px) grayscale(1) opacity(50%);
|
||||
}
|
||||
|
||||
/**
|
||||
* Format the header
|
||||
*/
|
||||
.Results h1, .Startlist h1, .Resultlist h1, .Starters h1, .Profile h1 {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
font-size: 20pt;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.Results h3, .Profile h3, .Profile h2 {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.Results select.compChooser {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/**
|
||||
* Quota line
|
||||
*/
|
||||
.quota_line > td {
|
||||
border-top: 2px solid black;
|
||||
}
|
||||
|
||||
/**
|
||||
* See also links
|
||||
*/
|
||||
ul.seeAlso li {
|
||||
display: block ! important;
|
||||
}
|
||||
|
||||
/**
|
||||
* Result column
|
||||
*/
|
||||
.result {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
/**
|
||||
* Toc row
|
||||
*/
|
||||
ul.listToc, ul.listCatToc {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
float: left;
|
||||
}
|
||||
ul.listCatToc {
|
||||
float: right;
|
||||
}
|
||||
ul.listToc li, ul.listCatToc li {
|
||||
display: inline-block;
|
||||
margin-right: 15px !important;
|
||||
text-transform: uppercase;
|
||||
line-height: 1.2;
|
||||
}
|
||||
ul.listCatToc li {
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* New boulder result display
|
||||
*/
|
||||
div.boulder, div.boulderNone, div.boulderTop, div.boulderBonus {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
display: inline-block;
|
||||
margin-right: 2px;
|
||||
background-size: 100%;
|
||||
position: relative;
|
||||
}
|
||||
td.boulder > div {
|
||||
white-space: nowrap;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
div.boulderNone {
|
||||
background-image: url(../../templates/default/images/boulderNone.png);
|
||||
}
|
||||
|
||||
div.boulderTop {
|
||||
background-image: url(../../templates/default/images/boulderTop.png);
|
||||
}
|
||||
|
||||
div.boulderBonus {
|
||||
background-image: url(../../templates/default/images/boulderBonus.png);
|
||||
}
|
||||
|
||||
div.bonusTries, div.topTries {
|
||||
position: absolute;
|
||||
font-size: 90%;
|
||||
font-weight: bold;
|
||||
color: white;
|
||||
}
|
||||
div.bonusTries {
|
||||
right: 3px;
|
||||
bottom: 1px;
|
||||
line-height: 1;
|
||||
}
|
||||
div.topTries {
|
||||
left: 3px;
|
||||
top: 1px;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Profile page
|
||||
*/
|
||||
div.Profile {
|
||||
display: inline-block;
|
||||
}
|
||||
.profileHeader, .profileData {
|
||||
width: 100%;
|
||||
}
|
||||
.profileHeader .profileNation {
|
||||
margin: 5px 0 5px 0;
|
||||
}
|
||||
.profileLogo {
|
||||
text-align: right;
|
||||
}
|
||||
.profileRank:after, .profileResultRank:after {
|
||||
content: ".";
|
||||
}
|
||||
.profileData td {
|
||||
font-style: italic;
|
||||
}
|
||||
td.profileAge, td.profileBirthdate, td.profileBirthplace, td.profileCity, td.profileStreet, td.profileRank,
|
||||
td.profilePractice, td.profileOtherSports, td.profileProfessional, td.profileHeight, td.profileWeight {
|
||||
font-weight: bold;
|
||||
font-style: normal;
|
||||
}
|
||||
.profileResult td, h1, h3, td.profileRanglist {
|
||||
font-style: normal;
|
||||
}
|
||||
td.profileRanglist {
|
||||
white-space: nowrap;
|
||||
}
|
||||
.profileResultHidden {
|
||||
display: none;
|
||||
}
|
||||
tr.profileMarginTop > td {
|
||||
padding-top: 10px;
|
||||
}
|
||||
.profileResultHeader td {
|
||||
font-weight: bold;
|
||||
font-style: normal;
|
||||
font-size: 120%;
|
||||
}
|
||||
.profileData td:first-child {
|
||||
width: 2em;
|
||||
}
|
||||
/**
|
||||
* Aggregated rankings
|
||||
*/
|
||||
.Aggregated th.nation, .Aggregated td.nation, .Aggregated td.name, .Aggregated th.name {
|
||||
text-align: left;
|
||||
padding-left: 3px;
|
||||
}
|
||||
.Aggregated td.name, .Aggregated th.result, .Aggregated td.result {
|
||||
line-height: 1.3;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
.Aggregated td.calculationHidden, .Aggregated th.calculationHidden {
|
||||
display: none;
|
||||
}
|
||||
.Aggregated div.resultRows, .Aggregated div.resultRow {
|
||||
width: 100%;
|
||||
text-align: left;
|
||||
}
|
||||
.Aggregated td.result span
|
||||
{
|
||||
padding-right: 1ex;
|
||||
}
|
||||
.Aggregated td.result span.rank {
|
||||
display: inline-block;
|
||||
width: 1.5em;
|
||||
}
|
||||
.Aggregated td.result span.rank:after, .Aggregated td.rank:after {
|
||||
content: ".";
|
||||
}
|
||||
.Aggregated td.result span.points {
|
||||
float: right;
|
||||
}
|
||||
.Aggregated .rankingHeader2 {
|
||||
white-space: pre;
|
||||
}
|
||||
/**
|
||||
* ResultChooser widget
|
||||
*/
|
||||
.ResultChooser > select {
|
||||
display: block;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/**
|
||||
* Resultlist
|
||||
*/
|
||||
.Resultlist h3.resultDate:empty {
|
||||
display: none;
|
||||
}
|
||||
.error:empty {
|
||||
display: none;
|
||||
}
|
||||
.error {
|
||||
color: red;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fix some CSS on www.ifsc-climbing.org
|
||||
*/
|
||||
section#gkMainbody table.profileHeader thead tr:hover td, section#gkMainbody table.profileData thead tr:hover td {
|
||||
background-color: black;
|
||||
}
|
||||
section#gkMainbody table.DrTable thead, section#gkMainbody table.DrTable tbody{
|
||||
background-color: inherit;
|
||||
background-color: rgba(0,0,0,0.75);
|
||||
}
|
||||
/* do NOT show start-numbers on ifsc-website */
|
||||
section#gkMainbody .Resultlist table.DrTable .start_number {
|
||||
display: none;
|
||||
}
|
||||
/* display wide lists over right _WORLDCOMP. menu, not under it */
|
||||
section#gkMainbody table.DrTable {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
/* hide digitalROCK logo */
|
||||
section#gkMainbody td.profileLogo {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* footer */
|
||||
div.footer {
|
||||
display: hidden;
|
||||
color: gray;
|
||||
}
|
||||
|
||||
#bluerock {
|
||||
margin: 1rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
max-width: 20rem;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
box-shadow: 0px 0px .5rem #888888;
|
||||
border-radius: 1rem;
|
||||
padding: .8rem;
|
||||
text-decoration: none;
|
||||
color: black;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#bluerock:hover {
|
||||
background-color: #EEE
|
||||
}
|
||||
|
||||
#bluerock img {
|
||||
width: 90%;
|
||||
}
|
122
dr_translations.js
Normal file
122
dr_translations.js
Normal file
|
@ -0,0 +1,122 @@
|
|||
var dr_translations = {
|
||||
after: {
|
||||
de: "nach",
|
||||
},
|
||||
Agegroup: {
|
||||
de: "Jahrgang",
|
||||
},
|
||||
"Athlete #1": {
|
||||
de: "Athlete #1",
|
||||
},
|
||||
"Athlete #2": {
|
||||
de: "Athlete #2",
|
||||
},
|
||||
"Athlete #3": {
|
||||
de: "Athlete #3",
|
||||
},
|
||||
"Athlete asked not to show his name anymore.": {
|
||||
de: "Der Athlet hat gebeten seinen Namen nicht mehr anzuzeigen.",
|
||||
},
|
||||
"As of": {
|
||||
de: "Stand",
|
||||
},
|
||||
Birthyear: {
|
||||
de: "Jahrgang",
|
||||
},
|
||||
Calendar: {
|
||||
de: "Kalender",
|
||||
},
|
||||
City: {
|
||||
de: "Stadt",
|
||||
},
|
||||
Deadline: {
|
||||
de: "Anmeldeschluss",
|
||||
},
|
||||
"Event Website": {
|
||||
de: "Event Webseite",
|
||||
},
|
||||
"Final Points": {
|
||||
de: "Final Punkte",
|
||||
},
|
||||
"For %1 %2 best results per competition and category are counting.": {
|
||||
de: "Für %1 zählen die %2 besten Ergebnisse pro Wettkampf und Kategorie.",
|
||||
},
|
||||
"Info Sheet": {
|
||||
de: "Infoblatt",
|
||||
},
|
||||
Name: {
|
||||
de: "Name",
|
||||
},
|
||||
Nation: {
|
||||
de: "Nation",
|
||||
},
|
||||
"Not counting results are in brackets.": {
|
||||
de: "Nicht zählende Ergebnise sind in Klammern.",
|
||||
},
|
||||
Points: {
|
||||
de: "Punkte",
|
||||
},
|
||||
Qualification: {
|
||||
de: "Qualifikation",
|
||||
},
|
||||
Rank: {
|
||||
de: "Rang",
|
||||
},
|
||||
Regionalzentrum: {
|
||||
de: "Regionalzentrum",
|
||||
},
|
||||
Regulation: {
|
||||
de: "Regulation",
|
||||
},
|
||||
Result: {
|
||||
de: "Ergebnis",
|
||||
},
|
||||
"See also:": {
|
||||
de: "Siehe auch:",
|
||||
},
|
||||
Sektion: {
|
||||
de: "Sektion",
|
||||
},
|
||||
"Select a single category to show ...": {
|
||||
de: "Einzelne Kategorie zum Anzeigen auswählen ...",
|
||||
},
|
||||
"Select another competition ...": {
|
||||
de: "Anderen Wettkampf auswählen ...",
|
||||
},
|
||||
StartNr: {
|
||||
de: "StartNr",
|
||||
},
|
||||
Starters: {
|
||||
de: "Meldeliste",
|
||||
},
|
||||
Startlist: {
|
||||
de: "Startliste",
|
||||
},
|
||||
Sum: {
|
||||
de: "Summe",
|
||||
},
|
||||
Teamname: {
|
||||
de: "Teamname",
|
||||
},
|
||||
"Total of %1 athletes registered in all categories.": {
|
||||
de: "Total of %1 athletes registered in all categories.",
|
||||
},
|
||||
Vorqualifiziert: {
|
||||
de: "Vorqualifiziert",
|
||||
},
|
||||
"calculation of this ranking": {
|
||||
de: "Berechnung dieser Rangliste",
|
||||
},
|
||||
"Complete Results": {
|
||||
de: "komplettes Ergebnis",
|
||||
},
|
||||
"previous heat": {
|
||||
de: "vorherige Runde",
|
||||
},
|
||||
"provisional Result": {
|
||||
de: "provisorisches Ergebnis",
|
||||
},
|
||||
"years, since": {
|
||||
de: "Jahre, seit",
|
||||
},
|
||||
};
|
71
eliste.html
Normal file
71
eliste.html
Normal file
|
@ -0,0 +1,71 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
||||
<meta name="Author" content="Ralf Becker [http://www.digitalROCK.de]" />
|
||||
<script type="text/javascript" src="jquery.min.js"></script>
|
||||
<script type="text/javascript" src="dr_api.js"></script>
|
||||
<script type="text/javascript" src="dr_translations.js"></script>
|
||||
<link type="text/css" rel="StyleSheet" href="dr_list.css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="table"></div>
|
||||
<a id="bluerock">
|
||||
Um diese Ergebnisse in der
|
||||
<img src="blueRockBadge.png" />
|
||||
-App zu öffnen, tippen Sie hier.
|
||||
</a>
|
||||
<div id="footer" style="display: none; font-size: 90%"></div>
|
||||
<script type="text/javascript">
|
||||
var widget;
|
||||
$(document).ready(function () {
|
||||
var padding = location.search.match(/padding=([^&]+)/);
|
||||
if (padding)
|
||||
jQuery("body").css(
|
||||
"padding",
|
||||
decodeURIComponent(padding[1].replace(/\+/, "%20"))
|
||||
);
|
||||
var font_size = location.search.match(/font_size=((\d+)(pt|px|em)?)/);
|
||||
if (font_size) {
|
||||
var boulder_size =
|
||||
Math.round(0.8 * parseInt(font_size[2])) +
|
||||
(font_size[3] ? font_size[3] : "pt");
|
||||
font_size = font_size[1] + (font_size[3] ? font_size[3] : "pt");
|
||||
jQuery('<style type="text/css"/>')
|
||||
.text(
|
||||
"td, th, .Resultlist h1, .Startlist h1 {font-size: " +
|
||||
font_size +
|
||||
";}" +
|
||||
"div.boulder, div.boulderNone, div.boulderTop, div.boulderBonus {" +
|
||||
"width: " +
|
||||
boulder_size +
|
||||
"; height: " +
|
||||
boulder_size +
|
||||
"; margin-right: 4px;}"
|
||||
)
|
||||
.appendTo("head");
|
||||
}
|
||||
var json_url = "https://www.digitalrock.de/egroupware/ranking/json.php";
|
||||
if (location.pathname.match(/sitemgr.*$/)) {
|
||||
json_url = location.pathname.replace(/sitemgr.*$/, "json.php");
|
||||
}
|
||||
widget = new DrWidget(
|
||||
"table",
|
||||
json_url + (location.search || location.hash.replace(/^#!?/, "?"))
|
||||
);
|
||||
|
||||
setTimeout(function () {
|
||||
window.scrollTo(0, 1);
|
||||
}, 100);
|
||||
|
||||
if (!document.location.href.match(/beamer=1/)) {
|
||||
showFooterByCat("div#footer");
|
||||
}
|
||||
|
||||
jQuery("#bluerock").attr("href", "https://l.bluerock.dev/" + (location.search || location.hash.replace(/^#!?/, "?")))
|
||||
});
|
||||
|
||||
if (document.location.href.match(/beamer=1/)) load_css("beamer.css");
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
45
index.html
Normal file
45
index.html
Normal file
|
@ -0,0 +1,45 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css" />
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<main class="container">
|
||||
<h1>Patched digitalrock data</h1>
|
||||
<p>This tool can be used to get some more information about the digitalrock data. Just paste the digitalrock
|
||||
url:</p>
|
||||
<input type="text" id="input" placeholder="Paste the digitalrock url here!">
|
||||
<small id="invalid-helper" style="display: none;">
|
||||
The link is invalid!
|
||||
</small>
|
||||
<button id="submit" onclick="parseUrlAndRedirect()">Submit</button>
|
||||
|
||||
<h2>Where to get the link?</h2>
|
||||
<p>To get the link, go to <a href="https://digitalrock.de">digitalrock</a>, find the competition and category
|
||||
you want to view, right click it and select "copy link".</p>
|
||||
<img src="copy-link.png" alt="How to get the link">
|
||||
</main>
|
||||
</body>
|
||||
|
||||
<script>
|
||||
function parseUrlAndRedirect() {
|
||||
const input = document.getElementById("input");
|
||||
const url = input.value;
|
||||
if (!url.includes("digitalrock.de") || !url.includes("#") || !url.includes("eliste.html")) {
|
||||
document.getElementById("invalid-helper").style.display = "block";
|
||||
input.setAttribute("aria-invalid", "true")
|
||||
input.setAttribute("aria-describedby", "invalid-helper")
|
||||
return;
|
||||
}
|
||||
const urlHash = url.split("#")[1];
|
||||
const newUrl = `https://bluerock.itsblue.page/eliste/eliste.html#${urlHash}`;
|
||||
window.location.href = newUrl;
|
||||
}
|
||||
</script>
|
||||
|
||||
</html>
|
4
jquery.min.js
vendored
Normal file
4
jquery.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
Loading…
Reference in a new issue