aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorSean Whitton <spwhitton@spwhitton.name>2015-03-17 08:41:41 +0000
committerSean Whitton <spwhitton@spwhitton.name>2015-03-17 08:49:57 +0000
commit5a91d8c56cf42e266667ce7054bcca7065b057e2 (patch)
tree1698b750edeafdedf8490deb1512167884708d85
parent3630d4ad94e675214fd5e188aaf53974f0daa755 (diff)
downloadsariulclocks-5a91d8c56cf42e266667ce7054bcca7065b057e2.tar.gz
javascript to start the class oh yeaaah
-rw-r--r--assets/html/main.html2
-rw-r--r--assets/js/main.js61
-rw-r--r--src/Types/Session.hs6
-rw-r--r--src/sariulclocks.hs3
4 files changed, 70 insertions, 2 deletions
diff --git a/assets/html/main.html b/assets/html/main.html
index b69cf3c..8d6c09d 100644
--- a/assets/html/main.html
+++ b/assets/html/main.html
@@ -39,6 +39,6 @@
<script src="js/vendor/bootstrap.min.js"></script>
- <!-- <script src="js/main.js"></script> -->
+ <script src="js/main.js"></script>
</body>
</html>
diff --git a/assets/js/main.js b/assets/js/main.js
index e69de29..b89bcef 100644
--- a/assets/js/main.js
+++ b/assets/js/main.js
@@ -0,0 +1,61 @@
+// famous functions from <http://www.quirksmode.org/js/cookies.html>
+
+function createCookie(name,value,days) {
+ if (days) {
+ var date = new Date();
+ date.setTime(date.getTime()+(days*24*60*60*1000));
+ var expires = "; expires="+date.toGMTString();
+ }
+ else var expires = "";
+ document.cookie = name+"="+value+expires+"; path=/";
+}
+
+function readCookie(name) {
+ var nameEQ = name + "=";
+ var ca = document.cookie.split(';');
+ for(var i=0;i < ca.length;i++) {
+ var c = ca[i];
+ while (c.charAt(0)==' ') c = c.substring(1,c.length);
+ if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
+ }
+ return null;
+}
+
+function eraseCookie(name) {
+ createCookie(name,"",-1);
+}
+
+// start a new class
+
+function startLesson()
+{
+ var oldCookie = readCookie("class_cookie");
+ // bail out if we've already started a class (the cookie will
+ // always be set cos our CGI monad always sets it)
+ if (oldCookie != "Nothing")
+ return false;
+
+ // get input
+ var theGrade = prompt("What grade?", "");
+ var theClass = prompt("What class?", "");
+ cookieString = theGrade + "-" + theClass
+
+ // validate
+ var valRegExp = new RegExp("^[0-9]-[0-9]$");
+ if (valRegExp.test(cookieString) == false)
+ {
+ alert ("invalid class!");
+ return false;
+ }
+
+ // set the cookie and reload to start the session
+ createCookie("class_cookie", cookieString, 1);
+ location.reload(true);
+}
+
+// bind to buttons
+
+$(document).ready(function(){
+ $('#start-lesson').button();
+ $('#start-lesson').click(function (){ startLesson(); });
+});
diff --git a/src/Types/Session.hs b/src/Types/Session.hs
index bc11a05..0241bd1 100644
--- a/src/Types/Session.hs
+++ b/src/Types/Session.hs
@@ -6,6 +6,7 @@ import Network.CGI.Cookie
import System.Time
import Data.List.Split (splitOn)
import Data.Classes
+import Data.Maybe (fromJust)
data Session = Session
{ currentClass :: Maybe Class
@@ -19,7 +20,10 @@ data Session = Session
makeClassCookie :: ClockTime -> Session -> Cookie
makeClassCookie now session =
Cookie { cookieName = "class_cookie"
- , cookieValue = (show . currentClass) session
+ , cookieValue =
+ case currentClass session of
+ Just c -> show c
+ Nothing -> "Nothing"
, cookieExpires = Just $ endOfSchoolDay now
, cookieDomain = Nothing
, cookiePath = Nothing
diff --git a/src/sariulclocks.hs b/src/sariulclocks.hs
index 5b84eac..5a2481d 100644
--- a/src/sariulclocks.hs
+++ b/src/sariulclocks.hs
@@ -130,6 +130,9 @@ cgiMain = do
let (newScores, newSession, html) = runPage makePage scores session
+ setCookie $ makeClassCookie clockTime newSession
+ setCookie $ makeClockCookie clockTime newSession
+
output $ templateInject htmlTemplate html
main = runCGI . handleErrors $ cgiMain