imio.smartweb.core 1.2.81__py3-none-any.whl → 1.2.85__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 (21) hide show
  1. imio/smartweb/core/contents/sections/common_templates/carousel.pt +1 -0
  2. imio/smartweb/core/contents/sections/common_templates/table.pt +1 -0
  3. imio/smartweb/core/contents/sections/files/view.py +10 -0
  4. imio/smartweb/core/contents/sections/gallery/view.pt +1 -1
  5. imio/smartweb/core/contents/sections/gallery/views.py +11 -0
  6. imio/smartweb/core/contents/sections/links/view.py +10 -0
  7. imio/smartweb/core/contents/sections/video/views.py +52 -1
  8. imio/smartweb/core/contents/sections/views.py +4 -0
  9. imio/smartweb/core/rest/authentic_sources.py +1 -0
  10. imio/smartweb/core/tests/test_redirect_to_main_react_view.py +4 -4
  11. imio/smartweb/core/tests/test_section_gallery.py +75 -0
  12. imio/smartweb/core/tests/test_sections.py +15 -3
  13. imio/smartweb/core/utils.py +2 -1
  14. {imio.smartweb.core-1.2.81.dist-info → imio.smartweb.core-1.2.85.dist-info}/METADATA +66 -14
  15. {imio.smartweb.core-1.2.81.dist-info → imio.smartweb.core-1.2.85.dist-info}/RECORD +21 -20
  16. {imio.smartweb.core-1.2.81.dist-info → imio.smartweb.core-1.2.85.dist-info}/WHEEL +1 -1
  17. /imio.smartweb.core-1.2.81-py3.12-nspkg.pth → /imio.smartweb.core-1.2.85-py3.12-nspkg.pth +0 -0
  18. {imio.smartweb.core-1.2.81.dist-info → imio.smartweb.core-1.2.85.dist-info}/LICENSE.GPL +0 -0
  19. {imio.smartweb.core-1.2.81.dist-info → imio.smartweb.core-1.2.85.dist-info}/LICENSE.rst +0 -0
  20. {imio.smartweb.core-1.2.81.dist-info → imio.smartweb.core-1.2.85.dist-info}/namespace_packages.txt +0 -0
  21. {imio.smartweb.core-1.2.81.dist-info → imio.smartweb.core-1.2.85.dist-info}/top_level.txt +0 -0
@@ -49,6 +49,7 @@
49
49
  <a tal:omit-tag="not: item/url"
50
50
  tal:attributes="href item/url;
51
51
  class item/container_id | nothing;
52
+ title python:view.a_tag_item_title(item);
52
53
  target python:'_blank' if (open_in_new_tab and not can_edit_sections) else ''">
53
54
  <div class="swiper-image"
54
55
  tal:condition="python: item_has_image and show_lead_image"
@@ -59,6 +59,7 @@
59
59
  tal:attributes="class string:table_display ${item/container_id | nothing} ${item/smartweb_type | nothing};"
60
60
  >
61
61
  <a tal:attributes="class python:'table_image no-image' if no_icon_no_image else 'table_image';
62
+ title python:view.a_tag_item_title(item);
62
63
  href python:view.retrieve_item_url(item);
63
64
  target python:'_blank' if (open_in_new_tab and not can_edit_sections) else '';">
64
65
  <tal:if tal:condition="show_lead_image">
@@ -3,9 +3,11 @@ from imio.smartweb.core.contents import IPublication
3
3
  from imio.smartweb.core.contents.sections.views import CarouselOrTableSectionView
4
4
  from imio.smartweb.core.utils import batch_results
5
5
  from imio.smartweb.core.utils import get_scale_url
6
+ from imio.smartweb.locales import SmartwebMessageFactory as _
6
7
  from plone import api
7
8
  from plone.protect.interfaces import IDisableCSRFProtection
8
9
  from zope.component import queryMultiAdapter
10
+ from zope.i18n import translate
9
11
  from zope.interface import alsoProvides
10
12
 
11
13
 
@@ -32,6 +34,7 @@ class FilesView(CarouselOrTableSectionView):
32
34
  "url": url,
33
35
  "image": scale_url,
34
36
  "has_image": has_image,
37
+ "open_in_new_tab": True,
35
38
  }
36
39
  dict_item["item_infos"] = (
37
40
  None if file_view is None else file_view.human_readable_size()
@@ -62,3 +65,10 @@ class FilesView(CarouselOrTableSectionView):
62
65
  for prop in extra_properties:
63
66
  dict_item[prop] = getattr(item, prop, None)
64
67
  return dict_item
68
+
69
+ def a_tag_item_title(self, item):
70
+ # Files always open in a new tab
71
+ title = item.get("title") or ""
72
+ current_lang = api.portal.get_current_language()[:2]
73
+ new_tab_txt = translate(_("New tab"), target_language=current_lang)
74
+ return f"{title} ({new_tab_txt})"
@@ -38,7 +38,7 @@
38
38
  title item/title;
39
39
  data-description item/description">
40
40
  <img tal:attributes="src python:view.get_scale_url(item, thumb_scale);
41
- alt item/title;
41
+ alt python:view.alt_label(item);
42
42
  title item/title" />
43
43
  </a>
44
44
  </tal:images>
@@ -11,3 +11,14 @@ class GalleryView(SectionView, PhotoGallery):
11
11
  def get_scale_url(self, item, scale, orientation="paysage"):
12
12
  request = self.request
13
13
  return get_scale_url(item, request, "image", scale, orientation)
14
+
15
+ def alt_label(self, item):
16
+ title = item.title or ""
17
+ description = item.description or ""
18
+ # Accessibility: if title is the same as the filename, return empty string because, filename is not a good practice in alt tag for an img.
19
+ if item.image and title == item.image.filename and len(description) == 0:
20
+ title = ""
21
+ # Accessibility : Return description if longer is same or greater than title.
22
+ if len(description) >= len(title):
23
+ return description
24
+ return title
@@ -3,7 +3,9 @@
3
3
  from imio.smartweb.core.contents.sections.views import CarouselOrTableSectionView
4
4
  from imio.smartweb.core.utils import batch_results
5
5
  from imio.smartweb.core.utils import get_scale_url
6
+ from imio.smartweb.locales import SmartwebMessageFactory as _
6
7
  from plone import api
8
+ from zope.i18n import translate
7
9
 
8
10
 
9
11
  class LinksView(CarouselOrTableSectionView):
@@ -41,3 +43,11 @@ class LinksView(CarouselOrTableSectionView):
41
43
  }
