collective.tiles.carousel 1.0.3__tar.gz → 1.1.0__tar.gz

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.
Files changed (54) hide show
  1. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/CHANGES.rst +17 -0
  2. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/PKG-INFO +40 -2
  3. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/setup.py +1 -1
  4. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective/tiles/carousel/__init__.py +1 -0
  5. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective/tiles/carousel/tests/robot/test_example.robot +9 -11
  6. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective/tiles/carousel/tests/test_setup.py +1 -0
  7. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective/tiles/carousel/tile.py +22 -39
  8. collective_tiles_carousel-1.1.0/src/collective/tiles/carousel/utils.py +22 -0
  9. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective.tiles.carousel.egg-info/PKG-INFO +40 -2
  10. collective.tiles.carousel-1.0.3/src/collective/tiles/carousel/utils.py +0 -36
  11. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/CONTRIBUTORS.rst +0 -0
  12. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/DEVELOP.rst +0 -0
  13. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/LICENSE.GPL +0 -0
  14. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/LICENSE.rst +0 -0
  15. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/README.rst +0 -0
  16. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/constraints.txt +0 -0
  17. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/docs/conf.py +0 -0
  18. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/docs/index.rst +0 -0
  19. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/requirements.txt +0 -0
  20. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/setup.cfg +0 -0
  21. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective/__init__.py +0 -0
  22. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective/tiles/__init__.py +0 -0
  23. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective/tiles/carousel/configure.zcml +0 -0
  24. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective/tiles/carousel/interfaces.py +0 -0
  25. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective/tiles/carousel/locales/README.rst +0 -0
  26. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective/tiles/carousel/locales/__init__.py +0 -0
  27. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective/tiles/carousel/locales/collective.tiles.carousel.pot +0 -0
  28. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective/tiles/carousel/locales/en/LC_MESSAGES/collective.tiles.carousel.mo +0 -0
  29. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective/tiles/carousel/locales/en/LC_MESSAGES/collective.tiles.carousel.po +0 -0
  30. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective/tiles/carousel/locales/update.py +0 -0
  31. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective/tiles/carousel/locales/update.sh +0 -0
  32. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective/tiles/carousel/profiles/default/browserlayer.xml +0 -0
  33. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective/tiles/carousel/profiles/default/metadata.xml +0 -0
  34. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective/tiles/carousel/profiles/default/registry/mosaic.xml +0 -0
  35. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective/tiles/carousel/profiles/uninstall/browserlayer.xml +0 -0
  36. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective/tiles/carousel/setuphandlers.py +0 -0
  37. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective/tiles/carousel/slides/__init__.py +0 -0
  38. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective/tiles/carousel/slides/configure.zcml +0 -0
  39. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective/tiles/carousel/slides/slide_full_view.pt +0 -0
  40. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective/tiles/carousel/slides/slide_full_view.py +0 -0
  41. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective/tiles/carousel/slides/slide_view.pt +0 -0
  42. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective/tiles/carousel/slides/slide_view.py +0 -0
  43. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective/tiles/carousel/slides/static/.gitkeep +0 -0
  44. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective/tiles/carousel/testing.py +0 -0
  45. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective/tiles/carousel/tests/__init__.py +0 -0
  46. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective/tiles/carousel/tests/test_robot.py +0 -0
  47. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective/tiles/carousel/tile.pt +0 -0
  48. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective.tiles.carousel.egg-info/SOURCES.txt +0 -0
  49. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective.tiles.carousel.egg-info/dependency_links.txt +0 -0
  50. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective.tiles.carousel.egg-info/entry_points.txt +0 -0
  51. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective.tiles.carousel.egg-info/namespace_packages.txt +0 -0
  52. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective.tiles.carousel.egg-info/not-zip-safe +0 -0
  53. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective.tiles.carousel.egg-info/requires.txt +0 -0
  54. {collective.tiles.carousel-1.0.3 → collective_tiles_carousel-1.1.0}/src/collective.tiles.carousel.egg-info/top_level.txt +0 -0
@@ -2,6 +2,23 @@ Changelog
2
2
  =========
3
3
 
4
4
 
