imio.smartweb.core 1.3.1__py3-none-any.whl → 1.3.3__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 (44) hide show
  1. imio/smartweb/core/browser/controlpanel.py +25 -1
  2. imio/smartweb/core/browser/sitemap.py +15 -11
  3. imio/smartweb/core/contents/rest/base.py +4 -0
  4. imio/smartweb/core/contents/rest/campaign/endpoint.py +18 -1
  5. imio/smartweb/core/profiles/default/metadata.xml +1 -1
  6. imio/smartweb/core/profiles/default/types/imio.smartweb.SectionTimestampedPublications.xml +4 -0
  7. imio/smartweb/core/profiles/default/types.xml +1 -0
  8. imio/smartweb/core/profiles/default/workflows.xml +1 -0
  9. imio/smartweb/core/tests/test_ideabox.py +5 -3
  10. imio/smartweb/core/tests/test_rest.py +21 -3
  11. imio/smartweb/core/tests/test_sitemap.py +19 -0
  12. imio/smartweb/core/upgrades/configure.zcml +19 -0
  13. imio/smartweb/core/upgrades/profiles/1061_to_1062/types/imio.smartweb.SectionTimestampedPublications.xml +1 -5
  14. imio/smartweb/core/upgrades/profiles/1066_to_1067/types/imio.smartweb.SectionTimestampedPublications.xml +39 -0
  15. imio/smartweb/core/webcomponents/build/css/666.smartweb-webcomponents-compiled.css +1 -1
  16. imio/smartweb/core/webcomponents/build/css/smartweb-webcomponents-compiled.css +1 -1
  17. imio/smartweb/core/webcomponents/build/js/373.smartweb-webcomponents-compiled.js +1 -1
  18. imio/smartweb/core/webcomponents/build/js/486.smartweb-webcomponents-compiled.js +1 -1
  19. imio/smartweb/core/webcomponents/build/js/666.smartweb-webcomponents-compiled.js +1 -1
  20. imio/smartweb/core/webcomponents/build/js/884.smartweb-webcomponents-compiled.js +1 -1
  21. imio/smartweb/core/webcomponents/build/js/919.smartweb-webcomponents-compiled.js +1 -1
  22. imio/smartweb/core/webcomponents/build/js/922.smartweb-webcomponents-compiled.js +1 -1
  23. imio/smartweb/core/webcomponents/src/components/Annuaire/Annuaire.jsx +3 -2
  24. imio/smartweb/core/webcomponents/src/components/Annuaire/ContactContent/ContactContent.jsx +16 -2
  25. imio/smartweb/core/webcomponents/src/components/Campaign/Campaign.jsx +2 -15
  26. imio/smartweb/core/webcomponents/src/components/Campaign/Campaign.scss +117 -0
  27. imio/smartweb/core/webcomponents/src/components/Campaign/CampaignCard/CampaignCard.jsx +8 -2
  28. imio/smartweb/core/webcomponents/src/components/Campaign/CampaignContent/CampaignContent.jsx +18 -3
  29. imio/smartweb/core/webcomponents/src/components/Campaign/CampaignList/CampaignList.jsx +1 -0
  30. imio/smartweb/core/webcomponents/src/components/Campaign/Filters/Filter.jsx +6 -6
  31. imio/smartweb/core/webcomponents/src/components/Events/EventContent/EventContent.jsx +15 -1
  32. imio/smartweb/core/webcomponents/src/components/Events/Events.jsx +4 -5
  33. imio/smartweb/core/webcomponents/src/components/News/News.jsx +4 -5
  34. imio/smartweb/core/webcomponents/src/components/News/NewsContent/NewsContent.jsx +16 -1
  35. imio/smartweb/core/webcomponents/src/hooks/useAxios.js +3 -1
  36. imio/smartweb/core/webcomponents/src/index.scss +13 -3
  37. {imio.smartweb.core-1.3.1.dist-info → imio.smartweb.core-1.3.3.dist-info}/METADATA +28 -1
  38. {imio.smartweb.core-1.3.1.dist-info → imio.smartweb.core-1.3.3.dist-info}/RECORD +44 -43
  39. /imio.smartweb.core-1.3.1-py3.12-nspkg.pth → /imio.smartweb.core-1.3.3-py3.12-nspkg.pth +0 -0
  40. {imio.smartweb.core-1.3.1.dist-info → imio.smartweb.core-1.3.3.dist-info}/LICENSE.GPL +0 -0
  41. {imio.smartweb.core-1.3.1.dist-info → imio.smartweb.core-1.3.3.dist-info}/LICENSE.rst +0 -0
  42. {imio.smartweb.core-1.3.1.dist-info → imio.smartweb.core-1.3.3.dist-info}/WHEEL +0 -0
  43. {imio.smartweb.core-1.3.1.dist-info → imio.smartweb.core-1.3.3.dist-info}/namespace_packages.txt +0 -0
  44. {imio.smartweb.core-1.3.1.dist-info → imio.smartweb.core-1.3.3.dist-info}/top_level.txt +0 -0
@@ -9,6 +9,8 @@ from plone.app.registry.browser.controlpanel import RegistryEditForm
9
9
  from plone.autoform import directives
10
10
  from plone.z3cform import layout
11
11
  from zope import schema
12
+ from z3c.form import field
13
+ from z3c.form.browser.password import PasswordFieldWidget
12
14
  from zope.interface import Interface
13
15
 
14
16
 
@@ -211,6 +213,10 @@ class SmartwebControlPanelForm(RegistryEditForm):
211
213
  schema = ISmartwebControlPanel
212
214
  schema_prefix = "smartweb"
213
215
  label = _("Smartweb Settings")
216
+ fields = field.Fields(ISmartwebControlPanel)
217
+ fields["secret_key_api"].widgetFactory = PasswordFieldWidget
218
+ fields["iaideabox_api_password"].widgetFactory = PasswordFieldWidget
219
+ fields["iadeliberation_api_password"].widgetFactory = PasswordFieldWidget
214
220
 
215
221
  def applyChanges(self, data):
216
222
  # Get current registry value for (controlpanel) passwords
@@ -239,7 +245,6 @@ class SmartwebControlPanelForm(RegistryEditForm):
239
245
  def updateFields(self):
240
246
  """Override updateFields to hide fields based on ideabox profile installation."""
241
247
  super(SmartwebControlPanelForm, self).updateFields()
242
-
243
248
  # Check if the 'ideabox' profile is installed
244
249
  portal_setup = api.portal.get_tool(name="portal_setup")
