Commit 0eef9e66 authored by Jim Fulton's avatar Jim Fulton

initial

parent 2abe6e3e
#!/bin/env python
##############################################################################
#
# Copyright
#
# Copyright 1996 Digital Creations, L.C., 910 Princess Anne
# Street, Suite 300, Fredericksburg, Virginia 22401 U.S.A. All
# rights reserved.
#
##############################################################################
__doc__='''Application support
$Id: Application.py,v 1.1 1997/07/25 20:03:22 jim Exp $'''
__version__='$Revision: 1.1 $'[11:-2]
import Folder, regex, string
import Globals
class Application(Folder.Folder):
name='Webulator'
description=''
web__form__method='GET'
manage_options=Folder.Folder.manage_options+(
{'icon':'App/arrow.jpg', 'label':'Application Management',
'action':'app/manage', 'target':'_top'},
)
def folderClass(self): return Folder.Folder
def __class_init__(self): pass
def open_bobobase():
# Open the application database
Bobobase=Globals.Bobobase=Globals.PickleDictionary(Globals.BobobaseName)
if not Bobobase.has_key('products'):
import initial_products
initial_products.install(Bobobase)
get_transaction().commit()
products=Bobobase['products']
install_products(products)
return Bobobase
def install_products(products):
# Install a list of products into the basic folder class, so
# that all folders know about top-level objects, aka products
meta_types=list(Folder.Folder.dynamic_meta_types)
for product in products:
product=__import__(product)
for meta_type in product.meta_types:
meta_types.append(meta_type)
name=meta_type['name']
if (not meta_type.has_key('prefix') and
not regex.match('[^a-zA-Z0-9_]', name)):
meta_type['prefix']=string.lower(name)
if meta_type.has_key('prefix'):
prefix=meta_type['prefix']
def productNames(self, name=name):
t=[]
for i in self.objectMap():
if i['meta_type']==name: t.append(i['name'])
return t
setattr(Folder.Folder, "%sNames" % prefix , productNames)
def productValues(self, name=name):
t=[]
for i in self.objectMap():
if i['meta_type']==name:
t.append(getattr(self,i['name']))
return t
setattr(Folder.Folder, "%sValues" % prefix , productValues)
def productItems(self, name=name):
t=[]
for i in self.objectMap():
if i['meta_type']=='Image':
n=i['name']
t.append((n,getattr(self,n)))
return t
setattr(Folder.Folder, "%sItems" % prefix , productItems)
for name,method in product.methods.items():
setattr(Folder.Folder, name, method)
Folder.Folder.dynamic_meta_types=tuple(meta_types)
##############################################################################
# Test functions:
#
def main():
# The "main" program for this module
import sys
print sys.argv[0]+" is a pure module and doesn't do anything by itself."
if __name__ == "__main__": main()
##############################################################################
#
# $Log: Application.py,v $
# Revision 1.1 1997/07/25 20:03:22 jim
# initial
#
#
"""Document object"""
__version__='$Revision: 1.1 $'[11:-2]
from STPDocumentTemplate import HTML
from Globals import shared_dt_globals,HTMLFile
class Document(HTML):
"""A Document object"""
meta_type ='Document'
description=''
icon ='OFS/document.jpg'
__state_names__=HTML.__state_names__+('description',)
shared_globals =shared_dt_globals
manage_edit__allow_groups__ =None
manage_editForm__allow_groups__=None
def document_template_form_header(self):
return ("""<br>Description:
<input type=text name=description SIZE="50" value="%s">
<P>""" % self.description)
def manage_edit(self,data,description,REQUEST=None):
"""Edit method"""
self.description=description
return HTML.manage_edit(self,data,REQUEST)
default_html="""
<HTML>
<HEAD>
<TITLE>New Document</TITLE>
</HEAD>
<BODY>
New Document
</BODY>
</HTML>"""
class DocumentHandler:
"""Document object handler mixin"""
meta_types=({'name':'Document', 'action':'manage_addDocumentForm'},)
manage_addDocumentForm=HTMLFile('OFS/documentAdd')
def manage_addDocument(self,name,description,REQUEST,file=''):
"""Add a new Document object"""
if not file: file=default_html
i=Document(file, __name__=name)
i.description=description
self._setObject(name,i)
return self.manage_main(self,REQUEST)
def documentNames(self):
t=[]
for i in self.objectMap():
if i['meta_type']=='Document': t.append(i['name'])
return t
def documentValues(self):
t=[]
for i in self.objectMap():
if i['meta_type']=='Document': t.append(getattr(self,i['name']))
return t
def documentItems(self):
t=[]
for i in self.objectMap():
if i['meta_type']=='Document':
n=i['name']
t.append((n,getattr(self,n)))
return t
"""Folder object
$Id: Folder.py,v 1.1 1997/07/25 20:03:23 jim Exp $"""
__version__='$Revision: 1.1 $'[11:-2]
from Globals import HTMLFile
from ObjectManager import ObjectManager
from Image import Image, ImageHandler
from Document import Document, DocumentHandler
class FolderHandler:
"""Folder object handler"""
meta_types=({'name':'Folder', 'action':'manage_addFolderForm'},)
manage_addFolderForm=HTMLFile('OFS/folderAdd')
def folderClass(self):
return Folder
return self.__class__
def manage_addFolder(self,name,description,REQUEST):
"""Add a new Folder object"""
i=self.folderClass()()
i.name=name
i.description=description
self._setObject(name,i)
return self.manage_main(self,REQUEST)
def folderNames(self):
t=[]
for i in self.objectMap():
if i['meta_type']=='Folder': t.append(i['name'])
return t
def folderValues(self):
t=[]
for i in self.objectMap():
if i['meta_type']=='Folder': t.append(getattr(self,i['name']))
return t
def folderItems(self):
t=[]
for i in self.objectMap():
if i['meta_type']=='Folder':
n=i['name']
t.append((n,getattr(self,n)))
return t
class Folder(ObjectManager,DocumentHandler,ImageHandler,FolderHandler):
"""Folder object"""
meta_type ='Folder'
name ='folder'
description='Folder object'
icon ='OFS/folder.jpg'
_properties=({'name':'description', 'type': 'string'},)
index_html=HTMLFile('OFS/folderIndex_html')
meta_types=(
DocumentHandler.meta_types+
ImageHandler.meta_types+
FolderHandler.meta_types
)
manage_options=(
{'icon':icon, 'label':'Contents',
'action':'manage_main', 'target':'manage_main'},
{'icon':'OFS/properties.jpg', 'label':'Properties',
'action':'manage_propertiesForm', 'target':'manage_main'},
{'icon':'App/help.jpg', 'label':'Help',
'action':'manage_help', 'target':'_new'},
)
"""Image object"""
__version__='$Revision: 1.1 $'[11:-2]
from Globals import HTMLFile
class Image:
"""Image object"""
meta_type ='Image'
description=''
icon ='OFS/image.jpg'
manage_editForm=HTMLFile('OFS/imageEdit')
def manage_edit(self,file,description,content_type=''):
try: headers=file.headers
except: headers=None
if headers is None and file:
if not content_type: raise 'BadValue', (
'No content type specified')
self.content_type=content_type
self.data=file
elif file:
data=file.read()
self.content_type=headers['content-type']
self.data=data
self.description=description
def _init(self,name,file,content_type=''):
try: headers=file.headers
except: headers=None
if headers is None:
if not content_type: raise 'BadValue', (
'No content type specified')
self.content_type=content_type
self.data=file
else:
self.content_type=headers['content-type']
self.data=file.read()
self.__name__=name
def name(self): return self.__name__
def index_html(self, RESPONSE):
"""Default document"""
RESPONSE['content-type']=self.content_type
return self.data
class ImageHandler:
"""Image object handler mixin"""
meta_types=({'name':'Image', 'action':'manage_addImageForm'},)
manage_addImageForm=HTMLFile('OFS/imageAdd')
def manage_addImage(self,name,file,description,REQUEST):
"""Add a new Image object"""
i=Image()
i._init(name,file)
i.description=description
self._setObject(name,i)
return self.manage_main(self,REQUEST)
def imageNames(self):
t=[]
for i in self.objectMap():
if i['meta_type']=='Image': t.append(i['name'])
return t
def imageValues(self):
t=[]
for i in self.objectMap():
if i['meta_type']=='Image': t.append(getattr(self,i['name']))
return t
def imageItems(self):
t=[]
for i in self.objectMap():
if i['meta_type']=='Image':
n=i['name']
t.append((n,getattr(self,n)))
return t
__doc__="""Object Manager
$Id: ObjectManager.py,v 1.1 1997/07/25 20:03:24 jim Exp $"""
__version__='$Revision: 1.1 $'[11:-2]
from SingleThreadedTransaction import Persistent
from Globals import ManageHTMLFile,PublicHTMLFile
from Globals import MessageDialog
from App.Management import Management
from Acquisition import Acquirer
from string import find,joinfields
from urllib import quote
class ObjectManager(Acquirer,Management,Persistent):
"""Generic object manager
This class provides core behavior for collections of heterogeneous objects.
"""
meta_type ='ObjectManager'
meta_types = dynamic_meta_types = ()
name ='default'
description=''
icon ='dir.jpg'
_objects =()
_properties =({'name':'description', 'type': 'string'},)
manage_main =ManageHTMLFile('OFS/main')
manage_propertiesForm=ManageHTMLFile('OFS/properties')
manage_options=(
{'icon':'OFS/templates.jpg', 'label':'Objects',
'action':'manage_main', 'target':'manage_main'},
{'icon':'OFS/properties.jpg', 'label':'Properties',
'action':'manage_propertiesForm', 'target':'manage_main'},
{'icon':'APP/help.jpg', 'label':'Help',
'action':'manage_help', 'target':'_new'},
)
isAnObjectManager=1
def __class_init__(self):
try: mt=list(self.meta_types)
except: mt=[]
for b in self.__bases__:
try:
for t in b.meta_types:
if t not in mt: mt.append(t)
except: pass
mt.sort()
self.meta_types=tuple(mt)
def all_meta_types(self):
return self.meta_types+self.dynamic_meta_types
def _checkName(self,name):
if quote(name) != name: raise 'Bad Request', (
"""The name <em>%s<em> is invalid - it
contains characters illegal in URLs.""" % name)
if name[:1]=='_': raise 'Bad Request', (
"""The name <em>%s<em> is invalid - it
begins with an underscore character, _.""" % name)
if hasattr(self,name): raise 'Bad Request', (
"""The name <em>%s<em> is invalid - it
is already in use.""" % name)
def parentObject(self):
try:
if self.aq_parent.isAnObjectManager:
return (self.aq_parent,)
except: pass
return ()
#try: return (self.aq_parent,)
#except: return ()
def _setObject(self,name,object):
self._checkName(name)
setattr(self,name,object)
try: t=object.meta_type
except: t=None
self._objects=self._objects+({'name':name,'meta_type':t},)
def _delObject(self,name):
delattr(self,name)
self._objects=tuple(filter(lambda i,n=name: i['name'] != n,
self._objects))
def objectNames(self):
# Return a list of subobject names
return map(lambda i: i['name'], self._objects)
def objectValues(self):
# Return a list of the actual subobjects
return map(lambda i,s=self: getattr(s,i['name']), self._objects)
def objectItems(self):
# Return a list of (name, subobject) tuples
return map(lambda i,s=self: (i['name'], getattr(s,i['name'])),
self._objects)
def objectMap(self):
# Return a tuple of mappings containing subobject meta-data
return self._objects
def manage_addObject(self,type,REQUEST):
"""Add a subordinate object"""
for t in self.meta_types:
if t['name']==type:
return getattr(self,t['action'])(self,REQUEST)
for t in self.dynamic_meta_types:
if t['name']==type:
return getattr(self,t['action'])(self,REQUEST)
raise 'BadRequest', 'Unknown object type: %s' % type
def manage_delObjects(self,names,REQUEST):
"""Delete a subordinate object"""
while names:
try: self._delObject(names[-1])
except: raise 'BadRequest', ('%s does not exist' % names[-1])
del names[-1]
return MessageDialog(
title ='Items Removed',
message='The items were removed successfully',
action =REQUEST['PARENT_URL']+'/manage_main',
target ='manage_main')
def _setProperty(self,name,value,type='string'):
self._checkName(name)
self._properties=self._properties+({'name':name,'type':type},)
setattr(self,name,value)
def _delProperty(self,name):
delattr(self,name)
self._properties=tuple(filter(lambda i, n=name: i['name'] != n,
self._properties))
def propertyNames(self):
# Return a list of property names
return map(lambda i: i['name'], self._properties)
def propertyValues(self):
# Return a list of actual property objects
return map(lambda i,s=self: getattr(s,i['name']), self._properties)
def propertyItems(self):
# Return a list of (name,property) tuples
return map(lambda i,s=self: (i['name'],getattr(s,i['name'])),
self._properties)
def propertyMap(self):
# Return a tuple of mappings, giving meta-data for properties
return self._properties
def manage_addProperty(self,name,value,type,REQUEST):
"""Add a new property (www)"""
self._setProperty(name,value,type)
return MessageDialog(
title='Property Added',
message='The property was added successfully',
action=REQUEST['PARENT_URL']+'/manage_propertiesForm',
target='manage_main')
def manage_editProperties(self,REQUEST):
"""Edit object properties"""
for p in self._properties:
n=p['name']
try: setattr(self,n,REQUEST[n])
except: pass
return MessageDialog(
title ='Properties changed',
message='Properties were changed successfully',
action =REQUEST['PARENT_URL']+'/manage_propertiesForm',
target ='manage_main')
def manage_delProperties(self,names,REQUEST):
"""Delete one or more properties"""
try: p=map(lambda d: d['name'], self.__class__._properties)
except: p=[]
for n in names:
if n in p:
return MessageDialog(
title ='Cannot delete %s' % n,
message='The property <I>%s</I> cannot be deleted.' % n,
action =REQUEST['PARENT_URL']+'/manage_propertiesForm',
target ='manage_main')
try: self._delProperty(n)
except: raise 'BadRequest', (
'The property <I>%s</I> does not exist' % n)
return MessageDialog(
title ='Properties Removed',
message='The properties were removed successfully',
action =REQUEST['PARENT_URL']+'/manage_propertiesForm',
target ='manage_main')
def _defaultInput(self,n,t,v):
return '<INPUT NAME="%s:%s" SIZE="50" VALUE="%s"></TD>' % (n,t,v)
def _selectInput(self,n,t,v):
s=['<SELECT NAME="%s:%s">' % (n,t)]
map(lambda i: s.append('<OPTION>%s' % i), v)
s.append('</SELECT>')
return joinfields(s,'\n')
def _linesInput(self,n,t,v):
return (
'<TEXTAREA NAME="%s:lines" ROWS="10" COLS="50">%s</TEXTAREA>' % (n,v))
def _textInput(self,n,t,v):
return '<TEXTAREA NAME="%s" ROWS="10" COLS="50">%s</TEXTAREA>' % (n,v)
_inputMap={'float': _defaultInput,
'int': _defaultInput,
'long': _defaultInput,
'string':_defaultInput,
'lines': _linesInput,
'text': _textInput,
}
propertyTypes=_inputMap.keys()
def propertyInputs(self):
imap=self._inputMap
r=[]
for p in self._properties:
n=p['name']
t=p['type']
v=getattr(self,n)
r.append({'name': n, 'input': imap[t](None,n,t,v)})
return r
##############################################################################
#
# $Log: ObjectManager.py,v $
# Revision 1.1 1997/07/25 20:03:24 jim
# initial
#
# Revision 1.1 1997/07/07 16:02:18 jim
# *** empty log message ***
#
#
*shared*
# install Application.py
# install Document.py
# install Folder.py
# install Image.py
# install ObjectManager.py
# install documentAdd.dtml
# install folderAdd.dtml
# install imageAdd.dtml
# install imageEdit.dtml
# install main.dtml
# install properties.dtml
# install www www/%(package)s
<HTML>
<HEAD>
<TITLE>New HTML Document</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" LINK="#000099" VLINK="#555555" ALINK="#77003B">
<FONT SIZE="+2" COLOR="#77003B">New HTML Document</FONT>
<P>
You can create a new image in the system using the form below.
Select an image from your local computer by clicking the <I>Browse</I>
button. The image file you select will be uploaded to the application.
<FORM ACTION="<!--#var PARENT_URL-->/manage_addDocument" METHOD="POST"
ENCTYPE="multipart/form-data" TARGET="manage_main">
<TABLE CELLSPACING="2">
<TR>
<TD ALIGN="LEFT" VALIGN="TOP"><B>Name</B></TD>
<TD ALIGN="LEFT" VALIGN="TOP"><INPUT TYPE="TEXT" NAME="name" SIZE="50"></TD>
</TR>
<TR>
<TD ALIGN="LEFT" VALIGN="TOP"><B>Description</B></TD>
<TD ALIGN="LEFT" VALIGN="TOP"><INPUT TYPE="TEXT" NAME="description" SIZE="50"></TD>
</TR>
<TR>
<TD ALIGN="LEFT" VALIGN="TOP"><B>File</B></TD>
<TD ALIGN="LEFT" VALIGN="TOP">
<INPUT TYPE="file" NAME="file:string" SIZE="30" VALUE="">
</TD>
</TR>
<TR>
<TD></TD>
<TD><BR><INPUT TYPE="SUBMIT" VALUE="Add Document"></TD>
</TR>
</TABLE>
</FORM>
</BODY>
</HTML>
<HTML>
<HEAD>
<TITLE>New Folder</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" LINK="#000099" VLINK="#555555" ALINK="#77003B">
<FONT SIZE="+2" COLOR="#77003B">New Folder</FONT>
<FORM ACTION="<!--#var PARENT_URL-->/manage_addFolder" METHOD="POST">
<TABLE CELLSPACING="2">
<TR>
<TD ALIGN="LEFT" VALIGN="TOP"><B>Name</B></TD>
<TD ALIGN="LEFT" VALIGN="TOP"><INPUT TYPE="TEXT" NAME="name" SIZE="50"></TD>
</TR>
<TR>
<TD ALIGN="LEFT" VALIGN="TOP"><B>Description</B></TD>
<TD ALIGN="LEFT" VALIGN="TOP"><INPUT TYPE="TEXT" NAME="description" SIZE="50"></TD>
</TR>
<TR>
<TD></TD>
<TD><BR><INPUT TYPE="SUBMIT" VALUE="Add Folder"></TD>
</TR>
</TABLE>
</FORM>
</BODY>
</HTML>
<HTML>
<HEAD>
<TITLE>New Image</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" LINK="#000099" VLINK="#555555" ALINK="#77003B">
<FONT SIZE="+2" COLOR="#77003B">New Image</FONT>
<P>
You can create a new image in the system using the form below.
Select an image from your local computer by clicking the <I>Browse</I>
button. The image file you select will be uploaded to the application.
<FORM ACTION="<!--#var PARENT_URL-->/manage_add_Image" METHOD="POST"
ENCTYPE="multipart/form-data" TARGET="manage_main">
<TABLE CELLSPACING="2">
<TR>
<TD ALIGN="LEFT" VALIGN="TOP"><B>Name</B></TD>
<TD ALIGN="LEFT" VALIGN="TOP"><INPUT TYPE="TEXT" NAME="name" SIZE="50"></TD>
</TR>
<TR>
<TD ALIGN="LEFT" VALIGN="TOP"><B>Image</B></TD>
<TD ALIGN="LEFT" VALIGN="TOP">
<INPUT TYPE="file" NAME="file" SIZE="30" VALUE="">
</TD>
</TR>
<TR>
<TD ALIGN="LEFT" VALIGN="TOP"><B>Description</B></TD>
<TD ALIGN="LEFT" VALIGN="TOP">
<INPUT TYPE="TEXT" NAME="description" SIZE="50"></TD>
</TR>
<TR>
<TD></TD>
<TD><BR><INPUT TYPE="SUBMIT" VALUE="Add Image"></TD>
</TR>
</TABLE>
</FORM>
</BODY>
</HTML>
<HTML>
<HEAD>
<TITLE>Edit Image</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" LINK="#000099" VLINK="#555555" ALINK="#77003B">
<FONT SIZE="+2" COLOR="#77003B">New Image</FONT>
<P>
You can update image in the system using the form below.
Select an image from your local computer by clicking the <I>Browse</I>
button. The image file you select will be uploaded to the application.
<FORM ACTION="<!--#var PARENT_URL-->/manage_edit" METHOD="POST"
ENCTYPE="multipart/form-data" TARGET="manage_main">
<TABLE CELLSPACING="2">
<TR>
<TD ALIGN="LEFT" VALIGN="TOP"><B>Name</B></TD>
<TD ALIGN="LEFT" VALIGN="TOP"><!--#var name--></TD>
</TR>
<TR>
<TD ALIGN="LEFT" VALIGN="TOP"><B>Image</B></TD>
<TD ALIGN="LEFT" VALIGN="TOP">
<INPUT TYPE="file" NAME="file" SIZE="30" VALUE="">
</TD>
</TR>
<TR>
<TD ALIGN="LEFT" VALIGN="TOP"><B>Description</B></TD>
<TD ALIGN="LEFT" VALIGN="TOP">
<INPUT TYPE="TEXT" NAME="description" SIZE="50" VALUE="<!--#var description-->"></TD>
</TR>
<TR>
<TD></TD>
<TD><BR><INPUT TYPE="SUBMIT" VALUE="Change Image"></TD>
</TR>
</TABLE>
</FORM>
</BODY>
</HTML>
<HTML>
<HEAD>
<TITLE><!--#var name fmt=spacify--></TITLE>
</HEAD>
<BODY>
<FONT SIZE="+2" COLOR="#77003B"><!--#var name fmt=spacify--></FONT>
<BR>
<!--#if parentObject-->
<!--#in parentObject-->
<A HREF="<!--#var URL2-->/manage" target="_top">
<IMG SRC="<!--#var SOFTWARE_URL-->/OFS/dirup.jpg" BORDER=0>
</A>
Go up to
<!--#var name fmt=spacify-->
<!--#var description-->
<BR>
<!--#/in parentObject-->
<!--#/if parentObject-->
<!--#if objectValues-->
<P>
The following items have been defined. To edit an item, click
on the item's icon. To view an item, click on the item's name.
<P>
<!--#in objectValues-->
<A HREF="<!--#var URL1-->/<!--#var name-->/manage"
<!--#if sequence-var-manage_options-->
TARGET="_top"
<!--#else sequence-var-manage_options-->
TARGET="manage_main"
<!--#endif sequence-var-manage_options-->>
<IMG SRC="<!--#var SOFTWARE_URL-->/<!--#var icon-->" BORDER="0">
</A>
<A HREF="<!--#var URL1-->/<!--#var name-->"><!--#var name fmt=spacify-->
</A> <!--#var description--><BR>
<!--#/in objectValues-->
<P>
<!--#/if objectValues-->
<TABLE>
<TR>
<TD VALIGN="TOP">
To add a new item, select an item type and click the &quot;Add&quot; button.
</TD>
<TD VALIGN="TOP">
<FORM ACTION="<!--#var PARENT_URL-->/manage_addObject" METHOD="GET">
<SELECT NAME="type">
<!--#in all_meta_types mapping-->
<OPTION VALUE="<!--#var name-->"><!--#var name fmt=spacify-->
<!--#/in all_meta_types-->
</SELECT><BR>
<INPUT TYPE="SUBMIT" VALUE="Add">
</FORM>
</TD>
</TR>
<!--#if objectValues-->
<TR>
<TD VALIGN="TOP">
To delete items, select one or more items and
click the &quot;Delete&quot; button.
</TD>
<TD VALIGN="TOP">
<FORM ACTION="<!--#var PARENT_URL-->/manage_delObjects" METHOD="GET">
<SELECT NAME="names:list" MULTIPLE SIZE="5">
<!--#in objectValues-->
<OPTION VALUE="<!--#var name-->"><!--#var name fmt=spacify-->
<!--#/in objectValues-->
</SELECT><br>
<INPUT TYPE="SUBMIT" VALUE="Delete">
</FORM>
</TD>
</TR>
<!--#/if objectValues-->
</TABLE>
</BODY>
</HTML>
<HTML>
<HEAD>
<TITLE>Properties</TITLE>
</HEAD>
<BODY>
<FONT SIZE="+2">Properties</FONT>
<P>
<!--#if propertyMap-->
<FORM ACTION="<!--#var URL1-->/manage_editProperties">
The following properties are defined. To change a property value,
edit the value and click the "Change Properties" button.
<P>
<TABLE CELLPADDING="4">
<!--#if propertyInputs-->
<!--#in propertyInputs mapping-->
<TR>
<TD ALIGN="LEFT" VALIGN="TOP"><B><!--#var name fmt=spacify--></B></TD>
<TD ALIGN="LEFT" VALIGN="TOP"><!--#var input--></TD>
</TR>
<!--#/in propertyInputs-->
<!--#/if propertyInputs-->
<TR>
<TD ALIGN="LEFT" VALIGN="TOP"></TD>
<TD ALIGN="LEFT" VALIGN="TOP">
<INPUT TYPE="SUBMIT" VALUE="Change Properties">
</TD>
</TR>
</TABLE>
</FORM>
<!--#else propertyMap-->
<I>No properties have been defined.</I>
<!--#/if propertyMap-->
<P>
<FORM ACTION="<!--#var URL1-->/manage_addProperty" METHOD="POST">
You may add a property by filling in the name, type, and initial
value fields below and then clicking on the "Add Property" button.
<BR>
<TABLE>
<TR>
<TD ALIGN="LEFT" VALIGN="TOP">Name:</TD>
<TD ALIGN="LEFT" VALIGN="TOP">
<INPUT TYPE="TEXT" NAME="name" SIZE="16">
</TD>
</TR>
<TR>
<TD ALIGN="LEFT" VALIGN="TOP">Type:</TD>
<TD ALIGN="LEFT" VALIGN="TOP">
<SELECT NAME="type">
<!--#in propertyTypes-->
<OPTION><!--#var __str__-->
<!--#/in propertyTypes-->
</SELECT>
</TD>
</TR>
<TR>
<TD ALIGN="LEFT" VALIGN="TOP">Value:</TD>
<TD ALIGN="LEFT" VALIGN="TOP">
<INPUT TYPE="TEXT" NAME="value" SIZE="50">
</TD>
</TR>
<TR>
<TD ALIGN="LEFT" VALIGN="TOP"></TD>
<TD ALIGN="LEFT" VALIGN="TOP">
<INPUT TYPE="SUBMIT" VALUE="Add Property">
</TD>
</TR>
</TABLE>
</FORM>
<P>
<!--#if propertyMap-->
<FORM ACTION="<!--#var URL1-->/manage_delProperties" METHOD="POST">
You may delete properties by selecting one or more property names
from the list below and clicking the &quot;Delete Properties&quot;
button.
<BR>
<TABLE>
<TR>
<TD ALIGN="LEFT" VALIGN="TOP">
<SELECT NAME="names:list" SIZE="5" MULTIPLE>
<!--#in propertyMap mapping-->
<OPTION VALUE="<!--#var name-->"><!--#var name fmt=nicify-->
<!--#/in propertyMap-->
</SELECT>
<BR>
<INPUT TYPE="SUBMIT" VALUE="Delete Properties">
</TD>
</TR>
</TABLE>
</FORM>
<!--#/if propertyMap-->
</BODY>
</HTML>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment