Skip to content

Commit

Permalink
Added initial implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
projekt01 committed Sep 27, 2007
0 parents commit bd1aaae
Show file tree
Hide file tree
Showing 14 changed files with 383 additions and 0 deletions.
1 change: 1 addition & 0 deletions AUTHOR.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Roger Ineichen (roger <at> projekt01 <dot> ch)
8 changes: 8 additions & 0 deletions CHANGES.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
=======
CHANGES
=======

Version 0.5.0 (unreleased)
--------------------------

- Initial Release
54 changes: 54 additions & 0 deletions LICENSE.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
Zope Public License (ZPL) Version 2.1
-------------------------------------

A copyright notice accompanies this license document that
identifies the copyright holders.

This license has been certified as open source. It has also
been designated as GPL compatible by the Free Software
Foundation (FSF).

Redistribution and use in source and binary forms, with or
without modification, are permitted provided that the
following conditions are met:

1. Redistributions in source code must retain the
accompanying copyright notice, this list of conditions,
and the following disclaimer.

2. Redistributions in binary form must reproduce the accompanying
copyright notice, this list of conditions, and the
following disclaimer in the documentation and/or other
materials provided with the distribution.

3. Names of the copyright holders must not be used to
endorse or promote products derived from this software
without prior written permission from the copyright
holders.

4. The right to distribute this software or to use it for
any purpose does not give you the right to use
Servicemarks (sm) or Trademarks (tm) of the copyright
holders. Use of them is covered by separate agreement
with the copyright holders.

5. If any files are modified, you must cause the modified
files to carry prominent notices stating that you changed
the files and the date of any change.

Disclaimer

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS''
AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
NO EVENT SHALL THE COPYRIGHT HOLDERS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
1 change: 1 addition & 0 deletions README.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
This package provides a ready 2 go menu implementation based on viewlets.
52 changes: 52 additions & 0 deletions bootstrap.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
##############################################################################
#
# Copyright (c) 2007 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.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.
#
##############################################################################
"""Bootstrap a buildout-based project
Simply run this script in a directory containing a buildout.cfg.
The script accepts buildout command-line options, so you can
use the -c option to specify an alternate configuration file.
$Id: bootstrap.py 75940 2007-05-24 14:45:00Z srichter $
"""

import os, shutil, sys, tempfile, urllib2

tmpeggs = tempfile.mkdtemp()

ez = {}
exec urllib2.urlopen('http://peak.telecommunity.com/dist/ez_setup.py'
).read() in ez
ez['use_setuptools'](to_dir=tmpeggs, download_delay=0)

import pkg_resources

cmd = 'from setuptools.command.easy_install import main; main()'
if sys.platform == 'win32':
cmd = '"%s"' % cmd # work around spawn lamosity on windows

ws = pkg_resources.working_set
assert os.spawnle(
os.P_WAIT, sys.executable, sys.executable,
'-c', cmd, '-mqNxd', tmpeggs, 'zc.buildout',
dict(os.environ,
PYTHONPATH=
ws.find(pkg_resources.Requirement.parse('setuptools')).location
),
) == 0

ws.add_entry(tmpeggs)
ws.require('zc.buildout')
import zc.buildout.buildout
zc.buildout.buildout.main(sys.argv[1:] + ['bootstrap'])
shutil.rmtree(tmpeggs)
7 changes: 7 additions & 0 deletions buildout.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
[buildout]
develop = .
parts = test

[test]
recipe = zc.recipe.testrunner
eggs = z3c.menu.ready2go [test]
69 changes: 69 additions & 0 deletions setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
##############################################################################
#
# Copyright (c) 2007 Zope Foundation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.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.
#
##############################################################################
"""Setup
$Id:$
"""
import os
from setuptools import setup, find_packages

def read(*rnames):
return open(os.path.join(os.path.dirname(__file__), *rnames)).read()

