[Zope3-checkins] CVS: Zope3/src/zope/app/i18nfile/browser - __init__.py:1.1.2.1 configure.zcml:1.1.2.1 file_edit.pt:1.1.2.1 i18nfile.py:1.1.2.1 i18nimage.py:1.1.2.1 image_edit.pt:1.1.2.1

Philipp von Weitershausen philikon at philikon.de
Fri Feb 20 14:41:04 EST 2004


Update of /cvs-repository/Zope3/src/zope/app/i18nfile/browser
In directory cvs.zope.org:/tmp/cvs-serv21652/browser

Added Files:
      Tag: philikon-movecontent-branch
	__init__.py configure.zcml file_edit.pt i18nfile.py 
	i18nimage.py image_edit.pt 
Log Message:
i18nfile and i18nimage live in zope.app.i18nfile now.


=== Added File Zope3/src/zope/app/i18nfile/browser/__init__.py ===
#
# This file is necessary to make this directory a package.


=== Added File Zope3/src/zope/app/i18nfile/browser/configure.zcml ===
<configure
    xmlns='http://namespaces.zope.org/zope'
    xmlns:browser='http://namespaces.zope.org/browser'
    i18n_domain='zope'
    >

  <!-- i18nfile directives -->

  <browser:page
      name="index.html"
      for="zope.app.i18nfile.interfaces.II18nFile"
      permission="zope.View"
      class=".i18nfile.I18nFileView"
      />

  <browser:pages
      for="zope.app.i18nfile.interfaces.II18nFile"
      permission="zope.View"
      class=".i18nfile.I18nFileEdit">

    <browser:page name="editForm.html" template="file_edit.pt" />
    <browser:page name="edit.html" attribute="action" />

  </browser:pages>

  <browser:menuItems
      menu="zmi_views"
      for="zope.app.i18nfile.interfaces.II18nFile">

      <!-- Keep original edit view, for now -->
      <browser:menuItem title="Edit" action="editForm.html" />

      <!-- Supress the upload view from file -->
      <browser:menuItem title="Upload" action="editForm.html"
                        filter="python: False" />

  </browser:menuItems>

  <browser:menuItem
      menu="add_content"
      for="zope.app.interfaces.container.IAdding"
      title="I18n File"
      action="zope.app.i18nfile.I18nFile"
      description="A file that supports multiple locales."
      permission="zope.ManageContent"
      />


  <!-- i18nimage directives -->

  <browser:page
      name="index.html"
      for="zope.app.i18nfile.interfaces.II18nImage"
      permission="zope.View"
      allowed_attributes="__call__ tag"
      class=".i18nimage.I18nImageData"
      />

  <browser:pages
      for="zope.app.i18nfile.interfaces.II18nImage"
      permission="zope.ManageContent"
      class=".i18nimage.I18nImageEdit">

      <browser:page name="upload.html" template="image_edit.pt" />
      <browser:page name="uploadAction.html" attribute="action" />

  </browser:pages>

  <browser:menuItems
      menu="zmi_views"
      for="zope.app.i18nfile.interfaces.II18nImage"
      >

      <!-- Keep the old "edit" form -->
      <browser:menuItem title="Edit" action="upload.html"/>

      <!-- Suppress upload form (from IFile) -->
      <browser:menuItem title="Upload" action="upload.html"
                        filter="python: False" />

  </browser:menuItems>

  <browser:menuItem
      menu="add_content"
      for="zope.app.interfaces.container.IAdding"
      title="I18n Image"
      action="I18nImage"
      description="A multi-locale version of an Image." 
      permission="zope.ManageContent"
      />

</configure>


