Skip to content

Commit

Permalink
Added events to notify before/after tile rendering.
Browse files Browse the repository at this point in the history
  • Loading branch information
thet committed Apr 18, 2018
1 parent 56a9447 commit 60c94e8
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 0 deletions.
10 changes: 10 additions & 0 deletions CHANGES.rst
Expand Up @@ -4,6 +4,16 @@ Changelog
4.1.2 (unreleased)
------------------

Breaking changes:

- *add item here*

New features:

- Added events to notify before/after tile rendering.
[thet]


Bug fixes:

- Fix issue where resolving layout url with ajax_load parameter caused fail
Expand Down
20 changes: 20 additions & 0 deletions plone/app/blocks/events.py
@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from plone.app.blocks.interfaces import IAfterTileRenderEvent
from plone.app.blocks.interfaces import IBeforeTileRenderEvent
from zope.interface import implementer


class BaseTileRenderEvent(object):

def __init__(self, tile_href):
self.tile_href = tile_href


@implementer(IBeforeTileRenderEvent)
class BeforeTileRenderEvent(BaseTileRenderEvent):
pass


@implementer(IAfterTileRenderEvent)
class AfterTileRenderEvent(BaseTileRenderEvent):
pass
17 changes: 17 additions & 0 deletions plone/app/blocks/interfaces.py
Expand Up @@ -2,6 +2,7 @@
from plone.resource.manifest import ManifestFormat
from zope import schema
from zope.i18nmessageid import MessageFactory
from zope.interface import Attribute
from zope.interface import Interface


Expand Down Expand Up @@ -83,3 +84,19 @@ def __unicode__():

def __str__():
"""Return the layout as a str value"""


class IBaseTileRenderEvent(Interface):
"""Base class for tile render events.
"""
tile_href = Attribute('URL of the rendered tile')


class IBeforeTileRenderEvent(IBaseTileRenderEvent):
"""Thrown before a tile is rendered.
"""


class IAfterTileRenderEvent(IBaseTileRenderEvent):
"""Thrown after a tile is rendered.
"""
8 changes: 8 additions & 0 deletions plone/app/blocks/tiles.py
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
from lxml import html
from lxml.etree import XSLTApplyError
from plone.app.blocks import events
from plone.app.blocks import PloneMessageFactory
from plone.app.blocks import utils
from plone.app.blocks.interfaces import IBlocksSettings
Expand All @@ -11,6 +12,7 @@
from urlparse import urljoin
from zExceptions import NotFound
from zope.component import queryUtility
from zope.event import notify
from zope.i18n import translate

import logging
Expand Down Expand Up @@ -48,6 +50,8 @@ def renderTiles(request, tree):
tileHref = tileNode.attrib[utils.tileAttrib]
if not tileHref.startswith('/'):
tileHref = urljoin(baseURL, tileHref)

notify(events.BeforeTileRenderEvent(tileHref))
try:
tileTree = utils.resolve(tileHref)
except RuntimeError:
Expand All @@ -62,13 +66,16 @@ def renderTiles(request, tree):
if tileTree is not None:
tileRoot = tileTree.getroot()
utils.replace_with_children(tileNode, tileRoot.find('head'))
notify(events.AfterTileRenderEvent(tileHref))

for tileNode in utils.bodyTileXPath(tree):
tileHref = tileNode.attrib[utils.tileAttrib]
tileRulesHref = tileNode.attrib.get(utils.tileRulesAttrib)

if not tileHref.startswith('/'):
tileHref = urljoin(baseURL, tileHref)

notify(events.BeforeTileRenderEvent(tileHref))
try:
tileTree = utils.resolve(tileHref)
except RuntimeError:
Expand Down Expand Up @@ -109,5 +116,6 @@ def renderTiles(request, tree):
for tileHeadChild in tileHead:
headNode.append(tileHeadChild)
utils.replace_with_children(tileNode, tileBody)
notify(events.AfterTileRenderEvent(tileHref))

return tree

0 comments on commit 60c94e8

Please sign in to comment.