[cig-commits] r11611 - in cs/portal/trunk/seismo/SeismoWebPortal: . designs/plone static/css templates/SeismoWebPortal templates/registration

leif at geodynamics.org leif at geodynamics.org
Thu Mar 27 15:39:32 PDT 2008


Author: leif
Date: 2008-03-27 15:39:32 -0700 (Thu, 27 Mar 2008)
New Revision: 11611

Added:
   cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/contact_info.html
Removed:
   cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/TreeBrowser.html
   cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/TreeBrowser.py
   cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/register.html
Modified:
   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/__init__.py
   cs/portal/trunk/seismo/SeismoWebPortal/gui.py
   cs/portal/trunk/seismo/SeismoWebPortal/static/css/style.css
   cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/password_change_form.html
   cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/registration_form.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:
Implemented "Application" concept.


Modified: cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/Desktop.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/Desktop.html	2008-03-27 20:12:24 UTC (rev 11610)
+++ cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/Desktop.html	2008-03-27 22:39:32 UTC (rev 11611)
@@ -48,4 +48,115 @@
 </ul></div>
 
 
-$activeWindow
+#set $appWindow = $desktop.activeWindow
+
+
+#set $breadcrumbs = $getattr($appWindow, 'breadcrumbs', None)
+#if $breadcrumbs
+    <div id="portal-breadcrumbs">
+        <span id="breadcrumbs-you-are-here">You are here:</span> $design.renderBreadcrumbs($breadcrumbs)
+    </div>
+#end if
+
+
+<!--
+<div class="messages {% if messages %}active{% endif %}">{% if messages %}{{ messages|join:" " }}{% else %}&nbsp;{% endif %}</div>
+-->
+
+
+<table id="portal-columns">
+    <tbody>
+        <tr>
+            #if $hasattr($appWindow, 'renderNavTree')
+            #set $navTree = $appWindow.renderNavTree($design)
+            <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>
+            #endif
+            <td id="portal-column-content">
+                #if $appWindow.windowList
+                    <div id="content" class="documentEditable">
+                        <ul class="contentViews">
+                            #for $window in $appWindow.windowList
+                                #set $klass = $window is $appWindow.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>
+                                #for $button in $appWindow.activeWindow.buttons
+                                    <li><a href="$button.url">$button.title</a></li>
+                                #end for
+                                #if $appWindow.activeWindow.menuBar
+                                    #set $menuBar = $appWindow.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($appWindow.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>

Modified: cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/Desktop.py
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/Desktop.py	2008-03-27 20:12:24 UTC (rev 11610)
+++ cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/Desktop.py	2008-03-27 22:39:32 UTC (rev 11611)
@@ -33,10 +33,10 @@
 currentTime=time.time
 __CHEETAH_version__ = '2.0rc7'
 __CHEETAH_versionTuple__ = (2, 0, 0, 'candidate', 7)
-__CHEETAH_genTime__ = 1206471351.95895
-__CHEETAH_genTimestamp__ = 'Tue Mar 25 11:55:51 2008'
+__CHEETAH_genTime__ = 1206636933.3486111
+__CHEETAH_genTimestamp__ = 'Thu Mar 27 09:55:33 2008'
 __CHEETAH_src__ = 'Desktop.html'
-__CHEETAH_srcLastModified__ = 'Tue Mar 25 11:55:43 2008'
+__CHEETAH_srcLastModified__ = 'Thu Mar 27 09:55:30 2008'
 __CHEETAH_docstring__ = 'Autogenerated by CHEETAH: The Python-Powered Template Engine'
 
 if __CHEETAH_versionTuple__ < RequiredCheetahVersionTuple:
