Commit a635102a02871b464f1ed6515cba33c487113152

Authored by Miguel Barão
1 parent cee810bf
Exists in master and in 1 other branch dev

- detect browser focus/unfocus events

perguntations/serve.py
@@ -42,6 +42,7 @@ class WebApplication(tornado.web.Application): @@ -42,6 +42,7 @@ class WebApplication(tornado.web.Application):
42 (r'/file', FileHandler), 42 (r'/file', FileHandler),
43 # (r'/root', MainHandler), # FIXME 43 # (r'/root', MainHandler), # FIXME
44 # (r'/ws', AdminSocketHandler), 44 # (r'/ws', AdminSocketHandler),
  45 + (r'/studentwebservice', StudentWebservice),
45 (r'/', RootHandler), 46 (r'/', RootHandler),
46 ] 47 ]
47 48
@@ -152,13 +153,17 @@ class BaseHandler(tornado.web.RequestHandler): @@ -152,13 +153,17 @@ class BaseHandler(tornado.web.RequestHandler):
152 # AdminSocketHandler.update_cache(chat) # store msgs 153 # AdminSocketHandler.update_cache(chat) # store msgs
153 # AdminSocketHandler.send_updates(chat) # send to clients 154 # AdminSocketHandler.send_updates(chat) # send to clients
154 155
  156 +class StudentWebservice(BaseHandler):
  157 + @tornado.web.authenticated
  158 + async def post(self):
  159 + uid = self.current_user
  160 + cmd = self.get_body_argument('cmd', None)
  161 + logging.info('%s %s', uid, cmd)
155 162
156 # ---------------------------------------------------------------------------- 163 # ----------------------------------------------------------------------------
157 class AdminHandler(BaseHandler): 164 class AdminHandler(BaseHandler):
158 '''Handle /admin''' 165 '''Handle /admin'''
159 166
160 - # SUPPORTED_METHODS = ['GET', 'POST']  
161 -  
162 @tornado.web.authenticated 167 @tornado.web.authenticated
163 @admin_only 168 @admin_only
164 async def get(self): 169 async def get(self):
@@ -405,7 +410,9 @@ class TestHandler(BaseHandler): @@ -405,7 +410,9 @@ class TestHandler(BaseHandler):
405 410
406 # --- REVIEW ----------------------------------------------------------------- 411 # --- REVIEW -----------------------------------------------------------------
407 class ReviewHandler(BaseHandler): 412 class ReviewHandler(BaseHandler):
408 - # SUPPORTED_METHODS = ['GET'] 413 + '''
  414 + Show test for review
  415 + '''
409 416
410 _templates = { 417 _templates = {
411 'radio': 'review-question-radio.html', 418 'radio': 'review-question-radio.html',
@@ -445,7 +452,6 @@ class ReviewHandler(BaseHandler): @@ -445,7 +452,6 @@ class ReviewHandler(BaseHandler):
445 templ=self._templates) 452 templ=self._templates)
446 453
447 454
448 -  
449 # ---------------------------------------------------------------------------- 455 # ----------------------------------------------------------------------------
450 def signal_handler(sig, frame): 456 def signal_handler(sig, frame):
451 ''' 457 '''
perguntations/static/js/detect_unfocus.js
  1 +// from: https://www.tornadoweb.org/en/stable/guide/security.html
  2 +// with changes: removed datatype and callback from original postJSON
  3 +function getCookie(name) {
  4 + var r = document.cookie.match("\\b" + name + "=([^;]*)\\b");
  5 + return r ? r[1] : undefined;
  6 +}
  7 +
  8 +jQuery.postJSON = function(url, args) {
  9 + args._xsrf = getCookie("_xsrf");
  10 + $.ajax({url: url, data: $.param(args), type: "POST"});
  11 +};
  12 +
  13 +
1 $(document).ready(function() { 14 $(document).ready(function() {
2 $(window).focus(function(){ 15 $(window).focus(function(){
3 - $.ajax({  
4 - type: "POST",  
5 - url: "/studentwebservice",  
6 - data: {  
7 - "cmd": "focus",  
8 - "number": $("#number").text(),  
9 - "value": true  
10 - } 16 + $.postJSON("/studentwebservice", {
  17 + "cmd": "focus",
11 }); 18 });
12 }); 19 });
13 20
14 - $(window).blur(function(e){  
15 - $.ajax({  
16 - type: "POST",  
17 - url: "/studentwebservice",  
18 - data: {  
19 - "cmd": "focus",  
20 - "number": $("#number").text(),  
21 - "value": false  
22 - } 21 + $(window).blur(function(){
  22 + $.postJSON("/studentwebservice", {
  23 + "cmd": "unfocus",
23 }); 24 });
24 }); 25 });
25 26
26 - $(window).resize(function(){  
27 - var n = $(window).scrollTop();  
28 - $.ajax({  
29 - type: "POST",  
30 - url: "/adminwebservice",  
31 - data: {  
32 - "cmd": "resize",  
33 - "name": $("#number").text(),  
34 - "scroll": n  
35 - }  
36 - });  
37 - }); 27 + // $(window).resize(function(){
  28 + // var n = $(window).scrollTop();
  29 + // $.ajax({
  30 + // type: "POST",
  31 + // url: "/adminwebservice",
  32 + // data: {
  33 + // "cmd": "resize",
  34 + // "name": $("#number").text(),
  35 + // "scroll": n
  36 + // }
  37 + // });
  38 + // });
38 }); 39 });
39 \ No newline at end of file 40 \ No newline at end of file
perguntations/templates/test.html
@@ -38,6 +38,7 @@ @@ -38,6 +38,7 @@
38 <!-- My scripts --> 38 <!-- My scripts -->
39 <script defer src="/static/js/question_disabler.js"></script> 39 <script defer src="/static/js/question_disabler.js"></script>
40 <script defer src="/static/js/prevent_enter_submit.js"></script> 40 <script defer src="/static/js/prevent_enter_submit.js"></script>
  41 + <script defer src="/static/js/detect_unfocus.js"></script>
41 </head> 42 </head>
42 <!-- ===================================================================== --> 43 <!-- ===================================================================== -->
43 <body> 44 <body>