summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornsensfel <SpamShield0@noot-noot.org>2018-07-09 18:32:31 +0200
committernsensfel <SpamShield0@noot-noot.org>2018-07-09 18:32:31 +0200
commitf716016b5a6fd774fa49640f3dec9b67280853b0 (patch)
treecd2ea48fe31a352b6bd04501aacd90c91b321982
parentcd3cfd38bf25c6c307639e5c182fd8312db8ba33 (diff)
Starting to implement some JS stuff...
-rw-r--r--src/battlemap/src/ElmModule/Init.elm5
-rw-r--r--src/battlemap/src/Main.elm5
-rw-r--r--src/battlemap/src/Struct/Flags.elm26
-rw-r--r--src/battlemap/www/index.html19
-rw-r--r--src/global/www/script/session.js88
-rw-r--r--src/global/www/script/urlparams.js53
6 files changed, 190 insertions, 6 deletions
diff --git a/src/battlemap/src/ElmModule/Init.elm b/src/battlemap/src/ElmModule/Init.elm
index 88e8441..3e6cc52 100644
--- a/src/battlemap/src/ElmModule/Init.elm
+++ b/src/battlemap/src/ElmModule/Init.elm
@@ -6,6 +6,7 @@ module ElmModule.Init exposing (init)
import Comm.LoadBattlemap
import Struct.Event
+import Struct.Flags
import Struct.Model
--------------------------------------------------------------------------------
@@ -15,8 +16,8 @@ import Struct.Model
--------------------------------------------------------------------------------
-- EXPORTED --------------------------------------------------------------------
--------------------------------------------------------------------------------
-init : (Struct.Model.Type, (Cmd Struct.Event.Type))
-init =
+init : Struct.Flags.Type -> (Struct.Model.Type, (Cmd Struct.Event.Type))
+init flags =
let model = (Struct.Model.new) in
(
model,
diff --git a/src/battlemap/src/Main.elm b/src/battlemap/src/Main.elm
index 96b267f..0d22cd5 100644
--- a/src/battlemap/src/Main.elm
+++ b/src/battlemap/src/Main.elm
@@ -4,15 +4,16 @@ import Html
-- Battlemap -------------------------------------------------------------------
import Struct.Model
import Struct.Event
+import Struct.Flags
import ElmModule.Init
import ElmModule.Subscriptions
import ElmModule.View
import ElmModule.Update
-main : (Program Never Struct.Model.Type Struct.Event.Type)
+main : (Program Struct.Flags.Type Struct.Model.Type Struct.Event.Type)
main =
- (Html.program
+ (Html.programWithFlags
{
init = ElmModule.Init.init,
view = ElmModule.View.view,
diff --git a/src/battlemap/src/Struct/Flags.elm b/src/battlemap/src/Struct/Flags.elm
new file mode 100644
index 0000000..d25f432
--- /dev/null
+++ b/src/battlemap/src/Struct/Flags.elm
@@ -0,0 +1,26 @@
+module Struct.Flags exposing
+ (
+ Type
+ )
+
+-- Elm -------------------------------------------------------------------------
+
+-- Battlemap -------------------------------------------------------------------
+
+--------------------------------------------------------------------------------
+-- TYPES -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+type alias Type =
+ {
+ user_id : String,
+ token : String,
+ url_params : (List (List String))
+ }
+
+--------------------------------------------------------------------------------
+-- LOCAL -----------------------------------------------------------------------
+--------------------------------------------------------------------------------
+
+--------------------------------------------------------------------------------
+-- EXPORTED --------------------------------------------------------------------
+--------------------------------------------------------------------------------
diff --git a/src/battlemap/www/index.html b/src/battlemap/www/index.html
index c90a5d4..fcba44a 100644
--- a/src/battlemap/www/index.html
+++ b/src/battlemap/www/index.html
@@ -3,13 +3,28 @@
<head>
<link rel="stylesheet" type="text/css" href="../global/style.css">
<link rel="stylesheet" type="text/css" href="../battlemap/style.css">
- <link rel="stylesheet" type="text/css" href="../asset/tiles.css">
<link rel="stylesheet" type="text/css" href="../asset/characters.css">
<link rel="stylesheet" type="text/css" href="../asset/armors.css">
<link rel="icon" type="image/x-icon" href="/favicon.ico">
</head>
<body>
<script src="script/main.js"></script>
- <script>Elm.Main.fullscreen();</script>
+ <script src="../global/script/session.js"></script>
+ <script src="../global/script/urlparams.js"></script>
+ <script>
+ tacticians_online.session.load();
+
+ tacticians_online.app =
+ Elm.Main.fullscreen
+ (
+ {
+ user_id: tacticians_online.session.get_user_id(),
+ token: tacticians_online.session.get_token(),
+ url_params: tacticians_online.urlparams.get_parameters()
+ }
+ );
+
+ tacticians_online.session.attach_to(tacticians_online.app);
+ </script>
</body>
</html>
diff --git a/src/global/www/script/session.js b/src/global/www/script/session.js
new file mode 100644
index 0000000..c712999
--- /dev/null
+++ b/src/global/www/script/session.js
@@ -0,0 +1,88 @@
+/******************************************************************************/
+/** Session Management ********************************************************/
+/******************************************************************************/
+
+/***
+ * This module uses local storage to keep users logged in across pages, and
+ * through further visits.
+ **/
+
+var tacticians_online = tacticians_online || new Object();
+
+tacticians_online.session = new Object();
+
+tacticians_online.session.private = new Object();
+tacticians_online.session.private.user_id = "";
+tacticians_online.session.private.token = "";
+
+tacticians_online.session.store =
+function ()
+{
+ localStorage.setItem("user_id", tacticians_online.session.private.user_id);
+ localStorage.setItem("token", tacticians_online.session.private.token);
+}
+
+tacticians_online.session.reset =
+function ()
+{
+ localStorage.removeItem("user_id");
+ localStorage.removeItem("token");
+}
+
+tacticians_online.session.load =
+function ()
+{
+ tacticians_online.session.private.user_id = localStorage.getItem("user_id");
+ tacticians_online.session.private.token = localStorage.getItem("token");
+
+ if (tacticians_online.session.private.user_id == null)
+ {
+ tacticians_online.session.private.user_id = "";
+ }
+
+ if (tacticians_online.session.private.token == null)
+ {
+ tacticians_online.session.private.token = "";
+ }
+}
+
+tacticians_online.session.get_user_id =
+function ()
+{
+ return tacticians_online.session.private.user_id;
+}
+
+tacticians_online.session.get_token =
+function ()
+{
+ return tacticians_online.session.private.token;
+}
+
+tacticians_online.session.set_user_id =
+function (user_id)
+{
+ tacticians_online.session.private.user_id = user_id;
+}
+
+tacticians_online.session.set_token =
+function (token)
+{
+ tacticians_online.session.private.token = token;
+}
+
+tacticians_online.session.store_new_session =
+function (user_id, token)
+{
+ tacticians_online.session.set_user_id(user_id);
+ tacticians_online.session.set_token(token);
+ tacticians_online.session.store();
+}
+
+tacticians_online.session.attach_to =
+function (app)
+{
+ app.ports.store_new_session.subscribe =
+ tacticians_online.session.store_new_session;
+
+ app.ports.reset_session.subscribe = tacticians_online.session.reset;
+}
diff --git a/src/global/www/script/urlparams.js b/src/global/www/script/urlparams.js
new file mode 100644
index 0000000..60e6af4
--- /dev/null
+++ b/src/global/www/script/urlparams.js
@@ -0,0 +1,53 @@
+/******************************************************************************/
+/** URL Parameters ************************************************************/
+/******************************************************************************/
+
+/***
+ * This module uses parses the current page's URL and converts it to a format
+ * that can be used by Elm.
+ **/
+
+var tacticians_online = tacticians_online || new Object();
+
+tacticians_online.urlparams = new Object();
+
+tacticians_online.urlparams.private = new Object();
+
+tacticians_online.urlparams.private.get_clean_parameters_string =
+function ()
+{
+ var all_parameters_string = window.location.search;
+
+ if (all_parameters_string == "")
+ {
+ return "";
+ }
+
+ if (all_parameters_string[0] == "?")
+ {
+ return all_parameters_string.slice(1);
+ }
+
+ return all_parameters_string;
+}
+
+tacticians_online.urlparams.get_parameters =
+function ()
+{
+ var all_parameters_string =
+ tacticians_online.urlparams.private.get_clean_parameters_string();
+
+ var all_parameters_array = all_parameters_string.split('&');
+
+ var result = [];
+
+ all_parameters_array.forEach
+ (
+ function (param)
+ {
+ result.push(param.split('='));
+ }
+ );
+
+ return result;
+}