42
44
  )
43
45
  return batch_results(results, self.context.nb_results_by_batch)
46
+
47
+ def a_tag_item_title(self, item):
48
+ title = item.get("title") or ""
49
+ if item.get("open_in_new_tab", False):
50
+ current_lang = api.portal.get_current_language()[:2]
51
+ new_tab_txt = translate(_("New tab"), target_language=current_lang)
52
+ return f"{title} ({new_tab_txt})"
53
+ return title
@@ -1,10 +1,61 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
3
  from embeddify import Embedder
4
+ from embeddify import Vimeo
5
+ from embeddify import YouTube
6
+ from embeddify.embeddify import STANDARD_PLUGINS
4
7
  from imio.smartweb.core.contents.sections.views import SectionView
8
+ from imio.smartweb.locales import SmartwebMessageFactory as _
9
+ from plone import api
10
+ from zope.i18n import translate
11
+
12
+ import html
5
13
 
6
14
 
7
15
  class VideoView(SectionView):
8
16
  def get_embed_video(self, width=800, height=600):
9
- embedder = Embedder(width=width, height=height)
17
+ plugins = STANDARD_PLUGINS
18
+ plugins = [
19
+ SmartwebYoutube() if isinstance(plugin, YouTube) else plugin
20
+ for plugin in plugins
21
+ ]
22
+ plugins = [
23
+ SmartwebVimeo() if isinstance(plugin, Vimeo) else plugin
24
+ for plugin in plugins
25
+ ]
26
+ embedder = Embedder(width=width, height=height, plugins=plugins)
10
27
  return embedder(self.context.video_url, params=dict(autoplay=False))
28
+
29
+
30
+ class SmartwebYoutube(YouTube):
31
+
32
+ def do_request(self, parts, config):
33
+ if self.test(parts):
34
+ res = super(SmartwebYoutube, self).do_request(parts, config)
35
+ title = res.get("title", "")
36
+ current_lang = api.portal.get_current_language()[:2]
37
+ additional_accessibility_info = translate(
38
+ _("Youtube video"), target_language=current_lang
39
+ )
40
+ res["title"] = f"{title} ({additional_accessibility_info})"
41
+ if title != "":
42
+ res["html"] = res["html"].replace(html.escape(title), res["title"])
43
+ return res
44
+ return
45
+
46
+
47
+ class SmartwebVimeo(Vimeo):
48
+
49
+ def do_request(self, parts, config):
50
+ if self.test(parts):
51
+ res = super(SmartwebVimeo, self).do_request(parts, config)
52
+ title = res.get("title", "")
53
+ current_lang = api.portal.get_current_language()[:2]
54
+ additional_accessibility_info = translate(
55
+ _("Vimeo video"), target_language=current_lang
56
+ )
57
+ res["title"] = f"{title} ({additional_accessibility_info})"
58
+ if title != "":
59
+ res["html"] = res["html"].replace(html.escape(title), res["title"])
60
+ return res
61
+ return
@@ -100,6 +100,10 @@ class SectionView(BrowserView):
100
100
  )
101
101
  return json.dumps({"id": section_size, "title": size_txt})
102
102
 
103
+ def a_tag_item_title(self, item):
104
+ title = item.get("title") or ""
105
+ return title
106
+
103
107
 
104
108
  class CarouselOrTableSectionView(SectionView):
105
109
  """Section view that can display a carousel"""
@@ -48,6 +48,7 @@ class BaseRequestForwarder(Service):
48
48
  else:
49
49
  token = get_wca_token(self.client_id, self.client_secret)
50
50
  headers = {"Accept": "application/json", "Authorization": token}
51
+ self.request.form.pop("wcatoken", None)
51
52
  if is_log_active():
52
53
  logger.info("======== Forwarding request to AUTHENTIC SOURCE =========")
53
54
  logger.info(f"url to forward : {url} ({method})")
@@ -59,21 +59,21 @@ class TestRedirectToMainReactView(ImioSmartwebTestCase):
59
59
  transaction.commit()
60
60
  rest_view_url = v.absolute_url()
61
61
  browser.open(f"{self.portal_url}/@@{k}_view")
62
- self.assertEquals(browser.url, rest_view_url)
62
+ self.assertEqual(browser.url, rest_view_url)
63
63
 
64
64
  v = api.content.move(v, folder)
65
65
  transaction.commit()
