Skip to content

Commit

Permalink
Provide own interfaces since Chameleon will not provide them in a fut…
Browse files Browse the repository at this point in the history
…ure release
  • Loading branch information
malthe committed Dec 24, 2023
1 parent 565fe1a commit 5c5f709
Show file tree
Hide file tree
Showing 3 changed files with 89 additions and 2 deletions.
3 changes: 2 additions & 1 deletion CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
4.1 (unreleased)
================

- Nothing changed yet.
- Provide own interfaces, since Chameleon will not provide those in a
future release.


4.0 (2023-03-27)
Expand Down
2 changes: 1 addition & 1 deletion src/z3c/pt/configure.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<include package="zope.security" file="meta.zcml" />

<class class="chameleon.tal.RepeatItem">
<allow interface="chameleon.interfaces.ITALESIterator" />
<allow interface=".interfaces.ITALESIterator" />
</class>

<class class=".pagetemplate.BoundPageTemplate">
Expand Down
86 changes: 86 additions & 0 deletions src/z3c/pt/interfaces.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
from zope.interface import Interface


class ITALIterator(Interface): # pragma: no cover
"""A TAL iterator
Not to be confused with a Python iterator.
"""

def next():
"""Advance to the next value in the iteration, if possible
Return a true value if it was possible to advance and return
a false value otherwise.
"""


class ITALESIterator(ITALIterator): # pragma: no cover
"""TAL Iterator provided by TALES
Values of this iterator are assigned to items in the repeat namespace.
For example, with a TAL statement like: tal:repeat="item items",
an iterator will be assigned to "repeat/item". The iterator
provides a number of handy methods useful in writing TAL loops.
The results are undefined of calling any of the methods except
'length' before the first iteration.
"""

def index():
"""Return the position (starting with "0") within the iteration
"""

def number():
"""Return the position (starting with "1") within the iteration
"""

def even():
"""Return whether the current position is even
"""

def odd():
"""Return whether the current position is odd
"""

def parity():
"""Return 'odd' or 'even' depending on the position's parity
Useful for assigning CSS class names to table rows.
"""

def start():
"""Return whether the current position is the first position
"""

def end():
"""Return whether the current position is the last position
"""

def letter():
"""Return the position (starting with "a") within the iteration
"""

def Letter():
"""Return the position (starting with "A") within the iteration
"""

def roman():
"""Return the position (starting with "i") within the iteration
"""

def Roman():
"""Return the position (starting with "I") within the iteration
"""

def item():
"""Return the item at the current position
"""

def length():
"""Return the length of the sequence
Note that this may fail if the TAL iterator was created on a Python
iterator.
"""

0 comments on commit 5c5f709

Please sign in to comment.