[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 %} {% 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 %} {% 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 %} {% 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 %} {% 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> ' % (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">→</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 & 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 & 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