66
66
  rest_view_url = v.absolute_url()
67
67
  browser.open(f"{self.portal_url}/@@{k}_view")
68
- self.assertEquals(browser.url, rest_view_url)
68
+ self.assertEqual(browser.url, rest_view_url)
69
69
 
70
70
  obj = api_lng.translate(v, target_language="de")
71
71
  api.content.transition(obj, "publish")
72
72
  transaction.commit()
73
73
  browser.open(f"{self.portal_url}/@@{k}_view?language=de")
74
- self.assertEquals(browser.url, obj.absolute_url())
74
+ self.assertEqual(browser.url, obj.absolute_url())
75
75
 
76
76
  api.content.delete(v)
77
77
  transaction.commit()
78
78
  browser.open(f"{self.portal_url}/@@{k}_view")
79
- self.assertEquals(browser.url, self.portal_url)
79
+ self.assertEqual(browser.url, self.portal_url)
@@ -0,0 +1,75 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ from imio.smartweb.core.testing import IMIO_SMARTWEB_CORE_INTEGRATION_TESTING
4
+ from imio.smartweb.core.testing import ImioSmartwebTestCase
5
+ from imio.smartweb.core.tests.utils import make_named_image
6
+ from plone import api
7
+ from plone.app.testing import login
8
+ from plone.app.testing import logout
9
+ from plone.app.testing import setRoles
10
+ from plone.app.testing import TEST_USER_ID
11
+ from plone.namedfile.file import NamedBlobImage
12
+ from zope.component import queryMultiAdapter
13
+
14
+
15
+ class TestSectionGallery(ImioSmartwebTestCase):
16
+ layer = IMIO_SMARTWEB_CORE_INTEGRATION_TESTING
17
+
18
+ def setUp(self):
19
+ self.request = self.layer["request"]
20
+ self.portal = self.layer["portal"]
21
+ setRoles(self.portal, TEST_USER_ID, ["Manager"])
22
+ self.page = api.content.create(
23
+ container=self.portal,
24
+ type="imio.smartweb.Page",
25
+ id="page",
26
+ )
27
+
28
+ def test_alt_label(self):
29
+ gallery_section = api.content.create(
30
+ container=self.page,
31
+ type="imio.smartweb.SectionGallery",
32
+ title="Gallery section",
33
+ )
34
+ blob_image = NamedBlobImage(**make_named_image("plone.png"))
35
+
36
+ # image1 has no defined title (by default img blob filename) and no description
37
+ image1 = api.content.create(
38
+ container=gallery_section,
39
+ type="Image",
40
+ title="plone.png",
41
+ )
42
+ image1.image = blob_image
43
+
44
+ # image2 has a defined title and no description
45
+ image2 = api.content.create(
46
+ container=gallery_section,
47
+ type="Image",
48
+ title="Kamoulox",
49
+ )
50
+ image2.image = blob_image
51
+
52
+ # image3 has a defined title and description (greater than title)
53
+ image3 = api.content.create(
54
+ container=gallery_section,
55
+ type="Image",
56
+ title="Hello Plone !",
57
+ )
58
+ image3.image = blob_image
59
+ image3.description = "Hello Plone, what's up ?!"
60
+
61
+ # image4 has a defined title and a mistaked blank description (smaller than title)
62
+ image4 = api.content.create(
63
+ container=gallery_section,
64
+ type="Image",
65
+ title="Hello Plone !",
66
+ )
67
+ # This is a mistaked blank description
68
+ image4.image = blob_image
69
+ image4.description = " "
70
+
71
+ view = queryMultiAdapter((gallery_section, self.request), name="view")
72
+ self.assertEqual(view.alt_label(image1), "")
73
+ self.assertEqual(view.alt_label(image2), "Kamoulox")
74
+ self.assertEqual(view.alt_label(image3), "Hello Plone, what's up ?!")
75
+ self.assertEqual(view.alt_label(image4), "Hello Plone !")
@@ -116,6 +116,14 @@ class TestSections(ImioSmartwebTestCase):
116
116
  self.assertIn(
117
117
  "https://www.youtube.com/embed/_dOAthafoGQ?feature=oembed", embedded_video
118
118
  )
119
+ self.assertIn("(Youtube video)", embedded_video)
120
+
121
+ section.video_url = "https://vimeo.com/110990510"
122
+ view = queryMultiAdapter((section, self.request), name="view")
123
+ embedded_video = view.get_embed_video()
124
+ self.assertIn("iframe", embedded_video)
125
+ self.assertIn("https://player.vimeo.com/video/110990510", embedded_video)
126
+ self.assertIn("(Vimeo video)", embedded_video)
119
127
 
120
128
  def test_external_content_section(self):
121
129
  setRoles(self.portal, TEST_USER_ID, ["Contributor"])
@@ -283,6 +291,7 @@ class TestSections(ImioSmartwebTestCase):
283
291
  logout()
284
292
  view = queryMultiAdapter((page, self.request), name="full_view")()
285
293
  self.assertEqual(view.count('<h2 class="section-title">Title of my '), 5)
294
+
286
295
  login(self.portal, "test")
287
296
  gallery_section = getattr(page, "title-of-my-imio-smartweb-sectiongallery")
288
297
  api.content.create(
@@ -290,6 +299,7 @@ class TestSections(ImioSmartwebTestCase):
290
299
  type="Image",
291
300
  title="Image",
292
301
  )
302
+
293
303
  files_section = getattr(page, "title-of-my-imio-smartweb-sectionfiles")