=== Added File Zope3/src/zope/app/i18nfile/browser/file_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="context/msg"
     tal:condition="python: hasattr(context, 'msg')">
    Message will go here.
  </p>

  <p tal:content="view/description">
    Description of the Form.
  </p>

  <form action="edit.html" method="post">

    <div class="row">
      <div class="label" i18n:translate="">Content Type</div>
      <div class="field">
        <input name="contentType" type="text" size="20"
               tal:attributes="value context/getContentType" />
      </div>
    </div>
    
    <div class="row">
      <div class="label" i18n:translate="">Default Language</div>
      <div class="field">
        <select name="defaultLanguage">
          <span tal:repeat="lang context/getAvailableLanguages"
                tal:omit-tag="">
          <option tal:attributes="
                      value lang;
                      selected python:context.getDefaultLanguage() == lang"
                  tal:content="lang" />
         </span>
        </select>
      </div>
    </div>
    <hr />
    <div class="row">
      <div class="label" i18n:translate="">Language</div>
      <div class="field">
        <select name="language">
          <span tal:repeat="lang context/getAvailableLanguages"
                tal:omit-tag="">
          <option tal:attributes="
                      value lang;
                      selected python:request.get('language',
                                      context.getDefaultLanguage()) == lang"
                  tal:content="lang" />
         </span>
        </select>
        <input type="submit" name="selectLanguage" value="Show" 
               i18n:attributes="value show-button"/>
        <input type="submit" name="removeLanguage"
               i18n:attributes="value remove-button"/>
        &nbsp;&nbsp;
        <input type="submit" name="addLanguage"
               value="Add new language"
               i18n:attributes="value" />
        <input type="text" name="newLanguage" size="10" />
      </div>
    </div>
    <div class="row">
      <div class="label" i18n:translate="">Data</div>
      <div class="field">
        <textarea name="data" cols="70" rows="10"
             tal:content="python:context.getData(request.get('language'))" />
      </div>
    </div>

    <div class="row">
      <div class="controls">
        <input type="submit" name="edit" value="Save Changes" 
               i18n:attributes="value save-changes-button"/>
      </div>
    </div>

  </form>

</div>
</body>
</html>




=== Added File Zope3/src/zope/app/i18nfile/browser/i18nfile.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.
#
##############################################################################
"""I18n versions of several content objects.

$Id: i18nfile.py,v 1.1.2.1 2004/02/20 19:41:02 philikon Exp $
"""
from zope.i18n.negotiator import negotiator

__metaclass__ = type

class I18nFileView:

    def __call__(self):
        """Call the File
        """
        request = self.request
        language = None
        if request is not None:
            langs = self.context.getAvailableLanguages()
            language = negotiator.getLanguage(langs, request)

            request.response.setHeader('Content-Type',
                                       self.context.getContentType())
            request.response.setHeader('Content-Length',
                                       self.context.getSize(language))

        return self.context.getData(language)


class I18nFileEdit:

    name = 'editForm'
    title = 'Edit Form'
    description = ('This edit form allows you to make changes to the ' +
                   'properties of this file.')

    def action(self, contentType, data, language, defaultLanguage,
               selectLanguage=None, removeLanguage=None,
               addLanguage=None, newLanguage=None):
        if selectLanguage:
            pass
        elif removeLanguage:
            self.context.removeLanguage(language)
            language = self.context.getDefaultLanguage()
        else:
            if addLanguage:
                language = newLanguage
            self.context.setDefaultLanguage(defaultLanguage)
            self.context.edit(data, contentType, language)
        return self.request.response.redirect(self.request.URL[-1] +
                      "/editForm.html?language=%s" %language)  # XXX url_quote


=== Added File Zope3/src/zope/app/i18nfile/browser/i18nimage.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.

