From 7842288a6320efb63da84e431eeb8d9bdc2c64a0 Mon Sep 17 00:00:00 2001 From: Sanj Date: Tue, 8 May 2012 21:41:50 +0530 Subject: [PATCH 01/21] mumbaitrains + apiviews minor optimization --- chaloBEST/mumbai/apiviews.py | 4 +-- chaloBEST/mumbaitrains/__init__.py | 0 chaloBEST/mumbaitrains/models.py | 32 ++++++++++++++++++ chaloBEST/mumbaitrains/parse.py | 52 ++++++++++++++++++++++++++++++ chaloBEST/mumbaitrains/tests.py | 16 +++++++++ chaloBEST/mumbaitrains/views.py | 1 + chaloBEST/settings.py | 3 ++ 7 files changed, 106 insertions(+), 2 deletions(-) create mode 100644 chaloBEST/mumbaitrains/__init__.py create mode 100644 chaloBEST/mumbaitrains/models.py create mode 100644 chaloBEST/mumbaitrains/parse.py create mode 100644 chaloBEST/mumbaitrains/tests.py create mode 100644 chaloBEST/mumbaitrains/views.py diff --git a/chaloBEST/mumbai/apiviews.py b/chaloBEST/mumbai/apiviews.py index c7935d4..0016866 100644 --- a/chaloBEST/mumbai/apiviews.py +++ b/chaloBEST/mumbai/apiviews.py @@ -67,9 +67,9 @@ def areas(request): def stops(request): q = request.GET.get("q", "") if q != '': - qset = Stop.objects.find_approximate(q, TRIGRAM_THRESHOLD).select_related() + qset = Stop.objects.find_approximate(q, TRIGRAM_THRESHOLD).select_related('road', 'area') else: - qset = Stop.objects.all().select_related() + qset = Stop.objects.all().select_related('road', 'area') srid = int(request.GET.get("srid", 4326)) return render_to_json_response({ 'type': 'FeatureCollection', diff --git a/chaloBEST/mumbaitrains/__init__.py b/chaloBEST/mumbaitrains/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/chaloBEST/mumbaitrains/models.py b/chaloBEST/mumbaitrains/models.py new file mode 100644 index 0000000..395972e --- /dev/null +++ b/chaloBEST/mumbaitrains/models.py @@ -0,0 +1,32 @@ +from django.contrib.gis.db import models + + +LINE_CHOICES = ( + ('Western', 'Western'), + ('Central', 'Central'), + ('Harbour', 'Harbour'), +) + +class Train(models.Model): + number = models.CharField(max_length=128) + line = models.CharField(max_length=128, choices=LINE_CHOICES, db_index=True) + stations = models.ManyToManyField("Station", through='TrainStation') + + def __unicode__(self): + return self.number + +class Station(models.Model): + name = models.CharField(max_length=128) + point = models.PointField(null=True, blank=True) +# line = models.CharField(choices=LINE_CHOICES, db_index=True) + + def __unicode__(self): + return self.name + +class TrainStation(models.Model): + train = models.ForeignKey(Train) + station = models.ForeignKey(Station) + serial = models.IntegerField() + time = models.TimeField() + +# Create your models here. diff --git a/chaloBEST/mumbaitrains/parse.py b/chaloBEST/mumbaitrains/parse.py new file mode 100644 index 0000000..dca41b7 --- /dev/null +++ b/chaloBEST/mumbaitrains/parse.py @@ -0,0 +1,52 @@ +from pyquery import PyQuery as pq +from models import * +import datetime + +BASE_URL = 'http://mumbailifeline.com/' + +''' +eg.: +>>>parseURL('http://mumbailifeline.com/timetable.php?sel_route=central&sfrom=Mumbai_CST&sto=Masjid&time1=4:00%20am&time2=11:59%20PM', Central') +''' +def parseURL(url, line): + d = pq(url=url) + table = d('#gradient-style') + trs = table.find('tr') + for i in range(1,len(trs)): + thisTr = trs[i] + td = thisTr.getchildren()[0] + a = td.find('a') + trainNo = a.text.strip() + print "Saving %s ... " % trainNo + trainURL = BASE_URL + a.get('href').strip() + saveTrain(trainURL, trainNo, line) + + +def saveTrain(url, no, line): + train, created = Train.objects.get_or_create(number=no, line=line) + if not created: + print "Train no %s already exists in db, skipping" % no + return + train.save() + d = pq(url=url) + table = d.find('table')[3] + for tr in table.iterfind('tr'): + children = tr.getchildren() + serial = 0 + if len(tr.findall('td')) > 0: + td0 = children[0] + a = td0.find('a') + stationName = a.text.strip() + station, created = Station.objects.get_or_create(name=stationName) + timeString = children[1].find('strong').text + hour = int(timeString.split(":")[0].strip()) - 1 + mins = int(timeString.split(":")[1][0:2]) + ampm = timeString[-2:] + if ampm == 'pm': + hour = hour + 12 + stationTime = datetime.time(hour,mins) + st = TrainStation(train=train, station=station, time=stationTime, serial=serial) + st.save() + serial += 1 + print "Saved %s" % no + diff --git a/chaloBEST/mumbaitrains/tests.py b/chaloBEST/mumbaitrains/tests.py new file mode 100644 index 0000000..501deb7 --- /dev/null +++ b/chaloBEST/mumbaitrains/tests.py @@ -0,0 +1,16 @@ +""" +This file demonstrates writing tests using the unittest module. These will pass +when you run "manage.py test". + +Replace this with more appropriate tests for your application. +""" + +from django.test import TestCase + + +class SimpleTest(TestCase): + def test_basic_addition(self): + """ + Tests that 1 + 1 always equals 2. + """ + self.assertEqual(1 + 1, 2) diff --git a/chaloBEST/mumbaitrains/views.py b/chaloBEST/mumbaitrains/views.py new file mode 100644 index 0000000..60f00ef --- /dev/null +++ b/chaloBEST/mumbaitrains/views.py @@ -0,0 +1 @@ +# Create your views here. diff --git a/chaloBEST/settings.py b/chaloBEST/settings.py index 53a0719..a9692b7 100644 --- a/chaloBEST/settings.py +++ b/chaloBEST/settings.py @@ -98,6 +98,7 @@ MIDDLEWARE_CLASSES = ( 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', + 'debug_toolbar.middleware.DebugToolbarMiddleware' ) ROOT_URLCONF = 'chaloBEST.urls' @@ -120,7 +121,9 @@ INSTALLED_APPS = ( # Uncomment the next line to enable admin documentation: 'django.contrib.gis', 'django_extensions', + 'debug_toolbar', 'mumbai', + 'mumbaitrains', # 'django.contrib.admindocs', ) From bb0f93d4c20d82bdd28565fee0a34da96c209071 Mon Sep 17 00:00:00 2001 From: Sanj Date: Tue, 8 May 2012 21:55:47 +0530 Subject: [PATCH 02/21] silly, initialize serial outside of loop --- chaloBEST/mumbaitrains/parse.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chaloBEST/mumbaitrains/parse.py b/chaloBEST/mumbaitrains/parse.py index dca41b7..96729f7 100644 --- a/chaloBEST/mumbaitrains/parse.py +++ b/chaloBEST/mumbaitrains/parse.py @@ -30,9 +30,9 @@ def saveTrain(url, no, line): train.save() d = pq(url=url) table = d.find('table')[3] + serial = 0 for tr in table.iterfind('tr'): children = tr.getchildren() - serial = 0 if len(tr.findall('td')) > 0: td0 = children[0] a = td0.find('a') From 32592cbfa44548eea2d7ad8d7f1e9b055cc1b504 Mon Sep 17 00:00:00 2001 From: Subhodip Biswas Date: Thu, 10 May 2012 16:16:27 +0530 Subject: [PATCH 03/21] Stop editor form field visible on click --- chaloBEST/static/js/buseditor.js | 229 +++++++++++++++++-------------- 1 file changed, 126 insertions(+), 103 deletions(-) diff --git a/chaloBEST/static/js/buseditor.js b/chaloBEST/static/js/buseditor.js index b6166db..70bef40 100644 --- a/chaloBEST/static/js/buseditor.js +++ b/chaloBEST/static/js/buseditor.js @@ -1,11 +1,14 @@ (function($) { - var API_BASE = 'http://chalobest.in/1.0/'; + var API_BASE = 'http://localhost:8000/1.0/'; console.log(API_BASE); var clickedName = 'stops'; var searchQuery = 'None'; var url1 = API_BASE + clickedName + '/' + '?q='; var url2 = API_BASE + clickedName + '/'; - var Features = Backbone.Model.extend({}); + var Features = Backbone.Model.extend({ + + + }); var apiCollection = Backbone.Collection.extend({ model: Features, @@ -15,126 +18,146 @@ } }); + var apiView = Backbone.View.extend({ - //el: '#sideBar', - events: { - "click a": "stopDetails" - }, + //el: '#content', + events: { + "click a": "clicked" + }, initialize: function() { - //this.render(); - _.bindAll(this, "render"); - this.collection.bind("all", this.render); + //this.render(); + _.bindAll(this, "render", "clicked"); + this.collection.bind("all", this.render, this.clicked); //apiView.prototype.initialize.call(this); }, render: function() { //$(this.el).html(this.counter = this.collection.length); - console.log(this.collection.length); - //console.log(this.el); - this.collection.each( function(model){ - $('#sideBar').append('
  • ' + model.get('properties').official_name + "
  • "); - //console.log(model.cid); + //console.log(this.collection.length); + //console.log(this.el); + this.collection.each(function(model) { + $('#sideBar').append('
  • ' + model.get('properties').official_name + "
  • "); + //console.log(model.cid); + }); - }); - - return this; - - }, - clicked: function(e) { - //e.preventDefaults(); - //var name1 = this.model.get('properties').official_name; - console.log(e); - //alert("you clicked me"+ e.target.innerHTML); - - - }, + return this; + + }, + clicked: function(e) { + //e.preventDefaults(); + //var name1 = this.model.get('properties').official_name; + + //console.log(e); + //alert("you clicked me"+ e.target.innerHTML); + events.trigger('stopdetailsEvent', e); + //return this; + }, + + //close: function() { + // $(this.el).unbind(); + // $(this.el).remove(); + //} + + + }); +var stopView = Backbone.View.extend({ + el: '#content', + initialize: function() { + _.bindAll(this, "stopDetails"); + this.collection.bind("stopdetailsEvent", this.stopDetails); + + }, + stopDetails: function(e) { - var cid = $(e.target).attr('id'); - //this.trigger - //console.log(cid); - this.values= this.collection.getByCid(cid); - //this.trigger('new-stage', this.collection.get) - this.stopName = e.target.innerHTML; - //var test = this.collection.where({official_name: this.stopName}); - console.log(this.values.get('properties').road); - $('#sLug').append(this.values.get('properties').slug); - $('#rOads').append(this.values.get('properties').road); - $('#rOutes').append(this.values.get('properties').routes); - $('#dIrection').append(this.values.get('properties').direction); - //console.log(e.target); - $('#dIsplayName').append(this.values.get('properties').official_name); - $('#mArathiName').append(this.values.get('properties').name_mr); - $('#aLtName').append(this.values.get('properties').alternative_names); - }, - close:function () { - $(this.el).unbind(); - $(this.el).remove(); - } - + //console.log(e); + //alert("you clicked me"+ e.target.innerHTML); + var cid = $(e.target).attr('id'); + //this.trigger + //console.log(cid); + this.values = this.collection.getByCid(cid); + //this.trigger('new-stage', this.collection.get) + this.stopName = e.target.innerHTML; + //var test = this.collection.where({official_name: this.stopName}); + //console.log(this.values.get('properties').road); + //console.log(this.el); + $(this.el).find('input#sLug').val(this.values.get('properties').slug); + //$('#sLug').attr('id', 'sLug').value(this.values.get('properties').slug); + $(this.el).find('input#rOads').val(this.values.get('properties').road); + $(this.el).find('textarea#rOutes').html(this.values.get('properties').routes); + $(this.el).find('input#dIrection').val(this.values.get('properties').direction); + //console.log(e.target); + $(this.el).find('input#dIsplayName').val(this.values.get('properties').official_name); + $(this.el).find('input#mArathiName').val(this.values.get('properties').name_mr); + $(this.el).find('input#aLtName').val(this.values.get('properties').alternative_names); + + }, + }); + - }), events = new apiCollection(); - $(function() { + $(function() { + stopDetailsView = new stopView({ + el: $("#content"), + collection: events + }); eventView = new apiView({ - el: $("#sideBar"), - //el: $('#slug'), - //el:$('#displayName'), + el: $("#sideBar"), + //el: $('#slug'), + //el:$('#displayName'), collection: events }); - - events.fetch({ - success: function() { - console.log(events.length); - //console.log(this.official_name); - //alert(); + + + events.fetch({ + success: function() { + console.log(events.length); + //console.log(this.official_name); + //alert(); + } + }); + }); + + + + var Map = Backbone.Model.extend({}); + + + var MapView = Backbone.View.extend({ + el: '#mapCol', + + initialize: function() { + _.bindAll(this, 'initMap'); + this.initMap(); + + }, + + initMap: function() { + // Initialize Basic Openlayers; + var center = new OpenLayers.LonLat(8110203.9998955, 2170000.4068373); + //alert("you are here"); + map = new OpenLayers.Map(this.el, { + projection: new OpenLayers.Projection("EPSG:900913"), + displayProjection: new OpenLayers.Projection("EPSG:4326") + }); + //alert(this.el); + var layers = []; + layers[0] = new OpenLayers.Layer.OSM(); //some more layer will go here + //$(this.el).html(map); + map.addLayers(layers); + map.setCenter(center, 12); } }); -}); + $(function() { + var map_view = new MapView(); + //alert("I am here" + this.el); + }); - - - var Map = Backbone.Model.extend({}); - - - var MapView = Backbone.View.extend({ - el: '#mapCol', - - initialize: function() { - _.bindAll(this, 'initMap'); - this.initMap(); - - }, - - initMap: function() { - // Initialize Basic Openlayers; - var center = new OpenLayers.LonLat(8110203.9998955, 2170000.4068373); - //alert("you are here"); - map = new OpenLayers.Map(this.el, { - projection: new OpenLayers.Projection("EPSG:900913"), - displayProjection: new OpenLayers.Projection("EPSG:4326") - }); - //alert(this.el); - var layers = []; - layers[0] = new OpenLayers.Layer.OSM(); //some more layer will go here - //$(this.el).html(map); - map.addLayers(layers); - map.setCenter(center, 12); - - } - }); - $(function() { - var map_view = new MapView(); - //alert("I am here" + this.el); - }); - - //var router = Backbone.Router.extend({ - //routes:{ - - //}) - - })(jQuery); + //var router = Backbone.Router.extend({ + //routes:{ + //}) +})(jQuery); From 97a17f64a21c518fd3fabaa27d889490f9a9bc08 Mon Sep 17 00:00:00 2001 From: Subhodip Biswas Date: Thu, 10 May 2012 16:21:34 +0530 Subject: [PATCH 04/21] Stop editor form field visible on click --- chaloBEST/static/js/buseditor.js | 4 ++-- chaloBEST/templates/buseditor.html | 11 +++++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/chaloBEST/static/js/buseditor.js b/chaloBEST/static/js/buseditor.js index 70bef40..eedc741 100644 --- a/chaloBEST/static/js/buseditor.js +++ b/chaloBEST/static/js/buseditor.js @@ -1,6 +1,6 @@ (function($) { - var API_BASE = 'http://localhost:8000/1.0/'; - console.log(API_BASE); + var API_BASE = 'http://chalobest.in/1.0/'; + //console.log(API_BASE); var clickedName = 'stops'; var searchQuery = 'None'; var url1 = API_BASE + clickedName + '/' + '?q='; diff --git a/chaloBEST/templates/buseditor.html b/chaloBEST/templates/buseditor.html index 25ab622..f86b075 100644 --- a/chaloBEST/templates/buseditor.html +++ b/chaloBEST/templates/buseditor.html @@ -6,9 +6,10 @@ {% block head %} + - + @@ -24,7 +25,7 @@ - + @@ -37,14 +38,16 @@ This BEST Bus stop editor allows you to edit Stops and Areas.

    - + - + + +

    From 7793fbb380038f5a61639766d4e6da440a14f0b6 Mon Sep 17 00:00:00 2001 From: Sanj Date: Fri, 11 May 2012 02:59:05 +0530 Subject: [PATCH 05/21] edit fabfile --- fabfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fabfile.py b/fabfile.py index 4efca94..bbe31a6 100644 --- a/fabfile.py +++ b/fabfile.py @@ -42,5 +42,5 @@ def setup(): def deploy(): bzr_push() bzr_update() - virtual_run('python %(project_name)s/manage.py syncdb;python %(project_name)s/manage.py migrate'%env) +# virtual_run('python %(project_name)s/manage.py syncdb;python %(project_name)s/manage.py migrate'%env) run('touch %(project_root)s/wsgi/django.wsgi'%env) From 252b947758d3762297b70a83b86b0af7eb6747b2 Mon Sep 17 00:00:00 2001 From: Sanj Date: Tue, 15 May 2012 18:33:43 +0530 Subject: [PATCH 06/21] add css / templates for smsBEST --- chaloBEST/mumbai/models.py | 11 +- chaloBEST/mumbai/views.py | 10 + chaloBEST/templates/base.html | 4 + chaloBEST/templates/route.html | 90 ++++- chaloBEST/urls.py | 5 + smsBEST/settings.py | 13 +- .../rapidsms/icons/silk/accept--dull.png | Bin 0 -> 691 bytes smsBEST/static/rapidsms/icons/silk/accept.png | Bin 0 -> 781 bytes smsBEST/static/rapidsms/icons/silk/add.png | Bin 0 -> 733 bytes .../static/rapidsms/icons/silk/building.png | Bin 0 -> 556 bytes .../rapidsms/icons/silk/bullet_white.png | Bin 0 -> 201 bytes .../static/rapidsms/icons/silk/decline.png | Bin 0 -> 781 bytes smsBEST/static/rapidsms/icons/silk/delete.png | Bin 0 -> 715 bytes smsBEST/static/rapidsms/icons/silk/email.png | Bin 0 -> 641 bytes .../rapidsms/icons/silk/email_error.png | Bin 0 -> 792 bytes .../static/rapidsms/icons/silk/email_go.png | Bin 0 -> 754 bytes .../static/rapidsms/icons/silk/email_open.png | Bin 0 -> 783 bytes .../rapidsms/icons/silk/exclamation.png | Bin 0 -> 701 bytes smsBEST/static/rapidsms/icons/silk/help.png | Bin 0 -> 786 bytes .../static/rapidsms/icons/silk/magnifier.png | Bin 0 -> 615 bytes .../rapidsms/icons/silk/package_add.png | Bin 0 -> 899 bytes .../static/rapidsms/icons/silk/package_go.png | Bin 0 -> 898 bytes smsBEST/static/rapidsms/icons/silk/phone.png | Bin 0 -> 488 bytes smsBEST/static/rapidsms/icons/silk/reload.png | Bin 0 -> 643 bytes .../rapidsms/icons/silk/resultset_first.png | Bin 0 -> 836 bytes .../rapidsms/icons/silk/resultset_last.png | Bin 0 -> 827 bytes .../rapidsms/icons/silk/resultset_next.png | Bin 0 -> 600 bytes .../icons/silk/resultset_previous.png | Bin 0 -> 597 bytes .../icons/silk/section_collapsed--bright.png | Bin 0 -> 253 bytes .../icons/silk/section_expanded--bright.png | Bin 0 -> 271 bytes .../rapidsms/icons/silk/sort_ascending.png | Bin 0 -> 506 bytes .../rapidsms/icons/silk/sort_descending.png | Bin 0 -> 509 bytes smsBEST/static/rapidsms/icons/silk/user.png | Bin 0 -> 741 bytes .../rapidsms/images/bessms_header07d.png | Bin 0 -> 26794 bytes .../rapidsms/images/bestsms_header_final.jpg | Bin 0 -> 18042 bytes .../rapidsms/images/big-arrows/down.png | Bin 0 -> 876 bytes .../rapidsms/images/big-arrows/error.png | Bin 0 -> 774 bytes .../rapidsms/images/big-arrows/left.png | Bin 0 -> 783 bytes .../rapidsms/images/big-arrows/right.png | Bin 0 -> 806 bytes .../rapidsms/images/big-arrows/source.xcf | Bin 0 -> 13574 bytes .../static/rapidsms/images/big-arrows/up.png | Bin 0 -> 737 bytes smsBEST/static/rapidsms/images/body-bg.png | Bin 0 -> 9325 bytes .../rapidsms/images/h2-bg-collapsed.png | Bin 0 -> 825 bytes smsBEST/static/rapidsms/images/h2-bg.png | Bin 0 -> 1051 bytes smsBEST/static/rapidsms/images/h3-bg.png | Bin 0 -> 932 bytes smsBEST/static/rapidsms/images/header-bg.png | Bin 0 -> 929 bytes .../static/rapidsms/images/rapidsms-logo.png | Bin 0 -> 4587 bytes .../static/rapidsms/images/tab-bg-active.png | Bin 0 -> 142 bytes .../static/rapidsms/images/tab-bg-hover.png | Bin 0 -> 101 bytes smsBEST/static/rapidsms/images/tab-bg.png | Bin 0 -> 228 bytes .../rapidsms/images/table-footer-bg.png | Bin 0 -> 125 bytes .../images/table-header-bg-highlight.png | Bin 0 -> 226 bytes .../rapidsms/images/table-header-bg.png | Bin 0 -> 535 bytes .../rapidsms/images/table-row-bg-active.png | Bin 0 -> 179 bytes .../static/rapidsms/images/unicef-logo.png | Bin 0 -> 3665 bytes .../static/rapidsms/javascripts/collapse.js | 12 + .../javascripts/global/rs-module-help.js | 29 ++ .../javascripts/global/rs-pagination.js | 63 ++++ .../rapidsms/javascripts/jquery-1.3.2.min.js | 19 ++ smsBEST/static/rapidsms/stylesheets/forms.css | 146 ++++++++ smsBEST/static/rapidsms/stylesheets/icons.css | 25 ++ .../static/rapidsms/stylesheets/layout.css | 318 ++++++++++++++++++ .../static/rapidsms/stylesheets/modules.css | 137 ++++++++ .../static/rapidsms/stylesheets/splits.css | 52 +++ .../static/rapidsms/stylesheets/tables.css | 237 +++++++++++++ smsBEST/templates/dashboard.html | 195 +++++++++++ smsBEST/templates/layout.html | 89 +++++ smsBEST/urls.py | 16 +- 68 files changed, 1458 insertions(+), 13 deletions(-) create mode 100755 smsBEST/static/rapidsms/icons/silk/accept--dull.png create mode 100755 smsBEST/static/rapidsms/icons/silk/accept.png create mode 100755 smsBEST/static/rapidsms/icons/silk/add.png create mode 100755 smsBEST/static/rapidsms/icons/silk/building.png create mode 100755 smsBEST/static/rapidsms/icons/silk/bullet_white.png create mode 100755 smsBEST/static/rapidsms/icons/silk/decline.png create mode 100755 smsBEST/static/rapidsms/icons/silk/delete.png create mode 100755 smsBEST/static/rapidsms/icons/silk/email.png create mode 100755 smsBEST/static/rapidsms/icons/silk/email_error.png create mode 100755 smsBEST/static/rapidsms/icons/silk/email_go.png create mode 100755 smsBEST/static/rapidsms/icons/silk/email_open.png create mode 100755 smsBEST/static/rapidsms/icons/silk/exclamation.png create mode 100755 smsBEST/static/rapidsms/icons/silk/help.png create mode 100755 smsBEST/static/rapidsms/icons/silk/magnifier.png create mode 100755 smsBEST/static/rapidsms/icons/silk/package_add.png create mode 100755 smsBEST/static/rapidsms/icons/silk/package_go.png create mode 100755 smsBEST/static/rapidsms/icons/silk/phone.png create mode 100755 smsBEST/static/rapidsms/icons/silk/reload.png create mode 100755 smsBEST/static/rapidsms/icons/silk/resultset_first.png create mode 100755 smsBEST/static/rapidsms/icons/silk/resultset_last.png create mode 100755 smsBEST/static/rapidsms/icons/silk/resultset_next.png create mode 100755 smsBEST/static/rapidsms/icons/silk/resultset_previous.png create mode 100755 smsBEST/static/rapidsms/icons/silk/section_collapsed--bright.png create mode 100755 smsBEST/static/rapidsms/icons/silk/section_expanded--bright.png create mode 100755 smsBEST/static/rapidsms/icons/silk/sort_ascending.png create mode 100755 smsBEST/static/rapidsms/icons/silk/sort_descending.png create mode 100755 smsBEST/static/rapidsms/icons/silk/user.png create mode 100755 smsBEST/static/rapidsms/images/bessms_header07d.png create mode 100755 smsBEST/static/rapidsms/images/bestsms_header_final.jpg create mode 100755 smsBEST/static/rapidsms/images/big-arrows/down.png create mode 100755 smsBEST/static/rapidsms/images/big-arrows/error.png create mode 100755 smsBEST/static/rapidsms/images/big-arrows/left.png create mode 100755 smsBEST/static/rapidsms/images/big-arrows/right.png create mode 100755 smsBEST/static/rapidsms/images/big-arrows/source.xcf create mode 100755 smsBEST/static/rapidsms/images/big-arrows/up.png create mode 100755 smsBEST/static/rapidsms/images/body-bg.png create mode 100755 smsBEST/static/rapidsms/images/h2-bg-collapsed.png create mode 100755 smsBEST/static/rapidsms/images/h2-bg.png create mode 100755 smsBEST/static/rapidsms/images/h3-bg.png create mode 100755 smsBEST/static/rapidsms/images/header-bg.png create mode 100755 smsBEST/static/rapidsms/images/rapidsms-logo.png create mode 100755 smsBEST/static/rapidsms/images/tab-bg-active.png create mode 100755 smsBEST/static/rapidsms/images/tab-bg-hover.png create mode 100755 smsBEST/static/rapidsms/images/tab-bg.png create mode 100755 smsBEST/static/rapidsms/images/table-footer-bg.png create mode 100755 smsBEST/static/rapidsms/images/table-header-bg-highlight.png create mode 100755 smsBEST/static/rapidsms/images/table-header-bg.png create mode 100755 smsBEST/static/rapidsms/images/table-row-bg-active.png create mode 100755 smsBEST/static/rapidsms/images/unicef-logo.png create mode 100755 smsBEST/static/rapidsms/javascripts/collapse.js create mode 100755 smsBEST/static/rapidsms/javascripts/global/rs-module-help.js create mode 100755 smsBEST/static/rapidsms/javascripts/global/rs-pagination.js create mode 100755 smsBEST/static/rapidsms/javascripts/jquery-1.3.2.min.js create mode 100755 smsBEST/static/rapidsms/stylesheets/forms.css create mode 100755 smsBEST/static/rapidsms/stylesheets/icons.css create mode 100755 smsBEST/static/rapidsms/stylesheets/layout.css create mode 100755 smsBEST/static/rapidsms/stylesheets/modules.css create mode 100755 smsBEST/static/rapidsms/stylesheets/splits.css create mode 100755 smsBEST/static/rapidsms/stylesheets/tables.css create mode 100755 smsBEST/templates/dashboard.html create mode 100755 smsBEST/templates/layout.html diff --git a/chaloBEST/mumbai/models.py b/chaloBEST/mumbai/models.py index b575f9a..74c4462 100644 --- a/chaloBEST/mumbai/models.py +++ b/chaloBEST/mumbai/models.py @@ -94,7 +94,8 @@ class Area(models.Model): 'slug': self.slug, 'name': self.name, 'name_mr': self.name_mr, - 'display_name': self.display_name + 'display_name': self.display_name, + 'url': self.get_absolute_url() #FIXME add alt_names and geometry } @@ -158,7 +159,8 @@ class Stop(models.Model): 'name_mr': self.name_mr, 'direction': self.dbdirection, 'routes': ", ".join([r.alias for r in routes]), - 'alternative_names': ", ".join([a.name for a in self.alt_names.all().filter(typ='common')]) + 'alternative_names': ", ".join([a.name for a in self.alt_names.all().filter(typ='common')]), + 'url': self.get_absolute_url() } def get_geojson(self, srid=4326): @@ -213,7 +215,7 @@ class Stop(models.Model): has_point.boolean = True def get_absolute_url(self): - return "/admin/mumbai/stop/%d/" % self.id + return "/stop/%s" % self.slug class Route(models.Model): @@ -242,7 +244,8 @@ class Route(models.Model): 'code': self.code, 'alias': self.alias, 'slug': self.slug, - 'distance': str(self.distance) + 'distance': str(self.distance), + 'url': self.get_absolute_url() } class RouteDetail(models.Model): diff --git a/chaloBEST/mumbai/views.py b/chaloBEST/mumbai/views.py index fbb0bc9..2ee5836 100644 --- a/chaloBEST/mumbai/views.py +++ b/chaloBEST/mumbai/views.py @@ -38,14 +38,24 @@ def area(request, name): return render_to_response("area.html", context) +def stop(request, slug): + stop = get_object_or_404(Stop, slug=slug) + context = RequestContext(request, { + 'stop': stop + }) + return render_to_response("stop.html", context) + + def editstops(request): context = RequestContext(request, {}) return render_to_response("editstops.html", context) + def buseditor(request): context = RequestContext(request, {}) return render_to_response("buseditor.html", context) + def stats(request): total_stops_left = Stop.objects.filter(point=None).count() total_stops = Stop.objects.count() diff --git a/chaloBEST/templates/base.html b/chaloBEST/templates/base.html index a6eca7e..2fa39ea 100644 --- a/chaloBEST/templates/base.html +++ b/chaloBEST/templates/base.html @@ -3,6 +3,10 @@ + + ChaloBEST: {% block title %} {% endblock %} {% block head %} diff --git a/chaloBEST/templates/route.html b/chaloBEST/templates/route.html index 89a207b..82132ae 100644 --- a/chaloBEST/templates/route.html +++ b/chaloBEST/templates/route.html @@ -15,19 +15,107 @@ a:hover { color: #00f; } + +#map { + float: left; + width: 600px; + height: 400px; +} + + {% endblock %} {% block body %}

    +
    + +
    {% endblock %} diff --git a/chaloBEST/urls.py b/chaloBEST/urls.py index bff9953..ab4f134 100644 --- a/chaloBEST/urls.py +++ b/chaloBEST/urls.py @@ -4,6 +4,7 @@ from os.path import join # Uncomment the next two lines to enable the admin: from django.contrib import admin admin.autodiscover() +from feeds import RouteFeed #import ox.django.api.urls #import mumbai @@ -16,8 +17,12 @@ urlpatterns = patterns('', url(r'^static/(?P.*)$','django.views.static.serve', {'document_root':'./static'}), (r'^routes/$', 'mumbai.views.routes'), (r'^route/(?P[a-zA-Z0-9\s\-]*?)/$', 'mumbai.views.route'), + (r'^route/(?P[a-zA-Z0-9\s\-]*?)/georss/$', RouteFeed()), (r'^areas/$', 'mumbai.views.areas'), (r'^area/(?P.*?)/$', 'mumbai.views.area'), +# (r'^area/(?P.*?)/georss/$', AreaFeed()), + (r'^stop/(?P.*?)/$', 'mumbai.views.stop'), +# (r'^stop/(?P.*?)/georss/$', StopFeed()), (r'^buseditor/$', 'mumbai.views.buseditor'), (r'^editstops/$', 'mumbai.views.editstops'), (r'^1.0/', include('mumbai.apiurls')), diff --git a/smsBEST/settings.py b/smsBEST/settings.py index fc14793..b6c3d8a 100644 --- a/smsBEST/settings.py +++ b/smsBEST/settings.py @@ -5,7 +5,10 @@ # -------------------------------------------------------------------- # # MAIN CONFIGURATION # # -------------------------------------------------------------------- # +import os +from os.path import join +PROJECT_PATH = os.path.dirname(__file__) # you should configure your database here before doing any real work. # see: http://docs.djangoproject.com/en/dev/ref/settings/#databases @@ -16,7 +19,8 @@ DATABASES = { } } - +MEDIA_ROOT = join(PROJECT_PATH, 'static') +LOCAL_DEVELOPMENT = True # the rapidsms backend configuration is designed to resemble django's # database configuration, as a nested dict of (name, configuration). # @@ -162,6 +166,13 @@ TEMPLATE_LOADERS = ( 'django.template.loaders.eggs.Loader' ) +TEMPLATE_DIRS = ( + join(PROJECT_PATH, "templates"), + # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". + # Always use forward slashes, even on Windows. + # Don't forget to use absolute paths, not relative paths. +) + # -------------------------------------------------------------------- # # HERE BE DRAGONS! # # these settings are pure hackery, and will go away soon # diff --git a/smsBEST/static/rapidsms/icons/silk/accept--dull.png b/smsBEST/static/rapidsms/icons/silk/accept--dull.png new file mode 100755 index 0000000000000000000000000000000000000000..d76ace75eb4ffe4e6698563374fc8b8939963d7d GIT binary patch literal 691 zcmV;k0!;mhP)Px%ZAnByR5;76lg~?HVHAcRHN46#C0B(wnuQ{fL92+M*0q|&{0Z&c_x}WOsZ}sA ziwLC_L9~d9QVP7$2tvrs{6T(x_xrwC3^~mVt!54!I2?E%UJmbpf2_cti@m+QN#FMu zlv0aQ%5kL>#+aVg`cf%%T`HBHKLj|AQ;n{+yjZQCK&bw91Ftkh0VPX|E&rBpE* zjZVCY--PcwpU>mEE}2Y*WHLD+r7Qvj0es&tW-=LGUS9BhAEgvpYm6~yttl3Z8G=HlXlR;z_=+Xx|I z0Am0`2#hfpV+e=CWV2Z!kqDcco7lFE)|yJCLbKV#vMd6D07@xF4wO=zZnsN39_RJ- zm2$a^5CYq_F~(3XmuWN_03;F#JkLXG-5CL-lvmYil~^nWK&R8;@bHjkvq_~=q0wlJ z93~P8&d<*QuHN6^s$Q>mUDsu9Zf*oQIy&O<@$qM1LLuho=c(0d+}zxBrIc5r9Gsk- z43?Ld+jn<&xp+Jt%H?u|LLr0@jE#*kH8n*#ou*c+ad2=TgTdfe$8o;@73ET?R2UA2 z8?&>s<4a3R*tR`#b9Q#d?d@$Z7z}=M9H;u>Gi_~cO=_)wd!|4j&;u@&QrG+Y`_KH( Z`T=u;VxLWdP)4-QibtN)VXQDpczE`xXAkUjh%RI>;okxb7K@0kpyQ1k_Y(|Oe7$m(^ zNYX>mI||sUbmn+c3<&FnE=4u#()KBS^SH8e)Qs5i!#lY=$-1gbH6VluzU=m=EP78&5vQ z-?+fFP-G2l&l_QzYealK$;1Rl?FkzXR&Jv@fBPNjCr#AYRyJ7UJQ0v#?)7Ott=>3`#-pV!7>9}>Q1jL)H6h&gkP@3nI=+F3nA~M>u#(n* z8T!#8oEw&-mED4!h4s!N@Jo3S7N&Q6%6l3}nlcd~X@>;uelvPsSkXIgg~e+^T1zSf z3SNj(5%jK~i8@b;C9VHk(~TedF+gQSL8D5xnVSSWAVY>J9b+m>@{iq7_KE}go~11+5s4;8hc+i0Xa zI1j@EX5!S+Me6HNqKzU5YQwL;-W5$p%ZMKMeR<%zp69-~?<4?8|C8S?bklXr4v&Ov zb&06v2|-x?qB`90yn>Qi%Sh2^G4n)$ZdyvTPf9}1)_buUT7>`e2G&2VU@~Bb(o+Mz zi4)>IxlSY${Dj4k={-9RzU^W5g9|2V5RZ2ZulL9s2xQbZ@r6eP9Ra5u(s|C0Nj#&4>wTSkb?%#=9?@ z^oxDy-O@tyN{L@by(WWvQ3%CyEu8x{+#Jb4-h&K9Owi)2pgg+heWDyked|3R$$kL@A z#sp1v-r+=G4B8D6DqsDH0@7OztA7aT9qc1Py{()w`m``?Y0&gi2=ROcc-9+nU^I6< zT=e_Y=vSnG@?3Ue{BW5ONFttcE!R-R_W4O01|0-|K-YNXLo2`4Qv z`r1LxR6#yf3FB%T95gJnaKKivA~Z}S9A(ZxEDK}O3T04USJ P00000NkvXXu0mjf^IS-S literal 0 HcmV?d00001 diff --git a/smsBEST/static/rapidsms/icons/silk/building.png b/smsBEST/static/rapidsms/icons/silk/building.png new file mode 100755 index 0000000000000000000000000000000000000000..11a017cfaa73aef38f8f57db731dd0a7db835109 GIT binary patch literal 556 zcmV+{0@MA8P) zlTAwkQ51&X8OIL@qD-Qsuyhv$p|ucNxrho9Y}2|`xDEOTEecw+?FYDO86*-E5rS>n zv=AvFN@y{a*@rsg{b=qLr6CpRz~LV5-1D6GoVgdAbM)iS(J1e%9TO7RFz?{LbOt3dBco@bbZH_0OdOMw_$XmV%A>MsEcb`Yr*BlX@2gUVQP-&VZd< za>_O2!3tls`ejI^QczVDilWFhkw~CoyyJ1aXalrwqLnnQIvvPYZe=x1(-01a5s5@( zETH9D8Lj~r){d6fZGi3U)*z^IKH~J@tdy3AMUwEAiW;e6|7sTjUjW3U2TO;s**1U@ znlwz4-{}Q>zgCgCIR$evI2?{PBz>KRR(Ij;<3(IJKP7CpJp+2|*^>{$@+v3_xR>%u u#geUGuQH0)r!pqYfZJ_);(s2~f9wYukV^15?ld0&0000C#5QQ<|d}62BjvZR2H60wE-%M_H=O!(Kvthf+1gnf`Cilxr3SC zCq+y2HhAz(;&}R`x^q^&(wiOs&2u-u^*?dO$=Q}CfYva0y85}Sb4q9e0M-pfO8@`> literal 0 HcmV?d00001 diff --git a/smsBEST/static/rapidsms/icons/silk/decline.png b/smsBEST/static/rapidsms/icons/silk/decline.png new file mode 100755 index 0000000000000000000000000000000000000000..262e4db53e5094526a5ac60de1b4dd1b2e3c927d GIT binary patch literal 781 zcmV+o1M>WdP)u;A_#jbZMBLzl5FQ&7HuSGyue>CLq`{=3 zBtU9lV@OQcAX+JXK>?w~mQu>heRyXQYVfhrvzXj_=YGHQopWY@e+=o@gP_Av#VP9{ zp#5A{iWwL?w$#~5%yv7ZJPVLYLD>r?S z>S!8&?fea(iYcX|1^4fn%~u;iH$MS;AwZTP<>W&uFGu9fTZH@@$BdGJ8&h-6G$1fE zR4HsP7v5>Lnp&=bx?M<~q##iRnMMO7#=+$jP~U|8xp{2u1;dP!+ilbCO`Qr5;$D-r z(3*Xv9(3s)P+EcP<~A6Taj@?ZNcL7p)s0Y==TX$&j_lN_l``6^YBd0pXrH;E7HoYL ziC_TSoCm!n54yVR(ABm;vg8Az49)=J^PyJ zJy%^5q)QMEwod|nVO@+(z;e6$wCrT#vzUel`l=dScs?j@>tMWi2{E4!Od;Dp0gQ}C zR#w2RHt=HwI6MG3_=fn*3}Q|v=*~8HbYCRW!%$&EaLujuU_4!d*i0nMS%Z=HZfn7# z4kTPIh*@hEsc1rUWJJ4adGZv2#aSfeWSB~P;@pSyv8S_3fJTdQ3e83B4&|lkH9mAd>=K!WjZ`ivt8Im`*s7f;!$El0mXM^W z9U*p{iU0UBEkCC4}Mrzlg<+1Y8PEBfUp0jJpx4B>@E+cy3`^(Gw`Mf+2&yxZm<$to~Vpgvg&QKNR z_f#1(r6svZt%iF?s+n<8X?B&!h3g9Dbb8_=MX}!;HiQSAh`bp^WMl~Z-44teO7W_Y zV4thSL{h;rJY7!l3%5J4H1!tIzB`Dv+YxO(haWeausGZYkI8^hWj6mzo=L0{%;yxzh{5!Htr?51 zvG|W62MzC8BZ76hRpCyO2zOn<%e)K>NHge!-~)Ap33OdWw6hsLYbCxGNt0%wk_2z7 zfyYvXheSG)5HRK1VB~%mq7Dmurw#bi@hEcOr3&G1ZiF*$M=&9nB#VNf&Q^r$4G5kp zTURh&s)E0%5&hyVD}sp<72~zmAY`Y(9aqO6CXF%=zFHGzO-A&I(pE}v70YQxCPJ{Y z4L+?5-crdLn3ZRPEs!A4ehEY3ZRpL~w9>@aMN+{F4dI@v&>(QDHQum!mG~E^$OS8l z!7?%Uwib*ROP67Hw`ika)gX-(8Ia`-u_IEhxG7U<13kSsMW+$lbb2dUMm5p6pa}cjgA+U$^mJ^AjD?&bdi)8~y+Q002ovPDHLkV1g8IMc@Dc literal 0 HcmV?d00001 diff --git a/smsBEST/static/rapidsms/icons/silk/email.png b/smsBEST/static/rapidsms/icons/silk/email.png new file mode 100755 index 0000000000000000000000000000000000000000..7348aed77fe6a64c2210a202f12c6eccae7fcf24 GIT binary patch literal 641 zcmV-{0)G98P)Az`{eoOom?Tf*9)f$7n8&|1&5M4#i^32;+&E? zC3Q;bRFQN#y*%%=_V)Mfa<$xe^kB0TO;vJPkN*k(2v-CI7)OaWj?&eKPos(H4wGh_ zIC;6#q1B5SMap5{(Hc0~XO7OfqZ=x{kupu8-H&9azl`L1pTuu^Znm3EA)kCoG=JuwsyNLEtY83i->Z~j3y~F)`RA1k>zTES07po!kBVS2y#L{jCt|CMY&v{ zxmqM|`OA#P2{R&)OcQd}v0kt6_Dh#`Z$i5_;q|93je3Q^PcfR{TmBHRmr;rWahz~G z2x-&;d_O~HkmKXt5Cd#Bs?-+qj3zOiUdU24KowBIUPg(gPNmxqX)Fiia~V*$y;5L( zrGNmU;81MA$F2k%oeUXQ@}N%bXz=qOij$4IYk4W=jfhDxfCz{PGXe-#ge#VfYTyoj zh4JvDePrW{lf(Oux2xG;VZmlSvDU+Qf@i=O!B`MLglhttCUHDIKkc7gn-s{Jsef@w|XbT!@L zKqWCIT8+A(7Sx3z9}!4Pu(d7F()NAMIIl$mh8>gK+?nLgnRCyXOBiF=&l0fDCEXmG zO1fK=fkMUbY^kO|IUx!Li*G1rXYru4dEO2NVi`tlvyl0*xG05#{;n&-JwDA~#O)Gy zp_Bjjq?zlQDb_VBdhw2?3i+}b*G)Mkej}RiH|=KYV#o;^MY)fCsb9d zsU|OsN4*FKTk!a82BnG)znj1#sVFUsLkabxPk!I1k)<6rR_jd$gsWp3CfpLm!B_y3 zsXVd;6|1uoP{IT7MFtSAy@Rth*I@QnS)ry`u-WLkiCn3Iu66|{;z1la6h!*_9BM0* z{Ph5=@-syHFF{yNfEpSa|Bn$Hz+|?+`69m@R^azIIYol*12T?FuMz1z52!OpJxahE zsKZrEL0x&ntu#0QWkR*Ix~y>@k9Eo{8Whm#vABR1lv)~Yvjinr1J#!7Vpv?v?xE{w z`;|a0UsB7zvrDA!!ri2^HGa~ics!CzBobHC!F9M6c_^MfJ51b;DNsGT-LnItXArps z0g2@NX5wr7GudmHX6_GN4fPJ+>*$gBt0~^Ej_Ief7#!&Z5&eLC4(SIs@{H0mdjh0J zPi6ZrCt{+o3}&v|YVDdoQ9g>?w=bA~e*1~E*Mymx?w%PNsdJ5Z>vTu3e;IaWtm6;T WSyNB7T~0d>kmp9&fG9>#5EaEn(MD9Xvl47<{Rb2T3D!0$wpy4@P!Tnn zB0fxQ2!aPL_fZ@!=Wv9zmj8jnf5JO`<=MmZs@#@p z5O*{}9L5B6J+L7ORza<+9h)-B~<&cwIhUkd?cp4is-ziNrfY^u-7xdbFt=#%1534Oi8ajBBo}VZvCxd1 zTu*VtX+~P45)Om?dG5aS`PPW(%?lDPBwaz$6C^$8$_Q#plJTjpbgj;_rYi*?oK~m+ zDD`C->dkZKh0j6|Q^-0bJxIFHnHJOo$@r8{VNIUWU>31rp3@BVvYIZG2D0>Yuj2Y- zg?b?AObc>pK`oG+zkPsr3x_BTWXX8H*w}0@e;@>?SdsP&!-HMidhRn*4VkHi+<58} zTg6ae0~aSoNqRq(^;(g}0#Yiz)&q*YIg-f)mmeJA&3%nD3aJ$X-6L%1+fEQRIeTL* zS5K6|3cOaNtTtBowSZzzj!ZfM7L<|f+jtyp4ccf7mf6J$n}&ALkZlfLEYRoNvtG0Q zzJh|U~_Rdjkv}0kGt_?V}5$?sXN`N zTt|nOa)sx)IIf_-7XW**;!X9`USPjuUUsJrREk)6q*M9ZHEb zl2A!T3LBjrrTx74{FsUNcVA1zw%IWoiGNMw=s9P8>+qh!B*saR2}S literal 0 HcmV?d00001 diff --git a/smsBEST/static/rapidsms/icons/silk/email_open.png b/smsBEST/static/rapidsms/icons/silk/email_open.png new file mode 100755 index 0000000000000000000000000000000000000000..7b6f9813d41f1d95c8f1cf1495c2314dcf16d3fb GIT binary patch literal 783 zcmV+q1MvKbP)FGA|gUiBpPKsNC^f4AtjM-BOo6I z6r`2%Aq86cL2037X}jIFyW8#V&zXS`i5Q*a$xLSEecpE_F9(1-jh2z%g|>+>+9xA0 zkA`ml?cS-I4VJBEmYFboVFjV6ilGGo&n=#={}R-6x+aGgB1p&v)GVM86wScQ&nTXB zxV()Yx6hm^cssa#jvorBcDDqH1WO7Kif0)qmB@%>Gn58D97J7@zwm_MRj>bE`@}Bp zw=N%IUV^D*3FYq{D0}w<#cynQ*tSI0c9ar2tzlGk`gkVb2Lt-h!U1+kCK~*&K_&Eg zBa1QAcKdbiwZ-XEGCIUmmSv@bUpq<3R0cN(WOi1<+aaYj^vwovvBKizD$OfKf^3*t zR*wY-2^CREWpg+t!?!14)f;1Hg^#T$ZeGF0j);QBIfEujA4UQ4w zNg^VWy=WTlU;>5#6gAADc`ObgsZas9yG=GGSPAOrw~1)(ceCIa2^Lcs1{H>cG-|sx z&^i^zCubH1(vjd+-8>UG_jIg=bbMYEQ2D`$>W=jjJZN)b-Xmkum1P_Y3Lece!FpJS z!>?lC`#zZ!Ci@+_*F777byLAt?~&jo5nMJ|NvG*p4yY_Uy|}ik{~@5z3VKO`8J7Yf zK`WRCms>h+q)5+>IRvcjsPGB~y!!?`1Q)?g*ou&Kgj7kMY4<4@AgvzQmr(HHo5AH2 zwR@tHqVEVPBc9SA${J~94M{}<6;sj#nUXm~5M|xA5s~vvmM!jVVbes;o!;2_ve8U# z#kiJNIi=-SS+z^mR_#j7w05;_TDwNLUVq4q`svKor(cqJN#0$9Ug7g~-`rQ^qx~m@y2OU8A z#zh~=7n#Z$Z*fx-GOtDf07cgx0suCz_W(2~Y(0tf@FX@P6EPuM_dgn$vj9LucO)%W zw%HgMW>=#oL>nZ>M&NEf08>)#)k<{$fCT_r>rPi=BV=hFh6WS^qqze>C6Ek}o{M5% za|@JGowu0t{&hgNzySHZxy@LTNh);YzZ2zSp_ zl$^T&Dnc|NLb&RD_!4>pt@VHdP)ZGER%5ZmWEe$lryR&y;2u^3cOkO4#6c%-(EY6a{600000NkvXXu0mjfxS2AI literal 0 HcmV?d00001 diff --git a/smsBEST/static/rapidsms/icons/silk/help.png b/smsBEST/static/rapidsms/icons/silk/help.png new file mode 100755 index 0000000000000000000000000000000000000000..5c870176d4dea68aab9e51166cc3d7a582f326d6 GIT binary patch literal 786 zcmV+t1MU2YP)$XgYMs^AIOw1Qr{*Wn)N-{9ma}x2(<~`9Go1=*>YR!KZvrBS zCd!u}@M0og%Ev@_;Z?Kk>Wwv=%h_57zmt2<_1msz_niYE=YRNPpd%02TK9oK1z z>ooPno}v^sikz_|1XHFx_L%~;ljh7i(jiay5F0x*+(9aXXFCl?AdQj5XlQ65%sEv+ ztfe?|YcjPN*@yYtE~ImQh{l|#A6Z8iu>pf43Rj52CzU_dMQm|S2xR62YjQOn+z8WH zaK=!}ggOZi{4pB7SQ=xC0n|vXP_Bkx_a)FeNd}w8U97BNbSWxa^QW-li9BZ#M1!_xE*?wzt^GcoeoL*JGLSe_+l-JT2#2tz!z&^ z_s5anq&^nBklIMwRvcoP3%qs%%Ea?1c{_*V*Xj&~uLu-2Dp1fUN4<0zMo$EH>*U83 zm_9;Vt%-bE{_J_!If!1y=c+`QVZ>0_BPy z+%^pgnv`f8H)Z%0&Tp8&u*MCIC4igNW5MeWM_DHpDNi)Zxz|9XboOnitwFq$ETN=X zj-tkCJnz**Y4k#6_Ty^B=hWo~L!47r`HoP=x&3T1)JLr2t2+#fHgNuvOO$0ks zMIj=HnnBRUR?tKXG11rxCU4&7dG4NbuvR2_mEvc)n?Cow;~Wve|KR^>9@p5l)|QB+ z$jmun3q#x>;ss-PW_mnr2MHVzLAl1RW&0?VkixF*4t!St0YVb2wnKdU(kmOHiL;aW zK8Xte%(k>MVGG$E4no6dcNnb>BhVHHGD&1pv4YZ68kE2V03t5#PCEFm7=ad$6)+3B zTCmn*?A?=u(o~ET7~-7g0)ZB=6|lumi4}B}MLgy~Ysy6)Q5%Al7|05&1z3Jpu>cF8 z3?VXs*3<}%h3`5Wld)N2zJnk%Agw<~3k)sPTLFd=F5;d8-bj-09SkQuynfflNcZLN z!^_37fdZvzrq=9~mp*($%mcDRKC&qvaaZuX+C=AT6O*~tHl>0mcP<_q>-z%$xO(@! zYluq5a8VQI$S@4?r*v;gPo!QQ%pX3A#>xx4t=w-L6COWx?aj&`f+!YePsFtj=hOQR zP3=E2j@9L7s8;T^&s?u(Hdpu?CubjMrGn{t_37>9$|AD)QE08weJlKn8|OyjL~7oP zC8mPT`jzuH*Dh^I0048RGafUIT)4H~*m8m>egI0iH=(LB%b@@O002ovPDHLkV1lw0 B3i-HS{zx9u^IUGw>*=$qi z4z(fju8Kxf4E>slBg^es4|nAN~@NV_SFj zT24(nZf1>C;s&Oa#mmJBSw-p_cY~Y6U)hMyiI9#@b2~OpJ~{tQK#e@V>&ZUL%dC-& z4K3ksgdE?;g2XJ7a-IC z{t7T9P!AB)6MkIq=xo`8@fr4Pe+pxHJkq|8i#gBoi7`)S7Dry495@-9|NUzWL5S=I zI}8e@=#j{*V_TIRYJCHM<4>HSsjdT~`23%KH*e}YU%C<>JM(QmG2_K2&b4Ftok-)u zSoT&#!hAJ4MD=!?;n}ksXzJm;^DmMqtaEL0%KcAFfAn>=sgaW^@?6tnFI$DxIX=HQ z$n|KMeH{mAuJ2-IyqPWur#3F*- zi1-H*6GJgONgz~1E;+_Oe@~@VF-1Iy-=*@ zV9T!Kgk#%59lVt}Zj7B_)9wTKYBy6YEwPxKqOdeGuEw0%cVhe}Yj*hPSBMNYZ5yz{ z4STT*%d9TVV4NauDND$z(%QKb>=kMr>ckh0lFuesOioc=Nq^^8BQNYYbk1@M%M`O? zh?6H&UZR}Ol3%#RzJX5(MAktmg_e?7`2>w^4^!6w)4$9==U0)EV$}u1A)*bPRF?jv zHdar4EJB1b*f+rh!M+8R159x8%Qjd0I{0j+|69pUC)f(>!P(OTs8c~;XuVtXzfO>s`m zrjW9YI38*Yel_NvP&FVfNEx)sn-kxIx;WzEcpe*LJBYXLr(llS6I0o+c9O z0L_4N7u$0%Dx~ks;fjYRF0OIOR}1uPI!MtibK=J3pihiBTv)jD>R%(Llj(_XFa#mG z6Wg=#j7Q7*PFmM*W@B9!ftm;#qU}sCT;|&KtBZ%Fe#3()Pk+9@Sw&8%k=NQD>92qN zkFT*E2S*%i&!MYvH;;DpF?sU}zb4Mlls)au3~BX$XZr12Z?_sbts>8Fec~0Xl1q`9 zxyH%T#p<5UCqrY2(J4oGEHk9ens22BN3dYXATM07*qoM6N<$g3xBAZ~y=R literal 0 HcmV?d00001 diff --git a/smsBEST/static/rapidsms/icons/silk/phone.png b/smsBEST/static/rapidsms/icons/silk/phone.png new file mode 100755 index 0000000000000000000000000000000000000000..c39f162f854a7c412fab9b6ff38fffdc61754a58 GIT binary patch literal 488 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 FV1fX;igy42 literal 0 HcmV?d00001 diff --git a/smsBEST/static/rapidsms/icons/silk/resultset_next.png b/smsBEST/static/rapidsms/icons/silk/resultset_next.png new file mode 100755 index 0000000000000000000000000000000000000000..da80e54fdd0b6d035e40e60b4cdcb5f8ddbece81 GIT binary patch literal 600 zcmV-e0;m0nP)Px%5=lfsR7l6|)jenvVHgMS|HVu0`jOgL8YL)QTm%K(9J&P(oCFsIL8{>3SP>M# z4^XHM>LfTwi>(OOinW4^Rw-hg8jaM1J5#H1Nz*1h)8yW}_v;+onyPo1`-~6&7k==* z&+`JCwXUu{Db+7OE)BJMe(Ifh@%fCA^qUWD(CU!D`E#SimJkY*FckEUzn)LF1aLXW zfj&*?>55z!xVvyWD1Zx&UGXTQ?OOlH)Lc3+py6^b&%@4bVf1c|45qK=hJyec%E6^X zcT`7bhko$RqxXjc0qVqqOC?qt47;~Skm%7)?mavA&@aHH0-Q_O4n;iHj_xjf|D}7= zM|=Z*5ekP&RM!|v7R8=~hQ4^)@x-awq91_mP;en(6N*~h!H!rbdSh+-&fJ&Rf7#I`qJP)cGLjKzlzW!u+$CeYm09C?3TmdbtU?#H))2NIuO(u`}eFGMe zaG8LrhF~t1VHDYy;VY?$zvY_%q|QN@#D}Z}Ggloezf7J8G6gmP7#ApfUxE39e;&D( zdiJk;6F?G%*-QoIeC5INtMow7J;11k!eSZu1(6-Sk(&Hpz8TQqFg`8cUwM1zbSs-s mP!G9+$c)`gzu5fP{M2vFjRKoA=lLc80000IqP)Px%4@pEpR7l6|RY_}8Q5Ze18Tw*oA+{(*kRpNzx)5Asmr6H+Q&CWnx+sXQ+*old zSQON56iY>^)Y>s}LaIG2fkw;S*CRCa--f-UXFLLkY z*^8-Y@YJ^TALr4!`=`Sn%#|{{_ z$krVWiwRgnz$5}Tk&w16aS$fpFb>WoBy(xtN7dXtkvHx?pEeK(Xi!qY zW&+Z3m%viZ8Jqd`GnXqZz~|Ed1yIhxsB-rN9|yN`06n!sFUHIo-M3{!6b_Y;rn>~r z9_x|-?i@Y;tcMc1v14@-lt~Dpyq)3q(e(cOhsv#2Zx=zRgd*O~@aoB~d!LGYx>ziO zaREV<_Z}!e$sGPXxiB*Ix(r36_Z~R2eLPoC+0twUlEb?J0I0m&(fcL4cui5!Tn%69 jeo!c2QZTjrr!~ZH67vgiq+5>f00000NkvXXu0mjfx#16k literal 0 HcmV?d00001 diff --git a/smsBEST/static/rapidsms/icons/silk/section_collapsed--bright.png b/smsBEST/static/rapidsms/icons/silk/section_collapsed--bright.png new file mode 100755 index 0000000000000000000000000000000000000000..12b8eb9924ea018bfcd24685502a813478f70917 GIT binary patch literal 253 zcmVPx#w@E}nR4C75V4xqk^5Me0{n88!JEV`@JN^M7&IDupyvC`>cX*dE|6y*$Z`TkC zSYV7Vo`1IUT8f@vVtIS~qbEWEBZ9d{Ncbrm$Cn?^qyyjKaL4wDlOH!kpo+mwxcK4M zyEnGKU;h&oJj^6yD}d(6!~DOl@hA!%X4Vxw%%}L{8Ws}{@^ftGwfy;qiRJC_51v6E zu{iRekib(mj;}wSN&De)Px#$w@>(R4C75U?2_bV?!5VM&>jyF#J_!IF3s}6N6oZ!cmC_TvyH_DPV*#S{Q7F z1fH^SeEsoEdiA@-a0N^-hAltG7FLcQe^@zqwgmDspes1c&$XS;^7H*?7GLfQTJmnk zV#UP|zuvvE{r&o%sNi8HAzJ~gp4=XB^5cdGR53;bbB~blQ#Ot-Kb}bkzGJ|2{%~;cZ&}BWMFG!t0n6|AUt4^;FKo%b9g6~Xt?&0g*}9$mX#4d(mlgv(0RVO2 VK_a@23XA{%002ovPDHLkV1mbuaccko literal 0 HcmV?d00001 diff --git a/smsBEST/static/rapidsms/icons/silk/sort_ascending.png b/smsBEST/static/rapidsms/icons/silk/sort_ascending.png new file mode 100755 index 0000000000000000000000000000000000000000..c3746d8fc31a95ca592a575b6562b07a808b4580 GIT binary patch literal 506 zcmVar+caDT2yilUV;BI`?Ee1!dqJQ9Jzu_j zIRd23fWQ}<0pEW8Lk)wtxVQ$Ojjvc)S(gC~N&$vL!pDyv{{s!0ip_w(fB(bTEYZ=? zxj-{$~Js0gQL=-tB;Hz>nWZVSpq)Ve;h38$b*{KfeP& z%`!?#O2@IefRlw$5~uTkn%BF!y1p+iE^f!ACS%@1>|p@X47AxnPfu?~Z*OlUHqD+5 zH?DE9F)>6>dvF!S3&dy!fqU0K2mkxeu;|0vUvYSy4P*xx8X7LeW{7(DX-ycL5kvqr w9{^JNZ{EDw29tR3;DIzKMt~{QfdLNy033wT!KCPr-2eap07*qoM6N<$g60X>-~a#s literal 0 HcmV?d00001 diff --git a/smsBEST/static/rapidsms/icons/silk/sort_descending.png b/smsBEST/static/rapidsms/icons/silk/sort_descending.png new file mode 100755 index 0000000000000000000000000000000000000000..26cb4e8b2473cd30d41977e19e226a881cddc9bc GIT binary patch literal 509 zcmVlee%pFbHse*DPr{rh(?-o1Ob0|Oqwgv6dOdGch3S+iz2 zKsC!KDJeb1rYU5~16`aZ`uX{-cXf4rUtC<=j!R9~j#po>xd5ygXtRT!p5Bb!-rh=F z1_*F6b7L4ltY#4S_Uj*N7+}*3^g@84q2W?&2K@c|AI@e05kSp?AbQ`veR42O^XAQy z2E_Grm5+k!!Y1_lN;Kz=jGFd*Le^5x43xWWSfoa5blKLGJ300000NkvXXu0mjf2JPL? literal 0 HcmV?d00001 diff --git a/smsBEST/static/rapidsms/icons/silk/user.png b/smsBEST/static/rapidsms/icons/silk/user.png new file mode 100755 index 0000000000000000000000000000000000000000..79f35ccbdad44489dbf07d1bf688c411aa3b612c GIT binary patch literal 741 zcmVz1iyEv%?$mbQ(# zwJpuiQJP8?X_`#S8b+U_G6=ziYB!xPAcq{)ZJ0bECH@ zYx#`n8^Wzn^J!4>=q^bltNO15ry?0ecSLkjpT@vlid!jk)Fjf7&)q_V5zGs#3N%6* zbW~7Hg=&P0&~Y(|g>$hC9FL?;ttzPDZbpZu9OLb33^e2;FNTGJxScp1&q4M+y2ntQ z?C(=hpU$3~`Thx0eHwi0x`q+!d5k@|0_WHe%sG3e-s^MM`xM-ig!VcIA7H}X1ot~L zg=MLB4w-Q;Bi!!u2|I+Qb;0{{4Q53YX6+4_aXena{nmt*!YG7ua~`qc>o=?@U?rOU znS7%>klzi*muXnbM6i@4FR@s^8vTjDgy&%J?w?`u>NYMDFa_2%0SQ(qJE<3=<8Bzo zfdU60e*y(^$RF%r$kl)p7=7tlCDa$+J7w>}DU(O#~fk>pYuRvHi1E9^msg{tLeV XM&GIRvfA7%00000NkvXXu0mjf&%8>| literal 0 HcmV?d00001 diff --git a/smsBEST/static/rapidsms/images/bessms_header07d.png b/smsBEST/static/rapidsms/images/bessms_header07d.png new file mode 100755 index 0000000000000000000000000000000000000000..2ee1fc18ec2287a6d660a56daed8399d1b681a89 GIT binary patch literal 26794 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 literal 0 HcmV?d00001 diff --git a/smsBEST/static/rapidsms/images/big-arrows/error.png b/smsBEST/static/rapidsms/images/big-arrows/error.png new file mode 100755 index 0000000000000000000000000000000000000000..1a0a4fc79c27eb2a62e2d9846aaa9b17b06aaf35 GIT binary patch literal 774 zcmV+h1Nr=kP)2%Vv00001b5ch_0Itp) z=>Px#Cs0gOMg8{n{rC6&_xJty`2P6#|M>X+`T73(`u_X-|NHy@{QUp@{r~>{7Dvj) z0007wNkl5 zT}Isbal8 z$bECML9(5?EM-HJa$h8xsf!=KcjvzSz&bPA;TB}y?dm8OzpKPct0Rs$;)o-TIO2#S zjyU3oBaXQDjH~^rMP?)}q1D;pGE$x2S&^!jc4l>!>Jqk?SX{WYx*nIYjZnlJ;+~Ox zw{!3RXVP1U)2axrbKQU)7wbnJ9NOpD9NVtN5vr3_l>{U5g_P3LrNgQ#+5l0+x#Jw-vAFe6JPjAui$p8QV07*qoM6N<$ EfPx#6;Mo6MfLUk_V)ev_x||!{rLF*`T73-{{N%ke`Npw0;owuK~#9!?c9rPgD@0E zVP^!WIzX<-3K;-phK%6-M`&8|@Z*{Y%70W`mE_MuekE6JI9K=21Anp;z zaL+h~d&VK$D-PjaaRisd5nK`naA_RCrEz*Li_>#ioSe(!%Fiz zE*^SY@ie(Naq-aEYA-B~i=kWo^mi{Tj*DT9*R{BJaciHS->EodAVORPnFMLp$K86h+GN+Hw!vg~J_yauLL65G$gE{or5j<2y zkBq?sarC$!Jj_UsYQlr4^q4I?L`;uJ!vo;-cso42PhU*{U%WtHD*<1cL0<_1UwA@a z=K^0=Ltn)MUo=EtqXb_PMPGphU+_g=Uj|>!_U&Cr?sw15?cC1s+!qp_%v_1Zr}_W@ N002ovPDHLkV1o06c$feH literal 0 HcmV?d00001 diff --git a/smsBEST/static/rapidsms/images/big-arrows/right.png b/smsBEST/static/rapidsms/images/big-arrows/right.png new file mode 100755 index 0000000000000000000000000000000000000000..3bf8e310a1628d130e51904f4996d3d0cabfdac8 GIT binary patch literal 806 zcmV+>1KIqEP)Px#6;Mo6MfLUk_V)ev_x||!{rLF*`T73-{{N%ke`Npw0>4Q_K~#9!?c9xR>Oc@h zVV4lo0jo4X3l&tJPB8yr{SveG+cF_h^x&LakY6Wt};)>Rp!aK zx;zZ@^oBPo{+1_6LK|qO0FVL$yMY@xpJPAE9YssVxE>O=83sdo|r4;skuU) znk(eVxqP0S%jfC2Y@VLW<~eY=JO?h9=fP$2Jh)7r3zyDw;nI0NTr$sxOXh9oh8&m5 zbK+8Y-F7X@CGtitY<;4cI@r1E}HX3uHT~Nxz)Vx{;wWAUTb-d z+*;lbcR!(L@;tefJWp;VuPeOQit}8#=R9BTDbJUC%5&zHdCuH2&zoE1d2@?AcW$2N z&du}uxmlh+H_HRKX&%5$^9XK|M{tuog!{`wxW7Dxd*m_PBM;)PFB*ccQ35ZCg0H}WFZhD5FQYGK kI}cWEzsGOqcJBSTZ%M1#5<3FoH~;_u07*qoM6N<$f~UcgQ~&?~ literal 0 HcmV?d00001 diff --git a/smsBEST/static/rapidsms/images/big-arrows/source.xcf b/smsBEST/static/rapidsms/images/big-arrows/source.xcf new file mode 100755 index 0000000000000000000000000000000000000000..57e9241f901512ce1dc90d3ba5d457193ec0f774 GIT binary patch literal 13574 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 ImuqhL4-3)#82|tP literal 0 HcmV?d00001 diff --git a/smsBEST/static/rapidsms/images/h2-bg.png b/smsBEST/static/rapidsms/images/h2-bg.png new file mode 100755 index 0000000000000000000000000000000000000000..fe377ba8bf1b740f7c9e6f472d7f0ddf21ab0bec GIT binary patch literal 1051 zcmW-geK3;&9LMJ-Y`4j3nsCH1bBVkwxkM#GMO`Z?-MXCArBhdO_4_@a@AG~6J^w!U99Jo2Ou8?fLZL7fatQ&= z1_yXhA^ir2)KD&a2$`7DKIA_Idt8;0A%&Mz#MKpp>V~+xgGs>z=rlT=G!yak#J~o; zyjUzR6f`ati;Z}DV_e^E$88N6ZLv7)U@a@jSDmmNLR!&X1_2x4$~ zHyJi>Q&vvmVP7pH#m}U(5sXXTlMJFou82_oeYuSt*{whC>>PH9V~U2Ci_D25%^gP1 z6~eGaxuLH|cv3YQw!~zp7SkBzaT`V^Ce}3c=lO6?ZEw(WT6YU-`d2rx-OBvCjURb# zQQ7trf!VgZYcD3YhIoht5?&+SsH!>6h0z=*ryWZh%!M~>T`lKF zrplN8S$!|JN@c7!|hU8Zlz633oyT!F}$CPFBp$B56n~y3(I>hq*J;lI3BM1?Nz0_ z-gWbT^=|m5cM zp9cyPTn0){cim0;@s*h@x2IlC-+6WAR7UZddzO@Tn|oe#leuY!usoU?F&{c`Q2Xk2 z9n-Qfm>=6=oo<+a;+*}R@JOdC6V$(X_bJYk-ZvTB9JOq(estYqy`AEGey~#$J~MNw z@=)W?mCj`6eB|FRv(vq{@0Yi<{9 literal 0 HcmV?d00001 diff --git a/smsBEST/static/rapidsms/images/h3-bg.png b/smsBEST/static/rapidsms/images/h3-bg.png new file mode 100755 index 0000000000000000000000000000000000000000..7da3fd0d0fbfe4bf1babcf7074fa1ffa057efc3e GIT binary patch literal 932 zcmW-geK6B;9LJ}1wH%RCw{Yr?IvwY#;XLGFHVF!0^|b1YN>S;ooQG4%^k9eb&=rS^KA+$F{d>LN@6X@g`<>@Rhgq82nUhE)OIA4Z zFtjb;NFhVozw75indKc03nsPoJ50fDiIp>5cO70SLnc`T6?!5%{A5 z0x+;aK|yqS5E>d6oz6fpnHX3hA)%oFBms-XibS#50AZML08vrV(eM#)x!jl-9xnz1 z3W!C;#bIFc`TT^0ghW(Q5;Jw;dOghiSAbLH+7~oJh%@<5sFKmc>@KI^qTqhH3x6s;jyid+Io7~RJ z>V6P>h~Xire7UE*_^H#ioK?Na-;lRe;aG3l_JLt-^(j)K&|dPWUb*;PQQ~1ittc(3 z^mv}zYn*@2(UrVPz3FoQueRFmz|p(5X-#hF)CR%IzNl|hd-?B*Z2hyf)1OOw`}bGK zYqX;xi{s?YefQi=%I-J5M@-7Tb80vCG-;_OWB6CTp|IKi%hb-fLDdM2?9i(>`i{I{ zRGYkIEo9lQInzJQ=?;TIr(f(INZs9TYtgyINZGhxRO)<tY=G$ zp1oHtYge;wSsg5E84Oq>@vFLCi^6JEbZ%$HRn1$iSX}QiuKFoh{6iH7a@^GhCrN&( zm{O~DQr2@OKUY@oqno_K&Bbwqf2WMNm r?1v&6isJ5!)Gg~qrQ_4<*O%7KKCD)o50f=)`0YrnkZ5LGaPpb|I$Vq_ literal 0 HcmV?d00001 diff --git a/smsBEST/static/rapidsms/images/header-bg.png b/smsBEST/static/rapidsms/images/header-bg.png new file mode 100755 index 0000000000000000000000000000000000000000..6ba81103161032cb07062d9c8fe57168d9838828 GIT binary patch literal 929 zcmV;S177@zP)Px$Vo*#}MF5e<0g=Z7k;em)#|4wf29wAKl*kB_$O)9l3zf+XmdOp4$qtvw5SPjk zn935E$`hH(6q(Bvn#&fN%NLr=7@N!)o6H)V%p07{9G%S`oy{Mf%^;r6A)n47pUxwo z&Lp7DC7{nHq0c9w&ncqNDx=UWqtGp+&@QCWFQw5jrqME{(KDyg54+G1yU-E4&=S1R z6THwAywMfB(H6bY7roIKz0n!H(i**gD79JIB~O$Jjl{**?hGKgiiY$=N~4*+R+ML&@4i%GyQB+D6LS zN6Xtt%iBrI+e*vZOU&C$%-c=O+)m8gPtDv=&D>GV-BQloQ_kH~&fQhd-B!=u&++xN zC-uVs000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0005VNklv`FD0^_CCO!;gsNn zU|euaa8z(ua8NKN7#SH&(N3wdSFlGgJe-e_&*!ro8wLeC1^oj9{o%Itr(m04s~{)X zEZ8VmFX$Eg5v&N7*IMCsx8*GHOYl?hL-4K3_jdm8V+UUaUj&~8t)-<_E2dDgXtijz zn$2)y-|X~!5_}YV5WE*GE-WlAh6rgPl~8#ncq@1#m>2P5W4_U7q*o(*@LKRn@KW$X zFc-|utx7GkYdoLjnc%75iQuu|k>EkMhgspi@Q?QdcLmeY%*;$G(;23s>8Yvi${oRN z!7V|3GN{)l;|Vo(b!xR*J&T~0;ilk*;JTn%tyU_PY9;0P2#1Q`n&7J7ir}(fqFkOR zPb8tFN1024i-HS+^MX=TER{O7SS*$}CparOBRDPmPpf)*dwarJ6EzNGw_PwG*df>@7#bW(20JO-FtyiWxA38_>%l(3s0e$={;_{| zEL9E&4hdg)jtJkEbhFB~u0mnF5OXwM;JEM=?xgq&ej5$1oAJIm00000NkvXXu0mjf DQ?bQR literal 0 HcmV?d00001 diff --git a/smsBEST/static/rapidsms/images/rapidsms-logo.png b/smsBEST/static/rapidsms/images/rapidsms-logo.png new file mode 100755 index 0000000000000000000000000000000000000000..85eff43dd4115cfea4e3b2aa965453f8b990ea08 GIT binary patch literal 4587 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 literal 0 HcmV?d00001 diff --git a/smsBEST/static/rapidsms/images/tab-bg-hover.png b/smsBEST/static/rapidsms/images/tab-bg-hover.png new file mode 100755 index 0000000000000000000000000000000000000000..88d6fcaf1c68d98e60d1c0d429060add57d469ee GIT binary patch literal 101 zcmeAS@N?(olHy`uVBq!ia0vp^EI=&7$P6TFcJ-VFQjEnx?oJHr&dIz4a@YcVLR<}( xT@=`TVH(%{TR;(BPZ!4!j_b)k4mgN0Fc_a;_;_QZ`x&4FgQu&X%Q~loCIG1!94`O> literal 0 HcmV?d00001 diff --git a/smsBEST/static/rapidsms/images/tab-bg.png b/smsBEST/static/rapidsms/images/tab-bg.png new file mode 100755 index 0000000000000000000000000000000000000000..ba01ea09ccc73c87cc24c7ee657cbdb7721229fa GIT binary patch literal 228 zcmVPx#R8UM*MFWw?1d_)ElE?>>$Ox3k3Y5tVmB|g3$q$#x5tzyonadTL%NLu>8k@`< zoXj4b%^;r5BA?DApw1?t&nKeKDWlITqtGm*&@QFWFQw5irqK|)&~qzQWdHyGK1oDD zR0!7uD0000k44ofy`glX(f`n0vZ7hHzZ> zJ>$s5peWLC;rjC5@|AO3S#(7UYqxGu&HfQ%|e>dx)Frdj!o-U3d9M?q;vGX-32rwKBWpR1w`{Td+S>Lw3 zk=RC<~7lBvaq30)0a3q{c{iV)=WLNz;wEs=9QBN`A;}7hb^7AzXoU; NgQu&X%Q~loCIH`Zd&K|% literal 0 HcmV?d00001 diff --git a/smsBEST/static/rapidsms/images/table-header-bg.png b/smsBEST/static/rapidsms/images/table-header-bg.png new file mode 100755 index 0000000000000000000000000000000000000000..b6cd86c07df08826049c36fc56f52b1b493c1538 GIT binary patch literal 535 zcmXAlJ1j$C7={lbsnWPEL|i6@8i+`+l$5q^X^tA0N@8`1bRcOWOjb-bVeViOu}DNZ z&=3g&Lr*WKJr_Mndk)o$_xt-i@B4oLnVR&#J?F5P+squtSzJy#k6Vd$nyRq5E_EKK zVvBc-bAeF1g!ig@#xoHP3j$geM-UJi$XvXr$E3aE{gHE$ix#LG-4uw zl7LMTBxsV7gfj7D$g)IAGGHSsiYzN6V56ui!m54{DGCHMT1wMcKQ#zw(j=hyB8hLx zH^?9vB$F*S3o@vl)pb@wHw@Mv12TTW51IpifF}Q!2ZgdYg+j4dER{+-8#N>N_q{Ir zn8);5ebZlSvvIpm>)z9I>(J3a@OI^Lt$Y9c_@bAW1A*yx&FBcF{nzy`D|Jg}Eylz4 zX1hB2c6W7Qy>E^NAD?~BgNDIA-|Pb45*uEeJZb8&H!kmLh1_9dtKWE?!f$b|i8*^< H+`IP=z{`tD literal 0 HcmV?d00001 diff --git a/smsBEST/static/rapidsms/images/table-row-bg-active.png b/smsBEST/static/rapidsms/images/table-row-bg-active.png new file mode 100755 index 0000000000000000000000000000000000000000..3b7e43ac2e061e69532ecdcf705a26a5400c72ee GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{U!3-n?#lr(Y0>we@P7LeL$-D$|TmyVUTwj0t z^#+K(|9T5Tzuy7TkKgZq{QmIc_s5?=^ykyhKc9i<*Pk!H{(J?Z-+#aT{`>v+-yeVe z{sf_azyAJsZ7 PRL9`y>gTe~DWM4f+1Ff) literal 0 HcmV?d00001 diff --git a/smsBEST/static/rapidsms/images/unicef-logo.png b/smsBEST/static/rapidsms/images/unicef-logo.png new file mode 100755 index 0000000000000000000000000000000000000000..8431a68a20ec9dd6186c16bd212a516b9cb78d6c GIT binary patch literal 3665 zcmV-X4zBTuP)Px@3rR#lRCwC$oOzTM)e*&iHH^rxh^Q!Tqqrd|5K#dG3JQw5F%b< z&P;c|ert8rt6TL3Qlv|Jks?Kk6e&`qNRc8%iWDhQq)3q>MSa6I*N#hS z4OGT%SDV>8Tf)LfGN3o`1K>MAYhVrVA@DCV8@dVFtn~Ie1MPu*fo8zRz`MZfz!Sg> zGh6+w{9+^x*4Ht03mMz)l4dFg>bSk*B~6j^nWR5TdQs8?lIBZVDCsRpPk5OLl0J|$ zOwtauZL=&@`VCI#S^&=hJ?f#YJta+c&H7W|P2e10D9{S{zW3!(U>vaAHR3tI-+-x- z2Bm_xW#DpPpE?w-rdjUybYZ$0xDpr++~H<+EU+VRK5&4W`MZGmz#hQQfmQx-oaS1v zNtSkYNloqMF|LKNF;z>tP||LaTKUiR1=Q0>(*2T-N_cjPq`yeoQBp5Sy(P8xXFE%J zNRmnFBI!X%EhHTx>1HoeA?YzmRg!L(G{DVp*g z<671=Owvk8&0_bvN_tMxFC?vq3Ha@jj+V5Kmu)F&bnxy3Nry?g+y(br*uW3Np`iYIB%Pb_%3bU3DXB)%*mQ*(uHbb@5QNGi-Y=8XQPL1e8zdd-LN?f+ zkC1e_q_>qDANogdhI_M}C2iw%JSnMB(B>5`q+=!BCTY5x>oWI_4|flFwWP+9`lKtp zo(r8H|C9QWM+F8;wlD2Z8%!fXbT8F0A+qfvRZ}fWab5q*M?;Rs)r2l=h zq*anmaA6)O>9N$SZFp#0;`^O}V}VJ)G~hDeK{I>T>5@MbvF2L=>wrdXGIx@65HK02 zk#rt#ieC?OFBda=8aUK7)cLIrPB&}~R0Hn;bAX4uj(U9r{0hiK zjV1wo&1{mStAQI_=vn}6GJ}uf#3CkrYV6(7c_@!p{eE*vce)wKg?W;W$UZ z0%zphV9oNqcST@=@ASXBOPc7^OJ=+k^=@h-_f~zz|>na1d}f@DK0zcY&UH>d9CQ z0~SlVhA2{TY@YY7m2{Mw_6%`+6;bpfqYb|_vo+=QEO%ux0-<*83fv2PFQLvs&hCdoJP#P}b=J7q zJIUYAeBjN2M@6Ywv;oZ<7>n<%{15t#25 z={z@~+3BBtAbnwCS|B<)+@rZ$81?&g;#)L9|v?u2)q zE!Nb!shAfl^FlUFCh0c`b@qyt+0Q+-5O?MX8TFR*X{`L4Sy=ua3GH_%a4iN)y3BdF z*8cmQzyvSKvKGs{Y-VfIF2Qsci^E+uDkOd1?_DKnjHGKME&L|DS^)#iY?PU;|Jo;G zw#L88zb0(5TNl~ZrEab>SPJyZ;XGaI<}<{vV%NifF#h=vaGsfck*EU9o^{6~%qZC( zIJ3YptSGSD2Jh?7fdk!XdDNe+2X@LfM`pG?urtslAai?txUuBo%>SOyX_s=S!FH3+XzNbAU*r)!`?@j+E1g{_m!Fj5+B@nD#V%H0j zxU__J-*&!fyWrZ3v8aSK_3Nt?mw#&($kj(&u1l6TT#a!b|q1mtXn`yE%Vf< z@mbz!BWb(XSofAxW@di|t}CMbYT!bmD9PhQ=QWnQdF@IR#kpJ3e)Y}cRo7!%+s3Y! zl~`XR8a}!Mdjr1@_P1a9_U3q^Oyjt)Hzy*t=MaSrcOwcZz7i1ch2RtCEcYi0d0ya} zZ@xPkbDjHq7-(D0mWxIuYFkR!U#=)nTi5j|ze&Ep<-iqA;gk^($VULTxH*nv7vQwm zy}gJ?;DtG?*E9Y>zvxuSYQJ{|5t05L@V0N6IufPUPc*ZY<@KQc>k`E*{?eG%Yf)m` zN%Jzm%pPbclVfK8l=O&u-=6}%4IHC$h@u(aBZ`hxySIB_;1JC84`vr&oSD@~%C<#$ z!_1D0ndlpV2Z$00Dv1(4?sj@*qJL=DLUQP&n8j^b&vRQ*q~L|wyKPEr`x9T3aL$@F zz>jkXaHR8P7X%uskN5XSu9d3H>|#l6fK_I;BFQ--im4}IUrD=~*@s@XKd_^j{W^0t z!}ry%x?|TA7;0v3L2_T7+Z-#-oLAgPrT$18$$?cnEEo+nBd8oMj#fDyi_zucXVTZux6SG(X;`ChJv&sSv;O&#of-6Ott zoI#Yk*U3%&Vi)$ah;jt~k21IIAr2|9(cTT*xrj$T%8BBI`Oq;Cy38EC=6}bD*pmy% z+jCq>l#zRdFH-+a^=}|N`Qk331KQ8KmpjKT)GNLZ>jj+dT-|u5K`M)EYANtD*J?AI z!dm2l+~5DM0&ev7HtJ+mjDA|`oK>!YweTEz6`7r~u*eCFpD`UAd!98r#SfdrGgDs9 z#9ec=c~d+YHF&nGCyIu+w19DJ=SK}gj7=z4(wU1`UB`LSYmJ}5=;WCq{e!wQXCrz@ zdbYr`81ihJVUo7>q$FTI2U8d#3hA9XvCk;#+bIsHvpKvvjDz2%bM5 zlu%}Pj`q4q`XW~Tm$5Q;CS)x4&82-j12>+L+c{4h_I zq}iTIwaC-BrbxP8Qr}EEo2Q6<9@O964~xGS)IU2h4b3NJe!_qs_QSiG%#7xKV*Je@ zk85@V7rd?f@Nygz{7Y@@H_n&1{ci1TVJlxX8@Lgn}1)0bp5_cr}5yfPe08i%1+$nc2=xIp<_$pD499-1` z-x$BNIsD5AGg~aF3owQ#Eho-dCVA%10cT~)-7~W}u3g6^c(&QN#+B||49|6PZWGPH z3Sg|H8lte-z#PRF05ALT#21KSt$n@!9|6B$<6{JI%mt1yvz!SY6lpbVQ%dCh}iW9StfoN(BJp2gM1?6ChSw6 z=+S02y@17h%_)+;PO=`s*YgEe6P<&Y?DLi{QDJeyn3mU}3|6^jJB}!0q@8PK`P@we zM)=42Gw1NCosavenXQrZ08y5652DPLWzKKT1zrZGnc1pR)bpPHuM65Hoe$XD;VDad z`A=mX)!ACocO)I?|G%WsW-t$1N!mKN-dfUlNv}w1@1E=JlKw5}KvJaG1VXrtJ7W_= zVf1HbyNBB)ov9RcDRhmU%X=c5rk2#t*^I8~jHRf{t;aaemd;gfxTMR{8B38OMT!(D jQlv').click(function() { + jQuery(this).parents("div.module").toggleClass("collapsed").toggleClass("expanded"); + }).appendTo(this); + }); +}); diff --git a/smsBEST/static/rapidsms/javascripts/global/rs-module-help.js b/smsBEST/static/rapidsms/javascripts/global/rs-module-help.js new file mode 100755 index 0000000..9b922cb --- /dev/null +++ b/smsBEST/static/rapidsms/javascripts/global/rs-module-help.js @@ -0,0 +1,29 @@ +// vim: noet + +jQuery(function() { + + /* hide the help text for each module that contains + * it, and add a "show help" button to the toolbar */ + jQuery(".module div.help").each(function() { + var help_box = jQuery(this); + help_box.hide(); + + var module = help_box.parent(".module"); + var toolbar = jQuery("div.toolbar", module); + + /* create a toolbar, if this module + * does not already have one */ + if(!toolbar.length) { + toolbar = jQuery('
    ') + module.append(toolbar); + } + + /* add a tool button to show + * the div that we just hid */ + toolbar.append( + jQuery('Show Help').click(function(ev) { + help_box.slideToggle(); + }) + ); + }) +}); diff --git a/smsBEST/static/rapidsms/javascripts/global/rs-pagination.js b/smsBEST/static/rapidsms/javascripts/global/rs-pagination.js new file mode 100755 index 0000000..0a1964f --- /dev/null +++ b/smsBEST/static/rapidsms/javascripts/global/rs-pagination.js @@ -0,0 +1,63 @@ +// vim: noet + +jQuery(function() { + jQuery(document.body).click(function(e) { + + /* ignore this click if it wasn't a link */ + var link = $(e.target); + if(link.get(0).tagName.toLowerCase() != "a") + return true; + + /* find the paginator that this link lives within. if there + * is none (ie, a link that isn't within a paginator was clicked), + * we're not interested in this event */ + var paginator = link.parents("div.paginator"); + if(!paginator.length) + return true; + + /* as above, for the table that we will reload with the new + * page of data. a paginator shouldn't exist outside of a + * table, but let's not blow up if it does */ + var table = paginator.parents("table"); + if(!table.length) + return true; + + + /* this click was within a paginator link. + * we'll take it from here, so kill the event */ + e.preventDefault(); + + /* wat */ + jQuery.ajax({ + dataType: "html", + url: link.attr("href"), + complete: function(res, status) { + + /* if the request was successful... */ + if(status == "success" || status == "notmodified") { + + /* create a dummy div, and inject the results into it. since the + * page we just requested is the SAME PAGE that we're currently + * viewing, only with a different page of objects, we can find + * the new table the old paginator's DOM id. + * -- + * NOTE: this is mostly ripped off from the jQuery.load + * function, which removes SCRIPT tags to avoid a + * permission error in internet exploder */ + var new_table = + jQuery("
    ") + .append(res.responseText.replace( + //g, "")) + .find("#" + paginator.attr("id")) // <-- new paginator + .closest("table"); + + /* replace the current table with the replacement + * from the new page. this will destroy any events + * currently attached, but will leave the rest of + * the page alone */ + table.replaceWith(new_table); + } + } + }); + }); +}); diff --git a/smsBEST/static/rapidsms/javascripts/jquery-1.3.2.min.js b/smsBEST/static/rapidsms/javascripts/jquery-1.3.2.min.js new file mode 100755 index 0000000..b1ae21d --- /dev/null +++ b/smsBEST/static/rapidsms/javascripts/jquery-1.3.2.min.js @@ -0,0 +1,19 @@ +/* + * jQuery JavaScript Library v1.3.2 + * http://jquery.com/ + * + * Copyright (c) 2009 John Resig + * Dual licensed under the MIT and GPL licenses. + * http://docs.jquery.com/License + * + * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) + * Revision: 6246 + */ +(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("",""]||!O.indexOf("",""]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
    "]||!O.indexOf("",""]||(!O.indexOf("",""]||!O.indexOf("",""]||!o.support.htmlSerialize&&[1,"div
    ","
    "]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}}); +/* + * Sizzle CSS Selector Engine - v0.9.3 + * Copyright 2009, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return UT[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="
    ";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="

    ";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="
    ";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("
    ").append(M.responseText.replace(//g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='
    ';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})(); \ No newline at end of file diff --git a/smsBEST/static/rapidsms/stylesheets/forms.css b/smsBEST/static/rapidsms/stylesheets/forms.css new file mode 100755 index 0000000..8c6eb7c --- /dev/null +++ b/smsBEST/static/rapidsms/stylesheets/forms.css @@ -0,0 +1,146 @@ +/* vim:set et ts=4 sw=4 */ + +form { + border: 1px solid #ddd; + padding: 0 1em; +} + + /* recursive models can be displayed as a tree within a + + {% endfor %} + +
    +
    {% endblock %} From 0bc7b3853e03cc6541141b5d81010235934d54c2 Mon Sep 17 00:00:00 2001 From: Sanj Date: Wed, 23 May 2012 16:14:39 +0530 Subject: [PATCH 12/21] implement nearby_areas and nearby_stops queries --- chaloBEST/mumbai/models.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/chaloBEST/mumbai/models.py b/chaloBEST/mumbai/models.py index 06dbc70..dbfd8ed 100644 --- a/chaloBEST/mumbai/models.py +++ b/chaloBEST/mumbai/models.py @@ -5,6 +5,7 @@ from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes import generic from django.db import connection import json +from django.contrib.gis.measure import D STOP_CHOICES = ( ('U','Up'), ('D', 'Down'), @@ -104,7 +105,16 @@ class Area(models.Model): def __unicode__(self): return self.name - + + #FIXME: ideally this would be done using the polygon of the area, but right now we take a random stop in the area, find all stops within x kms, and then return unique areas for those stops. + @property + def nearby_areas(self, distance=D(km=5)): + stop = self.stop_set.all()[0] + tup = (stop.point, distance,) + qset = Stop.objects.filter(point__distance_lte=tup).values('area').distinct() + area_ids = [val.area for val in qset] + return Area.objects.filter(pk__in=area_ids) + class Road(models.Model): code = models.IntegerField()#primary_key=True) slug = models.SlugField(null=True) @@ -199,6 +209,10 @@ class Stop(models.Model): self.save() return self.get_geojson(srid=srid) + @property + def nearby_stops(self, dist=D(km=2)): + tup = (self.point, dist,) + return Stop.objects.filter(point__distance_lte=tup) def __unicode__(self): return self.name From 0767afca47c0e1f0bcc695e6eb5acf14537d4c3c Mon Sep 17 00:00:00 2001 From: Sanj Date: Wed, 23 May 2012 16:17:37 +0530 Subject: [PATCH 13/21] values returns dict, not object, fix --- chaloBEST/mumbai/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chaloBEST/mumbai/models.py b/chaloBEST/mumbai/models.py index dbfd8ed..26fb801 100644 --- a/chaloBEST/mumbai/models.py +++ b/chaloBEST/mumbai/models.py @@ -112,7 +112,7 @@ class Area(models.Model): stop = self.stop_set.all()[0] tup = (stop.point, distance,) qset = Stop.objects.filter(point__distance_lte=tup).values('area').distinct() - area_ids = [val.area for val in qset] + area_ids = [val['area'] for val in qset] return Area.objects.filter(pk__in=area_ids) class Road(models.Model): From ddfeee122646e020cd5ad913bed05e29d2281573 Mon Sep 17 00:00:00 2001 From: Sanj Date: Wed, 23 May 2012 16:20:00 +0530 Subject: [PATCH 14/21] adjust default distance values for nearby_areas and stops --- chaloBEST/mumbai/models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/chaloBEST/mumbai/models.py b/chaloBEST/mumbai/models.py index 26fb801..3086d9c 100644 --- a/chaloBEST/mumbai/models.py +++ b/chaloBEST/mumbai/models.py @@ -108,7 +108,7 @@ class Area(models.Model): #FIXME: ideally this would be done using the polygon of the area, but right now we take a random stop in the area, find all stops within x kms, and then return unique areas for those stops. @property - def nearby_areas(self, distance=D(km=5)): + def nearby_areas(self, distance=D(km=3)): stop = self.stop_set.all()[0] tup = (stop.point, distance,) qset = Stop.objects.filter(point__distance_lte=tup).values('area').distinct() @@ -210,7 +210,7 @@ class Stop(models.Model): return self.get_geojson(srid=srid) @property - def nearby_stops(self, dist=D(km=2)): + def nearby_stops(self, dist=D(km=1)): tup = (self.point, dist,) return Stop.objects.filter(point__distance_lte=tup) From c400b561debc24711d48b14fedbc5d610cd1ced5 Mon Sep 17 00:00:00 2001 From: Sanj Date: Wed, 23 May 2012 16:48:40 +0530 Subject: [PATCH 15/21] backend functions for queries + templates for area, route, stop --- chaloBEST/mumbai/models.py | 8 ++++++++ chaloBEST/templates/area.html | 15 ++++++++++++++- chaloBEST/templates/base.html | 19 ++++++++++++++++++ chaloBEST/templates/route.html | 35 ++++++++++++++++++++++------------ 4 files changed, 64 insertions(+), 13 deletions(-) diff --git a/chaloBEST/mumbai/models.py b/chaloBEST/mumbai/models.py index 3086d9c..fab1873 100644 --- a/chaloBEST/mumbai/models.py +++ b/chaloBEST/mumbai/models.py @@ -214,6 +214,11 @@ class Stop(models.Model): tup = (self.point, dist,) return Stop.objects.filter(point__distance_lte=tup) + @property + def routes(self): + return Route.objects.filter(routedetail__stop=self) + + def __unicode__(self): return self.name @@ -263,6 +268,9 @@ class Route(models.Model): 'url': self.get_absolute_url() } + def areas_passed(self): + return Area.objects.filter(stop__routedetail__route=self).distinct() + class RouteDetail(models.Model): route_code = models.TextField() route = models.ForeignKey(Route, to_field="code", null=True, blank=True) diff --git a/chaloBEST/templates/area.html b/chaloBEST/templates/area.html index d80afce..f8cd19d 100644 --- a/chaloBEST/templates/area.html +++ b/chaloBEST/templates/area.html @@ -21,10 +21,11 @@ a:hover { {% block body %}
    + @@ -40,6 +41,18 @@ a:hover { {% endfor %}
    +
    + + +
    +
    {% endblock %} diff --git a/chaloBEST/templates/base.html b/chaloBEST/templates/base.html index 2fa39ea..ad9c387 100644 --- a/chaloBEST/templates/base.html +++ b/chaloBEST/templates/base.html @@ -7,6 +7,25 @@ console.firebug=true;//fix the openlayer problem + ChaloBEST: {% block title %} {% endblock %} {% block head %} diff --git a/chaloBEST/templates/route.html b/chaloBEST/templates/route.html index 82132ae..06d80b4 100644 --- a/chaloBEST/templates/route.html +++ b/chaloBEST/templates/route.html @@ -105,17 +105,28 @@ function onFeatureUnselect(obj) { {% endblock %} {% block body %} - - -
    - +
    + +
    + +
    + +
      + {% for area in route.areas_passed %} +
    • + {{ area.name }} +
    • + {% endfor %} + +
    +
    + +
    {% endblock %} From ce26cd0e487a19044049b3da7049b3a242182e89 Mon Sep 17 00:00:00 2001 From: Sanj Date: Wed, 23 May 2012 16:55:33 +0530 Subject: [PATCH 16/21] css --- chaloBEST/templates/area.html | 3 +++ chaloBEST/templates/base.html | 6 ++++++ chaloBEST/templates/route.html | 4 ++-- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/chaloBEST/templates/area.html b/chaloBEST/templates/area.html index f8cd19d..238aff6 100644 --- a/chaloBEST/templates/area.html +++ b/chaloBEST/templates/area.html @@ -21,6 +21,7 @@ a:hover { {% block body %}
    +

    Stops in {{ area.display_name }}:

      {% for stop in stops %} @@ -31,6 +32,7 @@ a:hover {
    +

    Routes passing through {{ area.display_name }}:

      {% for route in routes %} @@ -42,6 +44,7 @@ a:hover {
    +

    Nearby areas:

      {% for area in area.nearby_areas %} diff --git a/chaloBEST/templates/base.html b/chaloBEST/templates/base.html index ad9c387..4076607 100644 --- a/chaloBEST/templates/base.html +++ b/chaloBEST/templates/base.html @@ -12,6 +12,12 @@ body,html { width: 100%; } +* { + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + box-sizing:border-box; /*vendor*/ +} + #wrapper { width: 100%; } diff --git a/chaloBEST/templates/route.html b/chaloBEST/templates/route.html index 06d80b4..5b37f15 100644 --- a/chaloBEST/templates/route.html +++ b/chaloBEST/templates/route.html @@ -105,7 +105,7 @@ function onFeatureUnselect(obj) { {% endblock %} {% block body %} -
      +
        {% for r in routeDetails %} @@ -116,7 +116,7 @@ function onFeatureUnselect(obj) {
      -
      +
        {% for area in route.areas_passed %} From b63b263a8a1a5e4af2ef7de71dc92823ea134893 Mon Sep 17 00:00:00 2001 From: Sanj Date: Wed, 23 May 2012 16:58:02 +0530 Subject: [PATCH 17/21] list titles --- chaloBEST/templates/route.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/chaloBEST/templates/route.html b/chaloBEST/templates/route.html index 5b37f15..b3c70dd 100644 --- a/chaloBEST/templates/route.html +++ b/chaloBEST/templates/route.html @@ -106,6 +106,7 @@ function onFeatureUnselect(obj) { {% block body %}
        +

        Stops on route:

          {% for r in routeDetails %} @@ -117,6 +118,7 @@ function onFeatureUnselect(obj) {
        +

        Areas passed:

          {% for area in route.areas_passed %} From bc88a5ffe1bc0f5b7363b4a4d3ec8023bbd45756 Mon Sep 17 00:00:00 2001 From: Sanj Date: Wed, 23 May 2012 17:02:54 +0530 Subject: [PATCH 18/21] fix area page --- chaloBEST/mumbai/models.py | 4 ++++ chaloBEST/templates/area.html | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/chaloBEST/mumbai/models.py b/chaloBEST/mumbai/models.py index fab1873..9a319da 100644 --- a/chaloBEST/mumbai/models.py +++ b/chaloBEST/mumbai/models.py @@ -115,6 +115,10 @@ class Area(models.Model): area_ids = [val['area'] for val in qset] return Area.objects.filter(pk__in=area_ids) + @property + def routes_passing(self): + return Route.objects.filter(routedetail__stop__area=self).distinct() + class Road(models.Model): code = models.IntegerField()#primary_key=True) slug = models.SlugField(null=True) diff --git a/chaloBEST/templates/area.html b/chaloBEST/templates/area.html index 238aff6..d7266c8 100644 --- a/chaloBEST/templates/area.html +++ b/chaloBEST/templates/area.html @@ -26,7 +26,7 @@ a:hover { @@ -35,7 +35,7 @@ a:hover {

          Routes passing through {{ area.display_name }}:

            - {% for route in routes %} + {% for route in area.routes_passing %}
          • {{ route.alias }}
          • From afb7f63f514aa7ba402526e6119cd007ce113169 Mon Sep 17 00:00:00 2001 From: Sanj Date: Wed, 23 May 2012 17:05:53 +0530 Subject: [PATCH 19/21] forgot to add stop.html template --- chaloBEST/templates/stop.html | 43 +++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 chaloBEST/templates/stop.html diff --git a/chaloBEST/templates/stop.html b/chaloBEST/templates/stop.html new file mode 100644 index 0000000..11626b8 --- /dev/null +++ b/chaloBEST/templates/stop.html @@ -0,0 +1,43 @@ +{% extends 'base.html' %} + +{% block body %} +
            +

            Nearby stops:

            + + +
            +
            +

            Routes at stop:

            + + +
            +
            +

            Nearby areas:

            + + +
            + +
            + + +{% endblock %} From 05df67105aa60ee8d89c2e96360f4b7d457208c3 Mon Sep 17 00:00:00 2001 From: Sanj Date: Wed, 23 May 2012 17:07:17 +0530 Subject: [PATCH 20/21] er, silly - stops link --- chaloBEST/templates/stop.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chaloBEST/templates/stop.html b/chaloBEST/templates/stop.html index 11626b8..e15ccdd 100644 --- a/chaloBEST/templates/stop.html +++ b/chaloBEST/templates/stop.html @@ -7,7 +7,7 @@ From 42787bd6f7c577ef3b2292ebf62f81ba3d42533f Mon Sep 17 00:00:00 2001 From: Sanj Date: Sun, 3 Jun 2012 18:35:28 +0530 Subject: [PATCH 21/21] put common js stuff into template, make map work across databrowse pages --- chaloBEST/imports/import_atlas.py | 2 +- chaloBEST/mumbai/admin.py | 5 +- chaloBEST/templates/area.html | 20 +--- chaloBEST/templates/databrowse_base.html | 114 +++++++++++++++++++++++ chaloBEST/templates/route.html | 105 +-------------------- chaloBEST/templates/stop.html | 15 ++- 6 files changed, 139 insertions(+), 122 deletions(-) create mode 100644 chaloBEST/templates/databrowse_base.html diff --git a/chaloBEST/imports/import_atlas.py b/chaloBEST/imports/import_atlas.py index 3590d23..f143f6b 100644 --- a/chaloBEST/imports/import_atlas.py +++ b/chaloBEST/imports/import_atlas.py @@ -20,7 +20,7 @@ def csvToJSON(): # print a if routeNo != '': if atlasDict.has_key(routeNo): - atlasDist[routeNo].append(a) + atlasDict[routeNo].append(a) else: atlasDict[routeNo] = [a] previousRoute = routeNo diff --git a/chaloBEST/mumbai/admin.py b/chaloBEST/mumbai/admin.py index ef39eac..af210c0 100644 --- a/chaloBEST/mumbai/admin.py +++ b/chaloBEST/mumbai/admin.py @@ -55,9 +55,8 @@ class UniqueRouteForm(forms.ModelForm): def __init__(self,*args, **kwargs): super(UniqueRouteForm,self).__init__(*args,**kwargs) - self.fields['from_stop'].queryset = Stop.objects.filter(pk__in=[rd.stop.id for rd in RouteDetail.objects.filter(route=self.instance.route).order_by('serial')]) - - self.fields['to_stop'].queryset = Stop.objects.filter(pk__in=[rd.stop.id for rd in RouteDetail.objects.filter(route=self.instance.route).order_by('serial')]) + self.fields['from_stop'].queryset = Stop.objects.filter(routedetail__route=self.instance.route).order_by('routedetail') + self.fields['to_stop'].queryset = Stop.objects.filter(routedetail__route=self.instance.route).order_by('routedetail') class UniqueRouteAdmin(admin.ModelAdmin): diff --git a/chaloBEST/templates/area.html b/chaloBEST/templates/area.html index d7266c8..7661142 100644 --- a/chaloBEST/templates/area.html +++ b/chaloBEST/templates/area.html @@ -1,22 +1,10 @@ -{% extends 'base.html' %} +{% extends 'databrowse_base.html' %} {% block title %} Area: {{ area.name }} {% endblock %} -{% block head %} - - +{% block api_url %} +var API_BASE = "/1.0/"; +var API_URL = API_BASE + 'area/' + "{{ area.slug }}"; {% endblock %} {% block body %} diff --git a/chaloBEST/templates/databrowse_base.html b/chaloBEST/templates/databrowse_base.html new file mode 100644 index 0000000..5d8fe61 --- /dev/null +++ b/chaloBEST/templates/databrowse_base.html @@ -0,0 +1,114 @@ +{% extends 'base.html' %} + +{% block title %} {% endblock %} + +{% block head %} + + + + +{% endblock %} + + +{% block body %} + +{% endblock %} diff --git a/chaloBEST/templates/route.html b/chaloBEST/templates/route.html index b3c70dd..e528587 100644 --- a/chaloBEST/templates/route.html +++ b/chaloBEST/templates/route.html @@ -1,107 +1,10 @@ -{% extends 'base.html' %} +{% extends 'databrowse_base.html' %} {% block title %} Route {{ route.alias }} {% endblock %} -{% block head %} - - - - +{% block api_url %} +var API_BASE = "/1.0/"; +var API_URL = API_BASE + 'route/' + "{{ route.alias }}"; {% endblock %} {% block body %} diff --git a/chaloBEST/templates/stop.html b/chaloBEST/templates/stop.html index e15ccdd..310bbc9 100644 --- a/chaloBEST/templates/stop.html +++ b/chaloBEST/templates/stop.html @@ -1,4 +1,17 @@ -{% extends 'base.html' %} +{% extends 'databrowse_base.html' %} + +{% block api_url %} +var API_BASE = "/1.0/"; +var API_URL = API_BASE + 'stop/' + "{{ stop.slug }}"; +{% endblock %} + +{% block geojson_callback %} + jsonLayer.addFeatures(geojson_format.read(obj)); + var maxExtent = jsonLayer.getDataExtent(); + map.zoomToExtent(maxExtent); + +{% endblock %} + {% block body %}