From 1d3ed4d293d740b2ce1416b6c77a742077ecd565 Mon Sep 17 00:00:00 2001 From: Nils G <nils.gondermann@ruhr-uni-bochum.de> Date: Mon, 13 Apr 2020 13:53:45 +0200 Subject: [PATCH] Added first WebClient page --- controllers/default.py | 2 +- controllers/player.py | 26 ++++++++++++++++++++++++++ modules/http_util.py | 1 + modules/room_util.py | 9 +++++++++ static/css/base.css | 18 ++++++++++++++++++ static/css/client.css | 4 ++++ static/js/ajax.js | 15 +++++++++++++++ views/default/index.html | 31 +++++++++++++++++++++++-------- views/layout.html | 16 ++++++++++++++++ 9 files changed, 113 insertions(+), 9 deletions(-) create mode 100644 controllers/player.py create mode 100644 static/css/base.css create mode 100644 static/css/client.css create mode 100644 static/js/ajax.js diff --git a/controllers/default.py b/controllers/default.py index d971f34..3f780d0 100644 --- a/controllers/default.py +++ b/controllers/default.py @@ -1,4 +1,4 @@ import random def index(): - return dict(var=random.random(), meta=db(db.Meta).select().first()) + return dict() diff --git a/controllers/player.py b/controllers/player.py new file mode 100644 index 0000000..12d9493 --- /dev/null +++ b/controllers/player.py @@ -0,0 +1,26 @@ +from parameter_util import JSON_BODY, JSON_CONTAINS +from http_util import FAIL, CODE_JSON, CODE_MISSING, CODE_SEMANTIC, CODE_GONE, CODE_NOTFOUND +from room_util import ROOM_GET_CODE + +def create(): + parameters = JSON_BODY(request) + + if parameters == None: + return(FAIL(CODE_JSON)) + + if not JSON_CONTAINS(parameters, [('room_code', str), ('user_name', str)]): + return(FAIL(CODE_MISSING)) + + room_code = parameters["room_code"] + user_name = parameters["user_name"] + + if (len(room_code) != 4) or (len(user_name) == 0) or (len(user_name) > 15): + return(FAIL(CODE_SEMANTIC)) + + room_record = ROOM_GET_CODE(room_code) + + if not room_record: + return(FAIL(CODE_NOTFOUND)) + + db.Player.insert(name=user_name, room_id=room_record.id) + return(200) diff --git a/modules/http_util.py b/modules/http_util.py index 3a9ca10..2a08f64 100644 --- a/modules/http_util.py +++ b/modules/http_util.py @@ -4,6 +4,7 @@ CODE_MISSING = 400 CODE_JSON = 406 CODE_GONE = 410 CODE_SEMANTIC = 422 +CODE_NOTFOUND = 404 def FAIL(_code): current.response.status = _code diff --git a/modules/room_util.py b/modules/room_util.py index 13290b8..a3c4731 100644 --- a/modules/room_util.py +++ b/modules/room_util.py @@ -12,6 +12,15 @@ def ROOM_GET(_id, _password): return(room_record) +def ROOM_GET_CODE(_code): + room_record = current.db((current.db.Room.code == _code) & (current.db.Room.closed == False)).select().first() + + if not room_record: + return(None) + + return(room_record) + + def PLAYERS_GET(_room): rows = current.db(current.db.Player.room_id == _room.id).select(orderby=current.db.Player.id) diff --git a/static/css/base.css b/static/css/base.css new file mode 100644 index 0000000..1055cf2 --- /dev/null +++ b/static/css/base.css @@ -0,0 +1,18 @@ +#footer { + position: fixed; + + left: 0px; + bottom: 0px; + width: 100%; + + margin-top: 20px; + padding: 5px; + + background-color: gray; + text-align: center; +} + +#footer a { + color: white; + text-decoration: none; +} diff --git a/static/css/client.css b/static/css/client.css new file mode 100644 index 0000000..d8f9aa6 --- /dev/null +++ b/static/css/client.css @@ -0,0 +1,4 @@ +body { + text-align: center; + background-color: lightgrey; +} diff --git a/static/js/ajax.js b/static/js/ajax.js new file mode 100644 index 0000000..4268188 --- /dev/null +++ b/static/js/ajax.js @@ -0,0 +1,15 @@ +function AJAX_JSON(_url, _payload, _returnFunction) { + $.ajax({ + type: 'POST', + url: _url, + dataType: 'json', + data: JSON.stringify(_payload), + contentType : 'application/json', + success: function(data) { + _returnFunction(200, data); + }, + error: function(xhr, statusText, errorThrown){ + _returnFunction(xhr.status, errorThrown); + } + }); +} diff --git a/views/default/index.html b/views/default/index.html index 7888001..0a2a625 100644 --- a/views/default/index.html +++ b/views/default/index.html @@ -1,8 +1,23 @@ -<html> - <body> - This is a test {{=var}}<br><br> - This is commit <b>{{=meta.git_commit[:10] if len(meta.git_commit) > 10 else meta.git_commit}}</b> from <b>{{=meta.git_date}}</b> show on - <a href="https://git.noc.ruhr-uni-bochum.de/studienprojekt-ss20/lynchburg-server/-/commit/{{=meta.git_commit}}">GitLab</a><br> - Database from: {{=meta.creation}} - </body> -</html> +{{extend 'layout.html'}} + +{{block head}} +<link rel="stylesheet" type="text/css" href="{{=URL('static/css', 'client.css')}}"> +{{end}} + +<div id="current_content"> + <form id="form_login"> + <input type="text" id="room_code" placeholder="Room Code" maxlength="4"><br><br> + <input type="text" id="user_name" placeholder="User Name" maxlength="15"><br><br> + <input type="submit" value="Enter"> + </form> +</div> + +{{block page_js}} +<script type="text/javascript"> + $("#form_login").on("submit", function(){ + var payload = {"room_code": $("#room_code").val(), "user_name": $("#user_name").val()} + AJAX_JSON("{{=URL('player', 'create')}}", payload, function(code, data){alert(code);}); + return false; + }); +</script> +{{end}} diff --git a/views/layout.html b/views/layout.html index ded03bf..ec20e88 100644 --- a/views/layout.html +++ b/views/layout.html @@ -2,9 +2,25 @@ <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <link rel="stylesheet" type="text/css" href="{{=URL('static/css', 'base.css')}}"> <script src="{{=URL('static','js/jquery.js')}}" type="text/javascript"></script> + <script src="{{=URL('static','js/ajax.js')}}" type="text/javascript"></script> + + {{block head}}{{end head}} </head> <body> + + <!-- Page Content --> {{include}} + <!-- ======================== --> + + <div id="footer"> + [ <a href="{{=URL('default', 'index')}}">WebClient</a> ] + [ <a href="{{=URL('debug', 'index')}}">Debug</a> ] + [ <a href="https://git.noc.ruhr-uni-bochum.de/studienprojekt-ss20">GitLab</a> ] + <!-- Page specific JavaScript --> + {{block page_js}}{{end page_js}} + <!-- ======================== --> + </body> </html> -- GitLab