[cig-commits] r11911 - in cs/portal/trunk/northridge/SeismoWebPortal: . templates/SeismoWebPortal

leif at geodynamics.org leif at geodynamics.org
Fri May 2 20:46:11 PDT 2008


Author: leif
Date: 2008-05-02 20:46:11 -0700 (Fri, 02 May 2008)
New Revision: 11911

Added:
   cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/pluggable.html
   cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/stationlist_list.html
Removed:
   cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodecatalogs.html
   cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodels.html
   cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosparameters.html
   cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters.html
   cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/station_index.html
   cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/stations.html
Modified:
   cs/portal/trunk/northridge/SeismoWebPortal/cmt.py
   cs/portal/trunk/northridge/SeismoWebPortal/mezzanine.py
   cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/event_confirm_delete.html
   cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/event_detail.html
   cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/event_form.html
   cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/event_list.html
   cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/event_search.html
   cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/event_search_results.html
   cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/event_upload.html
   cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/home.html
   cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodecatalog_form.html
   cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodecatalog_list.html
   cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodel_list.html
   cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodel_upload.html
   cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosparameters_form.html
   cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosparameters_list.html
   cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/settings.html
   cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/single_source_event_form.html
   cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobemesh_confirm_delete.html
   cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobemesh_list.html
   cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_confirm_delete.html
   cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_detail.html
   cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_form.html
   cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_list.html
   cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/stationlist_confirm_delete.html
   cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/stationlist_detail.html
   cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/stationlist_form.html
   cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/stationlist_upload.html
   cs/portal/trunk/northridge/SeismoWebPortal/urls.py
   cs/portal/trunk/northridge/SeismoWebPortal/views.py
Log:
Generate taskbar; fixed toolbar.  Introduced pluggable layout.


Modified: cs/portal/trunk/northridge/SeismoWebPortal/cmt.py
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/cmt.py	2008-05-02 23:57:15 UTC (rev 11910)
+++ cs/portal/trunk/northridge/SeismoWebPortal/cmt.py	2008-05-03 03:46:11 UTC (rev 11911)
@@ -67,11 +67,11 @@
         cmtList = []
         cmtSolution = None
         for line in stream:
-            tokens = line.split(':')
+            tokens = line.strip().split(':')
             if len(tokens) == 1:
                 if tokens[0]:
                     cmtSolution = CMTSolution()
-                    pde = tokens[0].lstrip()
+                    pde = tokens[0]
                     cmtSolution.dataSource = pde[0:4].strip()
                     cmtSolution.year = int(pde[4:8])
                     tokens = pde[8:].split()

Modified: cs/portal/trunk/northridge/SeismoWebPortal/mezzanine.py
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/mezzanine.py	2008-05-02 23:57:15 UTC (rev 11910)
+++ cs/portal/trunk/northridge/SeismoWebPortal/mezzanine.py	2008-05-03 03:46:11 UTC (rev 11911)
@@ -1,22 +1,25 @@
 
 
-from django.core.xheaders import populate_xheaders
 from django.template import loader, RequestContext
 from django import oldforms
 from django.db.models import FileField
 from django.contrib.auth.views import redirect_to_login
 from django.template import RequestContext
-from django.http import Http404, HttpResponse, HttpResponseRedirect
+from django.http import Http404, HttpResponseRedirect
 from django.core.exceptions import ObjectDoesNotExist, ImproperlyConfigured
-from django.core.xheaders import populate_xheaders
 from django.core.paginator import ObjectPaginator, InvalidPage
 from django.utils.translation import gettext
+from HTMLParser import HTMLParser
 
+import cmt
+import fformats
+import models
 
+
 class Object(object):
 
     @classmethod