294
304
  file_obj = api.content.create(
295
305
  container=files_section,
@@ -297,12 +307,14 @@ class TestSections(ImioSmartwebTestCase):
297
307
  title="My file",
298
308
  )
299
309
  file_obj.file = NamedBlobFile(data="file data", filename="file.txt")
310
+
300
311
  links_section = getattr(page, "title-of-my-imio-smartweb-sectionlinks")
301
312
  api.content.create(
302
313
  container=links_section,
303
314
  type="imio.smartweb.BlockLink",
304
315
  title="My link",
305
316
  )
317
+
306
318
  view = queryMultiAdapter((page, self.request), name="full_view")()
307
319
  self.assertEqual(
308
320
  view.count('<h2 class="section-title">Title of my '), len(section_types)
@@ -531,12 +543,12 @@ class TestSections(ImioSmartwebTestCase):
531
543
  )
532
544
  view = getMultiAdapter((self.page, self.request), name="full_view")
533
545
  self.assertIn(
534
- '<a class="table_image no-image" href="http://nohost/plone/page/section-links/my-link" target="">',
546
+ '<a class="table_image no-image" title="My link" href="http://nohost/plone/page/section-links/my-link" target="">',
535
547
  view(),
536
548
  )
537
549
  link.image = NamedBlobImage(**make_named_image())
538
550
  self.assertIn(
539
- '<a class="table_image" href="http://nohost/plone/page/section-links/my-link" target="">',
551
+ '<a class="table_image" title="My link" href="http://nohost/plone/page/section-links/my-link" target="">',
540
552
  view(),
541
553
  )
542
554
  link.open_in_new_tab = True
@@ -548,7 +560,7 @@ class TestSections(ImioSmartwebTestCase):
548
560
  clear_cache(self.request)
549
561
  view = getMultiAdapter((self.page, self.request), name="full_view")
550
562
  self.assertIn(
551
- '<a class="table_image" href="http://nohost/plone/page/section-links/my-link" target="_blank">',
563
+ '<a class="table_image" title="My link (New tab)" href="http://nohost/plone/page/section-links/my-link" target="_blank">',
552
564
  view(),
553
565
  )
554
566
  link.remoteUrl = "http://www.perdu.com"
@@ -59,7 +59,8 @@ def concat_voca_title(title1, title2):
59
59
 
60
60
 
61
61
  def get_json(url, auth=None, timeout=5):
62
- headers = {"Accept": "application/json"}
62
+ language = api.portal.get_current_language()
63
+ headers = {"Accept": "application/json", "Cookie": f"I18N_LANGUAGE={language}"}
63
64
  if auth is not None:
64
65
  headers["Authorization"] = auth
65
66
  try:
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: imio.smartweb.core
3
- Version: 1.2.81
3
+ Version: 1.2.85
4
4
  Summary: Core product for iMio websites
5
5
  Home-page: https://github.com/imio/imio.smartweb.core
6
6
  Author: Christophe Boulanger
@@ -17,18 +17,18 @@ Classifier: Framework :: Plone :: Addon
17
17
  Classifier: Framework :: Plone :: 6.0
18
18
  Classifier: Programming Language :: Python
19
19
  Classifier: Programming Language :: Python :: 3
20
- Classifier: Programming Language :: Python :: 3.8
21
- Classifier: Programming Language :: Python :: 3.9
22
20
  Classifier: Programming Language :: Python :: 3.10
21
+ Classifier: Programming Language :: Python :: 3.11
22
+ Classifier: Programming Language :: Python :: 3.12
23
23
  Classifier: Operating System :: OS Independent
24
24
  Classifier: License :: OSI Approved :: GNU General Public License v2 (GPLv2)
25
- Requires-Python: >=3.8
25
+ Requires-Python: >=3.10
26
26
  License-File: LICENSE.GPL
27
27
  License-File: LICENSE.rst
28
28
  Requires-Dist: setuptools
29
29
  Requires-Dist: z3c.jbot
30
30
  Requires-Dist: z3c.unconfigure
31
- Requires-Dist: plone.api >=1.8.4
31
+ Requires-Dist: plone.api>=1.8.4
32
32
  Requires-Dist: plone.gallery
33
33
  Requires-Dist: plone.restapi
34
34
  Requires-Dist: plone.app.dexterity
@@ -49,14 +49,26 @@ Requires-Dist: more-itertools
49
49
  Requires-Dist: imio.smartweb.common
50
50
  Requires-Dist: imio.smartweb.locales
51
51
  Provides-Extra: test
52
- Requires-Dist: plone.app.testing ; extra == 'test'
53
- Requires-Dist: plone.testing >=5.0.0 ; extra == 'test'
54
- Requires-Dist: plone.app.contenttypes ; extra == 'test'
55
- Requires-Dist: plone.app.robotframework[debug] ; extra == 'test'
56
- Requires-Dist: plone.restapi[test] ; extra == 'test'
57
- Requires-Dist: requests-mock ; extra == 'test'
58
- Requires-Dist: beautifulsoup4 ; extra == 'test'
59
- Requires-Dist: freezegun ; extra == 'test'
52
+ Requires-Dist: plone.app.testing; extra == "test"
53
+ Requires-Dist: plone.testing>=5.0.0; extra == "test"
54
+ Requires-Dist: plone.app.contenttypes; extra == "test"
55
+ Requires-Dist: plone.app.robotframework[debug]; extra == "test"
56
+ Requires-Dist: plone.restapi[test]; extra == "test"
57
+ Requires-Dist: requests-mock; extra == "test"
58
+ Requires-Dist: beautifulsoup4; extra == "test"
59
+ Requires-Dist: freezegun; extra == "test"
60
+ Dynamic: author
61
+ Dynamic: author-email
62
+ Dynamic: classifier
63
+ Dynamic: description
64
+ Dynamic: home-page
65
+ Dynamic: keywords
66
+ Dynamic: license
67
+ Dynamic: project-url
68
+ Dynamic: provides-extra
69
+ Dynamic: requires-dist
70
+ Dynamic: requires-python
71
+ Dynamic: summary
60
72
 