@@ -161,9 +161,153 @@
 
 
 ''')
-        _v = VFFSL(SL,"activeWindow",True) # '$activeWindow' on line 51, col 1
-        if _v is not None: write(_filter(_v, rawExpr='$activeWindow')) # from line 51, col 1.
-        write('\n')
+        appWindow = VFFSL(SL,"desktop.activeWindow",True)
+        write('\n\n')
+        breadcrumbs = VFFSL(SL,"getattr",False)(VFFSL(SL,"appWindow",True), 'breadcrumbs', None)
+        if VFFSL(SL,"breadcrumbs",True): # generated from line 55, col 1
+            write('    <div id="portal-breadcrumbs">\n        <span id="breadcrumbs-you-are-here">You are here:</span> ')
+            _v = VFN(VFFSL(SL,"design",True),"renderBreadcrumbs",False)(VFFSL(SL,"breadcrumbs",True)) # '$design.renderBreadcrumbs($breadcrumbs)' on line 57, col 66
+            if _v is not None: write(_filter(_v, rawExpr='$design.renderBreadcrumbs($breadcrumbs)')) # from line 57, col 66.
+            write('\n    </div>\n')
+        write('''
+
+<!--
+<div class="messages {% if messages %}active{% endif %}">{% if messages %}{{ messages|join:" " }}{% else %}&nbsp;{% endif %}</div>
+-->
+
+
+<table id="portal-columns">
+    <tbody>
+        <tr>
+''')
+        if VFFSL(SL,"hasattr",False)(VFFSL(SL,"appWindow",True), 'renderNavTree'): # generated from line 70, col 13
+            navTree = VFN(VFFSL(SL,"appWindow",True),"renderNavTree",False)(VFFSL(SL,"design",True))
+            write('''            <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 80, col 33
+            if _v is not None: write(_filter(_v, rawExpr='$navTree')) # from line 80, col 33.
+            write('''
+                            </ul>
+                        </dd>
+                    </dl>
+                </div>
+            </td>
+''')
+        write('            <td id="portal-column-content">\n')
+        if VFFSL(SL,"appWindow.windowList",True): # generated from line 88, col 17
+            write('                    <div id="content" class="documentEditable">\n                        <ul class="contentViews">\n')
+            for window in VFFSL(SL,"appWindow.windowList",True): # generated from line 91, col 29
+                klass = VFFSL(SL,"window",True) is VFFSL(SL,"appWindow.activeWindow",True) and "selected" or "plain"
+                write('                                <li class="')
+                _v = VFFSL(SL,"klass",True) # '$klass' on line 93, col 44
+                if _v is not None: write(_filter(_v, rawExpr='$klass')) # from line 93, col 44.
+                write('"><a href="')
+                _v = VFFSL(SL,"window.url",True) # '$window.url' on line 93, col 61
+                if _v is not None: write(_filter(_v, rawExpr='$window.url')) # from line 93, col 61.
+                write('">')
+                _v = VFFSL(SL,"window.title",True) # '$window.title' on line 93, col 74
+                if _v is not None: write(_filter(_v, rawExpr='$window.title')) # from line 93, 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>
+''')
+            for button in VFFSL(SL,"appWindow.activeWindow.buttons",True): # generated from line 106, col 33
+                write('                                    <li><a href="')
+                _v = VFFSL(SL,"button.url",True) # '$button.url' on line 107, col 50
+                if _v is not None: write(_filter(_v, rawExpr='$button.url')) # from line 107, col 50.
+                write('">')
+                _v = VFFSL(SL,"button.title",True) # '$button.title' on line 107, col 63
+                if _v is not None: write(_filter(_v, rawExpr='$button.title')) # from line 107, col 63.
+                write('</a></li>\n')
+            if VFFSL(SL,"appWindow.activeWindow.menuBar",True): # generated from line 109, col 33
+                menuBar = VFN(VFFSL(SL,"appWindow.activeWindow",True),"menuBar",True)[:]
+                VFN(VFFSL(SL,"menuBar",True),"reverse",False)()
+                for menu in VFFSL(SL,"menuBar",True): # generated from line 112, col 37
+                    write('                                        <li>\n                                            <dl class="actionMenu" id="')
+                    _v = VFFSL(SL,"menu.id",True) # '$menu.id' on line 114, col 72
+                    if _v is not None: write(_filter(_v, rawExpr='$menu.id')) # from line 114, col 72.
+                    write('">\n                                                <dt class="actionMenuHeader"><a href="')
+                    _v = VFFSL(SL,"menu.url",True) # '$menu.url' on line 115, col 87
+                    if _v is not None: write(_filter(_v, rawExpr='$menu.url')) # from line 115, col 87.
+                    write('">')
+                    _v = VFFSL(SL,"menu.title",True) # '$menu.title' on line 115, col 98
+                    if _v is not None: write(_filter(_v, rawExpr='$menu.title')) # from line 115, col 98.
+                    write('''</a></dt>
+                                                <dd class="actionMenuContent">
+                                                    <ul>
+''')
+                    for item in VFFSL(SL,"menu.items",True): # generated from line 118, col 57
+                        klass = "visualIconPadding visualIcon"
+                        write('                                                            <li><a href="')
+                        _v = VFFSL(SL,"item.url",True) # '$item.url' on line 120, col 74
+                        if _v is not None: write(_filter(_v, rawExpr='$item.url')) # from line 120, col 74.
+                        write('" class="')
+                        _v = VFFSL(SL,"klass",True) # '$klass' on line 120, col 92
+                        if _v is not None: write(_filter(_v, rawExpr='$klass')) # from line 120, col 92.
+                        write('">')
+                        _v = VFFSL(SL,"item.title",True) # '$item.title' on line 120, col 100
+                        if _v is not None: write(_filter(_v, rawExpr='$item.title')) # from line 120, 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,"appWindow.activeWindow.content",True)) # '$design.render($appWindow.activeWindow.content)' on line 131, col 29
+            if _v is not None: write(_filter(_v, rawExpr='$design.render($appWindow.activeWindow.content)')) # from line 131, 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

Deleted: cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/TreeBrowser.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/TreeBrowser.html	2008-03-27 20:12:24 UTC (rev 11610)
+++ cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/TreeBrowser.html	2008-03-27 22:39:32 UTC (rev 11611)
@@ -1,104 +0,0 @@
-
-<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 %}&nbsp;{% 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>
-                                #for $button in $browser.activeWindow.buttons
-                                    <li><a href="$button.url">$button.title</a></li>
-                                #end for
-                                #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>

Deleted: cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/TreeBrowser.py
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/TreeBrowser.py	2008-03-27 20:12:24 UTC (rev 11610)
+++ cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/TreeBrowser.py	2008-03-27 22:39:32 UTC (rev 11611)
@@ -1,270 +0,0 @@
-#!/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__ = 1206477342.3192551
-__CHEETAH_genTimestamp__ = 'Tue Mar 25 13:35:42 2008'
-__CHEETAH_src__ = 'TreeBrowser.html'
-__CHEETAH_srcLastModified__ = 'Tue Mar 25 13:32:36 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 %}&nbsp;{% 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>
-''')
-            for button in VFFSL(SL,"browser.activeWindow.buttons",True): # generated from line 48, col 33
-                write('                                    <li><a href="')
-                _v = VFFSL(SL,"button.url",True) # '$button.url' on line 49, col 50
-                if _v is not None: write(_filter(_v, rawExpr='$button.url')) # from line 49, col 50.
-                write('">')
-                _v = VFFSL(SL,"button.title",True) # '$button.title' on line 49, col 63
-                if _v is not None: write(_filter(_v, rawExpr='$button.title')) # from line 49, col 63.
-                write('</a></li>\n')
-            if VFFSL(SL,"browser.activeWindow.menuBar",True): # generated from line 51, 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 54, col 37
-                    write('                                        <li>\n                                            <dl class="actionMenu" id="')
-                    _v = VFFSL(SL,"menu.id",True) # '$menu.id' on line 56, col 72
-                    if _v is not None: write(_filter(_v, rawExpr='$menu.id')) # from line 56, col 72.
-                    write('">\n                                                <dt class="actionMenuHeader"><a href="')
-                    _v = VFFSL(SL,"menu.url",True) # '$menu.url' on line 57, col 87
-                    if _v is not None: write(_filter(_v, rawExpr='$menu.url')) # from line 57, col 87.
-                    write('">')
-                    _v = VFFSL(SL,"menu.title",True) # '$menu.title' on line 57, col 98
-                    if _v is not None: write(_filter(_v, rawExpr='$menu.title')) # from line 57, col 98.
-                    write('''</a></dt>
-                                                <dd class="actionMenuContent">
-                                                    <ul>
-''')
-                    for item in VFFSL(SL,"menu.items",True): # generated from line 60, col 57
-                        klass = "visualIconPadding visualIcon"
-                        write('                                                            <li><a href="')
-                        _v = VFFSL(SL,"item.url",True) # '$item.url' on line 62, col 74
-                        if _v is not None: write(_filter(_v, rawExpr='$item.url')) # from line 62, col 74.
-                        write('" class="')
-                        _v = VFFSL(SL,"klass",True) # '$klass' on line 62, col 92
-                        if _v is not None: write(_filter(_v, rawExpr='$klass')) # from line 62, col 92.
-                        write('">')
-                        _v = VFFSL(SL,"item.title",True) # '$item.title' on line 62, col 100
-                        if _v is not None: write(_filter(_v, rawExpr='$item.title')) # from line 62, 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 73, col 29
-            if _v is not None: write(_filter(_v, rawExpr='$design.render($browser.activeWindow.content)')) # from line 73, 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()
-
-

