[Zope-Checkins] CVS: Zope3/lib/python/Zope/App/OFS/Content/Image/Views/Browser - ImageData.py:1.1.2.1 ImageEdit.py:1.1.2.1 __init__.py:1.1.2.1 browser.zcml:1.1.2.1 edit.pt:1.1.2.1
Stephan Richter
srichter@cbu.edu
Wed, 27 Mar 2002 10:54:40 -0500
Update of /cvs-repository/Zope3/lib/python/Zope/App/OFS/Content/Image/Views/Browser
In directory cvs.zope.org:/tmp/cvs-serv12282/Content/Image/Views/Browser
Added Files:
Tag: Zope-3x-branch
ImageData.py ImageEdit.py __init__.py browser.zcml edit.pt
Log Message:
New Content Objects:
- NaiveFile --> all the data is stored in one string
- File --> Uses a BTree to store the data in chunks (more efficient)
- Image --> Can store and display an image a la Z2 (based on File)
- ZPTPage --> A simple version of ZPT for the content space to allow some
dynamics data (please do not use this for scripting)
Also:
- Expansion of supported views
- all edit screens are Formulator supported
=== Added File Zope3/lib/python/Zope/App/OFS/Content/Image/Views/Browser/ImageData.py ===
##############################################################################
#
# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE
#
##############################################################################
""" Define view component for naive file editing.
$Id: ImageData.py,v 1.1.2.1 2002/03/27 15:54:38 srichter Exp $
"""
from Zope.Publisher.Browser.AttributePublisher import AttributePublisher
from Zope.PageTemplate.PageTemplateFile import PageTemplateFile
class ImageData(AttributePublisher):
__implements__ = AttributePublisher.__implements__
def __init__( self, image ):
self._image = image
def index(self, REQUEST=None):
image = self.getContext()
if REQUEST is not None:
REQUEST['RESPONSE'].setHeader('content-type',
image.getContentType())
return image.getData()
def tag(self, height=None, width=None, alt=None,
scale=0, xscale=0, yscale=0, css_class=None, **args):
"""
Generate an HTML IMG tag for this image, with customization.
Arguments to self.tag() can be any valid attributes of an IMG tag.
'src' will always be an absolute pathname, to prevent redundant
downloading of images. Defaults are applied intelligently for
'height', 'width', and 'alt'. If specified, the 'scale', 'xscale',
and 'yscale' keyword arguments will be used to automatically adjust
the output height and width values of the image tag.
Since 'class' is a Python reserved word, it cannot be passed in
directly in keyword arguments which is a problem if you are
trying to use 'tag()' to include a CSS class. The tag() method
will accept a 'css_class' argument that will be converted to
'class' in the output tag to work around this.
"""
if width is None:
width=self.getContext().getImageSize()[0]
if height is None:
height = self.getContext().getImageSize()[1]
# Auto-scaling support
xdelta = xscale or scale
ydelta = yscale or scale
if xdelta and width:
width = str(int(round(int(width) * xdelta)))
if ydelta and height:
height = str(int(round(int(height) * ydelta)))
result='<img src="%s"' % (self.absolute_url())
if alt is None:
alt=getattr(self, 'title', '')
result = '%s alt="%s"' % (result, alt)
if height is not None:
result = '%s height="%s"' % (result, height)
if width is not None:
result = '%s width="%s"' % (result, width)
if not 'border' in [a.lower() for a in args.keys()]:
result = '%s border="0"' % result
if css_class is not None:
result = '%s class="%s"' % (result, css_class)
for key in args.keys():
value = args.get(key)
result = '%s %s="%s"' % (result, key, value)
return '%s />' % result
def getContext(self):
return self._image
=== Added File Zope3/lib/python/Zope/App/OFS/Content/Image/Views/Browser/ImageEdit.py ===
##############################################################################
#
# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE
#
##############################################################################
"""
Define view component for image editing.
Revision Information:
$Id: ImageEdit.py,v 1.1.2.1 2002/03/27 15:54:38 srichter Exp $
"""
from Zope.App.Formulator.Form import Form
from Zope.PageTemplate.PageTemplateFile import PageTemplateFile
class ImageEdit(Form):
__implements__ = Form.__implements__
name = 'editForm'
title = 'Edit Form'
description = ('This edit form allows you to make changes to the ' +
'properties of this image.')
_fieldViewNames = ['ContentTypeFieldView', 'DataFieldView']
template = PageTemplateFile('edit.pt')
=== Added File Zope3/lib/python/Zope/App/OFS/Content/Image/Views/Browser/__init__.py ===
##############################################################################
#
# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 1.1 (ZPL). A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
##############################################################################
"""
$Id: __init__.py,v 1.1.2.1 2002/03/27 15:54:38 srichter Exp $
"""
=== Added File Zope3/lib/python/Zope/App/OFS/Content/Image/Views/Browser/browser.zcml ===
<zopeConfigure
xmlns='http://namespaces.zope.org/zope'
xmlns:security='http://namespaces.zope.org/security'
xmlns:browser='http://namespaces.zope.org/browser'
>
<!-- Image View Directives -->
<browser:defaultView name="view"
for="Zope.App.OFS.Content.Image.Image.IImage."
factory=".ImageData." />
<browser:view name="data"
for="Zope.App.OFS.Image.Image.IImage."
factory=".ImageData." />
<security:protectClass
name=".ImageData."
permission_id="Zope.View" methods="index, tag" />
<browser:view name="edit"
for="Zope.App.OFS.Content.Image.Image.IImage."
factory=".ImageEdit." />
<security:protectClass
name=".ImageEdit."
permission_id="Zope.View" methods="index, action" />
<!-- Formulator directives -->
<browser:view name="DataFieldView"
for="Zope.App.OFS.Image.Image.IImage."
factory="Zope.App.OFS.Content.Image.ImageFields.DataField.
Zope.App.Formulator.Widgets.Browser.FileWidget." />
<browser:view name="ContentTypeFieldView"
for="Zope.App.OFS.Image.Image.IImage."
factory="Zope.App.OFS.Content.Image.ImageFields.ContentTypeField.
Zope.App.Formulator.Widgets.Browser.TextWidget." />
</zopeConfigure>
=== Added File Zope3/lib/python/Zope/App/OFS/Content/Image/Views/Browser/edit.pt ===
<html metal:use-macro="views/standard_macros/page">
<head>
<style metal:fill-slot="headers" type="text/css">
<!--
.ContentIcon {
width: 20px;
}
.ContentTitle {
text-align: left;
}
-->
</style>
</head>
<body>
<div metal:fill-slot="body">
<p tal:content="options/msg | nothing">
Message will go here.
</p>
<p tal:content="container/description">
Description of the Form.
</p>
<div tal:condition="python: options.has_key('errors')
and options['errors']">
Errors:
<div tal:repeat="error options/errors | nothing"
tal:content="error">Foo </div>
</div>
<form action="action" method="post" enctype="multipart/form-data">
<table class="EditTable">
<tbody>
<tr>
<th class="EditAttributeName">Size</th>
<td class="EditAttributeValue"
tal:content="here/getImageSize">
</td>
</tr>
<tr tal:repeat="fieldView python:container.getFieldViews(request)">
<th class="EditAttributeName"
tal:content="python: fieldView.getContext().getValue('title')">
Title</th>
<td class="EditAttributeValue"
tal:content="structure fieldView/render"><input />
</td>
</tr>
</tbody>
</table>
<input type="submit" name="edit" value="Save Changes">
</form>
</div>
</body>
</html>