Subversion Repositories cryptochat

Rev

Blame | Last modification | View Log | RSS feed

  1. #!/usr/bin/env python
  2. import cgi
  3. import cgitb;cgitb.enable()
  4. import datetime
  5. import os
  6.  
  7. import sajax1
  8.  
  9. WALLFILE = '/tmp/wall.html'
  10.  
  11. if not os.path.exists(WALLFILE):
  12.    fh = open(WALLFILE, 'w')
  13.    fh.close()
  14.  
  15. def colourify_ip(ip):
  16.    colour = ''.join(['%02x' % int(part) for part in ip.split('.')[-3:]])
  17.    return colour
  18.    
  19. def add_line(msg):
  20.    f = open("/tmp/wall.html","a")
  21.    dt = datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S")
  22.    msg = cgi.escape(msg)
  23.    remote = os.environ['REMOTE_ADDR']
  24.    colour = colourify_ip(remote)
  25.    f.write('<span style="color:#%(colour)s">%(dt)s</span> %(msg)s<br />\n' % locals())
  26.    f.close()
  27.    
  28. def refresh():
  29.    f = open("/tmp/wall.html")
  30.    return '\n'.join(list(f)[-25:])
  31.    
  32. sajax1.sajax_init()
  33. sajax1.sajax_export(refresh, add_line)
  34. sajax1.sajax_handle_client_request()
  35.  
  36. print """
  37. <html>
  38. <head>
  39.         <title>PyWall</title>
  40.         <script>
  41. """
  42. sajax1.sajax_show_javascript()
  43. print """
  44.         var check_n = 0;
  45.        
  46.         function refresh_cb(new_data) {
  47.                 document.getElementById("wall").innerHTML = new_data;
  48.                 document.getElementById("status").innerHTML = "Checked #" + check_n++;
  49.                 setTimeout("refresh()", 1000);
  50.         }
  51.        
  52.         function refresh() {
  53.                 document.getElementById("status").innerHTML = "Checking..";
  54.                 x_refresh(refresh_cb);
  55.         }
  56.        
  57.         function add_cb() {
  58.                 // we don't care..
  59.         }
  60.  
  61.         function add() {
  62.                 var line;
  63.                 var handle;
  64.                 handle = document.getElementById("handle").value;
  65.                 line = document.getElementById("line").value;
  66.                 if (line == "")
  67.                         return;
  68.                 x_add_line("[" + handle + "] " + line, add_cb);
  69.                 document.getElementById("line").value = "";
  70.         }
  71.         </script>
  72.        
  73. </head>
  74. <body onload="refresh();">
  75.  
  76.         <a href="http://">Sajax</a> - Wall Example<br/>
  77.        
  78.         <input type="text" name="handle" id="handle" value="(name)"
  79.                 onfocus="this.select()" style="width:130px;">
  80.         <input type="text" name="line" id="line" value="(enter your message here)"
  81.                 onfocus="this.select()"
  82.                 style="width:300px;">
  83.         <input type="button" name="check" value="Post message"
  84.                 onclick="add(); return false;">
  85.         <div id="wall"></div>
  86.         <div id="status"><em>Loading..</em></div>
  87.        
  88. </body>
  89. </html>
  90. """ % locals()
  91.