$Id: i18nimage.py,v 1.1.2.1 2004/02/20 19:41:02 philikon Exp $
"""
from zope.i18n.negotiator import negotiator
from zope.app.i18n import ZopeMessageIDFactory as _
from zope.app.file.browser.image import ImageData

__metaclass__ = type

class I18nImageEdit:

    name = 'editForm'
    title = _('Edit Form')
    description = _('This edit form allows you to make changes to the ' +
                   'properties of this image.')

    def getImageSize(self, language=None):
        # XXX Change to ISizeable adapter
        size = self.context.getImageSize(language)
        return "%d x %d" % (size[0], size[1])

    def action(self, contentType, data, language, defaultLanguage,
               selectLanguage=None, removeLanguage=None,
               addLanguage=None, newLanguage=None):
        if selectLanguage:
            pass
        elif removeLanguage:
            self.context.removeLanguage(language)
            language = self.context.getDefaultLanguage()
        else:
            if addLanguage:
                language = newLanguage
            self.context.setDefaultLanguage(defaultLanguage)
            self.context.edit(data, contentType, language)
        return self.request.response.redirect(self.request.URL[-1] +
                      "/editForm.html?language=%s" % language)  # XXX url_quote


class I18nImageData(ImageData):

    def __call__(self):
        image = self.context
        language = None
        if self.request is not None:
            langs = self.context.getAvailableLanguages()
            language = negotiator.getLanguage(langs, self.request)

            self.request.response.setHeader('content-type',
                                                 image.getContentType())
            # XXX: no content-length?  See ImageData.__call__
        return image.getData(language)


    def tag(self, height=None, width=None, **args):
        """See ImageData.tag."""

        language = None
        if self.request is not None and \
           (width is None or height is None):
            langs = self.context.getAvailableLanguages()
            language = negotiator.getLanguage(langs, self.request)

        if width is None:
            width = self.context.getImageSize(language)[0]
        if height is None:
            height = self.context.getImageSize(language)[1]
        return ImageData.tag(self, width=width, height=height, **args)


=== Added File Zope3/src/zope/app/i18nfile/browser/image_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="view/description">
    Description of the Form.
  </p>

  <form action="uploadAction.html" method="post" 
        enctype="multipart/form-data">

    <div class="row">
      <div class="label" i18n:translate="">Content Type</div>
      <div class="field">
        <input name="contentType" type="text" size="20"
               tal:attributes="value context/getContentType" />
      </div>
    </div>
    
    <div class="row">
      <div class="label" i18n:translate="">Default Language</div>
      <div class="field">
        <select name="defaultLanguage">
          <span tal:repeat="lang context/getAvailableLanguages"
                tal:omit-tag="">
          <option tal:attributes="
                      value lang;
                      selected python:context.getDefaultLanguage() == lang"
                  tal:content="lang" />
         </span>
        </select>
      </div>
    </div>
    <hr />
    <div class="row">
      <div class="label" i18n:translate="">Language</div>
      <div class="field">
        <select name="language">
          <span tal:repeat="lang context/getAvailableLanguages"
                tal:omit-tag="">
          <option tal:attributes="
                      value lang;
                      selected python:request.get('language',
                                      context.getDefaultLanguage()) == lang"
                  tal:content="lang" />
         </span>
        </select>
        <input type="submit" name="selectLanguage" value="Show" 
               i18n:attributes="value show-button"/>
        <input type="submit" name="removeLanguage"
               i18n:attributes="value remove-button"/>
        &nbsp;&nbsp;
        <input type="submit" name="addLanguage"
               value="Add new language"
               i18n:attributes="value" />
        <input type="text" name="newLanguage" size="10" />
      </div>
    </div>
    <div class="row">
      <div class="label" i18n:translate="">Data</div>
      <div class="field">
        <input type="file" name="data" size="20" />
      </div>
    </div>
    <div class="row">
      <div class="label" i18n:translate="">Dimensions</div>
      <div class="field"
          tal:content="python:view.getImageSize(request.get('language'))">
        40 x 40
      </div>
    </div>
    <div class="row">
      <div class="label" i18n:translate="">Dimensions</div>
      <div class="field"
          tal:content="python:view.getSize(request.get('language'))">
        40 kB
      </div>
    </div>

    <div class="row">
      <div class="controls">
        <input type="submit" name="edit" value="Save Changes" 
               i18n:attributes="value save-changes-button"/>
      </div>
    </div>

  </form>

</div>
</body>
</html>




More information about the Zope3-Checkins mailing list