[cig-commits] r11498 - in cs/portal/trunk/seismo/SeismoWebPortal: . designs designs/plone static/css templates templates/SeismoWebPortal templates/registration
leif at geodynamics.org
leif at geodynamics.org
Fri Mar 21 20:37:05 PDT 2008
Author: leif
Date: 2008-03-21 20:37:05 -0700 (Fri, 21 Mar 2008)
New Revision: 11498
Added:
cs/portal/trunk/seismo/SeismoWebPortal/designs/
cs/portal/trunk/seismo/SeismoWebPortal/designs/__init__.py
cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/
cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/Desktop.html
cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/Desktop.py
cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/Document.html
cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/Document.py
cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/TreeBrowser.html
cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/TreeBrowser.py
cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/__init__.py
cs/portal/trunk/seismo/SeismoWebPortal/gui.py
cs/portal/trunk/seismo/SeismoWebPortal/list_detail.py
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/user_map.html
Removed:
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/base.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/events.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/objects.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/root.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/settings.html
Modified:
cs/portal/trunk/seismo/SeismoWebPortal/create_update.py
cs/portal/trunk/seismo/SeismoWebPortal/static/css/style.css
cs/portal/trunk/seismo/SeismoWebPortal/templates/404.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/500.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/event_confirm_delete.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/event_detail.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/event_form.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/event_list.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/event_search.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/event_search_results.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/event_upload.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/home.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/mesh_confirm_delete.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/mesh_form_base.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/mineosmodecatalog_form.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/mineosparameters_form.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/model_confirm_delete.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/model_form.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/object_lists.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/password_change_form.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/register.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/registration_form.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/single_source_event_form.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/source_confirm_delete.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/source_detail.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/source_form.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_confirm_delete.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_detail.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_form.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/splash.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/stationlist_confirm_delete.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/stationlist_detail.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/stationlist_form.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/stationlist_upload.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/userinfo_form.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/registration/login.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/registration/pwreset.html
cs/portal/trunk/seismo/SeismoWebPortal/templates/registration/pwreset_done.html
cs/portal/trunk/seismo/SeismoWebPortal/views.py
Log:
Preemptively made the portal pretty by linking to Plone's stylesheets
on the main site.
Modified: cs/portal/trunk/seismo/SeismoWebPortal/create_update.py
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/create_update.py 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/create_update.py 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,4 +1,3 @@
-from django.core.xheaders import populate_xheaders
from django.template import loader
from django import forms
from django.db.models import FileField
@@ -6,13 +5,14 @@
from django.template import RequestContext
from django.http import Http404, HttpResponse, HttpResponseRedirect
from django.core.exceptions import ObjectDoesNotExist, ImproperlyConfigured
+import gui
def noop(*args, **kwds):
pass
-def create_object(request, model, template_name=None,
+def create_object(request, desktop, window, model, template_name=None,
template_loader=loader, extra_context=None, post_save_redirect=None,
- login_required=False, follow=None, context_processors=None,
+ login_required=False, follow=None,
post_save_hook=noop):
"""
Generic object-creation function.
@@ -77,19 +77,21 @@
if not template_name:
template_name = "%s/%s_form.html" % (model._meta.app_label, model._meta.object_name.lower())
t = template_loader.get_template(template_name)
- c = RequestContext(request, {
+ c = {
'form': form,
'help_visible': help_visible,
'action': request.path,
- }, context_processors)
+ }
for key, value in extra_context.items():
if callable(value):
c[key] = value()
else:
c[key] = value
- return HttpResponse(t.render(c))
+ window.content = gui.StaticContent(t.render(c))
+ desktop.activeWindow.selectWindow(window)
+ return desktop
-def update_object(request, model, object_id=None, slug=None,
+def update_object(request, desktop, window, model, object_id=None, slug=None,
slug_field=None, template_name=None, template_loader=loader,
extra_context=None, post_save_redirect=None,
login_required=False, follow=None, context_processors=None,
@@ -177,11 +179,12 @@
c[key] = value()
else:
c[key] = value
- response = HttpResponse(t.render(c))
- populate_xheaders(request, response, model, getattr(object, object._meta.pk.name))
- return response
+ window.content = gui.StaticContent(t.render(c))
+ desktop.activeWindow.selectWindow(window)
+ return desktop
-def delete_object(request, model, post_delete_redirect,
+
+def delete_object(request, desktop, model, 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'):
@@ -231,6 +234,8 @@
c[key] = value()
else:
c[key] = value
- response = HttpResponse(t.render(c))
- populate_xheaders(request, response, model, getattr(object, object._meta.pk.name))
- return response
+
+ child = gui.ChildWindow(request.path, "Delete")
+ child.content = gui.StaticContent(t.render(c))
+ desktop.activeWindow.selectWindow(child)
+ return desktop
Added: cs/portal/trunk/seismo/SeismoWebPortal/designs/__init__.py
===================================================================
Added: cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/Desktop.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/Desktop.html (rev 0)
+++ cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/Desktop.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -0,0 +1,69 @@
+
+<h1 id="portal-logo">
+ <a href="$root/" accesskey="1">$desktop.title</a>
+</h1>
+
+<ul id="portal-globalnav">
+ #for $window in $desktop.windowList
+ #set $klass = $window is $desktop.activeWindow and "selected" or "plain"
+ <li class="$klass"><a href="$window.url">$window.title</a></li>
+ #end for
+</ul>
+
+<div id="portal-personaltools-wrapper"><ul id="portal-personaltools">
+ #if $desktop.user
+ <li class="portalUser">
+ <!--<a id="user-name" href="">-->
+ <span class="visualCaseSensitive">$desktop.user.first_name ($desktop.user.username)</span>
+ <!--</a>-->
+ </li>
+
+ <li>
+ <a href="$root/profile/">
+ Profile
+ </a>
+ </li>
+
+ <li>
+ <a href="$root/logout/">
+ Log out
+ </a>
+ </li>
+ #else
+ <li>
+ <a href="$root/login/">
+ Log in
+ </a>
+ </li>
+ #end if
+
+<!--
+ <li>
+ <dl class="actionMenu" id="statusMenu">
+ <dt class="actionMenuHeader">
+ <a href="http://www.geodynamics.org/cig/workinggroups/content_status_history"
+ title="Change the state of this item">
+ <span>text size</span>
+ </a>
+ </dt>
+ <dd class="actionMenuContent">
+
+
+ <ul>
+ <li><a href="javascript:setActiveStyleSheet('Large Text', 1);"
+ title="Large Text">Large</a></li>
+
+ <li><a href="javascript:setActiveStyleSheet('',1);"
+ title="Normal Text">Normal</a></li>
+ <li><a href="javascript:setActiveStyleSheet('Small Text',1);"
+ title="Small Text">Small</a></li>
+ </ul>
+ </dd>
+ </dl>
+ </li>
+-->
+
+</ul></div>
+
+
+$activeWindow
Added: cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/Desktop.py
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/Desktop.py (rev 0)
+++ cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/Desktop.py 2008-03-22 03:37:05 UTC (rev 11498)
@@ -0,0 +1,228 @@
+#!/usr/bin/env python
+
+
+
+
+##################################################
+## DEPENDENCIES
+import sys
+import os
+import os.path
+from os.path import getmtime, exists
+import time
+import types
+import __builtin__
+from Cheetah.Version import MinCompatibleVersion as RequiredCheetahVersion
+from Cheetah.Version import MinCompatibleVersionTuple as RequiredCheetahVersionTuple
+from Cheetah.Template import Template
+from Cheetah.DummyTransaction import DummyTransaction
+from Cheetah.NameMapper import NotFound, valueForName, valueFromSearchList, valueFromFrameOrSearchList
+from Cheetah.CacheRegion import CacheRegion
+import Cheetah.Filters as Filters
+import Cheetah.ErrorCatchers as ErrorCatchers
+
+##################################################
+## MODULE CONSTANTS
+try:
+ True, False
+except NameError:
+ True, False = (1==1), (1==0)
+VFFSL=valueFromFrameOrSearchList
+VFSL=valueFromSearchList
+VFN=valueForName
+currentTime=time.time
+__CHEETAH_version__ = '2.0rc7'
+__CHEETAH_versionTuple__ = (2, 0, 0, 'candidate', 7)
+__CHEETAH_genTime__ = 1206060692.7349739
+__CHEETAH_genTimestamp__ = 'Thu Mar 20 17:51:32 2008'
+__CHEETAH_src__ = 'Desktop.html'
+__CHEETAH_srcLastModified__ = 'Thu Mar 20 17:34:07 2008'
+__CHEETAH_docstring__ = 'Autogenerated by CHEETAH: The Python-Powered Template Engine'
+
+if __CHEETAH_versionTuple__ < RequiredCheetahVersionTuple:
+ raise AssertionError(
+ 'This template was compiled with Cheetah version'
+ ' %s. Templates compiled before version %s must be recompiled.'%(
+ __CHEETAH_version__, RequiredCheetahVersion))
+
+##################################################
+## CLASSES
+
+class Desktop(Template):
+
+ ##################################################
+ ## CHEETAH GENERATED METHODS
+
+
+ def __init__(self, *args, **KWs):
+
+ Template.__init__(self, *args, **KWs)
+ if not self._CHEETAH__instanceInitialized:
+ cheetahKWArgs = {}
+ allowedKWs = 'searchList namespaces filter filtersLib errorCatcher'.split()
+ for k,v in KWs.items():
+ if k in allowedKWs: cheetahKWArgs[k] = v
+ self._initCheetahInstance(**cheetahKWArgs)
+
+
+ def respond(self, trans=None):
+
+
+
+ ## CHEETAH: main method generated for this template
+ if (not trans and not self._CHEETAH__isBuffering and not callable(self.transaction)):
+ trans = self.transaction # is None unless self.awake() was called
+ if not trans:
+ trans = DummyTransaction()
+ _dummyTrans = True
+ else: _dummyTrans = False
+ write = trans.response().write
+ SL = self._CHEETAH__searchList
+ _filter = self._CHEETAH__currentFilter
+
+ ########################################
+ ## START - generated method body
+
+ write('\n<h1 id="portal-logo">\n <a href="')
+ _v = VFFSL(SL,"root",True) # '$root' on line 3, col 14
+ if _v is not None: write(_filter(_v, rawExpr='$root')) # from line 3, col 14.
+ write('/" accesskey="1">')
+ _v = VFFSL(SL,"desktop.title",True) # '$desktop.title' on line 3, col 36
+ if _v is not None: write(_filter(_v, rawExpr='$desktop.title')) # from line 3, col 36.
+ write('''</a>
+</h1>
+
+<ul id="portal-globalnav">
+''')
+ for window in VFFSL(SL,"desktop.windowList",True): # generated from line 7, col 5
+ klass = VFFSL(SL,"window",True) is VFFSL(SL,"desktop.activeWindow",True) and "selected" or "plain"
+ write(' <li class="')
+ _v = VFFSL(SL,"klass",True) # '$klass' on line 9, col 20
+ if _v is not None: write(_filter(_v, rawExpr='$klass')) # from line 9, col 20.
+ write('"><a href="')
+ _v = VFFSL(SL,"window.url",True) # '$window.url' on line 9, col 37
+ if _v is not None: write(_filter(_v, rawExpr='$window.url')) # from line 9, col 37.
+ write('">')
+ _v = VFFSL(SL,"window.title",True) # '$window.title' on line 9, col 50
+ if _v is not None: write(_filter(_v, rawExpr='$window.title')) # from line 9, col 50.
+ write('</a></li>\n')
+ write('''</ul>
+
+<div id="portal-personaltools-wrapper"><ul id="portal-personaltools">
+''')
+ if VFFSL(SL,"desktop.user",True): # generated from line 14, col 5
+ write(' <li class="portalUser">\n <!--<a id="user-name" href="">-->\n <span class="visualCaseSensitive">')
+ _v = VFFSL(SL,"desktop.user.first_name",True) # '$desktop.user.first_name' on line 17, col 51
+ if _v is not None: write(_filter(_v, rawExpr='$desktop.user.first_name')) # from line 17, col 51.
+ write(' (')
+ _v = VFFSL(SL,"desktop.user.username",True) # '$desktop.user.username' on line 17, col 77
+ if _v is not None: write(_filter(_v, rawExpr='$desktop.user.username')) # from line 17, col 77.
+ write(''')</span>
+ <!--</a>-->
+ </li>
+
+ <li>
+ <a href="''')
+ _v = VFFSL(SL,"root",True) # '$root' on line 22, col 22
+ if _v is not None: write(_filter(_v, rawExpr='$root')) # from line 22, col 22.
+ write('''/profile/">
+ Profile
+ </a>
+ </li>
+
+ <li>
+ <a href="''')
+ _v = VFFSL(SL,"root",True) # '$root' on line 28, col 22
+ if _v is not None: write(_filter(_v, rawExpr='$root')) # from line 28, col 22.
+ write('''/logout/">
+ Log out
+ </a>
+ </li>
+''')
+ else: # generated from line 32, col 5
+ write(' <li>\n <a href="')
+ _v = VFFSL(SL,"root",True) # '$root' on line 34, col 22
+ if _v is not None: write(_filter(_v, rawExpr='$root')) # from line 34, col 22.
+ write('''/login/">
+ Log in
+ </a>
+ </li>
+''')
+ write('''
+<!--
+ <li>
+ <dl class="actionMenu" id="statusMenu">
+ <dt class="actionMenuHeader">
+ <a href="http://www.geodynamics.org/cig/workinggroups/content_status_history"
+ title="Change the state of this item">
+ <span>text size</span>
+ </a>
+ </dt>
+ <dd class="actionMenuContent">
+
+
+ <ul>
+ <li><a href="javascript:setActiveStyleSheet('Large Text', 1);"
+ title="Large Text">Large</a></li>
+
+ <li><a href="javascript:setActiveStyleSheet('',1);"
+ title="Normal Text">Normal</a></li>
+ <li><a href="javascript:setActiveStyleSheet('Small Text',1);"
+ title="Small Text">Small</a></li>
+ </ul>
+ </dd>
+ </dl>
+ </li>
+-->
+
+</ul></div>
+
+
+''')
+ _v = VFFSL(SL,"activeWindow",True) # '$activeWindow' on line 69, col 1
+ if _v is not None: write(_filter(_v, rawExpr='$activeWindow')) # from line 69, col 1.
+ write('\n')
+
+ ########################################
+ ## END - generated method body
+
+ return _dummyTrans and trans.response().getvalue() or ""
+
+ ##################################################
+ ## CHEETAH GENERATED ATTRIBUTES
+
+
+ _CHEETAH__instanceInitialized = False
+
+ _CHEETAH_version = __CHEETAH_version__
+
+ _CHEETAH_versionTuple = __CHEETAH_versionTuple__
+
+ _CHEETAH_genTime = __CHEETAH_genTime__
+
+ _CHEETAH_genTimestamp = __CHEETAH_genTimestamp__
+
+ _CHEETAH_src = __CHEETAH_src__
+
+ _CHEETAH_srcLastModified = __CHEETAH_srcLastModified__
+
+ _mainCheetahMethod_for_Desktop= 'respond'
+
+## END CLASS DEFINITION
+
+if not hasattr(Desktop, '_initCheetahAttributes'):
+ templateAPIClass = getattr(Desktop, '_CHEETAH_templateClass', Template)
+ templateAPIClass._addCheetahPlumbingCodeToClass(Desktop)
+
+
+# CHEETAH was developed by Tavis Rudd and Mike Orr
+# with code, advice and input from many other volunteers.
+# For more information visit http://www.CheetahTemplate.org/
+
+##################################################
+## if run from command line:
+if __name__ == '__main__':
+ from Cheetah.TemplateCmdLineIface import CmdLineIface
+ CmdLineIface(templateObj=Desktop()).run()
+
+
Added: cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/Document.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/Document.html (rev 0)
+++ cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/Document.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -0,0 +1,27 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <script type="text/javascript" src="http://www.geodynamics.org/cig/portal_javascripts/Plone%20Default/ploneScripts3133.js"></script>
+ <script type="text/javascript" src="http://www.geodynamics.org/cig/portal_javascripts/Plone%20Default/ploneScripts1044.js"></script>
+ <style type="text/css"><!-- @import url(http://www.geodynamics.org/cig/portal_css/Plone%20Default/ploneStyles8697.css); --></style>
+ <style type="text/css" media="screen"><!-- @import url(http://www.geodynamics.org/cig/portal_css/Plone%20Default/ploneStyles4087.css); --></style>
+ <link rel="alternate stylesheet"
+ type="text/css" media="screen"
+ href="http://www.geodynamics.org/cig/portal_css/Plone%20Default/ploneStyles6585.css"
+ title="Small Text" />
+ <link rel="alternate stylesheet"
+ type="text/css" media="screen"
+ href="http://www.geodynamics.org/cig/portal_css/Plone%20Default/ploneStyles8555.css"
+ title="Large Text" />
+ <style type="text/css" media="all"><!-- @import url(http://www.geodynamics.org/cig/portal_css/Plone%20Default/ploneStyles5479.css); --></style>
+ <!-- Internet Explorer CSS Fixes -->
+ <!--[if lt IE 7]>
+ <style type="text/css" media="all">@import url(http://www.geodynamics.org/cig/IEFixes.css);</style>
+ <![endif]-->
+ <link href="/specfem3dglobe/css/style.css" type="text/css" rel="stylesheet" media="all" />
+ <title>$title</title>
+</head>
+<body>
+ $body
+</body>
+</html>
Added: cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/Document.py
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/Document.py (rev 0)
+++ cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/Document.py 2008-03-22 03:37:05 UTC (rev 11498)
@@ -0,0 +1,163 @@
+#!/usr/bin/env python
+
+
+
+
+##################################################
+## DEPENDENCIES
+import sys
+import os
+import os.path
+from os.path import getmtime, exists
+import time
+import types
+import __builtin__
+from Cheetah.Version import MinCompatibleVersion as RequiredCheetahVersion
+from Cheetah.Version import MinCompatibleVersionTuple as RequiredCheetahVersionTuple
+from Cheetah.Template import Template
+from Cheetah.DummyTransaction import DummyTransaction
+from Cheetah.NameMapper import NotFound, valueForName, valueFromSearchList, valueFromFrameOrSearchList
+from Cheetah.CacheRegion import CacheRegion
+import Cheetah.Filters as Filters
+import Cheetah.ErrorCatchers as ErrorCatchers
+
+##################################################
+## MODULE CONSTANTS
+try:
+ True, False
+except NameError:
+ True, False = (1==1), (1==0)
+VFFSL=valueFromFrameOrSearchList
+VFSL=valueFromSearchList
+VFN=valueForName
+currentTime=time.time
+__CHEETAH_version__ = '2.0rc7'
+__CHEETAH_versionTuple__ = (2, 0, 0, 'candidate', 7)
+__CHEETAH_genTime__ = 1206064108.9756939
+__CHEETAH_genTimestamp__ = 'Thu Mar 20 18:48:28 2008'
+__CHEETAH_src__ = 'Document.html'
+__CHEETAH_srcLastModified__ = 'Thu Mar 20 18:47:45 2008'
+__CHEETAH_docstring__ = 'Autogenerated by CHEETAH: The Python-Powered Template Engine'
+
+if __CHEETAH_versionTuple__ < RequiredCheetahVersionTuple:
+ raise AssertionError(
+ 'This template was compiled with Cheetah version'
+ ' %s. Templates compiled before version %s must be recompiled.'%(
+ __CHEETAH_version__, RequiredCheetahVersion))
+
+##################################################
+## CLASSES
+
+class Document(Template):
+
+ ##################################################
+ ## CHEETAH GENERATED METHODS
+
+
+ def __init__(self, *args, **KWs):
+
+ Template.__init__(self, *args, **KWs)
+ if not self._CHEETAH__instanceInitialized:
+ cheetahKWArgs = {}
+ allowedKWs = 'searchList namespaces filter filtersLib errorCatcher'.split()
+ for k,v in KWs.items():
+ if k in allowedKWs: cheetahKWArgs[k] = v
+ self._initCheetahInstance(**cheetahKWArgs)
+
+
+ def respond(self, trans=None):
+
+
+
+ ## CHEETAH: main method generated for this template
+ if (not trans and not self._CHEETAH__isBuffering and not callable(self.transaction)):
+ trans = self.transaction # is None unless self.awake() was called
+ if not trans:
+ trans = DummyTransaction()
+ _dummyTrans = True
+ else: _dummyTrans = False
+ write = trans.response().write
+ SL = self._CHEETAH__searchList
+ _filter = self._CHEETAH__currentFilter
+
+ ########################################
+ ## START - generated method body
+
+ write('''<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <script type="text/javascript" src="http://www.geodynamics.org/cig/portal_javascripts/Plone%20Default/ploneScripts3133.js"></script>
+ <script type="text/javascript" src="http://www.geodynamics.org/cig/portal_javascripts/Plone%20Default/ploneScripts1044.js"></script>
+ <style type="text/css"><!-- @import url(http://www.geodynamics.org/cig/portal_css/Plone%20Default/ploneStyles8697.css); --></style>
+ <style type="text/css" media="screen"><!-- @import url(http://www.geodynamics.org/cig/portal_css/Plone%20Default/ploneStyles4087.css); --></style>
+ <link rel="alternate stylesheet"
+ type="text/css" media="screen"
+ href="http://www.geodynamics.org/cig/portal_css/Plone%20Default/ploneStyles6585.css"
+ title="Small Text" />
+ <link rel="alternate stylesheet"
+ type="text/css" media="screen"
+ href="http://www.geodynamics.org/cig/portal_css/Plone%20Default/ploneStyles8555.css"
+ title="Large Text" />
+ <style type="text/css" media="all"><!-- @import url(http://www.geodynamics.org/cig/portal_css/Plone%20Default/ploneStyles5479.css); --></style>
+ <!-- Internet Explorer CSS Fixes -->
+ <!--[if lt IE 7]>
+ <style type="text/css" media="all">@import url(http://www.geodynamics.org/cig/IEFixes.css);</style>
+ <![endif]-->
+ <link href="/specfem3dglobe/css/style.css" type="text/css" rel="stylesheet" media="all" />
+ <title>''')
+ _v = VFFSL(SL,"title",True) # '$title' on line 22, col 12
+ if _v is not None: write(_filter(_v, rawExpr='$title')) # from line 22, col 12.
+ write('''</title>
+</head>
+<body>
+ ''')
+ _v = VFFSL(SL,"body",True) # '$body' on line 25, col 5
+ if _v is not None: write(_filter(_v, rawExpr='$body')) # from line 25, col 5.
+ write('''
+</body>
+</html>
+''')
+
+ ########################################
+ ## END - generated method body
+
+ return _dummyTrans and trans.response().getvalue() or ""
+
+ ##################################################
+ ## CHEETAH GENERATED ATTRIBUTES
+
+
+ _CHEETAH__instanceInitialized = False
+
+ _CHEETAH_version = __CHEETAH_version__
+
+ _CHEETAH_versionTuple = __CHEETAH_versionTuple__
+
+ _CHEETAH_genTime = __CHEETAH_genTime__
+
+ _CHEETAH_genTimestamp = __CHEETAH_genTimestamp__
+
+ _CHEETAH_src = __CHEETAH_src__
+
+ _CHEETAH_srcLastModified = __CHEETAH_srcLastModified__
+
+ _mainCheetahMethod_for_Document= 'respond'
+
+## END CLASS DEFINITION
+
+if not hasattr(Document, '_initCheetahAttributes'):
+ templateAPIClass = getattr(Document, '_CHEETAH_templateClass', Template)
+ templateAPIClass._addCheetahPlumbingCodeToClass(Document)
+
+
+# CHEETAH was developed by Tavis Rudd and Mike Orr
+# with code, advice and input from many other volunteers.
+# For more information visit http://www.CheetahTemplate.org/
+
+##################################################
+## if run from command line:
+if __name__ == '__main__':
+ from Cheetah.TemplateCmdLineIface import CmdLineIface
+ CmdLineIface(templateObj=Document()).run()
+
+
Added: cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/TreeBrowser.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/TreeBrowser.html (rev 0)
+++ cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/TreeBrowser.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -0,0 +1,101 @@
+
+<div id="portal-breadcrumbs">
+ <span id="breadcrumbs-you-are-here">You are here:</span> $breadcrumbs
+</div>
+
+
+<!--
+<div class="messages {% if messages %}active{% endif %}">{% if messages %}{{ messages|join:" " }}{% else %} {% endif %}</div>
+-->
+
+
+<table id="portal-columns">
+ <tbody>
+ <tr>
+ <td id="portal-column-one">
+ <div class="visualPadding">
+ <dl class="portlet" id="portlet-navigation-tree">
+ <dt class="portletHeader">
+ Navigation
+ </dt>
+ <dd class="portletItem lastItem">
+ <ul class="portletNavigationTree navTreeLevel0">
+ $navTree
+ </ul>
+ </dd>
+ </dl>
+ </div>
+ </td>
+ <td id="portal-column-content">
+ #if $browser.windowList
+ <div id="content" class="documentEditable">
+ <ul class="contentViews">
+ #for $window in $browser.windowList
+ #set $klass = $window is $browser.activeWindow and "selected" or "plain"
+ <li class="$klass"><a href="$window.url">$window.title</a></li>
+ #end for
+ </ul>
+ <div class="contentActions">
+ <ul>
+ <li>
+ <a href="javascript:toggleFullScreenMode();">
+ <img src="http://www.geodynamics.org/cig/fullscreenexpand_icon.gif"
+ alt="Toggle full screen mode"
+ title="Toggle full screen mode"
+ id="icon-full_screen" />
+ </a>
+ </li>
+ #if $browser.activeWindow.menuBar
+ #set $menuBar = $browser.activeWindow.menuBar[:]
+ #silent $menuBar.reverse()
+ #for $menu in $menuBar
+ <li>
+ <dl class="actionMenu" id="$menu.id">
+ <dt class="actionMenuHeader"><a href="$menu.url">$menu.title</a></dt>
+ <dd class="actionMenuContent">
+ <ul>
+ #for $item in $menu.items
+ #set $klass = "visualIconPadding visualIcon"
+ <li><a href="$item.url" class="$klass">$item.title</a></li>
+ #end for
+ </ul>
+ </dd>
+ </dl>
+ </li>
+ #end for
+ #endif
+ </ul>
+ </div>
+ <div class="documentContent" id="region-content">
+ $design.render($browser.activeWindow.content)
+ </div>
+ </div>
+ #endif
+ </td>
+
+<!--
+ <td id="portal-column-two">
+ <div class="visualPadding">
+ <dl class="portlet" id="portlet-tomato">
+ <dt class="portletHeader">
+ Tomato
+ </dt>
+ <dd class="portletItem">
+ Life is a tomato.
+ </dd>
+ </dl>
+ <dl class="portlet" id="portlet-tomato">
+ <dt class="portletHeader">
+ Tomato
+ </dt>
+ <dd class="portletItem">
+ Life is a tomato.
+ </dd>
+ </dl>
+ </div>
+ </td>
+-->
+
+ </tr>
+ </tbody>
+</table>
Added: cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/TreeBrowser.py
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/TreeBrowser.py (rev 0)
+++ cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/TreeBrowser.py 2008-03-22 03:37:05 UTC (rev 11498)
@@ -0,0 +1,262 @@
+#!/usr/bin/env python
+
+
+
+
+##################################################
+## DEPENDENCIES
+import sys
+import os
+import os.path
+from os.path import getmtime, exists
+import time
+import types
+import __builtin__
+from Cheetah.Version import MinCompatibleVersion as RequiredCheetahVersion
+from Cheetah.Version import MinCompatibleVersionTuple as RequiredCheetahVersionTuple
+from Cheetah.Template import Template
+from Cheetah.DummyTransaction import DummyTransaction
+from Cheetah.NameMapper import NotFound, valueForName, valueFromSearchList, valueFromFrameOrSearchList
+from Cheetah.CacheRegion import CacheRegion
+import Cheetah.Filters as Filters
+import Cheetah.ErrorCatchers as ErrorCatchers
+
+##################################################
+## MODULE CONSTANTS
+try:
+ True, False
+except NameError:
+ True, False = (1==1), (1==0)
+VFFSL=valueFromFrameOrSearchList
+VFSL=valueFromSearchList
+VFN=valueForName
+currentTime=time.time
+__CHEETAH_version__ = '2.0rc7'
+__CHEETAH_versionTuple__ = (2, 0, 0, 'candidate', 7)
+__CHEETAH_genTime__ = 1206128297.3114619
+__CHEETAH_genTimestamp__ = 'Fri Mar 21 12:38:17 2008'
+__CHEETAH_src__ = 'TreeBrowser.html'
+__CHEETAH_srcLastModified__ = 'Fri Mar 21 12:38:00 2008'
+__CHEETAH_docstring__ = 'Autogenerated by CHEETAH: The Python-Powered Template Engine'
+
+if __CHEETAH_versionTuple__ < RequiredCheetahVersionTuple:
+ raise AssertionError(
+ 'This template was compiled with Cheetah version'
+ ' %s. Templates compiled before version %s must be recompiled.'%(
+ __CHEETAH_version__, RequiredCheetahVersion))
+
+##################################################
+## CLASSES
+
+class TreeBrowser(Template):
+
+ ##################################################
+ ## CHEETAH GENERATED METHODS
+
+
+ def __init__(self, *args, **KWs):
+
+ Template.__init__(self, *args, **KWs)
+ if not self._CHEETAH__instanceInitialized:
+ cheetahKWArgs = {}
+ allowedKWs = 'searchList namespaces filter filtersLib errorCatcher'.split()
+ for k,v in KWs.items():
+ if k in allowedKWs: cheetahKWArgs[k] = v
+ self._initCheetahInstance(**cheetahKWArgs)
+
+
+ def respond(self, trans=None):
+
+
+
+ ## CHEETAH: main method generated for this template
+ if (not trans and not self._CHEETAH__isBuffering and not callable(self.transaction)):
+ trans = self.transaction # is None unless self.awake() was called
+ if not trans:
+ trans = DummyTransaction()
+ _dummyTrans = True
+ else: _dummyTrans = False
+ write = trans.response().write
+ SL = self._CHEETAH__searchList
+ _filter = self._CHEETAH__currentFilter
+
+ ########################################
+ ## START - generated method body
+
+ write('\n<div id="portal-breadcrumbs">\n <span id="breadcrumbs-you-are-here">You are here:</span> ')
+ _v = VFFSL(SL,"breadcrumbs",True) # '$breadcrumbs' on line 3, col 62
+ if _v is not None: write(_filter(_v, rawExpr='$breadcrumbs')) # from line 3, col 62.
+ write('''
+</div>
+
+
+<!--
+<div class="messages {% if messages %}active{% endif %}">{% if messages %}{{ messages|join:" " }}{% else %} {% endif %}</div>
+-->
+
+
+<table id="portal-columns">
+ <tbody>
+ <tr>
+ <td id="portal-column-one">
+ <div class="visualPadding">
+ <dl class="portlet" id="portlet-navigation-tree">
+ <dt class="portletHeader">
+ Navigation
+ </dt>
+ <dd class="portletItem lastItem">
+ <ul class="portletNavigationTree navTreeLevel0">
+ ''')
+ _v = VFFSL(SL,"navTree",True) # '$navTree' on line 23, col 33
+ if _v is not None: write(_filter(_v, rawExpr='$navTree')) # from line 23, col 33.
+ write('''
+ </ul>
+ </dd>
+ </dl>
+ </div>
+ </td>
+ <td id="portal-column-content">
+''')
+ if VFFSL(SL,"browser.windowList",True): # generated from line 30, col 17
+ write(' <div id="content" class="documentEditable">\n <ul class="contentViews">\n')
+ for window in VFFSL(SL,"browser.windowList",True): # generated from line 33, col 29
+ klass = VFFSL(SL,"window",True) is VFFSL(SL,"browser.activeWindow",True) and "selected" or "plain"
+ write(' <li class="')
+ _v = VFFSL(SL,"klass",True) # '$klass' on line 35, col 44
+ if _v is not None: write(_filter(_v, rawExpr='$klass')) # from line 35, col 44.
+ write('"><a href="')
+ _v = VFFSL(SL,"window.url",True) # '$window.url' on line 35, col 61
+ if _v is not None: write(_filter(_v, rawExpr='$window.url')) # from line 35, col 61.
+ write('">')
+ _v = VFFSL(SL,"window.title",True) # '$window.title' on line 35, col 74
+ if _v is not None: write(_filter(_v, rawExpr='$window.title')) # from line 35, col 74.
+ write('</a></li>\n')
+ write(''' </ul>
+ <div class="contentActions">
+ <ul>
+ <li>
+ <a href="javascript:toggleFullScreenMode();">
+ <img src="http://www.geodynamics.org/cig/fullscreenexpand_icon.gif"
+ alt="Toggle full screen mode"
+ title="Toggle full screen mode"
+ id="icon-full_screen" />
+ </a>
+ </li>
+''')
+ if VFFSL(SL,"browser.activeWindow.menuBar",True): # generated from line 48, col 33
+ menuBar = VFN(VFFSL(SL,"browser.activeWindow",True),"menuBar",True)[:]
+ VFN(VFFSL(SL,"menuBar",True),"reverse",False)()
+ for menu in VFFSL(SL,"menuBar",True): # generated from line 51, col 37
+ write(' <li>\n <dl class="actionMenu" id="')
+ _v = VFFSL(SL,"menu.id",True) # '$menu.id' on line 53, col 72
+ if _v is not None: write(_filter(_v, rawExpr='$menu.id')) # from line 53, col 72.
+ write('">\n <dt class="actionMenuHeader"><a href="')
+ _v = VFFSL(SL,"menu.url",True) # '$menu.url' on line 54, col 87
+ if _v is not None: write(_filter(_v, rawExpr='$menu.url')) # from line 54, col 87.
+ write('">')
+ _v = VFFSL(SL,"menu.title",True) # '$menu.title' on line 54, col 98
+ if _v is not None: write(_filter(_v, rawExpr='$menu.title')) # from line 54, col 98.
+ write('''</a></dt>
+ <dd class="actionMenuContent">
+ <ul>
+''')
+ for item in VFFSL(SL,"menu.items",True): # generated from line 57, col 57
+ klass = "visualIconPadding visualIcon"
+ write(' <li><a href="')
+ _v = VFFSL(SL,"item.url",True) # '$item.url' on line 59, col 74
+ if _v is not None: write(_filter(_v, rawExpr='$item.url')) # from line 59, col 74.
+ write('" class="')
+ _v = VFFSL(SL,"klass",True) # '$klass' on line 59, col 92
+ if _v is not None: write(_filter(_v, rawExpr='$klass')) # from line 59, col 92.
+ write('">')
+ _v = VFFSL(SL,"item.title",True) # '$item.title' on line 59, col 100
+ if _v is not None: write(_filter(_v, rawExpr='$item.title')) # from line 59, col 100.
+ write('</a></li>\n')
+ write(''' </ul>
+ </dd>
+ </dl>
+ </li>
+''')
+ write(''' </ul>
+ </div>
+ <div class="documentContent" id="region-content">
+ ''')
+ _v = VFN(VFFSL(SL,"design",True),"render",False)(VFFSL(SL,"browser.activeWindow.content",True)) # '$design.render($browser.activeWindow.content)' on line 70, col 29
+ if _v is not None: write(_filter(_v, rawExpr='$design.render($browser.activeWindow.content)')) # from line 70, col 29.
+ write('''
+ </div>
+ </div>
+''')
+ write(''' </td>
+
+<!--
+ <td id="portal-column-two">
+ <div class="visualPadding">
+ <dl class="portlet" id="portlet-tomato">
+ <dt class="portletHeader">
+ Tomato
+ </dt>
+ <dd class="portletItem">
+ Life is a tomato.
+ </dd>
+ </dl>
+ <dl class="portlet" id="portlet-tomato">
+ <dt class="portletHeader">
+ Tomato
+ </dt>
+ <dd class="portletItem">
+ Life is a tomato.
+ </dd>
+ </dl>
+ </div>
+ </td>
+-->
+
+ </tr>
+ </tbody>
+</table>
+''')
+
+ ########################################
+ ## END - generated method body
+
+ return _dummyTrans and trans.response().getvalue() or ""
+
+ ##################################################
+ ## CHEETAH GENERATED ATTRIBUTES
+
+
+ _CHEETAH__instanceInitialized = False
+
+ _CHEETAH_version = __CHEETAH_version__
+
+ _CHEETAH_versionTuple = __CHEETAH_versionTuple__
+
+ _CHEETAH_genTime = __CHEETAH_genTime__
+
+ _CHEETAH_genTimestamp = __CHEETAH_genTimestamp__
+
+ _CHEETAH_src = __CHEETAH_src__
+
+ _CHEETAH_srcLastModified = __CHEETAH_srcLastModified__
+
+ _mainCheetahMethod_for_TreeBrowser= 'respond'
+
+## END CLASS DEFINITION
+
+if not hasattr(TreeBrowser, '_initCheetahAttributes'):
+ templateAPIClass = getattr(TreeBrowser, '_CHEETAH_templateClass', Template)
+ templateAPIClass._addCheetahPlumbingCodeToClass(TreeBrowser)
+
+
+# CHEETAH was developed by Tavis Rudd and Mike Orr
+# with code, advice and input from many other volunteers.
+# For more information visit http://www.CheetahTemplate.org/
+
+##################################################
+## if run from command line:
+if __name__ == '__main__':
+ from Cheetah.TemplateCmdLineIface import CmdLineIface
+ CmdLineIface(templateObj=TreeBrowser()).run()
+
+
Added: cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/__init__.py
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/__init__.py (rev 0)
+++ cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/__init__.py 2008-03-22 03:37:05 UTC (rev 11498)
@@ -0,0 +1,113 @@
+
+
+from Desktop import Desktop
+from Document import Document
+from TreeBrowser import TreeBrowser
+
+
+class PloneDesign(object):
+
+ def render(self, item):
+ v = 'render' + item.__class__.__name__
+ m = getattr(self, v)
+ return m(item)
+
+ def renderAsDocument(self, item):
+ template = self.newDocumentTemplate()
+ template.title = item.title
+ template.body = self.render(item)
+ return template
+
+ def renderDesktop(self, desktop):
+ template = self.newDesktopTemplate()
+ template.desktop = desktop
+ template.activeWindow = self.render(desktop.activeWindow)
+ template.root = desktop.url
+ return template
+
+ def renderFileBrowser(self, browser):
+ return self.renderTreeBrowser(browser)
+
+ def renderTreeBrowser(self, browser):
+ template = self.newTreeBrowserTemplate()
+ template.design = self
+ template.browser = browser
+ template.breadcrumbs = self.renderBreadcrumbs(browser.breadcrumbs())
+ template.navTree = browser.renderNavTree(self)
+ return template
+
+ def renderStaticContent(self, content):
+ return content.html
+
+ navTreeItemFormat = """
+<li class="navTreeItem %s">
+ <div class="visualIcon %s">
+ <a href="%s" class="visualIconPadding %s">%s</a>
+ </div>
+ %s
+</li>"""
+
+ def renderNavTreeDirectory(self, title, url, level, items, selected):
+ aClass = ""
+ if items:
+ items = '<ul class="navTree navTreeLevel%d">%s</ul>' % (level, items)
+ if selected:
+ aClass = "navTreeCurrentItem"
+ return self.navTreeItemFormat % ("visualNoMarker", "contenttype-folder", url, aClass, title, items)
+
+ def renderNavTreeFile(self, title, url, selected):
+ aClass = ""
+ if selected:
+ aClass = "navTreeCurrentItem"
+ return self.navTreeItemFormat % ("", "contenttype-document", url, aClass, title, "")
+
+ def renderForm(self, form):
+ class FormRenderer(object):
+ def render(self, item):
+ v = 'render' + item.__class__.__name__
+ m = getattr(self, v)
+ return m(item)
+ def renderForm(self, form):
+ body = ''
+ for item in form.items:
+ body += self.render(item)
+ return '<form>' + body + '</form>'
+ def renderFieldSet(self, fieldSet):
+ body = ''
+ for item in fieldSet.items:
+ body += self.render(item)
+ if fieldSet.legend:
+ legend = '<legend>%s</legend>' % fieldSet.legend
+ else:
+ legend = ''
+ return '<fieldset>' + legend + body + '</fieldset>'
+ def renderIntegerField(self, field): return self.renderField(field)
+ def renderFloatField(self, field): return self.renderField(field)
+ def renderSelectField(self, field): return self.renderField(field)
+ def renderField(self, field):
+ if field.tip:
+ tip = '<a title="%s">?</a>' % field.tip
+ else:
+ tip = ''
+ if field.label:
+ label = '<label for="id_%s">%s:</label> ' % (field.field.field_name, field.label)
+ else:
+ label = ''
+ return '<p>' + label + field.field.render(None) + tip
+ renderer = FormRenderer()
+ return renderer.render(form)
+
+ def newDocumentTemplate(self):
+ return Document()
+
+ def newDesktopTemplate(self):
+ return Desktop()
+
+ def newTreeBrowserTemplate(self):
+ return TreeBrowser()
+
+ def renderBreadcrumbs(self, breadcrumbs):
+ breadcrumbSeparator = ' <span class="breadcrumbSeparator">→</span> '
+ lastFormat = '<span dir="ltr"><span>%s</span></span>'
+ links = ['<a href="%s">%s</a>' % (url, title) for url, title in breadcrumbs[:-1]]
+ return breadcrumbSeparator.join(links + [lastFormat % breadcrumbs[-1][1]])
Added: cs/portal/trunk/seismo/SeismoWebPortal/gui.py
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/gui.py (rev 0)
+++ cs/portal/trunk/seismo/SeismoWebPortal/gui.py 2008-03-22 03:37:05 UTC (rev 11498)
@@ -0,0 +1,177 @@
+
+
+class WindowParent(object):
+
+ def __init__(self):
+ self.windowList = []
+ self.activeWindow = None
+
+ def insertWindow(self, newWindow):
+ self.windowList.append(newWindow)
+
+ def selectWindow(self, aWindow):
+ if not aWindow in self.windowList:
+ self.insertWindow(aWindow)
+ self.activeWindow = aWindow
+
+
+class Desktop(WindowParent):
+
+ def __init__(self, url, title):
+ WindowParent.__init__(self)
+ self.url = url
+ self.title = title
+ self.user = None
+
+
+class Window(object):
+
+ def __init__(self, url, title):
+ self.url = url
+ self.title = title
+
+
+class ParentWindow(Window, WindowParent):
+
+ def __init__(self, url, title):
+ Window.__init__(self, url, title)
+ WindowParent.__init__(self)
+
+
+
+class ChildWindow(Window):
+
+ def __init__(self, url, title):
+ Window.__init__(self, url, title)
+ self.menuBar = None
+ self.content = None
+ return
+
+
+class Menu(object):
+
+ def __init__(self, id, url, title, items):
+ self.id = id
+ self.url = url
+ self.title = title
+ self.items = items
+
+
+class MenuItem(object):
+
+ def __init__(self, url, title):
+ self.url = url
+ self.title = title
+
+
+class StaticContent(object):
+ def __init__(self, html):
+ self.html = html
+
+
+#------------------------------------------------------------------------
+# virtual file system
+
+
+class Node(object):
+
+ def __init__(self, name, title):
+ self.name = name
+ self.title = title
+
+ def urlFragment(self): return self.name + '/'
+
+ def renderNavTree(self, urlRoot, path, level, design):
+ return ""
+
+
+class Directory(Node):
+
+ def __init__(self, name, title, contents):
+ Node.__init__(self, name, title)
+ self.contents = contents
+
+ self.index = {}
+ for node in contents:
+ self.index[node.name] = node
+
+ return
+
+ def appendNode(self, node):
+ self.contents.append(node)
+ self.index[node.name] = node
+
+ def xresolve(self, request, path):
+ if not path:
+ return [self]
+ name = path.pop(0)
+ try:
+ item = self.index[name]
+ except KeyError:
+ if not name:
+ return [self]
+ raise Http404
+ return [self] + item.resolve(request, path)
+
+ def renderNavTree(self, urlRoot, path, level, design):
+ url = urlRoot + self.urlFragment()
+ items = ""
+ selected = False
+ if len(path) > level and path[level] is self:
+ items = self.renderNavTreeItems(url, path, level, design)
+ if level == len(path) - 1:
+ selected = True
+ return design.renderNavTreeDirectory(self.title, url, level, items, selected)
+
+ def renderNavTreeItems(self, urlRoot, path, level, design):
+ items = ""
+ for node in self.contents:
+ items += node.renderNavTree(urlRoot, path, level + 1, design)
+ return items
+
+
+class File(Node):
+
+ def xresolve(self, request, path):
+ if path:
+ raise Http404
+ return [self]
+
+ def urlFragment(self): return self.name
+
+ def renderNavTree(self, urlRoot, path, level, design):
+ url = urlRoot + self.urlFragment()
+ selected = len(path) > level and path[level] is self
+ return design.renderNavTreeFile(self.title, url, selected)
+
+
+
+class TreeBrowser(ParentWindow):
+
+ def __init__(self, url, title, root):
+ ParentWindow.__init__(self, url, title)
+ self.root = root
+ self.path = [root]
+
+ def xresolve(self, request, path):
+ self.path = self.root.resolve(request, path)
+ return [self] + self.path[1:]
+
+ def breadcrumbs(self):
+ path = self.path
+ root = self.root #path[0]
+ path = path[1:]
+ bc = [(self.url, self.title)]
+ urlRoot = self.url
+ for node in path:
+ url = urlRoot + node.urlFragment()
+ crumb = url, node.title
+ bc.append(crumb)
+ return bc
+
+ def renderNavTree(self, design):
+ return self.root.renderNavTreeItems(self.url, self.path, 0, design)
+
+
+class FileBrowser(TreeBrowser):
+ pass
Added: cs/portal/trunk/seismo/SeismoWebPortal/list_detail.py
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/list_detail.py (rev 0)
+++ cs/portal/trunk/seismo/SeismoWebPortal/list_detail.py 2008-03-22 03:37:05 UTC (rev 11498)
@@ -0,0 +1,126 @@
+from django.template import loader, RequestContext
+from django.http import Http404, HttpResponse
+from django.core.xheaders import populate_xheaders
+from django.core.paginator import ObjectPaginator, InvalidPage
+from django.core.exceptions import ObjectDoesNotExist
+import gui
+
+def object_list(request, desktop, window, queryset, 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.
+
+ Templates: ``<app_label>/<model_name>_list.html``
+ Context:
+ object_list
+ list of objects
+ is_paginated
+ are the results paginated?
+ results_per_page
+ number of objects per page (if paginated)
+ has_next
+ is there a next page?
+ has_previous
+ is there a prev page?
+ page
+ the current page
+ next
+ the next page
+ previous
+ the previous page
+ pages
+ number of pages, total
+ hits
+ number of objects, total
+ """
+ if extra_context is None: extra_context = {}
+ queryset = queryset._clone()
+ if paginate_by:
+ paginator = ObjectPaginator(queryset, paginate_by)
+ if not page:
+ page = request.GET.get('page', 1)
+ try:
+ page = int(page)
+ object_list = paginator.get_page(page - 1)
+ except (InvalidPage, ValueError):
+ if page == 1 and allow_empty:
+ object_list = []
+ else:
+ raise Http404
+ c = RequestContext(request, {
+ '%s_list' % template_object_name: object_list,
+ 'is_paginated': paginator.pages > 1,
+ 'results_per_page': paginate_by,
+ 'has_next': paginator.has_next_page(page - 1),
+ 'has_previous': paginator.has_previous_page(page - 1),
+ 'page': page,
+ 'next': page + 1,
+ 'previous': page - 1,
+ 'pages': paginator.pages,
+ 'hits' : paginator.hits,
+ }, context_processors)
+ else:
+ c = RequestContext(request, {
+ '%s_list' % template_object_name: queryset,
+ 'is_paginated': False
+ }, context_processors)
+ if not allow_empty and len(queryset) == 0:
+ raise Http404
+ for key, value in extra_context.items():
+ if callable(value):
+ c[key] = value()
+ else:
+ c[key] = value
+ if not template_name:
+ 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)
+ window.content = gui.StaticContent(t.render(c))
+ desktop.activeWindow.selectWindow(window)
+ return desktop
+
+def object_detail(request, desktop, window, queryset, object_id=None, slug=None,
+ slug_field=None, template_name=None, template_name_field=None,
+ template_loader=loader, extra_context=None,
+ context_processors=None, template_object_name='object',
+ mimetype=None):
+ """
+ Generic list of objects.
+
+ Templates: ``<app_label>/<model_name>_detail.html``
+ Context:
+ object
+ 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)
+ if not template_name:
+ template_name = "%s/%s_detail.html" % (model._meta.app_label, model._meta.object_name.lower())
+ if template_name_field:
+ template_name_list = [getattr(obj, template_name_field), template_name]
+ t = template_loader.select_template(template_name_list)
+ else:
+ t = template_loader.get_template(template_name)
+ c = RequestContext(request, {
+ template_object_name: obj,
+ }, context_processors)
+ for key, value in extra_context.items():
+ if callable(value):
+ c[key] = value()
+ else:
+ c[key] = value
+ window.content = gui.StaticContent(t.render(c))
+ desktop.activeWindow.selectWindow(window)
+ return desktop
Modified: cs/portal/trunk/seismo/SeismoWebPortal/static/css/style.css
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/static/css/style.css 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/static/css/style.css 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,624 +1,620 @@
-
-body {
- font-family: sans-serif;
-}
-
-img {
- border-width: 0;
-}
-
-#logo {
- vertical-align: middle;
-}
-
-.illustration {
- margin-left: auto;
- margin-right: auto;
-}
-
-.caption {
- font-style: italic;
-}
-
-li.selected {
- font-weight: bold;
- color: black;
- background-color: orange;
-}
-
-
-/* banner */
-
-.banner #logos {
- float: left;
-}
-
-.banner img {
- vertical-align: middle;
-}
-
-.banner #sflogo {
- padding-top: 16px;
-}
-
-.banner h1 {
- margin-top: 0;
- margin-bottom: 0;
- padding-top: 16px;
-}
-
-.banner #sf3dg {
- color: navy;
-}
-
-.banner #webportal {
- color: gray;
-}
-
-
-/* messages */
-
-.messages {
- font-weight: bold;
- padding: .2em .2em .2em .2em;
- border: thin solid white;
- clear: both;
-}
-
-.active {
- background-color: yellow;
- border: thin solid black;
-}
-
-
-/* help */
-
-.help {
- border-style: double;
- border-color: black;
- background-color: #ffc;
-}
-
-div.help {
- padding: 1em 1em 1em 1em;
-}
-
-span.help {
- margin: 0em .2em 1em 1em;
- padding: .2em .2em .2em .2em;
- float: left;
- width: 20em;
-}
-
-dl.help {
- margin: 1em 1em 1em 1em;
- padding: 1em 1em 1em 1em;
- clear: both;
-}
-
-dl.help dt {
- font-weight: bold;
-}
-
-.help div.illustration {
- border: 1px solid black;
- padding: 1em 1em 1em 1em;
- background-color: white;
-}
-
-
-/* home, login */
-
-div.splash {
- font-size: large;
- text-align: center;
-}
-
-#presented {
- display: none;
-}
-
-.producers li {
- list-style: none;
-}
-
-.producers a {
- color: gray;
- text-decoration: none;
- text-transform: uppercase;
-}
-
-.nameplate {
- width: 80%;
- margin-top: 1em;
- margin-left: auto;
- margin-right: auto;
- color: gray;
-}
-
-.nameplate h1 {
- color: white;
- background-color: navy;
- font-family: serif;
- font-size: 48pt;
- font-weight: normal;
- margin-top: 0;
- margin-bottom: 0;
-}
-
-.splash a.button {
- text-transform: capitalize;
-}
-
-.links li {
- list-style: none;
- display: inline;
- padding-left: .5em;
- padding-right: .5em;
- border-right: 1px solid black;
- font-size: small;
-}
-
-.links li.last {
- border-right: 0;
-}
-
-#sponsored {
- /*display: none;*/
- font-style: italic;
-}
-
-ul.sponsors {
- text-align: center;
- background: white;
-}
-
-.sponsors li {
- list-style: none;
- display: inline;
- margin-left: 1em;
- margin-right: 1em;
-}
-
-.sponsors img {
- vertical-align: middle;
-}
-
-
-/* registration */
-
-#usermap {
- width: 500px;
-}
-
-
-/* login display */
-
-div.login {
- float: right;
- background-color: white;
-}
-
-.login li {
- list-style: none;
-}
-
-.login li {
- display: inline;
- padding-left: .5em;
- padding-right: .5em;
-}
-
-#greeting {
- font-weight: bold;
- font-style: italic;
-}
-
-
-/* taskbar */
-
-div.taskbar {
- clear: both;
-}
-
-.taskbar ul {
- list-style: none;
- border-top: 1px solid black;
- border-bottom: 1px solid black;
- padding-top: 2px;
- padding-bottom: 2px;
- margin-left: 0;
- background-color: #eee;
- line-height: 200%;
-}
-
-.taskbar li {
- display: inline;
- border-style: outset;
- font-size: large;
- margin-left: .1em;
- margin-right: .1em;
-}
-
-.taskbar a {
- text-decoration: none;
- color: black;
- padding-left: 1em;
- padding-right: 1em;
-}
-
-.taskbar li.selected {
- border-style: inset;
-}
-
-
-/* tabs */
-
-div.tabs {
- clear: both;
-}
-
-.tabs ul {
- list-style: none;
- margin-left: 0;
- border-bottom: thick solid orange;
-}
-
-.tabs li {
- display: inline;
- border-top: 1px solid black;
- border-right: 1px solid black;
- font-size: large;
-}
-
-.tabs li.first {
- border-left: 1px solid black;
-}
-
-.tabs a {
- text-decoration: none;
- color: black;
- padding-left: 1em;
- padding-right: 1em;
-}
-
-.tabs li.selected {
- border-bottom: thin solid orange;
-}
-
-
-/* titlebars */
-
-.titlebar {
-/*
- border: thin solid blue;
- background-color: #ccf;
-*/
- color: white;
-}
-
-h1.titlebar {
- background-color: navy;
-}
-
-h2.titlebar {
- background-color: blue;
-}
-
-.titlebar img {
- vertical-align: middle;
-}
-
-
-/* toolbars */
-
-div.toolbar {
- padding: .4em 1em .4em 1em;
- margin: .6em 0em .6em 0em;
- border-top: 1px solid black;
- border-bottom: 1px solid black;
- background-color: #eee;
-}
-
-.toolbar img {
- vertical-align: middle;
-}
-
-.toolbar form {
- display: inline;
-}
-
-
-/* infobars */
-
-.infobar {
- border-bottom: medium double black;
-}
-
-
-/* tables */
-
-table {
- border: thin solid black;
-}
-
-table caption {
- font-size: large;
- background-color: #ccf;
-}
-
-.even {
- background-color: #eef;
-}
-
-tr.title {
- color: white;
- background-color: #88f;
- border-top: 1px solid black;
-}
-
-th {
- text-align: left;
- padding-left: 1em;
- padding-right: 1em;
-}
-
-th.colgroup {
- text-align: center;
- background-color: #ffd;
- border-bottom: thin dotted purple;
-}
-
-td {
- padding-left: 1em;
- padding-right: 1em;
-}
-
-ul.output {
- list-style: none;
- font-family: monospace;
- margin: 0 0 0 0;
- padding: 0 0 0 0;
-}
-
-.output li {
- display: inline;
-}
-
-.True {
- text-transform: lowercase;
-}
-
-.False {
- text-transform: lowercase;
-}
-
-span.True:before {
- content: url(/specfem3dglobe/pics/icon-yes.gif) " ";
-}
-
-span.False:before {
- content: url(/specfem3dglobe/pics/icon-no.gif) " ";
-}
-
-.float {
- text-align: right;
-}
-
-.int {
- text-align: right;
-}
-
-.notApplicable {
- color: gray;
- text-align: center;
-}
-
-.inlineInfo {
- font-size: small;
-}
-
-table .beachball {
- float: left;
-}
-
-.new {
- background-color: yellow;
-}
-
-
-/* detail views */
-
-.properties dt {
- width: 50%;
- font-weight: bold;
- float: left;
- text-align: right;
- margin-right: 1ex;
- clear: both;
- padding-top: .2em;
- padding-bottom: .2em;
-}
-
-.properties dt:after {
- content: ":";
-}
-
-.properties dd {
- height: 1.3em;
- padding-top: .2em;
- padding-bottom: .2em;
-}
-
-/*** experimental floating properties
-div.box {
- float: left;
- padding: 1em;
- margin: 1em;
- border: 1px solid gray;
-}
-
-div.box h3 {
- margin: 0;
- text-align: center;
-}
-***/
-
-/* for experimental confirmation page */
-table.properties td {
- border: 1px solid gray;
-}
-
-
-
-/* forms */
-
-fieldset {
- margin: 1em;
- padding: 1em;
- clear: both;
-}
-
-form fieldset legend {
- font-size: x-large;
-}
-
-fieldset fieldset {
- float: left;
-}
-
-fieldset fieldset legend {
- font-size: large;
-}
-
-form div {
- padding-top: .2em;
- padding-bottom: .2em;
- clear: both;
-}
-
-form p {
- clear: both;
-}
-
-.error {
- font-weight: bold;
- color: red;
-}
-
-form span.error {
- margin: 0em .2em 1em 1em;
- padding: .2em .2em .2em .2em;
-}
-
-.computed {
- font-weight: bold;
- background-color: #fcc;
- border: thin solid red;
-}
-
-label.before {
- font-weight: bold;
- float: left;
- text-align: right;
- margin-right: 1ex;
-}
-
-.tab30ex label.before {
- width: 30ex;
-}
-
-.tab30ex fieldset label.before {
- /* account for the fieldset margin & padding */
- width: 26ex;
-}
-
-.tab30ex label.after {
- /*float: left;*/
-}
-
-.tab30ex .checkbox { margin-left: 30ex; }
-.tab30ex .radio { margin-left: 30ex; }
-
-.tab30ex fieldset .checkbox {
- /* account for the fieldset margin & padding */
- margin-left: 26ex;
-}
-
-.tab30ex fieldset .radio {
- /* account for the fieldset margin & padding */
- margin-left: 26ex;
-}
-
-.tab30ex fieldset fieldset .checkbox { margin-left: 0; }
-.tab30ex fieldset fieldset .radio { margin-left: 0; }
-
-.radio ul {
- list-style: none;
-}
-
-label.before:after {
- content: ":";
-}
-
-.tab30ex input.vIntegerField {
- float: left;
-}
-
-.tab30ex input.vFloatField {
- float: left;
-}
-
-.tab30ex input.vCheckboxField {
- float: left;
-}
-
-.tab30ex select.vSelectField {
- float: left;
- margin-bottom: 1em;
-}
-
-input.reset {
- float: right;
-}
-
-input.submit {
- margin-top: 2em;
- margin-bottom: 2em;
-}
-
-.tab30ex input.submit {
- margin-left: 30ex;
-}
-
-
-/* events */
-
-#cmtsolutionIllustration {
- width: 700px;
-}
-
-#sourceBeachballMw {
- font-size: larger;
-}
-
-.cmtsolution pre {
- border: 1px solid black;
- padding: 1em;
- background-color: #eee;
-}
-
-
-/* stations */
-
-#stations {
- width: 576px;
-}
-
-
-
-/* misc. */
-
-.greek {
- text-transform: none;
-}
+
+img {
+ border-width: 0;
+}
+
+#logo {
+ vertical-align: middle;
+}
+
+.illustration {
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.caption {
+ font-style: italic;
+}
+
+
+/* banner */
+
+.banner #logos {
+ float: left;
+}
+
+.banner img {
+ vertical-align: middle;
+}
+
+.banner #sflogo {
+ padding-top: 16px;
+}
+
+.banner h1 {
+ margin-top: 0;
+ margin-bottom: 0;
+ padding-top: 16px;
+}
+
+.banner #sf3dg {
+ color: navy;
+}
+
+.banner #webportal {
+ color: gray;
+}
+
+
+/* messages */
+
+.messages {
+ font-weight: bold;
+ padding: .2em .2em .2em .2em;
+ border: thin solid white;
+ clear: both;
+}
+
+.active {
+ background-color: yellow;
+ border: thin solid black;
+}
+
+
+/* help */
+
+.help {
+ border-style: double;
+ border-color: black;
+ background-color: #ffc;
+}
+
+div.help {
+ padding: 1em 1em 1em 1em;
+}
+
+span.help {
+ margin: 0em .2em 1em 1em;
+ padding: .2em .2em .2em .2em;
+ float: left;
+ width: 20em;
+}
+
+dl.help {
+ margin: 1em 1em 1em 1em;
+ padding: 1em 1em 1em 1em;
+ clear: both;
+}
+
+dl.help dt {
+ font-weight: bold;
+}
+
+.help div.illustration {
+ border: 1px solid black;
+ padding: 1em 1em 1em 1em;
+ background-color: white;
+}
+
+
+/* home, login */
+
+div.splash {
+ font-size: large;
+ text-align: center;
+}
+
+#presented {
+ display: none;
+}
+
+.producers li {
+ list-style: none;
+}
+
+.producers a {
+ color: gray;
+ text-decoration: none;
+ text-transform: uppercase;
+}
+
+.nameplate {
+ width: 80%;
+ margin-top: 1em;
+ margin-left: auto;
+ margin-right: auto;
+ color: gray;
+}
+
+.nameplate h1 {
+ color: white;
+ background-color: navy;
+ font-family: serif;
+ font-size: 48pt;
+ font-weight: normal;
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+.splash a.button {
+ text-transform: capitalize;
+}
+
+.links li {
+ list-style: none;
+ display: inline;
+ padding-left: .5em;
+ padding-right: .5em;
+ border-right: 1px solid black;
+ font-size: small;
+}
+
+.links li.last {
+ border-right: 0;
+}
+
+#sponsored {
+ /*display: none;*/
+ font-style: italic;
+}
+
+ul.sponsors {
+ text-align: center;
+ background: white;
+}
+
+.sponsors li {
+ list-style: none;
+ display: inline;
+ margin-left: 1em;
+ margin-right: 1em;
+}
+
+.sponsors img {
+ vertical-align: middle;
+}
+
+
+/* registration */
+
+#usermap {
+ width: 500px;
+}
+
+
+/* login display */
+
+div.login {
+ float: right;
+ background-color: white;
+}
+
+.login li {
+ list-style: none;
+}
+
+.login li {
+ display: inline;
+ padding-left: .5em;
+ padding-right: .5em;
+}
+
+#greeting {
+ font-weight: bold;
+ font-style: italic;
+}
+
+
+/* taskbar */
+
+div.taskbar {
+ clear: both;
+}
+
+.taskbar ul {
+ list-style: none;
+ border-top: 1px solid black;
+ border-bottom: 1px solid black;
+ padding-top: 2px;
+ padding-bottom: 2px;
+ margin-left: 0;
+ background-color: #eee;
+ line-height: 200%;
+}
+
+.taskbar li {
+ display: inline;
+ border-style: outset;
+ font-size: large;
+ margin-left: .1em;
+ margin-right: .1em;
+}
+
+.taskbar a {
+ text-decoration: none;
+ color: black;
+ padding-left: 1em;
+ padding-right: 1em;
+}
+
+.taskbar li.selected {
+ border-style: inset;
+ font-weight: bold;
+ color: black;
+ background-color: orange;
+}
+
+
+/* tabs */
+
+div.tabs {
+ clear: both;
+}
+
+.tabs ul {
+ list-style: none;
+ margin-left: 0;
+ border-bottom: thick solid orange;
+}
+
+.tabs li {
+ display: inline;
+ border-top: 1px solid black;
+ border-right: 1px solid black;
+ font-size: large;
+}
+
+.tabs li.first {
+ border-left: 1px solid black;
+}
+
+.tabs a {
+ text-decoration: none;
+ color: black;
+ padding-left: 1em;
+ padding-right: 1em;
+}
+
+.tabs li.selected {
+ border-bottom: thin solid orange;
+ font-weight: bold;
+ color: black;
+ background-color: orange;
+}
+
+
+/* titlebars */
+
+.titlebar {
+/*
+ border: thin solid blue;
+ background-color: #ccf;
+*/
+ color: white;
+}
+
+h1.titlebar {
+ background-color: navy;
+}
+
+h2.titlebar {
+ background-color: blue;
+}
+
+.titlebar img {
+ vertical-align: middle;
+}
+
+
+/* toolbars */
+
+div.toolbar {
+ padding: .4em 1em .4em 1em;
+ margin: .6em 0em .6em 0em;
+ border-top: 1px solid black;
+ border-bottom: 1px solid black;
+ background-color: #eee;
+}
+
+.toolbar img {
+ vertical-align: middle;
+}
+
+.toolbar form {
+ display: inline;
+}
+
+
+/* infobars */
+
+.infobar {
+ border-bottom: medium double black;
+}
+
+
+/* tables */
+
+table.cool {
+ border: thin solid black;
+}
+
+table.cool caption {
+ font-size: large;
+ background-color: #ccf;
+}
+
+table.cool .even {
+ background-color: #eef;
+}
+
+table.cool tr.title {
+ color: white;
+ background-color: #88f;
+ border-top: 1px solid black;
+}
+
+table.cool th {
+ text-align: left;
+ padding-left: 1em;
+ padding-right: 1em;
+}
+
+table.cool th.colgroup {
+ text-align: center;
+ background-color: #ffd;
+ border-bottom: thin dotted purple;
+}
+
+table.cool td {
+ padding-left: 1em;
+ padding-right: 1em;
+}
+
+ul.output {
+ list-style: none;
+ font-family: monospace;
+ margin: 0 0 0 0;
+ padding: 0 0 0 0;
+}
+
+.output li {
+ display: inline;
+}
+
+.True {
+ text-transform: lowercase;
+}
+
+.False {
+ text-transform: lowercase;
+}
+
+span.True:before {
+ content: url(/specfem3dglobe/pics/icon-yes.gif) " ";
+}
+
+span.False:before {
+ content: url(/specfem3dglobe/pics/icon-no.gif) " ";
+}
+
+.float {
+ text-align: right;
+}
+
+.int {
+ text-align: right;
+}
+
+.notApplicable {
+ color: gray;
+ text-align: center;
+}
+
+.inlineInfo {
+ font-size: small;
+}
+
+table .beachball {
+ float: left;
+}
+
+.new {
+ background-color: yellow;
+}
+
+
+/* detail views */
+
+.properties dt {
+ width: 50%;
+ font-weight: bold;
+ float: left;
+ text-align: right;
+ margin-right: 1ex;
+ clear: both;
+ padding-top: .2em;
+ padding-bottom: .2em;
+}
+
+.properties dt:after {
+ content: ":";
+}
+
+.properties dd {
+ height: 1.3em;
+ padding-top: .2em;
+ padding-bottom: .2em;
+}
+
+/*** experimental floating properties
+div.box {
+ float: left;
+ padding: 1em;
+ margin: 1em;
+ border: 1px solid gray;
+}
+
+div.box h3 {
+ margin: 0;
+ text-align: center;
+}
+***/
+
+/* for experimental confirmation page */
+table.properties td {
+ border: 1px solid gray;
+}
+
+
+
+/* forms */
+
+fieldset {
+ margin: 1em;
+ padding: 1em;
+ clear: both;
+}
+
+form fieldset legend {
+ font-size: larger;
+}
+
+fieldset fieldset {
+ float: left;
+}
+
+fieldset fieldset legend {
+ font-size: normal;
+}
+
+form div {
+ padding-top: .2em;
+ padding-bottom: .2em;
+ clear: both;
+}
+
+form p {
+ clear: both;
+}
+
+.error {
+ font-weight: bold;
+ color: red;
+}
+
+form span.error {
+ margin: 0em .2em 1em 1em;
+ padding: .2em .2em .2em .2em;
+}
+
+.computed {
+ font-weight: bold;
+ background-color: #fcc;
+ border: thin solid red;
+}
+
+label.before {
+ font-weight: bold;
+ float: left;
+ text-align: right;
+ margin-right: 1ex;
+}
+
+.tab30ex label.before {
+ width: 30ex;
+}
+
+.tab30ex fieldset label.before {
+ /* account for the fieldset margin & padding */
+ width: 26ex;
+}
+
+.tab30ex label.after {
+ /*float: left;*/
+}
+
+.tab30ex .checkbox { margin-left: 30ex; }
+.tab30ex .radio { margin-left: 30ex; }
+
+.tab30ex fieldset .checkbox {
+ /* account for the fieldset margin & padding */
+ margin-left: 26ex;
+}
+
+.tab30ex fieldset .radio {
+ /* account for the fieldset margin & padding */
+ margin-left: 26ex;
+}
+
+.tab30ex fieldset fieldset .checkbox { margin-left: 0; }
+.tab30ex fieldset fieldset .radio { margin-left: 0; }
+
+.radio ul {
+ list-style: none;
+}
+
+label.before:after {
+ content: ":";
+}
+
+.tab30ex input.vIntegerField {
+ float: left;
+}
+
+.tab30ex input.vFloatField {
+ float: left;
+}
+
+.tab30ex input.vCheckboxField {
+ float: left;
+}
+
+.tab30ex select.vSelectField {
+ float: left;
+ margin-bottom: 1em;
+}
+
+input.reset {
+ float: right;
+}
+
+input.submit {
+ margin-top: 2em;
+ margin-bottom: 2em;
+}
+
+.tab30ex input.submit {
+ margin-left: 30ex;
+}
+
+
+/* events */
+
+#cmtsolutionIllustration {
+ width: 700px;
+}
+
+#sourceBeachballMw {
+ font-size: larger;
+}
+
+.cmtsolution pre {
+ border: 1px solid black;
+ padding: 1em;
+ background-color: #eee;
+}
+
+
+/* stations */
+
+#stations {
+ width: 576px;
+}
+
+
+
+/* misc. */
+
+.greek {
+ text-transform: none;
+}
Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/404.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/404.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/404.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,10 +1,4 @@
-{% extends "SeismoWebPortal/root.html" %}
-
-{% block body %}
-
<p><a href="/specfem3dglobe/"><img id=logo src="/specfem3dglobe/pics/specfem3dg_logo.jpg" width=99 height=94>Home</a>
<h1>Not Found</h1>
-
-{% endblock %}
Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/500.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/500.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/500.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,10 +1,4 @@
-{% extends "SeismoWebPortal/root.html" %}
-
-{% block body %}
-
<p><a href="/specfem3dglobe/"><img id=logo src="/specfem3dglobe/pics/specfem3dg_logo.jpg" width=99 height=94>Home</a>
<h1>Internal Server Error</h1>
-
-{% endblock %}
Deleted: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/base.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/base.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/base.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,30 +0,0 @@
-
-{% extends "SeismoWebPortal/root.html" %}
-
-<!-- Django bug? -->
-{% block scripts %}
-{% endblock %}
-
-{% block body %}
-
-<div class=login>
- <ul>
- <li id=greeting>{% if user.is_anonymous %}Welcome.{% else %}Welcome, {{ user.first_name }} ({{ user.username }}).{% endif %}
- <li><a href="/specfem3dglobe/logout/">logout</a>
- </ul>
-</div>
-
-<div class=banner>
- <div id=logos>
- <a href="http://www.geodynamics.org/"><img id=ciglogo src="/specfem3dglobe/pics/cig-logo_small-initials.gif"></a>
- <a href="/specfem3dglobe/"><img id=sflogo src="/specfem3dglobe/pics/specfem3dg_logo.jpg" width=99 height=94></a>
- </div>
- <h1><span id=sf3dg>SPECFEM 3D GLOBE</span> <span id=webportal>Web Portal</span></h1>
-</div>
-
-<div class="messages {% if messages %}active{% endif %}">{% if messages %}{{ messages|join:" " }}{% else %} {% endif %}</div>
-
-{% block desktop %}
-{% endblock %}
-
-{% endblock %}
Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/event_confirm_delete.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/event_confirm_delete.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/event_confirm_delete.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,13 +1,7 @@
-{% extends "SeismoWebPortal/objects.html" %}
+<h2>delete event</h2>
-{% block content %}
-
-<h2 class=titlebar>delete event</h2>
-
<form method="post" action="/specfem3dglobe/events/{{ object.id }}/delete/">
<p>Are you sure you want to delete the event "{{ object }}"?
<p><input type="submit" value="Delete" />
</form>
-
-{% endblock %}
Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/event_detail.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/event_detail.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/event_detail.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,18 +1,7 @@
-{% extends "SeismoWebPortal/events.html" %}
+<h2>{{ object.name }}</h2>
-{% 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/seismo/SeismoWebPortal/templates/SeismoWebPortal/event_form.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/event_form.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/event_form.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,10 +1,6 @@
-{% extends "SeismoWebPortal/objects.html" %}
+<h2>rename event</h2>
-{% 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 %}
@@ -24,5 +20,3 @@
</div> <!-- tab30ex -->
</form>
-
-{% endblock %}
Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/event_list.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/event_list.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/event_list.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,16 +1,14 @@
-{% extends "SeismoWebPortal/events.html" %}
+<h2>events</h2>
-{% 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="new/" 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>
+ <table rules=groups class="cool">
<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>
<thead>
@@ -57,5 +55,3 @@
{% else %}
<p>You have no events.
{% endif %}
-
-{% endblock %}
Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/event_search.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/event_search.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/event_search.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,10 +1,6 @@
-{% extends "SeismoWebPortal/objects.html" %}
+<h2>event search</h2>
-{% block content %}
-
-<h2 class=titlebar>event search</h2>
-
{% if form.has_errors %}
<p><span class=error>Please correct the following error{{ form.error_dict|pluralize }}.</span>
{% else %}
@@ -103,5 +99,3 @@
</div>
</form>
-
-{% endblock %}
Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/event_search_results.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/event_search_results.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/event_search_results.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,12 +1,8 @@
-{% extends "SeismoWebPortal/objects.html" %}
+<h2>event search results</h2>
-{% block content %}
-
-<h2 class=titlebar>event search results</h2>
-
{% if event_list %}
- <table rules=groups>
+ <table rules=groups class="cool">
<colgroup><col class=odd><col class=even><col class=odd><col class=even><col class=odd><col class=even><col class=odd></colgroup>
<thead>
@@ -26,7 +22,7 @@
<tr>
<td>
<!-- an inline events/add form, already filled-out -->
- <form method="post" action="../create/">
+ <form method="post" action="../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 }}"/>
@@ -69,5 +65,3 @@
{% endif %}
<p><a href="http://www.globalcmt.org/">Powered by the Global CMT Project.</a>
-
-{% endblock %}
Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/event_upload.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/event_upload.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/event_upload.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,10 +1,6 @@
-{% extends "SeismoWebPortal/objects.html" %}
+<h2>upload event</h2>
-{% block content %}
-
-<h2 class=titlebar>upload event</h2>
-
<div class=toolbar>
<form method="post" action="/specfem3dglobe/help/toggle/">
<input type="hidden" name="post_toggle_redirect" value="/specfem3dglobe/events/upload/">
@@ -25,7 +21,7 @@
<div class=tab30ex>
<div>
- <label for="id_name" class=before>name for this event</label></td>
+ <label for="id_name" class=before>name for this event</label>
{{ form.name }}
{% if form.name.errors %}<span class=error>{{ form.name.errors|join:", " }}</span>{% endif %}
</div>
@@ -67,5 +63,3 @@
</div>
{% endif %}
-
-{% endblock %}
Deleted: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/events.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/events.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/events.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,20 +0,0 @@
-
-{% extends "SeismoWebPortal/base.html" %}
-
-{% block desktop %}
-
-<div class=taskbar>
- <ul>
- <li class=first><a href="/specfem3dglobe/">home</a>
- <li><a href="/specfem3dglobe/objects/">objects</a>
- <li class=selected><a href="/specfem3dglobe/events/">events</a>
- <li><a href="/specfem3dglobe/registration/">profile</a>
- </ul>
-</div>
-
-<h1 class=titlebar>events</h1>
-
-{% block content %}
-{% endblock %}
-
-{% endblock %}
Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/home.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/home.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/home.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,19 +1,6 @@
-{% extends "SeismoWebPortal/base.html" %}
+<h2>home</h2>
-{% block desktop %}
-
-<div class=taskbar>
- <ul>
- <li class="first selected"><a href="/specfem3dglobe/">home</a>
- <li><a href="/specfem3dglobe/objects/">objects</a>
- <li><a href="/specfem3dglobe/events/">events</a>
- <li><a href="/specfem3dglobe/registration/">profile</a>
- </ul>
-</div>
-
-<h1 class=titlebar>home</h1>
-
<h3>quick start</h3>
<p>To set up a new simulation, proceed as follows:
@@ -60,5 +47,3 @@
<p><a href="/specfem3dglobe/doc/manual_SPECFEM3D_GLOBE.pdf">
<img src="/specfem3dglobe/pics/adobe-pdf.icon.gif">SPECFEM 3D GLOBE User Manual</a>
-
-{% endblock %}
Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/mesh_confirm_delete.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/mesh_confirm_delete.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/mesh_confirm_delete.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,13 +1,7 @@
-{% extends "SeismoWebPortal/objects.html" %}
+<h2>delete mesh</h2>
-{% block content %}
-
-<h2 class=titlebar>delete mesh</h2>
-
-<form method="post" action="/specfem3dglobe/meshes/{{ object.id }}/delete/">
+<form method="post" action="/specfem3dglobe/config/specfem3dglobe/meshes/{{ object.id }}/delete/">
<p>Are you sure you want to delete the mesh "{{ object }}"?
<p><input type="submit" value="Delete" />
</form>
-
-{% endblock %}
Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/mesh_form_base.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/mesh_form_base.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/mesh_form_base.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,10 +1,6 @@
-{% extends "SeismoWebPortal/objects.html" %}
+<h2>{% if object %}edit{% else %}new{% endif %} {% block heading %}{{ nchunks }}-chunk regional mesh{% endblock %}</h2>
-{% block content %}
-
-<h2 class=titlebar>{% if object %}edit{% else %}new{% endif %} {% block heading %}{{ nchunks }}-chunk regional mesh{% endblock %}</h2>
-
<div class=toolbar>
<form method="post" action="/specfem3dglobe/help/toggle/">
<input type="hidden" name="post_toggle_redirect" value="{{ action }}">
@@ -14,11 +10,6 @@
<input type="submit" name="show_help" value="Show Help" />
{% endif %}
</form>
-
- {% if object %}
- <form action="delete/" method="get"><input type="submit" value="Delete" /></form>
- {% endif %}
-
</div>
<form name="mesh_form" method="post" action="{{ action }}">
@@ -139,5 +130,3 @@
</div> <!-- tab30ex -->
</form>
-
-{% endblock %}
Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/mineosmodecatalog_form.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/mineosmodecatalog_form.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/mineosmodecatalog_form.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,10 +1,6 @@
-{% extends "SeismoWebPortal/objects.html" %}
+<h2>{% if object %}edit{% else %}new{% endif %} mode catalog</h2>
-{% block content %}
-
-<h2 class=titlebar>{% if object %}edit{% else %}new{% endif %} mode catalog</h2>
-
<div class=toolbar>
<form method="post" action="/specfem3dglobe/help/toggle/">
<input type="hidden" name="post_toggle_redirect" value="{{ action }}">
@@ -84,5 +80,3 @@
</div> <!-- tab30ex -->
</form>
-
-{% endblock %}
Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/mineosparameters_form.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/mineosparameters_form.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/mineosparameters_form.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,10 +1,6 @@
-{% extends "SeismoWebPortal/objects.html" %}
+<h2>{% if object %}edit{% else %}new{% endif %} mineos parameters</h2>
-{% block content %}
-
-<h2 class=titlebar>{% if object %}edit{% else %}new{% endif %} mineos parameters</h2>
-
<div class=toolbar>
<form method="post" action="/specfem3dglobe/help/toggle/">
<input type="hidden" name="post_toggle_redirect" value="{{ action }}">
@@ -14,11 +10,6 @@
<input type="submit" name="show_help" value="Show Help" />
{% endif %}
</form>
-
- {% if object %}
- <form action="delete/" method="get"><input type="submit" value="Delete" /></form>
- {% endif %}
-
</div>
<form method="post" action="{{ action }}">
@@ -98,5 +89,3 @@
</div> <!-- tab30ex -->
</form>
-
-{% endblock %}
Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/model_confirm_delete.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/model_confirm_delete.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/model_confirm_delete.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,14 +1,7 @@
-{% extends "SeismoWebPortal/objects.html" %}
+<h2>delete model</h2>
-{% block content %}
-
-<h2 class=titlebar>delete model</h2>
-
-<form method="post" action="/specfem3dglobe/models/{{ object.id }}/delete/">
+<form method="post" action="/specfem3dglobe/config/specfem3dglobe/models/{{ object.id }}/delete/">
<p>Are you sure you want to delete the model "{{ object }}"?
<p><input type="submit" value="Delete" />
</form>
-
-{% endblock %}
-
Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/model_form.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/model_form.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/model_form.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,10 +1,6 @@
-{% extends "SeismoWebPortal/objects.html" %}
+<h2>{% if object %}edit{% else %}new{% endif %} model</h2>
-{% block content %}
-
-<h2 class=titlebar>{% if object %}edit{% else %}new{% endif %} model</h2>
-
<div class=toolbar>
<form method="post" action="/specfem3dglobe/help/toggle/">
<input type="hidden" name="post_toggle_redirect" value="{{ action }}">
@@ -14,11 +10,6 @@
<input type="submit" name="show_help" value="Show Help" />
{% endif %}
</form>
-
- {% if object %}
- <form action="delete/" method="get"><input type="submit" value="Delete" /></form>
- {% endif %}
-
</div>
<form method="post" action="{{ action }}">
@@ -108,5 +99,3 @@
</div> <!-- tab30ex -->
</form>
-
-{% endblock %}
Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/object_lists.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/object_lists.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/object_lists.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,30 +1,10 @@
-{% extends "SeismoWebPortal/objects.html" %}
+<h2>Configuration</h2>
-{% block content %}
-
-
-<div class=toolbar>
- <form action="../simulations/create/" method="get"><input type="submit" value="New Simulation..." /></form>
- <form action="mineos/modes/create/" method="get"><input type="submit" value="New Mode Catalog..." /></form>
- <form action="mineos/parameters/create/" method="get"><input type="submit" value="Mineos..." /></form>
- <form action="../stations/upload/" method="get"><input type="submit" value="Upload Station List..." /></form>
- <form action="../meshes/create/" method="post">
- <select name="nchunks" size="1">
- <option value="1">regional with 1 chunk</option>
- <option value="2">regional with 2 chunks</option>
- <option value="3">regional with 3 chunks</option>
- <option value="6" selected="selected">global (6 chunks)</option>
- </select>
- <input type="submit" value="New Mesh..." />
- </form>
- <form action="specfem3dglobe/models/create/" method="get"><input type="submit" value="New Model..." /></form>
-</div>
-
<p>
-{% if simulation_list %}
- <table rules=groups>
- <caption>simulations</caption>
+{% if specfem3dglobe_parameters_list %}
+ <table rules=groups class="cool">
+ <caption>Specfem 3D Globe Parameter Sets</caption>
<colgroup><col class=odd><col class=even><col class=odd><col class=even><col class=odd></colgroup>
@@ -33,27 +13,27 @@
</thead>
<tbody>
- {% for sim in simulation_list %}
+ {% for object in specfem3dglobe_parameters_list %}
<tr>
- <th><a href="/specfem3dglobe/simulations/{{ sim.id }}/">{{ sim.name }}</a></th>
- <td><a href="/specfem3dglobe/meshes/{{ sim.mesh.id }}/">{{ sim.mesh }}</a><br>
- <span class=inlineInfo>shortest period ≅ {{ sim.mesh.shortestPeriod|stringformat:".0f" }}s</span></td>
- <td><a href="specfem3dglobe/models/{{ sim.model.id }}/">{{ sim.model }}</a></td>
- <td><a href="/specfem3dglobe/stations/{{ sim.stations.id }}/">{{ sim.stations }}</a></td>
- <td>{{ sim.record_length }} minutes</td>
+ <th><a href="specfem3dglobe/parameters/{{ object.id }}/">{{ object.name }}</a></th>
+ <td><a href="specfem3dglobe/meshes/{{ object.mesh.id }}/">{{ object.mesh }}</a><br>
+ <span class=inlineInfo>shortest period ≅ {{ object.mesh.shortestPeriod|stringformat:".0f" }}s</span></td>
+ <td><a href="specfem3dglobe/models/{{ object.model.id }}/">{{ object.model }}</a></td>
+ <td><a href="stations/{{ object.stations.id }}/">{{ object.stations }}</a></td>
+ <td>{{ object.record_length }} minutes</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
- <p>You have no simulations.
+ <p>You have no Specfem 3D Globe parameter sets.
{% endif %}
<p>
{% if mesh_list %}
- <table border=1 rules=groups>
+ <table border=1 rules=groups class="cool">
<caption>meshes</caption>
<colgroup><col class=odd></colgroup>
@@ -97,7 +77,7 @@
<tbody>
{% for object in mesh_list %}
<tr>
- <th><a href="../meshes/{{ object.id }}/">{{ object.name }}</a></th>
+ <th><a href="specfem3dglobe/meshes/{{ object.id }}/">{{ object.name }}</a></th>
<td class=int>{{ object.nchunks }}</td>
<td class=int>{{ object.nproc_eta }}</td>
<td class=int>{{ object.nproc_xi }}</td>
@@ -129,7 +109,7 @@
<p>
{% if model_list %}
- <table rules=groups>
+ <table rules=groups class="cool">
<caption>models</caption>
<colgroup><col class=odd></colgroup>
@@ -172,7 +152,7 @@
<p>
{% if mode_catalog_list %}
- <table rules=groups>
+ <table rules=groups class="cool">
<caption>mode catalogs</caption>
<thead>
@@ -186,6 +166,7 @@
<th>wmax</th>
<th>nmin</th>
<th>nmax</th>
+ <th>max_depth</th>
</tr>
</thead>
@@ -201,6 +182,7 @@
<td>{{ object.wmax }}</td>
<td>{{ object.nmin }}</td>
<td>{{ object.nmax }}</td>
+ <td>{{ object.max_depth }}</td>
</tr>
{% endfor %}
</tbody>
@@ -213,8 +195,8 @@
<p>
{% if mineos_parameters_list %}
- <table rules=groups>
- <caption>mineos parameters</caption>
+ <table rules=groups class="cool">
+ <caption>Mineos Parameter Sets</caption>
<thead>
<tr>
@@ -248,13 +230,13 @@
</table>
{% else %}
- <p>You have no Mineos parameters.
+ <p>You have no Mineos parameter sets.
{% endif %}
<p>
{% if station_lists %}
- <table border=0 rules=groups>
+ <table border=0 rules=groups class="cool">
<caption>stations</caption>
<colgroup><col class=odd><col class=even><col class=odd></colgroup>
@@ -270,11 +252,11 @@
<tbody>
{% for station_list in station_lists %}
<tr>
- <td><a href="../stations/{{ station_list.id }}/">{{ station_list.name }}</a></td>
+ <td><a href="stations/{{ station_list.id }}/">{{ station_list.name }}</a></td>
<td>{{ station_list.station_set.count }}</td>
<td>
- <a href="../stations/{{ 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="../stations/{{ station_list.id }}/stations.txt">text</a>]
+ <a href="stations/{{ 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="stations/{{ station_list.id }}/stations.txt">text</a>]
</td>
</tr>
{% endfor %}
@@ -284,6 +266,3 @@
{% else %}
<p>You have no stations.
{% endif %}
-
-
-{% endblock %}
Deleted: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/objects.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/objects.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/objects.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,20 +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/objects/">objects</a>
- <li><a href="/specfem3dglobe/events/">events</a>
- <li><a href="/specfem3dglobe/registration/">profile</a>
- </ul>
-</div>
-
-<h1 class=titlebar>objects</h1>
-
-{% block content %}
-{% endblock %}
-
-{% endblock %}
Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/password_change_form.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/password_change_form.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/password_change_form.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,17 +1,6 @@
-{% extends "SeismoWebPortal/settings.html" %}
+<h1>change password</h1>
-{% block content %}
-
-<h1 class=titlebar>profile</h1>
-
-<div class=tabs>
- <ul>
- <li class=first><a href="/specfem3dglobe/registration/">registration</a>
- <li class=selected><a href="/specfem3dglobe/registration/password/">password</a>
- </ul>
-</div>
-
{% if form.has_errors %}
<p><span class=error>Please correct the following error{{ form.error_dict|pluralize }}.</span>
{% endif %}
@@ -42,5 +31,3 @@
</div> <!-- tab30ex -->
</form>
-
-{% endblock %}
Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/register.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/register.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/register.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,22 +1,9 @@
-{% extends "SeismoWebPortal/root.html" %}
+<h2>new user registration</h2>
-{% block body %}
-
-<p><a href="/specfem3dglobe/"><img id=logo src="/specfem3dglobe/pics/specfem3dg_logo.jpg" width=99 height=94>Home</a>
-
-<h1 class=titlebar>new user registration</h1>
-
<p>To create a new account, simply fill-out the form below.
<p>If you've registered before, but have simply forgotten your username and/or password, try <a href="/specfem3dglobe/pwreset/">resetting your password</a>.
If you need help, <a href="mailto:portal at geodynamics.org">contact us</a>.
{% include "SeismoWebPortal/registration_form.html" %}
-
-<div class=illustration id=usermap>
- <img src="/specfem3dglobe/pics/specfem_users_map.gif" width=461 height=230>
- <p class=caption>SPECFEM User Map</p>
-</div>
-
-{% endblock %}
Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/registration_form.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/registration_form.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/registration_form.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -6,7 +6,7 @@
<form method="post" action="/specfem3dglobe/registration/">
<div class=tab30ex>
- {% if user.is_anonymous %}
+ {% if not desktop.user %}
<fieldset><legend>username and password</legend>
<div>
@@ -84,7 +84,7 @@
</fieldset>
- {% if user.is_anonymous %}
+ {% if not desktop.user %}
<fieldset><legend>invitation</legend>
@@ -101,7 +101,7 @@
{% endif %}
- {% if user.is_anonymous %}
+ {% if not desktop.user %}
<div><input class=submit type="submit" value="Register"/></div>
{% else %}
<div><input class=submit type="submit" value="Save"/></div>
Deleted: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/root.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/root.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/root.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,16 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<link href="/specfem3dglobe/css/style.css" type="text/css" rel="stylesheet" media="all" />
-<script type="text/javascript" language="javascript" src="/specfem3dglobe/jss/main.js"></script>
-<head>
- <title>{% block title %}SPECFEM 3D GLOBE{% endblock %}</title>
- {% block scripts %}
- {% endblock %}
-</head>
-
-<body>
-{% block body %}
-{% endblock %}
-</body>
-</html>
Deleted: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/settings.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/settings.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/settings.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,18 +0,0 @@
-
-{% extends "SeismoWebPortal/base.html" %}
-
-{% block desktop %}
-
-<div class=taskbar>
- <ul>
- <li class=first><a href="/specfem3dglobe/">home</a>
- <li><a href="/specfem3dglobe/objects/">objects</a>
- <li><a href="/specfem3dglobe/events/">events</a>
- <li class=selected><a href="/specfem3dglobe/registration/">profile</a>
- </ul>
-</div>
-
-{% block content %}
-{% endblock %}
-
-{% endblock %}
Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/single_source_event_form.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/single_source_event_form.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/single_source_event_form.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,10 +1,6 @@
-{% extends "SeismoWebPortal/objects.html" %}
+<h2>{% if object %}edit{% else %}new{% endif %} event</h2>
-{% block content %}
-
-<h2 class=titlebar>{% if object %}edit{% else %}new{% endif %} event</h2>
-
{% if form.has_errors %}
<p><span class=error>Please correct the following error{{ form.error_dict|pluralize }}.</span>
{% endif %}
@@ -120,5 +116,3 @@
</div> <!-- tab30ex -->
</form>
-
-{% endblock %}
Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/source_confirm_delete.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/source_confirm_delete.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/source_confirm_delete.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,13 +1,7 @@
-{% extends "SeismoWebPortal/objects.html" %}
+<h2>delete source</h2>
-{% block content %}
-
-<h2 class=titlebar>delete source</h2>
-
<form method="post" action="/specfem3dglobe/events/sources/{{ object.id }}/delete/">
<p>Are you sure you want to delete the source "{{ object }}"?
<p><input type="submit" value="Delete" />
</form>
-
-{% endblock %}
Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/source_detail.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/source_detail.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/source_detail.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,13 +1,7 @@
-{% extends "SeismoWebPortal/objects.html" %}
+<h2>{{ object.eventName }}</h2>
-{% block content %}
-
-<h2 class=titlebar>{{ object.eventName }}</h2>
-
<div class=toolbar>
- <form action="edit/" method="get"><input type="submit" value="Edit..." /></form>
- <form action="delete/" method="get"><input type="submit" value="Delete" /></form>
[<a href="CMTSOLUTION.txt">download as text</a>]
</div>
@@ -17,5 +11,3 @@
<h3><code>CMTSOLUTION</code></h3>
<pre>{{ object.cmtSolution }}</pre>
</div>
-
-{% endblock %}
Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/source_form.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/source_form.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/source_form.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,10 +1,6 @@
-{% extends "SeismoWebPortal/objects.html" %}
+<h2>edit source</h2>
-{% block content %}
-
-<h2 class=titlebar>edit source</h2>
-
{% if form.has_errors %}
<p><span class=error>Please correct the following error{{ form.error_dict|pluralize }}.</span>
{% endif %}
@@ -106,5 +102,3 @@
</div> <!-- tab30ex -->
</form>
-
-{% endblock %}
Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_confirm_delete.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_confirm_delete.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_confirm_delete.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,13 +1,7 @@
-{% extends "SeismoWebPortal/objects.html" %}
+<h2>delete simulation</h2>
-{% block content %}
-
-<h2 class=titlebar>delete simulation</h2>
-
-<form method="post" action="/specfem3dglobe/simulations/{{ object.id }}/delete/">
+<form method="post" action="/specfem3dglobe/config/specfem3dglobe/parameters/{{ object.id }}/delete/">
<p>Are you sure you want to delete the simulation "{{ object }}"?
<p><input type="submit" value="Delete" />
</form>
-{% endblock %}
-
Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_detail.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_detail.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_detail.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,15 +1,6 @@
-{% extends "SeismoWebPortal/objects.html" %}
+<h2>{{ object.name }}</h2>
-{% block content %}
-
-<h2 class=titlebar>{{ object.name }}</h2>
-
-<div class=toolbar>
- <form action="edit/" method="get"><input type="submit" value="Edit..." /></form>
- <form action="delete/" method="get"><input type="submit" value="Delete" /></form>
-</div>
-
<div class=properties>
<div class=box>
@@ -35,7 +26,7 @@
<h3>stations</h3>
<dl>
- <dt>station list</dt><dd><a href="../../stations/{{ object.stations.id }}/">{{ object.stations.name }}</a></dd>
+ <dt>station list</dt><dd><a href="../../../stations/{{ object.stations.id }}/">{{ object.stations.name }}</a></dd>
<dt>receivers at depth</dt><dd>{{ object.receivers_can_be_buried }}</dd>
</dl>
</div>
@@ -52,5 +43,3 @@
{% endif %}
</div>
-
-{% endblock %}
Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_form.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_form.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_form.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,10 +1,6 @@
-{% extends "SeismoWebPortal/objects.html" %}
+<h2>{% if object %}edit{% else %}new{% endif %} simulation</h2>
-{% block content %}
-
-<h2 class=titlebar>{% if object %}edit{% else %}new{% endif %} simulation</h2>
-
<div class=toolbar>
<form method="post" action="/specfem3dglobe/help/toggle/">
<input type="hidden" name="post_toggle_redirect" value="{{ action }}">
@@ -14,11 +10,6 @@
<input type="submit" name="show_help" value="Show Help" />
{% endif %}
</form>
-
- {% if object %}
- <form action="../delete/" method="get"><input type="submit" value="Delete" /></form>
- {% endif %}
-
</div>
<form method="post" action="{{ action }}">
@@ -125,5 +116,3 @@
</div> <!-- tab30ex -->
</form>
-
-{% endblock %}
Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/splash.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/splash.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/splash.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,8 +1,4 @@
-{% extends "SeismoWebPortal/root.html" %}
-
-{% block body %}
-
<div class=splash>
<div class=nameplate>
@@ -24,14 +20,6 @@
<p><img src="/specfem3dglobe/pics/specfem3dg.jpg" width=393 height=374>
-<!--
- <ul class=links>
- <li><a href="about.html">about</a>
- <li><a href="science.html">science</a>
- <li class=last><a href="links.html">links</a>
- </ul>
--->
-
<p id=sponsored>Sponsored by:</p>
<ul class=sponsors>
<li><a href="http://www.geodynamics.org/"><img src="/specfem3dglobe/pics/cig-logo_small-initials.gif"></a>
@@ -42,5 +30,3 @@
</ul>
</div> <!-- splash -->
-
-{% endblock %}
Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/stationlist_confirm_delete.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/stationlist_confirm_delete.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/stationlist_confirm_delete.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,13 +1,7 @@
-{% extends "SeismoWebPortal/objects.html" %}
+<h2>delete station list</h2>
-{% block content %}
-
-<h2 class=titlebar>delete station list</h2>
-
-<form method="post" action="/specfem3dglobe/stations/{{ object.id }}/delete/">
+<form method="post" action="/specfem3dglobe/config/stations/{{ object.id }}/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/seismo/SeismoWebPortal/templates/SeismoWebPortal/stationlist_detail.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/stationlist_detail.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/stationlist_detail.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,13 +1,7 @@
-{% extends "SeismoWebPortal/objects.html" %}
+<h2>{{ object.name }}</h2>
-{% 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>
@@ -15,7 +9,7 @@
<p class=infobar>{{ object.station_set.count }} station{{ object.station_set.count|pluralize }}
{% if object.station_set.count %}
- <table rules=groups>
+ <table rules=groups class="cool">
<colgroup><col class=odd></colgroup>
<colgroup><col class=even><col class=odd></colgroup>
<colgroup><col class=even><col class=odd></colgroup>
@@ -44,5 +38,3 @@
</table>
{% endif %}
-
-{% endblock %}
Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/stationlist_form.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/stationlist_form.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/stationlist_form.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,15 +1,11 @@
-{% extends "SeismoWebPortal/objects.html" %}
+<h2>edit station list</h2>
-{% 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/config/stations/{{ object.id }}/edit/">
<div class=tab30ex>
@@ -26,5 +22,3 @@
</div> <!-- tab30ex -->
</form>
-
-{% endblock %}
Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/stationlist_upload.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/stationlist_upload.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/stationlist_upload.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,13 +1,9 @@
-{% extends "SeismoWebPortal/objects.html" %}
+<h2>upload station list</h2>
-{% block content %}
-
-<h2 class=titlebar>upload station list</h2>
-
<div class=toolbar>
<form method="post" action="/specfem3dglobe/help/toggle/">
- <input type="hidden" name="post_toggle_redirect" value="/specfem3dglobe/stations/upload/">
+ <input type="hidden" name="post_toggle_redirect" value="/specfem3dglobe/config/stations/upload/">
{% if help_visible %}
<input type="submit" name="hide_help" value="Hide Help" />
{% else %}
@@ -16,7 +12,7 @@
</form>
</div>
-<form action="/specfem3dglobe/stations/upload/" method="POST" enctype="multipart/form-data">
+<form action="/specfem3dglobe/config/stations/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>
@@ -88,5 +84,3 @@
</div>
{% endif %}
-
-{% endblock %}
Added: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/user_map.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/user_map.html (rev 0)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/user_map.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -0,0 +1,5 @@
+
+<div class=illustration id=usermap>
+ <img src="/specfem3dglobe/pics/specfem_users_map.gif" width=461 height=230>
+ <p class=caption>SPECFEM User Map</p>
+</div>
Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/userinfo_form.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/userinfo_form.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/userinfo_form.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,17 +1,5 @@
-{% extends "SeismoWebPortal/settings.html" %}
+<h1>profile</h1>
-{% block content %}
-<h1 class=titlebar>profile</h1>
-
-<div class=tabs>
- <ul>
- <li class="selected first"><a href="/specfem3dglobe/registration/">registration</a>
- <li><a href="/specfem3dglobe/registration/password/">password</a>
- </ul>
-</div>
-
{% include "SeismoWebPortal/registration_form.html" %}
-
-{% endblock %}
Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/registration/login.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/registration/login.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/registration/login.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,8 +1,4 @@
-{% extends "SeismoWebPortal/root.html" %}
-
-{% block body %}
-
<p><a href="/specfem3dglobe/"><img id=logo src="/specfem3dglobe/pics/specfem3dg_logo.jpg" width=99 height=94>Home</a>
<h1 class=titlebar>login</h1>
@@ -53,5 +49,3 @@
<p>If you've forgotten your username and/or password, try <a href="/specfem3dglobe/pwreset/">resetting your password</a>.
<p>If you need help, <a href="mailto:portal at geodynamics.org">contact us</a>.
-
-{% endblock %}
Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/registration/pwreset.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/registration/pwreset.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/registration/pwreset.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,11 +1,7 @@
-{% extends "SeismoWebPortal/root.html" %}
-
-{% block body %}
-
<p><a href="/specfem3dglobe/"><img id=logo src="/specfem3dglobe/pics/specfem3dg_logo.jpg" width=99 height=94>Home</a>
-<h1 class=titlebar>password reset</h1>
+<h1>password reset</h1>
<p>Forgotten your password? Enter your e-mail address below, and we'll reset your password and e-mail the new one to you.</p>
@@ -27,5 +23,3 @@
</div> <!-- tab30ex -->
</form>
-
-{% endblock %}
Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/registration/pwreset_done.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/registration/pwreset_done.html 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/registration/pwreset_done.html 2008-03-22 03:37:05 UTC (rev 11498)
@@ -1,14 +1,8 @@
-{% extends "SeismoWebPortal/root.html" %}
-
-{% block body %}
-
<p><a href="/specfem3dglobe/"><img id=logo src="/specfem3dglobe/pics/specfem3dg_logo.jpg" width=99 height=94>Home</a>
-<h1 class=titlebar>password reset</h1>
+<h1>password reset</h1>
<p><b>Success!</b> We've e-mailed a new password to the e-mail address you submitted. You should be receiving it shortly.</p>
<p><a href="/specfem3dglobe/login/">Login</a></p>
-
-{% endblock %}
Modified: cs/portal/trunk/seismo/SeismoWebPortal/views.py
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/views.py 2008-03-21 06:12:19 UTC (rev 11497)
+++ cs/portal/trunk/seismo/SeismoWebPortal/views.py 2008-03-22 03:37:05 UTC (rev 11498)
@@ -6,6 +6,7 @@
from django.core import validators
from django.http import HttpResponse, HttpResponseRedirect, Http404
from django.shortcuts import render_to_response, get_object_or_404
+from django.template import loader
from django.template.context import RequestContext
from create_update import create_object, update_object
from forms import RegistrationAddManipulator, RegistrationChangeManipulator
@@ -13,6 +14,7 @@
from models import MineosModeCatalog, MineosParameters
from models import Run, Job, OutputFile
from cmt import CMTSolution
+import gui
import os, os.path
from HTMLParser import HTMLParser
@@ -52,17 +54,31 @@
def root(request, pathname):
from django.views.static import serve as staticServe
-
+
+ desktop = gui.Desktop("/specfem3dglobe", "CIG Seismology Web Portal")
+ if not request.user.is_anonymous():
+ desktop.user = request.user
+ homeFile = gui.File("", "Home")
+ navtree = gui.Directory("home", "Home", [
+ homeFile,
+ gui.Directory("events", "Events", []),
+ gui.Directory("config", "Configuration", []),
+ ])
+ fileBrowser = gui.FileBrowser("/specfem3dglobe/", "Home", navtree)
+ desktop.insertWindow(fileBrowser)
+ desktop.selectWindow(fileBrowser)
+
path = pathname.split('/')
if path[-1] == "":
path.pop()
if not path:
- return home(request)
+ fileBrowser.path.append(homeFile)
+ return httpResponse(home(request, desktop))
name = path.pop(0)
- static = lambda request, path: staticServe(request, pathname, document_root = static_media_root)
+ static = lambda request, path, desktop: staticServe(request, pathname, document_root = static_media_root)
index = Index({
"login": login,
@@ -79,7 +95,7 @@
publicView = index.get(name)
if publicView:
- return publicView(request, path)
+ return httpResponse(publicView(request, path, desktop))
# Login is required for everything beyond this point.
if request.user.is_anonymous():
@@ -89,18 +105,30 @@
(REDIRECT_FIELD_NAME, quote(request.get_full_path())))
index = Index({
- "objects": objects,
- "meshes": meshes,
- "simulations": simulations,
+ "config": config,
"events": events,
- "stations": stations,
+ "profile": registration,
"logout": logout,
"help": help,
})
- return index[name](request, path)
+ return httpResponse(index[name](request, path, desktop))
+def httpResponse(response):
+ # "Cast" the argument, 'response', to an HttpResponse.
+
+ if isinstance(response, HttpResponse):
+ return response
+
+ import designs.plone
+ design = designs.plone.PloneDesign()
+ response = HttpResponse(content = str(design.renderAsDocument(response)),
+ mimetype = "text/html")
+ return response
+
+
+
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Meshes, Models, Simulations
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -110,64 +138,147 @@
disapproval = "You cannot run simulations until you are approved by a site administrator."
-def home(request):
+def home(request, desktop):
if request.user.is_anonymous():
return render_to_response('SeismoWebPortal/splash.html', {},
RequestContext(request, {}))
- return render_to_response('SeismoWebPortal/home.html',
- {},
- RequestContext(request, {}))
+ child = gui.ChildWindow("/specfem3dglobe/", "View")
+ child.content = gui.StaticContent(loader.render_to_string('SeismoWebPortal/home.html'))
+ desktop.activeWindow.selectWindow(child)
+ return desktop
-def objects(request, path):
- from django.views.generic.create_update import delete_object
+def config(request, path, desktop):
+ from create_update import delete_object
+
+ fileBrowser = desktop.windowList[0]
+ configDir = fileBrowser.root.index["config"]
+ fileBrowser.path.append(configDir)
+
if path:
name = path.pop(0)
+ if name == "stations":
+ return config_stations(request, path, desktop)
index = Index({
- "specfem3dglobe": {"models": Model},
- "mineos": {"modes": MineosModeCatalog, "parameters": MineosParameters},
+ "specfem3dglobe": Index({"models": Model,
+ "meshes": [config_specfem3dglobe_meshes],
+ "parameters": [config_specfem3dglobe_parameters] }),
+ "mineos": Index({"modes": MineosModeCatalog,
+ "parameters": MineosParameters}),
})
index = index[name]
+ url = name
name = path.pop(0)
- ModelClass = index[name]
+ handler = index[name]
+ if isinstance(handler, list):
+ return handler[0](request, path, desktop)
+ else:
+ ModelClass = handler
+ url += "/" + name
name = path.pop(0)
- if name == "create":
+ if name == "new":
if path: raise Http404
- return create(request, ModelClass = ModelClass)
+ url = "/specfem3dglobe/config/%s/new/" % url
+ window = gui.ChildWindow(url, "New")
+ return create(request, desktop, window, ModelClass)
+
objId = intOr404(name)
+ url = "/specfem3dglobe/config/%s/%d/" % (url, objId)
+
+ view = gui.ChildWindow(url, "View")
+ edit = gui.ChildWindow(url + "edit/", "Edit")
+ menuBar = [
+ gui.Menu("actionMenu", "actions", "Actions",
+ [gui.MenuItem(url + "duplicate/", "Duplicate"),
+ gui.MenuItem(url + "delete/", "Delete"),
+ ]
+ ),
+ ]
+ view.menuBar = edit.menuBar = menuBar
+ desktop.activeWindow.insertWindow(view)
+ desktop.activeWindow.insertWindow(edit)
+
if not path:
- return update(request, object_id = objId, ModelClass = ModelClass)
+ return update(request, desktop, view, object_id = objId, ModelClass = ModelClass)
name = path.pop(0)
+ if path: raise Http404
+ if name == "edit":
+ return update(request, desktop, edit, object_id = objId, ModelClass = ModelClass)
if name == "delete":
- if path: raise Http404
return delete_object(request,
+ desktop,
+ ModelClass,
+ "/specfem3dglobe/config/",
object_id = objId,
- model = ModelClass,
- post_delete_redirect = "/specfem3dglobe/objects/")
+ )
raise Http404
- return render_to_response('SeismoWebPortal/object_lists.html',
- {'simulation_list': Simulation.objects.filter(user=request.user),
- 'mesh_list': Mesh.user_objects.all(),
- 'model_list': Model.user_objects.all(),
- 'mode_catalog_list': MineosModeCatalog.objects.all(),
- 'mineos_parameters_list': MineosParameters.objects.all(),
- 'station_lists': StationList.objects.filter(user__exact=request.user),
- },
- RequestContext(request, {}))
+ child = gui.ChildWindow("/specfem3dglobe/config/", "View")
+ child.menuBar = [
+ gui.Menu("newMenu", "new", "New",
+ [gui.MenuItem("specfem3dglobe/models/new/", "Specfem 3D Globe Model"),
+ gui.MenuItem("specfem3dglobe/meshes/new/1/", "Specfem 3D Globe 1-chunk Regional Mesh"),
+ gui.MenuItem("specfem3dglobe/meshes/new/2/", "Specfem 3D Globe 2-chunk Regional Mesh"),
+ gui.MenuItem("specfem3dglobe/meshes/new/3/", "Specfem 3D Globe 3-chunk Regional Mesh"),
+ gui.MenuItem("specfem3dglobe/meshes/new/6/", "Specfem 3D Globe Global Mesh"),
+ gui.MenuItem("specfem3dglobe/parameters/new/", "Specfem 3D Globe Parameter Set"),
+ gui.MenuItem("mineos/modes/new/", "Mineos Mode Catalog"),
+ gui.MenuItem("mineos/parameters/new/", "Mineos Parameter Set"),
+ ]
+ ),
+ gui.Menu("uploadMenu", "upload", "Upload",
+ [gui.MenuItem("stations/upload/", "Station List"),
+ ]
+ )
+ ]
+ html = loader.render_to_string('SeismoWebPortal/object_lists.html',
+ {'specfem3dglobe_parameters_list': Simulation.objects.filter(user=request.user),
+ 'mesh_list': Mesh.user_objects.all(),
+ 'model_list': Model.user_objects.all(),
+ 'mode_catalog_list': MineosModeCatalog.objects.all(),
+ 'mineos_parameters_list': MineosParameters.objects.all(),
+ 'station_lists': StationList.objects.filter(user__exact=request.user),
+ }
+ )
+ child.content = gui.StaticContent(html)
+ desktop.activeWindow.selectWindow(child)
+ return desktop
+
-def simulations(request, path):
- from django.views.generic.create_update import delete_object
+def config_specfem3dglobe_parameters(request, path, desktop):
+ from create_update import delete_object
+ from list_detail import object_detail
name = path.pop(0)
- if name == "create":
- return create_simulation(request)
+ if name == "new":
+ window = gui.ChildWindow("/specfem3dglobe/config/specfem3dglobe/parameters/new/", "New")
+ return create_object(request,
+ desktop,
+ window,
+ Simulation,
+ post_save_redirect = '/specfem3dglobe/config/specfem3dglobe/parameters/%(id)d/',
+ follow = { 'user': False },
+ )
objId = intOr404(name)
+ url = "/specfem3dglobe/config/specfem3dglobe/parameters/%d/" % objId
+
+ view = gui.ChildWindow(url, "View")
+ edit = gui.ChildWindow(url + "edit/", "Edit")
+ menuBar = [
+ gui.Menu("actionMenu", "actions", "Actions",
+ [gui.MenuItem(url + "delete/", "Delete"),
+ ]
+ ),
+ ]
+ view.menuBar = edit.menuBar = menuBar
+ desktop.activeWindow.insertWindow(view)
+ desktop.activeWindow.insertWindow(edit)
+
if not path:
- return simulation_detail(request, object_id = objId)
+ return object_detail(request, desktop, view, Simulation.user_objects.all(), object_id = objId)
name = path.pop(0)
@@ -182,86 +293,35 @@
return index[name](request, sim_id = objId)
if path: raise Http404
+
+ if name == "edit":
+ return update_object(request,
+ desktop,
+ edit,
+ Specfem3DGlobeParameters,
+ object_id = objId,
+ post_save_redirect = url,
+ follow = { 'user': False },
+ )
+ if name == "delete":
+ return delete_object(request,
+ desktop,
+ Specfem3DGlobeParameters,
+ post_delete_redirect = "/specfem3dglobe/config/",
+ object_id = objId)
index = Index({
- "edit": (update_simulation, (), dict(object_id = objId)),
- "delete": (delete_object, (), dict(object_id = objId,
- model = Specfem3DGlobeParameters,
- post_delete_redirect = "/specfem3dglobe/objects/")),
- "run": (run_simulation, (), dict(object_id = objId)),
- "par_file.txt": (par_file, (), dict(sim_id = objId)),
- "parameters.pml": (parameters_pml, (), dict(sim_id = objId)),
- "stations.txt": (stations_txt, (), dict(sim_id = objId)),
- "events.txt": (events_txt, (), dict(sim_id = objId)),
+ "par_file.txt": par_file,
+ "parameters.pml": parameters_pml,
+ "stations.txt": stations_txt,
+ "events.txt": events_txt,
})
- view, args, kwds = index[name]
- return view(request, *args, **kwds)
+ view = index[name]
+ return view(request, sim_id = objId)
-
-def create_simulation(request):
- def post_save(object):
- user = request.user
- if request.POST.has_key('save_and_run'):
- if user.userinfo.approved:
- object.run()
- else:
- user.message_set.create(message=disapproval)
- return None
- return create_object(request,
- Simulation,
- post_save_redirect = '/specfem3dglobe/simulations/%(id)d/',
- follow = { 'user': False },
- post_save_hook=post_save,
- )
-
-
-def update_simulation(request, object_id):
- def post_save(object):
- user = request.user
- if request.POST.has_key('save_and_run'):
- if user.userinfo.approved:
- object.run()
- else:
- user.message_set.create(message=disapproval)
- return None
- return update_object(request,
- Simulation,
- object_id,
- post_save_redirect = '/specfem3dglobe/simulations/%(id)d/',
- follow = { 'user': False },
- post_save_hook=post_save,
- )
-
-
-def run_simulation(request, object_id):
- from django.views.generic.list_detail import object_detail
-
- user = request.user
- object_id = int(object_id)
-
- if not user.userinfo.approved:
- user.message_set.create(message=disapproval)
- return HttpResponseRedirect('/specfem3dglobe/simulations/%d/' % object_id)
-
- simulation = get_object_or_404(Simulation, id=object_id)
-
- if request.method == 'POST':
- run = simulation.run()
- user.message_set.create(message="A new run has been started.")
- return HttpResponseRedirect('/specfem3dglobe/simulations/%d/' % object_id)
-
- raise Http404
-
-
-
-def simulation_detail(request, object_id):
- from django.views.generic.list_detail import object_detail
- return object_detail(request, Simulation.user_objects.all(), object_id)
-
-
def par_file(request, sim_id):
- from django.template import loader, Context
+ from django.template import Context
response = HttpResponse(mimetype='text/plain')
#response['Content-Disposition'] = 'attachment; filename=parameters.xml'
@@ -276,7 +336,7 @@
return response
def parameters_pml(request, sim_id):
- from django.template import loader, Context
+ from django.template import Context
response = HttpResponse(mimetype='text/xml')
#response['Content-Disposition'] = 'attachment; filename=parameters.xml'
@@ -290,7 +350,7 @@
response.write(t.render(c))
return response
-def login(request, path, template_name='registration/login.html'):
+def login(request, path, desktop, template_name='registration/login.html'):
from django.contrib.auth import login as loginUser
"Displays the login form and handles the login action."
from django.contrib.auth.forms import AuthenticationForm
@@ -322,7 +382,7 @@
'site_name': Site.objects.get_current().name,
}, context_instance=RequestContext(request))
-def logout(request, path):
+def logout(request, path, desktop):
from django.contrib.auth import logout as logoutUser
if path: raise Http404
@@ -330,7 +390,7 @@
logoutUser(request)
return HttpResponseRedirect('/specfem3dglobe/login/')
-def pwreset(request, path):
+def pwreset(request, path, desktop):
from django.views.generic.simple import direct_to_template
from django.contrib.auth.forms import PasswordResetForm
@@ -409,7 +469,7 @@
return response
-def runs(request, path):
+def runs(request, path, desktop):
from django.views.generic.list_detail import object_list
if not path:
@@ -520,10 +580,10 @@
return
-def jobs(request, path):
+def jobs(request, path, desktop):
return daemon_post(request, path, Job, "SeismoWebPortal/job_form.html")
-def output(request, path):
+def output(request, path, desktop):
return daemon_post(request, path, OutputFile, "SeismoWebPortal/outputfile_form.html")
def daemon_post(request, path, Model, template):
@@ -559,21 +619,46 @@
{'form': form, 'action': request.path},
RequestContext(request, {}))
-def registration(request, path):
+
+def profileWindows(desktop):
+ profile = gui.ChildWindow("/specfem3dglobe/profile/", "Profile")
+ password = gui.ChildWindow("/specfem3dglobe/profile/password/", "Password")
+ desktop.activeWindow.insertWindow(profile)
+ desktop.activeWindow.insertWindow(password)
+ return profile, password
+
+
+def registerWindows(desktop):
+ register = gui.ChildWindow("/specfem3dglobe/registration/", "Register")
+ map = gui.ChildWindow("/specfem3dglobe/registration/map/", "Map")
+ desktop.activeWindow.insertWindow(register)
+ desktop.activeWindow.insertWindow(map)
+ return register, map
+
+
+def registration(request, path, desktop):
if path:
name = path.pop(0)
if path: raise Http404
+ if name == "map":
+ _, window = registerWindows(desktop)
+ html = loader.render_to_string('SeismoWebPortal/user_map.html')
+ window.content = gui.StaticContent(html)
+ desktop.activeWindow.selectWindow(window)
+ return desktop
if name == "password":
- return password_change(request, template_name = "SeismoWebPortal/password_change_form.html")
+ return password_change(request, desktop, template_name = "SeismoWebPortal/password_change_form.html")
raise Http404
isNewUser = request.user.is_anonymous()
if isNewUser:
manipulator = RegistrationAddManipulator(request)
template = 'SeismoWebPortal/register.html'
+ window, _ = registerWindows(desktop)
else:
manipulator = RegistrationChangeManipulator(request.user)
template = 'SeismoWebPortal/userinfo_form.html'
+ window, _ = profileWindows(desktop)
if request.method == 'POST':
new_data = request.POST.copy()
@@ -585,7 +670,7 @@
if isNewUser:
request.session.delete_test_cookie()
help_login_hook(request, user)
- set_up_user_defaults(user)
+ #set_up_user_defaults(user)
notify_managers_of_new_user(request, user)
user.message_set.create(message="Welcome to the SPECFEM 3D GLOBE web portal!")
else:
@@ -602,7 +687,10 @@
# Populate the FormWrapper.
form = forms.FormWrapper(manipulator, new_data, errors, edit_inline = True)
- return render_to_response(template, { 'form': form }, RequestContext(request, {}))
+ html = loader.render_to_string(template, { 'form': form, 'desktop': desktop })
+ window.content = gui.StaticContent(html)
+ desktop.activeWindow.selectWindow(window)
+ return desktop
def set_up_user_defaults(newUser):
@@ -673,7 +761,7 @@
return
-def password_change(request, template_name='registration/password_change_form.html'):
+def password_change(request, desktop, template_name='registration/password_change_form.html'):
from django.contrib.auth.forms import PasswordResetForm, PasswordChangeForm
new_data, errors = {}, {}
@@ -685,52 +773,62 @@
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)},
- context_instance=RequestContext(request))
+
+ _, window = profileWindows(desktop)
+ html = loader.render_to_string(template_name, { 'form': forms.FormWrapper(form, new_data, errors) })
+ window.content = gui.StaticContent(html)
+ desktop.activeWindow.selectWindow(window)
+ return desktop
-def meshes(request, path):
- from django.views.generic.create_update import delete_object
+def config_specfem3dglobe_meshes(request, path, desktop):
+ from create_update import delete_object
if not path:
raise Http404
name = path.pop(0)
- if name == "create":
- if not path:
- return create_mesh(request)
+ if name == "new":
+ if not path: raise Http404
name = path.pop(0)
nchunks = intOr404(name)
if path: raise Http404
- return manipulate_mesh(request, nchunks = nchunks, action='create')
+ window = gui.ChildWindow("/specfem3dglobe/config/specfem3dglobe/meshes/new/%d/" % nchunks, "New")
+ return manipulate_mesh(request, desktop, window, nchunks = nchunks, action='new')
objId = intOr404(name)
+ url = "/specfem3dglobe/config/specfem3dglobe/meshes/%d/" % objId
+
+ view = gui.ChildWindow(url, "View")
+ edit = gui.ChildWindow(url + "edit/", "Edit")
+ menuBar = [
+ gui.Menu("actionMenu", "actions", "Actions",
+ [gui.MenuItem(url + "delete/", "Delete"),
+ ]
+ ),
+ ]
+ view.menuBar = edit.menuBar = menuBar
+ desktop.activeWindow.insertWindow(view)
+ desktop.activeWindow.insertWindow(edit)
+
if not path:
- return manipulate_mesh(request, object_id = objId, action='edit')
+ return manipulate_mesh(request, desktop, view, object_id = objId, action='edit')
name = path.pop(0)
+ if name == "edit":
+ return manipulate_mesh(request, desktop, edit, object_id = objId, action='edit')
if name == "delete":
if path: raise Http404
return delete_object(request,
- object_id = objId,
- model = Mesh,
- post_delete_redirect = "/specfem3dglobe/objects/")
+ desktop,
+ Mesh,
+ "/specfem3dglobe/config/",
+ object_id = objId)
raise Http404
-def create_mesh(request):
-
- if request.method != 'POST':
- return HttpResponseRedirect('/specfem3dglobe/meshes/')
-
- nchunks = int(request.POST['nchunks'])
- return HttpResponseRedirect('/specfem3dglobe/meshes/create/%d/' % nchunks)
-
-
-
-
-def manipulate_mesh(request, action=None, nchunks=None, object_id=None):
+def manipulate_mesh(request, desktop, window, action=None, nchunks=None, object_id=None):
from forms import MeshAddManipulator, MeshChangeManipulator
if nchunks is None:
@@ -740,7 +838,7 @@
mesh = None
nchunks = int(nchunks)
- if action == "create":
+ if action == "new":
manipulator = MeshAddManipulator(nchunks)
elif action == "edit":
manipulator = MeshChangeManipulator(nchunks, object_id)
@@ -775,7 +873,7 @@
manipulator.do_html2python(new_data)
manipulator.save(new_data)
if not errors:
- return HttpResponseRedirect('/specfem3dglobe/objects/')
+ return HttpResponseRedirect('/specfem3dglobe/config/')
else:
# Populate new_data with a 'flattened' version of the current data.
new_data = manipulator.flatten_data()
@@ -784,35 +882,41 @@
# Populate the FormWrapper.
form = forms.FormWrapper(manipulator, new_data, errors, edit_inline = True)
- return render_to_response(template,
- { 'form': form,
- 'nchunks': nchunks,
- 'help_visible': help_visible,
- 'object': mesh,
- 'action': request.path,
- },
- RequestContext(request, {}))
+ html = loader.render_to_string(template,
+ { 'form': form,
+ 'nchunks': nchunks,
+ 'help_visible': help_visible,
+ 'object': mesh,
+ 'action': request.path,
+ }
+ )
+ window.content = gui.StaticContent(html)
+ desktop.activeWindow.selectWindow(window)
+ return desktop
-
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# generic
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-def create(request, ModelClass):
+def create(request, desktop, window, ModelClass):
return create_object(request,
+ desktop,
+ window,
ModelClass,
- post_save_redirect = '/specfem3dglobe/objects/',
+ post_save_redirect = '/specfem3dglobe/config/',
follow = { 'user': False },
)
-def update(request, object_id, ModelClass):
+def update(request, desktop, window, object_id, ModelClass):
return update_object(request,
+ desktop,
+ window,
ModelClass,
object_id,
- post_save_redirect = '/specfem3dglobe/objects/',
+ post_save_redirect = '/specfem3dglobe/config/',
follow = { 'user': False },
)
@@ -822,29 +926,53 @@
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-def events(request, path):
+def events(request, path, desktop):
from models import Event
- from django.views.generic.list_detail import object_list, object_detail
- from django.views.generic.create_update import delete_object
+ from list_detail import object_list, object_detail
+ from create_update import delete_object
+
+ fileBrowser = desktop.windowList[0]
+ eventsDir = fileBrowser.root.index["events"]
+ fileBrowser.path.append(eventsDir)
if not path:
- return object_list(request, queryset = Event.user_objects.all(), allow_empty = True)
+ view = gui.ChildWindow("/specfem3dglobe/events/", "View")
+ return object_list(request, desktop, view, queryset = Event.user_objects.all(), allow_empty = True)
name = path.pop(0)
index = Index({
"search": event_search,
- "create": lambda request, path: manipulate_event(request, path, action='create'),
+ "new": lambda request, path, desktop: manipulate_event(request, path, desktop, action='new'),
"upload": upload_event,
"sources": sources,
})
view = index.get(name)
if view:
- return view(request, path)
+ return view(request, path, desktop)
objId = intOr404(name)
+ url = "/specfem3dglobe/events/%d/" % objId
+ node = gui.File(name, get_object_or_404(Event, id=objId, user__exact=request.user).name) # Ouch!
+ eventsDir.appendNode(node)
+ fileBrowser.path.append(node)
+
+ view = gui.ChildWindow(url, "View")
+ edit = gui.ChildWindow(url + "edit/", "Edit")
+ menuBar = [
+ gui.Menu("actionMenu", "actions", "Actions",
+ [gui.MenuItem(url + "delete/", "Delete"),
+ ]
+ ),
+ ]
+ view.menuBar = edit.menuBar = menuBar
+ desktop.activeWindow.insertWindow(view)
+ desktop.activeWindow.insertWindow(edit)
+
if not path:
return object_detail(
request,
+ desktop,
+ view,
object_id = objId,
queryset = Event.user_objects.all(),
extra_context = { 'object_list': Event.user_objects.all() },
@@ -852,12 +980,13 @@
name = path.pop(0)
if name == "edit":
- return manipulate_event(request, path, object_id = objId, action = 'edit')
+ return manipulate_event(request, path, desktop, object_id = objId, action = 'edit', window = edit)
if name == "delete":
return delete_object(request,
+ desktop,
+ Event,
+ "/specfem3dglobe/events/",
object_id = objId,
- model = Event,
- post_delete_redirect = "/specfem3dglobe/events/",
)
index = Index({
"CMTSOLUTION.txt": (event_detail_cmtsolution_txt, (), dict(object_id = objId)),
@@ -868,19 +997,32 @@
return view(request, *args, **kwds)
-def sources(request, path):
+def sources(request, path, desktop):
from models import Source
- from django.views.generic.list_detail import object_detail
- from django.views.generic.create_update import update_object, delete_object
+ from list_detail import object_detail
+ from create_update import update_object, delete_object
if not path:
raise Http404
name = path.pop(0)
objId = intOr404(name)
+ url = "/specfem3dglobe/events/sources/%d/" % objId
+
+ view = gui.ChildWindow(url, "View")
+ edit = gui.ChildWindow(url + "edit/", "Edit")
+ menuBar = [
+ gui.Menu("actionMenu", "actions", "Actions",
+ [gui.MenuItem(url + "delete/", "Delete"),
+ ]
+ ),
+ ]
+ view.menuBar = edit.menuBar = menuBar
+ desktop.activeWindow.insertWindow(view)
+ desktop.activeWindow.insertWindow(edit)
if not path:
- return object_detail(request, object_id = objId, queryset = Source.objects.all())
+ return object_detail(request, desktop, view, object_id = objId, queryset = Source.objects.all())
name = path.pop(0)
if path: raise Http404
@@ -888,15 +1030,18 @@
if name == "edit":
return update_object(
request,
+ desktop,
+ edit,
+ Source,
object_id = objId,
- model = Source,
- post_save_redirect = "/specfem3dglobe/events/",
+ post_save_redirect = url,
)
if name == "delete":
return delete_object(
request,
+ desktop,
+ Source,
object_id = objId,
- model = Source,
post_delete_redirect = "/specfem3dglobe/events/",
)
@@ -908,15 +1053,18 @@
return view(request, *args, **kwds)
-def event_search(request, path):
+def event_search(request, path, desktop):
import urllib2
if path: raise Http404
+ search = gui.ChildWindow("/specfem3dglobe/events/search/", "Search")
+ desktop.activeWindow.insertWindow(search)
if not request.GET:
- return render_to_response('SeismoWebPortal/event_search.html',
- {},
- RequestContext(request, {}))
+ html = loader.render_to_string('SeismoWebPortal/event_search.html')
+ search.content = gui.StaticContent(html)
+ desktop.activeWindow.selectWindow(search)
+ return desktop
# Simply forward the search request to globalcmt.org.
query = request.GET.urlencode()
@@ -945,26 +1093,33 @@
except:
r = Region(event.regionName)
r.save()
-
- return render_to_response('SeismoWebPortal/event_search_results.html',
- {'event_list': parser.cmtList },
- RequestContext(request, {}))
+ results = gui.ChildWindow(request.path, "Results")
+ html = loader.render_to_string('SeismoWebPortal/event_search_results.html',
+ {'event_list': parser.cmtList })
+ results.content = gui.StaticContent(html)
+ desktop.activeWindow.selectWindow(results)
+ return desktop
-def manipulate_event(request, path, action=None, object_id=None):
+
+def manipulate_event(request, path, desktop, action=None, object_id=None, window=None):
from models import Event
from forms import SingleSourceEventAddManipulator, SingleSourceEventChangeManipulator
if path: raise Http404
- if action == "create":
+ if action == "new":
manipulator = SingleSourceEventAddManipulator()
event = None
+ window = gui.ChildWindow("/specfem3dglobe/events/new/", "New")
+ desktop.activeWindow.insertWindow(window)
elif action == "edit":
event = get_object_or_404(Event, id=object_id, user__exact=request.user)
if not event.singleSource:
return update_object(
request,
+ desktop,
+ window,
Event,
object_id,
post_save_redirect = '/specfem3dglobe/events/',
@@ -987,16 +1142,17 @@
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, {}))
+ html = loader.render_to_string('SeismoWebPortal/single_source_event_form.html',
+ {'form': form,
+ 'action': request.path,
+ 'object': event,
+ })
+ window.content = gui.StaticContent(html)
+ desktop.activeWindow.selectWindow(window)
+ return desktop
-
-def upload_event(request, path):
+def upload_event(request, path, desktop):
from forms import UploadEventManipulator
from os.path import dirname
@@ -1025,12 +1181,15 @@
else:
errors = new_data = {}
+ child = gui.ChildWindow("/specfem3dglobe/events/upload/", "Upload")
form = forms.FormWrapper(manipulator, new_data, errors)
- return render_to_response('SeismoWebPortal/event_upload.html',
- {'form': form, 'help_visible': help_visible},
- RequestContext(request, {}))
+ html = loader.render_to_string('SeismoWebPortal/event_upload.html',
+ {'form': form, 'help_visible': help_visible}
+ )
+ child.content = gui.StaticContent(html)
+ desktop.activeWindow.selectWindow(child)
+ return desktop
-
def event_detail_gearth(request, object_id):
from models import Event
event = get_object_or_404(Event, id=object_id)
@@ -1121,36 +1280,54 @@
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-def stations(request, path):
- from django.views.generic.list_detail import object_detail
- from django.views.generic.create_update import update_object, delete_object
+def config_stations(request, path, desktop):
+ from list_detail import object_detail
+ from create_update import update_object, delete_object
if not path: raise Http404
name = path.pop(0)
if name == "upload":
if path: raise Http404
- return upload_station_list(request)
+ return upload_station_list(request, desktop)
objId = intOr404(name)
+ url = "/specfem3dglobe/config/stations/%d/" % objId
+
+ view = gui.ChildWindow(url, "View")
+ edit = gui.ChildWindow(url + "edit/", "Edit")
+ menuBar = [
+ gui.Menu("actionMenu", "actions", "Actions",
+ [gui.MenuItem(url + "delete/", "Delete"),
+ ]
+ ),
+ ]
+ view.menuBar = edit.menuBar = menuBar
+ desktop.activeWindow.insertWindow(view)
+ desktop.activeWindow.insertWindow(edit)
+
if not path:
- return object_detail(request, object_id = objId, queryset = StationList.user_objects.all())
-
+ return object_detail(request, desktop, view, StationList.user_objects.all(), object_id = objId)
+
name = path.pop(0)
if path: raise Http404
if name == "edit":
return update_object(request,
+ desktop,
+ edit,
StationList,
object_id = objId,
- post_save_redirect = "/specfem3dglobe/stations/%(id)d/",
+ post_save_redirect = "/specfem3dglobe/config/stations/%(id)d/",
follow = { 'user': False },
)
+
if name == "delete":
return delete_object(request,
+ desktop,
StationList,
object_id = objId,
- post_delete_redirect = "/specfem3dglobe/objects/",
+ post_delete_redirect = "/specfem3dglobe/config/",
)
index = Index({
@@ -1161,7 +1338,7 @@
return view(request, object_id = objId)
-def upload_station_list(request):
+def upload_station_list(request, desktop):
from os.path import dirname
manipulator = UploadStationListManipulator()
@@ -1187,10 +1364,14 @@
else:
errors = new_data = {}
+ child = gui.ChildWindow("/specfem3dglobe/config/stations/upload/", "Upload")
form = forms.FormWrapper(manipulator, new_data, errors)
- return render_to_response('SeismoWebPortal/stationlist_upload.html',
- {'form': form, 'help_visible': help_visible},
- RequestContext(request, {}))
+ html = loader.render_to_string('SeismoWebPortal/stationlist_upload.html',
+ {'form': form, 'help_visible': help_visible}
+ )
+ child.content = gui.StaticContent(html)
+ desktop.activeWindow.selectWindow(child)
+ return desktop
def stationlist_detail_gearth(request, object_id):
@@ -1292,7 +1473,7 @@
from models import UserInfo
-def help(request, path):
+def help(request, path, desktop):
if path != ["toggle"] or request.method != 'POST':
raise Http404
@@ -1341,7 +1522,7 @@
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def mineos_parameters_pml(request, sim_id):
- from django.template import loader, Context
+ from django.template import Context
response = HttpResponse(mimetype='text/xml')
More information about the cig-commits
mailing list