From 074041d7aedaaa38838959f96b6bc54d7db54864 Mon Sep 17 00:00:00 2001
From: Aitur <artur.kunz@ruhr-uni-bochum.de>
Date: Wed, 6 May 2020 15:37:29 +0200
Subject: [PATCH] Submit have bootrstrap class

---
 controllers/default.py                     |   2 +-
 static/game/debug/renderer - bootstrap.css |  19 +++
 static/game/debug/renderer - bootstrap.js  | 164 +++++++++++++++++++++
 views/game/debug/renderer.html             |   4 +-
 views/game/debug/renderer_bootstrap.html   |  10 ++
 5 files changed, 196 insertions(+), 3 deletions(-)
 create mode 100644 static/game/debug/renderer - bootstrap.css
 create mode 100644 static/game/debug/renderer - bootstrap.js
 create mode 100644 views/game/debug/renderer_bootstrap.html

diff --git a/controllers/default.py b/controllers/default.py
index 8ea212f..8b2407a 100644
--- a/controllers/default.py
+++ b/controllers/default.py
@@ -18,6 +18,6 @@ def content():
         return dict(info=T("The room has been closed"))
 
     #Change this line to enable a different renderer
-    response.view = "game/debug/renderer.html"
+    response.view = "game/debug/renderer_bootstrap.html"
 
     return dict(player_record=player_record, room_record=room_record)
