-
Notifications
You must be signed in to change notification settings - Fork 55
/
vocabularies.py
124 lines (94 loc) · 4.41 KB
/
vocabularies.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# -*- coding: utf-8 -*-
from collective.cover.config import IS_PLONE_5
from collective.cover.controlpanel import ICoverSettings
from collective.cover.interfaces import IGridSystem
from collective.cover.tiles.base import IPersistentCoverTile
from plone.app.vocabularies.types import ReallyUserFriendlyTypesVocabulary
from plone.registry.interfaces import IRegistry
from plone.tiles.interfaces import ITileType
from zope.component import getUtilitiesFor
from zope.component import getUtility
from zope.component import queryUtility
from zope.interface import implementer
from zope.schema.interfaces import IVocabularyFactory
from zope.schema.vocabulary import SimpleTerm
from zope.schema.vocabulary import SimpleVocabulary
@implementer(IVocabularyFactory)
class AvailableLayoutsVocabulary(object):
def __call__(self, context):
registry = getUtility(IRegistry)
settings = registry.forInterface(ICoverSettings)
items = [SimpleTerm(value=i, title=i) for i in sorted(settings.layouts)]
return SimpleVocabulary(items)
@implementer(IVocabularyFactory)
class AvailableTilesVocabulary(object):
def __call__(self, context):
registry = getUtility(IRegistry)
settings = registry.forInterface(ICoverSettings)
tiles = settings.available_tiles
# FIXME: https://github.com/collective/collective.cover/issues/633
if IS_PLONE_5 and 'collective.cover.calendar' in tiles:
tiles.remove('collective.cover.calendar')
items = [SimpleTerm(value=i, title=i) for i in tiles]
return SimpleVocabulary(items)
@implementer(IVocabularyFactory)
class GridSystemsVocabulary(object):
def __call__(self, context):
items = [SimpleTerm(value=name, title=grid.title)
for (name, grid) in getUtilitiesFor(IGridSystem)]
return SimpleVocabulary(items)
@implementer(IVocabularyFactory)
class EnabledTilesVocabulary(object):
"""Return a list of tiles ready to work with collective.cover."""
def _enabled(self, name):
# FIXME: https://github.com/collective/collective.cover/issues/633
if IS_PLONE_5 and name == 'collective.cover.calendar':
return False
tile_type = queryUtility(ITileType, name)
if tile_type:
return issubclass(tile_type.schema, IPersistentCoverTile)
def __call__(self, context):
registry = getUtility(IRegistry)
tiles = registry['plone.app.tiles']
tiles = filter(self._enabled, tiles) # only enabled tiles
items = []
for tile in tiles:
tile_type = getUtility(ITileType, tile)
items.append(SimpleTerm(value=tile, title=tile_type.title))
return SimpleVocabulary(items)
@implementer(IVocabularyFactory)
class AvailableContentTypesVocabulary(ReallyUserFriendlyTypesVocabulary):
"""
Inherit from plone.app.vocabularies.ReallyUserFriendlyTypes; and filter
the results. We don't want covers to be listed.
"""
def __call__(self, context):
items = super(AvailableContentTypesVocabulary, self).__call__(context)
items = [i for i in items if i.token != 'collective.cover.content']
return SimpleVocabulary(items)
@implementer(IVocabularyFactory)
class TileStylesVocabulary(object):
"""Creates a vocabulary with the available styles stored in the registry.
"""
def __call__(self, context):
registry = getUtility(IRegistry)
settings = registry.forInterface(ICoverSettings)
items = []
with_default = False
if settings.styles is not None:
styles = list(settings.styles)
for style in styles:
if style.count('|') == 1: # skip in case of formating issues
title, css_class = style.split('|')
# remove any leading/trailing whitespaces
title, css_class = title.strip(), css_class.strip()
# make sure that default style is always first
if css_class == u'tile-default':
items.insert(0, SimpleTerm(value=css_class, title=title))
with_default = True
else:
items.append(SimpleTerm(value=css_class, title=title))
# force default style if it was removed from configuration
if not with_default:
items.insert(0, SimpleTerm(value=u'tile-default', title='-Default-'))
return SimpleVocabulary(items)