61
73
  .. This README is meant for consumption by humans and pypi. Pypi can render rst files so please do not use Sphinx features.
62
74
  If you want to learn more about writing documentation, please check out: http://docs.plone.org/about/documentation_styleguide.html
@@ -191,6 +203,46 @@ Changelog
191
203
  =========
192
204
 
193
205
 
206
+ 1.2.85 (2025-02-10)
207
+ -------------------
208
+
209
+ - WEB-3538 : Accessibility : Add video source information in title attribute of the iframe
210
+ [boulch]
211
+
212
+ - WEB-4217 : Accessibility : Warn the user that the link will open in a new tab (title attribute)
213
+ [boulch]
214
+
215
+ - WEB-3872 : Accessibility : Files in "files section" are automaticaly open in a new (target blank) tab
216
+ [boulch]
217
+
218
+ - WEB-4211 : Accessibility : Improve behavior of the "alt" attribute for images in a gallery section
219
+ [boulch]
220
+
221
+
222
+ 1.2.84 (2025-01-29)
223
+ -------------------
224
+
225
+ - Update Python classifiers to be compatible with Python 3.12
226
+ [remdub]
227
+
228
+
229
+ 1.2.83 (2025-01-29)
230
+ -------------------
231
+
232
+ - Migrate to Plone 6.0.14
233
+ [boulch]
234
+
235
+ - WEB-4206 : Remove wcatoken from query parameters when forwarding requests
236
+ [remdub]
237
+
238
+
239
+ 1.2.82 (2025-01-23)
240
+ -------------------
241
+
242
+ - WEB-4153 : Add language cookie to python requests to avoid cache problems
243
+ [remdub]
244
+
245
+
194
246
  1.2.81 (2025-01-15)
195
247
  -------------------
196
248
 
@@ -1,4 +1,4 @@
1
- imio.smartweb.core-1.2.81-py3.12-nspkg.pth,sha256=XZ3YhlzwpUCC8tXtelHRqxVxo3NWomIiMsUfUshrbeE,1011
1
+ imio.smartweb.core-1.2.85-py3.12-nspkg.pth,sha256=XZ3YhlzwpUCC8tXtelHRqxVxo3NWomIiMsUfUshrbeE,1011
2
2
  imio/smartweb/core/__init__.py,sha256=iwhKnzeBJLKxpRVjvzwiRE63_zNpIBfaKLITauVph-0,24
3
3
  imio/smartweb/core/config.py,sha256=BUgfvh4hCaw0onCYAG4gQI1O4hZ-GzXWEltdHi4YLIs,337
4
4
  imio/smartweb/core/configure.zcml,sha256=PeC4rF--rF6MfVQ0NzggQrZWIl35oPtJdEhvQwGxhhI,1459
@@ -12,7 +12,7 @@ imio/smartweb/core/subscribers.py,sha256=zOmwTw0XvE6_bdoZI7qQln_W__7MxXCnKh6QwNK
12
12
  imio/smartweb/core/subscribers.zcml,sha256=BnrxZp4AfsRYreYHsJJxKgPQZJ-wpNM2XnDTuDUbBkA,1616
13
13
  imio/smartweb/core/testing.py,sha256=t0Y3t3FXX2RjgklcRzHT37AjKbMKL3ZjjT3d2UhQm7A,3636
14
14
  imio/smartweb/core/testing.zcml,sha256=VyKjWW2QHYuUYKkGUvtsdFI_Pa7Wcp1yBBDla112eMc,172
15
- imio/smartweb/core/utils.py,sha256=krc0msUa9cHIALgT1RpqMXAslusg3FswRy4aY5o6oIo,7597
15
+ imio/smartweb/core/utils.py,sha256=dQzbLYiJh55dtQ0qekQNr2tPCiXVABiMPjTpcf2zj3U,7685
16
16
  imio/smartweb/core/vocabularies.py,sha256=ZzdnK7m0dPogoKSrtdTjsxCQjaSqgVDAL9YPWMOHync,22905
17
17
  imio/smartweb/core/vocabularies.zcml,sha256=KSH7JWlAJtKawLvfmsztZzE_AK1JR6B5udY6tleY2cQ,5904
18
18
  imio/smartweb/core/behaviors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -241,13 +241,13 @@ imio/smartweb/core/contents/sections/base.py,sha256=2e3lIG_RGGFAshBEkTNG97OReAnn
241
241
  imio/smartweb/core/contents/sections/configure.zcml,sha256=fPfYvU7YvezfjKPRT_yPcZgjmyUX9VZFb-6jUJiERqM,2767
242
242
  imio/smartweb/core/contents/sections/macros.pt,sha256=tvWBh40KuwWpOAu327NWZAwixvpWMMKdaOyIxMp0o-k,5579