Modified: cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/__init__.py
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/__init__.py	2008-03-27 20:12:24 UTC (rev 11610)
+++ cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/__init__.py	2008-03-27 22:39:32 UTC (rev 11611)
@@ -2,7 +2,6 @@
 
 from Desktop import Desktop
 from Document import Document
-from TreeBrowser import TreeBrowser
 
 
 class PloneDesign(object):
@@ -20,22 +19,11 @@
 
     def renderDesktop(self, desktop):
         template = self.newDesktopTemplate()
+        template.design = self
         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
 
@@ -55,57 +43,27 @@
             aClass = "navTreeCurrentItem"
         return self.navTreeItemFormat % ("visualNoMarker", "contenttype-folder", url, aClass, title, items)
 
-    def renderNavTreeFile(self, title, url, selected):
+    def renderNavTreeLeaf(self, title, url, selected, contentType):
         aClass = ""
         if selected:
             aClass = "navTreeCurrentItem"
-        return self.navTreeItemFormat % ("", "contenttype-document", url, aClass, title, "")
+        return self.navTreeItemFormat % ("", contentType, 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>&nbsp;' % (field.field.field_name, field.label)
-                else:
-                    label = ''
-                return '<p>' + label + field.field.render(None) + tip
-        renderer = FormRenderer()
-        return renderer.render(form)
+    def renderNavTreeFile(self, title, url, selected):
+        return self.renderNavTreeLeaf(title, url, selected, "contenttype-document")
 
+    def renderNavTreeSearch(self, title, url, selected):
+        return self.renderNavTreeLeaf(title, url, selected, "contenttype-search")
+
+    def renderNavTreeSearchResults(self, title, url, selected):
+        return self.renderNavTreeLeaf(title, url, selected, "contenttype-topic")
+
     def newDocumentTemplate(self):
         return Document()
 
     def newDesktopTemplate(self):
         return Desktop()
 
-    def newTreeBrowserTemplate(self):
-        return TreeBrowser()
-
     def renderBreadcrumbs(self, breadcrumbs):
         breadcrumbSeparator = ' <span class="breadcrumbSeparator">&rarr;</span> '
         lastFormat = '<span dir="ltr"><span>%s</span></span>'

Modified: cs/portal/trunk/seismo/SeismoWebPortal/gui.py
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/gui.py	2008-03-27 20:12:24 UTC (rev 11610)
+++ cs/portal/trunk/seismo/SeismoWebPortal/gui.py	2008-03-27 22:39:32 UTC (rev 11611)
@@ -31,7 +31,7 @@
         self.title = title
 
 
-class ParentWindow(Window, WindowParent):
+class AppWindow(Window, WindowParent):
     
     def __init__(self, url, title):
         Window.__init__(self, url, title)
@@ -142,7 +142,7 @@
         return items
 
 
-class File(Node):
+class LeafNode(Node):
 
     def xresolve(self, request, path):
         if path:
@@ -157,17 +157,35 @@
     def renderNavTree(self, urlRoot, path, level, design):
         url = self.url(urlRoot)
         selected = len(path) > level and path[level] is self
-        return design.renderNavTreeFile(self.title, url, selected)
+        render = getattr(design, self.render)
+        return render(self.title, url, selected)
 
 
+class File(LeafNode):
+    render = 'renderNavTreeFile'
 
-class TreeBrowser(ParentWindow):
 
+class Search(LeafNode):
+    render = 'renderNavTreeSearch'
+
+
+class SearchResults(LeafNode):
+    render = 'renderNavTreeSearchResults'
+
+
+class Navigator(AppWindow):
+
     def __init__(self, url, title, root):
-        ParentWindow.__init__(self, url, title)
+        AppWindow.__init__(self, url, title)
         self.root = root
         self.path = [root]
 
+    def renderNavTree(self, design):
+        return self.root.renderNavTreeItems(self.url, self.path, 0, design)
+
+
+class TreeBrowser(Navigator):
+
     def xresolve(self, request, path):
         self.path = self.root.resolve(request, path)
         return [self] + self.path[1:]
@@ -176,7 +194,7 @@
         path = self.path
         root = self.root #path[0]
         path = path[1:]
-        bc = [(self.url, self.title)]
+        bc = [(self.url, root.title)]
         urlRoot = self.url
         for node in path:
             url = node.url(urlRoot)
@@ -184,9 +202,10 @@
             bc.append(crumb)
         return bc
 
-    def renderNavTree(self, design):
-        return self.root.renderNavTreeItems(self.url, self.path, 0, design)
 
-
 class FileBrowser(TreeBrowser):
     pass
+
+
+class EventFinder(Navigator):
+    pass

Modified: cs/portal/trunk/seismo/SeismoWebPortal/static/css/style.css
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/static/css/style.css	2008-03-27 20:12:24 UTC (rev 11610)
+++ cs/portal/trunk/seismo/SeismoWebPortal/static/css/style.css	2008-03-27 22:39:32 UTC (rev 11611)
@@ -502,6 +502,12 @@
 .error {
     font-weight: bold;
     color: red;
+
+    /* override plone */
+    background-color: white;
+    border: none;
+    padding: 0;
+    margin: 0;
 }
 
 form span.error {
@@ -620,3 +626,41 @@
 .greek {
     text-transform: none;
 }
+
+
+
+/* plone extensions */
+
+ at media screen {
+
+        .contenttype-search,
+    .actionMenu .contenttype-search a:hover { 
+        background-image: url(http://www.geodynamics.org/cig/search_icon.gif); 
+        background-repeat: no-repeat; 
+        background-position: 0% 0%;
+    }
+    /* Holly hack to prevent items from shifting to the left in IE*/
+    * html .contenttype-search { 
+        height: 1%;
+    }
+    #portal-sitemap .contenttype-search a:hover,
+    #portlet-navigation-tree .contenttype-search a:hover,
+    #portlet-navigation-tree .contenttype-search a.navTreeCurrentItem {
+        background-image: url(http://www.geodynamics.org/cig/search_icon.gif);
+        background-repeat: no-repeat;
+        background-position: 0% 3px;
+    }
+    #portal-sitemap .contenttype-search,
+    #portlet-navigation-tree .contenttype-search {
+        background-position: 0% 4px;
+    }
+    * html #portal-sitemap .contenttype-search a:hover,
+    * html #portlet-navigation-tree .contenttype-search a:hover,
+    * html #portlet-navigation-tree .contenttype-search a.navTreeCurrentItem {
+        position: relative;
+    }
+    .listing .contenttype-search { 
+        display: block; 
+    }
+
+}

Copied: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/contact_info.html (from rev 11539, cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/registration_form.html)
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/contact_info.html	                        (rev 0)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/contact_info.html	2008-03-27 22:39:32 UTC (rev 11611)
@@ -0,0 +1,48 @@
+
+    <div>
+        <label for="id_first_name" class=before>first name</label>
+        {{ form.first_name }}
+        {% if form.first_name.errors %}<span class=error>{{ form.first_name.errors|join:", " }}</span>{% endif %}
+    </div>
+
+    <div>
+        <label for="id_last_name" class=before>last name</label>
+        {{ form.last_name }}
+        {% if form.last_name.errors %}<span class=error>{{ form.last_name.errors|join:", " }}</span>{% endif %}
+    </div>
+
+    <div>
+        <label for="id_email" class=before>e-mail</label>
+        {{ form.email }}
+        {% if form.email.errors %}<span class=error>{{ form.email.errors|join:", " }}</span>{% endif %}
+    </div>
+
+    <div>
+        <label for="id_institution" class=before>institution</label>
+        {{ form.institution }}
+        {% if form.institution.errors %}<span class=error>{{ form.institution.errors|join:", " }}</span>{% endif %}
+    </div>
+
+    <div>
+        <label for="id_address1" class=before>address</label>
+        {{ form.address1 }} (optional)
+        {% if form.address1.errors %}<span class=error>{{ form.address1.errors|join:", " }}</span>{% endif %}
+    </div>
+
+    <div>
+        <label for="id_address2" class=before>city</label>
+        {{ form.address2 }} (optional)
+        {% if form.address2.errors %}<span class=error>{{ form.address2.errors|join:", " }}</span>{% endif %}
+    </div>
+
+    <div>
+        <label for="id_address3" class=before>state &amp; ZIP</label>
+        {{ form.address3 }} (optional)
+        {% if form.address3.errors %}<span class=error>{{ form.address3.errors|join:", " }}</span>{% endif %}
+    </div>
+
+    <div>
+        <label for="id_phone" class=before>phone number</label>
+        {{ form.phone }} (optional)
+        {% if form.phone.errors %}<span class=error>{{ form.phone.errors|join:", " }}</span>{% endif %}
+    </div>

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-27 20:12:24 UTC (rev 11610)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/password_change_form.html	2008-03-27 22:39:32 UTC (rev 11611)
@@ -5,7 +5,7 @@
 <p><span class=error>Please correct the following error{{ form.error_dict|pluralize }}.</span>
 {% endif %}
 
-<form action="/specfem3dglobe/registration/password/" method="post">
+<form action="/specfem3dglobe/profile/password/" method="post">
     <div class=tab30ex>
 
     <div>

Deleted: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/register.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/register.html	2008-03-27 20:12:24 UTC (rev 11610)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/register.html	2008-03-27 22:39:32 UTC (rev 11611)
@@ -1,9 +0,0 @@
-
-<h2>new user registration</h2>
-
-<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" %}

Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/registration_form.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/registration_form.html	2008-03-27 20:12:24 UTC (rev 11610)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/registration_form.html	2008-03-27 22:39:32 UTC (rev 11611)
@@ -1,4 +1,11 @@
 
+<h2>new user registration</h2>
+
+<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>.
+
 {% if form.has_errors %}
 <p><span class=error>Please correct the following error{{ form.error_dict|pluralize }}.</span>
 {% endif %}
@@ -6,7 +13,6 @@
 <form method="post" action="/specfem3dglobe/registration/">
     <div class=tab30ex>
 
-    {% if not desktop.user %}
     <fieldset><legend>username and password</legend>
 
     <div>
@@ -29,63 +35,14 @@
 
     </fieldset>
 
-    {% endif %}
 
     <fieldset><legend>contact information</legend>
 
-    <div>
-        <label for="id_first_name" class=before>first name</label>
-        {{ form.first_name }}
-        {% if form.first_name.errors %}<span class=error>{{ form.first_name.errors|join:", " }}</span>{% endif %}
-    </div>
+    {% include "SeismoWebPortal/contact_info.html" %}
 
-    <div>
-        <label for="id_last_name" class=before>last name</label>
-        {{ form.last_name }}
-        {% if form.last_name.errors %}<span class=error>{{ form.last_name.errors|join:", " }}</span>{% endif %}
-    </div>
-
-    <div>
-        <label for="id_email" class=before>e-mail</label>
-        {{ form.email }}
-        {% if form.email.errors %}<span class=error>{{ form.email.errors|join:", " }}</span>{% endif %}
-    </div>
-
-    <div>
-        <label for="id_institution" class=before>institution</label>
-        {{ form.institution }}
-        {% if form.institution.errors %}<span class=error>{{ form.institution.errors|join:", " }}</span>{% endif %}
-    </div>
-
-    <div>
-        <label for="id_address1" class=before>address</label>
-        {{ form.address1 }} (optional)
-        {% if form.address1.errors %}<span class=error>{{ form.address1.errors|join:", " }}</span>{% endif %}
-    </div>
-
-    <div>
-        <label for="id_address2" class=before>city</label>
-        {{ form.address2 }} (optional)
-        {% if form.address2.errors %}<span class=error>{{ form.address2.errors|join:", " }}</span>{% endif %}
-    </div>
-
-    <div>
-        <label for="id_address3" class=before>state &amp; ZIP</label>
-        {{ form.address3 }} (optional)
-        {% if form.address3.errors %}<span class=error>{{ form.address3.errors|join:", " }}</span>{% endif %}
-    </div>
-
-    <div>
-        <label for="id_phone" class=before>phone number</label>
-        {{ form.phone }} (optional)
-        {% if form.phone.errors %}<span class=error>{{ form.phone.errors|join:", " }}</span>{% endif %}
-    </div>
-
     </fieldset>
 
 
-    {% if not desktop.user %}
-
     <fieldset><legend>invitation</legend>
 
     <p>If you were given an invitation code, enter it below.
@@ -99,14 +56,10 @@
 
     </fieldset>
 
-    {% endif %}
 
-    {% if not desktop.user %}
     <div><input class=submit type="submit" value="Register"/></div>
-    {% else %}
-    <div><input class=submit type="submit" value="Save"/></div>
-    {% endif %}
 
+
     </div> <!-- tab30ex -->
 
 </form>

Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/userinfo_form.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/userinfo_form.html	2008-03-27 20:12:24 UTC (rev 11610)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/userinfo_form.html	2008-03-27 22:39:32 UTC (rev 11611)
@@ -1,5 +1,18 @@
 
-<h1>profile</h1>
+<h1>contact information</h1>
 
+{% if form.has_errors %}
+<p><span class=error>Please correct the following error{{ form.error_dict|pluralize }}.</span>
+{% endif %}
 
-{% include "SeismoWebPortal/registration_form.html" %}
+<form method="post" action="/specfem3dglobe/profile/">
+
+    <div class=tab30ex>
+
+    {% include "SeismoWebPortal/contact_info.html" %}
+
+    <div><input class=submit type="submit" value="Save"/></div>
+
+    </div> <!-- tab30ex -->
+
+</form>

Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/registration/login.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/registration/login.html	2008-03-27 20:12:24 UTC (rev 11610)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/registration/login.html	2008-03-27 22:39:32 UTC (rev 11611)
@@ -1,8 +1,6 @@
 
-<p><a href="/specfem3dglobe/"><img id=logo src="/specfem3dglobe/pics/specfem3dg_logo.jpg" width=99 height=94>Home</a>
+<h2>login</h2>
 
-<h1 class=titlebar>login</h1>
-
 {% if form.has_errors %}
 <dl class=error>
     {% for f in form.error_dict.iteritems %}
@@ -46,6 +44,6 @@
 
 <p>Are you a new user? If so, please <a href="/specfem3dglobe/registration/">register</a>.
 
-<p>If you've forgotten your username and/or password, try <a href="/specfem3dglobe/pwreset/">resetting your password</a>.
+<p>If you've forgotten your username and/or password, try <a href="/specfem3dglobe/login/reset/">resetting your password</a>.
 
 <p>If you need help, <a href="mailto:portal at geodynamics.org">contact us</a>.

Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/registration/pwreset.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/registration/pwreset.html	2008-03-27 20:12:24 UTC (rev 11610)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/registration/pwreset.html	2008-03-27 22:39:32 UTC (rev 11611)
@@ -1,11 +1,9 @@
 
-<p><a href="/specfem3dglobe/"><img id=logo src="/specfem3dglobe/pics/specfem3dg_logo.jpg" width=99 height=94>Home</a>
+<h2>reset password</h2>
 
-<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>
 
-<form action="/specfem3dglobe/pwreset/" method="post">
+<form action="/specfem3dglobe/login/reset/" method="post">
 
     {% if form.has_errors %}
     <p><span class=error>Please correct the following error{{ form.error_dict|pluralize }}.</span>

Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/registration/pwreset_done.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/registration/pwreset_done.html	2008-03-27 20:12:24 UTC (rev 11610)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/registration/pwreset_done.html	2008-03-27 22:39:32 UTC (rev 11611)
@@ -1,8 +1,6 @@
 
-<p><a href="/specfem3dglobe/"><img id=logo src="/specfem3dglobe/pics/specfem3dg_logo.jpg" width=99 height=94>Home</a>
+<h2>password reset</h2>
 
-<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>

Modified: cs/portal/trunk/seismo/SeismoWebPortal/views.py
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/views.py	2008-03-27 20:12:24 UTC (rev 11610)
+++ cs/portal/trunk/seismo/SeismoWebPortal/views.py	2008-03-27 22:39:32 UTC (rev 11611)
@@ -58,14 +58,6 @@
     desktop = gui.Desktop("/specfem3dglobe", "CIG Seismology Web Portal")
     if not request.user.is_anonymous():
         desktop.user = request.user
-    navtree = gui.Directory("desktop", "Desktop", [
-        gui.Directory("home", "Home", []), 
-        gui.Directory("trash", "Trash", []), 
-        gui.Directory("events", "Events", []),
-        ])
-    fileBrowser = gui.FileBrowser("/specfem3dglobe/", "Desktop", navtree)
-    desktop.insertWindow(fileBrowser)
-    desktop.selectWindow(fileBrowser)
 
     path = pathname.split('/')
     if path[-1] == "":
@@ -73,8 +65,8 @@
 
     if not path:
         if request.user.is_anonymous():
-            return render_to_response('SeismoWebPortal/splash.html', {},
-                                      RequestContext(request, {}))
+            return httpResponse(about(desktop))
+        openFileBrowser(desktop)
         return httpResponse(desktopFolder(request, desktop))
 
     name = path.pop(0)
@@ -83,7 +75,6 @@
 
     index = Index({
         "login": login,
-        "pwreset": pwreset,
         "registration": registration,
         "runs": runs, # accessed by daemon
         "jobs": jobs, # accessed by daemon
@@ -106,12 +97,14 @@
         return HttpResponseRedirect('/specfem3dglobe/login?%s=%s' %
                                     (REDIRECT_FIELD_NAME, quote(request.get_full_path())))
 
+    openFileBrowser(desktop)
+
     index = Index({
         "home": homeFolder,
         "trash": trashFolder,
         "config": config,
         "events": event_search,
-        "profile": registration,
+        "profile": profile,
         "logout": logout,
         "help": help,
         "readme": readme,
@@ -123,6 +116,44 @@
     return httpResponse(configObject(name, request, path, desktop))
 
 
+def about(desktop):
+    appWindow, _, _ = openPublicApps(desktop)
+    desktop.selectWindow(appWindow)
+    
+    splash = gui.ChildWindow("/specfem3dglobe/", "About")
+    html = loader.render_to_string('SeismoWebPortal/splash.html')
+    splash.content = gui.StaticContent(html)
+    
+    appWindow.insertWindow(splash)
+    appWindow.selectWindow(splash)
+
+    return desktop
+
+
+def openPublicApps(desktop):
+    about = gui.AppWindow("/specfem3dglobe/", "About")
+    desktop.insertWindow(about)
+
+    login = gui.AppWindow("/specfem3dglobe/login/", "Login")
+    desktop.insertWindow(login)
+
+    register = gui.AppWindow("/specfem3dglobe/registration/", "Register")
+    desktop.insertWindow(register)
+
+    return about, login, register
+
+
+def openFileBrowser(desktop):
+    navtree = gui.Directory("desktop", "Desktop", [
+        gui.Directory("home", "Home", []),
+        gui.Directory("trash", "Trash", []),
+        gui.Search("events", "Event Finder", url = "/specfem3dglobe/events/"),
+        ])
+    fileBrowser = gui.FileBrowser("/specfem3dglobe/", "File Browser", navtree)
+    desktop.insertWindow(fileBrowser)
+    desktop.selectWindow(fileBrowser)
+
+
 def httpResponse(response):
     # "Cast" the argument, 'response', to an HttpResponse.
     
@@ -437,8 +468,20 @@
     from django.contrib.auth.forms import AuthenticationForm
     from django.contrib.auth import LOGIN_URL, REDIRECT_FIELD_NAME
     from django.contrib.sites.models import Site
+
+    _, appWindow, _ = openPublicApps(desktop)
+    desktop.selectWindow(appWindow)
     
-    if path: raise Http404
+    login = gui.ChildWindow("/specfem3dglobe/login/", "Login")
+    reset = gui.ChildWindow("/specfem3dglobe/login/reset/", "Reset Password")
+    appWindow.insertWindow(login)
+    appWindow.insertWindow(reset)
+
+    if path:
+        name = path.pop(0)
+        if name == "reset":
+            return pwreset(request, path, reset, desktop)
+        raise Http404
     
     manipulator = AuthenticationForm(request)
     redirect_to = request.REQUEST.get(REDIRECT_FIELD_NAME, '')
@@ -456,13 +499,19 @@
             return HttpResponseRedirect(redirect_to)
     else:
         errors = {}
+
     request.session.set_test_cookie()
-    return render_to_response(template_name, {
+    
+    html = loader.render_to_string(template_name, {
         'form': forms.FormWrapper(manipulator, request.POST, errors),
         REDIRECT_FIELD_NAME: redirect_to,
         'site_name': Site.objects.get_current().name,
-    }, context_instance=RequestContext(request))
+    })
 
+    login.content = gui.StaticContent(html)
+    desktop.activeWindow.selectWindow(login)
+    return desktop
+
 def logout(request, path, desktop):
     from django.contrib.auth import logout as logoutUser
     
@@ -471,7 +520,7 @@
     logoutUser(request)
     return HttpResponseRedirect('/specfem3dglobe/login/')
 
-def pwreset(request, path, desktop):
+def pwreset(request, path, reset, desktop):
     from django.views.generic.simple import direct_to_template
     from django.contrib.auth.forms import PasswordResetForm
     
@@ -479,7 +528,12 @@
         name = path.pop(0)
         if path: raise Http404
         if name == "done":
-            return direct_to_template(request, template = "registration/pwreset_done.html")
+            resetDone = gui.ChildWindow("/specfem3dglobe/login/reset/done/", "Password Reset")
+            html = loader.render_to_string("registration/pwreset_done.html")
+            resetDone.content = gui.StaticContent(html)
+            desktop.activeWindow.insertWindow(resetDone)
+            desktop.activeWindow.selectWindow(resetDone)
+            return desktop
         raise Http404
 
     new_data, errors = {}, {}
@@ -491,8 +545,11 @@
             form.save(email_template_name='registration/pwreset_email.txt',
                       domain_override="the SPECFEM 3D GLOBE Web Portal")
             return HttpResponseRedirect('%sdone/' % request.path)
-    return render_to_response('registration/pwreset.html', {'form': forms.FormWrapper(form, new_data, errors)},
-                              context_instance=RequestContext(request))
+    html = loader.render_to_string('registration/pwreset.html',
+                                   {'form': forms.FormWrapper(form, new_data, errors)})
+    reset.content = gui.StaticContent(html)
+    desktop.activeWindow.selectWindow(reset)
+    return desktop
 
 def events_txt(request, sim_id):
 
@@ -701,45 +758,28 @@
                               RequestContext(request, {}))
 
 
-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 registration(request, path, desktop):
 
+    _, _, appWindow = openPublicApps(desktop)
+    desktop.selectWindow(appWindow)
 
-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
+    appWindow.insertWindow(register)
+    appWindow.insertWindow(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)
+            map.content = gui.StaticContent(html)
+            desktop.activeWindow.selectWindow(map)
             return desktop
-        if name == "password":
-            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)
+    manipulator = RegistrationAddManipulator(request)
+    template = 'SeismoWebPortal/registration_form.html'
 
     if request.method == 'POST':
         new_data = request.POST.copy()
@@ -748,31 +788,70 @@
             manipulator.do_html2python(new_data)
             user, errors = manipulator.save(new_data)
             if not errors:
-                if isNewUser:
-                    request.session.delete_test_cookie()
-                    help_login_hook(request, user)
-                    notify_managers_of_new_user(request, user)
-                    user.message_set.create(message="Welcome to the SPECFEM 3D GLOBE web portal!")
-                else:
-                    user.message_set.create(message="Your contact information has been saved.")
+                request.session.delete_test_cookie()
+                help_login_hook(request, user)
+                notify_managers_of_new_user(request, user)
+                user.message_set.create(message="Welcome to the SPECFEM 3D GLOBE web portal!")
                 return HttpResponseRedirect('/specfem3dglobe/')
     else:
         # Populate new_data with a 'flattened' version of the current data.
         new_data = manipulator.flatten_data()
         errors = {}
 
-    if isNewUser:
-        request.session.set_test_cookie()
+    request.session.set_test_cookie()
     
     # Populate the FormWrapper.
     form = forms.FormWrapper(manipulator, new_data, errors, edit_inline = True)
     
     html = loader.render_to_string(template, { 'form': form, 'desktop': desktop })
-    window.content = gui.StaticContent(html)
-    desktop.activeWindow.selectWindow(window)
+    register.content = gui.StaticContent(html)
+    desktop.activeWindow.selectWindow(register)
     return desktop
 
 
+def profile(request, path, desktop):
+    appWindow = gui.AppWindow("/specfem3dglobe/profile/", "Profile")
+    desktop.insertWindow(appWindow)
+    desktop.selectWindow(appWindow)
+    
+    contact = gui.ChildWindow("/specfem3dglobe/profile/", "Contact")
+    password = gui.ChildWindow("/specfem3dglobe/profile/password/", "Password")
+    appWindow.insertWindow(contact)
+    appWindow.insertWindow(password)
+
+    if path:
+        name = path.pop(0)
+        if path: raise Http404
+        if name == "password":
+            return password_change(request, password, desktop, template_name = "SeismoWebPortal/password_change_form.html")
+        raise Http404
+
+    manipulator = RegistrationChangeManipulator(request.user)
+    template = 'SeismoWebPortal/userinfo_form.html'
+
+    if request.method == 'POST':
+        new_data = request.POST.copy()
+        errors = manipulator.get_validation_errors(new_data)
+        if not errors:
+            manipulator.do_html2python(new_data)
+            user, errors = manipulator.save(new_data)
+            if not errors:
+                user.message_set.create(message="Your contact information has been saved.")
+                return HttpResponseRedirect('/specfem3dglobe/')
+    else:
+        # Populate new_data with a 'flattened' version of the current data.
+        new_data = manipulator.flatten_data()
+        errors = {}
+
+    # Populate the FormWrapper.
+    form = forms.FormWrapper(manipulator, new_data, errors, edit_inline = True)
+    
+    html = loader.render_to_string(template, { 'form': form, 'desktop': desktop })
+    contact.content = gui.StaticContent(html)
+    desktop.activeWindow.selectWindow(contact)
+    return desktop
+
+
 def notify_managers_of_new_user(request, user):
     from django.core.mail import mail_managers
 
@@ -809,7 +888,7 @@
     return
 
 
-def password_change(request, desktop, template_name='registration/password_change_form.html'):
+def password_change(request, password, desktop, template_name='registration/password_change_form.html'):
     from django.contrib.auth.forms import PasswordResetForm, PasswordChangeForm
 
     new_data, errors = {}, {}
@@ -822,10 +901,9 @@
             request.user.message_set.create(message="Your password has been changed.")
             return HttpResponseRedirect('/specfem3dglobe/')
         
-    _, 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)
+    password.content = gui.StaticContent(html)
+    desktop.activeWindow.selectWindow(password)
     return desktop
 
 
@@ -1125,13 +1203,20 @@
 
     if path: raise Http404
 
-    fileBrowser = desktop.windowList[0]
-    eventsDir = fileBrowser.root.index["events"]
-    fileBrowser.path.append(eventsDir)
+    navtree = gui.Directory("events", "Events", [
+        gui.Search("search", "Search", url = "/specfem3dglobe/events/"),
+        ])
+    appWindow = gui.EventFinder("/specfem3dglobe/events/", "Event Finder", navtree)
+    desktop.insertWindow(appWindow)
+    desktop.selectWindow(appWindow)
+    
+    #fileBrowser = desktop.windowList[0]
+    #eventsDir = fileBrowser.root.index["events"]
+    #fileBrowser.path.append(eventsDir)
 
-    search = gui.ChildWindow("/specfem3dglobe/events/", "Search")
-    desktop.activeWindow.insertWindow(search)
     if not request.GET:
+        search = gui.ChildWindow("/specfem3dglobe/events/", "Search")
+        desktop.activeWindow.insertWindow(search)
         html = loader.render_to_string('SeismoWebPortal/event_search.html')
         search.content = gui.StaticContent(html)
         desktop.activeWindow.selectWindow(search)
@@ -1165,7 +1250,13 @@
             r = Region(event.regionName)
             r.save()
 
-    results = gui.ChildWindow(request.path, "Results")
+    resultsURL = request.get_full_path()
+
+    results = gui.SearchResults("results", "Results", url = resultsURL)
+    navtree.appendNode(results)
+    appWindow.path.append(results)
+    
+    results = gui.ChildWindow(resultsURL, "Results")
     html = loader.render_to_string('SeismoWebPortal/event_search_results.html',
                                    {'event_list': parser.cmtList })
     results.content = gui.StaticContent(html)



More information about the cig-commits mailing list