5
+ 1.1.0 (2024-12-12)
6
+ ------------------
7
+
8
+ - Use new `ContentBrowserWidget` for Plone 6.1.
9
+ [petschki]
10
+
11
+
12
+ 1.0.4 (2024-05-02)
13
+ ------------------
14
+
15
+ - Fix ``limit``.
16
+ [petschki]
17
+
18
+ - code cleanup.
19
+ [petschki]
20
+
21
+
5
22
  1.0.3 (2023-11-03)
6
23
  ------------------
7
24
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: collective.tiles.carousel
3
- Version: 1.0.3
3
+ Version: 1.1.0
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
@@ -23,9 +23,30 @@ Classifier: Programming Language :: Python :: 3.11
23
23
  Classifier: Operating System :: OS Independent
24
24
  Classifier: License :: OSI Approved :: GNU General Public License v2 (GPLv2)
25
25
  Requires-Python: >=3.8
26
- Provides-Extra: test
27
26
  License-File: LICENSE.GPL
28
27
  License-File: LICENSE.rst
28
+ Requires-Dist: setuptools
29
+ Requires-Dist: Products.GenericSetup
30
+ Requires-Dist: plone.app.contenttypes
31
+ Requires-Dist: plone.app.querystring
32
+ Requires-Dist: plone.app.mosaic
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
40
+ Requires-Dist: plone.tiles
41
+ Requires-Dist: plone.api
42
+ Requires-Dist: z3c.relationfield
43
+ Provides-Extra: test
44
+ Requires-Dist: plone.app.dexterity; extra == "test"
45
+ Requires-Dist: plone.app.testing; extra == "test"
46
+ Requires-Dist: plone.browserlayer; extra == "test"
47
+ Requires-Dist: plone.testing; extra == "test"
48
+ Requires-Dist: plone.app.robotframework[debug]; extra == "test"
49
+ Requires-Dist: robotsuite; extra == "test"
29
50
 
30
51
  .. This README is meant for consumption by humans and pypi. Pypi can render rst files so please do not use Sphinx features.
31
52
  If you want to learn more about writing documentation, please check out: http://docs.plone.org/about/documentation_styleguide.html
@@ -87,6 +108,23 @@ Changelog
87
108
  =========
88
109
 
89
110
 
111
+ 1.1.0 (2024-12-12)
112
+ ------------------
113
+
114
+ - Use new `ContentBrowserWidget` for Plone 6.1.
115
+ [petschki]
116
+
117
+
118
+ 1.0.4 (2024-05-02)
119
+ ------------------
120
+
121
+ - Fix ``limit``.
122
+ [petschki]
123
+
124
+ - code cleanup.
125
+ [petschki]
126
+
127
+
90
128
  1.0.3 (2023-11-03)
91
129
  ------------------
92
130
 