243
243
  imio/smartweb/core/contents/sections/subscriber.py,sha256=WM7nEZVPOkmyT1GfkWGDWwLhuhUYaTnlBr6BJVqUJMk,642
244
- imio/smartweb/core/contents/sections/views.py,sha256=739Mm8cNrHz_JUdCD-x80tQXuxj2DocqpjYL19TxcnY,5977
244
+ imio/smartweb/core/contents/sections/views.py,sha256=Fbh4vwW54QIJorJNexnQYnCwAsEoZnCLCrYBEUuBnx0,6077
245
245
  imio/smartweb/core/contents/sections/collection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
246
246
  imio/smartweb/core/contents/sections/collection/configure.zcml,sha256=Ak4UbKFjogWZad6-5_y6oSx8tWXt3nN7bEdKXG7pQCI,920
247
247
  imio/smartweb/core/contents/sections/collection/content.py,sha256=DMmU9rIaRlbRjIaot5RHXu59vJmAbun0FCmyahWhBCM,2379
248
248
  imio/smartweb/core/contents/sections/collection/views.py,sha256=G8Q7zlFmuEKKCmAGLj5cVL3axebzf5ZlSVRYx9q45U4,1470
249
- imio/smartweb/core/contents/sections/common_templates/carousel.pt,sha256=vcRaxpkNYQHjyIcLJEiOPEZ2yOvZKkXr_28utTbDk5U,5694
250
- imio/smartweb/core/contents/sections/common_templates/table.pt,sha256=_s0F0PfUSvvuj6malb9EMgAel3YW83rxJGTC7Iq4gbI,7475
249
+ imio/smartweb/core/contents/sections/common_templates/carousel.pt,sha256=7TiEYMm090RGS55f77aUOfGJmAoP3zI6XCWtYQ6SWxA,5774
250
+ imio/smartweb/core/contents/sections/common_templates/table.pt,sha256=_XPptTPmlO1AbyFDVvYQ6ysOKU2s_NQGgTBHnFNDNnA,7558
251
251
  imio/smartweb/core/contents/sections/contact/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
252
252
  imio/smartweb/core/contents/sections/contact/configure.zcml,sha256=WjyGXO7alNf4yDW5dZCS_xQ_AYbQVQuRVRIeoyLIBzY,1591
253
253
  imio/smartweb/core/contents/sections/contact/content.py,sha256=MdhY6QPMdCseThddjwZ0e7xzkx1-p21MBuwqEic1f90,2690
@@ -273,12 +273,12 @@ imio/smartweb/core/contents/sections/external_content/views.py,sha256=KPOjV4HBXH
273
273
  imio/smartweb/core/contents/sections/files/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
274
274
  imio/smartweb/core/contents/sections/files/configure.zcml,sha256=DyyHzDEKLWmOywbV08Zf7bvf0At5jyAeDfZ8PCK5Rog,501
275
275
  imio/smartweb/core/contents/sections/files/content.py,sha256=C3jEokoNKIE-1cQlaWD-aKLfPDG6k8YasJeZxOR8swk,1088
276
- imio/smartweb/core/contents/sections/files/view.py,sha256=zIbPyNT07vqcI9_m9WE2eFgcSoxiO8zCc8oeRt-3aZc,2583
276
+ imio/smartweb/core/contents/sections/files/view.py,sha256=dGS1dqfq-J-kBz1UZWoFPF6czeBR_woDrEX5l0BxNY4,3017
277
277
  imio/smartweb/core/contents/sections/gallery/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
278
278
  imio/smartweb/core/contents/sections/gallery/configure.zcml,sha256=0fq5_PWU9vFrmPkExvFPBCzZrDSnlN8B0K7fHQReAvA,424
279
279
  imio/smartweb/core/contents/sections/gallery/content.py,sha256=l6HLGVNi70gcEP-zz9OXi2WYtyd-V6LCAZH44a2Td_s,780
280
- imio/smartweb/core/contents/sections/gallery/view.pt,sha256=3GLYQdPukj3bj07b5tTTQr98e8JYk5NjixihR4BZ8Eo,2058
281
- imio/smartweb/core/contents/sections/gallery/views.py,sha256=pQRD2jq1fR4pEhStrbys2xdJHVW6C2sdrqvCHzMvHCE,451
280
+ imio/smartweb/core/contents/sections/gallery/view.pt,sha256=pyBTNWejZfKCH8mVI3ntcN-jh7LdTLQQrGfN5DzojSY,2075
281
+ imio/smartweb/core/contents/sections/gallery/views.py,sha256=EpWWLBUmCq3jMkRdhZMh2Rrw9nAStgXTOApE6OqLXmY,994
282
282
  imio/smartweb/core/contents/sections/html/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
283
283
  imio/smartweb/core/contents/sections/html/configure.zcml,sha256=KsYNQY72doYTDf8Oa-5j147pOJYXqLPPBF7AtvMxDck,413
284
284
  imio/smartweb/core/contents/sections/html/content.py,sha256=6O1fD-6mEo_QEsuOJN80kPTsX0lLXBsqyIk0PBcjn2E,1352
@@ -286,7 +286,7 @@ imio/smartweb/core/contents/sections/html/view.pt,sha256=PY_z5Mn52IygWoMxAIEkbep
286
286
  imio/smartweb/core/contents/sections/links/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
287
287
  imio/smartweb/core/contents/sections/links/configure.zcml,sha256=rE-UWiubwkPYU6VvfxM1AH3UTr06WfsItEG1dSX9G8w,918