setup (
name='z3c.menu.ready2go',
version='0.5.0',
author = "Stephan Richter, Roger Ineichen and the Zope Community",
author_email = "zope3-dev@zope.org",
description = "A ready to go menu for Zope3",
long_description=(
read('README.txt')
+ '\n\n' +
read('CHANGES.txt')
),
license = "ZPL 2.1",
keywords = "zope3 z3c ready 2 go menu",
classifiers = [
'Development Status :: 4 - Beta',
'Environment :: Web Environment',
'Intended Audience :: Developers',
'License :: OSI Approved :: Zope Public License',
'Programming Language :: Python',
'Natural Language :: English',
'Operating System :: OS Independent',
'Topic :: Internet :: WWW/HTTP',
'Framework :: Zope3'],
url = 'http://cheeseshop.python.org/pypi/z3c.menu.ready2go',
packages = find_packages('src'),
include_package_data = True,
package_dir = {'':'src'},
namespace_packages = ['z3c'],
extras_require = dict(
test = [
'zope.testbrowser',
'zope.app.securitypolicy',
'zope.app.testing',
'zope.app.zcmlfiles',
'zope.app.twisted',
],
),
install_requires = [
'setuptools',
'zope.configuration',
'zope.traversing',
'zope.app.http',
'zope.app.publisher',
],
zip_safe = False,
)
7 changes: 7 additions & 0 deletions src/z3c/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# this is a namespace package
try:
import pkg_resources
pkg_resources.declare_namespace(__name__)
except ImportError:
import pkgutil
__path__ = pkgutil.extend_path(__path__, __name__)
7 changes: 7 additions & 0 deletions src/z3c/menu/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# this is a namespace package
try:
import pkg_resources
pkg_resources.declare_namespace(__name__)
except ImportError:
import pkgutil
__path__ = pkgutil.extend_path(__path__, __name__)
16 changes: 16 additions & 0 deletions src/z3c/menu/ready2go/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
##############################################################################
#
# Copyright (c) 2007 Zope Foundation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.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: layer.py 197 2007-04-13 05:03:32Z rineichen $
"""
5 changes: 5 additions & 0 deletions src/z3c/menu/ready2go/item.pt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<li class="current"
tal:attributes="class view/css">
<a href="#"
tal:attributes="href view/url"><span i18n:translate="" tal:content="view/title">Title</span></a>
</li>
95 changes: 95 additions & 0 deletions src/z3c/menu/ready2go/item.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
##############################################################################
#
# Copyright (c) 2007 Zope Foundation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.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: layer.py 197 2007-04-13 05:03:32Z rineichen $
"""
__docformat__ = "reStructuredText"

import zope.interface
from zope.traversing.browser import absoluteURL
from zope.viewlet import viewlet
from zope.app.component import hooks
from zope.app.pagetemplate import ViewPageTemplateFile


# base menu item mixin
class MenuItem(viewlet.ViewletBase):
"""Menu item base."""

template = ViewPageTemplateFile('item.pt')

# set this attrs directly in zcml or override it in a sub class
contextInterface = zope.interface.Interface
viewInterface = zope.interface.Interface
viewName = u'index.html'
cssActive = u'selected'
cssInActive = u''
weight = 0

# override it and use i18n msg ids
@property
def title(self):
return self.__name__

@property
def available(self):
return True

def getURLContext(self):
return hooks.getSite()

@property
def css(self):
if self.selected:
return self.cssActive
else:
return self.cssInActive

@property
def available(self):
return True

@property
def selected(self):
if self.viewInterface.providedBy(self.__parent__) and \
self.contextInterface.providedBy(self.__parent__.context) and \
self.__parent__.__name__ == self.viewName:
return True
return False

@property
def url(self):
context = self.getURLContext()
return absoluteURL(context, self.request) + '/' + self.viewName

def render(self):
"""Return the template with the option 'menus'"""
return self.template()

def __repr__(self):
return '<%s %r>' % (self.__class__.__name__, self.__name__)


class GlobalMenuItem(MenuItem):
"""Global menu item."""

def getURLContext(self):
return hooks.getSite()


class ContextMenuItem(MenuItem):
"""Context menu item."""

def getURLContext(self):
return self.context
55 changes: 55 additions & 0 deletions src/z3c/menu/ready2go/manager.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
##############################################################################
#
# Copyright (c) 2007 Zope Foundation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.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: layer.py 197 2007-04-13 05:03:32Z rineichen $
"""
__docformat__ = "reStructuredText"

import zope.interface
import zope.security
from zope.traversing.browser import absoluteURL
from zope.viewlet import manager
from zope.app.component import hooks
from zope.app.pagetemplate import ViewPageTemplateFile


def getWeight((name, viewlet)):
try:
return int(viewlet.weight)
except AttributeError:
return 0


# base menu manager mixin
class MenuManager(manager.ViewletManagerBase):
"""Menu manager for all kind of menu items"""

def sort(self, viewlets):
return sorted(viewlets, key=getWeight)

def filter(self, viewlets):
"""Filter available menu items."""
# Only return viewlets accessible to the principal
return [(name, viewlet) for name, viewlet in viewlets
if zope.security.canAccess(viewlet, 'render') and
viewlet.available == True]

def render(self):
"""Return the template whihc renders the menu items."""
if not self.viewlets:
return u''
return self.template()

def __repr__(self):
return '<%s %r>' % (self.__class__.__name__, self.__name__)
6 changes: 6 additions & 0 deletions src/z3c/menu/ready2go/menu.pt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<tal:block define="viewlets view/viewlets">
<ul tal:condition="viewlets">
<tal:block repeat="viewlet viewlets"
content="structure viewlet/render" />
</ul>
</tal:block>

0 comments on commit bd1aaae

Please sign in to comment.