diff --git a/static/game/debug/renderer - bootstrap.css b/static/game/debug/renderer - bootstrap.css
new file mode 100644
index 0000000..1e14ac4
--- /dev/null
+++ b/static/game/debug/renderer - bootstrap.css	
@@ -0,0 +1,19 @@
+html {
+    background-color: lightblue;
+}
+
+body {
+    background-color: lightgreen;
+}
+
+input {
+    font-size: 20px;
+    width: 90%;
+    height: 50px;
+}
+
+#game_content {
+    font-size: 25px;
+    padding-top: 10px;
+    padding-bottom: 55px;
+}
diff --git a/static/game/debug/renderer - bootstrap.js b/static/game/debug/renderer - bootstrap.js
new file mode 100644
index 0000000..196d7b6
--- /dev/null
+++ b/static/game/debug/renderer - bootstrap.js	
@@ -0,0 +1,164 @@
+function render(_role, _roles) {
+  HEADER_SET(ROOM_CODE, "Lynchburg", PLAYER_NAME + ":" + _role);
+
+  if (submit_done) {
+    _role = role_next;
+  }
+
+  if (_role in _roles) {
+    renderRole(_roles[_role], _roles["idle"]);
+    return;
+  }
+
+  if (_role === "idle") {
+    //We have no role definitions yet, but the role is default idle
+    $("#game_content").html(ERROR_WAIT);
+    return;
+  }
+
+  //This is not good
+  set_error(ERROR_RENDERTARGET);
+}
+
+function renderRole(_definition, _roleIdle) {
+  if (_roleIdle && _definition !== _roleIdle) {
+    var old_css_idle = $("#game_css_idle");
+
+    if (old_css_idle) {
+      old_css_idle.remove();
+    }
+
+    if ("css" in _roleIdle) {
+      //Add idle css
+      var css = $(
+        "<style id='game_css_idle' type='text/css'>" +
+          sanitizeCSS(_roleIdle["css"]) +
+          "</style>"
+      );
+      $("#current_content").append(css);
+    }
+  }
+
+  var old_css = $("#game_css");
+
+  if (old_css) {
+    old_css.remove();
+  }
+
+  if ("css" in _definition) {
+    //Add additional css
+    var css = $(
+      "<style id='game_css' type='text/css'>" +
+        sanitizeCSS(_definition["css"]) +
+        "</style>"
+    );
+    $("#current_content").append(css);
+  }
+
+  var elements = _definition["elements"];
+
+  $("#game_content").html("");
+
+  var prompt = prompts[currentPrompt];
+
+  for (var index in elements) {
+    var element = elements[index];
+
+    var type = element["type"];
+    var c = element["class"];
+    var name = element["name"];
+    var value = element["value"];
+
+    if (prompt) {
+      for (var varname in prompt) {
+        while (value.indexOf("$" + varname) != -1) {
+          value = value.replace("$" + varname, prompt[varname]);
+        }
+      }
+    }
+
+    var e;
+    switch (type) {
+      case "text":
+        e = $("<span></span>");
+        e.html(value);
+        break;
+      case "input":
+        e = $("<input class='game_input' type='text'/>");
+        e.attr("placeholder", value);
+        if (!prompt) {
+          e.attr("disabled", "true");
+        }
+        break;
+      case "submit":
+        e = $(
+          "<input class='game_input btn btn-outline-primary' type='submit'/>"
+        );
+        console.log(e);
+        e.val(value);
+        console.log(e);
+        if (!prompt) {
+          e.attr("disabled", "true");
+        } else {
+          e.click(function (o) {
+            submit($(this));
+          });
+        }
+        break;
+      default:
+        e = $("<span>Invalid Element</span>");
+        break;
+    }
+    e.attr("name", name);
+    e.addClass(c);
+
+    var p = $("<p></p>").append(e);
+    $("#game_content").append(p);
+  }
+}
+
+function sanitizeCSS(_css) {
+  return _css.replace(/</g, "");
+}
+
+function submit(_button) {
+  var submit = {};
+  var inputs = {};
+
+  $("#game_content .game_input").each(function (index, element) {
+    element.setAttribute("disabled", "true");
+
+    switch (element.getAttribute("type")) {
+      case "text":
+        inputs[element.getAttribute("name")] = element.value.replace(
+          /[^0-9a-zA-Z\s]/g,
+          ""
+        );
+        break;
+    }
+  });
+
+  submit["submit"] = _button.attr("name");
+  submit["inputs"] = inputs;
+
+  AJAX_JSON(URL_SUBMIT, submit, function (_code, _data) {
+    switch (_code) {
+      case 200:
+        currentPrompt++;
+      //Fall through:
+      case 409:
+        if (!prompts[currentPrompt]) {
+          submit_done = true;
+        }
+        render(role, roles);
+        break;
+      case 401:
+      case 410:
+        content_reload();
+        break;
+      default:
+        set_error(_data);
+        break;
+    }
+  });
+}
diff --git a/views/game/debug/renderer.html b/views/game/debug/renderer.html
index cf111f2..e987ae0 100644
--- a/views/game/debug/renderer.html
+++ b/views/game/debug/renderer.html
@@ -1,10 +1,10 @@
 {{extend 'game/index.html'}}
 
 {{block game_css}}
-    <link rel="stylesheet" type="text/css" href="{{=URL('static/game/debug', 'renderer.css')}}">
+    <link rel="stylesheet" type="text/css" href="{{=URL('static/game/debug', 'renderer - bootstrap.css')}}">
 {{end game_css}}
 
 
 {{block game_js}}
-    <script src="{{=URL('static/game/debug','renderer.js')}}" type="text/javascript"></script>
+    <script src="{{=URL('static/game/debug','renderer - bootstrap.js')}}" type="text/javascript"></script>
 {{end game_js}}
diff --git a/views/game/debug/renderer_bootstrap.html b/views/game/debug/renderer_bootstrap.html
new file mode 100644
index 0000000..cf111f2
--- /dev/null
+++ b/views/game/debug/renderer_bootstrap.html
@@ -0,0 +1,10 @@
+{{extend 'game/index.html'}}
+
+{{block game_css}}
+    <link rel="stylesheet" type="text/css" href="{{=URL('static/game/debug', 'renderer.css')}}">
+{{end game_css}}
+
+
+{{block game_js}}
+    <script src="{{=URL('static/game/debug','renderer.js')}}" type="text/javascript"></script>
+{{end game_js}}
-- 
GitLab