-    def create(cls, request, model, template_name=None,
+    def create(cls, request, template_name=None,
                template_loader=loader, extra_context=None, post_save_redirect=None,
                login_required=False, follow=None, context_processors=None):
         """
@@ -27,6 +30,7 @@
             form
                 the form wrapper for the object
         """
+        model = cls.Model
         if extra_context is None: extra_context = {}
         if login_required and not request.user.is_authenticated():
             return redirect_to_login(request.path)
@@ -76,10 +80,10 @@
                 c[key] = value()
             else:
                 c[key] = value
-        return HttpResponse(t.render(c))
+        return t.render(c)
 
-    def update(self, request, model, object_id=None, slug=None,
-               slug_field=None, template_name=None, template_loader=loader,
+    def update(self, request,
+               template_name=None, template_loader=loader,
                extra_context=None, post_save_redirect=None,
                login_required=False, follow=None, context_processors=None,
                template_object_name='object'):
@@ -97,18 +101,8 @@
         if login_required and not request.user.is_authenticated():
             return redirect_to_login(request.path)
 
-        # Look up the object to be edited
-        lookup_kwargs = {}
-        if object_id:
-            lookup_kwargs['%s__exact' % model._meta.pk.name] = object_id
-        elif slug and slug_field:
-            lookup_kwargs['%s__exact' % slug_field] = slug
-        else:
-            raise AttributeError("Generic edit view must be called with either an object_id or a slug/slug_field")
-        try:
-            object = model.objects.get(**lookup_kwargs)
-        except ObjectDoesNotExist:
-            raise Http404, "No %s found for %s" % (model._meta.verbose_name, lookup_kwargs)
+        model = self.Model
+        object = self.obj
 
         manipulator = model.ChangeManipulator(getattr(object, object._meta.pk.attname), follow=follow)
 
@@ -149,11 +143,9 @@
                 c[key] = value()
             else:
                 c[key] = value
-        response = HttpResponse(t.render(c))
-        populate_xheaders(request, response, model, getattr(object, object._meta.pk.attname))
-        return response
+        return t.render(c)
 
-    def delete(self, request, model, post_delete_redirect,
+    def delete(self, request, post_delete_redirect,
                object_id=None, slug=None, slug_field=None, template_name=None,
                template_loader=loader, extra_context=None,
                login_required=False, context_processors=None, template_object_name='object'):
@@ -173,18 +165,8 @@
         if login_required and not request.user.is_authenticated():
             return redirect_to_login(request.path)
 
-        # Look up the object to be edited
-        lookup_kwargs = {}
-        if object_id:
-            lookup_kwargs['%s__exact' % model._meta.pk.name] = object_id
-        elif slug and slug_field:
-            lookup_kwargs['%s__exact' % slug_field] = slug
-        else:
-            raise AttributeError("Generic delete view must be called with either an object_id or a slug/slug_field")
-        try:
-            object = model._default_manager.get(**lookup_kwargs)
-        except ObjectDoesNotExist:
-            raise Http404, "No %s found for %s" % (model._meta.app_label, lookup_kwargs)
+        model = self.Model
+        object = self.obj
 
         if request.method == 'POST':
             object.delete()
@@ -203,15 +185,13 @@
                     c[key] = value()
                 else:
                     c[key] = value
-            response = HttpResponse(t.render(c))
-            populate_xheaders(request, response, model, getattr(object, object._meta.pk.attname))
-            return response
+            return t.render(c)
 
     @classmethod
-    def list(cls, request, queryset, paginate_by=None, page=None,
+    def list(cls, request, paginate_by=None, page=None,
              allow_empty=False, template_name=None, template_loader=loader,
              extra_context=None, context_processors=None, template_object_name='object',
-             mimetype=None):
+             ):
         """
         Generic list of objects.
 
@@ -244,7 +224,9 @@
                 the result number of the first object in the
                 object_list (1-indexed)
         """
+        
         if extra_context is None: extra_context = {}
+        queryset = cls.Model.objects.all()
         queryset = queryset._clone()
         if paginate_by:
             paginator = ObjectPaginator(queryset, paginate_by)
@@ -288,13 +270,13 @@
             model = queryset.model
             template_name = "%s/%s_list.html" % (model._meta.app_label, model._meta.object_name.lower())
         t = template_loader.get_template(template_name)
-        return HttpResponse(t.render(c), mimetype=mimetype)
+        return t.render(c)
 
-    def detail(self, request, queryset, object_id=None, slug=None,
-               slug_field=None, template_name=None, template_name_field=None,
+    def detail(self, request,
+               template_name=None, template_name_field=None,
                template_loader=loader, extra_context=None,
                context_processors=None, template_object_name='object',
-               mimetype=None):
+               ):
         """
         Generic detail of an object.
 
@@ -304,17 +286,8 @@
                 the object
         """
         if extra_context is None: extra_context = {}
-        model = queryset.model
-        if object_id:
-            queryset = queryset.filter(pk=object_id)
-        elif slug and slug_field:
-            queryset = queryset.filter(**{slug_field: slug})
-        else:
-            raise AttributeError, "Generic detail view must be called with either an object_id or a slug/slug_field."
-        try:
-            obj = queryset.get()
-        except ObjectDoesNotExist:
-            raise Http404, "No %s found matching the query" % (model._meta.verbose_name)
+        model = self.Model
+        obj = self.obj
         if not template_name:
             template_name = "%s/%s_detail.html" % (model._meta.app_label, model._meta.object_name.lower())
         if template_name_field:
@@ -330,9 +303,235 @@
                 c[key] = value()
             else:
                 c[key] = value
-        response = HttpResponse(t.render(c), mimetype=mimetype)
-        populate_xheaders(request, response, model, getattr(obj, obj._meta.pk.name))
-        return response
+        return t.render(c)
 
+    def __init__(self, objId):
+        self.objId = objId
+        self.obj = self._lookupObject()
+        return
 
+    def _lookupObject(self):
+        # Look up the object to be edited
+        object_id = self.objId
+        model = self.Model
+        lookup_kwargs = {}
+        lookup_kwargs['%s__exact' % model._meta.pk.name] = object_id
+        try:
+            object = model.objects.get(**lookup_kwargs)
+        except ObjectDoesNotExist:
+            raise Http404, "No %s found for %s" % (model._meta.verbose_name, lookup_kwargs)
+            #raise Http404, "No %s found for %s" % (model._meta.app_label, lookup_kwargs)
+        return object
+
+    @classmethod
+    def title(cls):
+        return cls.Model._meta.verbose_name
+
+    @classmethod
+    def upload(cls, request, template_loader=loader, post_save_redirect=None):
+        from forms import UploadManipulator
+
+        ModelClass = cls.Model
+
+        manipulator = UploadManipulator(cls.FileFormat())
+        help_visible = False #get_help_visible(request)
+
+        if request.method == 'POST':
+            new_data = request.POST.copy()
+            errors = {}
+            if new_data.has_key('show_help'):
+                help_visible = True
+                request.session['help_visible'] = help_visible
+            elif new_data.has_key('hide_help'):
+                help_visible = False
+                request.session['help_visible'] = help_visible
+            else:
+                new_data.update(request.FILES)
+                errors = manipulator.get_validation_errors(new_data)
+                if not errors:
+                    manipulator.do_html2python(new_data)
+                    obj = manipulator.save(new_data)
+                    return HttpResponseRedirect(post_save_redirect)
+        else:
+            errors = new_data = {}
+
+        form = oldforms.FormWrapper(manipulator, new_data, errors)
+        template_name = "%s/%s_upload.html" % (ModelClass._meta.app_label, ModelClass._meta.object_name.lower())
+        t = template_loader.get_template(template_name)
+        c = RequestContext(request, {'form': form, 'help_visible': help_visible})
+        return t.render(c)
+
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+class Event(Object):
+    Model = models.Event
+    FileFormat = fformats.CMTSolutionFormat
+
+    @classmethod
+    def create(cls, request):
+        from forms import SingleSourceEventAddManipulator
+        return cls._manipulate(request, SingleSourceEventAddManipulator(), None)
+
+    def update(self, request):
+        from forms import SingleSourceEventChangeManipulator
+        event = self.obj
+        if not event.singleSource:
+            return super(Event, self).update(request)
+        return self._manipulate(request, SingleSourceEventChangeManipulator(event), event)
+
+    @classmethod
+    def _manipulate(cls, request, manipulator, event):
+        if request.method == 'POST':
+            new_data = request.POST.copy()
+            errors = manipulator.get_validation_errors(new_data)
+            if not errors:
+                manipulator.do_html2python(new_data)
+                new_data['class'] = None; del new_data['class']
+                new_data['object'] = None; del new_data['object']
+                new_data['action'] = None; del new_data['action']
+                obj = manipulator.save(new_data)
+                return HttpResponseRedirect("/specfem3dglobe/")
+        else:
+            new_data = manipulator.flatten_data()
+            errors = {}
+
+        form = oldforms.FormWrapper(manipulator, new_data, errors)
+        t = loader.get_template('SeismoWebPortal/single_source_event_form.html')
+        c = RequestContext(request, dict(
+            form = form,
+            action = request.path,
+            object = event,
+            ))
+        return t.render(c)
+
+    @classmethod
+    def search(cls, request):
+        import urllib2
+
+        if not request.GET.get('itype'):
+            t = loader.get_template('SeismoWebPortal/event_search.html')
+            c = RequestContext(request, {})
+            return t.render(c)
+
+        # Simply forward the search request to globalcmt.org.
+        query = request.GET.urlencode()
+        #url = "http://www.seismology.harvard.edu/cgi-bin/CMT3/form?" + query
+        url = "http://www.globalcmt.org/cgi-bin/globalcmt-cgi-bin/CMT3/form?" + query
+        src = urllib2.urlopen(url)
+
+        # Parse the results.
+        parser = HarvardCMTSearchResultsParser()
+        parser.feed(src.read())
+
+        parser.close()
+        src.close()
+
+        # Make sure secondary objects exist in the database.
+        for event in parser.cmtList:
+            # The try-get()-except shouldn't be necessary, but simply
+            # using save() causes Django to die in the database backend.
+            try:
+                ds = models.DataSource.objects.get(name=event.dataSource)
+            except models.DataSource.DoesNotExist:
+                ds = models.DataSource(event.dataSource)
+                ds.save()
+            try:
+                ds = models.Region.objects.get(name=event.regionName)
+            except:
+                r = models.Region(event.regionName)
+                r.save()
+
+        t = loader.get_template('SeismoWebPortal/event_search_results.html')
+        c = RequestContext(request,
+                           {'event_list': parser.cmtList,
+                            'error': parser.error,
+                            }
+                           )
+        return t.render(c)
+
+
+# support code
+
+class HarvardCMTSearchResultsParser(HTMLParser):
+
+    def __init__(self):
+        HTMLParser.__init__(self)
+        self.state = 0
+        self.cmtList = []
+        self.error = None
+        
+    def handle_starttag(self, tag, attrs):
+        if self.state == 0:
+            if tag == 'body':
+                self.state = 1
+        elif self.state == 2:
+            if tag == 'pre':
+                self.state = 3
+        elif self.state == -1:
+            if tag == 'p':
+                self.state = -2
+        return
+
+    def handle_endtag(self, tag):
+        if tag == 'body':
+            self.state = 0
+        elif self.state == 3:
+            if tag == 'pre':
+                self.state = 1
+        return
+
+    def handle_data(self, data):
+        from StringIO import StringIO
+        if self.state == 1:
+            if data.find('Output in CMTSOLUTION format') != -1:
+                self.state = 2
+            elif data.startswith('CMT search error'):
+                self.state = -1
+        elif self.state == 3:
+            self.cmtList = cmt.CMTSolution.parse(StringIO(data))
+        elif self.state == -2:
+            self.error = data
+            self.state = -3
+        return
+
+
+class StationList(Object):
+    Model = models.StationList
+    FileFormat = fformats.StationListFormat
+
+
+class Specfem3DGlobeMesh(Object):
+    Model = models.Specfem3DGlobeMesh
+
+
+class Specfem3DGlobeParameters(Object):
+    Model = models.Specfem3DGlobeParameters
+
+
+class MineosModeCatalog(Object):
+    Model = models.MineosModeCatalog
+
+
+class MineosModel(Object):
+    Model = models.MineosModel
+    FileFormat = fformats.MineosModelFormat
+
+
+class MineosParameters(Object):
+    Model = models.MineosParameters
+
+
+classes = [
+    Event,
+    StationList,
+    Specfem3DGlobeMesh,
+    Specfem3DGlobeParameters,
+    MineosModeCatalog,
+    MineosModel,
+    MineosParameters,
+    ]
+
+
 # end of file

Modified: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/event_confirm_delete.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/event_confirm_delete.html	2008-05-02 23:57:15 UTC (rev 11910)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/event_confirm_delete.html	2008-05-03 03:46:11 UTC (rev 11911)
@@ -1,13 +1,10 @@
 
-{% extends "SeismoWebPortal/events.html" %}
-
-{% block content %}
-
 <h2 class=titlebar>delete event</h2>
 
-<form method="post" action="/specfem3dglobe/events/{{ object.id }}/delete/">
+<form method="post" action="/specfem3dglobe/">
+    <input type="hidden" name="class" value="Event">
+    <input type="hidden" name="object" value="{{object.id}}">
+    <input type="hidden" name="action" value="delete">
     <p>Are you sure you want to delete the event "{{ object }}"?
     <p><input type="submit" value="Delete" />
 </form>
-
-{% endblock %}

Modified: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/event_detail.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/event_detail.html	2008-05-02 23:57:15 UTC (rev 11910)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/event_detail.html	2008-05-03 03:46:11 UTC (rev 11911)
@@ -1,18 +1,7 @@
 
-{% extends "SeismoWebPortal/events.html" %}
-
-{% block content %}
-
 <h2 class=titlebar>{{ object.name }}</h2>
 
 <div class=toolbar>
-    {% if object.singleSource %}
-    <form action="edit/" method="get"><input type="submit" value="Edit..." /></form>
-    {% else %}
-    <form action="edit/" method="get"><input type="submit" value="Rename..." /></form>
-    {% endif %}
-
-    <form action="delete/" method="get"><input type="submit" value="Delete" /></form>
     <a href="gearth.kml"><img src="/specfem3dglobe/pics/kml.icon.gif" title="View in Google Earth" alt="View in Google Earth"></a>
     [<a href="CMTSOLUTION.txt">download as text</a>]
 </div>
@@ -66,5 +55,3 @@
 {% endif %}
 
 {% endif %}
-
-{% endblock %}

Modified: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/event_form.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/event_form.html	2008-05-02 23:57:15 UTC (rev 11910)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/event_form.html	2008-05-03 03:46:11 UTC (rev 11911)
@@ -1,15 +1,14 @@
 
-{% extends "SeismoWebPortal/events.html" %}
-
-{% block content %}
-
 <h2 class=titlebar>rename event</h2>
 
 {% if form.has_errors %}
 <p><span class=error>Please correct the following error{{ form.error_dict|pluralize }}.</span>
 {% endif %}
 
-<form method="post" action="/specfem3dglobe/events/{{ object.id }}/edit/">
+<form method="post" action="/specfem3dglobe/">
+    <input type="hidden" name="class" value="Event">
+    <input type="hidden" name="object" value="{{object.id}}">
+    <input type="hidden" name="action" value="edit">
 
     <div class=tab30ex>
 
@@ -24,5 +23,3 @@
     </div> <!-- tab30ex -->
 
 </form>
-
-{% endblock %}

Modified: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/event_list.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/event_list.html	2008-05-02 23:57:15 UTC (rev 11910)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/event_list.html	2008-05-03 03:46:11 UTC (rev 11911)
@@ -1,14 +1,4 @@
 
-{% extends "SeismoWebPortal/events.html" %}
-
-{% block content %}
-
-<div class=toolbar>
-    <form action="search/" method="get"><input type="submit" value="Search..." /></form>
-    <form action="create/" method="get"><input type="submit" value="New..." /></form>
-    <form action="upload/" method="get"><input type="submit" value="Upload..." /></form>
-</div>
-
 {% if object_list %}
     <table rules=groups>
         <colgroup><col class=odd><col class=even><col class=odd><col class=even><col class=odd><col class=even><col class=odd><col class=even></colgroup>
@@ -29,7 +19,7 @@
         <tbody>
         {% for object in object_list %}
         <tr>
-            <th><a href="{{ object.id }}/">{{ object.name }}</a></th>
+            <th><a href="/specfem3dglobe/?class=Event&object={{object.id}}">{{ object.name }}</a></th>
             {% if object.singleSource %}
             <td>point-source</td>
             <td>{{ object.singleSource.beachball }}</td>
@@ -57,5 +47,3 @@
 {% else %}
     <p>You have no events.
 {% endif %}
-
-{% endblock %}

Modified: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/event_search.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/event_search.html	2008-05-02 23:57:15 UTC (rev 11910)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/event_search.html	2008-05-03 03:46:11 UTC (rev 11911)
@@ -1,8 +1,4 @@
 
-{% extends "SeismoWebPortal/events.html" %}
-
-{% block content %}
-
 <h2 class=titlebar>event search</h2>
 
 {% if form.has_errors %}
@@ -12,6 +8,8 @@
 {% endif %}
 
 <form method="get" action=".">
+    <input type="hidden" name="class" value="Event">
+    <input type="hidden" name="action" value="search">
 
     <div class=tab30ex>
 
@@ -103,5 +101,3 @@
     </div>
 
 </form>
-
-{% endblock %}

Modified: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/event_search_results.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/event_search_results.html	2008-05-02 23:57:15 UTC (rev 11910)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/event_search_results.html	2008-05-03 03:46:11 UTC (rev 11911)
@@ -1,8 +1,4 @@
 
-{% extends "SeismoWebPortal/events.html" %}
-
-{% block content %}
-
 <h2 class=titlebar>event search results</h2>
 
 {% if error %}
@@ -30,7 +26,9 @@
         <tr>
             <td>
                 <!-- an inline events/add form, already filled-out -->
-	        <form method="post" action="../create/">
+	        <form method="post" action="/specfem3dglobe/">
+                    <input type="hidden" name="class" value="Event">
+                    <input type="hidden" name="action" value="new">
 		    <input type="hidden" name="name"             value="{{ event.eventName }}"/>
 		    <input type="hidden" name="dataSource"       value="{{ event.dataSource }}"/>
 		    <input type="hidden" name="when_date"        value="{{ event.year }}-{{ event.month }}-{{ event.day }}"/>
@@ -73,5 +71,3 @@
 {% endif %}
 
 <p><a href="http://www.globalcmt.org/">Powered by the Global CMT Project.</a>
-
-{% endblock %}

Modified: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/event_upload.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/event_upload.html	2008-05-02 23:57:15 UTC (rev 11910)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/event_upload.html	2008-05-03 03:46:11 UTC (rev 11911)
@@ -1,8 +1,4 @@
 
-{% extends "SeismoWebPortal/events.html" %}
-
-{% block content %}
-
 <h2 class=titlebar>upload event</h2>
 
 <div class=toolbar>
@@ -16,7 +12,7 @@
     </form>
 </div>
 
-<form action="/specfem3dglobe/events/upload/" method="post" enctype="multipart/form-data">
+<form action="/specfem3dglobe/?class=Event&action=upload" method="post" enctype="multipart/form-data">
 
     {% if form.has_errors %}
     <p><span class=error>Please correct the following error{{ form.error_dict|pluralize }}.</span>
@@ -61,5 +57,3 @@
 </div>
 
 {% endif %}
-
-{% endblock %}

Modified: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/home.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/home.html	2008-05-02 23:57:15 UTC (rev 11910)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/home.html	2008-05-03 03:46:11 UTC (rev 11911)
@@ -3,19 +3,7 @@
 
 {% block desktop %}
 
-<div class=taskbar>
-    <ul>
-        <li class="first selected"><a href="/specfem3dglobe/">home</a>
-        <li><a href="/specfem3dglobe/specfem3dglobeparameters/">3D</a>
-        <li><a href="/specfem3dglobe/mineosparameters/">1D</a>
-        <li><a href="/specfem3dglobe/mineosmodecatalogs/">modes</a>
-        <li><a href="/specfem3dglobe/mineosmodels/">1D models</a>
-        <li><a href="/specfem3dglobe/events/">events</a>
-        <li><a href="/specfem3dglobe/stations/">stations</a>
-        <li><a href="/specfem3dglobe/specfem3dglobemeshes/">meshes</a>
-        <li><a href="/specfem3dglobe/registration/">profile</a>
-    </ul>
-</div>
+{{taskbar}}
 
 <h1 class=titlebar>home</h1>
 

Modified: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodecatalog_form.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodecatalog_form.html	2008-05-02 23:57:15 UTC (rev 11910)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodecatalog_form.html	2008-05-03 03:46:11 UTC (rev 11911)
@@ -1,8 +1,4 @@
 
-{% extends "SeismoWebPortal/mineosmodecatalogs.html" %}
-
-{% block content %}
-
 <h2 class=titlebar>{% if object %}edit{% else %}new{% endif %} Mineos mode catalog</h2>
 
 <div class=toolbar>
@@ -73,5 +69,3 @@
     </div>
 
 </form>
-
-{% endblock %}

Modified: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodecatalog_list.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodecatalog_list.html	2008-05-02 23:57:15 UTC (rev 11910)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodecatalog_list.html	2008-05-03 03:46:11 UTC (rev 11911)
@@ -1,12 +1,4 @@
 
-{% extends "SeismoWebPortal/mineosmodecatalogs.html" %}
-
-{% block content %}
-
-<div class=toolbar>
-    <form action="create/" method="get"><input type="submit" value="New..." /></form>
-</div>
-
 {% if object_list %}
 
 <table rules=cols class=cool width="100%">
@@ -47,5 +39,3 @@
 {% else %}
     <p>You have no Mineos mode catalogs.
 {% endif %}
-
-{% endblock %}

Deleted: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodecatalogs.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodecatalogs.html	2008-05-02 23:57:15 UTC (rev 11910)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodecatalogs.html	2008-05-03 03:46:11 UTC (rev 11911)
@@ -1,25 +0,0 @@
-
-{% extends "SeismoWebPortal/base.html" %}
-
-{% block desktop %}
-
-<div class=taskbar>
-    <ul>
-        <li class=first><a href="/specfem3dglobe/">home</a>
-        <li><a href="/specfem3dglobe/specfem3dglobeparameters/">3D</a>
-        <li><a href="/specfem3dglobe/mineosparameters/">1D</a>
-        <li class=selected><a href="/specfem3dglobe/mineosmodecatalogs/">modes</a>
-        <li><a href="/specfem3dglobe/mineosmodels/">1D models</a>
-        <li><a href="/specfem3dglobe/events/">events</a>
-        <li><a href="/specfem3dglobe/stations/">stations</a>
-        <li><a href="/specfem3dglobe/specfem3dglobemeshes/">meshes</a>
-        <li><a href="/specfem3dglobe/registration/">profile</a>
-    </ul>
-</div>
-
-<h1 class=titlebar>mineos mode catalogs</h1>
-
-{% block content %}
-{% endblock %}
-
-{% endblock %}

Modified: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodel_list.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodel_list.html	2008-05-02 23:57:15 UTC (rev 11910)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodel_list.html	2008-05-03 03:46:11 UTC (rev 11911)
@@ -1,8 +1,4 @@
 
-{% extends "SeismoWebPortal/mineosmodels.html" %}
-
-{% block content %}
-
 <div class=toolbar>
     <form action="upload/" method="get"><input type="submit" value="Upload..." /></form>
 </div>
@@ -28,5 +24,3 @@
 {% else %}
     <p>You have no Mineos models.
 {% endif %}
-
-{% endblock %}

Modified: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodel_upload.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodel_upload.html	2008-05-02 23:57:15 UTC (rev 11910)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodel_upload.html	2008-05-03 03:46:11 UTC (rev 11911)
@@ -1,11 +1,7 @@
 
-{% extends "SeismoWebPortal/mineosmodels.html" %}
-
-{% block content %}
-
 <h2 class=titlebar>upload mineos model</h2>
 
-<form action="/specfem3dglobe/mineosmodels/upload/" method="POST" enctype="multipart/form-data">
+<form action="/specfem3dglobe/?class=MineosModel&action=upload" method="POST" enctype="multipart/form-data">
 
     {% if form.has_errors %}
     <p><span class=error>Please correct the following error{{ form.error_dict|pluralize }}.</span>
@@ -26,5 +22,3 @@
     </div> <!-- tab30ex -->
 
 </form>
-
-{% endblock %}

Deleted: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodels.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodels.html	2008-05-02 23:57:15 UTC (rev 11910)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodels.html	2008-05-03 03:46:11 UTC (rev 11911)
@@ -1,25 +0,0 @@
-
-{% extends "SeismoWebPortal/base.html" %}
-
-{% block desktop %}
-
-<div class=taskbar>
-    <ul>
-        <li class=first><a href="/specfem3dglobe/">home</a>
-        <li><a href="/specfem3dglobe/specfem3dglobeparameters/">3D</a>
-        <li><a href="/specfem3dglobe/mineosparameters/">1D</a>
-        <li><a href="/specfem3dglobe/mineosmodecatalogs/">modes</a>
-        <li class=selected><a href="/specfem3dglobe/mineosmodels/">1D models</a>
-        <li><a href="/specfem3dglobe/events/">events</a>
-        <li><a href="/specfem3dglobe/stations/">stations</a>
-        <li><a href="/specfem3dglobe/specfem3dglobemeshes/">meshes</a>
-        <li><a href="/specfem3dglobe/registration/">profile</a>
-    </ul>
-</div>
-
-<h1 class=titlebar>mineos models</h1>
-
-{% block content %}
-{% endblock %}
-
-{% endblock %}

Deleted: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosparameters.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosparameters.html	2008-05-02 23:57:15 UTC (rev 11910)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosparameters.html	2008-05-03 03:46:11 UTC (rev 11911)
@@ -1,25 +0,0 @@
-
-{% extends "SeismoWebPortal/base.html" %}
-
-{% block desktop %}
-
-<div class=taskbar>
-    <ul>
-        <li class=first><a href="/specfem3dglobe/">home</a>
-        <li><a href="/specfem3dglobe/specfem3dglobeparameters/">3D</a>
-        <li class=selected><a href="/specfem3dglobe/mineosparameters/">1D</a>
-        <li><a href="/specfem3dglobe/mineosmodecatalogs/">modes</a>
-        <li><a href="/specfem3dglobe/mineosmodels/">1D models</a>
-        <li><a href="/specfem3dglobe/events/">events</a>
-        <li><a href="/specfem3dglobe/stations/">stations</a>
-        <li><a href="/specfem3dglobe/specfem3dglobemeshes/">meshes</a>
-        <li><a href="/specfem3dglobe/registration/">profile</a>
-    </ul>
-</div>
-
-<h1 class=titlebar>mineos parameters</h1>
-
-{% block content %}
-{% endblock %}
-
-{% endblock %}

Modified: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosparameters_form.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosparameters_form.html	2008-05-02 23:57:15 UTC (rev 11910)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosparameters_form.html	2008-05-03 03:46:11 UTC (rev 11911)
@@ -1,8 +1,4 @@
 
-{% extends "SeismoWebPortal/mineosparameters.html" %}
-
-{% block content %}
-
 <h2 class=titlebar>{% if object %}edit{% else %}new{% endif %} Mineos parameters</h2>
 
 <div class=toolbar>
@@ -14,15 +10,17 @@
         <input type="submit" name="show_help" value="Show Help" />
         {% endif %}
     </form>
+</div>
 
+<form method="post" action="/specfem3dglobe/">
+    <input type="hidden" name="class" value="MineosParameters">
     {% if object %}
-    <form action="../delete/" method="get"><input type="submit" value="Delete" /></form>
+    <input type="hidden" name="object" value="{{object.id}}">
+    <input type="hidden" name="action" value="edit">
+    {% else %}
+    <input type="hidden" name="action" value="new">
     {% endif %}
 
-</div>
-
-<form method="post" action=".">
-
     {% if form.has_errors %}
     <p><span class=error>Please correct the following error{{ form.error_dict|pluralize }}.</span>
     {% endif %}
@@ -91,5 +89,3 @@
     </div> <!-- tab30ex -->
 
 </form>
-
-{% endblock %}

Modified: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosparameters_list.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosparameters_list.html	2008-05-02 23:57:15 UTC (rev 11910)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosparameters_list.html	2008-05-03 03:46:11 UTC (rev 11911)
@@ -1,12 +1,4 @@
 
-{% extends "SeismoWebPortal/mineosparameters.html" %}
-
-{% block content %}
-
-<div class=toolbar>
-    <form action="create/" method="get"><input type="submit" value="New..." /></form>
-</div>
-
 {% if object_list %}
 
 <table rules=cols class=cool width="100%">
@@ -50,6 +42,3 @@
 {% else %}
     <p>You have no Mineos parameters.
 {% endif %}
-
-{% endblock %}
-

Added: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/pluggable.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/pluggable.html	                        (rev 0)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/pluggable.html	2008-05-03 03:46:11 UTC (rev 11911)
@@ -0,0 +1,13 @@
+
+{% extends "SeismoWebPortal/base.html" %}
+
+{% block desktop %}
+
+{{toolbar}}
+{{taskbar}}
+
+<h1 class=titlebar>{{title}}</h1>
+
+{{content}}
+
+{% endblock %}

Modified: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/settings.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/settings.html	2008-05-02 23:57:15 UTC (rev 11910)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/settings.html	2008-05-03 03:46:11 UTC (rev 11911)
@@ -3,19 +3,7 @@
 
 {% block desktop %}
 
-<div class=taskbar>
-    <ul>
-        <li class=first><a href="/specfem3dglobe/">home</a>
-        <li><a href="/specfem3dglobe/specfem3dglobeparameters/">3D</a>
-        <li><a href="/specfem3dglobe/mineosparameters/">1D</a>
-        <li><a href="/specfem3dglobe/mineosmodecatalogs/">modes</a>
-        <li><a href="/specfem3dglobe/mineosmodels/">1D models</a>
-        <li><a href="/specfem3dglobe/events/">events</a>
-        <li><a href="/specfem3dglobe/stations/">stations</a>
-        <li><a href="/specfem3dglobe/specfem3dglobemeshes/">meshes</a>
-        <li class=selected><a href="/specfem3dglobe/registration/">profile</a>
-    </ul>
-</div>
+{{taskbar}}
 
 {% block content %}
 {% endblock %}

Modified: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/single_source_event_form.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/single_source_event_form.html	2008-05-02 23:57:15 UTC (rev 11910)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/single_source_event_form.html	2008-05-03 03:46:11 UTC (rev 11911)
@@ -1,8 +1,4 @@
 
-{% extends "SeismoWebPortal/events.html" %}
-
-{% block content %}
-
 <h2 class=titlebar>{% if object %}edit{% else %}new{% endif %} event</h2>
 
 {% if form.has_errors %}
@@ -10,6 +6,13 @@
 {% endif %}
 
 <form method="post" action="{{ action }}">
+    <input type="hidden" name="class" value="Event">
+    {% if object %}
+    <input type="hidden" name="object" value="{{object.id}}">
+    <input type="hidden" name="action" value="edit">
+    {% else %}
+    <input type="hidden" name="action" value="new">
+    {% endif %}
 
     <div class=tab30ex>
 
@@ -120,5 +123,3 @@
     </div> <!-- tab30ex -->
 
 </form>
-
-{% endblock %}

Modified: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobemesh_confirm_delete.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobemesh_confirm_delete.html	2008-05-02 23:57:15 UTC (rev 11910)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobemesh_confirm_delete.html	2008-05-03 03:46:11 UTC (rev 11911)
@@ -1,13 +1,10 @@
 
-{% extends "SeismoWebPortal/meshes.html" %}
-
-{% block content %}
-
 <h2 class=titlebar>delete mesh</h2>
 
-<form method="post" action="/specfem3dglobe/specfem3dglobemeshes/{{ object.id }}/delete/">
+<form method="post" action="/specfem3dglobe/">
+    <input type="hidden" name="class" value="Specfem3DGlobeMesh">
+    <input type="hidden" name="object" value="{{object.id}}">
+    <input type="hidden" name="action" value="delete">
     <p>Are you sure you want to delete the mesh "{{ object }}"?
     <p><input type="submit" value="Delete" />
 </form>
-
-{% endblock %}

Modified: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobemesh_list.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobemesh_list.html	2008-05-02 23:57:15 UTC (rev 11910)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobemesh_list.html	2008-05-03 03:46:11 UTC (rev 11911)
@@ -1,8 +1,4 @@
 
-{% extends "SeismoWebPortal/meshes.html" %}
-
-{% block content %}
-
 <div class=toolbar>
             <form action="create/" method="post">
                 <select name="nchunks" size="1">
@@ -82,5 +78,3 @@
 {% else %}
     <p>You have no meshes.
 {% endif %}
-
-{% endblock %}

Deleted: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters.html	2008-05-02 23:57:15 UTC (rev 11910)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters.html	2008-05-03 03:46:11 UTC (rev 11911)
@@ -1,25 +0,0 @@
-
-{% extends "SeismoWebPortal/base.html" %}
-
-{% block desktop %}
-
-<div class=taskbar>
-    <ul>
-        <li class=first><a href="/specfem3dglobe/">home</a>
-        <li class=selected><a href="/specfem3dglobe/specfem3dglobeparameters/">3D</a>
-        <li><a href="/specfem3dglobe/mineosparameters/">1D</a>
-        <li><a href="/specfem3dglobe/mineosmodecatalogs/">modes</a>
-        <li><a href="/specfem3dglobe/mineosmodels/">1D models</a>
-        <li><a href="/specfem3dglobe/events/">events</a>
-        <li><a href="/specfem3dglobe/stations/">stations</a>
-        <li><a href="/specfem3dglobe/specfem3dglobemeshes/">meshes</a>
-        <li><a href="/specfem3dglobe/registration/">profile</a>
-    </ul>
-</div>
-
-<h1 class=titlebar>specfem 3d globe parameters</h1>
-
-{% block content %}
-{% endblock %}
-
-{% endblock %}

Modified: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_confirm_delete.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_confirm_delete.html	2008-05-02 23:57:15 UTC (rev 11910)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_confirm_delete.html	2008-05-03 03:46:11 UTC (rev 11911)
@@ -1,13 +1,10 @@
 
-{% extends "SeismoWebPortal/specfem3dglobeparameters.html" %}
-
-{% block content %}
-
 <h2 class=titlebar>delete specfem 3d globe parameters</h2>
 
-<form method="post" action="/specfem3dglobe/specfem3dglobeparameters/{{ object.id }}/delete/">
+<form method="post" action="/specfem3dglobe/">
+    <input type="hidden" name="class" value="Specfem3DGlobeParameters">
+    <input type="hidden" name="object" value="{{object.id}}">
+    <input type="hidden" name="action" value="delete">
     <p>Are you sure you want to delete the parameters "{{ object }}"?
     <p><input type="submit" value="Delete" />
 </form>
-{% endblock %}
-

Modified: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_detail.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_detail.html	2008-05-02 23:57:15 UTC (rev 11910)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_detail.html	2008-05-03 03:46:11 UTC (rev 11911)
@@ -1,8 +1,4 @@
 
-{% extends "SeismoWebPortal/specfem3dglobeparameters.html" %}
-
-{% block content %}
-
 <h2 class=titlebar>{{ object.name }}</h2>
 
 <div class=toolbar>
@@ -21,5 +17,3 @@
     </div>
 
 </div>
-
-{% endblock %}

Modified: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_form.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_form.html	2008-05-02 23:57:15 UTC (rev 11910)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_form.html	2008-05-03 03:46:11 UTC (rev 11911)
@@ -1,8 +1,4 @@
 
-{% extends "SeismoWebPortal/specfem3dglobeparameters.html" %}
-
-{% block content %}
-
 <h2 class=titlebar>{% if object %}edit{% else %}new{% endif %} Specfem 3D Globe parameters</h2>
 
 <div class=toolbar>
@@ -107,5 +103,3 @@
     </div> <!-- tab30ex -->
 
 </form>
-
-{% endblock %}

Modified: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_list.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_list.html	2008-05-02 23:57:15 UTC (rev 11910)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_list.html	2008-05-03 03:46:11 UTC (rev 11911)
@@ -1,12 +1,4 @@
 
-{% extends "SeismoWebPortal/specfem3dglobeparameters.html" %}
-
-{% block content %}
-
-<div class=toolbar>
-    <form action="create/" method="get"><input type="submit" value="New..." /></form>
-</div>
-
 {% if object_list %}
     <table rules=groups>
         
@@ -43,5 +35,3 @@
 {% else %}
     <p>You have no Specfem 3D Globe parameters.
 {% endif %}
-
-{% endblock %}

Deleted: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/station_index.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/station_index.html	2008-05-02 23:57:15 UTC (rev 11910)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/station_index.html	2008-05-03 03:46:11 UTC (rev 11911)
@@ -1,40 +0,0 @@
-
-{% extends "SeismoWebPortal/stations.html" %}
-
-{% block content %}
-
-<div class=toolbar>
-    <form action="upload/" method="get"><input type="submit" value="Upload..." /></form>
-</div>
-
-{% if station_lists %}
-    <table border=0 rules=groups>
-        <colgroup><col class=odd><col class=even><col class=odd></colgroup>
-
-        <thead>
-        <tr>
-            <th>name</th>
-            <th>number of stations</th>
-            <th>downloads</th>
-        </tr>
-        </thead>
-
-        <tbody>
-        {% for station_list in station_lists %}
-        <tr>
-            <td><a href="{{ station_list.id }}/">{{ station_list.name }}</a></td>
-            <td>{{ station_list.station_set.count }}</td>
-            <td>
-                <a href="{{ station_list.id }}/gearth.kml"><img src="/specfem3dglobe/pics/kml.icon.gif" title="View in Google Earth" alt="View in Google Earth"></a>
-                [<a href="{{ station_list.id }}/stations.txt">text</a>]
-            </td>
-        </tr>
-        {% endfor %}
-        </tbody>
-
-    </table>
-{% else %}
-    <p>You have no stations.
-{% endif %}
-
-{% endblock %}

Modified: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/stationlist_confirm_delete.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/stationlist_confirm_delete.html	2008-05-02 23:57:15 UTC (rev 11910)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/stationlist_confirm_delete.html	2008-05-03 03:46:11 UTC (rev 11911)
@@ -1,13 +1,10 @@
 
-{% extends "SeismoWebPortal/stations.html" %}
-
-{% block content %}
-
 <h2 class=titlebar>delete station list</h2>
 
-<form method="post" action="/specfem3dglobe/stations/{{ object.id }}/delete/">
+<form method="post" action="/specfem3dglobe/">
+    <input type="hidden" name="class" value="StationList">
+    <input type="hidden" name="object" value="{{object.id}}">
+    <input type="hidden" name="action" value="delete">
     <p>Are you sure you want to delete the station list "{{ object }}"?
     <p><input type="submit" value="Delete" />
 </form>
-
-{% endblock %}

Modified: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/stationlist_detail.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/stationlist_detail.html	2008-05-02 23:57:15 UTC (rev 11910)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/stationlist_detail.html	2008-05-03 03:46:11 UTC (rev 11911)
@@ -1,13 +1,7 @@
 
-{% extends "SeismoWebPortal/stations.html" %}
-
-{% block content %}
-
 <h2 class=titlebar>{{ object.name }}</h2>
 
 <div class=toolbar>
-    <form action="edit/" method="get"><input type="submit" value="Rename..." /></form>
-    <form action="delete/" method="get"><input type="submit" value="Delete" /></form>
     <a href="gearth.kml"><img src="/specfem3dglobe/pics/kml.icon.gif" title="View in Google Earth" alt="View in Google Earth"></a>
     [<a href="stations.txt">download as text</a>]
 </div>
@@ -44,5 +38,3 @@
 
     </table>
 {% endif %}
-
-{% endblock %}

Modified: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/stationlist_form.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/stationlist_form.html	2008-05-02 23:57:15 UTC (rev 11910)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/stationlist_form.html	2008-05-03 03:46:11 UTC (rev 11911)
@@ -1,15 +1,14 @@
 
-{% extends "SeismoWebPortal/stations.html" %}
-
-{% block content %}
-
 <h2 class=titlebar>rename station list</h2>
 
 {% if form.has_errors %}
 <p><span class=error>Please correct the following error{{ form.error_dict|pluralize }}.</span>
 {% endif %}
 
-<form method="post" action="/specfem3dglobe/stations/{{ object.id }}/edit/">
+<form method="post" action="/specfem3dglobe/">
+    <input type="hidden" name="class" value="StationList">
+    <input type="hidden" name="object" value="{{object.id}}">
+    <input type="hidden" name="action" value="edit">
 
     <div class=tab30ex>
 
@@ -26,5 +25,3 @@
     </div> <!-- tab30ex -->
 
 </form>
-
-{% endblock %}

Copied: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/stationlist_list.html (from rev 11876, cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/station_index.html)
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/stationlist_list.html	                        (rev 0)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/stationlist_list.html	2008-05-03 03:46:11 UTC (rev 11911)
@@ -0,0 +1,30 @@
+
+{% if object_list %}
+    <table border=0 rules=groups>
+        <colgroup><col class=odd><col class=even><col class=odd></colgroup>
+
+        <thead>
+        <tr>
+            <th>name</th>
+            <th>number of stations</th>
+            <th>downloads</th>
+        </tr>
+        </thead>
+
+        <tbody>
+        {% for object in object_list %}
+        <tr>
+            <td><a href="/specfem3dglobe/?class=StationList&object={{object.id}}">{{ object.name }}</a></td>
+            <td>{{ object.station_set.count }}</td>
+            <td>
+                <a href="{{ object.id }}/gearth.kml"><img src="/specfem3dglobe/pics/kml.icon.gif" title="View in Google Earth" alt="View in Google Earth"></a>
+                [<a href="{{ object.id }}/stations.txt">text</a>]
+            </td>
+        </tr>
+        {% endfor %}
+        </tbody>
+
+    </table>
+{% else %}
+    <p>You have no station lists.
+{% endif %}

Modified: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/stationlist_upload.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/stationlist_upload.html	2008-05-02 23:57:15 UTC (rev 11910)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/stationlist_upload.html	2008-05-03 03:46:11 UTC (rev 11911)
@@ -1,8 +1,4 @@
 
-{% extends "SeismoWebPortal/stations.html" %}
-
-{% block content %}
-
 <h2 class=titlebar>upload station list</h2>
 
 <div class=toolbar>
@@ -16,7 +12,7 @@
     </form>
 </div>
 
-<form action="/specfem3dglobe/stations/upload/" method="POST" enctype="multipart/form-data">
+<form action="/specfem3dglobe/?class=StationList&action=upload" method="POST" enctype="multipart/form-data">
 
     {% if form.has_errors %}
     <p><span class=error>Please correct the following error{{ form.error_dict|pluralize }}.</span>
@@ -82,5 +78,3 @@
 </div>
 
 {% endif %}
-
-{% endblock %}

Deleted: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/stations.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/stations.html	2008-05-02 23:57:15 UTC (rev 11910)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/stations.html	2008-05-03 03:46:11 UTC (rev 11911)
@@ -1,25 +0,0 @@
-
-{% extends "SeismoWebPortal/base.html" %}
-
-{% block desktop %}
-
-<div class=taskbar>
-    <ul>
-        <li class=first><a href="/specfem3dglobe/">home</a>
-        <li><a href="/specfem3dglobe/specfem3dglobeparameters/">3D</a>
-        <li><a href="/specfem3dglobe/mineosparameters/">1D</a>
-        <li><a href="/specfem3dglobe/mineosmodecatalogs/">modes</a>
-        <li><a href="/specfem3dglobe/mineosmodels/">1D models</a>
-        <li><a href="/specfem3dglobe/events/">events</a>
-        <li class=selected><a href="/specfem3dglobe/stations/">stations</a>
-        <li><a href="/specfem3dglobe/specfem3dglobemeshes/">meshes</a>
-        <li><a href="/specfem3dglobe/registration/">profile</a>
-    </ul>
-</div>
-
-<h1 class=titlebar>stations</h1>
-
-{% block content %}
-{% endblock %}
-
-{% endblock %}

Modified: cs/portal/trunk/northridge/SeismoWebPortal/urls.py
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/urls.py	2008-05-02 23:57:15 UTC (rev 11910)
+++ cs/portal/trunk/northridge/SeismoWebPortal/urls.py	2008-05-03 03:46:11 UTC (rev 11911)
@@ -130,7 +130,6 @@
     (r'^events/(?P<object_id>\d+)/gearth\.kml$','SeismoWebPortal.views.event_detail_gearth'),
 
     # stations
-    (r'^stations/$', 'SeismoWebPortal.views.station_index'),
     (r'^stations/upload/$', 'SeismoWebPortal.views.upload', upload_args(models.StationList)),
     (r'^stations/(?P<object_id>\d+)/$', 'django.views.generic.list_detail.object_detail', {'queryset': models.StationList.objects.all()}),
     (r'^stations/(?P<object_id>\d+)/edit/$', 'django.views.generic.create_update.update_object', cu_args(models.StationList, 'stations')),

Modified: cs/portal/trunk/northridge/SeismoWebPortal/views.py
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/views.py	2008-05-02 23:57:15 UTC (rev 11910)
+++ cs/portal/trunk/northridge/SeismoWebPortal/views.py	2008-05-03 03:46:11 UTC (rev 11911)
@@ -15,7 +15,6 @@
 import mezzanine
 
 import os, os.path
-from HTMLParser import HTMLParser
 
 
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -34,50 +33,73 @@
     if request.user.is_anonymous():
         return render_to_response('SeismoWebPortal/splash.html', {},
                                   RequestContext(request, {}))
-    if not request.GET:
+
+    className = request.REQUEST.get('class')
+    if className is None:
         return render_to_response('SeismoWebPortal/home.html',
                                   {},
-                                  RequestContext(request, {}))
+                                  RequestContext(request, dict(taskbar = taskbar('home'))))
 
     try:
-        className = request.GET['class']
-    except KeyError:
-        raise Http404
-    
-    try:
-        Class = getattr(models, className)
+        Class = getattr(mezzanine, className)
     except AttributeError:
         raise Http404
+
+    ret = None
+    obj = None
     
-    obj = mezzanine.Object()
-    objId = request.GET.get('object')
+    objId = request.REQUEST.get('object')
+    action = request.REQUEST.get('action')
     
     if objId is None:
-        return obj.list(request, Class.objects.all())
+        if action is None:
+            ret = Class.list(request)
+        elif action == 'new':
+            ret = Class.create(request)
+        elif action == 'upload':
+            ret = Class.upload(request, post_save_redirect = "/specfem3dglobe/")
+        elif action == 'search':
+            ret = Class.search(request)
 
-    try:
-        objId = int(objId)
-    except ValueError:
-        raise Http404
+    else:
+        try:
+            objId = int(objId)
+        except ValueError:
+            raise Http404
 
-    # NYI: mezzanine.Object instantiation belongs here.
+        obj = Class(objId)
 
-    action = request.GET.get('action')
-    if action is None:
-        return obj.detail(request, Class.objects.all(),
-                          object_id = objId)
+        if action is None:
+            ret = obj.detail(request)
+        elif action == 'edit':
+            ret = obj.update(request)
+        elif action == 'delete':
+            ret = obj.delete(request, "/specfem3dglobe/")
 
-    if action == 'edit':
-        return obj.update(request, Class,
-                          object_id = objId)
+    if ret is None:
+        raise Http404
 
-    if action == 'delete':
-        return obj.delete(request, Class, "/",
-                          object_id = objId)
+    if isinstance(ret, HttpResponse):
+        return ret
 
+    from django.template import loader, Context
+    response = HttpResponse(mimetype='text/html')
+    t = loader.get_template('SeismoWebPortal/pluggable.html')
+    c = RequestContext(request, dict(
+        toolbar = toolbar(Class, obj),
+        taskbar = taskbar(Class),
+        title = Class.title(),
+        content = ret,
+        ))
+    response.write(t.render(c))
+    return response
+
+
+def commentOnly():
     # Brainstorm: fixed-target action buttons/menus
     #     * create/new
     #     * update/edit/(rename)
+    #     * duplicate
     #     * delete
     #     * upload
     #     * search
@@ -87,10 +109,45 @@
     #     * save [live edit?]
     #     * undo [trash?]
     #     * help [probably css collapsable]
+    return
 
-    raise Http404
 
+def toolbar(Class, obj):
+    from StringIO import StringIO
+    html = StringIO()
+    print >>html, '<div class=toolbar><ul>'
+    for action in ['new', 'upload', 'search']:
+        print >>html, ('<a href="/specfem3dglobe/?class=%s&action=%s">%s</a>' %
+                       (Class.__name__, action, action))
+    if obj:
+        for action in ['edit', 'delete']:
+            print >>html, ('<a href="/specfem3dglobe/?class=%s&object=%d&action=%s">%s</a>' %
+                           (Class.__name__, obj.obj.id, action, action))
+    print >>html, '</ul></div>'
+    return html.getvalue()
 
+
+def taskbar(selected):
+    from StringIO import StringIO
+    html = StringIO()
+    print >>html, '<div class=taskbar><ul>'
+    print >>html, ('<li class="%s"><a href="/specfem3dglobe/">home</a></li>' %
+                   (selected == "home" and "selected" or ""))
+    for i, Class in enumerate(mezzanine.classes):
+        cssClass = ""
+        if Class is selected:
+            cssClass = "selected"
+        url = '/specfem3dglobe/?class=%s' % Class.__name__
+        title = Class.title()
+        print >>html, ('<li class="%s"><a href="%s">%s</a></li>' %
+                       (cssClass, url, title)
+                       )
+    print >>html, ('<li class="%s"><a href="/specfem3dglobe/registration/">profile</a></li>' %
+                   (selected == "profile" and "selected" or ""))
+    print >>html, '</ul></div>'
+    return html.getvalue()
+
+
 def par_file(request, sim_id):
     from django.template import loader, Context
 
@@ -388,7 +445,7 @@
     # Populate the FormWrapper.
     form = forms.FormWrapper(manipulator, new_data, errors, edit_inline = True)
     
-    return render_to_response(template, { 'form': form }, RequestContext(request, {}))
+    return render_to_response(template, { 'form': form, 'taskbar': taskbar('profile') }, RequestContext(request, {}))
 
 
 def notify_managers_of_new_user(request, user):
@@ -439,7 +496,8 @@
             form.save(new_data)
             request.user.message_set.create(message="Your password has been changed.")
             return HttpResponseRedirect('/specfem3dglobe/')
-    return render_to_response(template_name, {'form': forms.FormWrapper(form, new_data, errors)},
+    return render_to_response(template_name, {'form': forms.FormWrapper(form, new_data, errors),
+                                              'taskbar': taskbar('profile')},
         context_instance=RequestContext(request))
 
 password_change = login_required(password_change)
@@ -528,132 +586,6 @@
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
-def event_search(request):
-    import urllib2
-
-    if not request.GET:
-        return render_to_response('SeismoWebPortal/event_search.html',
-                                  {},
-                                  RequestContext(request, {}))
-
-    # Simply forward the search request to globalcmt.org.
-    query = request.GET.urlencode()
-    #url = "http://www.seismology.harvard.edu/cgi-bin/CMT3/form?" + query
-    url = "http://www.globalcmt.org/cgi-bin/globalcmt-cgi-bin/CMT3/form?" + query
-    src = urllib2.urlopen(url)
-
-    # Parse the results.
-    parser = HarvardCMTSearchResultsParser()
-    parser.feed(src.read())
-    
-    parser.close()
-    src.close()
-
-    # Make sure secondary objects exist in the database.
-    for event in parser.cmtList:
-        # The try-get()-except shouldn't be necessary, but simply
-        # using save() causes Django to die in the database backend.
-        try:
-            ds = models.DataSource.objects.get(name=event.dataSource)
-        except models.DataSource.DoesNotExist:
-            ds = models.DataSource(event.dataSource)
-            ds.save()
-        try:
-            ds = models.Region.objects.get(name=event.regionName)
-        except:
-            r = models.Region(event.regionName)
-            r.save()
-    
-    return render_to_response('SeismoWebPortal/event_search_results.html',
-                              {'event_list': parser.cmtList,
-                               'error': parser.error},
-                              RequestContext(request, {})) 
-
-
-def manipulate_event(request, action=None, object_id=None):
-    from forms import SingleSourceEventAddManipulator, SingleSourceEventChangeManipulator
-
-    if action == "create":
-        manipulator = SingleSourceEventAddManipulator()
-        event = None
-    elif action == "edit":
-        event = get_object_or_404(models.Event, id=object_id)
-        if not event.singleSource:
-            return create_update.update_object(
-                request,
-                models.Event,
-                object_id,
-                post_save_redirect = '/specfem3dglobe/events/',
-                )
-        manipulator = SingleSourceEventChangeManipulator(event)
-    else:
-        raise Http404
-    
-    if request.method == 'POST':
-        new_data = request.POST.copy()
-        errors = manipulator.get_validation_errors(new_data)
-        if not errors:
-            manipulator.do_html2python(new_data)
-            new_event = manipulator.save(new_data)
-            url = "/specfem3dglobe/events/%i/" % new_event.id
-            return HttpResponseRedirect(url)
-    else:
-        new_data = manipulator.flatten_data()
-        errors = {}
-
-    form = forms.FormWrapper(manipulator, new_data, errors)
-    return render_to_response('SeismoWebPortal/single_source_event_form.html',
-                              {'form': form,
-                               'action': request.path,
-                               'object': event,
-                               },
-                              RequestContext(request, {}))
-
-manipulate_event = login_required(manipulate_event)
-
-
-def upload(request, ModelClass):
-    import fformats
-    from forms import UploadManipulator
-    from os.path import dirname
-
-    formats = {
-        models.Event:         fformats.CMTSolutionFormat,
-        models.StationList:   fformats.StationListFormat,
-        models.MineosModel:   fformats.MineosModelFormat,
-        }
-
-    manipulator = UploadManipulator(formats[ModelClass]())
-    help_visible = get_help_visible(request)
-    
-    if request.method == 'POST':
-        new_data = request.POST.copy()
-        errors = {}
-        if new_data.has_key('show_help'):
-            help_visible = True
-            request.session['help_visible'] = help_visible
-        elif new_data.has_key('hide_help'):
-            help_visible = False
-            request.session['help_visible'] = help_visible
-        else:
-            new_data.update(request.FILES)
-            errors = manipulator.get_validation_errors(new_data)
-            if not errors:
-                manipulator.do_html2python(new_data)
-                obj = manipulator.save(new_data)
-                url = "%s/%i/" % (dirname(dirname(request.path)), obj.id)
-                return HttpResponseRedirect(url)
-    else:
-        errors = new_data = {}
-
-    form = forms.FormWrapper(manipulator, new_data, errors)
-    template_name = "%s/%s_upload.html" % (ModelClass._meta.app_label, ModelClass._meta.object_name.lower())
-    return render_to_response(template_name,
-                              {'form': form, 'help_visible': help_visible},
-                              RequestContext(request, {}))
-upload = login_required(upload)
-
-
 def event_detail_gearth(request, object_id):
     event = get_object_or_404(models.Event, id=object_id)
     return gearth_object_list(request,
@@ -686,51 +618,6 @@
     return response
 
 
-# support code
-
-
-class HarvardCMTSearchResultsParser(HTMLParser):
-
-    def __init__(self):
-        HTMLParser.__init__(self)
-        self.state = 0
-        self.cmtList = []
-        self.error = None
-        
-    def handle_starttag(self, tag, attrs):
-        if self.state == 0:
-            if tag == 'body':
-                self.state = 1
-        elif self.state == 2:
-            if tag == 'pre':
-                self.state = 3
-        elif self.state == -1:
-            if tag == 'p':
-                self.state = -2
-        return
-
-    def handle_endtag(self, tag):
-        if tag == 'body':
-            self.state = 0
-        elif self.state == 3:
-            if tag == 'pre':
-                self.state = 1
-        return
-
-    def handle_data(self, data):
-        if self.state == 1:
-            if data.find('Output in CMTSOLUTION format') != -1:
-                self.state = 2
-            elif data.startswith('CMT search error'):
-                self.state = -1
-        elif self.state == 3:
-            self.cmtList = cmt.CMTSolution.parse(data)
-        elif self.state == -2:
-            self.error = data
-            self.state = -3
-        return
-
-
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 # Stations
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



More information about the cig-commits mailing list