diff --git a/CHANGES.rst b/CHANGES.rst index f3704ba..b4add6f 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,9 @@ Changelog 1.1b2 (unreleased) ------------------ +- Remove dependency on five.grok (closes `#5`_). + [rodfersou] + - Package is now compatible with Plone 5. [hvelarde] @@ -95,6 +98,7 @@ Changelog - Initial release. .. _`#3`: https://github.com/collective/collective.liveblog/issues/3 +.. _`#5`: https://github.com/collective/collective.liveblog/issues/5 .. _`#6`: https://github.com/collective/collective.liveblog/issues/6 .. _`#7`: https://github.com/collective/collective.liveblog/issues/7 .. _`#10`: https://github.com/collective/collective.liveblog/issues/10 diff --git a/setup.py b/setup.py index 4e1f581..c072fd8 100644 --- a/setup.py +++ b/setup.py @@ -40,13 +40,11 @@ include_package_data=True, zip_safe=False, install_requires=[ - 'five.grok', 'plone.api', - 'plone.app.dexterity [grok]', + 'plone.app.dexterity', 'plone.app.layout', 'plone.batching', 'plone.dexterity', - 'plone.directives.form', 'plone.memoize', 'plone.namedfile [blobs]', 'Products.CMFPlone >=4.3', diff --git a/src/collective/liveblog/browser/configure.zcml b/src/collective/liveblog/browser/configure.zcml index ac86323..18d3258 100644 --- a/src/collective/liveblog/browser/configure.zcml +++ b/src/collective/liveblog/browser/configure.zcml @@ -29,4 +29,41 @@ layer="collective.liveblog.interfaces.IBrowserLayer" /> + + + + + + + + diff --git a/src/collective/liveblog/browser/header.py b/src/collective/liveblog/browser/header.py index 94faf6f..247cf70 100644 --- a/src/collective/liveblog/browser/header.py +++ b/src/collective/liveblog/browser/header.py @@ -1,22 +1,11 @@ # -*- coding: utf-8 -*- -from five import grok -from plone.app.layout.viewlets.interfaces import IAboveContent -from collective.liveblog.interfaces import ILiveblog -from collective.liveblog.interfaces import IBrowserLayer +from plone.app.layout.viewlets.common import ViewletBase -grok.templatedir('templates') - -class Header(grok.Viewlet): +class Header(ViewletBase): """A viewlet to include a header in the Liveblog.""" - grok.name('collective.liveblog.header') - grok.context(ILiveblog) - grok.layer(IBrowserLayer) - grok.require('zope2.View') - grok.viewletmanager(IAboveContent) - def available(self): """Return True if an image has been defined.""" return self.context.image is not None diff --git a/src/collective/liveblog/browser/recent_updates.py b/src/collective/liveblog/browser/recent_updates.py index eb31b16..eb75ab0 100644 --- a/src/collective/liveblog/browser/recent_updates.py +++ b/src/collective/liveblog/browser/recent_updates.py @@ -2,30 +2,19 @@ from App.Common import rfc1123_date from collective.liveblog.browser.base import BaseView from collective.liveblog.config import PROJECTNAME -from collective.liveblog.interfaces import IBrowserLayer -from collective.liveblog.interfaces import ILiveblog from datetime import datetime -from five import grok -# from plone.memoize import ram from time import time +from zope.publisher.browser import BrowserView import logging logger = logging.getLogger(PROJECTNAME) -grok.templatedir('templates') - -class RecentUpdates(grok.View, BaseView): +class RecentUpdates(BrowserView, BaseView): """Helper view for Liveblog.""" - grok.context(ILiveblog) - grok.layer(IBrowserLayer) - grok.name('recent-updates') - grok.require('zope2.View') - grok.template('recent_updates') - def _needs_hard_refresh(self): """Return True if a hard refresh of the page is needed. diff --git a/src/collective/liveblog/browser/templates/header.pt b/src/collective/liveblog/browser/templates/header.pt index ef3015e..6ced7ac 100644 --- a/src/collective/liveblog/browser/templates/header.pt +++ b/src/collective/liveblog/browser/templates/header.pt @@ -5,11 +5,11 @@ i18n:domain="collective.liveblog" tal:omit-tag=""> - +
- \ No newline at end of file + diff --git a/src/collective/liveblog/browser/update.py b/src/collective/liveblog/browser/update.py index 0155460..c0467f3 100644 --- a/src/collective/liveblog/browser/update.py +++ b/src/collective/liveblog/browser/update.py @@ -3,32 +3,16 @@ from collective.liveblog.browser.view import View from collective.liveblog.config import BATCH_SIZE from collective.liveblog.config import ORPHAN -from collective.liveblog.interfaces import IBrowserLayer -from collective.liveblog.interfaces import ILiveblog -from five import grok from plone import api from plone.batching import Batch from zope.i18n import translate from zope.security import checkPermission -grok.templatedir('templates') - - class Update(View): """View to add micro-updates to a Liveblog.""" - grok.context(ILiveblog) - grok.layer(IBrowserLayer) - grok.require('collective.liveblog.AddMicroUpdate') - - def update(self): - self.start = int(self.request.get('b_start', 0)) - if self.start != 0: - msg = _(u'You must be on the first page of the batch to add micro-updates.') - api.portal.show_message(msg, self.request, type='info') - @property def batch(self): """Encapsulate sequence in batches of size.""" @@ -52,3 +36,10 @@ def automatic_updates_enabled(self): """ enabled = super(Update, self).automatic_updates_enabled return enabled and self.start == 0 + + def __call__(self): + self.start = int(self.request.get('b_start', 0)) + if self.start != 0: + msg = _(u'You must be on the first page of the batch to add micro-updates.') + api.portal.show_message(msg, self.request, type='info') + return self.index() diff --git a/src/collective/liveblog/browser/view.py b/src/collective/liveblog/browser/view.py index 546b726..8fa09bb 100644 --- a/src/collective/liveblog/browser/view.py +++ b/src/collective/liveblog/browser/view.py @@ -1,27 +1,19 @@ # -*- coding: utf-8 -*- from collective.liveblog.browser.base import BaseView -from collective.liveblog.interfaces import IBrowserLayer -from collective.liveblog.interfaces import ILiveblog -from five import grok from plone import api from plone.memoize import ram from time import time - -grok.templatedir('templates') +from zope.publisher.browser import BrowserView def _updates_cachekey(method, self): return (self.context.absolute_url_path(), int(self.context.modified())) -class View(grok.View, BaseView): +class View(BrowserView, BaseView): """Default view for Liveblog.""" - grok.context(ILiveblog) - grok.layer(IBrowserLayer) - grok.require('zope2.View') - @ram.cache(_updates_cachekey) def updates(self): """Return the list of micro-updates in the Liveblog in reverse order; diff --git a/src/collective/liveblog/configure.zcml b/src/collective/liveblog/configure.zcml index 6af62d8..191e913 100644 --- a/src/collective/liveblog/configure.zcml +++ b/src/collective/liveblog/configure.zcml @@ -2,14 +2,12 @@ xmlns="http://namespaces.zope.org/zope" xmlns:browser="http://namespaces.zope.org/browser" xmlns:five="http://namespaces.zope.org/five" - xmlns:grok="http://namespaces.zope.org/grok" xmlns:i18n="http://namespaces.zope.org/i18n" i18n_domain="collective.liveblog"> - @@ -24,8 +22,6 @@ title="collective.liveblog: Add MicroUpdate" /> - - diff --git a/src/collective/liveblog/content.py b/src/collective/liveblog/content.py index d28f790..c904f7a 100644 --- a/src/collective/liveblog/content.py +++ b/src/collective/liveblog/content.py @@ -1,11 +1,12 @@ # -*- coding: utf-8 -*- from collective.liveblog.adapters import IMicroUpdateContainer from collective.liveblog.interfaces import ILiveblog -from five import grok from plone import api from plone.dexterity.content import Container +from zope.interface import implementer +@implementer(ILiveblog) class Liveblog(Container): """A liveblog is a blog post which is intended to provide a rolling @@ -15,8 +16,6 @@ class Liveblog(Container): are used to detect if a hard refresh of the views is needed. """ - grok.implements(ILiveblog) - _last_microupdate_edition = '0.0' _last_microupdate_deletion = '0.0' diff --git a/src/collective/liveblog/interfaces.py b/src/collective/liveblog/interfaces.py index 08e0935..e116b30 100644 --- a/src/collective/liveblog/interfaces.py +++ b/src/collective/liveblog/interfaces.py @@ -1,6 +1,5 @@ # -*- coding: utf-8 -*- from collective.liveblog import _ -from plone.directives import form from plone.namedfile.field import NamedBlobImage from zope.interface import Interface @@ -10,7 +9,7 @@ class IBrowserLayer(Interface): """A layer specific for this add-on product.""" -class ILiveblog(form.Schema): +class ILiveblog(Interface): """A liveblog is a blog post which is intended to provide a rolling textual coverage of an ongoing event.