collective.contentsections 2.0.0a1__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.
Files changed (227) hide show
  1. collective/contentsections/__init__.py +3 -0
  2. collective/contentsections/behaviors/__init__.py +0 -0
  3. collective/contentsections/behaviors/configure.zcml +28 -0
  4. collective/contentsections/behaviors/leadicon.py +39 -0
  5. collective/contentsections/behaviors/namechooser.py +24 -0
  6. collective/contentsections/configure.zcml +50 -0
  7. collective/contentsections/contents/__init__.py +4 -0
  8. collective/contentsections/contents/base.py +15 -0
  9. collective/contentsections/contents/configure.zcml +20 -0
  10. collective/contentsections/contents/contact/__init__.py +0 -0
  11. collective/contentsections/contents/contact/configure.zcml +6 -0
  12. collective/contentsections/contents/contact/content.py +37 -0
  13. collective/contentsections/contents/file/__init__.py +0 -0
  14. collective/contentsections/contents/file/configure.zcml +10 -0
  15. collective/contentsections/contents/image/__init__.py +0 -0
  16. collective/contentsections/contents/image/configure.zcml +10 -0
  17. collective/contentsections/contents/link/__init__.py +0 -0
  18. collective/contentsections/contents/link/configure.zcml +18 -0
  19. collective/contentsections/contents/link/views.py +13 -0
  20. collective/contentsections/contents/location/__init__.py +0 -0
  21. collective/contentsections/contents/location/configure.zcml +5 -0
  22. collective/contentsections/contents/location/content.py +16 -0
  23. collective/contentsections/distributions/sections/content/content/081544c4943647f9b15b9e0905a9b54d/data.json +52 -0
  24. collective/contentsections/distributions/sections/content/content/0e43326bb88948c0b041a8133ce1e1fe/data.json +78 -0
  25. collective/contentsections/distributions/sections/content/content/1da584ffcfd94a218ac3af5e1cdbbd85/data.json +36 -0
  26. collective/contentsections/distributions/sections/content/content/1ff04c0fca9e4cabb8b6c7a9b2b7f252/data.json +40 -0
  27. collective/contentsections/distributions/sections/content/content/2d71207814b246e4bfe510325bb82c5e/data.json +34 -0
  28. collective/contentsections/distributions/sections/content/content/2ef081a74f5a43da800883a91ec31e62/data.json +34 -0
  29. collective/contentsections/distributions/sections/content/content/2fb127ce7e3341679227a5bfdec44da8/data.json +31 -0
  30. collective/contentsections/distributions/sections/content/content/2fb127ce7e3341679227a5bfdec44da8/image/chat06.jpg +0 -0
  31. collective/contentsections/distributions/sections/content/content/2ffc17e71d6d4fccab6654fed823b90f/data.json +59 -0
  32. collective/contentsections/distributions/sections/content/content/2ffc17e71d6d4fccab6654fed823b90f/image/bird-04.jpg +0 -0
  33. collective/contentsections/distributions/sections/content/content/414088951961409f977aacca52e3e1c4/data.json +31 -0
  34. collective/contentsections/distributions/sections/content/content/414088951961409f977aacca52e3e1c4/image/IMG_4029.jpeg +0 -0
  35. collective/contentsections/distributions/sections/content/content/4544ab042b0f48c3827850a56019fdd4/data.json +30 -0
  36. collective/contentsections/distributions/sections/content/content/4ad98cc73b134b65aa4601bd49f750e2/data.json +63 -0
  37. collective/contentsections/distributions/sections/content/content/52fb9fcd48e44094982623c9d45f0156/data.json +31 -0
  38. collective/contentsections/distributions/sections/content/content/52fb9fcd48e44094982623c9d45f0156/image/IMG_7519.jpeg +0 -0
  39. collective/contentsections/distributions/sections/content/content/5411cfb98ce44a63a96824206cafc64b/data.json +31 -0
  40. collective/contentsections/distributions/sections/content/content/5411cfb98ce44a63a96824206cafc64b/image/IMG_6149.jpeg +0 -0
  41. collective/contentsections/distributions/sections/content/content/54cea76dbba04ddd83a18a49a72c84a4/data.json +34 -0
  42. collective/contentsections/distributions/sections/content/content/54cea76dbba04ddd83a18a49a72c84a4/image/liege.png +0 -0
  43. collective/contentsections/distributions/sections/content/content/5dc720dc13cb419796cbbf731db87e90/data.json +36 -0
  44. collective/contentsections/distributions/sections/content/content/61053f0fc45e4dafb244f8141bf71412/data.json +31 -0
  45. collective/contentsections/distributions/sections/content/content/61053f0fc45e4dafb244f8141bf71412/image/chat02.jpg +0 -0
  46. collective/contentsections/distributions/sections/content/content/6182c269182a489a957c1883dbd8e076/data.json +31 -0
  47. collective/contentsections/distributions/sections/content/content/6182c269182a489a957c1883dbd8e076/image/IMG_7029.jpeg +0 -0
  48. collective/contentsections/distributions/sections/content/content/6e83f10f800c48dda6a69102be3c1301/data.json +52 -0
  49. collective/contentsections/distributions/sections/content/content/75034097716c42c2b84f75ca89dc8eb1/data.json +59 -0
  50. collective/contentsections/distributions/sections/content/content/75034097716c42c2b84f75ca89dc8eb1/image/bird-02.jpg +0 -0
  51. collective/contentsections/distributions/sections/content/content/75e32b022a3047b6ac79c71fa08ac748/background_image/chat07.jpg +0 -0
  52. collective/contentsections/distributions/sections/content/content/75e32b022a3047b6ac79c71fa08ac748/data.json +49 -0
  53. collective/contentsections/distributions/sections/content/content/7855da7062804ad2ab203a06b0ef0c86/data.json +47 -0
  54. collective/contentsections/distributions/sections/content/content/7855da7062804ad2ab203a06b0ef0c86/image/chat02.jpg +0 -0
  55. collective/contentsections/distributions/sections/content/content/79ee6ccb92b44af9bf6c897c709ef7fc/data.json +64 -0
  56. collective/contentsections/distributions/sections/content/content/7b6b83c86dc54f53806494df5dbcbbec/data.json +31 -0
  57. collective/contentsections/distributions/sections/content/content/7b6b83c86dc54f53806494df5dbcbbec/image/IMG_1558.jpeg +0 -0
  58. collective/contentsections/distributions/sections/content/content/841780c79958456cb3fb9202dc5d1d47/data.json +31 -0
  59. collective/contentsections/distributions/sections/content/content/841780c79958456cb3fb9202dc5d1d47/image/IMG_5428.jpeg +0 -0
  60. collective/contentsections/distributions/sections/content/content/8c75b1d03ddc4763ac7badcb49b9b920/data.json +32 -0
  61. collective/contentsections/distributions/sections/content/content/8dd4d0757cec42b682125874c091511f/data.json +49 -0
  62. collective/contentsections/distributions/sections/content/content/8dd4d0757cec42b682125874c091511f/image/chat05.jpg +0 -0
  63. collective/contentsections/distributions/sections/content/content/93258fd28e6d4f6c8aca75d3e2d9ea67/data.json +32 -0
  64. collective/contentsections/distributions/sections/content/content/9ba7bfaa540640d8997e7b7098fef436/data.json +31 -0
  65. collective/contentsections/distributions/sections/content/content/9ba7bfaa540640d8997e7b7098fef436/image/IMG_4315.jpeg +0 -0
  66. collective/contentsections/distributions/sections/content/content/__metadata__.json +619 -0
  67. collective/contentsections/distributions/sections/content/content/aa46ae8c076749f1894ca11d60415eb7/data.json +31 -0
  68. collective/contentsections/distributions/sections/content/content/aa46ae8c076749f1894ca11d60415eb7/image/IMG_6804.jpeg +0 -0
  69. collective/contentsections/distributions/sections/content/content/ad18738761b94e0db90beff29fe232d2/data.json +34 -0
  70. collective/contentsections/distributions/sections/content/content/b2b581efee084a94986ad74f61924410/data.json +59 -0
  71. collective/contentsections/distributions/sections/content/content/b2b581efee084a94986ad74f61924410/image/bird-05.jpg +0 -0
  72. collective/contentsections/distributions/sections/content/content/b6ba4c606fb0443aa3054e25754c1c82/data.json +34 -0
  73. collective/contentsections/distributions/sections/content/content/b6ba4c606fb0443aa3054e25754c1c82/image/namur.jpg +0 -0
  74. collective/contentsections/distributions/sections/content/content/b844a9801e1e400da1da026f940ac529/data.json +36 -0
  75. collective/contentsections/distributions/sections/content/content/bbfa80c53c9a4e99b9e85fd6a2f996ba/data.json +31 -0
  76. collective/contentsections/distributions/sections/content/content/bbfa80c53c9a4e99b9e85fd6a2f996ba/image/IMG_6807.jpeg +0 -0
  77. collective/contentsections/distributions/sections/content/content/be82cb720d6b42ad8a893f96909f68e2/data.json +31 -0
  78. collective/contentsections/distributions/sections/content/content/be82cb720d6b42ad8a893f96909f68e2/image/chat07.jpg +0 -0
  79. collective/contentsections/distributions/sections/content/content/c2831989758048ed83b0ed7fd631e6fa/data.json +31 -0
  80. collective/contentsections/distributions/sections/content/content/c2831989758048ed83b0ed7fd631e6fa/image/chat05.jpg +0 -0
  81. collective/contentsections/distributions/sections/content/content/cc1a32b7d2514cc8a57edea574223202/data.json +34 -0
  82. collective/contentsections/distributions/sections/content/content/cc1a32b7d2514cc8a57edea574223202/image/olln.jpg +0 -0
  83. collective/contentsections/distributions/sections/content/content/d1c22416ba1a495cb6f7b0e0ab957afd/data.json +52 -0
  84. collective/contentsections/distributions/sections/content/content/d3d4c1cca1c84890b5209d8ecd2bb80c/data.json +49 -0
  85. collective/contentsections/distributions/sections/content/content/d3d4c1cca1c84890b5209d8ecd2bb80c/image/chat06.jpg +0 -0
  86. collective/contentsections/distributions/sections/content/content/d44ab052152c47a292b0af0ea5044246/data.json +31 -0
  87. collective/contentsections/distributions/sections/content/content/d44ab052152c47a292b0af0ea5044246/image/IMG_6537.jpeg +0 -0
  88. collective/contentsections/distributions/sections/content/content/d9280d9224be4abf910b130fd3976011/data.json +31 -0
  89. collective/contentsections/distributions/sections/content/content/d9280d9224be4abf910b130fd3976011/image/IMG_4189.jpeg +0 -0
  90. collective/contentsections/distributions/sections/content/content/da4d3242e9714345b5c29a39845cc676/data.json +32 -0
  91. collective/contentsections/distributions/sections/content/content/e8ab7eb613344942a996705514d43d60/data.json +59 -0
  92. collective/contentsections/distributions/sections/content/content/e8ab7eb613344942a996705514d43d60/image/bird-01.jpg +0 -0
  93. collective/contentsections/distributions/sections/content/content/e9ebf1dd6c5c48b48d7e530138926ae8/data.json +59 -0
  94. collective/contentsections/distributions/sections/content/content/e9ebf1dd6c5c48b48d7e530138926ae8/image/bird-03.jpg +0 -0
  95. collective/contentsections/distributions/sections/content/content/eb31b75b5c864eb8a96e9d63eb31b5d4/data.json +31 -0
  96. collective/contentsections/distributions/sections/content/content/eb31b75b5c864eb8a96e9d63eb31b5d4/image/IMG_1971.jpeg +0 -0
  97. collective/contentsections/distributions/sections/content/content/ef965d707fd147529afe12088809993f/data.json +50 -0
  98. collective/contentsections/distributions/sections/content/content/f0a2237f2dea452ebaec185f4e6f8217/data.json +50 -0
  99. collective/contentsections/distributions/sections/content/content/f0c1229450aa44e59ac35bff82c5da95/data.json +36 -0
  100. collective/contentsections/distributions/sections/content/content/plone_site_root/data.json +34 -0
  101. collective/contentsections/distributions/sections/content/relations.json +22 -0
  102. collective/contentsections/distributions/sections/image.png +0 -0
  103. collective/contentsections/distributions/sections/profiles.json +4 -0
  104. collective/contentsections/indexers.py +74 -0
  105. collective/contentsections/indexers.zcml +21 -0
  106. collective/contentsections/interfaces.py +6 -0
  107. collective/contentsections/pages/__init__.py +9 -0
  108. collective/contentsections/pages/base.py +81 -0
  109. collective/contentsections/pages/base_page_section_view.pt +14 -0
  110. collective/contentsections/pages/base_page_view.pt +158 -0
  111. collective/contentsections/pages/basic/__init__.py +0 -0
  112. collective/contentsections/pages/basic/configure.zcml +10 -0
  113. collective/contentsections/pages/basic/content.py +13 -0
  114. collective/contentsections/pages/configure.zcml +43 -0
  115. collective/contentsections/pages/event/__init__.py +0 -0
  116. collective/contentsections/pages/event/configure.zcml +20 -0
  117. collective/contentsections/pages/event/content.py +15 -0
  118. collective/contentsections/pages/event/view.pt +7 -0
  119. collective/contentsections/pages/news/__init__.py +0 -0
  120. collective/contentsections/pages/news/configure.zcml +11 -0
  121. collective/contentsections/pages/news/content.py +13 -0
  122. collective/contentsections/profiles/default/browserlayer.xml +7 -0
  123. collective/contentsections/profiles/default/metadata.xml +9 -0
  124. collective/contentsections/profiles/default/portlets.xml +5 -0
  125. collective/contentsections/profiles/default/registry/base.xml +50 -0
  126. collective/contentsections/profiles/default/registry/bundles.xml +21 -0
  127. collective/contentsections/profiles/default/registry/icons.xml +92 -0
  128. collective/contentsections/profiles/default/registry/tinymce.xml +163 -0
  129. collective/contentsections/profiles/default/rolemap.xml +21 -0
  130. collective/contentsections/profiles/default/taxonomies/section_css_classes.cfg +7 -0
  131. collective/contentsections/profiles/default/taxonomies/section_css_classes.xml +56 -0
  132. collective/contentsections/profiles/default/types/Document.xml +4 -0
  133. collective/contentsections/profiles/default/types/Event.xml +4 -0
  134. collective/contentsections/profiles/default/types/File.xml +17 -0
  135. collective/contentsections/profiles/default/types/Image.xml +15 -0
  136. collective/contentsections/profiles/default/types/Link.xml +18 -0
  137. collective/contentsections/profiles/default/types/News_Item.xml +5 -0
  138. collective/contentsections/profiles/default/types/collective.contentsections.BasicPage.xml +45 -0
  139. collective/contentsections/profiles/default/types/collective.contentsections.CardsSection.xml +28 -0
  140. collective/contentsections/profiles/default/types/collective.contentsections.CollectionSection.xml +29 -0
  141. collective/contentsections/profiles/default/types/collective.contentsections.Contact.xml +25 -0
  142. collective/contentsections/profiles/default/types/collective.contentsections.ContactsSection.xml +28 -0
  143. collective/contentsections/profiles/default/types/collective.contentsections.EventPage.xml +50 -0
  144. collective/contentsections/profiles/default/types/collective.contentsections.FilesSection.xml +32 -0
  145. collective/contentsections/profiles/default/types/collective.contentsections.HTMLSection.xml +23 -0
  146. collective/contentsections/profiles/default/types/collective.contentsections.ImagesSection.xml +32 -0
  147. collective/contentsections/profiles/default/types/collective.contentsections.LinksSection.xml +32 -0
  148. collective/contentsections/profiles/default/types/collective.contentsections.Location.xml +27 -0
  149. collective/contentsections/profiles/default/types/collective.contentsections.LocationsSection.xml +23 -0
  150. collective/contentsections/profiles/default/types/collective.contentsections.NewsPage.xml +45 -0
  151. collective/contentsections/profiles/default/types/collective.contentsections.SelectionSection.xml +29 -0
  152. collective/contentsections/profiles/default/types/collective.contentsections.TextSection.xml +25 -0
  153. collective/contentsections/profiles/default/types.xml +20 -0
  154. collective/contentsections/profiles/default/workflows.xml +20 -0
  155. collective/contentsections/profiles/uninstall/browserlayer.xml +7 -0
  156. collective/contentsections/profiles/uninstall/registry.xml +14 -0
  157. collective/contentsections/sections/__init__.py +25 -0
  158. collective/contentsections/sections/base.py +147 -0
  159. collective/contentsections/sections/base_links_card.pt +14 -0
  160. collective/contentsections/sections/base_links_card_carousel.pt +41 -0
  161. collective/contentsections/sections/base_links_carousel.pt +40 -0
  162. collective/contentsections/sections/base_links_list.pt +23 -0
  163. collective/contentsections/sections/cards/__init__.py +0 -0
  164. collective/contentsections/sections/cards/configure.zcml +17 -0
  165. collective/contentsections/sections/cards/content.py +93 -0
  166. collective/contentsections/sections/cards/view.pt +21 -0
  167. collective/contentsections/sections/cards/views.py +30 -0
  168. collective/contentsections/sections/collection/__init__.py +0 -0
  169. collective/contentsections/sections/collection/configure.zcml +53 -0
  170. collective/contentsections/sections/collection/content.py +45 -0
  171. collective/contentsections/sections/collection/views.py +36 -0
  172. collective/contentsections/sections/configure.zcml +38 -0
  173. collective/contentsections/sections/contacts/__init__.py +0 -0
  174. collective/contentsections/sections/contacts/card.pt +25 -0
  175. collective/contentsections/sections/contacts/configure.zcml +19 -0
  176. collective/contentsections/sections/contacts/content.py +14 -0
  177. collective/contentsections/sections/contacts/views.py +32 -0
  178. collective/contentsections/sections/files/__init__.py +0 -0
  179. collective/contentsections/sections/files/configure.zcml +53 -0
  180. collective/contentsections/sections/files/content.py +14 -0
  181. collective/contentsections/sections/files/views.py +31 -0
  182. collective/contentsections/sections/html/__init__.py +0 -0
  183. collective/contentsections/sections/html/configure.zcml +15 -0
  184. collective/contentsections/sections/html/content.py +19 -0
  185. collective/contentsections/sections/html/view.pt +9 -0
  186. collective/contentsections/sections/images/__init__.py +0 -0
  187. collective/contentsections/sections/images/configure.zcml +54 -0
  188. collective/contentsections/sections/images/content.py +14 -0
  189. collective/contentsections/sections/images/gallery.pt +42 -0
  190. collective/contentsections/sections/images/views.py +53 -0
  191. collective/contentsections/sections/links/__init__.py +0 -0
  192. collective/contentsections/sections/links/configure.zcml +53 -0
  193. collective/contentsections/sections/links/content.py +14 -0
  194. collective/contentsections/sections/links/views.py +36 -0
  195. collective/contentsections/sections/locations/__init__.py +0 -0
  196. collective/contentsections/sections/locations/configure.zcml +15 -0
  197. collective/contentsections/sections/locations/content.py +21 -0
  198. collective/contentsections/sections/locations/view.pt +9 -0
  199. collective/contentsections/sections/locations/views.py +72 -0
  200. collective/contentsections/sections/selection/__init__.py +0 -0
  201. collective/contentsections/sections/selection/configure.zcml +53 -0
  202. collective/contentsections/sections/selection/content.py +39 -0
  203. collective/contentsections/sections/selection/views.py +26 -0
  204. collective/contentsections/sections/text/__init__.py +0 -0
  205. collective/contentsections/sections/text/configure.zcml +15 -0
  206. collective/contentsections/sections/text/content.py +30 -0
  207. collective/contentsections/sections/text/view.pt +23 -0
  208. collective/contentsections/static/Sortable.min.js +2 -0
  209. collective/contentsections/static/base.css +72 -0
  210. collective/contentsections/static/base.js +12 -0
  211. collective/contentsections/static/edit.css +0 -0
  212. collective/contentsections/static/edit.js +3 -0
  213. collective/contentsections/static/flexbin.css +74 -0
  214. collective/contentsections/static/spotlight.bundle.js +28 -0
  215. collective/contentsections/views/configure.zcml +14 -0
  216. collective/contentsections/views/macros.pt +36 -0
  217. collective/contentsections/views/utils.py +10 -0
  218. collective/contentsections/vocabularies.py +59 -0
  219. collective/contentsections/vocabularies.zcml +28 -0
  220. collective.contentsections-2.0.0a1-py3.12-nspkg.pth +1 -0
  221. collective_contentsections-2.0.0a1.dist-info/LICENCE +339 -0
  222. collective_contentsections-2.0.0a1.dist-info/METADATA +340 -0
  223. collective_contentsections-2.0.0a1.dist-info/RECORD +227 -0
  224. collective_contentsections-2.0.0a1.dist-info/WHEEL +5 -0
  225. collective_contentsections-2.0.0a1.dist-info/entry_points.txt +2 -0
  226. collective_contentsections-2.0.0a1.dist-info/namespace_packages.txt +1 -0
  227. collective_contentsections-2.0.0a1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,3 @@
