From 3c69e6838593b9237ae0af6d42c594726bd63a29 Mon Sep 17 00:00:00 2001 From: Yannik Schmidt Date: Sun, 9 Jun 2019 15:55:28 +0200 Subject: [PATCH] implement find player --- open-leaderboard-server.py | 29 +++++++++++++++++++++++------ static/buttons.js | 21 +++++++++++++++------ static/site.css | 8 ++++++++ templates/base.html | 4 +++- 4 files changed, 49 insertions(+), 13 deletions(-) diff --git a/open-leaderboard-server.py b/open-leaderboard-server.py index cd0cb09..f2a43af 100755 --- a/open-leaderboard-server.py +++ b/open-leaderboard-server.py @@ -13,6 +13,7 @@ PARAM_END = "end" BASE_URL = "http://{server}{path}?{paramStart}={start}&{paramEnd}={end}" MAX_ENTRY = "http://{server}/getmaxentries" +FIND_PLAYER = "http://{server}/findplayer?string={pname}" SEGMENT = 100 SEPERATOR = ',' @@ -72,19 +73,34 @@ def leaderboard(): '''Show main leaderboard page with range dependant on parameters''' # parse parameters # - start = flask.request.args.get(PARAM_START) - page = flask.request.args.get("page") + page = flask.request.args.get("page") + playerName = flask.request.args.get("string") + - # intentional double if, page is supposed to overwrite start # - if start: - start = int(start) if page: start = SEGMENT * int(page) else: start = 0 + # handle find player request # + cannotFindPlayer = "" + if playerName: + playersWithRankUrl = FIND_PLAYER.format(server=SERVER, pname=playerName) + playersWithRank = str(requests.get(playersWithRankUrl).content, "utf-8").split("\n") + + if len(playersWithRank) == 1 and playersWithRank[0] == "": + cannotFindPlayer = flask.Markup("
No player of that name
") + start = 0 + elif len(playersWithRank) == 1: + rank = int(playersWithRank[0].split(SEPERATOR)[-1]) + start = rank - (rank % SEGMENT) + else: + rank = int(playersWithRank[0].split(SEPERATOR)[-1]) + start = rank - (rank % SEGMENT) + end = start + SEGMENT + # request and check if we are within range # maxEntryUrl = MAX_ENTRY.format(server=SERVER) maxEntry = int(requests.get(maxEntryUrl).content) @@ -119,7 +135,8 @@ def leaderboard(): finalResponse = flask.render_template("base.html", playerList=players, \ columNames=columContent, \ start=start, \ - endOfBoardIndicator=endOfBoardIndicator) + endOfBoardIndicator=endOfBoardIndicator, \ + findPlayer=cannotFindPlayer) return finalResponse @app.route('/static/') diff --git a/static/buttons.js b/static/buttons.js index d0e1c57..4635def 100644 --- a/static/buttons.js +++ b/static/buttons.js @@ -6,6 +6,10 @@ var buttonForward = document.getElementById("button-forward") var buttonFirst = document.getElementById("button-first") var isLastPage = document.getElementById("eof") +/* clean URL from unessesary parameters */ +url.searchParams.delete("goto") +url.searchParams.delete("string") + /* disable buttons if nessesary */ if(!page || page == "0"){ buttonBackward.disabled = true @@ -22,9 +26,6 @@ if(isLastPage){ function forward(){ - /* clean URL from unessesary parameters */ - url.searchParams.delete("goto") - if(page){ page = parseInt(page) + 1 }else{ @@ -37,9 +38,6 @@ function forward(){ } function backward(){ - /* clean URL from unessesary parameters */ - url.searchParams.delete("goto") - if(page){ page = parseInt(page) - 1 if(page < 0){ @@ -74,3 +72,14 @@ gotoRankInputField.addEventListener("keyup", function(event) { window.location.href = url.href } }); + +var getPlayerInputField = document.getElementById("getPlayer"); +getPlayerInputField.addEventListener("keyup", function(event) { + if (event.key == "Enter") { + event.preventDefault(); + var string = getPlayerInputField.value + url.searchParams.set("string", string) + url.searchParams.delete("page") + window.location.href = url.href + } +}); diff --git a/static/site.css b/static/site.css index f747c7c..ffe0fbc 100644 --- a/static/site.css +++ b/static/site.css @@ -47,6 +47,14 @@ body{ width: 100px; } +.noPlayerFound{ + background: red; + float: left; + width: 180px; + text-align: center; + font-weight: bold; +} + /* #################### LEADERBOARDS ##################### */ .leaderboard-container{ width: 80%; diff --git a/templates/base.html b/templates/base.html index f6a6d0a..d64834e 100644 --- a/templates/base.html +++ b/templates/base.html @@ -16,6 +16,7 @@ placeholder="search player..."> + {{ findPlayer }}
{{ columNames }}
@@ -32,7 +33,8 @@