@@ -15,7 +15,7 @@ long_description = "\n\n".join(
15
15
 
16
16
  setup(
17
17
  name="collective.tiles.carousel",
18
- version="1.0.3",
18
+ version="1.1.0",
19
19
  description="Slider for plone.app.mosaic based on Bootstrap 5",
20
20
  long_description=long_description,
21
21
  # Get more from https://pypi.org/classifiers/
@@ -1,4 +1,5 @@
1
1
  """Init and utils."""
2
+
2
3
  from zope.i18nmessageid import MessageFactory
3
4
 
4
5
 
@@ -23,13 +23,12 @@
23
23
 
24
24
  *** Settings *****************************************************************
25
25
 
26
- Resource plone/app/robotframework/selenium.robot
27
- Resource plone/app/robotframework/keywords.robot
26
+ Resource plone/app/robotframework/browser.robot
28
27
 
29
28
  Library Remote ${PLONE_URL}/RobotRemote
30
29
 
31
- Test Setup Open test browser
32
- Test Teardown Close all browsers
30
+ Test Setup Run keywords Plone Test Setup
31
+ Test Teardown Run keywords Plone Test Teardown
33
32
 
34
33
 
35
34
  *** Test Cases ***************************************************************
@@ -47,20 +46,19 @@ Scenario: As a member I want to be able to log into the website
47
46
 
48
47
  a login form
49
48
  Go To ${PLONE_URL}/login_form
50
- Wait until page contains Login Name
51
- Wait until page contains Password
49
+ Get Text //body contains Login Name
50
+ Get Text //body contains Password
52
51
 
53
52
 
54
53
  # --- WHEN -------------------------------------------------------------------
55
54
 
56
55
  I enter valid credentials
57
- Input Text __ac_name admin
58
- Input Text __ac_password secret
59
- Click Button Log in
56
+ Type Text //input[@name="__ac_name"] admin
57
+ Type Text //input[@name="__ac_password"] secret
58
+ Click //button[contains(text(), "Log in")]
60
59
 
61
60
 
62
61
  # --- THEN -------------------------------------------------------------------
63
62
 
64
63
  I am logged in
65
- Wait until page contains You are now logged in
66
- Page should contain You are now logged in
64
+ Get Text //body contains You are now logged in
@@ -1,4 +1,5 @@
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
  )
@@ -7,10 +7,7 @@ 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 queryparser
11
- from plone.app.querystring.interfaces import IParsedQueryIndexModifier
12
10
  from plone.app.z3cform.widgets.querystring import QueryStringFieldWidget
13
- from plone.app.z3cform.widgets.relateditems import RelatedItemsFieldWidget
14
11
  from plone.autoform import directives as form
15
12
  from plone.dexterity.interfaces import IDexterityContainer
16
13
  from plone.memoize import view
@@ -22,7 +19,6 @@ from z3c.relationfield.schema import RelationChoice
22
19
  from z3c.relationfield.schema import RelationList
23
20
  from zope import schema
24
21
  from zope.component import getMultiAdapter
25
- from zope.component import getUtilitiesFor
26
22
  from zope.component import getUtility
27
23
  from zope.interface import alsoProvides
28
24
  from zope.interface import implementer
@@ -33,6 +29,16 @@ from zope.schema.vocabulary import SimpleTerm
33
29
  from zope.schema.vocabulary import SimpleVocabulary
34
30
 
35
31
 
32
+ try:
33
+ from plone.app.z3cform.widgets.contentbrowser import (
34
+ ContentBrowserFieldWidget as CarouselItemsWidget,
35
+ )
36
+ except ImportError:
37
+ from plone.app.z3cform.widgets.relateditems import (
38
+ RelatedItemsFieldWidget as CarouselItemsWidget,
39
+ )
40
+
41
+
36
42
  @provider(IContextSourceBinder)
37
43
  def image_scales(context):
38
44
  """Return custom source for image scales.
@@ -77,11 +83,12 @@ class ISliderTile(Schema):
77
83
 
78
84
  form.widget(
79
85
  "carousel_items",
80
- RelatedItemsFieldWidget,
86
+ CarouselItemsWidget,
81
87
  vocabulary="plone.app.vocabularies.Catalog",
82
88
  pattern_options={
83
89
  "orderable": True,
84
90
  "recentlyUsed": True,
91
+ "upload": True,
85
92
  },
86
93
  )
87
94
 
@@ -248,37 +255,10 @@ class SliderTile(Tile):
248
255
  values.append(name)
249
256
  return values
250
257
 
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
258
  @property
279
259
  def items(self):
280
260
  items = OrderedDict()
281
- if "carousel_items" in self.data:
261
+ if len(self.data.get("carousel_items") or []):
282
262
  for item in self.data["carousel_items"]:
283
263
  if ICollection.providedBy(item.to_object):
284
264
  items.update(
@@ -309,16 +289,19 @@ class SliderTile(Tile):
309
289
  else:
310
290
  items[item.to_object] = None
311
291
 
312
- if getattr(self, "query", None):
292
+ query = self.query
293
+ if query:
313
294
  items.update(
314
- OrderedDict.fromkeys(
315
- [x.getObject() for x in api.content.find(**self.query)]
316
- )
295
+ OrderedDict.fromkeys([x.getObject() for x in self.catalog(**query)])
317
296
  )
297
+
318
298
  result = []
319
- for obj in items.keys():
299
+ limit = self.data.get("limit") or 12
300
+ for count, obj in enumerate(items.keys(), 1):
320
301
  result.append(obj)
321
- ips = self.data.get("items_per_slide", 1)
302
+ if count >= limit:
303
+ break
304
+ ips = self.data.get("items_per_slide", 1) or 1
322
305
  slides = [
323
306
  result[i : i + ips]
324
307
  for i in [x * ips for x in range(0, int(len(result) / ips) + int(1))]
@@ -0,0 +1,22 @@
1
+ """Utilities."""
2
+
3
+ from plone import api
4
+ from plone.app.querystring import queryparser
5
+
6
+
7
+ def parse_query_from_data(data, context=None):
8
+ """Parse query from data dictionary"""
9
+ if context is None:
10
+ context = api.portal.get()
11
+ query = data.get("query", {}) or {}
12
+ try:
13
+ parsed = queryparser.parseAndModifyFormquery(
14
+ context,
15
+ query,
16
+ data.get("sort_on"),
17
+ "desc" if data.get("sort_reversed", False) else "asc",
18
+ )
19
+ except KeyError:
20
+ parsed = {}
21
+
22
+ return parsed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: collective.tiles.carousel
3
- Version: 1.0.3
3
+ Version: 1.1.0
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
@@ -23,9 +23,30 @@ Classifier: Programming Language :: Python :: 3.11
23
23
  Classifier: Operating System :: OS Independent
24
24
  Classifier: License :: OSI Approved :: GNU General Public License v2 (GPLv2)
25
25
  Requires-Python: >=3.8
26
- Provides-Extra: test
27
26
  License-File: LICENSE.GPL
28
27
  License-File: LICENSE.rst
28
+ Requires-Dist: setuptools
29
+ Requires-Dist: Products.GenericSetup
30
+ Requires-Dist: plone.app.contenttypes
31
+ Requires-Dist: plone.app.querystring
32
+ Requires-Dist: plone.app.mosaic
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
40
+ Requires-Dist: plone.tiles
41
+ Requires-Dist: plone.api
42
+ Requires-Dist: z3c.relationfield
43
+ Provides-Extra: test
44
+ Requires-Dist: plone.app.dexterity; extra == "test"
45
+ Requires-Dist: plone.app.testing; extra == "test"
46
+ Requires-Dist: plone.browserlayer; extra == "test"
47
+ Requires-Dist: plone.testing; extra == "test"
48
+ Requires-Dist: plone.app.robotframework[debug]; extra == "test"
49
+ Requires-Dist: robotsuite; extra == "test"
29
50
 
30
51
  .. This README is meant for consumption by humans and pypi. Pypi can render rst files so please do not use Sphinx features.
31
52
  If you want to learn more about writing documentation, please check out: http://docs.plone.org/about/documentation_styleguide.html
@@ -87,6 +108,23 @@ Changelog
87
108
  =========
88
109
 
89
110
 
111
+ 1.1.0 (2024-12-12)
112
+ ------------------
113
+
114
+ - Use new `ContentBrowserWidget` for Plone 6.1.
115
+ [petschki]
116
+
117
+
118
+ 1.0.4 (2024-05-02)
119
+ ------------------
120
+
121
+ - Fix ``limit``.
122
+ [petschki]
123
+
124
+ - code cleanup.
125
+ [petschki]
126
+
127
+
90
128
  1.0.3 (2023-11-03)
91
129
  ------------------
92
130
 
@@ -1,36 +0,0 @@
1
- """Utilities."""
2
-
3
- from plone import api
4
- from plone.app.querystring import queryparser
5
- from plone.app.querystring.interfaces import IParsedQueryIndexModifier
6
- from zope.component import getUtilitiesFor
7
-
8
-
9
- def parse_query_from_data(data, context=None):
10
- """Parse query from data dictionary"""
11
- if context is None:
12
- context = api.portal.get()
13
- query = data.get("query", {}) or {}
14
- try:
15
- parsed = queryparser.parseFormquery(context, query)
16
- except KeyError:
17
- parsed = {}
18
-
19
- index_modifiers = getUtilitiesFor(IParsedQueryIndexModifier)
20
- for name, modifier in index_modifiers:
21
- if name in parsed:
22
- new_name, query = modifier(parsed[name])
23
- parsed[name] = query
24
- # if a new index name has been returned, we need to replace
25
- # the native ones
26
- if name != new_name:
27
- del parsed[name]
28
- parsed[new_name] = query
29
-
30
- if data.get("sort_on"):
31
- parsed["sort_on"] = data["sort_on"]
32
- if data.get("limit"):
33
- parsed["sort_limit"] = data["limit"]
34
- if data.get("sort_reversed", False):
35
- parsed["sort_order"] = "reverse"
36
- return parsed