288
288
  imio/smartweb/core/contents/sections/links/content.py,sha256=drUefjzRnT3wFxIjVZ31qqaR-BGhWN5ffmcmnEeI5tQ,1051
289
- imio/smartweb/core/contents/sections/links/view.py,sha256=mMjSThkfhGODDBw0Yfv42CB61epDnFGwHzMNNVKCfzA,1664
289
+ imio/smartweb/core/contents/sections/links/view.py,sha256=Vxv12_pt3NpdocARCi1rrry77qU3jkU9YLEXdQoqn_8,2096
290
290
  imio/smartweb/core/contents/sections/map/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
291
291
  imio/smartweb/core/contents/sections/map/configure.zcml,sha256=8ocTq-RfXM7BvGHyHrhySzYAvKhwXrc5lyrABNSb2H0,412
292
292
  imio/smartweb/core/contents/sections/map/content.py,sha256=z5maHOFl0BpzFHRgEVrae7TnW9qU-aRXj_m9Z3CWtd0,372
@@ -324,7 +324,7 @@ imio/smartweb/core/contents/sections/video/__init__.py,sha256=47DEQpj8HBSa-_TImW
324
324
  imio/smartweb/core/contents/sections/video/configure.zcml,sha256=fB2sr0jyVajOXCIuQuDVzAGm-KV5yRpxFvEyrLm3CEE,418
325
325
  imio/smartweb/core/contents/sections/video/content.py,sha256=zWba02hLpdbzvbXoRDw4wgnABZ5w6iwmEb6Jd_-rpEU,978
326
326
  imio/smartweb/core/contents/sections/video/view.pt,sha256=RFya2M82XzAcV5UwJfAcamLmsv-n8Egwn1BEmWhE8lg,1105
327
- imio/smartweb/core/contents/sections/video/views.py,sha256=kyrpigOP6bg9bNHoO-jeU6RYrCzMRKlE6BStKbczy_s,342
327
+ imio/smartweb/core/contents/sections/video/views.py,sha256=4YQQuJonxRUm2DeY3fFo9dzd9owKCkzmKpAys-01yt0,2172
328
328
  imio/smartweb/core/faceted/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
329
329
  imio/smartweb/core/faceted/configure.zcml,sha256=xuZzXBOMGu87KNLuFIQ8gHz8fxct7lDwSbCHl1Y1Hec,826
330
330
  imio/smartweb/core/faceted/layout.py,sha256=9WCr3U7cEy0SmfI1cXBijR1bF4DVXQ684LzGpD-MNMw,395
@@ -394,7 +394,7 @@ imio/smartweb/core/profiles/testing/types/imio.smartweb.NewsView.xml,sha256=6Rpf
394
394
  imio/smartweb/core/profiles/uninstall/browserlayer.xml,sha256=K8KnZFW9E6Hwi61Z6XZlXOjUpAKzJR6HjmjoOjFEWrk,128
395
395
  imio/smartweb/core/profiles/validation/contentrules.xml,sha256=QyX3E0ihDOMhaJPrKPRqRiCUvPoghs3fwYOj_eNtbqw,4626
396
396
  imio/smartweb/core/rest/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
397
- imio/smartweb/core/rest/authentic_sources.py,sha256=ZH7kHNAow_t6pnEObZ_x2jfnHi0pZOrr9OO6MQHiG_8,4957
397
+ imio/smartweb/core/rest/authentic_sources.py,sha256=GesGFal1TsEN6LRwI_idcpoxJ6bBzYYxV4Lfk2plqtQ,5005
398
398
  imio/smartweb/core/rest/configure.zcml,sha256=3tEU99M_deyoRN0YeIVQmPk7NL88gjYtXZOT8QmSbN4,2891
399
399
  imio/smartweb/core/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
400
400
  imio/smartweb/core/tests/test_banner.py,sha256=83Q86ezLMJVwCLxoJddmlE9GKR3h6Qyb-rbqVSFc8a0,7838
@@ -421,16 +421,17 @@ imio/smartweb/core/tests/test_page.py,sha256=1dD9M_6nwS6M2OuyWmT5cPq5qnxnog3tcqF
421
421
  imio/smartweb/core/tests/test_plausibleview.py,sha256=G1ryfnz3TuQBG8VFO5KzEylT5DFABW58PQuuvPq_ccY,3229
422
422
  imio/smartweb/core/tests/test_portal_page.py,sha256=hIqg4eb91o8BsSj7eSKdvoxehzOXt8bzpg1o5ej__zg,7215
423
423
  imio/smartweb/core/tests/test_procedure.py,sha256=0w8phOwYfpp9vb3KDsnwjX8AhQXWdodA06W4koderQo,6474
424
- imio/smartweb/core/tests/test_redirect_to_main_react_view.py,sha256=k4gU6xBIA5m8Vrb27rt8nWCs8ix2Lf9j49WnIXl4eO0,2990
424
+ imio/smartweb/core/tests/test_redirect_to_main_react_view.py,sha256=3Pa_4BAmyz67onEaHochsubdEqszAMf2j0lkscEY50c,2986
425
425
  imio/smartweb/core/tests/test_rest.py,sha256=t7dp7YWUCKR75tsU3vVOzAy9HivGBWuMJoeMpuKOXbM,27374
426
426
  imio/smartweb/core/tests/test_robot.py,sha256=NQ7AkN4tEva3bgGjMxmyqY0zIo4pJPnPOwnD9hmrTVI,926
