From 55589bf8836cc3dc51e97cc4fe57f227c077695c Mon Sep 17 00:00:00 2001 From: Yannik Schmidt Date: Sun, 9 Jun 2019 14:37:38 +0200 Subject: [PATCH] improve usability --- open-leaderboard-server.py | 25 +++++++++++++++++-------- static/buttons.js | 37 ++++++++++++++++++++++--------------- static/site.css | 12 +++++++++++- templates/base.html | 10 +++++++--- 4 files changed, 57 insertions(+), 27 deletions(-) diff --git a/open-leaderboard-server.py b/open-leaderboard-server.py index bad5046..cd0cb09 100755 --- a/open-leaderboard-server.py +++ b/open-leaderboard-server.py @@ -12,6 +12,7 @@ PARAM_START = "start" PARAM_END = "end" BASE_URL = "http://{server}{path}?{paramStart}={start}&{paramEnd}={end}" +MAX_ENTRY = "http://{server}/getmaxentries" SEGMENT = 100 SEPERATOR = ',' @@ -84,14 +85,17 @@ def leaderboard(): end = start + SEGMENT - # request and check if we are within range # + maxEntryUrl = MAX_ENTRY.format(server=SERVER) + maxEntry = int(requests.get(maxEntryUrl).content) + reachedEnd = False + if end > maxEntry: + start = maxEntry - ( maxEntry % SEGMENT ) - 1 + end = maxEntry - 1 + reachedEnd = True + + # do the actual request # responseString = requestRange(start, end) - if "MAXENTRY:" in responseString: - maxentry = int(responseString.split(":")[1]) - start = maxentry - SEGMENT - 1 - end = maxentry - 1 - responseString = requestRange(start, end) # create relevant html-lines from player players = [Player(line) for line in responseString.split("\n")] @@ -106,11 +110,16 @@ def leaderboard(): playerRatin="Rating", \ playerGames="Games", \ playerWinratio="Winratio")) - + + endOfBoardIndicator = "" + if reachedEnd: + endOfBoardHtml = "
- - - End of Board - - -
" + endOfBoardIndicator = flask.Markup(endOfBoardHtml) finalResponse = flask.render_template("base.html", playerList=players, \ columNames=columContent, \ - start=start) + start=start, \ + endOfBoardIndicator=endOfBoardIndicator) return finalResponse @app.route('/static/') diff --git a/static/buttons.js b/static/buttons.js index 8b906e7..0620320 100644 --- a/static/buttons.js +++ b/static/buttons.js @@ -1,17 +1,32 @@ +/* disable buttons if nessesary */ +var url = new URL(window.location.href) +var page = url.searchParams.get("page") +var buttonBackward = document.getElementById("button-backward") +var buttonForward = document.getElementById("button-forward") +var buttonFirst = document.getElementById("button-first") +var isLastPage = document.getElementById("eof") + +if(!page || page == "0"){ + buttonBackward.disabled = true + buttonFirst.disabled = true + + buttonBackward.classList.add("disabled") + buttonFirst.classList.add("disabled") +} + +if(isLastPage){ + buttonForward.disabled = true; + buttonForward.classList.add("disabled") +} + function forward(){ - var url = new URL(window.location.href) - var start = url.searchParams.get("start") - var page = url.searchParams.get("page") /* clean URL from unessesary parameters */ url.searchParams.delete("goto") - url.searchParams.delete("start") - + if(page){ page = parseInt(page) + 1 - }else if(start){ - page = Math.trunc(parseInt(start)/100) + 1 }else{ page = 1 } @@ -22,21 +37,14 @@ function forward(){ } function backward(){ - var url = new URL(window.location.href) - var start = url.searchParams.get("start") - var page = url.searchParams.get("page") - /* clean URL from unessesary parameters */ url.searchParams.delete("goto") - url.searchParams.delete("start") if(page){ page = parseInt(page) - 1 if(page < 0){ page = 0 } - }else if(start){ - page = Math.trunc(parseInt(start)/100) - 1 }else{ page = 0 } @@ -59,7 +67,6 @@ var gotoRankInputField = document.getElementById("gotoRank"); gotoRankInputField.addEventListener("keyup", function(event) { if (event.key == "Enter") { event.preventDefault(); - var url = new URL(window.location.href) var rank = gotoRankInputField.value var page = Math.trunc((rank - 1)/100) url.searchParams.set("page", page) diff --git a/static/site.css b/static/site.css index 1aad676..07ca82f 100644 --- a/static/site.css +++ b/static/site.css @@ -32,6 +32,10 @@ body{ color: #583535; } +.disabled { + opacity: 0.5; +} + .input-field{ float: left; margin-right: 10px; @@ -61,6 +65,7 @@ body{ padding-top: 2px; padding-bottom: 2px; } + .line-odd{ width: 100%; background-color: lightgrey; @@ -69,6 +74,12 @@ body{ padding-bottom: 2px; } +.endOfBoardIndicator{ + background: red; + text-align: center; + font-weight: bold; +} + /* ############# PLAYER INFORMATION IN LINES ############# */ .playerRank{ float: left; @@ -84,7 +95,6 @@ body{ float: right; width: 20%; text-align: right; - } .playerGames{ diff --git a/templates/base.html b/templates/base.html index 623a341..93e94e1 100644 --- a/templates/base.html +++ b/templates/base.html @@ -5,9 +5,12 @@
- - - + + + @@ -23,6 +26,7 @@ {% endif %} {% set count = count + 1 %} {% endfor %} + {{ endOfBoardIndicator }}