-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add fragment tile for plone.app.mosaic
- Loading branch information
Showing
4 changed files
with
135 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
<?xml version="1.0"?> | ||
<metadata> | ||
<version>1</version> | ||
<dependencies> | ||
<dependency>profile-plone.app.tiles:default</dependency> | ||
</dependencies> | ||
</metadata> |
37 changes: 37 additions & 0 deletions
37
src/collective/themefragments/profiles/default/registry.xml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
<?xml version="1.0"?> | ||
<registry> | ||
<!-- Legacy tile registration --> | ||
<record name="plone.app.tiles"> | ||
<field type="plone.registry.field.List"> | ||
<title>Tiles</title> | ||
<value_type type="plone.registry.field.TextLine" /> | ||
</field> | ||
<value purge="false"> | ||
<element>collective.themefragment.fragment</element> | ||
</value> | ||
</record> | ||
|
||
<!-- Mosaic tile registration --> | ||
<records prefix="plone.app.mosaic.app_tiles.collective_themefragments_fragment" | ||
interface="plone.app.mosaic.interfaces.ITile"> | ||
<value key="name">collective.themefragments.fragment</value> | ||
<value key="label">Theme fragment</value> | ||
<value key="category">advanced</value> | ||
<value key="tile_type">app</value> | ||
<value key="default_value"/> | ||
<value key="read_only">false</value> | ||
<value key="settings">true</value> | ||
<value key="favorite">false</value> | ||
<value key="rich_text">false</value> | ||
<value key="weight">100</value> | ||
</records> | ||
|
||
<record name="plone.app.mosaic.app_tiles.collective.themefragments_fragment.available_actions"> | ||
<field type="plone.registry.field.List"> | ||
<title>Available actions for the theme fragment tile</title> | ||
<value_type type="plone.registry.field.TextLine" /> | ||
</field> | ||
<value> | ||
</value> | ||
</record> | ||
</registry> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
# -*- coding: utf-8 -*- | ||
from collective.themefragments.interfaces import FRAGMENTS_DIRECTORY | ||
from collective.themefragments.traversal import ThemeFragment | ||
from os.path import splitext | ||
from plone.app.theming.interfaces import THEME_RESOURCE_NAME | ||
from plone.app.theming.utils import getCurrentTheme | ||
from plone.app.theming.utils import isThemeEnabled | ||
from plone.resource.utils import queryResourceDirectory | ||
from plone.supermodel import model | ||
from plone.tiles import Tile | ||
from zope import schema | ||
from zope.globalrequest import getRequest | ||
from zope.interface import provider | ||
from zope.schema.interfaces import IContextSourceBinder | ||
from zope.schema.vocabulary import SimpleTerm | ||
from zope.schema.vocabulary import SimpleVocabulary | ||
|
||
from zope.i18nmessageid import MessageFactory | ||
_ = MessageFactory('collective.themefragments') | ||
|
||
|
||
@provider(IContextSourceBinder) | ||
def themeFragments(context): | ||
request = getRequest() | ||
|
||
if not isThemeEnabled(request): | ||
return SimpleVocabulary([]) | ||
|
||
currentTheme = getCurrentTheme() | ||
if currentTheme is None: | ||
return SimpleVocabulary([]) | ||
|
||
themeDirectory = queryResourceDirectory(THEME_RESOURCE_NAME, currentTheme) | ||
if themeDirectory is None: | ||
return SimpleVocabulary([]) | ||
|
||
if not themeDirectory.isDirectory(FRAGMENTS_DIRECTORY): | ||
return SimpleVocabulary([]) | ||
|
||
fragments = [splitext(filename)[0] for filename | ||
in themeDirectory[FRAGMENTS_DIRECTORY].listDirectory() | ||
if splitext(filename)[-1] == '.pt' | ||
and themeDirectory[FRAGMENTS_DIRECTORY].isFile(filename)] | ||
|
||
return SimpleVocabulary(map(SimpleTerm, fragments)) | ||
|
||
|
||
class IFragmentTile(model.Schema): | ||
fragment = schema.Choice( | ||
title=_(u'Fragment'), | ||
source=themeFragments | ||
) | ||
|
||
|
||
class FragmentTile(Tile): | ||
"""A tile that displays a theme fragment""" | ||
|
||
def update(self): | ||
self.index = ThemeFragment( | ||
self.context, self.request)[self.data['fragment'].encode('utf-8')] | ||
|
||
def __call__(self): | ||
self.update() | ||
return u'<html><body>{0:s}</body></html>'.format(self.index()) |