245
250
  profile_version = portal_setup.getLastVersionForProfile(
@@ -251,6 +256,25 @@ class SmartwebControlPanelForm(RegistryEditForm):
251
256
  self.fields = self.fields.omit("iaideabox_api_username")
252
257
  self.fields = self.fields.omit("iaideabox_api_password")
253
258
 
259
+ def updateWidgets(self):
260
+ super(SmartwebControlPanelForm, self).updateWidgets()
261
+ password_fields = [
262
+ "secret_key_api",
263
+ "iaideabox_api_password",
264
+ "iadeliberation_api_password",
265
+ ]
266
+ for widget_name in self.widgets:
267
+ widget = self.widgets[widget_name]
268
+ if widget_name in password_fields:
269
+ field_value = api.portal.get_registry_record(f"smartweb.{widget_name}")
270
+ if field_value:
271
+ widget.placeholder = _("Password already filled")
272
+ widget.klass = (
273
+ f"{widget.klass} password-already-filled"
274
+ if widget.klass
275
+ else "password-already-filled"
276
+ )
277
+
254
278
 
255
279
  SmartwebControlPanelView = layout.wrap_form(
256
280
  SmartwebControlPanelForm, ControlPanelFormWrapper
@@ -1,8 +1,5 @@
1
1
  from Acquisition import aq_inner
2
2
  from BTrees.OOBTree import OOBTree
3
- from imio.smartweb.core.config import DIRECTORY_URL
4
- from imio.smartweb.core.config import EVENTS_URL
5
- from imio.smartweb.core.config import NEWS_URL
6
3
  from imio.smartweb.core.contents.rest.directory.endpoint import DirectoryEndpointGet
7
4
  from imio.smartweb.core.contents.rest.events.endpoint import EventsEndpointGet
8
5
  from imio.smartweb.core.contents.rest.news.endpoint import NewsEndpointGet
@@ -10,6 +7,7 @@ from imio.smartweb.core.interfaces import IImioSmartwebCoreLayer
10
7
  from plone.app.layout.navigation.navtree import buildFolderTree
11
8
  from plone.app.layout.sitemap.sitemap import SiteMapView
12
9
  from plone.base.interfaces import IPloneSiteRoot
10
+ from plone.memoize import ram
13
11
  from Products.CMFPlone.browser.navigation import CatalogSiteMap as BaseCatalogSiteMap
14
12
  from Products.CMFPlone.browser.navtree import (
15
13
  SitemapNavtreeStrategy as BaseSitemapNavtreeStrategy,
@@ -25,6 +23,7 @@ from zope.interface import Interface
25
23
 
26
24
  import logging
27
25
  import Missing
26
+ import time
28
27
 
29
28
  logger = logging.getLogger("imio.smartweb.core")
30
29
 
@@ -44,14 +43,18 @@ FRIENDLY_TYPES = [
44
43
  ]
45
44
 
46
45
 
46
+ def cache_key(method, obj, request):
47
+ """We cache data from authentic sources for the sitemap (.xml.gz) for 2 hours."""
48
+ return f"sitemap_{obj.UID()}_{time.time() // 7200}"
49
+
50
+
51
+ @ram.cache(cache_key)
47
52
  def get_endpoint_data(obj, request):
48
- """Retourne les données issues du bon endpoint pour un objet donné"""
49
53
  endpoint_mapping = {
50
54
  "imio.smartweb.DirectoryView": DirectoryEndpointGet,
51
55
  "imio.smartweb.EventsView": EventsEndpointGet,
52
56
  "imio.smartweb.NewsView": NewsEndpointGet,
53
57
  }
54
-
55
58
  endpoint_class = endpoint_mapping.get(obj.portal_type)
56
59
  if not endpoint_class:
57
60
  return {}
@@ -67,7 +70,7 @@ def get_endpoint_data(obj, request):
67
70
 
68
71
 
69
72
  def format_sitemap_items(items, base_url):
70
- """Formatte les items pour le sitemap"""
73
+ """Format items for sitemap(.xml.gz)"""
71
74
  formatted_items = []
72
75
  for item in items:
73
76
  item_id = normalizeString(item.get("title"))
@@ -77,14 +80,14 @@ def format_sitemap_items(items, base_url):
77
80
  {
78
81
  "loc": f"{base_url}/{item_id}?u={item_uid}",
79
82
  "lastmod": lastmod,
80
- "Title": item_id,
83
+ "Title": item.get("title"),
81
84
  "Description": item.get("description", ""),
82
85
  "getURL": f"{base_url}/{item_id}?u={item_uid}",
83
86
  "getRemoteUrl": Missing.Value,
84
87
  "currentItem": False,
85
88
  "currentParent": False,
86
89
  "normalized_review_state": "published",
87
- "normalized_portal_type": "imio-smartweb-directory-item",
90
+ "normalized_portal_type": "imio-smartweb-authsources-item",
88
91
  }
89
92
  )
90
93
  return formatted_items
@@ -132,13 +135,14 @@ class CustomSiteMapView(SiteMapView):
132
135
  )
133
136
  yield {"loc": loc, "lastmod": modified[1]}
134
137
 
135
- for brain in catalog(
138
+ brains = catalog(
136
139
  portal_type=[
137
140
  "imio.smartweb.EventsView",
138
141
  "imio.smartweb.NewsView",
139
142
  "imio.smartweb.DirectoryView",
140
143
  ]
141
- ):
144
+ )
145
+ for brain in brains:
142
146
  obj = brain.getObject()
143
147
  data = get_endpoint_data(obj, obj.REQUEST)
144
148
  yield from format_sitemap_items(data.get("items", {}), obj.absolute_url())
@@ -169,7 +173,7 @@ class CatalogSiteMap(BaseCatalogSiteMap):
169
173
 
170
174
 
171
175
  class SitemapQueryBuilder(BaseSitemapQueryBuilder):
172
- """Construit la requête pour le sitemap avec des types de contenu personnalisés."""
176
+ """Builds the request for the sitemap with custom content types."""
173
177
 
174
178
  def __init__(self, context):
175
179
  self.context = context
@@ -71,6 +71,10 @@ class BaseEndpoint(object):
71
71
 
72
72
  class BaseService(Service):
73
73
  def render(self):
74
+ referer = self.request.get("HTTP_REFERER", "")
75
+ if self.context.absolute_url() not in referer:
76
+ self.request.response.setStatus(403)
77
+ return json.dumps({"error": "Forbidden"})
74
78
  response = self.request.response
75
79
  response.setHeader("Content-type", "application/json")
76
80
  content = self.reply()
@@ -17,6 +17,16 @@ import base64
17
17
  import requests
18
18
 
19
19
 
20
+ PROJECT_WORKFLOW_STATUS_TO_KEEP = [
21
+ "Publié sans vote",
22
+ "Publié",
23
+ "Vote",
24
+ "Clôture",
25
+ "Retenu",
26
+ "Rejeté",
27
+ ]
28
+
29
+
20
30
  def get_ideabox_basic_auth_header() -> str:
21
31
  user = api.portal.get_registry_record("smartweb.iaideabox_api_username")
22
32
  pwd = api.portal.get_registry_record("smartweb.iaideabox_api_password")
@@ -107,7 +117,8 @@ class CampaignEndpoint(BaseTsEndpoint):
107
117
  extra_params = [f"{k}={v}" for k, v in self.request.form.items()]
108
118
  extra_params = "&".join(extra_params)
109
119
  campaign_id = self.context.linked_campaign
110
- url = f"{wcs_api}/cards/imio-ideabox-projet/list?filter-campagne={campaign_id}&full=on&filter-statut=Vote|Enregistr%C3%A9e&filter-statut-operator=in&{extra_params}"
120
+ filter_statut = "|".join(PROJECT_WORKFLOW_STATUS_TO_KEEP)
121
+ url = f"{wcs_api}/cards/imio-ideabox-projet/list?filter-campagne={campaign_id}&full=on&filter-statut={filter_statut}&filter-statut-operator=in&{extra_params}"
111
122
  return url
112
123
 
113
124
 
@@ -116,7 +127,10 @@ class CampaignEndpoint(BaseTsEndpoint):
116
127
  class ZonesEndpoint(BaseTsEndpoint):
117
128
 
118
129
  def __call__(self):
130
+ json_res = {"items": [], "items_total": 0}
119
131
  json = self._get_json(self.query_url)
132
+ if not json:
133
+ return json_res
120
134
  json_res = {"items": json["data"], "items_total": json.get("count")}
121
135
  return json_res
122
136
 
@@ -132,7 +146,10 @@ class ZonesEndpoint(BaseTsEndpoint):
132
146
  class TsTopicsEndpoint(BaseTsEndpoint):
133
147
 
134
148
  def __call__(self):
149
+ json_res = {"items": [], "items_total": 0}
135
150
  json = self._get_json(self.query_url)
151
+ if not json:
152
+ return json_res
136
153
  json_res = {"items": json["data"], "items_total": json.get("count")}
137
154
  return json_res
138
155
 
@@ -1,6 +1,6 @@
1
1
  <?xml version='1.0' encoding='UTF-8'?>
2
2
  <metadata>
3
- <version>1066</version>
3
+ <version>1067</version>
4
4
  <dependencies>
5
5
  <dependency>profile-plone.app.dexterity:default</dependency>
6
6
  <dependency>profile-plone.app.imagecropping:default</dependency>
@@ -32,4 +32,8 @@
32
32
  <element value="imio.smartweb.orientation"/>
33
33
  </property>
34
34
 
35
+ <property name="default_view">table_view</property>
36
+ <property name="default_view_fallback">False</property>
37
+ <property name="immediate_view">view</property>
38
+
35
39
  </object>
@@ -27,5 +27,6 @@
27
27
  <object meta_type="Dexterity FTI" name="imio.smartweb.SectionSendinblue"/>
28
28
  <object meta_type="Dexterity FTI" name="imio.smartweb.SectionSlide"/>
29
29
  <object meta_type="Dexterity FTI" name="imio.smartweb.SectionText"/>
30
+ <object meta_type="Dexterity FTI" name="imio.smartweb.SectionTimestampedPublications"/>
30
31
  <object meta_type="Dexterity FTI" name="imio.smartweb.SectionVideo"/>
31
32
  </object>
@@ -19,6 +19,7 @@
19
19
  <type type_id="imio.smartweb.SectionSlide"/>
20
20
  <type type_id="imio.smartweb.SectionNews"/>
21
21
  <type type_id="imio.smartweb.SectionText"/>
22
+ <type type_id="imio.smartweb.SectionTimestampedPublications"/>
22
23
  <type type_id="imio.smartweb.SectionVideo"/>
23
24
  </bindings>
24
25
  </object>
@@ -1,6 +1,8 @@
1
1
  # -*- coding: utf-8 -*-
2
- from imio.smartweb.core.contents.rest.base import BaseEndpoint
3
2
  from imio.smartweb.core.contents.rest.campaign.endpoint import CampaignEndpoint
3
+ from imio.smartweb.core.contents.rest.campaign.endpoint import (
4
+ PROJECT_WORKFLOW_STATUS_TO_KEEP,
5
+ )
4
6
  from imio.smartweb.core.contents import ICampaignView
5
7
  from imio.smartweb.core.tests.utils import get_json
6
8
 
@@ -12,7 +14,6 @@ from plone.app.testing import TEST_USER_ID
12
14
  from plone.dexterity.interfaces import IDexterityFTI
13
15
  from unittest.mock import patch
14
16
  from zope.component import createObject
15
- from zope.component import queryMultiAdapter
16
17
  from zope.component import queryUtility
17
18
  from zope.publisher.browser import TestRequest
18
19
 
@@ -140,9 +141,10 @@ class TestIdeabox(ImioSmartwebTestCase):
140
141
  request = TestRequest()
141
142
  endpoint = CampaignEndpoint(campaign_view, request)
142
143
  url = endpoint.query_url
144
+ filter_statut = "|".join(PROJECT_WORKFLOW_STATUS_TO_KEEP)
143
145
  self.assertEqual(
144
146
  url,
145
- "https://demo-formulaires.guichet-citoyen.be/api/cards/imio-ideabox-projet/list?filter-campagne=2&full=on&filter-statut=Vote|Enregistr%C3%A9e&filter-statut-operator=in&",
147
+ f"https://demo-formulaires.guichet-citoyen.be/api/cards/imio-ideabox-projet/list?filter-campagne=2&full=on&filter-statut={filter_statut}&filter-statut-operator=in&",
146
148
  )
147
149
 
148
150
  m.get(url, text=json.dumps({}))
@@ -351,11 +351,17 @@ class SectionsFunctionalTest(ImioSmartwebTestCase):
351
351
 
352
352
  def test_rest_directory_results(self):
353
353
  params = {}
354
+ react_view = "directory-view"
355
+ referer_url = f"{self.portal_url}/{react_view}"
354
356
  with patch(
355
357
  "imio.smartweb.core.contents.rest.base.get_json",
356
358
  return_value=self.json_rest_directory,
357
359
  ) as mypatch:
358
- response = self.api_session.get("/directory-view/@results", params=params)
360
+ response = self.api_session.get(
361
+ f"/{react_view}/@results",
362
+ params=params,
363
+ headers={"Referer": referer_url},
364
+ )
359
365
  patch_url = mypatch.return_value.get("@id")
360
366
  patch_urlparsed = urlparse(patch_url)
361
367
  patch_directory = parse_qs(patch_urlparsed.query)
@@ -405,6 +411,8 @@ class SectionsFunctionalTest(ImioSmartwebTestCase):
405
411
 
406
412
  @freeze_time("2021-11-15")
407
413
  def test_rest_events_results(self):
414
+ react_view = "events-view"
415
+ referer_url = f"{self.portal_url}/{react_view}"
408
416
  params = {}
409
417
  # mock get_json from where we import/use it
410
418
  with patch(
@@ -416,7 +424,11 @@ class SectionsFunctionalTest(ImioSmartwebTestCase):
416
424
  patch_selected_agendas = parse_qs(patch_urlparsed.query)[
417
425
  "selected_agendas"
418
426
  ][0]
419
- response = self.api_session.get("/events-view/@results", params=params)
427
+ response = self.api_session.get(
428
+ f"/{react_view}/@results",
429
+ params=params,
430
+ headers={"Referer": referer_url},
431
+ )
420
432
  response_url = response.json().get("@id")
421
433
  response_urlparsed = urlparse(response_url)
422
434
  response_selected_agendas = parse_qs(response_urlparsed.query)[
@@ -460,12 +472,18 @@ class SectionsFunctionalTest(ImioSmartwebTestCase):
460
472
  self.assertIn("<smartweb-news", view())
461
473
 
462
474
  def test_rest_news_results(self):
475
+ react_view = "news-view"
476
+ referer_url = f"{self.portal_url}/{react_view}"
463
477
  params = {}
464
478
  with patch(
465
479
  "imio.smartweb.core.contents.rest.base.get_json",
466
480
  return_value=self.json_rest_news,
467
481
  ) as mypatch:
468
- response = self.api_session.get("/news-view/@results", params=params)
482
+ response = self.api_session.get(
483
+ f"/{react_view}/@results",
484
+ params=params,
485
+ headers={"Referer": referer_url},
486
+ )
469
487
  patch_url = mypatch.return_value.get("@id")
470
488
  patch_urlparsed = urlparse(patch_url)
471
489
  patch_selected_news_folders = parse_qs(patch_urlparsed.query)[
@@ -5,8 +5,10 @@ from gzip import GzipFile
5
5
  from io import BytesIO
6
6
  from imio.smartweb.core.browser.sitemap import CatalogSiteMap
7
7
  from imio.smartweb.core.browser.sitemap import get_endpoint_data
8
+ from imio.smartweb.core.browser.sitemap import cache_key
8
9
  from imio.smartweb.core.testing import IMIO_SMARTWEB_CORE_FUNCTIONAL_TESTING
9
10
  from imio.smartweb.core.testing import ImioSmartwebTestCase
11
+ from imio.smartweb.core.tests.utils import clear_cache
10
12
  from imio.smartweb.core.tests.utils import get_json
11
13
  from imio.smartweb.core.tests.utils import make_named_image
12
14
  from plone import api
@@ -14,9 +16,11 @@ from plone.app.testing import setRoles
14
16
  from plone.app.testing import TEST_USER_ID
15
17
  from plone.app.textfield.value import RichTextValue
16
18
  from plone.base.utils import safe_text
19
+ from plone.memoize.ram import choose_cache
17
20
  from plone.namedfile.file import NamedBlobImage
18
21
  from unittest.mock import patch
19
22
  from unittest.mock import Mock
23
+ from zope.annotation import IAnnotations
20
24
  from zope.component import getMultiAdapter
21
25
 
22
26
  import requests_mock
@@ -123,6 +127,10 @@ class TestPage(ImioSmartwebTestCase):
123
127
  "<loc>http://nohost/plone/folder/page1/gallery/image</loc>\n <lastmod >2024-02-02T10:00:00",
124
128
  xml,
125
129
  )
130
+
131
+ cache = choose_cache("imio.smartweb.core.browser.sitemap.get_endpoint_data")
132
+ cache.ramcache.invalidateAll()
133
+
126
134
  with patch(
127
135
  "imio.smartweb.core.contents.rest.news.endpoint.BaseNewsEndpoint.__call__",
128
136
  return_value=self.json_rest_news,
@@ -132,6 +140,10 @@ class TestPage(ImioSmartwebTestCase):
132
140
  "<loc>http://nohost/plone/news-view/ceci-est-une-deuxieme-actualite",
133
141
  xml,
134
142
  )
143
+
144
+ cache = choose_cache("imio.smartweb.core.browser.sitemap.get_endpoint_data")
145
+ cache.ramcache.invalidateAll()
146
+
135
147
  with patch(
136
148
  "imio.smartweb.core.contents.rest.directory.endpoint.BaseDirectoryEndpoint.__call__",
137
149
  return_value=self.json_rest_directory,
@@ -141,6 +153,10 @@ class TestPage(ImioSmartwebTestCase):
141
153
  "<loc>http://nohost/plone/directory-view/service-communication-de-ladministration-communale",
142
154
  xml,
143
155
  )
156
+
157
+ cache = choose_cache("imio.smartweb.core.browser.sitemap.get_endpoint_data")
158
+ cache.ramcache.invalidateAll()
159
+
144
160
  with patch(
145
161
  "imio.smartweb.core.contents.rest.events.endpoint.BaseEventsEndpoint.__call__",
146
162
  return_value=self.json_rest_events,
@@ -185,6 +201,9 @@ class TestPage(ImioSmartwebTestCase):
185
201
  ][0]
186
202
  self.assertEqual(len(directory_entry.get("children")), 0)
187
203
 
204
+ cache = choose_cache("imio.smartweb.core.browser.sitemap.get_endpoint_data")
205
+ cache.ramcache.invalidateAll()
206
+
188
207
  # Populate directory view with 6 contacts
189
208
  with patch(
190
209
  "imio.smartweb.core.contents.rest.directory.endpoint.BaseDirectoryEndpoint.__call__",
@@ -291,6 +291,14 @@
291
291
  provides="Products.GenericSetup.interfaces.EXTENSION"
292
292
  />
293
293
 
294
+ <genericsetup:registerProfile
295
+ name="upgrade_1066_to_1067"
296
+ title="Upgrade core from 1066 to 1067"
297
+ directory="profiles/1066_to_1067"
298
+ description="BLA BLA BLA"
299
+ provides="Products.GenericSetup.interfaces.EXTENSION"
300
+ />
301
+
294
302
  <genericsetup:upgradeStep
295
303
  title="Configure first official release"
296
304
  description="Run needed profiles steps and reindex catalog"
@@ -961,6 +969,17 @@
961
969
  profile="imio.smartweb.core:default"
962
970
  />
963
971
 
972
+ <genericsetup:upgradeSteps
973
+ source="1066"
974
+ destination="1067"
975
+ profile="imio.smartweb.core:default">
976
+ <genericsetup:upgradeDepends
977
+ title="BLA BLA BLA"
978
+ import_profile="imio.smartweb.core.upgrades:upgrade_1066_to_1067"
979
+ />
980
+ </genericsetup:upgradeSteps>
981
+
982
+
964
983
  <!--genericsetup:upgradeStep
965
984
  title="Check contact itinerary if address was checked in visible blocks"
966
985
  description=""
@@ -16,11 +16,7 @@
16
16
 
17
17
  <!-- Hierarchy control -->
18
18
  <property name="global_allow">False</property>
19
- <property name="filter_content_types">True</property>
20
- <property name="allowed_content_types">
21
- <element value="imio.smartweb.SectionTimestampedPublications" />
22
- </property>
23
-
19
+ <property name="filter_content_types">True</property>
24
20
  <!-- Schema, class and security -->
25
21
  <!-- if we can add a page, we can add a page section -->
26
22
  <property name="add_permission">imio.smartweb.core.AddPage</property>
@@ -0,0 +1,39 @@
1
+ <?xml version="1.0"?>
2
+ <object xmlns:i18n="http://xml.zope.org/namespaces/i18n"
3
+ name="imio.smartweb.SectionTimestampedPublications"
4
+ meta_type="Dexterity FTI"
5
+ i18n:domain="imio.smartweb">
6
+
7
+ <!-- Basic properties -->
8
+ <property
9
+ i18n:translate=""
10
+ name="title">Timestamped publications section</property>
11
+ <property
12
+ i18n:translate=""
13
+ name="description">Timestamped publication section for a page</property>
14
+
15
+ <property name="icon_expr">string:newspaper</property>
16
+
17
+ <!-- Hierarchy control -->
18
+ <property name="global_allow">False</property>
19
+ <property name="filter_content_types">True</property>
20
+ <!-- Schema, class and security -->
21
+ <!-- if we can add a page, we can add a page section -->
22
+ <property name="add_permission">imio.smartweb.core.AddPage</property>
23
+ <property name="klass">imio.smartweb.core.contents.SectionTimestampedPublications</property>
24
+ <property name="schema">imio.smartweb.core.contents.ISectionTimestampedPublications</property>
25
+
26
+ <!-- Enabled behaviors -->
27
+ <property name="behaviors" purge="false">
28
+ <element value="plone.namefromtitle"/>
29
+ <element value="plone.locking"/>
30
+ <element value="plone.shortname"/>
31
+ <element value="imio.smartweb.category_display"/>
32
+ <element value="imio.smartweb.orientation"/>
33
+ </property>
34
+
35
+ <property name="default_view">table_view</property>
36
+ <property name="default_view_fallback">False</property>
37
+ <property name="immediate_view">view</property>
38
+
39
+ </object>
@@ -1 +1 @@
1
- body,html{max-width:100%;overflow-x:initial!important}.r-content-vote-btn a{background:#252525;border-radius:8px;color:#fff;display:inline-block;padding:1rem;text-decoration:none;transition:all .5s ease}#content>header{display:none}.row{margin:0}.breadcrumb,.row{padding:0}.portaltype-imio-smartweb-campaignview header#content-header{z-index:9}.campaign-vote{display:flex;font-size:13px;gap:13px}.campaign-vote .bi{font-size:13px;margin-right:5px}.campaign-vote-pour{background-color:#ebf9ed;border-radius:5px;color:#0ca72b;padding:5px 15px;text-decoration:none}.campaign-vote-pour:focus,.campaign-vote-pour:hover{background-color:#d9f8de;color:#0ca72b}.campaign-vote-contre{background-color:#f4e2e4;border-radius:5px;color:#b70a0a;padding:5px 15px;text-decoration:none}.campaign-vote-contre:focus,.campaign-vote-contre:hover{background-color:#f0d0d4;color:#b70a0a}.campaign-vote-contre-count,.campaign-vote-contre-text,.campaign-vote-pour-count,.r-item-arrow{font-size:15px}.r-item-arrow{align-items:center;background:#f2f2f2;border-radius:50px;display:flex;height:30px;justify-content:center;opacity:0;position:absolute;right:0;top:50%;translate:0 -50%;width:30px}.r-list-item-group:focus .r-item-arrow,.r-list-item-group:hover .r-item-arrow{opacity:1}body .outer-wrapper>.container{max-width:100%!important;padding:0!important}@media screen and (min-width:1200px){.r-campaign-wrapper{margin-right:inherit;max-width:100%;padding-left:0;padding-right:0}}#portal-column-content{padding:0!important}#portal-column-content h1{font-size:0;position:absolute}#viewlet-below-content-description,#viewlet-below-content-title{display:none}header#content-header{background:#fff;position:-webkit-sticky;position:sticky;top:0}article>header{margin-bottom:0}.r-campaign-result{grid-area:1/1/3/2}.r-map.campaign-map{grid-area:1/2/2/3;position:-webkit-sticky;position:sticky}.r-wrapper{display:block}@media screen and (min-width:1200px){.r-wrapper{display:grid;gap:40px;grid-template-columns:minmax(20px,800px) minmax(20px,100%);justify-content:space-between;margin-left:auto;width:calc(558px + 50vw)}}@media screen and (min-width:1400px){.r-wrapper{width:calc(648px + 50vw)}}.r-wrapper .r-result{margin-top:2rem;padding-bottom:2rem}.r-wrapper .r-result-list{padding:0}.r-wrapper .r-result-list .r-list-item-group{list-style:none;margin:1rem 0;position:relative}.r-wrapper .r-result-list .r-list-item-group .r-list-item-link{inset:0!important;position:absolute!important}.r-wrapper .r-result-list .r-list-item-group .r-list-item{display:flex;flex-direction:column;height:100%}@media screen and (min-width:600px){.r-wrapper .r-result-list .r-list-item-group .r-list-item{flex-direction:row}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-img{height:149px;padding-bottom:0;width:246px}}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-text{flex-grow:1;margin-top:.6rem}@media screen and (min-width:600px){.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-text{margin-left:1.5rem;margin-top:0}}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-text a{position:relative}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-text .r-item-title{display:block;font-weight:700}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-text .r-item-categorie{display:block}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-text .r-item-all{display:flex;gap:10px}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-text .r-item-all .r-item-adresse{width:36%}@media screen and (max-width:1200px){.r-wrapper .r-map{margin-top:2rem!important}.r-wrapper .r-map .leaflet-container{height:50vh!important}}.r-load-more{margin-bottom:2rem;text-align:center}.r-load-more button{background:#000;border:1px solid #0000;border-radius:10px;border-bottom-left-radius:10px;border-bottom-left-radius:0;color:#fff;display:block;font-size:14px;font-weight:700;margin:0 auto;padding:.4rem 1rem}.r-load-more button:hover{background:rgba(0,0,0,.871)}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-img{background-color:#000;background-size:cover;border-radius:5px;padding-bottom:56%;position:relative;width:100%;z-index:-1}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-img.r-item-img-placeholder{background-color:#f2f2f2}@media screen and (min-width:600px){.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-img{flex:246px 0 0;height:149px;padding-bottom:0;width:246px}}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-img div,.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-img img{border-radius:5px}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-text{display:flex;flex-direction:column;font-size:13px;gap:10px}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-text .r-item-title{font-size:18px}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-text .r-item-categorie{color:#747474;font-size:13px;font-weight:400;margin-bottom:5px;text-transform:uppercase}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-text .r-item-all{color:#727272}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-text .r-item-all a{color:#000}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-text .r-item-all .r-item-adresse .itineraty{margin-top:5px}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-text .r-item-all .r-item-adresse .itineraty:before{background-size:contain;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 7.68 10.97'%3E%3Cg data-name='Calque 2'%3E%3Cpath d='M3.84 5.21a1.37 1.37 0 1 1 1.37-1.37 1.37 1.37 0 0 1-1.37 1.37m0-5.21A3.84 3.84 0 0 0 0 3.84C0 6.72 3.84 11 3.84 11s3.84-4.28 3.84-7.16A3.84 3.84 0 0 0 3.84 0' data-name='Calque 1'/%3E%3C/g%3E%3C/svg%3E") no-repeat;content:"";display:inline-block;height:15px;vertical-align:middle;width:15px}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-text .r-item-all .r-item-campaign{width:100%}.icon-baseline{align-self:center;display:inline-flex;margin-right:.4rem}.icon-baseline svg{height:1em;position:relative;top:.125em;width:1em}.dpinlb{display:inline-block;vertical-align:top}.r-recurence-past{opacity:.5}.recurence-schedul{position:relative}.recurence-schedul-more{display:block}.recurence-modal-display{background-color:#fff;border:1px solid #dadada;border-radius:10px;box-shadow:.7px 0 5.3px rgba(0,0,0,.024),2.5px 0 17.9px rgba(0,0,0,.036),11px 0 80px #0000000f;left:0;padding:10px 15px!important;position:absolute;right:0;top:0;width:-webkit-max-content;width:max-content}.recurence-modal-display span{border-bottom:1px solid #969696;color:#000;display:block;font-size:14px;margin-bottom:.4rem}.recurence-modal-display ul{margin:0}.recurence-modal-display li{list-style:none}.recurence-modal-hide{display:none}.r-content-img{margin-top:1.5rem;padding-bottom:60%;position:relative}.r-content-header{margin-bottom:1rem}.r-content-title{margin:0}.r-content-recur-start-hours{display:flex}.news-info-title{color:#008fd2;display:block;font-weight:700;margin-bottom:1rem}.r-content-news-info{display:flex;flex-wrap:wrap;justify-content:space-between;margin-bottom:2rem}@media screen and (min-width:600px){.r-content-news-info-container{column-count:2}}.r-content-news-info-container>div{break-inside:avoid;margin:.6rem 0;padding-right:3rem}.r-content-news-info-container>div svg{width:16px}.r-content-news-info-container .r-content-news-info--date{display:flex}.r-content-news-info-container .r-content-news-info--date .r-content-date-end,.r-content-news-info-container .r-content-news-info--date .r-content-date-start,.r-content-news-info-container .r-content-news-info--date .r-content-date-start-hours{display:flex;flex-wrap:wrap}.r-content-news-info-container .r-content-news-info-social svg{height:30px;width:30px}.r-content-news-info-container .r-content-news-info-social ul{align-items:center;display:flex;margin:0}.r-content-news-info-container .r-content-news-info-social ul li{list-style:none}.r-content-news-info-container .r-content-news-info-social ul li a:hover{opacity:.7}@media screen and (max-width:1000px){.r-content-news-info-action{margin-top:1.1rem}}.r-content-news-info-action a{text-decoration:none}.r-content-news-info-action>div{margin:.6rem 0}.r-content-news-info-action .r-content-booking{margin-top:0}.r-content-news-info-action .r-content-booking a{align-items:center;background:#000;border-radius:10px;border-bottom-left-radius:0;color:#fff;cursor:pointer;display:block;display:flex;font-weight:500;gap:10px;padding:.4rem 1rem;text-decoration:none}.r-content-news-info-action .r-content-booking a svg{width:22px;fill:#fff}.r-content-news-info-action .r-content-booking a:hover{background:#3f3f3f;color:#fff}.r-content-topics{display:flex;gap:15px}.r-content-topics span{background:#f1f1f1;border-radius:5px;margin-right:5px;padding:5px}.r-content-title-cat{color:#8e8e8e;font-size:14px;margin-right:5px}smartweb-campaign{display:block;min-height:80vh}@media screen and (min-width:600px){.no-map .r-campaign-wrapper{display:block}.no-map .r-result-list{display:grid;gap:20px;grid-template-columns:1fr 1fr 1fr;max-width:1296px}.no-map .r-list-item-group{transition:all .2s ease}.no-map .r-list-item-group:focus,.no-map .r-list-item-group:hover{transform:translateY(-10px)!important}.no-map .r-list-item-group .r-list-item{box-shadow:0 8px 26px #00000014;flex-direction:column!important}.no-map .r-list-item-group .r-list-item .r-item-img{border-radius:0!important;height:0!important;margin-bottom:.5rem;padding-bottom:60%!important;width:100%!important}.no-map .r-list-item-group .r-list-item .r-item-text{display:grid;grid-template-columns:1fr 1fr;margin-right:1.5rem}.no-map .r-list-item-group .r-list-item .r-item-text:after{display:none}.no-map .r-list-item-group .r-list-item .r-item-text .r-item-categorie{grid-row-start:1}.no-map .r-list-item-group .r-list-item .r-item-text .r-item-title{font-weight:500!important;grid-column-end:3;grid-column-start:1;grid-row-start:2;margin-bottom:2rem;margin-top:1rem}.no-map .r-list-item-group .r-list-item .r-item-text .r-item-date{grid-column-start:2;grid-row-start:1;justify-self:end}}.no-map .r-result.r-campaign-result{max-width:1296px}.no-map .envent-content{margin:0 auto;max-width:700px}
1
+ body,html{max-width:100%;overflow-x:initial!important}.r-content-vote-btn a{background:#252525;border-radius:8px;color:#fff;display:inline-block;padding:1rem;text-decoration:none;transition:all .5s ease}#content>header{display:none}.row{margin:0}.breadcrumb,.row{padding:0}.portaltype-imio-smartweb-campaignview header#content-header{z-index:9}.campaign-vote{display:flex;font-size:13px;gap:13px}.campaign-vote .bi{font-size:13px;margin-right:5px}.campaign-vote-pour{background-color:#ebf9ed;border-radius:5px;color:#0ca72b;padding:5px 15px;text-decoration:none}.campaign-vote-pour:focus,.campaign-vote-pour:hover{background-color:#d9f8de;color:#0ca72b}.campaign-vote-contre{background-color:#f4e2e4;border-radius:5px;color:#b70a0a;padding:5px 15px;text-decoration:none}.campaign-vote-contre:focus,.campaign-vote-contre:hover{background-color:#f0d0d4;color:#b70a0a}.campaign-vote-contre-count,.campaign-vote-contre-text,.campaign-vote-pour-count,.r-item-arrow{font-size:15px}.r-item-arrow{align-items:center;background:#f2f2f2;border-radius:50px;display:flex;height:30px;justify-content:center;opacity:0;position:absolute;right:0;top:50%;translate:0 -50%;width:30px}.r-list-item-group:focus .r-item-arrow,.r-list-item-group:hover .r-item-arrow{opacity:1}body .outer-wrapper>.container{max-width:100%!important;padding:0!important}@media screen and (min-width:1200px){.r-campaign-wrapper{margin-right:inherit;max-width:100%;padding-left:0;padding-right:0}}#portal-column-content{padding:0!important}#portal-column-content h1{font-size:0;position:absolute}#viewlet-below-content-description,#viewlet-below-content-title{display:none}header#content-header{background:#fff;position:-webkit-sticky;position:sticky;top:0}article>header{margin-bottom:0}.r-campaign-result{grid-area:1/1/3/2}.r-map.campaign-map{grid-area:1/2/2/3;position:-webkit-sticky;position:sticky}.r-wrapper{display:block}@media screen and (min-width:1200px){.r-wrapper{display:grid;gap:40px;grid-template-columns:minmax(20px,800px) minmax(20px,100%);justify-content:space-between;margin-left:auto;width:calc(558px + 50vw)}}@media screen and (min-width:1400px){.r-wrapper{width:calc(648px + 50vw)}}.r-wrapper .r-result{margin-top:2rem;padding-bottom:2rem}.r-wrapper .r-result-list{padding:0}.r-wrapper .r-result-list .r-list-item-group{list-style:none;margin:1rem 0;position:relative}.r-wrapper .r-result-list .r-list-item-group .r-list-item-link{inset:0!important;position:absolute!important}.r-wrapper .r-result-list .r-list-item-group .r-list-item{display:flex;flex-direction:column;height:100%}@media screen and (min-width:600px){.r-wrapper .r-result-list .r-list-item-group .r-list-item{flex-direction:row}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-img{height:149px;padding-bottom:0;width:246px}}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-text{flex-grow:1;margin-top:.6rem}@media screen and (min-width:600px){.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-text{margin-left:1.5rem;margin-top:0}}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-text a{position:relative}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-text .r-item-title{display:block;font-weight:700}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-text .r-item-categorie{display:block}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-text .r-item-all{display:flex;gap:10px}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-text .r-item-all .r-item-adresse{width:36%}@media screen and (max-width:1200px){.r-wrapper .r-map{margin-top:2rem!important}.r-wrapper .r-map .leaflet-container{height:50vh!important}}.r-load-more{margin-bottom:2rem;text-align:center}.r-load-more button{background:#000;border:1px solid #0000;border-radius:10px;border-bottom-left-radius:10px;border-bottom-left-radius:0;color:#fff;display:block;font-size:14px;font-weight:700;margin:0 auto;padding:.4rem 1rem}.r-load-more button:hover{background:rgba(0,0,0,.871)}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-img{background-color:#000;background-size:cover;border-radius:5px;padding-bottom:56%;position:relative;width:100%;z-index:-1}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-img.r-item-img-placeholder{background-color:#f2f2f2}@media screen and (min-width:600px){.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-img{flex:246px 0 0;height:149px;padding-bottom:0;width:246px}}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-img div,.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-img img{border-radius:5px}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-text{display:flex;flex-direction:column;font-size:13px;gap:10px}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-text .r-item-title{font-size:18px}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-text .r-item-categorie{color:#747474;font-size:13px;font-weight:400;margin-bottom:5px;text-transform:uppercase}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-text .r-item-all{color:#727272}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-text .r-item-all a{color:#000}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-text .r-item-all .r-item-adresse .itineraty{margin-top:5px}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-text .r-item-all .r-item-adresse .itineraty:before{background-size:contain;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 7.68 10.97'%3E%3Cg data-name='Calque 2'%3E%3Cpath d='M3.84 5.21a1.37 1.37 0 1 1 1.37-1.37 1.37 1.37 0 0 1-1.37 1.37m0-5.21A3.84 3.84 0 0 0 0 3.84C0 6.72 3.84 11 3.84 11s3.84-4.28 3.84-7.16A3.84 3.84 0 0 0 3.84 0' data-name='Calque 1'/%3E%3C/g%3E%3C/svg%3E") no-repeat;content:"";display:inline-block;height:15px;vertical-align:middle;width:15px}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-text .r-item-all .r-item-campaign{width:100%}.icon-baseline{align-self:center;display:inline-flex;margin-right:.4rem}.icon-baseline svg{height:1em;position:relative;top:.125em;width:1em}.dpinlb{display:inline-block;vertical-align:top}.r-recurence-past{opacity:.5}.recurence-schedul{position:relative}.recurence-schedul-more{display:block}.recurence-modal-display{background-color:#fff;border:1px solid #dadada;border-radius:10px;box-shadow:.7px 0 5.3px rgba(0,0,0,.024),2.5px 0 17.9px rgba(0,0,0,.036),11px 0 80px #0000000f;left:0;padding:10px 15px!important;position:absolute;right:0;top:0;width:-webkit-max-content;width:max-content}.recurence-modal-display span{border-bottom:1px solid #969696;color:#000;display:block;font-size:14px;margin-bottom:.4rem}.recurence-modal-display ul{margin:0}.recurence-modal-display li{list-style:none}.recurence-modal-hide{display:none}.r-content-img{margin-top:1.5rem;padding-bottom:60%;position:relative}.r-content-header{margin-bottom:1rem}.r-content-title{margin:0}.r-content-recur-start-hours{display:flex}.news-info-title{color:#008fd2;display:block;font-weight:700;margin-bottom:1rem}.r-content-news-info{display:flex;flex-wrap:wrap;justify-content:space-between;margin-bottom:2rem}@media screen and (min-width:600px){.r-content-news-info-container{column-count:2}}.r-content-news-info-container>div{break-inside:avoid;margin:.6rem 0;padding-right:3rem}.r-content-news-info-container>div svg{width:16px}.r-content-news-info-container .r-content-news-info--date{display:flex}.r-content-news-info-container .r-content-news-info--date .r-content-date-end,.r-content-news-info-container .r-content-news-info--date .r-content-date-start,.r-content-news-info-container .r-content-news-info--date .r-content-date-start-hours{display:flex;flex-wrap:wrap}.r-content-news-info-container .r-content-news-info-social svg{height:30px;width:30px}.r-content-news-info-container .r-content-news-info-social ul{align-items:center;display:flex;margin:0}.r-content-news-info-container .r-content-news-info-social ul li{list-style:none}.r-content-news-info-container .r-content-news-info-social ul li a:hover{opacity:.7}@media screen and (max-width:1000px){.r-content-news-info-action{margin-top:1.1rem}}.r-content-news-info-action a{text-decoration:none}.r-content-news-info-action>div{margin:.6rem 0}.r-content-news-info-action .r-content-booking{margin-top:0}.r-content-news-info-action .r-content-booking a{align-items:center;background:#000;border-radius:10px;border-bottom-left-radius:0;color:#fff;cursor:pointer;display:block;display:flex;font-weight:500;gap:10px;padding:.4rem 1rem;text-decoration:none}.r-content-news-info-action .r-content-booking a svg{width:22px;fill:#fff}.r-content-news-info-action .r-content-booking a:hover{background:#3f3f3f;color:#fff}.r-content-topics{display:flex;gap:15px}.r-content-topics span{background:#f1f1f1;border-radius:5px;margin-right:5px;padding:5px}.r-content-title-cat{color:#8e8e8e;font-size:14px;margin-right:5px}smartweb-campaign{display:block;min-height:80vh}.no-map .envent-content{margin:0 auto;max-width:700px}.no-map .r-result-filter-container{position:relative;top:inherit}.no-map .r-item-title{margin-bottom:1rem!important}.no-map .r-item-text{padding-bottom:2rem}@media screen and (min-width:600px){.no-map .r-campaign-wrapper{display:block}.no-map .r-result-list{display:grid;gap:20px;grid-template-columns:1fr 1fr 1fr;max-width:1296px}.no-map .r-list-item-group{transition:all .2s ease}.no-map .r-list-item-group:focus,.no-map .r-list-item-group:hover{transform:translateY(-10px)!important}.no-map .r-list-item-group .r-list-item{box-shadow:0 8px 26px #00000014;flex-direction:column!important}.no-map .r-list-item-group .r-list-item .r-item-img{border-radius:0!important;height:0!important;margin-bottom:.5rem;padding-bottom:60%!important;width:100%!important}.no-map .r-list-item-group .r-list-item .r-item-text{display:grid;grid-template-columns:1fr 1fr;margin-right:1.5rem}.no-map .r-list-item-group .r-list-item .r-item-text:after{display:none}.no-map .r-list-item-group .r-list-item .r-item-text .r-item-categorie{grid-row-start:1}.no-map .r-list-item-group .r-list-item .r-item-text .r-item-title{font-weight:500!important;grid-column-end:3;grid-column-start:1;grid-row-start:2;margin-bottom:2rem;margin-top:1rem}.no-map .r-list-item-group .r-list-item .r-item-text .r-item-date{grid-column-start:2;grid-row-start:1;justify-self:end}}.no-map .r-result.r-campaign-result{max-width:1296px}.no-map .campaign-content{margin:0 auto;max-width:700px}.r-list-item.Publié sans vote .campaign-vote,.vote_nodisplay,figure.Publié sans vote .campaign-vote{display:none}.vote_noactif{color:#c7c7c7;filter:grayscale(30%);opacity:.6;pointer-events:none}
@@ -1 +1 @@
1
- .portaltype-imio-smartweb-directoryview #portal-breadcrumbs,.portaltype-imio-smartweb-directoryview #portal-breadcrumbs .breadcrumb,.portaltype-imio-smartweb-directoryview #portal-header{margin-bottom:0!important}.r-wrapper{position:relative}.r-wrapper figure{display:block}.r-actu-wrapper{padding-top:1rem}.r-result{position:relative}@media screen and (min-width:992px){.r-add-contact,.r-add-event,.r-add-news{bottom:0;padding-bottom:1rem;position:absolute;right:0}}.r-add-contact a,.r-add-event a,.r-add-news a{align-items:center;color:#2d2d2d;display:flex;flex-direction:row;gap:7px;text-decoration:none}.r-add-contact a:focus,.r-add-contact a:hover,.r-add-event a:focus,.r-add-event a:hover,.r-add-news a:focus,.r-add-news a:hover{text-decoration:underline}.r-list-item-link{inset:0!important;position:absolute!important}.r-list-item-group{margin:15px 0;position:relative}.r-list-item{align-items:stretch;display:flex;height:100%}.load-more-link{background:#0000;border:none;display:block;margin:0 auto}.r-content-description{font-weight:500}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-text{flex:min-content}.leaflet-popup{padding:0!important}.leaflet-container{opacity:1!important}.r-content-files{margin:2rem 0}.r-content-files-title{margin-bottom:1rem}.r-content-files .r-content-file{margin:1rem 0}.r-content-files .r-content-file-link{border:1px solid #e6e6e6;display:flex;gap:20px;justify-content:space-between;padding:1rem;text-decoration:none}.r-content-files .r-content-file-link:hover{border:1px solid #868686}.r-content-files .r-content-file-title{align-items:center;display:flex;gap:5px}.r-content-files .r-content-file-title-size{font-size:14px;opacity:.5}.r-content-files span{display:block}.r-content-gallery{margin:2rem 0}.r-content-gallery.flexbin>*,.r-content-gallery.flexbin>*>img{height:226px}.lds-roller-container{background:#ffffffd1;bottom:0;left:0;position:absolute;right:0;top:0}.lds-roller{display:inline-block;height:80px;left:50%;position:absolute;top:5rem;transform:translate(-50%,-50%);width:80px;z-index:0}.lds-roller div{animation:lds-roller 1.2s cubic-bezier(.5,0,.5,1) infinite;transform-origin:40px 40px}.lds-roller div:after{background:#333;border-radius:50%;content:" ";display:block;height:7px;margin:-4px 0 0 -4px;position:absolute;width:7px}.lds-roller div:first-child{animation-delay:-36ms}.lds-roller div:first-child:after{left:63px;top:63px}.lds-roller div:nth-child(2){animation-delay:-72ms}.lds-roller div:nth-child(2):after{left:56px;top:68px}.lds-roller div:nth-child(3){animation-delay:-.108s}.lds-roller div:nth-child(3):after{left:48px;top:71px}.lds-roller div:nth-child(4){animation-delay:-.144s}.lds-roller div:nth-child(4):after{left:40px;top:72px}.lds-roller div:nth-child(5){animation-delay:-.18s}.lds-roller div:nth-child(5):after{left:32px;top:71px}.lds-roller div:nth-child(6){animation-delay:-.216s}.lds-roller div:nth-child(6):after{left:24px;top:68px}.lds-roller div:nth-child(7){animation-delay:-.252s}.lds-roller div:nth-child(7):after{left:17px;top:63px}.lds-roller div:nth-child(8){animation-delay:-.288s}.lds-roller div:nth-child(8):after{left:12px;top:56px}@keyframes lds-roller{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.r-content-figure{aspect-ratio:16/9;background-color:#000;position:relative}.r-content-figure-blur{background-position:50%;background-size:130%;height:100%;left:0;opacity:.6;position:absolute;top:0;width:100%}.r-content-figure-img{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);height:100%;object-fit:cover;object-position:center;position:absolute;width:100%}.r-content-img-blur{height:100%;left:0;position:absolute;top:0;width:100%}.img-cover,.r-content-img-blur{background-position:50%;background-size:cover}.img-contain{background-position:50%;background-repeat:no-repeat;background-size:contain;object-fit:contain;object-position:center}.no-search-item-img{background:#000;background-position:50%!important}.no-search-item-img,.r-search-img{background-color:#c9c9c9!important}.portaltype-imio-smartweb-directoryview #portal-breadcrumbs,.portaltype-imio-smartweb-directoryview #portal-header,.portaltype-imio-smartweb-eventsview #portal-breadcrumbs,.portaltype-imio-smartweb-eventsview #portal-header,.portaltype-imio-smartweb-newsview #portal-breadcrumbs,.portaltype-imio-smartweb-newsview #portal-header{margin-bottom:0!important}.edit-rest-elements{align-items:center;display:flex;flex-direction:column;padding:10px;position:absolute;right:5px;top:5px}.edit-rest-elements-content{top:10px}.edit-rest-elements-news{padding:10px}
1
+ smartweb-annuaire,smartweb-campaign,smartweb-events,smartweb-news{display:block;min-height:80vh}.portaltype-imio-smartweb-directoryview #portal-breadcrumbs,.portaltype-imio-smartweb-directoryview #portal-breadcrumbs .breadcrumb,.portaltype-imio-smartweb-directoryview #portal-header{margin-bottom:0!important}.r-wrapper{position:relative}.r-wrapper figure{display:block}.r-actu-wrapper{padding-top:1rem}.r-result{position:relative}@media screen and (min-width:992px){.r-add-contact,.r-add-event,.r-add-news{bottom:0;padding-bottom:1rem;position:absolute;right:0}}.r-add-contact a,.r-add-event a,.r-add-news a{align-items:center;color:#2d2d2d;display:flex;flex-direction:row;gap:7px;text-decoration:none}.r-add-contact a:focus,.r-add-contact a:hover,.r-add-event a:focus,.r-add-event a:hover,.r-add-news a:focus,.r-add-news a:hover{text-decoration:underline}.r-list-item-link{inset:0!important;position:absolute!important}.r-list-item-group{margin:15px 0;position:relative}.r-list-item{align-items:stretch;display:flex;height:100%}.load-more-link{background:#0000;border:none;display:block;margin:0 auto}.r-content-description{font-weight:500}.r-wrapper .r-result-list .r-list-item-group .r-list-item .r-item-text{flex:min-content}.leaflet-popup{padding:0!important}.leaflet-container{opacity:1!important}.r-content-files{margin:2rem 0}.r-content-files-title{margin-bottom:1rem}.r-content-files .r-content-file{margin:1rem 0}.r-content-files .r-content-file-link{border:1px solid #e6e6e6;display:flex;gap:20px;justify-content:space-between;padding:1rem;text-decoration:none}.r-content-files .r-content-file-link:hover{border:1px solid #868686}.r-content-files .r-content-file-title{align-items:center;display:flex;gap:5px}.r-content-files .r-content-file-title-size{font-size:14px;opacity:.5}.r-content-files span{display:block}.r-content-gallery{margin:2rem 0}.r-content-gallery.flexbin>*,.r-content-gallery.flexbin>*>img{height:226px}.lds-roller-container{align-items:center;background:#ffffffd1;bottom:0;display:flex;flex-direction:column;gap:20px;justify-content:flex-start;left:0;padding-top:2rem;position:absolute;right:0;top:0}.lds-roller{display:inline-block;height:80px;top:5rem;width:80px;z-index:0}.lds-roller div{animation:lds-roller 1.2s cubic-bezier(.5,0,.5,1) infinite;transform-origin:40px 40px}.lds-roller div:after{background:#333;border-radius:50%;content:" ";display:block;height:7px;margin:-4px 0 0 -4px;position:absolute;width:7px}.lds-roller div:first-child{animation-delay:-36ms}.lds-roller div:first-child:after{left:63px;top:63px}.lds-roller div:nth-child(2){animation-delay:-72ms}.lds-roller div:nth-child(2):after{left:56px;top:68px}.lds-roller div:nth-child(3){animation-delay:-.108s}.lds-roller div:nth-child(3):after{left:48px;top:71px}.lds-roller div:nth-child(4){animation-delay:-.144s}.lds-roller div:nth-child(4):after{left:40px;top:72px}.lds-roller div:nth-child(5){animation-delay:-.18s}.lds-roller div:nth-child(5):after{left:32px;top:71px}.lds-roller div:nth-child(6){animation-delay:-.216s}.lds-roller div:nth-child(6):after{left:24px;top:68px}.lds-roller div:nth-child(7){animation-delay:-.252s}.lds-roller div:nth-child(7):after{left:17px;top:63px}.lds-roller div:nth-child(8){animation-delay:-.288s}.lds-roller div:nth-child(8):after{left:12px;top:56px}@keyframes lds-roller{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.r-content-figure{aspect-ratio:16/9;background-color:#000;position:relative}.r-content-figure-blur{background-position:50%;background-size:130%;height:100%;left:0;opacity:.6;position:absolute;top:0;width:100%}.r-content-figure-img{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);height:100%;object-fit:cover;object-position:center;position:absolute;width:100%}.r-content-img-blur{height:100%;left:0;position:absolute;top:0;width:100%}.img-cover,.r-content-img-blur{background-position:50%;background-size:cover}.img-contain{background-position:50%;background-repeat:no-repeat;background-size:contain;object-fit:contain;object-position:center}.no-search-item-img{background:#000;background-position:50%!important}.no-search-item-img,.r-search-img{background-color:#c9c9c9!important}.portaltype-imio-smartweb-directoryview #portal-breadcrumbs,.portaltype-imio-smartweb-directoryview #portal-header,.portaltype-imio-smartweb-eventsview #portal-breadcrumbs,.portaltype-imio-smartweb-eventsview #portal-header,.portaltype-imio-smartweb-newsview #portal-breadcrumbs,.portaltype-imio-smartweb-newsview #portal-header{margin-bottom:0!important}.edit-rest-elements{align-items:center;display:flex;flex-direction:column;padding:10px;position:absolute;right:5px;top:5px}.edit-rest-elements-content{top:10px}.edit-rest-elements-news{padding:10px}