1
+ from zope.i18nmessageid import MessageFactory
2
+
3
+ _ = MessageFactory("collective.contentsections")
File without changes
@@ -0,0 +1,28 @@
1
+ <configure
2
+ xmlns="http://namespaces.zope.org/zope"
3
+ xmlns:browser="http://namespaces.zope.org/browser"
4
+ xmlns:plone="http://namespaces.plone.org/plone"
5
+ xmlns:zcml="http://namespaces.zope.org/zcml"
6
+ i18n_domain="collective.contentsections">
7
+
8
+ <include package="plone.behavior" file="meta.zcml"/>
9
+
10
+ <plone:behavior
11
+ name="collective.contentsections.leadicon"
12
+ title="Lead Icon"
13
+ description="Adds icon field"
14
+ provides=".leadicon.ILeadIconBehavior"
15
+ factory=".leadicon.LeadIcon"
16
+ for="plone.dexterity.interfaces.IDexterityContent"
17
+ marker=".leadicon.ILeadIcon"
18
+ />
19
+
20
+ <plone:behavior
21
+ name="collective.contentsections.namefromuuid"
22
+ title="Name from uuid"
23
+ description="Use uuid.uuid4 to generate short name of new object."
24
+ provides=".namechooser.INameFromUUID"
25
+ />
26
+ <adapter factory=".namechooser.NameFromUUID" />
27
+
28
+ </configure>
@@ -0,0 +1,39 @@
1
+ # -*- coding: utf-8 -*-
2
+ from collective.contentsections import _
3
+ from plone import schema
4
+ from plone.autoform.interfaces import IFormFieldProvider
5
+ from plone.dexterity.interfaces import IDexterityContent
6
+ from plone.supermodel import model
7
+ from zope.component import adapter
8
+ from zope.interface import Interface
9
+ from zope.interface import implementer
10
+ from zope.interface import provider
11
+
12
+
13
+ class ILeadIcon(Interface):
14
+ "Marker interface"
15
+
16
+
17
+ @provider(IFormFieldProvider)
18
+ class ILeadIconBehavior(model.Schema):
19
+
20
+ icon = schema.Choice(
21
+ title=_("Lead Icon"),
22
+ required=False,
23
+ vocabulary="collective.contentsections.LeadIcons",
24
+ )
25
+
26
+
27
+ @implementer(ILeadIconBehavior)
28
+ @adapter(IDexterityContent)
29
+ class LeadIcon(object):
30
+ def __init__(self, context):
31
+ self.context = context
32
+
33
+ @property
34
+ def icon(self):
35
+ return self.context.icon
36
+
37
+ @icon.setter
38
+ def icon(self, value):
39
+ self.context.icon = value
@@ -0,0 +1,24 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ import uuid
4
+
5
+ from plone.app.content.interfaces import INameFromTitle
6
+ from zope.component import adapter
7
+ from zope.interface import Interface
8
+ from zope.interface import implementer
9
+
10
+
11
+ class INameFromUUID(Interface):
12
+ """Marker interface to enable 'Name from uuid' behavior"""
13
+
14
+
15
+ @implementer(INameFromTitle)
16
+ @adapter(INameFromUUID)
17
+ class NameFromUUID(object):
18
+ def __init__(self, context):
19
+ self.context = context
20
+
21
+ @property
22
+ def title(self):
23
+ prefix = self.context.portal_type.split(".")[-1].lower()
24
+ return f"{prefix}-{uuid.uuid4().hex}"
@@ -0,0 +1,50 @@
1
+ <configure
2
+ xmlns="http://namespaces.zope.org/zope"
3
+ xmlns:genericsetup="http://namespaces.zope.org/genericsetup"
4
+ xmlns:plone="http://namespaces.plone.org/plone"
5
+ >
6
+
7
+ <include package="Products.CMFPlone" />
8
+ <include package="plone.distribution" />
9
+
10
+ <plone:distribution
11
+ name="sections"
12
+ title="Plone Site (Content Sections)"
13
+ description="A Plone site where pages are built with sections."
14
+ directory="distributions/sections"
15
+ headless="false"
16
+ />
17
+
18
+ <genericsetup:registerProfile
19
+ name="default"
20
+ title="collective.contentsections"
21
+ description="Installs the collective.contentsections add-on"
22
+ provides="Products.GenericSetup.interfaces.EXTENSION"
23
+ directory="profiles/default"
24
+ />
25
+
26
+ <genericsetup:registerProfile
27
+ name="uninstall"
28
+ title="collective.contentsections (uninstall)"
29
+ description="Uninstalls the collective.contentsections add-on"
30
+ provides="Products.GenericSetup.interfaces.EXTENSION"
31
+ directory="profiles/uninstall"
32
+ />
33
+
34
+ <include file="indexers.zcml" />
35
+ <include file="vocabularies.zcml" />
36
+
37
+
38
+ <include package=".behaviors" />
39
+ <include package=".contents" />
40
+ <include package=".pages" />
41
+ <include package=".sections" />
42
+ <include package=".views" />
43
+
44
+ <plone:static
45
+ directory="static"
46
+ name="collective.contentsections"
47
+ type="plone"
48
+ />
49
+
50
+ </configure>
@@ -0,0 +1,4 @@
1
+ from .contact.content import Contact
2
+ from .contact.content import IContact
3
+ from .location.content import ILocation
4
+ from .location.content import Location
@@ -0,0 +1,15 @@
1
+ from Products.Five.browser import BrowserView
2
+ from zope.interface import Interface
3
+
4
+
5
+ class IElement(Interface):
6
+ """Marker interface for element content type"""
7
+
8
+
9
+ class ElementView(BrowserView):
10
+ """Element view"""
11
+
12
+ def __call__(self):
13
+ section = self.context.__parent__
14
+ url = f"{section.absolute_url()}/folder_contents"
15
+ self.request.response.redirect(url)
@@ -0,0 +1,20 @@
1
+ <configure
2
+ xmlns="http://namespaces.zope.org/zope"
3
+ xmlns:browser="http://namespaces.zope.org/browser"
4
+ >
5
+
6
+ <include package=".contact" />
7
+ <include package=".file" />
8
+ <include package=".image" />
9
+ <include package=".link" />
10
+ <include package=".location" />
11
+
12
+ <browser:page
13
+ name="element_view"
14
+ for=".base.IElement"
15
+ class=".base.ElementView"
16
+ permission="zope2.View"
17
+ layer="collective.contentsections.interfaces.IBrowserLayer"
18
+ />
19
+
20
+ </configure>
@@ -0,0 +1,6 @@
1
+ <configure
2
+ xmlns="http://namespaces.zope.org/zope"
3
+ xmlns:browser="http://namespaces.zope.org/browser"
4
+ >
5
+
6
+ </configure>
@@ -0,0 +1,37 @@
1
+ from plone import schema
2
+ from plone.dexterity.content import Item
3
+ from plone.supermodel import model
4
+ from zope.interface import implementer
5
+
6
+ from collective.contentsections import _
7
+ from collective.contentsections.contents.base import IElement
8
+
9
+
10
+ class IContact(model.Schema):
11
+ """Contact schema"""
12
+
13
+ title = schema.TextLine(
14
+ title=_("Title"),
15
+ required=True,
16
+ )
17
+ subtitle = schema.TextLine(
18
+ title=_("Subtitle"),
19
+ required=False,
20
+ )
21
+ description = schema.Text(
22
+ title=_("Description"),
23
+ required=False,
24
+ )
25
+ email = schema.Email(
26
+ title=_("Email"),
27
+ required=False,
28
+ )
29
+ phone = schema.TextLine(
30
+ title=_("Phone"),
31
+ required=False,
32
+ )
33
+
34
+
35
+ @implementer(IContact, IElement)
36
+ class Contact(Item):
37
+ """Contact content type"""
File without changes
@@ -0,0 +1,10 @@
1
+ <configure
2
+ xmlns="http://namespaces.zope.org/zope"
3
+ xmlns:browser="http://namespaces.zope.org/browser"
4
+ >
5
+
6
+ <class class="plone.app.contenttypes.content.File">
7
+ <implements interface="collective.contentsections.contents.base.IElement" />
8
+ </class>
9
+
10
+ </configure>
File without changes
@@ -0,0 +1,10 @@
1
+ <configure
2
+ xmlns="http://namespaces.zope.org/zope"
3
+ xmlns:browser="http://namespaces.zope.org/browser"
4
+ >
5
+
6
+ <class class="plone.app.contenttypes.content.Image">
7
+ <implements interface="collective.contentsections.contents.base.IElement" />
8
+ </class>
9
+
10
+ </configure>
File without changes
@@ -0,0 +1,18 @@
1
+ <configure
2
+ xmlns="http://namespaces.zope.org/zope"
3
+ xmlns:browser="http://namespaces.zope.org/browser"
4
+ >
5
+
6
+ <class class="plone.app.contenttypes.content.Link">
7
+ <implements interface="collective.contentsections.contents.base.IElement" />
8
+ </class>
9
+
10
+ <browser:page
11
+ name="element_view"
12
+ for="plone.app.contenttypes.interfaces.ILink"
13
+ class=".views.ElementView"
14
+ permission="zope2.View"
15
+ layer="collective.contentsections.interfaces.IBrowserLayer"
16
+ />
17
+
18
+ </configure>
@@ -0,0 +1,13 @@
1
+ from plone import api
2
+ from plone.app.contenttypes.browser.link_redirect_view import LinkRedirectView
3
+
4
+
5
+ class ElementView(LinkRedirectView):
6
+ """Element view"""
7
+
8
+ def __call__(self):
9
+ if api.user.has_permission("Modify portal content", user=api.user.get_current(), obj=self.context):
10
+ section = self.context.__parent__
11
+ url = f"{section.absolute_url()}/folder_contents"
12
+ self.request.response.redirect(url)
13
+ super().__call__()
@@ -0,0 +1,5 @@
1
+ <configure
2
+ xmlns="http://namespaces.zope.org/zope"
3
+ xmlns:browser="http://namespaces.zope.org/browser">
4
+
5
+ </configure>
@@ -0,0 +1,16 @@
1
+ from plone import schema
2
+ from plone.dexterity.content import Item
3
+ from plone.supermodel import model
4
+ from zope.interface import implementer
5
+
6
+ from collective.contentsections import _
7
+ from collective.contentsections.contents.base import IElement
8
+
9
+
10
+ class ILocation(model.Schema):
11
+ """Location schema"""
12
+
13
+
14
+ @implementer(ILocation, IElement)
15
+ class Location(Item):
16
+ """Location content type"""
@@ -0,0 +1,52 @@
1
+ {
2
+ "@id": "/demo/page-with-text-sections",
3
+ "@type": "collective.contentsections.BasicPage",
4
+ "UID": "081544c4943647f9b15b9e0905a9b54d",
5
+ "allow_discussion": null,
6
+ "changeNote": "",
7
+ "created": "2021-12-14T09:14:01+00:00",
8
+ "description": "This page contains Text sections in different configurations",
9
+ "effective": "2021-12-14T10:14:00",
10
+ "exclude_from_nav": false,
11
+ "expires": null,
12
+ "exportimport.constrains": {},
13
+ "exportimport.conversation": [],
14
+ "hide_title": false,
15
+ "id": "page-with-text-sections",
16
+ "image": null,
17
+ "image_caption": null,
18
+ "is_folderish": true,
19
+ "language": "##DEFAULT##",
20
+ "layout": "page_view",
21
+ "lock": {
22
+ "locked": false,
23
+ "stealable": true
24
+ },
25
+ "modified": "2025-03-18T13:08:08+00:00",
26
+ "review_state": "published",
27
+ "subjects": [],
28
+ "title": "Basic page with Text sections",
29
+ "type_title": "Basic page",
30
+ "version": "current",
31
+ "versioning_enabled": true,
32
+ "workflow_history": {
33
+ "simple_publication_workflow": [
34
+ {
35
+ "action": null,
36
+ "actor": "admin",
37
+ "comments": "",
38
+ "review_state": "private",
39
+ "time": "2021-12-14T09:14:01+00:00"
40
+ },
41
+ {
42
+ "action": "publish",
43
+ "actor": "admin",
44
+ "comments": "",
45
+ "review_state": "published",
46
+ "time": "2021-12-14T09:14:04+00:00"
47
+ }
48
+ ]
49
+ },
50
+ "working_copy": null,
51
+ "working_copy_of": null
52
+ }
@@ -0,0 +1,78 @@
1
+ {
2
+ "@id": "/demo/news/index",
3
+ "@type": "Collection",
4
+ "UID": "0e43326bb88948c0b041a8133ce1e1fe",
5
+ "allow_discussion": null,
6
+ "contributors": [],
7
+ "created": "2021-12-14T08:55:37+00:00",
8
+ "creators": [
9
+ "admin"
10
+ ],
11
+ "customViewFields": [
12
+ "Title",
13
+ "Creator",
14
+ "Type",
15
+ "ModificationDate"
16
+ ],
17
+ "description": "",
18
+ "effective": "2021-12-14T09:57:00",
19
+ "exclude_from_nav": false,
20
+ "expires": null,
21
+ "exportimport.constrains": {},
22
+ "exportimport.conversation": [],
23
+ "id": "index",
24
+ "is_folderish": false,
25
+ "item_count": 30,
26
+ "items_total": 5,
27
+ "language": "##DEFAULT##",
28
+ "layout": "summary_view",
29
+ "limit": 1000,
30
+ "lock": {
31
+ "locked": false,
32
+ "stealable": true
33
+ },
34
+ "modified": "2025-03-18T12:46:58+00:00",
35
+ "query": [
36
+ {
37
+ "i": "path",
38
+ "o": "plone.app.querystring.operation.string.relativePath",
39
+ "v": "..::1::1"
40
+ },
41
+ {
42
+ "i": "portal_type",
43
+ "o": "plone.app.querystring.operation.selection.any",
44
+ "v": [
45
+ "collective.contentsections.NewsPage"
46
+ ]
47
+ }
48
+ ],
49
+ "review_state": "published",
50
+ "rights": null,
51
+ "sort_on": "created",
52
+ "sort_reversed": true,
53
+ "subjects": [],
54
+ "text": null,
55
+ "title": "News collection",
56
+ "type_title": "Collection",
57
+ "version": "current",
58
+ "workflow_history": {
59
+ "simple_publication_workflow": [
60
+ {
61
+ "action": null,
62
+ "actor": "admin",
63
+ "comments": "",
64
+ "review_state": "private",
65
+ "time": "2021-12-14T08:55:37+00:00"
66
+ },
67
+ {
68
+ "action": "publish",
69
+ "actor": "admin",
70
+ "comments": "",
71
+ "review_state": "published",
72
+ "time": "2021-12-14T08:57:12+00:00"
73
+ }
74
+ ]
75
+ },
76
+ "working_copy": null,
77
+ "working_copy_of": null
78
+ }
@@ -0,0 +1,36 @@
1
+ {
2
+ "@id": "/demo/page-with-collection-sections/collectionsection-23c06ad497fc4ee0acfc2d5ee4f6c18b",
3
+ "@type": "collective.contentsections.CollectionSection",
4
+ "UID": "1da584ffcfd94a218ac3af5e1cdbbd85",
5
+ "allow_discussion": null,
6
+ "background_image": null,
7
+ "collection_link_text": "",
8
+ "container_width": 12,
9
+ "created": "2021-12-17T19:32:41+00:00",
10
+ "css_classes": [],
11
+ "exportimport.constrains": {},
12
+ "exportimport.conversation": [],
13
+ "group_size": 4,
14
+ "hide_item_descriptions": false,
15
+ "hide_item_lead_images": false,
16
+ "hide_item_publication_dates": true,
17
+ "hide_item_titles": false,
18
+ "hide_title": false,
19
+ "id": "collectionsection-23c06ad497fc4ee0acfc2d5ee4f6c18b",
20
+ "is_folderish": true,
21
+ "items_number": 4,
22
+ "language": "##DEFAULT##",
23
+ "layout": "card_view",
24
+ "lock": {
25
+ "locked": false,
26
+ "stealable": true
27
+ },
28
+ "modified": "2025-03-18T13:08:08+00:00",
29
+ "review_state": null,
30
+ "title": "Collection section with Card view",
31
+ "type_title": "Collection section",
32
+ "version": "current",
33
+ "workflow_history": {},
34
+ "working_copy": null,
35
+ "working_copy_of": null
36
+ }
@@ -0,0 +1,40 @@
1
+ {
2
+ "@id": "/demo/page-with-text-sections/textsection-5762f05cb78b4e05a868336f5d6fab9c",
3
+ "@type": "collective.contentsections.TextSection",
4
+ "UID": "1ff04c0fca9e4cabb8b6c7a9b2b7f252",
5
+ "allow_discussion": null,
6
+ "background_image": null,
7
+ "changeNote": "",
8
+ "container_width": 12,
9
+ "created": "2021-12-16T17:06:16+00:00",
10
+ "css_classes": [],
11
+ "exportimport.constrains": {},
12
+ "exportimport.conversation": [],
13
+ "hide_title": false,
14
+ "id": "textsection-5762f05cb78b4e05a868336f5d6fab9c",
15
+ "image": null,
16
+ "image_caption": null,
17
+ "is_folderish": true,
18
+ "language": "##DEFAULT##",
19
+ "layout": "view",
20
+ "lead_image_alignment": "right",
21
+ "lead_image_scale": "preview",
22
+ "lock": {
23
+ "locked": false,
24
+ "stealable": true
25
+ },
26
+ "modified": "2025-03-18T12:28:30+00:00",
27
+ "review_state": null,
28
+ "text": {
29
+ "content-type": "text/html",
30
+ "data": "<p>Haec igitur Epicuri non probo, inquam. De cetero vellem equidem aut ipse doctrinis fuisset instructior est enim, quod tibi ita videri necesse est, non satis politus iis artibus, quas qui tenent, eruditi appellantur aut ne deterruisset alios a studiis. quamquam te quidem <a href=\"https://www.plone.org\" data-linktype=\"external\" data-val=\"https://www.plone.org\">video minime esse</a> deterritum.</p>\r\n<p>Verum ad istam omnem orationem brevis est defensio. Nam quoad aetas M. Caeli dare potuit isti suspicioni locum, fuit primum ipsius pudore, deinde etiam patris diligentia disciplinaque munita. Qui ut huic virilem togam dedit\u0161nihil dicam hoc loco de me; tantum sit, quantum vos existimatis; hoc dicam, hunc a patre continuo ad me esse deductum; nemo hunc M. Caelium in illo aetatis flore vidit nisi aut cum patre aut mecum aut in M. Crassi castissima domo, cum artibus honestissimis erudiretur.</p>\r\n<table border=\"1\" class=\"table table-bordered\" style=\"width: 100%; height: 74px;\">\r\n<tbody>\r\n<tr style=\"height: 37px;\">\r\n<th style=\"width: 20%; height: 37px;\">2015</th>\r\n<th style=\"width: 20%; height: 37px;\">2016</th>\r\n<th style=\"width: 20%; height: 37px;\">2017</th>\r\n<th style=\"width: 20%; height: 37px;\">2018</th>\r\n<th style=\"width: 20%; height: 37px;\">2019</th>\r\n</tr>\r\n<tr style=\"height: 37px;\">\r\n<td scope=\"row\" style=\"width: 20%; height: 37px;\">Bucharest</td>\r\n<td style=\"width: 20%; height: 37px;\">Boston</td>\r\n<td style=\"width: 20%; height: 37px;\">Barcelona</td>\r\n<td style=\"width: 20%; height: 37px;\">Tokyo</td>\r\n<td scope=\"row\" style=\"width: 20%; height: 37px;\">Ferrara</td>\r\n</tr>\r\n</tbody>\r\n</table>",
31
+ "encoding": "utf-8"
32
+ },
33
+ "title": "Text section five",
34
+ "type_title": "Text section",
35
+ "version": "current",
36
+ "versioning_enabled": true,
37
+ "workflow_history": {},
38
+ "working_copy": null,
39
+ "working_copy_of": null
40
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "@id": "/demo/page-with-sections/imagessection-c871f245e95240c4b8f599348e0e0b19",
3
+ "@type": "collective.contentsections.ImagesSection",
4
+ "UID": "2d71207814b246e4bfe510325bb82c5e",
5
+ "allow_discussion": null,
6
+ "background_image": null,
7
+ "container_width": 12,
8
+ "created": "2021-12-17T19:35:29+00:00",
9
+ "css_classes": [],
10
+ "exportimport.constrains": {},
11
+ "exportimport.conversation": [],
12
+ "group_size": 2,
13
+ "hide_item_descriptions": false,
14
+ "hide_item_lead_images": false,
15
+ "hide_item_publication_dates": true,
16
+ "hide_item_titles": false,
17
+ "hide_title": false,
18
+ "id": "imagessection-c871f245e95240c4b8f599348e0e0b19",
19
+ "is_folderish": true,
20
+ "language": "##DEFAULT##",
21
+ "layout": "gallery_view",
22
+ "lock": {
23
+ "locked": false,
24
+ "stealable": true
25
+ },
26
+ "modified": "2023-08-20T18:34:56+00:00",
27
+ "review_state": null,
28
+ "title": "Images section",
29
+ "type_title": "Images section",
30
+ "version": "current",
31
+ "workflow_history": {},
32
+ "working_copy": null,
33
+ "working_copy_of": null
34
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "@id": "/demo/event-with-sections/imagessection-ec627db95abd4a308fd72dd69e7cc738",
3
+ "@type": "collective.contentsections.ImagesSection",
4
+ "UID": "2ef081a74f5a43da800883a91ec31e62",
5
+ "allow_discussion": null,
6
+ "background_image": null,
7
+ "container_width": 12,
8
+ "created": "2021-12-17T17:11:36+00:00",
9
+ "css_classes": [],
10
+ "exportimport.constrains": {},
11
+ "exportimport.conversation": [],
12
+ "group_size": 3,
13
+ "hide_item_descriptions": false,
14
+ "hide_item_lead_images": false,
15
+ "hide_item_publication_dates": true,
16
+ "hide_item_titles": false,
17
+ "hide_title": false,
18
+ "id": "imagessection-ec627db95abd4a308fd72dd69e7cc738",
19
+ "is_folderish": true,
20
+ "language": "##DEFAULT##",
21
+ "layout": "gallery_view",
22
+ "lock": {
23
+ "locked": false,
24
+ "stealable": true
25
+ },
26
+ "modified": "2025-03-18T12:39:09+00:00",
27
+ "review_state": null,
28
+ "title": "Images section",
29
+ "type_title": "Images section",
30
+ "version": "current",
31
+ "workflow_history": {},
32
+ "working_copy": null,
33
+ "working_copy_of": null
34
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "@id": "/demo/page-with-sections/imagessection-c871f245e95240c4b8f599348e0e0b19/chat06.jpg",
3
+ "@type": "Image",
4
+ "UID": "2fb127ce7e3341679227a5bfdec44da8",
5
+ "allow_discussion": null,
6
+ "created": "2021-12-17T19:36:14+00:00",
7
+ "description": "",
8
+ "exportimport.constrains": {},
9
+ "exportimport.conversation": [],
10
+ "id": "chat06.jpg",
11
+ "image": {
12
+ "blob_path": "2fb127ce7e3341679227a5bfdec44da8/image/chat06.jpg",
13
+ "content-type": "image/jpeg",
14
+ "filename": "chat06.jpg",
15
+ "height": 720,
16
+ "size": 212130,
17
+ "width": 1280
18
+ },
19
+ "is_folderish": false,
20
+ "language": "##DEFAULT##",
21
+ "layout": "element_view",
22
+ "lock": {},
23
+ "modified": "2021-12-17T19:36:14+00:00",
24
+ "review_state": null,
25
+ "title": "chat06.jpg",
26
+ "type_title": "Image",
27
+ "version": "current",
28
+ "workflow_history": {},
29
+ "working_copy": null,
30
+ "working_copy_of": null
31
+ }