427
427
  imio/smartweb/core/tests/test_search.py,sha256=VryeRI4_5CvnStKOoNoG95M2WTy7Lyy_AhHIDG40M14,2182
428
428
  imio/smartweb/core/tests/test_section_contact.py,sha256=BiJPxb67d7zURE5Dtk-9xOUbuJitcQ7YnlzDS1sT-cE,27344
429
429
  imio/smartweb/core/tests/test_section_events.py,sha256=7eP-HmXp0D3gvOrjVpzVPmV9nF_PKERnmOGz1G3Z0l0,8641
430
430
  imio/smartweb/core/tests/test_section_external_content.py,sha256=JI_zm3160ryO8a6NjtcmcboUJdJDa7lEX6ommbxlGao,7617
431
+ imio/smartweb/core/tests/test_section_gallery.py,sha256=Hg4QjMm6R6mq0bbCFWOnLOqnzECCOWAHiOCvhee3hZE,2687
431
432
  imio/smartweb/core/tests/test_section_news.py,sha256=6S7-r6ZnpeN_JdLYLZMWbHKRzeuf5ynPWnox2DDFPZk,9126
432
433
  imio/smartweb/core/tests/test_section_sendinblue.py,sha256=UmmKo33T9feelumxqeejM4HG4oLRPKJkbB8hkLO144E,2661
433
- imio/smartweb/core/tests/test_sections.py,sha256=7lxfneqdJku9sX5u_4Pvg9DWcmMFOE7KH04ojIqdcGQ,24767
434
+ imio/smartweb/core/tests/test_sections.py,sha256=zOILZHSXOw7vk-6QaibjIrbbfOAeDRk1iSgYI47TGgU,25249
434
435
  imio/smartweb/core/tests/test_setup.py,sha256=JcbMnXTNCuB_8grFh5E1kZ0uALdATlKMbahAdGfToZI,2092
435
436
  imio/smartweb/core/tests/test_sitemap.py,sha256=AhFvUhzpkUg5XAwVcK3obXXrOEJYwhQZC3XrWeZtnP0,6674
436
437
  imio/smartweb/core/tests/test_social.py,sha256=GVHkF4c8Ygnm09J1aGxhklbtd6b-1Fy8M7NnYmjRvfI,3046
@@ -756,10 +757,10 @@ imio/smartweb/core/webcomponents/src/utils/Map.jsx,sha256=cYuZykMIaLjr4KiLvmS4aY
756
757
  imio/smartweb/core/webcomponents/src/utils/Map.scss,sha256=xXWz0O-JBwSZrzz2XeQdN4nZEOjppU2sVFtlLQOitQ8,77
757
758
  imio/smartweb/core/webcomponents/src/utils/translation.js,sha256=5YDHwdaRNWFWOgyNd7YejoAdcDvnvAENo3Xn0GDT8P8,8941
758
759
  imio/smartweb/core/webcomponents/src/utils/url.js,sha256=iyl_1QXfPBgUn0LEbZYT_zMEEjmj5DMiEz44Z6AKLcg,244
759
- imio.smartweb.core-1.2.81.dist-info/LICENSE.GPL,sha256=gXf5dRMhNSbfLPYYTY_5hsZ1r7UU1OaKQEAQUhuIBkM,18092
760
- imio.smartweb.core-1.2.81.dist-info/LICENSE.rst,sha256=RzkMFz6AX3-cHd531zd2YQcXai8RIbjFWTs6m66Y5u4,653
761
- imio.smartweb.core-1.2.81.dist-info/METADATA,sha256=w375PAw3CwzcYY_CVYg_m7p_CD0RkSPSrpucZU_dySI,59134
762
- imio.smartweb.core-1.2.81.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
763
- imio.smartweb.core-1.2.81.dist-info/namespace_packages.txt,sha256=Pg8AH8t9viMMW1hJbNZvTy_n2jXG2igIYUpon5RA4Js,19
764
- imio.smartweb.core-1.2.81.dist-info/top_level.txt,sha256=ZktC0EGzThvMTAin9_q_41rzvvfMT2FYbP8pbhSLMSA,5
765
- imio.smartweb.core-1.2.81.dist-info/RECORD,,
760
+ imio.smartweb.core-1.2.85.dist-info/LICENSE.GPL,sha256=gXf5dRMhNSbfLPYYTY_5hsZ1r7UU1OaKQEAQUhuIBkM,18092
761
+ imio.smartweb.core-1.2.85.dist-info/LICENSE.rst,sha256=RzkMFz6AX3-cHd531zd2YQcXai8RIbjFWTs6m66Y5u4,653
762
+ imio.smartweb.core-1.2.85.dist-info/METADATA,sha256=rvWW0CJWCe4V629I_BJhYuNS4319O4HYE99jupMpXSs,60268
763
+ imio.smartweb.core-1.2.85.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
764
+ imio.smartweb.core-1.2.85.dist-info/namespace_packages.txt,sha256=Pg8AH8t9viMMW1hJbNZvTy_n2jXG2igIYUpon5RA4Js,19
765
+ imio.smartweb.core-1.2.85.dist-info/top_level.txt,sha256=ZktC0EGzThvMTAin9_q_41rzvvfMT2FYbP8pbhSLMSA,5
766
+ imio.smartweb.core-1.2.85.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.1.0)
2
+ Generator: setuptools (75.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5