Skip to content

Commit

Permalink
added httptester
Browse files Browse the repository at this point in the history
  • Loading branch information
mberg committed May 7, 2009
1 parent c455cc8 commit a06983c
Show file tree
Hide file tree
Showing 15 changed files with 639 additions and 0 deletions.
Empty file added apps/httptester/__init__.py
Empty file.
4 changes: 4 additions & 0 deletions apps/httptester/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
from django.contrib import admin
from apps.httptester.models import *

admin.site.register(Message)
13 changes: 13 additions & 0 deletions apps/httptester/app.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#!/usr/bin/env python
# vim: ai ts=4 sts=4 et sw=4

import rapidsms
from apps.httptester.models import Message
import datetime

class App(rapidsms.app.App):
def handle(self, message):
self.debug("got message %s" % (message))

def outgoing(self, message):
pass
8 changes: 8 additions & 0 deletions apps/httptester/config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#!/usr/bin/env python
# vim: ai ts=4 sts=4 et sw=4

title = "Message Tester"
tab_link = "/http"
a = "Alpha"
b = "Beta"

12 changes: 12 additions & 0 deletions apps/httptester/forms.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from django import forms
from django.forms import widgets
from apps.httptester.models import Message

class MessageForm(forms.ModelForm):
#phone_number = forms.CharField(max_length=15, label=u'Phone Number')
body = forms.Textarea()
class Meta:
model = Message
exclude = ("date", "outgoing", "phone_number")


15 changes: 15 additions & 0 deletions apps/httptester/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from django.db import models

# Create your models here.
class Message(models.Model):
phone_number = models.CharField(max_length=15)
date = models.DateTimeField('date published')
body = models.TextField()
outgoing = models.BooleanField(default=False)

def __unicode__(self):
type = "incoming"
if self.outgoing:
type = "outgoing"
return self.phone_number + ": " + self.body + "(" + type + " at " + self.date.__str__() + ")"

59 changes: 59 additions & 0 deletions apps/httptester/static/js/httpclient.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
// javascript for the httpclient
url = "/http/proxy/";

$(document).ready(function(){
$('#form').submit(function(){ sendMsg(); return false; });
setInterval("checkMsgs()", 500);
});

function sendMsg() {
if ($('#phone').val().length > 0 && $('#message').val().length > 0) {
req = url + $('#phone').val() + "/" + $('#message').val();
$.getJSON(
req,
function (response) { if (response) {
snippet = '<tr class="in"><td class="phone">' + response.phone + '</td><td class="dir">&laquo;</td><td class="msg">' + decode(response.message) + '</td><td class="info">' + decode(response.message).length + ' characters</td></tr>';
$('#log').append(snippet);
fixClasses();
$('div.tester').scrollTo('#log tr:last', 800);
$('#message').val("");
}}
);
}
}

function fixClasses(){
$('#log tr').removeClass('first');
$('#log tr').removeClass('last');
$('#log tr:first').addClass('first');
$('#log tr:last').addClass('last');
}

function decode(str) {
str = str.replace(/%23/gi, "#");
str = str.replace(/%24/gi, "$");
str = str.replace(/%26/gi, "&");
str = str.replace(/%3D/gi, "=");
str = str.replace(/%3B/gi, ";");
str = str.replace(/%2C/gi, ",");
str = str.replace(/%3A/gi, ":");
str = str.replace(/%3F/gi, "?");
str = decodeURI(str);
return str;
}

function checkMsgs() {
if ($('#phone').val().length > 0) {
req = url + $('#phone').val() + "/json_resp";
$.getJSON(
req,
function (response) { if (response) {
snippet = '<tr class="out"><td class="phone">' + response.phone + '</td><td class="dir">&raquo;</td><td class="msg">' + decode(response.message) + '</td><td class="info">' + decode(response.message).length + ' characters</td></tr>';
$('#log').append(snippet);
fixClasses();
$('div.tester').scrollTo('#log tr:last', 800);
}}

);
}
}
59 changes: 59 additions & 0 deletions apps/httptester/static/scripts/httpclient.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
// javascript for the httpclient
url = "/http/proxy/";

