collective.tiles.carousel 1.0.2__py3-none-any.whl → 1.0.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- collective/tiles/carousel/__init__.py +1 -0
- collective/tiles/carousel/configure.zcml +12 -11
- collective/tiles/carousel/locales/en/LC_MESSAGES/collective.tiles.carousel.mo +0 -0
- collective/tiles/carousel/profiles/default/browserlayer.xml +4 -5
- collective/tiles/carousel/profiles/default/metadata.xml +1 -1
- collective/tiles/carousel/profiles/default/registry/mosaic.xml +11 -10
- collective/tiles/carousel/profiles/uninstall/browserlayer.xml +4 -5
- collective/tiles/carousel/setuphandlers.py +1 -1
- collective/tiles/carousel/slides/configure.zcml +9 -8
- collective/tiles/carousel/slides/slide_full_view.py +0 -2
- collective/tiles/carousel/slides/slide_view.pt +8 -5
- collective/tiles/carousel/slides/slide_view.py +1 -2
- collective/tiles/carousel/testing.py +0 -1
- collective/tiles/carousel/tests/test_setup.py +2 -2
- collective/tiles/carousel/tile.pt +103 -61
- collective/tiles/carousel/tile.py +13 -40
- collective/tiles/carousel/utils.py +6 -45
- collective.tiles.carousel-1.0.4-py3.11-nspkg.pth +2 -0
- {collective.tiles.carousel-1.0.2.dist-info → collective.tiles.carousel-1.0.4.dist-info}/METADATA +40 -4
- collective.tiles.carousel-1.0.4.dist-info/RECORD +39 -0
- {collective.tiles.carousel-1.0.2.dist-info → collective.tiles.carousel-1.0.4.dist-info}/WHEEL +1 -1
- collective.tiles.carousel-1.0.2-py3.11-nspkg.pth +0 -3
- collective.tiles.carousel-1.0.2.dist-info/RECORD +0 -38
- {collective.tiles.carousel-1.0.2.dist-info → collective.tiles.carousel-1.0.4.dist-info}/LICENSE.GPL +0 -0
- {collective.tiles.carousel-1.0.2.dist-info → collective.tiles.carousel-1.0.4.dist-info}/LICENSE.rst +0 -0
- {collective.tiles.carousel-1.0.2.dist-info → collective.tiles.carousel-1.0.4.dist-info}/entry_points.txt +0 -0
- {collective.tiles.carousel-1.0.2.dist-info → collective.tiles.carousel-1.0.4.dist-info}/namespace_packages.txt +0 -0
- {collective.tiles.carousel-1.0.2.dist-info → collective.tiles.carousel-1.0.4.dist-info}/top_level.txt +0 -0
@@ -3,7 +3,8 @@
|
|
3
3
|
xmlns:genericsetup="http://namespaces.zope.org/genericsetup"
|
4
4
|
xmlns:i18n="http://namespaces.zope.org/i18n"
|
5
5
|
xmlns:plone="http://namespaces.plone.org/plone"
|
6
|
-
i18n_domain="collective.tiles.carousel"
|
6
|
+
i18n_domain="collective.tiles.carousel"
|
7
|
+
>
|
7
8
|
|
8
9
|
<i18n:registerTranslations directory="locales" />
|
9
10
|
|
@@ -14,39 +15,39 @@
|
|
14
15
|
|
15
16
|
<!-- Slider tile -->
|
16
17
|
<plone:tile
|
17
|
-
|
18
|
-
|
18
|
+
name="collective.tiles.carousel"
|
19
|
+
title="Carousel"
|
19
20
|
description=""
|
20
21
|
for="*"
|
21
|
-
layer="collective.tiles.carousel.interfaces.ICollectiveTilesCarouselLayer"
|
22
|
-
name="collective.tiles.carousel"
|
23
|
-
permission="zope2.View"
|
24
22
|
schema=".tile.ISliderTile"
|
23
|
+
class=".tile.SliderTile"
|
25
24
|
template="tile.pt"
|
26
|
-
|
25
|
+
permission="zope2.View"
|
26
|
+
add_permission="cmf.ModifyPortalContent"
|
27
|
+
layer="collective.tiles.carousel.interfaces.ICollectiveTilesCarouselLayer"
|
27
28
|
/>
|
28
29
|
|
29
30
|
<utility
|
30
|
-
component="collective.tiles.carousel.tile.availableSliderViewsVocabulary"
|
31
31
|
name="Available Slider Views"
|
32
|
+
component="collective.tiles.carousel.tile.availableSliderViewsVocabulary"
|
32
33
|
/>
|
33
|
-
|
34
|
+
|
34
35
|
|
35
36
|
<genericsetup:registerProfile
|
36
37
|
name="default"
|
37
38
|
title="collective.tiles.carousel"
|
38
|
-
directory="profiles/default"
|
39
39
|
description="Installs the collective.tiles.carousel add-on."
|
40
40
|
provides="Products.GenericSetup.interfaces.EXTENSION"
|
41
|
+
directory="profiles/default"
|
41
42
|
post_handler=".setuphandlers.post_install"
|
42
43
|
/>
|
43
44
|
|
44
45
|
<genericsetup:registerProfile
|
45
46
|
name="uninstall"
|
46
47
|
title="collective.tiles.carousel (uninstall)"
|
47
|
-
directory="profiles/uninstall"
|
48
48
|
description="Uninstalls the collective.tiles.carousel add-on."
|
49
49
|
provides="Products.GenericSetup.interfaces.EXTENSION"
|
50
|
+
directory="profiles/uninstall"
|
50
51
|
post_handler=".setuphandlers.uninstall"
|
51
52
|
/>
|
52
53
|
|
@@ -1,7 +1,6 @@
|
|
1
|
-
<?xml version="1.0" encoding="
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
2
|
<layers>
|
3
|
-
<layer
|
4
|
-
|
5
|
-
|
6
|
-
/>
|
3
|
+
<layer interface="collective.tiles.carousel.interfaces.ICollectiveTilesCarouselLayer"
|
4
|
+
name="collective.tiles.carousel"
|
5
|
+
/>
|
7
6
|
</layers>
|
@@ -1,18 +1,18 @@
|
|
1
|
-
<?xml version="1.0"?>
|
2
|
-
<registry
|
3
|
-
|
4
|
-
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<registry xmlns:i18n="http://xml.zope.org/namespaces/i18n"
|
3
|
+
i18n:domain="collective.tiles.carousel"
|
4
|
+
>
|
5
5
|
|
6
|
-
<!-- -*- extra stuff goes here -*- -->
|
6
|
+
<!-- -*- extra stuff goes here -*- -->
|
7
7
|
|
8
8
|
<!-- dynamic form -->
|
9
9
|
<!-- <records prefix="plone.resources/collective.tiles.sliders.dynamicform"
|
10
|
-
interface='
|
10
|
+
interface='plone.base.interfaces.IResourceRegistry'>
|
11
11
|
<value key="js">++plone++collective.tiles.sliders.dynamicform/pattern.js</value>
|
12
12
|
</records> -->
|
13
13
|
|
14
14
|
<!-- <records prefix="plone.bundles/collective.tiles.sliders.dynamicform"
|
15
|
-
interface='
|
15
|
+
interface='plone.base.interfaces.IBundleRegistry'>
|
16
16
|
<value key="resources">
|
17
17
|
<element>collective.tiles.sliders.dynamicform</element>
|
18
18
|
</value>
|
@@ -35,13 +35,14 @@
|
|
35
35
|
</record>
|
36
36
|
|
37
37
|
|
38
|
-
<records
|
39
|
-
|
38
|
+
<records interface="plone.app.mosaic.interfaces.ITile"
|
39
|
+
prefix="plone.app.mosaic.app_tiles.collective_tiles_carousel"
|
40
|
+
>
|
40
41
|
<value key="name">collective.tiles.carousel</value>
|
41
42
|
<value key="label">Carousel</value>
|
42
43
|
<value key="category">media</value>
|
43
44
|
<value key="tile_type">app</value>
|
44
|
-
<value key="default_value"
|
45
|
+
<value key="default_value" />
|
45
46
|
<value key="read_only">false</value>
|
46
47
|
<value key="settings">true</value>
|
47
48
|
<value key="favorite">false</value>
|
@@ -2,31 +2,32 @@
|
|
2
2
|
xmlns="http://namespaces.zope.org/zope"
|
3
3
|
xmlns:browser="http://namespaces.zope.org/browser"
|
4
4
|
xmlns:plone="http://namespaces.plone.org/plone"
|
5
|
-
i18n_domain="collective.tiles.carousel"
|
5
|
+
i18n_domain="collective.tiles.carousel"
|
6
|
+
>
|
6
7
|
|
7
8
|
<!-- Publish static files -->
|
8
9
|
<plone:static
|
10
|
+
directory="static"
|
9
11
|
name="collective.tiles.carousel"
|
10
12
|
type="plone"
|
11
|
-
directory="static"
|
12
13
|
/>
|
13
14
|
|
14
15
|
<browser:page
|
15
16
|
name="slide_view"
|
16
|
-
class=".slide_view.SlideView"
|
17
17
|
for="*"
|
18
|
-
|
19
|
-
permission="zope2.View"
|
18
|
+
class=".slide_view.SlideView"
|
20
19
|
template="slide_view.pt"
|
20
|
+
permission="zope2.View"
|
21
|
+
layer="collective.tiles.carousel.interfaces.ICollectiveTilesCarouselLayer"
|
21
22
|
/>
|
22
23
|
|
23
24
|
<browser:page
|
24
25
|
name="slide_full_view"
|
25
|
-
class=".slide_full_view.SlideFullView"
|
26
26
|
for="*"
|
27
|
-
|
28
|
-
permission="zope2.View"
|
27
|
+
class=".slide_full_view.SlideFullView"
|
29
28
|
template="slide_full_view.pt"
|
29
|
+
permission="zope2.View"
|
30
|
+
layer="collective.tiles.carousel.interfaces.ICollectiveTilesCarouselLayer"
|
30
31
|
/>
|
31
32
|
|
32
33
|
|
@@ -1,10 +1,13 @@
|
|
1
|
-
<tal:item define="
|
2
|
-
|
3
|
-
|
1
|
+
<tal:item define="
|
2
|
+
item python:view.item;
|
3
|
+
title python:item['data']['show_title'] and item['title'] or None;
|
4
|
+
description python:item['data']['show_description'] and item['description'] or None;
|
5
|
+
">
|
4
6
|
|
5
7
|
<tal:img replace="structure python:item['img_tag']" />
|
6
|
-
<div class="carousel-caption d-none d-md-block"
|
7
|
-
|
8
|
+
<div class="carousel-caption d-none d-md-block"
|
9
|
+
tal:condition="python:title or description"
|
10
|
+
>
|
8
11
|
<h5 tal:condition="python:title">${title}</h5>
|
9
12
|
<p tal:condition="python:description">${description}</p>
|
10
13
|
</div>
|
@@ -1,4 +1,3 @@
|
|
1
|
-
from collective.tiles.carousel import _
|
2
1
|
from plone import api
|
3
2
|
from plone.app.contenttypes.browser.link_redirect_view import NON_RESOLVABLE_URL_SCHEMES
|
4
3
|
from plone.app.contenttypes.utils import replace_link_variables_by_paths
|
@@ -27,7 +26,7 @@ class SlideView(BrowserView):
|
|
27
26
|
scale_util = api.content.get_view("images", obj, self.request)
|
28
27
|
return scale_util.tag(
|
29
28
|
fieldname="image",
|
30
|
-
mode=data.get("crop")
|
29
|
+
mode="contain" if data.get("crop") else "scale",
|
31
30
|
scale=(
|
32
31
|
data.get("image_scale")
|
33
32
|
if data.get("image_scale", "") != "original"
|
@@ -1,11 +1,12 @@
|
|
1
1
|
"""Setup tests for this package."""
|
2
|
+
|
2
3
|
from collective.tiles.carousel.testing import (
|
3
4
|
COLLECTIVE_TILES_CAROUSEL_INTEGRATION_TESTING,
|
4
5
|
)
|
5
6
|
from plone import api
|
6
7
|
from plone.app.testing import setRoles
|
7
8
|
from plone.app.testing import TEST_USER_ID
|
8
|
-
from
|
9
|
+
from plone.base.utils import get_installer
|
9
10
|
|
10
11
|
import unittest
|
11
12
|
|
@@ -35,7 +36,6 @@ class TestSetup(unittest.TestCase):
|
|
35
36
|
|
36
37
|
|
37
38
|
class TestUninstall(unittest.TestCase):
|
38
|
-
|
39
39
|
layer = COLLECTIVE_TILES_CAROUSEL_INTEGRATION_TESTING
|
40
40
|
|
41
41
|
def setUp(self):
|
@@ -1,71 +1,113 @@
|
|
1
|
-
<html tal:define="
|
2
|
-
|
3
|
-
|
4
|
-
<
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
1
|
+
<html tal:define="
|
2
|
+
items view/items | nothing;
|
3
|
+
">
|
4
|
+
<body>
|
5
|
+
<tal:slider tal:condition="items">
|
6
|
+
<tal:def define="
|
7
|
+
portal context/@@plone_portal_state/portal;
|
8
|
+
show_title view/data/show_title | None;
|
9
|
+
show_description view/data/show_description | None;
|
10
|
+
fullscreen python: view.data.get('allow_fullscreen') and 'fullscreen' or '';
|
11
|
+
pager python:view.data.get('pager') and 'true' or 'false';
|
12
|
+
navigation python:view.data.get('navigation') and 'true' or 'false';
|
13
|
+
darkvariant python:view.data.get('darkvariant') and 'carousel-dark' or '';
|
14
|
+
crossfade python:view.data.get('crossfade') and 'carousel-fade' or '';
|
15
|
+
link_slides python:view.data.get('link_slides') != 'disabled';
|
16
|
+
items_per_slide python:view.data.get('items_per_slide') and view.data.get('items_per_slide') or 1;
|
17
|
+
items_responsive python: items_per_slide > 1 and 'row-cols-2' or 'row-cols-1';
|
18
|
+
items_responsive python: items_per_slide == 3 and 'row-cols-1' or items_responsive;
|
19
|
+
autoplay_interval view/data/carousel_speed|nothing;
|
20
|
+
">
|
18
21
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
22
|
+
<div class="tileHeader"
|
23
|
+
tal:condition="python:view.data['title'] or view.data['description']"
|
24
|
+
>
|
25
|
+
<h2 class=""
|
26
|
+
tal:condition="python:view.data['title']"
|
27
|
+
tal:content="python:view.data['title']"
|
28
|
+
>Title</h2>
|
29
|
+
<div class="tileDescription lead"
|
30
|
+
tal:condition="python:view.data['description']"
|
31
|
+
tal:content="python:view.data['description']"
|
32
|
+
>Description</div>
|
33
|
+
</div>
|
25
34
|
|
26
|
-
|
35
|
+
<div class="carousel ${darkvariant} slide ${crossfade} mb-3 collective-tiles-carousel"
|
36
|
+
id="carousel-${view/id}"
|
37
|
+
tal:attributes="
|
38
|
+
data-bs-ride python:'carousel' if autoplay_interval else None;
|
39
|
+
data-bs-interval python:autoplay_interval if autoplay_interval else None;
|
40
|
+
"
|
41
|
+
>
|
27
42
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
43
|
+
<div class="carousel-indicators"
|
44
|
+
tal:condition="view/data/indicators"
|
45
|
+
>
|
46
|
+
<tal:indicators repeat="item items">
|
47
|
+
<button class="${python:repeat.item.index == 0 and 'active' or None}"
|
48
|
+
aria-current="true"
|
49
|
+
aria-label="Slide ${python:repeat.item.index}"
|
50
|
+
type="button"
|
51
|
+
data-bs-slide-to="${python:repeat.item.index}"
|
52
|
+
data-bs-target="#carousel-${view/id}"
|
53
|
+
i18n:attributes="aria-label"
|
54
|
+
></button>
|
55
|
+
</tal:indicators>
|
56
|
+
</div>
|
33
57
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
58
|
+
<div class="carousel-inner">
|
59
|
+
<tal:slides repeat="slide items">
|
60
|
+
<div class="carousel-item ${python:repeat.slide.index == 0 and 'active' or None}">
|
61
|
+
<div class="row g-3 ${items_responsive} row-cols-md-${items_per_slide}">
|
62
|
+
<tal:items repeat="item slide">
|
63
|
+
<div class="col position-relative"
|
64
|
+
tal:condition="link_slides"
|
65
|
+
>
|
66
|
+
<a href="${python:view.get_link(item)}">
|
67
|
+
<div tal:replace="structure python:view.item_view(item, view.data)">Listing</div>
|
68
|
+
</a>
|
69
|
+
</div>
|
70
|
+
<div class="col position-relative"
|
71
|
+
tal:condition="python: not link_slides"
|
72
|
+
>
|
73
|
+
<div tal:replace="structure python:view.item_view(item, view.data)">Listing</div>
|
74
|
+
</div>
|
75
|
+
</tal:items>
|
46
76
|
</div>
|
47
|
-
</
|
48
|
-
</
|
77
|
+
</div>
|
78
|
+
</tal:slides>
|
49
79
|
</div>
|
50
|
-
</tal:slides>
|
51
|
-
</div>
|
52
80
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
81
|
+
<a class="carousel-control-prev"
|
82
|
+
href="#carousel-${view/id}"
|
83
|
+
role="button"
|
84
|
+
data-bs-slide="prev"
|
85
|
+
tal:condition="view/data/controls"
|
86
|
+
>
|
87
|
+
<span class="carousel-control-prev-icon"
|
88
|
+
aria-hidden="true"
|
89
|
+
></span>
|
90
|
+
<span class="visually-hidden"
|
91
|
+
i18n:translate=""
|
92
|
+
>Previous</span>
|
93
|
+
</a>
|
94
|
+
<a class="carousel-control-next"
|
95
|
+
href="#carousel-${view/id}"
|
96
|
+
role="button"
|
97
|
+
data-bs-slide="next"
|
98
|
+
tal:condition="view/data/controls"
|
99
|
+
>
|
100
|
+
<span class="carousel-control-next-icon"
|
101
|
+
aria-hidden="true"
|
102
|
+
></span>
|
103
|
+
<span class="visually-hidden"
|
104
|
+
i18n:translate=""
|
105
|
+
>Next</span>
|
106
|
+
</a>
|
63
107
|
|
64
|
-
|
108
|
+
</div>
|
65
109
|
|
66
|
-
|
67
|
-
</tal:slider>
|
68
|
-
</body>
|
110
|
+
</tal:def>
|
111
|
+
</tal:slider>
|
112
|
+
</body>
|
69
113
|
</html>
|
70
|
-
|
71
|
-
|
@@ -7,10 +7,8 @@ from plone import api
|
|
7
7
|
from plone.app.contenttypes.browser.link_redirect_view import NON_RESOLVABLE_URL_SCHEMES
|
8
8
|
from plone.app.contenttypes.interfaces import ICollection
|
9
9
|
from plone.app.contenttypes.utils import replace_link_variables_by_paths
|
10
|
-
from plone.app.querystring import
|
11
|
-
from plone.app.
|
12
|
-
from plone.app.z3cform.widget import QueryStringFieldWidget
|
13
|
-
from plone.app.z3cform.widget import RelatedItemsFieldWidget
|
10
|
+
from plone.app.z3cform.widgets.querystring import QueryStringFieldWidget
|
11
|
+
from plone.app.z3cform.widgets.relateditems import RelatedItemsFieldWidget
|
14
12
|
from plone.autoform import directives as form
|
15
13
|
from plone.dexterity.interfaces import IDexterityContainer
|
16
14
|
from plone.memoize import view
|
@@ -22,7 +20,6 @@ from z3c.relationfield.schema import RelationChoice
|
|
22
20
|
from z3c.relationfield.schema import RelationList
|
23
21
|
from zope import schema
|
24
22
|
from zope.component import getMultiAdapter
|
25
|
-
from zope.component import getUtilitiesFor
|
26
23
|
from zope.component import getUtility
|
27
24
|
from zope.interface import alsoProvides
|
28
25
|
from zope.interface import implementer
|
@@ -124,7 +121,7 @@ class ISliderTile(Schema):
|
|
124
121
|
default="large",
|
125
122
|
)
|
126
123
|
|
127
|
-
crop = schema.Bool(title=_("Crop Images"), required=False, default=
|
124
|
+
crop = schema.Bool(title=_("Crop Images"), required=False, default=False)
|
128
125
|
|
129
126
|
image_class = schema.TextLine(
|
130
127
|
title=_("Image Class"),
|
@@ -248,37 +245,10 @@ class SliderTile(Tile):
|
|
248
245
|
values.append(name)
|
249
246
|
return values
|
250
247
|
|
251
|
-
def parse_query_from_data(data, context=None):
|
252
|
-
"""Parse query from data dictionary"""
|
253
|
-
if context is None:
|
254
|
-
context = api.portal.get()
|
255
|
-
query = data.get("query", {}) or {}
|
256
|
-
try:
|
257
|
-
parsed = queryparser.parseFormquery(context, query)
|
258
|
-
except KeyError:
|
259
|
-
parsed = {}
|
260
|
-
|
261
|
-
index_modifiers = getUtilitiesFor(IParsedQueryIndexModifier)
|
262
|
-
for name, modifier in index_modifiers:
|
263
|
-
if name in parsed:
|
264
|
-
new_name, query = modifier(parsed[name])
|
265
|
-
parsed[name] = query
|
266
|
-
# if a new index name has been returned, we need to replace
|
267
|
-
# the native ones
|
268
|
-
if name != new_name:
|
269
|
-
del parsed[name]
|
270
|
-
parsed[new_name] = query
|
271
|
-
|
272
|
-
if data.get("sort_on"):
|
273
|
-
parsed["sort_on"] = data["sort_on"]
|
274
|
-
if data.get("sort_reversed", False):
|
275
|
-
parsed["sort_order"] = "reverse"
|
276
|
-
return parsed
|
277
|
-
|
278
248
|
@property
|
279
249
|
def items(self):
|
280
250
|
items = OrderedDict()
|
281
|
-
if "carousel_items"
|
251
|
+
if len(self.data.get("carousel_items") or []):
|
282
252
|
for item in self.data["carousel_items"]:
|
283
253
|
if ICollection.providedBy(item.to_object):
|
284
254
|
items.update(
|
@@ -309,16 +279,19 @@ class SliderTile(Tile):
|
|
309
279
|
else:
|
310
280
|
items[item.to_object] = None
|
311
281
|
|
312
|
-
|
282
|
+
query = self.query
|
283
|
+
if query:
|
313
284
|
items.update(
|
314
|
-
OrderedDict.fromkeys(
|
315
|
-
[x.getObject() for x in api.content.find(**self.query)]
|
316
|
-
)
|
285
|
+
OrderedDict.fromkeys([x.getObject() for x in self.catalog(**query)])
|
317
286
|
)
|
287
|
+
|
318
288
|
result = []
|
319
|
-
|
289
|
+
limit = self.data.get("limit") or 12
|
290
|
+
for count, obj in enumerate(items.keys(), 1):
|
320
291
|
result.append(obj)
|
321
|
-
|
292
|
+
if count >= limit:
|
293
|
+
break
|
294
|
+
ips = self.data.get("items_per_slide", 1) or 1
|
322
295
|
slides = [
|
323
296
|
result[i : i + ips]
|
324
297
|
for i in [x * ips for x in range(0, int(len(result) / ips) + int(1))]
|
@@ -2,10 +2,6 @@
|
|
2
2
|
|
3
3
|
from plone import api
|
4
4
|
from plone.app.querystring import queryparser
|
5
|
-
from plone.app.querystring.interfaces import IParsedQueryIndexModifier
|
6
|
-
from plone.app.uuid.utils import uuidToObject
|
7
|
-
from Products.ZCatalog.interfaces import ICatalogBrain
|
8
|
-
from zope.component import getUtilitiesFor
|
9
5
|
|
10
6
|
|
11
7
|
def parse_query_from_data(data, context=None):
|
@@ -14,48 +10,13 @@ def parse_query_from_data(data, context=None):
|
|
14
10
|
context = api.portal.get()
|
15
11
|
query = data.get("query", {}) or {}
|
16
12
|
try:
|
17
|
-
parsed = queryparser.
|
13
|
+
parsed = queryparser.parseAndModifyFormquery(
|
14
|
+
context,
|
15
|
+
query,
|
16
|
+
data.get("sort_on"),
|
17
|
+
"desc" if data.get("sort_reversed", False) else "asc",
|
18
|
+
)
|
18
19
|
except KeyError:
|
19
20
|
parsed = {}
|
20
21
|
|
21
|
-
index_modifiers = getUtilitiesFor(IParsedQueryIndexModifier)
|
22
|
-
for name, modifier in index_modifiers:
|
23
|
-
if name in parsed:
|
24
|
-
new_name, query = modifier(parsed[name])
|
25
|
-
parsed[name] = query
|
26
|
-
# if a new index name has been returned, we need to replace
|
27
|
-
# the native ones
|
28
|
-
if name != new_name:
|
29
|
-
del parsed[name]
|
30
|
-
parsed[new_name] = query
|
31
|
-
|
32
|
-
if data.get("sort_on"):
|
33
|
-
parsed["sort_on"] = data["sort_on"]
|
34
|
-
if data.get("limit"):
|
35
|
-
parsed["sort_limit"] = data["limit"]
|
36
|
-
if data.get("sort_reversed", False):
|
37
|
-
parsed["sort_order"] = "reverse"
|
38
22
|
return parsed
|
39
|
-
|
40
|
-
|
41
|
-
def get_object(val):
|
42
|
-
"""Return the real object."""
|
43
|
-
if ICatalogBrain.providedBy(val):
|
44
|
-
return val.getObject()
|
45
|
-
|
46
|
-
if not val:
|
47
|
-
return None
|
48
|
-
|
49
|
-
if isinstance(val, basestring):
|
50
|
-
if val[0] == "/":
|
51
|
-
# it's a path
|
52
|
-
site = api.portal.get()
|
53
|
-
return site.restrictedTraverse(val.strip("/"), None)
|
54
|
-
else:
|
55
|
-
# try querying catalog
|
56
|
-
obj = uuidToObject(val)
|
57
|
-
if obj:
|
58
|
-
return obj
|
59
|
-
if isinstance(val, basestring):
|
60
|
-
return None
|
61
|
-
return val
|
@@ -0,0 +1,2 @@
|
|
1
|
+
import sys, types, os;p = os.path.join(sys._getframe(1).f_locals['sitedir'], *('collective',));importlib = __import__('importlib.util');__import__('importlib.machinery');m = sys.modules.setdefault('collective', importlib.util.module_from_spec(importlib.machinery.PathFinder.find_spec('collective', [os.path.dirname(p)])));m = m or sys.modules.setdefault('collective', types.ModuleType('collective'));mp = (m or []) and m.__dict__.setdefault('__path__',[]);(p not in mp) and mp.append(p)
|
2
|
+
import sys, types, os;p = os.path.join(sys._getframe(1).f_locals['sitedir'], *('collective', 'tiles'));importlib = __import__('importlib.util');__import__('importlib.machinery');m = sys.modules.setdefault('collective.tiles', importlib.util.module_from_spec(importlib.machinery.PathFinder.find_spec('collective.tiles', [os.path.dirname(p)])));m = m or sys.modules.setdefault('collective.tiles', types.ModuleType('collective.tiles'));mp = (m or []) and m.__dict__.setdefault('__path__',[]);(p not in mp) and mp.append(p);m and setattr(sys.modules['collective'], 'tiles', m)
|
{collective.tiles.carousel-1.0.2.dist-info → collective.tiles.carousel-1.0.4.dist-info}/METADATA
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: collective.tiles.carousel
|
3
|
-
Version: 1.0.
|
3
|
+
Version: 1.0.4
|
4
4
|
Summary: Slider for plone.app.mosaic based on Bootstrap 5
|
5
5
|
Home-page: https://github.com/collective/collective.tiles.carousel
|
6
6
|
Author: Peter Holzer
|
@@ -19,21 +19,34 @@ Classifier: Programming Language :: Python
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.8
|
20
20
|
Classifier: Programming Language :: Python :: 3.9
|
21
21
|
Classifier: Programming Language :: Python :: 3.10
|
22
|
+
Classifier: Programming Language :: Python :: 3.11
|
22
23
|
Classifier: Operating System :: OS Independent
|
23
24
|
Classifier: License :: OSI Approved :: GNU General Public License v2 (GPLv2)
|
24
|
-
Requires-Python: >=3.
|
25
|
+
Requires-Python: >=3.8
|
25
26
|
License-File: LICENSE.GPL
|
26
27
|
License-File: LICENSE.rst
|
27
28
|
Requires-Dist: setuptools
|
28
|
-
Requires-Dist:
|
29
|
-
Requires-Dist:
|
29
|
+
Requires-Dist: Products.GenericSetup
|
30
|
+
Requires-Dist: plone.app.contenttypes
|
31
|
+
Requires-Dist: plone.app.querystring
|
30
32
|
Requires-Dist: plone.app.mosaic
|
31
33
|
Requires-Dist: plone.app.tiles
|
34
|
+
Requires-Dist: plone.app.z3cform
|
35
|
+
Requires-Dist: plone.autoform
|
36
|
+
Requires-Dist: plone.base
|
37
|
+
Requires-Dist: plone.dexterity
|
38
|
+
Requires-Dist: plone.memoize
|
39
|
+
Requires-Dist: plone.supermodel
|
32
40
|
Requires-Dist: plone.tiles
|
41
|
+
Requires-Dist: plone.api
|
42
|
+
Requires-Dist: z3c.relationfield
|
33
43
|
Provides-Extra: test
|
44
|
+
Requires-Dist: plone.app.dexterity ; extra == 'test'
|
34
45
|
Requires-Dist: plone.app.testing ; extra == 'test'
|
46
|
+
Requires-Dist: plone.browserlayer ; extra == 'test'
|
35
47
|
Requires-Dist: plone.testing ; extra == 'test'
|
36
48
|
Requires-Dist: plone.app.robotframework[debug] ; extra == 'test'
|
49
|
+
Requires-Dist: robotsuite ; extra == 'test'
|
37
50
|
|
38
51
|
.. This README is meant for consumption by humans and pypi. Pypi can render rst files so please do not use Sphinx features.
|
39
52
|
If you want to learn more about writing documentation, please check out: http://docs.plone.org/about/documentation_styleguide.html
|
@@ -95,6 +108,29 @@ Changelog
|
|
95
108
|
=========
|
96
109
|
|
97
110
|
|
111
|
+
1.0.4 (2024-05-02)
|
112
|
+
------------------
|
113
|
+
|
114
|
+
- Fix ``limit``.
|
115
|
+
[petschki]
|
116
|
+
|
117
|
+
- code cleanup.
|
118
|
+
[petschki]
|
119
|
+
|
120
|
+
|
121
|
+
1.0.3 (2023-11-03)
|
122
|
+
------------------
|
123
|
+
|
124
|
+
- Fix carousel speed "0" to stop autoplay.
|
125
|
+
[petschki]
|
126
|
+
|
127
|
+
- Fix image cropping when activated.
|
128
|
+
[petschki]
|
129
|
+
|
130
|
+
- configure with `plone/meta`.
|
131
|
+
[petschki]
|
132
|
+
|
133
|
+
|
98
134
|
1.0.2 (2023-09-21)
|
99
135
|
------------------
|
100
136
|
|
@@ -0,0 +1,39 @@
|
|
1
|
+
collective.tiles.carousel-1.0.4-py3.11-nspkg.pth,sha256=2oWpeYM6MlxuTCe3-blu86w9h991-Etrc9-2Yn3D6ME,1059
|
2
|
+
collective/tiles/carousel/__init__.py,sha256=51V59Yi1aRW6PCzRAoJqUlWno0YQO1wAgi8d37mwTmA,119
|
3
|
+
collective/tiles/carousel/configure.zcml,sha256=1-9Nc4-Lej7b7HJb9Puc8Jw_rDRVyS6agix2SR98wrs,1783
|
4
|
+
collective/tiles/carousel/interfaces.py,sha256=erGd_4DSscSVyQCdzdWNABmPxuUBV1vwKvz6_m5BCc4,249
|
5
|
+
collective/tiles/carousel/setuphandlers.py,sha256=0y1cT8R_eYSdIv-aZUY-pazUGia27EFzCCHC-SiGMrI,586
|
6
|
+
collective/tiles/carousel/testing.py,sha256=WxBe18FLBdf-9nQmw_0rL_Gf1Eu0aLnUDD0RUxJ2VE0,1685
|
7
|
+
collective/tiles/carousel/tile.pt,sha256=ePFsqwYEMYpng21_l8Hp8Ok9-f_KfUKICaq-oJ3n3yc,4737
|
8
|
+
collective/tiles/carousel/tile.py,sha256=lkl_R91n7h6Oh3X-2QWn-m7YfqnFioCS2WhhcGciyjQ,12230
|
9
|
+
collective/tiles/carousel/utils.py,sha256=M0fOW-m5fhe63I4PtO8jCqnbooZ9ZXctj5in_Ru8j-o,550
|
10
|
+
collective/tiles/carousel/locales/README.rst,sha256=fS2h1MYp7b5Im-GcnIsZLHhK1N4F-_VuHBf_DorI2_A,611
|
11
|
+
collective/tiles/carousel/locales/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
12
|
+
collective/tiles/carousel/locales/collective.tiles.carousel.pot,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
13
|
+
collective/tiles/carousel/locales/update.py,sha256=jynjlAH6iDEu_33RfLPZahmfdX9nhVeD3jWIIw75vKY,1726
|
14
|
+
collective/tiles/carousel/locales/update.sh,sha256=ZGzBK0W3foiqphsq8fHnnCpfsVqkQmNVn8GhsT7sYDk,512
|
15
|
+
collective/tiles/carousel/locales/en/LC_MESSAGES/collective.tiles.carousel.mo,sha256=L2onKtwQZTXkBHC9_jRNfURepKFpwGdaacsyQ8btxUE,28
|
16
|
+
collective/tiles/carousel/locales/en/LC_MESSAGES/collective.tiles.carousel.po,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
17
|
+
collective/tiles/carousel/profiles/default/browserlayer.xml,sha256=vkPzWloz-1LXkyzzkxPZedUgdQ-wHH1vxWiWq7hy0ZY,193
|
18
|
+
collective/tiles/carousel/profiles/default/metadata.xml,sha256=cv6bIma1N737aldp-0Ut7FA8HsCv2FNLGqHfaqzeA3c,185
|
19
|
+
collective/tiles/carousel/profiles/default/registry/mosaic.xml,sha256=q3ndRBIbEugTINcceEW7ASIvlBTwp5d4PEfgRpVzsCw,2282
|
20
|
+
collective/tiles/carousel/profiles/uninstall/browserlayer.xml,sha256=xuau8KvRlNGSdVhzWfSqrD4A8hAjj3dFc4LL3WFkCFM,128
|
21
|
+
collective/tiles/carousel/slides/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
22
|
+
collective/tiles/carousel/slides/configure.zcml,sha256=oxth69DrGZtML8M4lWKGJk1Eiw2LgcWfgjZIzCcIJ0I,871
|
23
|
+
collective/tiles/carousel/slides/slide_full_view.pt,sha256=Ad-h042ygx7hyKdH5wa8B0o7FYTwWDXLma7pnMRXyak,91
|
24
|
+
collective/tiles/carousel/slides/slide_full_view.py,sha256=CaE5oyu6UzxzDTSOwVPa5cerKKDuncLdTUdNKfq-lWA,230
|
25
|
+
collective/tiles/carousel/slides/slide_view.pt,sha256=DKpaD-EBizwgnrm5ARBPbUU9swEjWMvS87TSGh2xDig,540
|
26
|
+
collective/tiles/carousel/slides/slide_view.py,sha256=CiDVVWD_Vcm1JDjruPoR5wJ83ghRRPyuitZCKX_zStM,3132
|
27
|
+
collective/tiles/carousel/slides/static/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
28
|
+
collective/tiles/carousel/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
29
|
+
collective/tiles/carousel/tests/test_robot.py,sha256=VPu3DguHGk-5srPM-N9BZj4dALjotYup8RWZ-QRdbpQ,947
|
30
|
+
collective/tiles/carousel/tests/test_setup.py,sha256=4FnSh4YBgEbcKTEw-feXs61FYm137R198GQUz4bXFBE,2221
|
31
|
+
collective/tiles/carousel/tests/robot/test_example.robot,sha256=RjktU-NOhxH3xDxc_Tn91wLAVcuQQ2aNnMEV5oHOKFw,2032
|
32
|
+
collective.tiles.carousel-1.0.4.dist-info/LICENSE.GPL,sha256=gXf5dRMhNSbfLPYYTY_5hsZ1r7UU1OaKQEAQUhuIBkM,18092
|
33
|
+
collective.tiles.carousel-1.0.4.dist-info/LICENSE.rst,sha256=iDVL_6C7byshRvxykg-JJfnJl1UQCvKDV_H-1dp_8GU,668
|
34
|
+
collective.tiles.carousel-1.0.4.dist-info/METADATA,sha256=58tQmNcfVHw1njopS1Y5WhOUJ6oq3C_DsoFBP3ipm90,4028
|
35
|
+
collective.tiles.carousel-1.0.4.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
36
|
+
collective.tiles.carousel-1.0.4.dist-info/entry_points.txt,sha256=ru0hdDg0GqdaMNDkHf3l7rtXvCkgCOmh7S-EiRWIpUk,130
|
37
|
+
collective.tiles.carousel-1.0.4.dist-info/namespace_packages.txt,sha256=AiVC9ju6UYs_UE8dvyfAvQmRsFgWG25eyAfTG-nLAjM,28
|
38
|
+
collective.tiles.carousel-1.0.4.dist-info/top_level.txt,sha256=FyC0xnd95fkjCaKazR3nfIgNqhWMpB0mYBlzALyXKTg,11
|
39
|
+
collective.tiles.carousel-1.0.4.dist-info/RECORD,,
|
@@ -1,3 +0,0 @@
|
|
1
|
-
import sys, types, os;has_mfs = sys.version_info > (3, 5);p = os.path.join(sys._getframe(1).f_locals['sitedir'], *('collective',));importlib = has_mfs and __import__('importlib.util');has_mfs and __import__('importlib.machinery');m = has_mfs and sys.modules.setdefault('collective', importlib.util.module_from_spec(importlib.machinery.PathFinder.find_spec('collective', [os.path.dirname(p)])));m = m or sys.modules.setdefault('collective', types.ModuleType('collective'));mp = (m or []) and m.__dict__.setdefault('__path__',[]);(p not in mp) and mp.append(p)
|
2
|
-
import sys, types, os;has_mfs = sys.version_info > (3, 5);p = os.path.join(sys._getframe(1).f_locals['sitedir'], *('collective',));importlib = has_mfs and __import__('importlib.util');has_mfs and __import__('importlib.machinery');m = has_mfs and sys.modules.setdefault('collective', importlib.util.module_from_spec(importlib.machinery.PathFinder.find_spec('collective', [os.path.dirname(p)])));m = m or sys.modules.setdefault('collective', types.ModuleType('collective'));mp = (m or []) and m.__dict__.setdefault('__path__',[]);(p not in mp) and mp.append(p)
|
3
|
-
import sys, types, os;has_mfs = sys.version_info > (3, 5);p = os.path.join(sys._getframe(1).f_locals['sitedir'], *('collective', 'tiles'));importlib = has_mfs and __import__('importlib.util');has_mfs and __import__('importlib.machinery');m = has_mfs and sys.modules.setdefault('collective.tiles', importlib.util.module_from_spec(importlib.machinery.PathFinder.find_spec('collective.tiles', [os.path.dirname(p)])));m = m or sys.modules.setdefault('collective.tiles', types.ModuleType('collective.tiles'));mp = (m or []) and m.__dict__.setdefault('__path__',[]);(p not in mp) and mp.append(p);m and setattr(sys.modules['collective'], 'tiles', m)
|
@@ -1,38 +0,0 @@
|
|
1
|
-
collective.tiles.carousel-1.0.2-py3.11-nspkg.pth,sha256=Vq44M1ox8wdw3b0VK_LUaGmCPYCr7x699rOAClrxCbs,1762
|
2
|
-
collective/tiles/carousel/__init__.py,sha256=J9-8Hj1ymQi5g5IecTHwgRxzlYuFyIDJDVDoNs3IWjQ,118
|
3
|
-
collective/tiles/carousel/configure.zcml,sha256=Xf51g0Waj8P9EbJzS6PWlXGc00X9huuBYV97z3_ey68,1782
|
4
|
-
collective/tiles/carousel/interfaces.py,sha256=erGd_4DSscSVyQCdzdWNABmPxuUBV1vwKvz6_m5BCc4,249
|
5
|
-
collective/tiles/carousel/setuphandlers.py,sha256=xS14jPrTbbqKOvYpxRR77uIM0hbY6H3RgzLovbjGy38,593
|
6
|
-
collective/tiles/carousel/testing.py,sha256=A7AkCV9Z3Z5EQ40Bbrk1KSagdDuQjYPDcFZSo3siDnI,1686
|
7
|
-
collective/tiles/carousel/tile.pt,sha256=tRjItcqSfT7MqIh5JM0aW_eVV_orYHHAzf67KqJhzkk,3560
|
8
|
-
collective/tiles/carousel/tile.py,sha256=NEA_4iXQzWeKc3wV0RyyK9PXh40dtihjCga4Ret2LZU,13267
|
9
|
-
collective/tiles/carousel/utils.py,sha256=ApwPwtC3Ww9Stm-zncHYkfpOvk4x7ism2Fl8wE54kdg,1833
|
10
|
-
collective/tiles/carousel/locales/README.rst,sha256=fS2h1MYp7b5Im-GcnIsZLHhK1N4F-_VuHBf_DorI2_A,611
|
11
|
-
collective/tiles/carousel/locales/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
12
|
-
collective/tiles/carousel/locales/collective.tiles.carousel.pot,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
13
|
-
collective/tiles/carousel/locales/update.py,sha256=jynjlAH6iDEu_33RfLPZahmfdX9nhVeD3jWIIw75vKY,1726
|
14
|
-
collective/tiles/carousel/locales/update.sh,sha256=ZGzBK0W3foiqphsq8fHnnCpfsVqkQmNVn8GhsT7sYDk,512
|
15
|
-
collective/tiles/carousel/locales/en/LC_MESSAGES/collective.tiles.carousel.po,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
16
|
-
collective/tiles/carousel/profiles/default/browserlayer.xml,sha256=C1ZbYm9g7o6ar5eLz0lVEFTCtzQBo7pbsKOY3jzt4pU,200
|
17
|
-
collective/tiles/carousel/profiles/default/metadata.xml,sha256=27DT54kAJb0JP4GtC3n5gtg89-Q_RSzu0_pmQYZpias,185
|
18
|
-
collective/tiles/carousel/profiles/default/registry/mosaic.xml,sha256=GFD7PTXzyTRiZrb7CYWQF6ZkssLfOj3_rdFAZYqkLZg,2272
|
19
|
-
collective/tiles/carousel/profiles/uninstall/browserlayer.xml,sha256=vBmB9Ia9G1qMplDWGufmhuE_UwW0P5jJrt-rVB7MJEU,135
|
20
|
-
collective/tiles/carousel/slides/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
21
|
-
collective/tiles/carousel/slides/configure.zcml,sha256=muwpjbEZAUbGzliFY1X9kMlCalngcjweWBKEcNszCxs,866
|
22
|
-
collective/tiles/carousel/slides/slide_full_view.pt,sha256=Ad-h042ygx7hyKdH5wa8B0o7FYTwWDXLma7pnMRXyak,91
|
23
|
-
collective/tiles/carousel/slides/slide_full_view.py,sha256=XhEDm8tUJO3yvaWNF_7BK4VbBevM6kM2OrNw7wCvyDk,359
|
24
|
-
collective/tiles/carousel/slides/slide_view.pt,sha256=62KqoYY6QxngUXYwHlGHHBMlp71kc9BIsi5DhioY3oI,526
|
25
|
-
collective/tiles/carousel/slides/slide_view.py,sha256=-pswsPb98dfnx-JekpPaQNwyvd1ng9xIaT1cZ9dToBc,3168
|
26
|
-
collective/tiles/carousel/slides/static/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
27
|
-
collective/tiles/carousel/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
28
|
-
collective/tiles/carousel/tests/test_robot.py,sha256=VPu3DguHGk-5srPM-N9BZj4dALjotYup8RWZ-QRdbpQ,947
|
29
|
-
collective/tiles/carousel/tests/test_setup.py,sha256=EySGVe2gxRJHO34oAWyscBd8ZrdFv8cbtxpqyzGoOek,2228
|
30
|
-
collective/tiles/carousel/tests/robot/test_example.robot,sha256=RjktU-NOhxH3xDxc_Tn91wLAVcuQQ2aNnMEV5oHOKFw,2032
|
31
|
-
collective.tiles.carousel-1.0.2.dist-info/LICENSE.GPL,sha256=gXf5dRMhNSbfLPYYTY_5hsZ1r7UU1OaKQEAQUhuIBkM,18092
|
32
|
-
collective.tiles.carousel-1.0.2.dist-info/LICENSE.rst,sha256=iDVL_6C7byshRvxykg-JJfnJl1UQCvKDV_H-1dp_8GU,668
|
33
|
-
collective.tiles.carousel-1.0.2.dist-info/METADATA,sha256=2NSf7MMOSyi5JIlWJu7udUpfsm4rAZPf-VsyYOPTyV4,3240
|
34
|
-
collective.tiles.carousel-1.0.2.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
|
35
|
-
collective.tiles.carousel-1.0.2.dist-info/entry_points.txt,sha256=ru0hdDg0GqdaMNDkHf3l7rtXvCkgCOmh7S-EiRWIpUk,130
|
36
|
-
collective.tiles.carousel-1.0.2.dist-info/namespace_packages.txt,sha256=AiVC9ju6UYs_UE8dvyfAvQmRsFgWG25eyAfTG-nLAjM,28
|
37
|
-
collective.tiles.carousel-1.0.2.dist-info/top_level.txt,sha256=FyC0xnd95fkjCaKazR3nfIgNqhWMpB0mYBlzALyXKTg,11
|
38
|
-
collective.tiles.carousel-1.0.2.dist-info/RECORD,,
|
{collective.tiles.carousel-1.0.2.dist-info → collective.tiles.carousel-1.0.4.dist-info}/LICENSE.GPL
RENAMED
File without changes
|
{collective.tiles.carousel-1.0.2.dist-info → collective.tiles.carousel-1.0.4.dist-info}/LICENSE.rst
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|