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 @@