$(document).ready(function(){
$('#form').submit(function(){ sendMsg(); return false; });
setInterval("checkMsgs()", 5000);
});

function sendMsg() {
if ($('#phone').val().length > 0 && $('#message').val().length > 0) {
req = url + $('#phone').val() + "/" + $('#message').val();
$.getJSON(
req,
function (response) { if (response) {
snippet = '<tr class="in"><td class="phone">' + response.phone + '</td><td class="dir">&laquo;</td><td class="msg">' + decode(response.message) + '</td><td class="info">' + decode(response.message).length + ' characters</td></tr>';
$('#log').append(snippet);
fixClasses();
$('div.tester').scrollTo('#log tr:last', 800);
$('#message').val("");
}}
);
}
}

function fixClasses(){
$('#log tr').removeClass('first');
$('#log tr').removeClass('last');
$('#log tr:first').addClass('first');
$('#log tr:last').addClass('last');
}

function decode(str) {
str = str.replace(/%23/gi, "#");
str = str.replace(/%24/gi, "$");
str = str.replace(/%26/gi, "&");
str = str.replace(/%3D/gi, "=");
str = str.replace(/%3B/gi, ";");
str = str.replace(/%2C/gi, ",");
str = str.replace(/%3A/gi, ":");
str = str.replace(/%3F/gi, "?");
str = decodeURI(str);
return str;
}

function checkMsgs() {
if ($('#phone').val().length > 0) {
req = url + $('#phone').val() + "/json_resp";
$.getJSON(
req,
function (response) { if (response) {
snippet = '<tr class="out"><td class="phone">' + response.phone + '</td><td class="dir">&raquo;</td><td class="msg">' + decode(response.message) + '</td><td class="info">' + decode(response.message).length + ' characters</td></tr>';
$('#log').append(snippet);
fixClasses();
$('div.tester').scrollTo('#log tr:last', 800);
}}

);
}
}
11 changes: 11 additions & 0 deletions apps/httptester/static/scripts/jquery.scrollTo-min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

48 changes: 48 additions & 0 deletions apps/httptester/templates/http/ajaxified.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
{% extends "layout.html" %}
{% block title %}Web Message Tester{% endblock %}
{% block javascripts %}
<script type="text/javascript" src="/static/http/scripts/jquery.scrollTo-min.js"></script>
<script type="text/javascript" src="/static/http/scripts/httpclient.js"></script>
{% endblock %}
{% block content %}
<style>
/* incoming/outgoing indicator [raq/laq]uo */
div.tester {
height: 14em;
overflow-y: scroll;
}
.tester table td.dir {
font-weight: bold;
}

/* colorize cells to indicate direction */
.tester tr.in td.dir { color: #f00; }
.tester tr.in { background: #fff8ff; }
.tester tr.out td.dir { color: #0f0; }
.tester tr.out { background: #f8ffff; }

.tester tr td.phone { color: #bbb; font-size: 70%; width: 8em; float: right; border-top: 0px;}
.tester tr td.dir { border-top: 0px; }
.tester tr td.info { color: #bbb; font-size: 70%; width: 8em; float: left;}
.tester tr td.msg { font-size: 90%; float: left; width: 65em;}

#form_wrapper { margin-top: 1em; margin-left: 10em}
label,input { display:block;}
input { margin-bottom: 1em; width:25em; }
#message { height: 5em; }
</style>
<h2>Message Tester</h2>
<div class="tester">
<table>
<tbody id="log">
</tbody>
</table>
</div>
<div id="form_wrapper">
<form id="form" name="form">
<label for="phone">Phone Number: <input type="text" id="phone" name="phone" value="{{number}}" /></label>
<label for="message">Message: <input type="text" id="message" name="message" /></label>
<input type="submit" id="submit" name="submit" value="Send" />
</form>
</div>
{% endblock %}
Loading

0 comments on commit a06983c

Please sign in to comment.