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 42 (r'/file', FileHandler),
43 43 # (r'/root', MainHandler), # FIXME
44 44 # (r'/ws', AdminSocketHandler),
  45 + (r'/studentwebservice', StudentWebservice),
45 46 (r'/', RootHandler),
46 47 ]
47 48  
... ... @@ -152,13 +153,17 @@ class BaseHandler(tornado.web.RequestHandler):
152 153 # AdminSocketHandler.update_cache(chat) # store msgs
153 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 164 class AdminHandler(BaseHandler):
158 165 '''Handle /admin'''
159 166  
160   - # SUPPORTED_METHODS = ['GET', 'POST']
161   -
162 167 @tornado.web.authenticated
163 168 @admin_only
164 169 async def get(self):
... ... @@ -405,7 +410,9 @@ class TestHandler(BaseHandler):
405 410  
406 411 # --- REVIEW -----------------------------------------------------------------
407 412 class ReviewHandler(BaseHandler):
408   - # SUPPORTED_METHODS = ['GET']
  413 + '''
  414 + Show test for review
  415 + '''
409 416  
410 417 _templates = {
411 418 'radio': 'review-question-radio.html',
... ... @@ -445,7 +452,6 @@ class ReviewHandler(BaseHandler):
445 452 templ=self._templates)
446 453  
447 454  
448   -
449 455 # ----------------------------------------------------------------------------
450 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 14 $(document).ready(function() {
2 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 40 \ No newline at end of file
... ...
perguntations/templates/test.html
... ... @@ -38,6 +38,7 @@
38 38 <!-- My scripts -->
39 39 <script defer src="/static/js/question_disabler.js"></script>
40 40 <script defer src="/static/js/prevent_enter_submit.js"></script>
  41 + <script defer src="/static/js/detect_unfocus.js"></script>
41 42 </head>
42 43 <!-- ===================================================================== -->
43 44 <body>
... ...