Merge default dev-dc
authorDamien Correia
Tue, 20 Nov 2018 15:18:10 +0100
branchdev-dc
changeset 237 df13285543de
parent 218 549c215da6ce (current diff)
parent 236 829f481fe2a6 (diff)
child 238 df8da54d790a
Merge default
--- a/.hgtags	Tue Nov 13 14:50:38 2018 +0100
+++ b/.hgtags	Tue Nov 20 15:18:10 2018 +0100
@@ -13,3 +13,5 @@
 a948e0a00f5ce1f6d79d559ade979a3397f0d722 0.1.12
 39482eb2520fa8610d376e575c10dc2bcc79abc6 0.1.13
 fe7f30ba737d6790b949bac378f8539dcb3ab62f 0.1.14
+57a4e27aa1c4c87748db4caff29068e5905e0497 0.1.15
+d93f3085e2616c3e0f6499925b3ce056e8f4f08f 0.1.16
--- a/buildout.cfg	Tue Nov 13 14:50:38 2018 +0100
+++ b/buildout.cfg	Tue Nov 20 15:18:10 2018 +0100
@@ -79,4 +79,4 @@
 eggs = pyams_default_theme [test]
 
 [versions]
-pyams_default_theme = 0.1.15
+pyams_default_theme = 0.1.16
--- a/docs/HISTORY.txt	Tue Nov 13 14:50:38 2018 +0100
+++ b/docs/HISTORY.txt	Tue Nov 20 15:18:10 2018 +0100
@@ -1,6 +1,16 @@
 History
 =======
 
+0.1.16
+------
+ - added results internal OID into view's preview
+ - updated templates, resources and styles
+
+0.1.15
+------
+ - add site folder's default views to handle automatic redirections
+ - moved all front-office skin's related features from PyAMS_content package
+
 0.1.14
 ------
  - updated default fonts
--- a/setup.py	Tue Nov 13 14:50:38 2018 +0100
+++ b/setup.py	Tue Nov 20 15:18:10 2018 +0100
@@ -22,7 +22,7 @@
 README = os.path.join(DOCS, 'README.txt')
 HISTORY = os.path.join(DOCS, 'HISTORY.txt')
 
-version = '0.1.15'
+version = '0.1.16'
 long_description = open(README).read() + '\n\n' + open(HISTORY).read()
 
 tests_require = []
--- a/src/pyams_default_theme.egg-info/PKG-INFO	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme.egg-info/PKG-INFO	Tue Nov 20 15:18:10 2018 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: pyams-default-theme
-Version: 0.1.14
+Version: 0.1.16
 Summary: PyAMS default theme
 Home-page: http://hg.ztfy.org/pyams/pyams_default_theme
 Author: Thierry Florac
@@ -11,6 +11,16 @@
         History
         =======
         
+        0.1.16
+        ------
+         - added results internal OID into view's preview
+         - updated templates, resources and styles
+        
+        0.1.15
+        ------
+         - add site folder's default views to handle automatic redirections
+         - moved all front-office skin's related features from PyAMS_content package
+        
         0.1.14
         ------
          - updated default fonts
--- a/src/pyams_default_theme.egg-info/SOURCES.txt	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme.egg-info/SOURCES.txt	Tue Nov 20 15:18:10 2018 +0100
@@ -6,6 +6,7 @@
 src/pyams_default_theme/include.py
 src/pyams_default_theme/layer.py
 src/pyams_default_theme/page.py
+src/pyams_default_theme/routes.py
 src/pyams_default_theme/skin.py
 src/pyams_default_theme.egg-info/PKG-INFO
 src/pyams_default_theme.egg-info/SOURCES (Copie en conflit de xsup98-004 2018-03-10).txt
@@ -24,6 +25,7 @@
 src/pyams_default_theme/component/association/templates/association-remote-content.pt
 src/pyams_default_theme/component/association/templates/association-viewlet.pt
 src/pyams_default_theme/component/gallery/__init__.py
+src/pyams_default_theme/component/gallery/templates/renderer-carousel.pt
 src/pyams_default_theme/component/gallery/templates/renderer-default.pt
 src/pyams_default_theme/component/illustration/__init__.py
 src/pyams_default_theme/component/illustration/interfaces/__init__.py
@@ -38,6 +40,7 @@
 src/pyams_default_theme/component/paragraph/__init__.py
 src/pyams_default_theme/component/paragraph/audio.py
 src/pyams_default_theme/component/paragraph/contact.py
+src/pyams_default_theme/component/paragraph/container.py
 src/pyams_default_theme/component/paragraph/frame.py
 src/pyams_default_theme/component/paragraph/html.py
 src/pyams_default_theme/component/paragraph/keypoint.py
@@ -70,6 +73,7 @@
 src/pyams_default_theme/component/paragraph/templates/verbatim-right.pt
 src/pyams_default_theme/component/paragraph/templates/video-default.pt
 src/pyams_default_theme/component/paragraph/zmi/__init__.py
+src/pyams_default_theme/component/paragraph/zmi/contact.py
 src/pyams_default_theme/component/paragraph/zmi/frame.py
 src/pyams_default_theme/component/paragraph/zmi/map.py
 src/pyams_default_theme/component/video/__init__.py
@@ -86,6 +90,7 @@
 src/pyams_default_theme/features/header/__init__.py
 src/pyams_default_theme/features/header/interfaces.py
 src/pyams_default_theme/features/header/skin/__init__.py
+src/pyams_default_theme/features/header/skin/interfaces.py
 src/pyams_default_theme/features/header/skin/templates/simple-header.pt
 src/pyams_default_theme/features/header/zmi/__init__.py
 src/pyams_default_theme/features/menu/__init__.py
@@ -96,6 +101,13 @@
 src/pyams_default_theme/features/menu/portlet/navigation/templates/double-vertical.pt
 src/pyams_default_theme/features/menu/portlet/navigation/templates/simple-horizontal-tabs.pt
 src/pyams_default_theme/features/menu/portlet/navigation/templates/simple-horizontal.pt
+src/pyams_default_theme/features/renderer/__init__.py
+src/pyams_default_theme/features/search/__init__.py
+src/pyams_default_theme/features/sitemap/__init__.py
+src/pyams_default_theme/features/sitemap/templates/humans.pt
+src/pyams_default_theme/features/sitemap/templates/robots.pt
+src/pyams_default_theme/features/sitemap/templates/root-sitemap.pt
+src/pyams_default_theme/features/sitemap/templates/tool-sitemap.pt
 src/pyams_default_theme/interfaces/__init__.py
 src/pyams_default_theme/locales/pyams_default_theme.pot
 src/pyams_default_theme/locales/fr/LC_MESSAGES/pyams_default_theme.mo
@@ -103,23 +115,38 @@
 src/pyams_default_theme/resources/css/pyams-default.css
 src/pyams_default_theme/resources/css/pyams-default.css.map
 src/pyams_default_theme/resources/css/pyams-default.min.css
+src/pyams_default_theme/resources/css/ext/ekko-lightbox.css
+src/pyams_default_theme/resources/css/ext/ekko-lightbox.min.css
 src/pyams_default_theme/resources/img/dot.png
 src/pyams_default_theme/resources/js/pyams-default.js
 src/pyams_default_theme/resources/js/pyams-default.min.js
+src/pyams_default_theme/resources/js/ext/ekko-lightbox.js
+src/pyams_default_theme/resources/js/ext/ekko-lightbox.js.map
+src/pyams_default_theme/resources/js/ext/ekko-lightbox.min.js
+src/pyams_default_theme/resources/js/ext/ekko-lightbox.min.js.map
 src/pyams_default_theme/resources/less/pyams-default.less
 src/pyams_default_theme/shared/__init__.py
 src/pyams_default_theme/shared/common/__init__.py
+src/pyams_default_theme/shared/common/navigation.py
+src/pyams_default_theme/shared/common/oid.py
+src/pyams_default_theme/shared/common/opengraph.py
+src/pyams_default_theme/shared/common/summary.py
+src/pyams_default_theme/shared/common/url.py
 src/pyams_default_theme/shared/common/portlet/__init__.py
 src/pyams_default_theme/shared/common/portlet/head.py
 src/pyams_default_theme/shared/common/portlet/title.py
 src/pyams_default_theme/shared/common/portlet/templates/head.pt
 src/pyams_default_theme/shared/common/portlet/templates/title.pt
+src/pyams_default_theme/shared/form/__init__.py
 src/pyams_default_theme/shared/imagemap/__init__.py
 src/pyams_default_theme/shared/imagemap/templates/imagemap-default.pt
 src/pyams_default_theme/shared/imagemap/templates/render.pt
 src/pyams_default_theme/shared/logo/__init__.py
 src/pyams_default_theme/shared/logo/templates/logos-default.pt
 src/pyams_default_theme/shared/site/__init__.py
+src/pyams_default_theme/shared/site/breadcrumb.py
+src/pyams_default_theme/shared/site/folder.py
+src/pyams_default_theme/shared/site/link.py
 src/pyams_default_theme/shared/site/portlet/__init__.py
 src/pyams_default_theme/shared/site/portlet/templates/site-summary.pt
 src/pyams_default_theme/shared/view/__init__.py
@@ -135,6 +162,8 @@
 src/pyams_default_theme/viewlet/__init__.py
 src/pyams_default_theme/viewlet/banner/__init__.py
 src/pyams_default_theme/viewlet/banner/templates/banner.pt
+src/pyams_default_theme/viewlet/breadcrumb/__init__.py
+src/pyams_default_theme/viewlet/breadcrumb/breadcrumbs.pt
 src/pyams_default_theme/viewlet/logo/__init__.py
 src/pyams_default_theme/viewlet/logo/templates/logo.pt
 src/pyams_default_theme/viewlet/tag/__init__.py
--- a/src/pyams_default_theme/__init__.py	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/__init__.py	Tue Nov 20 15:18:10 2018 +0100
@@ -12,12 +12,12 @@
 
 __docformat__ = 'restructuredtext'
 
+from fanstatic import Resource, Library
+from pyramid.i18n import TranslationStringFactory
 
-from fanstatic import Resource, Library
-from pyams_skin import myams_js, bootstrap_css, bootstrap
+from pyams_skin import bootstrap_css, bootstrap, bootstrap_modal_css, myams_js
 from pyams_utils.fanstatic import ExternalResource
 
-from pyramid.i18n import TranslationStringFactory
 _ = TranslationStringFactory('pyams_default_theme')
 
 
@@ -28,13 +28,26 @@
 
 pyams_default_theme_css = Resource(library, 'css/pyams-default.css',
                                    minified='css/pyams-default.min.css',
-                                   depends=[bootstrap_css, pyams_default_theme_fonts])
+                                   depends=(bootstrap_css, pyams_default_theme_fonts))
 
 pyams_default_theme = Resource(library, 'js/pyams-default.js',
                                minified='js/pyams-default.min.js',
-                               depends=[bootstrap, myams_js, pyams_default_theme_css],
+                               depends=(bootstrap, myams_js, pyams_default_theme_css),
                                bottom=True)
 
+#
+# External extensions
+#
+
+lightbox_css = Resource(library, 'css/ext/ekko-lightbox.css',
+                        minified='css/ext/ekko-lightbox.min.css',
+                        depends=(bootstrap_modal_css,))
+
+lightbox = Resource(library, 'js/ext/ekko-lightbox.js',
+                    minified='js/ext/ekko-lightbox.min.js',
+                    depends=(bootstrap, lightbox_css),
+                    bottom=True)
+
 
 def includeme(config):
     """Pyramid include"""
--- a/src/pyams_default_theme/component/gallery/__init__.py	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/component/gallery/__init__.py	Tue Nov 20 15:18:10 2018 +0100
@@ -19,7 +19,7 @@
 from pyams_template.template import template_config
 from pyams_utils.adapter import adapter_config
 
-from pyams_default_theme import _
+from pyams_default_theme import _, lightbox
 
 
 class BaseGalleryRenderer(BaseContentRenderer):
@@ -31,5 +31,19 @@
 class DefaultGalleryRenderer(BaseGalleryRenderer):
     """Default gallery renderer"""
 
-    label = _("Default gallery renderer")
+    label = _("Default grid gallery renderer")
     weight = 1
+
+    i18n_context_attrs = ('title',)
+    resources = (lightbox,)
+
+
+@adapter_config(name='carousel-sm', context=(IBaseGallery, IPyAMSLayer), provides=IContentRenderer)
+@template_config(template='templates/renderer-carousel.pt', layer=IPyAMSLayer)
+class CarouselGalleryRenderer(BaseGalleryRenderer):
+    """Carousel gallery renderer"""
+
+    label = _("Carousel gallery renderer")
+    weight = 2
+
+    i18n_context_attrs = ('title',)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_default_theme/component/gallery/templates/renderer-carousel.pt	Tue Nov 20 15:18:10 2018 +0100
@@ -0,0 +1,38 @@
+<h3>${view.title}</h3>
+<div tal:define="cache_key tales:cache_key(context)"
+	 i18n:domain="pyams_default_theme"
+	 id="carousel-${cache_key}"
+	 class="carousel slide col-lg-8 col-md-8 col-lg-offset-2 col-md-offset-2" data-ride="carousel">
+	<!-- Indicators -->
+	<ol class="carousel-indicators">
+		<li tal:repeat="image context.get_visible_medias()"
+			class="${'active' if repeat.image.start() else None}"
+			data-target="#carousel-${cache_key}"
+			data-slide-to="${repeat.image.index}"></li>
+	</ol>
+	<!-- Wrapper for slides -->
+	<div class="carousel-inner" role="listbox">
+		<div tal:repeat="image context.get_visible_medias()"
+			 class="item ${'active' if repeat.image.start() else None}">
+			<tal:var define="image_data i18n:image.data;
+							 alt i18n:image.title;">
+				${structure:tales:picture(image_data, alt=alt)}
+			</tal:var>
+			<div class="carousel-caption">
+				<h3>${i18n:image.title}</h3>
+				<p tal:define="description i18n:image.description">
+					${structure:tales:html(description)}
+				</p>
+			</div>
+		</div>
+	</div>
+	<!-- Controls -->
+	<a class="left carousel-control" href="#carousel-${cache_key}" role="button" data-slide="prev">
+		<span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
+		<span class="sr-only" i18n:translate="">Previous</span>
+	</a>
+	<a class="right carousel-control" href="#carousel-${cache_key}" role="button" data-slide="next">
+		<span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
+		<span class="sr-only" i18n:translate="">Next</span>
+	</a>
+</div>
--- a/src/pyams_default_theme/component/gallery/templates/renderer-default.pt	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/component/gallery/templates/renderer-default.pt	Tue Nov 20 15:18:10 2018 +0100
@@ -1,23 +1,23 @@
-<div i18n:domain="pyams_content">
-	<tal:loop repeat="image context.get_visible_medias()">
-		<picture tal:define="image_data i18n:image.data;
-							 image_url tales:absolute_url(image_data);
-							 timestamp tales:timestamp(image);">
-			<!-- xs source -->
-			<source media="(max-width: 767px)"
-					srcset="${image_url}/++thumb++w768?_=${timestamp}" />
-			<!-- sm source -->
-			<source media="(max-width: 991px)"
-					srcset="${image_url}/++thumb++w992?_=${timestamp}" />
-			<!-- md source -->
-			<source media="(max-width: 1199px)"
-					srcset="${image_url}/++thumb++w1200?_=${timestamp}" />
-			<!-- lg source -->
-			<source media="(min-width: 1200px)"
-					srcset="${image_url}/++thumb++w1600?_=${timestamp}" />
-			<!-- fallback image -->
-			<img style="width: 100%;"
-				 tal:attributes="alt i18n:image.alt_title; src image_url" />
-		</picture>
-	</tal:loop>
+<h3>${view.title}</h3>
+<div tal:define="cache_key tales:cache_key(context)"
+	 i18n:domain="pyams_default_theme"
+	 id="gallery-${cache_key}"
+	 class="gallery gallery-grid"
+	 data-wrapping="false">
+	<div tal:repeat="image context.get_visible_medias()"
+		 class="item col-lg-3 col-md-4 col-sm-4 col-xs-6">
+		<div class="legend">${i18n:image.title}</div>
+		<a data-toggle="lightbox"
+		   data-type="image"
+		   data-gallery="gallery-${cache_key}"
+		   data-title="${i18n:image.title}"
+		   data-footer="${i18n:image.author}"
+		   tal:define="image_data i18n:image.data;
+					   alt i18n:image.title;"
+		   href="${tales:absolute_url(image_data)}">
+			${structure:tales:picture(image_data, lg_width=3, md_width=4, sm_width=4,
+									  xs_width=6, css_class='img_responsive', alt=alt)}
+		</a>
+		<div class="author">${i18n:image.author}</div>
+	</div>
 </div>
--- a/src/pyams_default_theme/component/illustration/__init__.py	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/component/illustration/__init__.py	Tue Nov 20 15:18:10 2018 +0100
@@ -35,7 +35,7 @@
 from pyams_utils.adapter import ContextRequestViewAdapter, adapter_config, get_annotation_adapter
 from pyams_utils.interfaces.tales import ITALESExtension
 
-from pyams_default_theme import _
+from pyams_default_theme import _, lightbox
 
 
 #
@@ -184,6 +184,8 @@
     position = ILLUSTRATION_BEFORE_BODY
     settings_interface = IIllustrationWithZoomSettings
 
+    resources = (lightbox,)
+
 
 @adapter_config(name='right+zoom', context=(IIllustration, IPyAMSLayer), provides=IContentRenderer)
 @template_config(template='templates/illustration-right.pt', layer=IPyAMSLayer)
@@ -196,6 +198,8 @@
     position = ILLUSTRATION_BEFORE_BODY
     settings_interface = IIllustrationWithZoomSettings
 
+    resources = (lightbox,)
+
 
 @adapter_config(name='default', context=(IIllustration, IPyAMSLayer), provides=IContentRenderer)
 @template_config(template='templates/illustration-default.pt', layer=IPyAMSLayer)
--- a/src/pyams_default_theme/component/illustration/templates/illustration-default.pt	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/component/illustration/templates/illustration-default.pt	Tue Nov 20 15:18:10 2018 +0100
@@ -1,7 +1,8 @@
-<div class="text-center margin-y-5">
+<div class="illustration margin-y-5">
+	<h2>${view.title}</h2>
 	<tal:var define="image view.data"
 			 condition="image">
 		${structure:tales:picture(image, alt=view.alt_title)}
 	</tal:var>
-	<span tal:content="view.title">legend</span>
+	<div class="author">${view.author}</div>
 </div>
--- a/src/pyams_default_theme/component/illustration/templates/illustration-left.pt	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/component/illustration/templates/illustration-left.pt	Tue Nov 20 15:18:10 2018 +0100
@@ -1,15 +1,18 @@
-<div class="pull-left col-xs-12 col-sm-6 col-md-6 col-lg-5 margin-10"
+<div class="illustration pull-left col-xs-12 col-sm-6 col-md-6 col-lg-5 margin-10"
+	 tal:define="settings view.settings"
 	 tal:condition="view.data">
-	<a class="fancybox" data-toggle
-	   data-ams-fancybox-type="image"
+	<a data-toggle="${'lightbox' if settings.zoom_on_click else None}"
+	   data-type="image"
+	   data-title="${view.title}"
+	   data-footer="${view.author}"
 	   tal:omit-tag="not:view.settings.zoom_on_click"
 	   tal:define="image view.data;
-				   thumbnails tales:thumbnails(image);
+				   thumbnails tales:thumbnails(view.data);
 				   target thumbnails.get_thumbnail('800x600');"
 	   tal:attributes="href tales:absolute_url(target)">
 		<tal:if condition="image">
 			${structure:tales:picture(image, lg_width=5, md_width=6, sm_width=6, alt=view.alt_title)}
 		</tal:if>
-		<span tal:content="view.title">legend</span>
-	</a><br />
+	</a>
+	<div class="author">${view.title}</div>
 </div>
--- a/src/pyams_default_theme/component/illustration/templates/illustration-right.pt	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/component/illustration/templates/illustration-right.pt	Tue Nov 20 15:18:10 2018 +0100
@@ -1,7 +1,10 @@
-<div class="pull-right col-xs-12 col-sm-6 col-md-6 col-lg-5 margin-10"
+<div class="illustration pull-right col-xs-12 col-sm-6 col-md-6 col-lg-5 margin-10"
+	 tal:define="settings view.settings"
 	 tal:condition="view.data">
-	<a class="fancybox" data-toggle
-	   data-ams-fancybox-type="image"
+	<a data-toggle="${'lightbox' if settings.zoom_on_click else None}"
+	   data-type="image"
+	   data-title="${view.title}"
+	   data-footer="${view.author}"
 	   tal:omit-tag="not:view.settings.zoom_on_click"
 	   tal:define="image view.data;
 				   thumbnails tales:thumbnails(view.data);
@@ -10,6 +13,6 @@
 		<tal:if condition="image">
 			${structure:tales:picture(image, lg_width=5, md_width=6, sm_width=6, alt=view.alt_title)}
 		</tal:if>
-		<span tal:content="view.title">legend</span>
-	</a><br />
+	</a>
+	<div class="author">${view.title}</div>
 </div>
--- a/src/pyams_default_theme/component/keynumber/portlet/templates/horizontal-render.pt	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/component/keynumber/portlet/templates/horizontal-render.pt	Tue Nov 20 15:18:10 2018 +0100
@@ -1,4 +1,4 @@
-<div tal:define="settings view.settings" i18n:domain="pyams_content">
+<div tal:define="settings view.settings" i18n:domain="pyams_default_theme">
 	<strong tal:define="title i18n:settings.title"
 			tal:condition="title">
 		<tal:var content="title"/><br /></strong>
--- a/src/pyams_default_theme/component/keynumber/portlet/templates/vertical-render.pt	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/component/keynumber/portlet/templates/vertical-render.pt	Tue Nov 20 15:18:10 2018 +0100
@@ -1,4 +1,4 @@
-<div tal:define="settings view.settings" i18n:domain="pyams_content">
+<div tal:define="settings view.settings" i18n:domain="pyams_default_theme">
 	<strong tal:define="title i18n:settings.title"
 			tal:condition="title">
 		<tal:var content="title"/><br /></strong>
--- a/src/pyams_default_theme/component/keynumber/templates/keynumber-default.pt	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/component/keynumber/templates/keynumber-default.pt	Tue Nov 20 15:18:10 2018 +0100
@@ -1,19 +1,19 @@
-<tal:var i18n:domain="pyams_default_theme"
-         define="numbers list(view.keynumbers.get_visible_items())">
-	<h3>${i18n:view.title}</h3>
-		<div class="col-md-3 col-lg-3"
-			 tal:repeat="number numbers">
-			<div class="panel panel-default">
-				<div class="panel-heading">
-					<span class="lead">${i18n:number.label}</span>
-				</div>
-				<div class="panel-body text-align-center">
-					<span class="h4 text-success">${i18n:number.number}</span>
-					<span class="h5">${i18n:number.unit}</span>
-				</div>
-				<div class="panel-footer">
-					<p>${i18n:number.text}</p>
-				</div>
+<tal:var i18n:domain="pyams_default_theme">
+	<h3>${view.title}</h3>
+	<div class="col-md-3 col-lg-3"
+		 tal:repeat="number view.keynumbers.get_visible_items()">
+		<div class="panel panel-default">
+			<div class="panel-heading">
+				<span class="lead">${i18n:number.label}</span>
+			</div>
+			<div class="panel-body text-align-center">
+				<span class="h4 text-success">${i18n:number.number}</span>
+				<span class="h5">${i18n:number.unit}</span>
+			</div>
+			<div class="panel-footer">
+				<p>${i18n:number.text}</p>
 			</div>
 		</div>
+	</div>
+	<div class="clearfix"></div>
 </tal:var>
--- a/src/pyams_default_theme/component/paragraph/milestone.py	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/component/paragraph/milestone.py	Tue Nov 20 15:18:10 2018 +0100
@@ -12,7 +12,9 @@
 
 __docformat__ = 'restructuredtext'
 
-from pyams_content.component.paragraph.interfaces.milestone import IMilestoneParagraph
+from pyramid.decorator import reify
+
+from pyams_content.component.paragraph.interfaces.milestone import IMilestoneParagraph, IMilestoneContainer
 from pyams_content.features.renderer.interfaces import IContentRenderer
 from pyams_default_theme.features.renderer import BaseContentRenderer
 from pyams_skin.layer import IPyAMSLayer
@@ -35,3 +37,14 @@
     weight = 1
 
     i18n_context_attrs = ('title', 'body')
+
+    @reify
+    def milestones(self):
+        return IMilestoneContainer(self.context)
+
+    @property
+    def has_anchors(self):
+        for milestone in self.milestones.values():
+            if milestone.anchor is not None:
+                return True
+        return False
--- a/src/pyams_default_theme/component/paragraph/pictogram.py	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/component/paragraph/pictogram.py	Tue Nov 20 15:18:10 2018 +0100
@@ -34,6 +34,8 @@
     label = _("Default pictograms renderer")
     weight = 1
 
+    i18n_context_attrs = ('title',)
+
     @property
     def pictograms(self):
         yield from IPictogramContainer(self.context).get_visible_items()
--- a/src/pyams_default_theme/component/paragraph/templates/contact-default.pt	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/component/paragraph/templates/contact-default.pt	Tue Nov 20 15:18:10 2018 +0100
@@ -1,13 +1,37 @@
-<div class="bordered contact padding-10"
+<div class="contact-card"
 	 tal:define="settings view.settings">
 	<h3 tal:content="view.title">Contact title</h3>
 	<div tal:condition="settings.can_display_photo"
-		 tal:attributes="class string:thumbnail photo pull-${settings.photo_position}">
-		<img tal:attributes="src tales:absolute_url(view.photo, '++thumb++w128')" />
+		 class="thumbnail photo pull-${settings.photo_position}">
+		${structure:tales:picture(view.photo, lg_width=3, md_width=3, sm_width=4, xs_width=4)}
 	</div>
 	<div tal:condition="settings.can_display_map"
 		 tal:attributes="class string:map pull-${settings.map_position}">
 		Location map
 	</div>
-	<strong tal:content="view.name">Contact name</strong><br />
+	<address>
+		<strong class="contact-name">${view.name}</strong><br />
+		<tal:if condition="view.charge">
+			${view.charge}<br />
+		</tal:if>
+		<tal:if condition="view.company">
+			<strong>${view.company}</strong><br />
+		</tal:if>
+		<div class="address"
+			 tal:condition="view.address">
+			${structure:tales:html(view.address)}
+		</div>
+		<tal:if condition="view.contact_email">
+			<span i18n:translate="">Contact email:</span>
+			<a href="mailto:${view.contact_email}">
+				${view.contact_email}
+			</a><br />
+		</tal:if>
+		<tal:if condition="view.phone_number">
+			<span i18n:translate="">Phone number:</span>
+			<a href="tel:${view.phone_number}">
+				${view.phone_number}
+			</a><br />
+		</tal:if>
+	</address>
 </div><div class="clearfix"></div>
--- a/src/pyams_default_theme/component/paragraph/templates/frame-default.pt	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/component/paragraph/templates/frame-default.pt	Tue Nov 20 15:18:10 2018 +0100
@@ -1,9 +1,8 @@
-<div class="bordered frame padding-10"
-	 tal:define="settings view.settings;
-				 renderer view.illustration_renderer;
-				 position getattr(renderer, 'position', None) if renderer is not None else None;"
-	 tal:switch="position">
-	<tal:var case="'before-title'">${structure:renderer.render())}</tal:var>
+<blockquote tal:define="settings view.settings;
+						renderer view.illustration_renderer;
+						position getattr(renderer, 'position', None) if renderer is not None else None;"
+			tal:switch="position">
+	<tal:var case="'before-title'">${structure:renderer.render()}</tal:var>
 	<h3 tal:condition="view.title and (position != 'before-title')">${view.title}</h3>
 	<tal:var case="'before-body'">${structure:renderer.render()}</tal:var>
 	<p tal:replace="structure view.body">body</p>
@@ -12,4 +11,4 @@
 	<tal:if condition="settings.display_associations">
 		${structure:provider:pyams.associations}
 	</tal:if>
-</div>
+</blockquote>
--- a/src/pyams_default_theme/component/paragraph/templates/frame-left.pt	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/component/paragraph/templates/frame-left.pt	Tue Nov 20 15:18:10 2018 +0100
@@ -1,10 +1,9 @@
-<div class="bordered frame padding-10 pull-left"
-	 tal:define="settings view.settings;
-				 renderer view.illustration_renderer;
-				 position getattr(renderer, 'position', None) if renderer is not None else None;"
-	 tal:attributes="class string:${default} col-md-${settings.relative_width}"
-	 tal:switch="position">
-	<tal:var case="'before-title'">${structure:renderer.render())}</tal:var>
+<blockquote tal:define="settings view.settings;
+						renderer view.illustration_renderer;
+						position getattr(renderer, 'position', None) if renderer is not None else None;"
+			class="pull-left col-md-${settings.relative_width}"
+			tal:switch="position">
+	<tal:var case="'before-title'">${structure:renderer.render()}</tal:var>
 	<h3 tal:condition="view.title and (position != 'before-title')">${view.title}</h3>
 	<tal:var case="'before-body'">${structure:renderer.render()}</tal:var>
 	<p tal:replace="structure view.body">body</p>
@@ -13,4 +12,4 @@
 	<tal:if condition="settings.display_associations">
 		${structure:provider:pyams.associations}
 	</tal:if>
-</div>
+</blockquote>
--- a/src/pyams_default_theme/component/paragraph/templates/frame-right.pt	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/component/paragraph/templates/frame-right.pt	Tue Nov 20 15:18:10 2018 +0100
@@ -1,10 +1,9 @@
-<div class="bordered frame padding-10 pull-right"
-	 tal:define="settings view.settings;
-				 renderer view.illustration_renderer;
-				 position getattr(renderer, 'position', None) if renderer is not None else None;"
-	 tal:attributes="class string:${default} col-md-${settings.relative_width}"
-	 tal:switch="position">
-	<tal:var case="'before-title'">${structure:renderer.render())}</tal:var>
+<blockquote tal:define="settings view.settings;
+						renderer view.illustration_renderer;
+						position getattr(renderer, 'position', None) if renderer is not None else None;"
+			class="pull-right col-md-${settings.relative_width}"
+			tal:switch="position">
+	<tal:var case="'before-title'">${structure:renderer.render()}</tal:var>
 	<h3 tal:condition="view.title and (position != 'before-title')">${view.title}</h3>
 	<tal:var case="'before-body'">${structure:renderer.render()}</tal:var>
 	<p tal:replace="structure view.body">body</p>
@@ -13,4 +12,4 @@
 	<tal:if condition="settings.display_associations">
 		${structure:provider:pyams.associations}
 	</tal:if>
-</div>
+</blockquote>
--- a/src/pyams_default_theme/component/paragraph/templates/keypoints-default.pt	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/component/paragraph/templates/keypoints-default.pt	Tue Nov 20 15:18:10 2018 +0100
@@ -1,8 +1,14 @@
-<div class="bordered margin-bottom-10 padding-10"
-	 tal:define="keypoints view.keypoints"
-	 tal:condition="keypoints">
-	<ul class="inside">
-		<li tal:repeat="item keypoints"
-			tal:content="item">item</li>
-	</ul>
+<div class="keypoints"
+	 tal:define="keypoints view.keypoints">
+	<div class="panel panel-default">
+		<div class="panel-heading">
+			<h3 class="panel-title">${view.title}</h3>
+		</div>
+		<div class="panel-body">
+			<ul class="inside">
+				<li tal:repeat="item keypoints"
+					tal:content="item">item</li>
+			</ul>
+		</div>
+	</div>
 </div>
--- a/src/pyams_default_theme/component/paragraph/templates/milestone-default.pt	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/component/paragraph/templates/milestone-default.pt	Tue Nov 20 15:18:10 2018 +0100
@@ -0,0 +1,13 @@
+<tal:var i18n:domain="pyams_default_theme">
+	<h3>${view.title}</h3>
+	<div class="milestones">
+		<tal:loop repeat="item view.milestones.get_visible_items()">
+			<div class="item">
+				<strong>${i18n:item.title}</strong><br />
+				<div>${i18n:item.label}</div>
+			</div>
+			<div class="arrow"
+				 tal:condition="not:repeat.item.end()">&gt;</div>
+		</tal:loop>
+	</div>
+</tal:var>
\ No newline at end of file
--- a/src/pyams_default_theme/component/paragraph/templates/pictogram-default.pt	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/component/paragraph/templates/pictogram-default.pt	Tue Nov 20 15:18:10 2018 +0100
@@ -0,0 +1,23 @@
+<div class="pictograms" i18n:domain="pyams_default_theme">
+	<h3>${view.title}</h3>
+	<div class="col-md-8 col-md-offset-2">
+		<div class="col-sm-4 col-xs-6"
+			 tal:repeat="picto_item view.pictograms">
+			<div class="picto"
+				 tal:define="pictogram picto_item.pictogram"
+				 tal:condition="pictogram">
+				<div class="icon"
+					 tal:define="image i18n:pictogram.image"
+					 tal:condition="image">
+					${structure:tales:thumbnail(image, 'auto', '100%')}
+				</div>
+				<span class="title">${i18n:picto_item.label}</span>
+				<span class="desc"
+					  tal:define="body i18n:picto_item.body">
+					${structure:tales:html(body)}
+				</span>
+			</div>
+		</div>
+	</div>
+	<div class="clearfix"></div>
+</div>
\ No newline at end of file
--- a/src/pyams_default_theme/component/paragraph/templates/verbatim-default.pt	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/component/paragraph/templates/verbatim-default.pt	Tue Nov 20 15:18:10 2018 +0100
@@ -1,29 +1,31 @@
-<div class="bordered verbatim padding-20"
+<div class="verbatim"
 	 tal:define="settings view.settings;
 				 illustration tales:pyams_illustration(context);
 				 display_illustration view.can_display_illustration()">
-	<tal:if condition="display_illustration and illustration">
-		<div class="illustration col-md-2"
-			 tal:define="photo i18n:illustration.data;
-						 alt i18n:illustration.alt_title;"
-			 tal:condition="photo">
-			${structure:tales:picture(photo, lg_thumb='portrait', md_thumb='portrait',
-											 sm_thumb='portrait', xs_thumb='portrait', alt=alt)}
-		</div>
-		<div class="author col-md-4">
-			<span tal:content="view.author">Author</span><br />
-			<span tal:content="view.charge">Charge</span>
+	<div class="panel panel-default">
+		<div class="panel-heading">
+			<h3 class="panel-title">${view.title}</h3>
 		</div>
-		<div class="quote col-md-5"
-			 tal:content="tales:html(view.quote)">Quote</div>
-	</tal:if>
-	<tal:if condition="not:display_illustration">
-		<div class="quote"
-			 tal:content="structure tales:html(view.quote)">Quote</div>
-		<div class="author">
-			${view.author}
-			<tal:if condition="view.author and view.charge">, </tal:if>
-			${view.charge}
+		<div class="panel-body">
+			<tal:if condition="display_illustration and illustration">
+				<div class="illustration col-md-2 col-sm-3 hidden-xs"
+					 tal:define="photo i18n:illustration.data;
+								 alt i18n:illustration.alt_title;"
+					 tal:condition="photo">
+					${structure:tales:picture(photo, lg_thumb='portrait', md_thumb='portrait',
+													 sm_thumb='portrait', xs_thumb='portrait', alt=alt)}
+				</div>
+			</tal:if>
+			<div class="col-md-10 col-sm-9 col-xs-12"
+				 tal:omit-tag="not:display_illustration">
+				<div class="quote"
+					 tal:content="structure tales:html(view.quote)">Quote</div>
+				<div class="author">
+					<strong>${view.author}</strong>
+					<tal:if condition="view.author and view.charge">, </tal:if>
+					${view.charge}
+				</div>
+			</div>
 		</div>
-	</tal:if>
+	</div>
 </div>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_default_theme/component/paragraph/zmi/contact.py	Tue Nov 20 15:18:10 2018 +0100
@@ -0,0 +1,38 @@
+#
+# Copyright (c) 2008-2015 Thierry Florac <tflorac AT ulthar.net>
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+
+__docformat__ = 'restructuredtext'
+
+from pyramid.decorator import reify
+
+from pyams_content.component.paragraph.interfaces.contact import IContactParagraph, have_gis
+from pyams_content.features.renderer.zmi import RendererPropertiesEditForm
+from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
+from pyams_form.form import ajax_config
+from pyams_pagelet.pagelet import pagelet_config
+from pyams_skin.layer import IPyAMSLayer
+
+
+@pagelet_config(name='renderer-properties.html', context=IContactParagraph, layer=IPyAMSLayer,
+                permission=MANAGE_CONTENT_PERMISSION)
+@ajax_config(name='renderer-properties.json', context=IContactParagraph, layer=IPyAMSLayer)
+class ContactParagraphRendererPropertiesEditForm(RendererPropertiesEditForm):
+    """Contact paragraph renderer properties edit form"""
+
+    dialog_class = 'modal-large'
+
+    @reify
+    def fields(self):
+        fields = super(ContactParagraphRendererPropertiesEditForm, self).fields
+        if not have_gis:
+            fields = fields.omit('display_map', 'map_position')
+        return fields
--- a/src/pyams_default_theme/features/header/__init__.py	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/features/header/__init__.py	Tue Nov 20 15:18:10 2018 +0100
@@ -19,9 +19,9 @@
 
 from pyams_content.component.association.interfaces import ASSOCIATION_CONTAINER_KEY
 from pyams_content.features.header.interfaces import IHeaderSettings, IHeaderTarget
-from pyams_content.features.menu import Menu
-from pyams_content.features.menu.interfaces import IMenuLinksContainer, IMenuLinksContainerTarget
-from pyams_default_theme.features.header.interfaces import ISimpleHeaderRendererSettings, ISimpleHeaderTabsMenu
+from pyams_content.features.menu import MenusContainer, IMenusContainer
+from pyams_content.features.menu.interfaces import IMenusContainerTarget
+from pyams_default_theme.features.header.interfaces import ISimpleHeaderRendererSettings, ISimpleHeaderMenusContainer
 from pyams_default_theme.layer import IPyAMSDefaultLayer
 from pyams_file.property import FileProperty
 from pyams_utils.adapter import ContextAdapter, adapter_config, get_annotation_adapter
@@ -55,10 +55,10 @@
 # Simple header renderer settings
 #
 
-SIMPLE_HEADER_TABS_KEY = '{0}::tabs'.format(ASSOCIATION_CONTAINER_KEY)
+SIMPLE_HEADER_MENUS_KEY = '{0}::menus'.format(ASSOCIATION_CONTAINER_KEY)
 
 
-@implementer(ISimpleHeaderRendererSettings, IMenuLinksContainerTarget)
+@implementer(ISimpleHeaderRendererSettings, IMenusContainerTarget)
 class SimpleHeaderRendererSettings(Persistent, Location):
     """Simple header renderer settings"""
 
@@ -66,20 +66,20 @@
     logo = FileProperty(ISimpleHeaderRendererSettings['logo'])
 
     @property
-    def tabs(self):
-        return get_annotation_adapter(self, SIMPLE_HEADER_TABS_KEY, Menu,
-                                      markers=ISimpleHeaderTabsMenu, name='++ass++tabs')
+    def menus(self):
+        return get_annotation_adapter(self, SIMPLE_HEADER_MENUS_KEY, MenusContainer,
+                                      markers=ISimpleHeaderMenusContainer, name='++ass++menus')
 
 
-@adapter_config(name='tabs', context=ISimpleHeaderRendererSettings, provides=IMenuLinksContainer)
-def simple_header_tabs_links_adapter(context):
-    """Simple header tabs links adapter"""
-    return context.tabs
+@adapter_config(name='menus', context=ISimpleHeaderRendererSettings, provides=IMenusContainer)
+def simple_header_menus_adapter(context):
+    """Simple header menus adapter"""
+    return context.menus
 
 
-@adapter_config(name='tabs', context=ISimpleHeaderRendererSettings, provides=ISublocations)
+@adapter_config(name='menus', context=ISimpleHeaderRendererSettings, provides=ISublocations)
 class SimpleHeaderRendererSettingsSublocations(ContextAdapter):
     """Simple header renderer settings sub-locations adapter"""
 
     def sublocations(self):
-        return self.context.tabs.values()
+        return self.context.menus.values()
--- a/src/pyams_default_theme/features/header/interfaces.py	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/features/header/interfaces.py	Tue Nov 20 15:18:10 2018 +0100
@@ -12,15 +12,10 @@
 
 __docformat__ = 'restructuredtext'
 
+from zope.interface import Interface, Attribute
 
-# import standard library
-
-# import interfaces
 from pyams_content.features.header.interfaces import IHeaderRendererSettings
-
-# import packages
 from pyams_file.schema import ImageField
-from zope.interface import Interface, Attribute
 
 from pyams_default_theme import _
 
@@ -38,6 +33,8 @@
 
     tabs = Attribute("Top tabs list")
 
+    menus = Attribute("Top tabs menus list")
 
-class ISimpleHeaderTabsMenu(Interface):
-    """Simple header menu marker interface"""
+
+class ISimpleHeaderMenusContainer(Interface):
+    """Simple header menus marker interface"""
--- a/src/pyams_default_theme/features/header/zmi/__init__.py	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/features/header/zmi/__init__.py	Tue Nov 20 15:18:10 2018 +0100
@@ -12,23 +12,18 @@
 
 __docformat__ = 'restructuredtext'
 
-
-# import standard library
+from transaction.interfaces import ITransactionManager
+from z3c.form import field
 
-# import interfaces
-from pyams_default_theme.features.header import ISimpleHeaderRendererSettings, ISimpleHeaderTabsMenu
+from pyams_content.features.header.zmi import HeaderSettingsRendererSettingsEditForm
+from pyams_content.features.menu.zmi import IMenusView, MenusTable, MenusView
+from pyams_default_theme.features.header import ISimpleHeaderMenusContainer, ISimpleHeaderRendererSettings
 from pyams_form.interfaces.form import IInnerSubForm
 from pyams_portal.interfaces import MANAGE_TEMPLATE_PERMISSION
+from pyams_skin.event import get_json_widget_refresh_event
 from pyams_skin.layer import IPyAMSLayer
-from transaction.interfaces import ITransactionManager
-
-# import packages
-from pyams_content.features.header.zmi import HeaderSettingsRendererSettingsEditForm
-from pyams_content.features.menu.zmi import LinksTable, IMenuLinksView, MenuLinksView
-from pyams_skin.event import get_json_widget_refresh_event
 from pyams_utils.adapter import adapter_config
 from pyams_zmi.form import InnerAdminEditForm
-from z3c.form import field
 
 from pyams_default_theme import _
 
@@ -62,23 +57,17 @@
 
 
 #
-# Header top tabs table view
+# Header menus table view
 #
 
-class TabsAssociationsTable(LinksTable):
-    """Simple header tabs associations table"""
-
-    associations_name = 'tabs'
-
-
-@adapter_config(name='simple-header-tabs',
+@adapter_config(name='simple-header-menus',
                 context=(ISimpleHeaderRendererSettings, IPyAMSLayer, HeaderSettingsRendererSettingsEditForm),
                 provides=IInnerSubForm)
-@adapter_config(name='++ass++tabs', context=(ISimpleHeaderTabsMenu, IPyAMSLayer), provides=IMenuLinksView)
-class SimpleHeaderTabsView(MenuLinksView):
-    """Simple header tabs view"""
+@adapter_config(name='++ass++menus', context=(ISimpleHeaderMenusContainer, IPyAMSLayer), provides=IMenusView)
+class SimpleHeaderMenusView(MenusView):
+    """Simple header menus view"""
 
-    title = _("Top tabs")
+    title = _("Top menus")
 
-    table_class = TabsAssociationsTable
+    table_class = MenusTable
     weight = 10
--- a/src/pyams_default_theme/features/renderer/__init__.py	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/features/renderer/__init__.py	Tue Nov 20 15:18:10 2018 +0100
@@ -22,7 +22,7 @@
 from pyams_template.template import get_view_template
 from pyams_utils.adapter import ContextRequestAdapter, adapter_config
 
-from pyams_content import _
+from pyams_default_theme import _
 
 
 @implementer(IContentRenderer)
--- a/src/pyams_default_theme/features/search/__init__.py	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/features/search/__init__.py	Tue Nov 20 15:18:10 2018 +0100
@@ -22,7 +22,7 @@
 from pyams_utils.url import absolute_url
 from pyams_workflow.interfaces import IWorkflowPublicationInfo
 
-from pyams_content import _
+from pyams_default_theme import _
 
 
 @adapter_config(context=(ISearchFolder, IPyAMSUserLayer), provides=IRelativeURL)
Binary file src/pyams_default_theme/locales/fr/LC_MESSAGES/pyams_default_theme.mo has changed
--- a/src/pyams_default_theme/locales/fr/LC_MESSAGES/pyams_default_theme.po	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/locales/fr/LC_MESSAGES/pyams_default_theme.po	Tue Nov 20 15:18:10 2018 +0100
@@ -5,7 +5,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE 1.0\n"
-"POT-Creation-Date: 2018-11-07 18:22+0100\n"
+"POT-Creation-Date: 2018-11-16 10:59+0100\n"
 "PO-Revision-Date: 2017-06-07 12:41+0200\n"
 "Last-Translator: Thierry Florac <tflorac@ulthar.net>\n"
 "Language-Team: French\n"
@@ -20,7 +20,23 @@
 msgid "PyAMS default skin"
 msgstr "Skin par défaut (PyAMS)"
 
-#: src/pyams_default_theme/component/keynumber/__init__.py:53
+#: src/pyams_default_theme/component/gallery/__init__.py:34
+msgid "Default grid gallery renderer"
+msgstr "Par défaut"
+
+#: src/pyams_default_theme/component/gallery/__init__.py:43
+msgid "Carousel gallery renderer"
+msgstr "Carousel horizontal"
+
+#: src/pyams_default_theme/component/gallery/templates/renderer-carousel.pt:31
+msgid "Previous"
+msgstr "Précédent"
+
+#: src/pyams_default_theme/component/gallery/templates/renderer-carousel.pt:35
+msgid "Next"
+msgstr "Suivant"
+
+#: src/pyams_default_theme/component/keynumber/__init__.py:48
 msgid "Default key numbers renderer"
 msgstr "Par défaut"
 
@@ -32,27 +48,75 @@
 msgid "Vertical list"
 msgstr "Liste verticale"
 
-#: src/pyams_default_theme/component/gallery/__init__.py:34
-msgid "Default gallery renderer"
+#: src/pyams_default_theme/component/illustration/__init__.py:170
+msgid "Centered illustration before text"
+msgstr "Illustration centrée avant le texte"
+
+#: src/pyams_default_theme/component/illustration/__init__.py:181
+msgid "Small illustration on the left"
+msgstr "Illustration sur la gauche"
+
+#: src/pyams_default_theme/component/illustration/__init__.py:193
+msgid "Small illustration on the right"
+msgstr "Illustration sur la droite"
+
+#: src/pyams_default_theme/component/illustration/__init__.py:205
+msgid "Centered illustration after text"
+msgstr "Illustration centrée après le texte"
+
+#: src/pyams_default_theme/component/illustration/interfaces/__init__.py:41
+msgid "Zoom on click?"
+msgstr "Zoom sur clic ?"
+
+#: src/pyams_default_theme/component/illustration/interfaces/__init__.py:42
+msgid "If 'yes', a click on illustration thumbnail is required to zoom"
+msgstr ""
+"Si 'oui', un clic sur la vignette de l'illustration est nécessaire pour "
+"zoomer sur l'image"
+
+#: src/pyams_default_theme/component/paragraph/milestone.py:36
+msgid "Default milestones renderer"
 msgstr "Par défaut"
 
-#: src/pyams_default_theme/component/video/__init__.py:41
-#: src/pyams_default_theme/component/paragraph/video.py:40
+#: src/pyams_default_theme/component/paragraph/keypoint.py:34
+msgid "Default key points renderer"
+msgstr "Par défaut"
+
+#: src/pyams_default_theme/component/paragraph/map.py:92
+msgid "Default map renderer"
+msgstr "Par défaut"
+
+#: src/pyams_default_theme/component/paragraph/video.py:34
+#: src/pyams_default_theme/component/video/__init__.py:35
 msgid "Default video renderer"
 msgstr "Par défaut"
 
-#: src/pyams_default_theme/component/paragraph/contact.py:85
-msgid "Default contact renderer"
-msgstr "Encadré en pleine largeur (par défaut)"
-
 #: src/pyams_default_theme/component/paragraph/pictogram.py:34
 msgid "Default pictograms renderer"
 msgstr "Par défaut"
 
-#: src/pyams_default_theme/component/paragraph/milestone.py:38
-msgid "Default milestones renderer"
+#: src/pyams_default_theme/component/paragraph/audio.py:35
+msgid "Default audio renderer"
 msgstr "Par défaut"
 
+#: src/pyams_default_theme/component/paragraph/frame.py:151
+msgid "Default frame renderer"
+msgstr "Encadré en pleine largeur (par défaut)"
+
+#: src/pyams_default_theme/component/paragraph/frame.py:162
+#: src/pyams_default_theme/component/paragraph/verbatim.py:84
+msgid "Small frame on the left"
+msgstr "Encadré placé sur la gauche"
+
+#: src/pyams_default_theme/component/paragraph/frame.py:173
+#: src/pyams_default_theme/component/paragraph/verbatim.py:95
+msgid "Small frame on the right"
+msgstr "Encadré placé sur la droite"
+
+#: src/pyams_default_theme/component/paragraph/verbatim.py:75
+msgid "Default verbatim renderer"
+msgstr "Encadré en pleine largeur (par défaut)"
+
 #: src/pyams_default_theme/component/paragraph/html.py:35
 msgid "Default raw HTML renderer"
 msgstr "Par défaut"
@@ -61,48 +125,88 @@
 msgid "Default rich text renderer"
 msgstr "Par défaut"
 
-#: src/pyams_default_theme/component/paragraph/verbatim.py:75
-msgid "Default verbatim renderer"
+#: src/pyams_default_theme/component/paragraph/contact.py:80
+msgid "Default contact renderer"
 msgstr "Encadré en pleine largeur (par défaut)"
 
-#: src/pyams_default_theme/component/paragraph/verbatim.py:84
-#: src/pyams_default_theme/component/paragraph/frame.py:163
-msgid "Small frame on the left"
-msgstr "Encadré placé sur la gauche"
+#: src/pyams_default_theme/component/paragraph/zmi/map.py:62
+msgid "Don't use default map configuration"
+msgstr "Ne pas utiliser la configuration de carte par défaut"
 
-#: src/pyams_default_theme/component/paragraph/verbatim.py:95
-#: src/pyams_default_theme/component/paragraph/frame.py:174
-msgid "Small frame on the right"
-msgstr "Encadré placé sur la droite"
+#: src/pyams_default_theme/component/paragraph/portlet/__init__.py:40
+msgid "Default paragraphs renderer"
+msgstr "Par défaut"
 
-#: src/pyams_default_theme/component/paragraph/map.py:96
-msgid "Default map renderer"
+#: src/pyams_default_theme/component/paragraph/portlet/__init__.py:67
+msgid "Default paragraphs navigation"
 msgstr "Par défaut"
 
-#: src/pyams_default_theme/component/paragraph/keypoint.py:40
-msgid "Default key points renderer"
-msgstr "Par défaut"
-
-#: src/pyams_default_theme/component/paragraph/frame.py:152
-msgid "Default frame renderer"
-msgstr "Encadré en pleine largeur (par défaut)"
+#: src/pyams_default_theme/component/paragraph/interfaces/map.py:34
+msgid "Don't use default configuration?"
+msgstr "Ne pas utiliser la configuration par défaut ?"
 
-#: src/pyams_default_theme/component/paragraph/audio.py:40
-msgid "Default audio renderer"
-msgstr "Par défaut"
+#: src/pyams_default_theme/component/paragraph/interfaces/map.py:38
+msgid "Use default configuration?"
+msgstr "Utiliser la configuration par défaut ?"
 
-#: src/pyams_default_theme/component/paragraph/interfaces/contact.py:29
+#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:25
 #: src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:22
-#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:25
+#: src/pyams_default_theme/component/paragraph/interfaces/contact.py:29
 msgid "Left"
 msgstr "Gauche"
 
-#: src/pyams_default_theme/component/paragraph/interfaces/contact.py:30
+#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:26
 #: src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:23
-#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:26
+#: src/pyams_default_theme/component/paragraph/interfaces/contact.py:30
 msgid "Right"
 msgstr "Droite"
 
+#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:27
+#: src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:24
+msgid "Center (full width)"
+msgstr "Centré (pleine largeur)"
+
+#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:37
+msgid "Show associations?"
+msgstr "Afficher les liens et pièces jointes ?"
+
+#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:38
+msgid "If 'no', associations will not be displayed"
+msgstr ""
+"Si 'non', les liens et pièces jointes ne seront pas affichés même s'il "
+"existe des éléments visibles"
+
+#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:45
+msgid "Pictogram"
+msgstr "Pictogramme"
+
+#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:46
+msgid "Name of the pictogram associated with this frame paragraph"
+msgstr "Nom du pictogramme associé à cet encadré"
+
+#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:60
+#: src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:34
+msgid "Relative width"
+msgstr "Largeur relative"
+
+#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:61
+msgid ""
+"Relative width used by this frame, relative to it's parent, given as columns "
+"count; full width counts for 12 columns"
+msgstr ""
+"Largeur relative de ce bloc par rapport au bloc dans lequel il s'intègre. "
+"Cette largeur est indiquée en nombre de colonnes, la largeur totale étant de "
+"12 colonnes."
+
+#: src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:35
+msgid ""
+"Relative width used by this paragraph, relative to it's parent, given as "
+"columns count; full width counts for 12 columns"
+msgstr ""
+"Largeur relative de ce bloc par rapport au bloc dans lequel il s'intègre. "
+"Cette largeur est indiquée en nombre de colonnes, la largeur totale étant de "
+"12 colonnes."
+
 #: src/pyams_default_theme/component/paragraph/interfaces/contact.py:40
 msgid "Show photo?"
 msgstr "Afficher la photo ?"
@@ -131,72 +235,6 @@
 msgid "Map position"
 msgstr "Position de la carte"
 
-#: src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:24
-#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:27
-msgid "Center (full width)"
-msgstr "Centré (pleine largeur)"
-
-#: src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:34
-#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:60
-msgid "Relative width"
-msgstr "Largeur relative"
-
-#: src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:35
-msgid ""
-"Relative width used by this paragraph, relative to it's parent, given as "
-"columns count; full width counts for 12 columns"
-msgstr ""
-"Largeur relative de ce bloc par rapport au bloc dans lequel il s'intègre. "
-"Cette largeur est indiquée en nombre de colonnes, la largeur totale étant de "
-"12 colonnes."
-
-#: src/pyams_default_theme/component/paragraph/interfaces/map.py:34
-msgid "Don't use default configuration?"
-msgstr "Ne pas utiliser la configuration par défaut ?"
-
-#: src/pyams_default_theme/component/paragraph/interfaces/map.py:38
-msgid "Use default configuration?"
-msgstr "Utiliser la configuration par défaut ?"
-
-#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:37
-msgid "Show associations?"
-msgstr "Afficher les liens et pièces jointes ?"
-
-#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:38
-msgid "If 'no', associations will not be displayed"
-msgstr ""
-"Si 'non', les liens et pièces jointes ne seront pas affichés même s'il "
-"existe des éléments visibles"
-
-#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:45
-msgid "Pictogram"
-msgstr "Pictogramme"
-
-#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:46
-msgid "Name of the pictogram associated with this frame paragraph"
-msgstr "Nom du pictogramme associé à cet encadré"
-
-#: src/pyams_default_theme/component/paragraph/interfaces/frame.py:61
-msgid ""
-"Relative width used by this frame, relative to it's parent, given as columns "
-"count; full width counts for 12 columns"
-msgstr ""
-"Largeur relative de ce bloc par rapport au bloc dans lequel il s'intègre. "
-"Cette largeur est indiquée en nombre de colonnes, la largeur totale étant de "
-"12 colonnes."
-
-#: src/pyams_default_theme/component/paragraph/portlet/__init__.py:40
-msgid "Default paragraphs renderer"
-msgstr "Par défaut"
-
-#: src/pyams_default_theme/component/paragraph/portlet/__init__.py:67
-msgid "Default paragraphs navigation"
-msgstr "Par défaut"
-
-#: src/pyams_default_theme/component/paragraph/zmi/map.py:62
-msgid "Don't use default map configuration"
-msgstr "Ne pas utiliser la configuration de carte par défaut"
-
 #: src/pyams_default_theme/component/association/__init__.py:44
 msgid "Default associations renderer"
 msgstr "Par défaut"
@@ -243,47 +281,61 @@
 "Si 'oui', seuls les blocs de contenu désignés comme ancres seront "
 "sélectionnés"
 
-#: src/pyams_default_theme/component/illustration/__init__.py:171
-msgid "Centered illustration before text"
-msgstr "Illustration centrée avant le texte"
+#: src/pyams_default_theme/shared/common/summary.py:38
+#: src/pyams_default_theme/shared/site/link.py:64
+msgid "Consult content"
+msgstr "Accéder au contenu"
 
-#: src/pyams_default_theme/component/illustration/__init__.py:182
-msgid "Small illustration on the left"
-msgstr "Illustration sur la gauche"
+#: src/pyams_default_theme/shared/common/portlet/title.py:37
+msgid "Default title renderer"
+msgstr "Par défaut"
+
+#: src/pyams_default_theme/shared/common/portlet/head.py:38
+msgid "Default header renderer"
+msgstr "Par défaut"
 
-#: src/pyams_default_theme/component/illustration/__init__.py:194
-msgid "Small illustration on the right"
-msgstr "Illustration sur la droite"
+#: src/pyams_default_theme/shared/view/templates/render.pt:2
+msgid "View result items"
+msgstr "Aperçu du contenu de la vue"
 
-#: src/pyams_default_theme/component/illustration/__init__.py:206
-msgid "Centered illustration after text"
-msgstr "Illustration centrée après le texte"
+#: src/pyams_default_theme/shared/view/templates/render.pt:3
+msgid "WARNING: items displayed in this preview are out of context!!"
+msgstr ""
+"ATTENTION : la sélection des éléments affichés dans cet aperçu ne tient pas "
+"compte du contexte éventuellement paramétré dans la vue"
 
-#: src/pyams_default_theme/component/illustration/interfaces/__init__.py:41
-msgid "Zoom on click?"
-msgstr "Zoom sur clic ?"
+#: src/pyams_default_theme/shared/view/portlet/__init__.py:38
+msgid "Simple vertical view"
+msgstr "Liste verticale simple"
 
-#: src/pyams_default_theme/component/illustration/interfaces/__init__.py:42
-msgid "If 'yes', a click on illustration thumbnail is required to zoom"
-msgstr ""
-"Si 'oui', un clic sur la vignette de l'illustration est nécessaire pour "
-"zoomer sur l'image"
+#: src/pyams_default_theme/shared/imagemap/__init__.py:52
+msgid "Default imagemap renderer"
+msgstr "Par défaut"
 
-#: src/pyams_default_theme/features/footer/interfaces.py:31
-msgid "Copyright"
-msgstr "Copyright"
+#: src/pyams_default_theme/shared/imagemap/templates/render.pt:2
+msgid "Image map preview"
+msgstr "Aperçu des zones cliquables"
+
+#: src/pyams_default_theme/shared/site/folder.py:60
+#: src/pyams_default_theme/features/search/__init__.py:64
+msgid "Consult folder"
+msgstr "Consulter la rubrique"
 
-#: src/pyams_default_theme/features/footer/interfaces.py:32
-msgid "Copyright mention displayed in page footer"
-msgstr "Mention affichée dans le pied de page"
+#: src/pyams_default_theme/shared/site/portlet/__init__.py:35
+msgid "Site container summary"
+msgstr "Par défaut"
+
+#: src/pyams_default_theme/shared/logo/__init__.py:34
+msgid "Default logos renderer"
+msgstr "Par défaut"
 
-#: src/pyams_default_theme/features/footer/zmi/__init__.py:64
-msgid "Footer links"
-msgstr "Liens du pied de page"
+#: src/pyams_default_theme/viewlet/logo/templates/logo.pt:5
+msgid "Back home"
+msgstr "Revenir à l'accueil"
 
-#: src/pyams_default_theme/features/footer/skin/__init__.py:50
-msgid "PyAMS simple footer with links"
-msgstr "PyAMS: pied de page simple avec liens"
+#: src/pyams_default_theme/features/renderer/__init__.py:66
+msgid "Hidden content"
+msgstr "NON affiché"
 
 #: src/pyams_default_theme/features/menu/portlet/navigation/__init__.py:49
 msgid "Horizontal list with vertical illustrations"
@@ -317,10 +369,25 @@
 msgid "Label associated with second level options menu"
 msgstr "Libellé associé au second niveau de sélection"
 
-#: src/pyams_default_theme/features/search/__init__.py:64
-#: src/pyams_default_theme/shared/site/folder.py:54
-msgid "Consult folder"
-msgstr "Consulter la rubrique"
+#: src/pyams_default_theme/features/footer/interfaces.py:31
+msgid "Copyright"
+msgstr "Copyright"
+
+#: src/pyams_default_theme/features/footer/interfaces.py:32
+msgid "Copyright mention displayed in page footer"
+msgstr "Mention affichée dans le pied de page"
+
+#: src/pyams_default_theme/features/footer/zmi/__init__.py:64
+msgid "Footer links"
+msgstr "Liens du pied de page"
+
+#: src/pyams_default_theme/features/footer/skin/__init__.py:104
+msgid "Hidden footer"
+msgstr "NON affiché"
+
+#: src/pyams_default_theme/features/footer/skin/__init__.py:127
+msgid "PyAMS simple footer with links"
+msgstr "PyAMS: pied de page simple avec liens"
 
 #: src/pyams_default_theme/features/header/interfaces.py:31
 msgid "Banner image"
@@ -342,56 +409,17 @@
 msgid "Top tabs"
 msgstr "Onglets de navigation"
 
-#: src/pyams_default_theme/features/header/skin/__init__.py:52
+#: src/pyams_default_theme/features/header/skin/__init__.py:111
+msgid "Hidden header"
+msgstr "NON affiché"
+
+#: src/pyams_default_theme/features/header/skin/__init__.py:134
 msgid "PyAMS simple header with banner and tabs"
 msgstr "PyAMS: en-tête simple avec bandeau et onglets de navigation"
 
-#: src/pyams_default_theme/shared/view/portlet/__init__.py:38
-msgid "Simple vertical view"
-msgstr "Liste verticale simple"
-
-#: src/pyams_default_theme/shared/view/templates/render.pt:2
-msgid "View result items"
-msgstr "Aperçu du contenu de la vue"
-
-#: src/pyams_default_theme/shared/view/templates/render.pt:3
-msgid "WARNING: items displayed in this preview are out of context!!"
-msgstr ""
-"ATTENTION : la sélection des éléments affichés dans cet aperçu ne tient pas "
-"compte du contexte éventuellement paramétré dans la vue"
-
-#: src/pyams_default_theme/shared/common/summary.py:38
-#: src/pyams_default_theme/shared/site/link.py:62
-msgid "Consult content"
-msgstr "Accéder au contenu"
-
-#: src/pyams_default_theme/shared/common/portlet/title.py:37
-msgid "Default title renderer"
-msgstr "Par défaut"
-
-#: src/pyams_default_theme/shared/common/portlet/head.py:38
-msgid "Default header renderer"
-msgstr "Par défaut"
-
-#: src/pyams_default_theme/shared/site/portlet/__init__.py:35
-msgid "Site container summary"
-msgstr "Par défaut"
-
-#: src/pyams_default_theme/shared/imagemap/__init__.py:58
-msgid "Default imagemap renderer"
-msgstr "Par défaut"
-
-#: src/pyams_default_theme/shared/imagemap/templates/render.pt:2
-msgid "Image map preview"
-msgstr "Aperçu des zones cliquables"
-
-#: src/pyams_default_theme/shared/logo/__init__.py:39
-msgid "Default logos renderer"
-msgstr "Par défaut"
-
-#: src/pyams_default_theme/viewlet/logo/templates/logo.pt:5
-msgid "Back home"
-msgstr "Revenir à l'accueil"
+#: src/pyams_default_theme/features/header/skin/templates/simple-header.pt:13
+msgid "Toggle navigation"
+msgstr "Menu de navigation"
 
 #~ msgid "Show illustration?"
 #~ msgstr "Afficher l'illustration ?"
--- a/src/pyams_default_theme/locales/pyams_default_theme.pot	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/locales/pyams_default_theme.pot	Tue Nov 20 15:18:10 2018 +0100
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE 1.0\n"
-"POT-Creation-Date: 2018-11-07 18:22+0100\n"
+"POT-Creation-Date: 2018-11-16 10:59+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -20,7 +20,23 @@
 msgid "PyAMS default skin"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/keynumber/__init__.py:53
+#: ./src/pyams_default_theme/component/gallery/__init__.py:34
+msgid "Default grid gallery renderer"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/gallery/__init__.py:43
+msgid "Carousel gallery renderer"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/gallery/templates/renderer-carousel.pt:31
+msgid "Previous"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/gallery/templates/renderer-carousel.pt:35
+msgid "Next"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/keynumber/__init__.py:48
 msgid "Default key numbers renderer"
 msgstr ""
 
@@ -32,25 +48,71 @@
 msgid "Vertical list"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/gallery/__init__.py:34
-msgid "Default gallery renderer"
+#: ./src/pyams_default_theme/component/illustration/__init__.py:170
+msgid "Centered illustration before text"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/illustration/__init__.py:181
+msgid "Small illustration on the left"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/illustration/__init__.py:193
+msgid "Small illustration on the right"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/illustration/__init__.py:205
+msgid "Centered illustration after text"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/illustration/interfaces/__init__.py:41
+msgid "Zoom on click?"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/video/__init__.py:41
-#: ./src/pyams_default_theme/component/paragraph/video.py:40
-msgid "Default video renderer"
+#: ./src/pyams_default_theme/component/illustration/interfaces/__init__.py:42
+msgid "If 'yes', a click on illustration thumbnail is required to zoom"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/milestone.py:36
+msgid "Default milestones renderer"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/paragraph/contact.py:85
-msgid "Default contact renderer"
+#: ./src/pyams_default_theme/component/paragraph/keypoint.py:34
+msgid "Default key points renderer"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/map.py:92
+msgid "Default map renderer"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/video.py:34
+#: ./src/pyams_default_theme/component/video/__init__.py:35
+msgid "Default video renderer"
 msgstr ""
 
 #: ./src/pyams_default_theme/component/paragraph/pictogram.py:34
 msgid "Default pictograms renderer"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/paragraph/milestone.py:38
-msgid "Default milestones renderer"
+#: ./src/pyams_default_theme/component/paragraph/audio.py:35
+msgid "Default audio renderer"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/frame.py:151
+msgid "Default frame renderer"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/frame.py:162
+#: ./src/pyams_default_theme/component/paragraph/verbatim.py:84
+msgid "Small frame on the left"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/frame.py:173
+#: ./src/pyams_default_theme/component/paragraph/verbatim.py:95
+msgid "Small frame on the right"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/verbatim.py:75
+msgid "Default verbatim renderer"
 msgstr ""
 
 #: ./src/pyams_default_theme/component/paragraph/html.py:35
@@ -61,48 +123,80 @@
 msgid "Default rich text renderer"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/paragraph/verbatim.py:75
-msgid "Default verbatim renderer"
+#: ./src/pyams_default_theme/component/paragraph/contact.py:80
+msgid "Default contact renderer"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/paragraph/verbatim.py:84
-#: ./src/pyams_default_theme/component/paragraph/frame.py:163
-msgid "Small frame on the left"
+#: ./src/pyams_default_theme/component/paragraph/zmi/map.py:62
+msgid "Don't use default map configuration"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/paragraph/verbatim.py:95
-#: ./src/pyams_default_theme/component/paragraph/frame.py:174
-msgid "Small frame on the right"
+#: ./src/pyams_default_theme/component/paragraph/portlet/__init__.py:40
+msgid "Default paragraphs renderer"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/paragraph/map.py:96
-msgid "Default map renderer"
+#: ./src/pyams_default_theme/component/paragraph/portlet/__init__.py:67
+msgid "Default paragraphs navigation"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/paragraph/keypoint.py:40
-msgid "Default key points renderer"
+#: ./src/pyams_default_theme/component/paragraph/interfaces/map.py:34
+msgid "Don't use default configuration?"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/paragraph/frame.py:152
-msgid "Default frame renderer"
+#: ./src/pyams_default_theme/component/paragraph/interfaces/map.py:38
+msgid "Use default configuration?"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/paragraph/audio.py:40
-msgid "Default audio renderer"
-msgstr ""
-
+#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:25
+#: ./src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:22
 #: ./src/pyams_default_theme/component/paragraph/interfaces/contact.py:29
-#: ./src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:22
-#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:25
 msgid "Left"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/paragraph/interfaces/contact.py:30
+#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:26
 #: ./src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:23
-#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:26
+#: ./src/pyams_default_theme/component/paragraph/interfaces/contact.py:30
 msgid "Right"
 msgstr ""
 
+#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:27
+#: ./src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:24
+msgid "Center (full width)"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:37
+msgid "Show associations?"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:38
+msgid "If 'no', associations will not be displayed"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:45
+msgid "Pictogram"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:46
+msgid "Name of the pictogram associated with this frame paragraph"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:60
+#: ./src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:34
+msgid "Relative width"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:61
+msgid ""
+"Relative width used by this frame, relative to it's parent, given as columns "
+"count; full width counts for 12 columns"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:35
+msgid ""
+"Relative width used by this paragraph, relative to it's parent, given as "
+"columns count; full width counts for 12 columns"
+msgstr ""
+
 #: ./src/pyams_default_theme/component/paragraph/interfaces/contact.py:40
 msgid "Show photo?"
 msgstr ""
@@ -127,64 +221,6 @@
 msgid "Map position"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:24
-#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:27
-msgid "Center (full width)"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:34
-#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:60
-msgid "Relative width"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/paragraph/interfaces/verbatim.py:35
-msgid ""
-"Relative width used by this paragraph, relative to it's parent, given as "
-"columns count; full width counts for 12 columns"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/paragraph/interfaces/map.py:34
-msgid "Don't use default configuration?"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/paragraph/interfaces/map.py:38
-msgid "Use default configuration?"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:37
-msgid "Show associations?"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:38
-msgid "If 'no', associations will not be displayed"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:45
-msgid "Pictogram"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:46
-msgid "Name of the pictogram associated with this frame paragraph"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/paragraph/interfaces/frame.py:61
-msgid ""
-"Relative width used by this frame, relative to it's parent, given as columns "
-"count; full width counts for 12 columns"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/paragraph/portlet/__init__.py:40
-msgid "Default paragraphs renderer"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/paragraph/portlet/__init__.py:67
-msgid "Default paragraphs navigation"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/paragraph/zmi/map.py:62
-msgid "Don't use default map configuration"
-msgstr ""
-
 #: ./src/pyams_default_theme/component/association/__init__.py:44
 msgid "Default associations renderer"
 msgstr ""
@@ -227,44 +263,58 @@
 msgid "If 'yes', only paragraphs set as 'anchors' will be selected"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/illustration/__init__.py:171
-msgid "Centered illustration before text"
+#: ./src/pyams_default_theme/shared/common/summary.py:38
+#: ./src/pyams_default_theme/shared/site/link.py:64
+msgid "Consult content"
+msgstr ""
+
+#: ./src/pyams_default_theme/shared/common/portlet/title.py:37
+msgid "Default title renderer"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/illustration/__init__.py:182
-msgid "Small illustration on the left"
+#: ./src/pyams_default_theme/shared/common/portlet/head.py:38
+msgid "Default header renderer"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/illustration/__init__.py:194
-msgid "Small illustration on the right"
+#: ./src/pyams_default_theme/shared/view/templates/render.pt:2
+msgid "View result items"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/illustration/__init__.py:206
-msgid "Centered illustration after text"
+#: ./src/pyams_default_theme/shared/view/templates/render.pt:3
+msgid "WARNING: items displayed in this preview are out of context!!"
+msgstr ""
+
+#: ./src/pyams_default_theme/shared/view/portlet/__init__.py:38
+msgid "Simple vertical view"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/illustration/interfaces/__init__.py:41
-msgid "Zoom on click?"
+#: ./src/pyams_default_theme/shared/imagemap/__init__.py:52
+msgid "Default imagemap renderer"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/illustration/interfaces/__init__.py:42
-msgid "If 'yes', a click on illustration thumbnail is required to zoom"
+#: ./src/pyams_default_theme/shared/imagemap/templates/render.pt:2
+msgid "Image map preview"
+msgstr ""
+
+#: ./src/pyams_default_theme/shared/site/folder.py:60
+#: ./src/pyams_default_theme/features/search/__init__.py:64
+msgid "Consult folder"
 msgstr ""
 
-#: ./src/pyams_default_theme/features/footer/interfaces.py:31
-msgid "Copyright"
+#: ./src/pyams_default_theme/shared/site/portlet/__init__.py:35
+msgid "Site container summary"
 msgstr ""
 
-#: ./src/pyams_default_theme/features/footer/interfaces.py:32
-msgid "Copyright mention displayed in page footer"
+#: ./src/pyams_default_theme/shared/logo/__init__.py:34
+msgid "Default logos renderer"
 msgstr ""
 
-#: ./src/pyams_default_theme/features/footer/zmi/__init__.py:64
-msgid "Footer links"
+#: ./src/pyams_default_theme/viewlet/logo/templates/logo.pt:5
+msgid "Back home"
 msgstr ""
 
-#: ./src/pyams_default_theme/features/footer/skin/__init__.py:50
-msgid "PyAMS simple footer with links"
+#: ./src/pyams_default_theme/features/renderer/__init__.py:66
+msgid "Hidden content"
 msgstr ""
 
 #: ./src/pyams_default_theme/features/menu/portlet/navigation/__init__.py:49
@@ -299,9 +349,24 @@
 msgid "Label associated with second level options menu"
 msgstr ""
 
-#: ./src/pyams_default_theme/features/search/__init__.py:64
-#: ./src/pyams_default_theme/shared/site/folder.py:54
-msgid "Consult folder"
+#: ./src/pyams_default_theme/features/footer/interfaces.py:31
+msgid "Copyright"
+msgstr ""
+
+#: ./src/pyams_default_theme/features/footer/interfaces.py:32
+msgid "Copyright mention displayed in page footer"
+msgstr ""
+
+#: ./src/pyams_default_theme/features/footer/zmi/__init__.py:64
+msgid "Footer links"
+msgstr ""
+
+#: ./src/pyams_default_theme/features/footer/skin/__init__.py:104
+msgid "Hidden footer"
+msgstr ""
+
+#: ./src/pyams_default_theme/features/footer/skin/__init__.py:127
+msgid "PyAMS simple footer with links"
 msgstr ""
 
 #: ./src/pyams_default_theme/features/header/interfaces.py:31
@@ -324,51 +389,14 @@
 msgid "Top tabs"
 msgstr ""
 
-#: ./src/pyams_default_theme/features/header/skin/__init__.py:52
+#: ./src/pyams_default_theme/features/header/skin/__init__.py:111
+msgid "Hidden header"
+msgstr ""
+
+#: ./src/pyams_default_theme/features/header/skin/__init__.py:134
 msgid "PyAMS simple header with banner and tabs"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/view/portlet/__init__.py:38
-msgid "Simple vertical view"
-msgstr ""
-
-#: ./src/pyams_default_theme/shared/view/templates/render.pt:2
-msgid "View result items"
-msgstr ""
-
-#: ./src/pyams_default_theme/shared/view/templates/render.pt:3
-msgid "WARNING: items displayed in this preview are out of context!!"
-msgstr ""
-
-#: ./src/pyams_default_theme/shared/common/summary.py:38
-#: ./src/pyams_default_theme/shared/site/link.py:62
-msgid "Consult content"
-msgstr ""
-
-#: ./src/pyams_default_theme/shared/common/portlet/title.py:37
-msgid "Default title renderer"
+#: ./src/pyams_default_theme/features/header/skin/templates/simple-header.pt:13
+msgid "Toggle navigation"
 msgstr ""
-
-#: ./src/pyams_default_theme/shared/common/portlet/head.py:38
-msgid "Default header renderer"
-msgstr ""
-
-#: ./src/pyams_default_theme/shared/site/portlet/__init__.py:35
-msgid "Site container summary"
-msgstr ""
-
-#: ./src/pyams_default_theme/shared/imagemap/__init__.py:58
-msgid "Default imagemap renderer"
-msgstr ""
-
-#: ./src/pyams_default_theme/shared/imagemap/templates/render.pt:2
-msgid "Image map preview"
-msgstr ""
-
-#: ./src/pyams_default_theme/shared/logo/__init__.py:39
-msgid "Default logos renderer"
-msgstr ""
-
-#: ./src/pyams_default_theme/viewlet/logo/templates/logo.pt:5
-msgid "Back home"
-msgstr ""
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_default_theme/resources/css/ext/ekko-lightbox.css	Tue Nov 20 15:18:10 2018 +0100
@@ -0,0 +1,2 @@
+.ekko-lightbox{display:-ms-flexbox!important;display:flex!important;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;padding-right:0!important}.ekko-lightbox-container{position:relative}.ekko-lightbox-container>div.ekko-lightbox-item{position:absolute;top:0;left:0;bottom:0;right:0;width:100%}.ekko-lightbox iframe{width:100%;height:100%}.ekko-lightbox-nav-overlay{z-index:1;position:absolute;top:0;left:0;width:100%;height:100%;display:-ms-flexbox;display:flex}.ekko-lightbox-nav-overlay a{-ms-flex:1;flex:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;opacity:0;transition:opacity .5s;color:#fff;font-size:30px;z-index:1}.ekko-lightbox-nav-overlay a>*{-ms-flex-positive:1;flex-grow:1}.ekko-lightbox-nav-overlay a>:focus{outline:none}.ekko-lightbox-nav-overlay a span{padding:0 30px}.ekko-lightbox-nav-overlay a:last-child span{text-align:right}.ekko-lightbox-nav-overlay a:hover{text-decoration:none}.ekko-lightbox-nav-overlay a:focus{outline:none}.ekko-lightbox-nav-overlay a.disabled{cursor:default;visibility:hidden}.ekko-lightbox a:hover{opacity:1;text-decoration:none}.ekko-lightbox .modal-dialog{display:none}.ekko-lightbox .modal-footer{text-align:left}.ekko-lightbox-loader{position:absolute;top:0;left:0;bottom:0;right:0;width:100%;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center}.ekko-lightbox-loader>div{width:40px;height:40px;position:relative;text-align:center}.ekko-lightbox-loader>div>div{width:100%;height:100%;border-radius:50%;background-color:#fff;opacity:.6;position:absolute;top:0;left:0;animation:a 2s infinite ease-in-out}.ekko-lightbox-loader>div>div:last-child{animation-delay:-1s}.modal-dialog .ekko-lightbox-loader>div>div{background-color:#333}@keyframes a{0%,to{transform:scale(0);-webkit-transform:scale(0)}50%{transform:scale(1);-webkit-transform:scale(1)}}
+/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImVra28tbGlnaHRib3guY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQ0UsOEJBQXlCLEFBQXpCLHVCQUF5QixBQUN6QixzQkFBb0IsQUFBcEIsbUJBQW9CLEFBQ3BCLHFCQUF3QixBQUF4Qix1QkFBd0IsQUFDeEIseUJBQTZCLENBQzlCLEFBQ0QseUJBQ0UsaUJBQW1CLENBQ3BCLEFBQ0QsZ0RBQ0Usa0JBQW1CLEFBQ25CLE1BQU8sQUFDUCxPQUFRLEFBQ1IsU0FBVSxBQUNWLFFBQVMsQUFDVCxVQUFZLENBQ2IsQUFDRCxzQkFDRSxXQUFZLEFBQ1osV0FBYSxDQUNkLEFBQ0QsMkJBQ0UsVUFBYSxBQUNiLGtCQUFtQixBQUNuQixNQUFPLEFBQ1AsT0FBUSxBQUNSLFdBQVksQUFDWixZQUFhLEFBQ2Isb0JBQWMsQUFBZCxZQUFjLENBQ2YsQUFDRCw2QkFDRSxXQUFRLEFBQVIsT0FBUSxBQUNSLG9CQUFjLEFBQWQsYUFBYyxBQUNkLHNCQUFvQixBQUFwQixtQkFBb0IsQUFDcEIsVUFBVyxBQUNYLHVCQUF5QixBQUN6QixXQUFZLEFBQ1osZUFBZ0IsQUFDaEIsU0FBYSxDQUNkLEFBQ0QsK0JBQ0Usb0JBQWEsQUFBYixXQUFhLENBQ2QsQUFDRCxvQ0FDRSxZQUFjLENBQ2YsQUFDRCxrQ0FDRSxjQUFnQixDQUNqQixBQUNELDZDQUNFLGdCQUFrQixDQUNuQixBQUNELG1DQUNFLG9CQUFzQixDQUN2QixBQUNELG1DQUNFLFlBQWMsQ0FDZixBQUNELHNDQUNFLGVBQWdCLEFBQ2hCLGlCQUFtQixDQUNwQixBQUNELHVCQUNFLFVBQVcsQUFDWCxvQkFBc0IsQ0FDdkIsQUFDRCw2QkFDRSxZQUFjLENBQ2YsQUFDRCw2QkFDRSxlQUFpQixDQUNsQixBQUNELHNCQUNFLGtCQUFtQixBQUNuQixNQUFPLEFBQ1AsT0FBUSxBQUNSLFNBQVUsQUFDVixRQUFTLEFBQ1QsV0FBWSxBQUNaLG9CQUFjLEFBQWQsYUFBYyxBQUVkLDBCQUF1QixBQUF2QixzQkFBdUIsQUFFdkIscUJBQXdCLEFBQXhCLHVCQUF3QixBQUV4QixzQkFBb0IsQUFBcEIsa0JBQW9CLENBQ3JCLEFBQ0QsMEJBQ0UsV0FBWSxBQUNaLFlBQWEsQUFDYixrQkFBbUIsQUFDbkIsaUJBQW1CLENBQ3BCLEFBQ0QsOEJBQ0UsV0FBWSxBQUNaLFlBQWEsQUFDYixrQkFBbUIsQUFDbkIsc0JBQXVCLEFBQ3ZCLFdBQWEsQUFDYixrQkFBbUIsQUFDbkIsTUFBTyxBQUNQLE9BQVEsQUFDUixtQ0FBNkMsQ0FDOUMsQUFDRCx5Q0FDRSxtQkFBcUIsQ0FDdEIsQUFDRCw0Q0FDRSxxQkFBdUIsQ0FDeEIsQUFVRCxhQUNFLE1BRUUsbUJBQW9CLEFBQ3BCLDBCQUE0QixDQUM3QixBQUNELElBQ0UsbUJBQW9CLEFBQ3BCLDBCQUE0QixDQUM3QixDQUNGIiwiZmlsZSI6ImVra28tbGlnaHRib3guY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmVra28tbGlnaHRib3gge1xuICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBwYWRkaW5nLXJpZ2h0OiAwcHghaW1wb3J0YW50O1xufVxuLmVra28tbGlnaHRib3gtY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLmVra28tbGlnaHRib3gtY29udGFpbmVyID4gZGl2LmVra28tbGlnaHRib3gtaXRlbSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICBib3R0b206IDA7XG4gIHJpZ2h0OiAwO1xuICB3aWR0aDogMTAwJTtcbn1cbi5la2tvLWxpZ2h0Ym94IGlmcmFtZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG59XG4uZWtrby1saWdodGJveC1uYXYtb3ZlcmxheSB7XG4gIHotaW5kZXg6IDEwMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG4uZWtrby1saWdodGJveC1uYXYtb3ZlcmxheSBhIHtcbiAgZmxleDogMTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgb3BhY2l0eTogMDtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjVzO1xuICBjb2xvcjogI2ZmZjtcbiAgZm9udC1zaXplOiAzMHB4O1xuICB6LWluZGV4OiAxMDA7XG59XG4uZWtrby1saWdodGJveC1uYXYtb3ZlcmxheSBhID4gKiB7XG4gIGZsZXgtZ3JvdzogMTtcbn1cbi5la2tvLWxpZ2h0Ym94LW5hdi1vdmVybGF5IGEgPiAqOmZvY3VzIHtcbiAgb3V0bGluZTogbm9uZTtcbn1cbi5la2tvLWxpZ2h0Ym94LW5hdi1vdmVybGF5IGEgc3BhbiB7XG4gIHBhZGRpbmc6IDAgMzBweDtcbn1cbi5la2tvLWxpZ2h0Ym94LW5hdi1vdmVybGF5IGE6bGFzdC1jaGlsZCBzcGFuIHtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG59XG4uZWtrby1saWdodGJveC1uYXYtb3ZlcmxheSBhOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuLmVra28tbGlnaHRib3gtbmF2LW92ZXJsYXkgYTpmb2N1cyB7XG4gIG91dGxpbmU6IG5vbmU7XG59XG4uZWtrby1saWdodGJveC1uYXYtb3ZlcmxheSBhLmRpc2FibGVkIHtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG59XG4uZWtrby1saWdodGJveCBhOmhvdmVyIHtcbiAgb3BhY2l0eTogMTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuLmVra28tbGlnaHRib3ggLm1vZGFsLWRpYWxvZyB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4uZWtrby1saWdodGJveCAubW9kYWwtZm9vdGVyIHtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbi5la2tvLWxpZ2h0Ym94LWxvYWRlciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICBib3R0b206IDA7XG4gIHJpZ2h0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogZmxleDtcbiAgLyogZXN0YWJsaXNoIGZsZXggY29udGFpbmVyICovXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIC8qIG1ha2UgbWFpbiBheGlzIHZlcnRpY2FsICovXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAvKiBjZW50ZXIgaXRlbXMgdmVydGljYWxseSwgaW4gdGhpcyBjYXNlICovXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4uZWtrby1saWdodGJveC1sb2FkZXIgPiBkaXYge1xuICB3aWR0aDogNDBweDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5la2tvLWxpZ2h0Ym94LWxvYWRlciA+IGRpdiA+IGRpdiB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgb3BhY2l0eTogMC42O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgYW5pbWF0aW9uOiBzay1ib3VuY2UgMnMgaW5maW5pdGUgZWFzZS1pbi1vdXQ7XG59XG4uZWtrby1saWdodGJveC1sb2FkZXIgPiBkaXYgPiBkaXY6bGFzdC1jaGlsZCB7XG4gIGFuaW1hdGlvbi1kZWxheTogLTFzO1xufVxuLm1vZGFsLWRpYWxvZyAuZWtrby1saWdodGJveC1sb2FkZXIgPiBkaXYgPiBkaXYge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzO1xufVxuQC13ZWJraXQta2V5ZnJhbWVzIHNrLWJvdW5jZSB7XG4gIDAlLFxuICAxMDAlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMCk7XG4gIH1cbiAgNTAlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbn1cbkBrZXlmcmFtZXMgc2stYm91bmNlIHtcbiAgMCUsXG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApO1xuICB9XG4gIDUwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbn1cbiJdfQ== */
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_default_theme/resources/css/ext/ekko-lightbox.min.css	Tue Nov 20 15:18:10 2018 +0100
@@ -0,0 +1,1 @@
+.ekko-lightbox{display:-ms-flexbox!important;display:flex!important;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;padding-right:0!important}.ekko-lightbox-container{position:relative}.ekko-lightbox-container>div.ekko-lightbox-item{position:absolute;top:0;left:0;bottom:0;right:0;width:100%}.ekko-lightbox iframe{width:100%;height:100%}.ekko-lightbox-nav-overlay{z-index:1;position:absolute;top:0;left:0;width:100%;height:100%;display:-ms-flexbox;display:flex}.ekko-lightbox-nav-overlay a{-ms-flex:1;flex:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;opacity:0;transition:opacity .5s;color:#fff;font-size:30px;z-index:1}.ekko-lightbox-nav-overlay a>*{-ms-flex-positive:1;flex-grow:1}.ekko-lightbox-nav-overlay a>:focus{outline:0}.ekko-lightbox-nav-overlay a span{padding:0 30px}.ekko-lightbox-nav-overlay a:last-child span{text-align:right}.ekko-lightbox-nav-overlay a:hover{text-decoration:none}.ekko-lightbox-nav-overlay a:focus{outline:0}.ekko-lightbox-nav-overlay a.disabled{cursor:default;visibility:hidden}.ekko-lightbox a:hover{opacity:1;text-decoration:none}.ekko-lightbox .modal-dialog{display:none}.ekko-lightbox .modal-footer{text-align:left}.ekko-lightbox-loader{position:absolute;top:0;left:0;bottom:0;right:0;width:100%;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center}.ekko-lightbox-loader>div{width:40px;height:40px;position:relative;text-align:center}.ekko-lightbox-loader>div>div{width:100%;height:100%;border-radius:50%;background-color:#fff;opacity:.6;position:absolute;top:0;left:0;animation:a 2s infinite ease-in-out}.ekko-lightbox-loader>div>div:last-child{animation-delay:-1s}.modal-dialog .ekko-lightbox-loader>div>div{background-color:#333}@keyframes a{0%,to{transform:scale(0);-webkit-transform:scale(0)}50%{transform:scale(1);-webkit-transform:scale(1)}}
--- a/src/pyams_default_theme/resources/css/pyams-default.css	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/resources/css/pyams-default.css	Tue Nov 20 15:18:10 2018 +0100
@@ -1,5 +1,17 @@
+/**
+ * Generic styles
+ */
+.margin-bottom-10 {
+  margin-bottom: 10px;
+}
+.margin-bottom-20 {
+  margin-bottom: 20px;
+}
+/**
+ * Main classes
+ */
 body {
-  font-family: "Advent Pro", Helvetica, Arial, sans-serif;
+  font-family: Lato, Helvetica, Arial, sans-serif;
   margin: 0 auto;
 }
 body .header-simple .regularbanner {
@@ -14,7 +26,46 @@
   position: absolute;
   top: 10px;
   left: 10px;
-  max-height: calc(80%);
+  max-height: calc(100% - 20px);
+}
+body .affix {
+  top: 0;
+  width: 100%;
+  z-index: 9999 !important;
+  opacity: 0.95;
+  transition: all 0.5s ease-in-out;
+}
+body .affix ~ .container-fluid {
+  position: relative;
+  top: 50px;
+}
+body .navbar {
+  margin-bottom: 20px;
+  background-color: white;
+  border: 1px solid #39413b;
+  font-family: Oswald, Helvetica, Arial, Sans-Serif;
+  transition: all 0.5s ease-in-out;
+}
+body .navbar a,
+body .navbar a:active,
+body .navbar a:visited {
+  color: #39413b;
+}
+body .navbar li.active,
+body .navbar .icon-bar {
+  background-color: #a5bcaa;
+}
+body .navbar.affix {
+  background-color: #39413b;
+}
+body .navbar.affix a {
+  color: white;
+}
+body .navbar.affix:hover a:hover {
+  color: #39413b;
+}
+body .navbar.affix .icon-bar {
+  background-color: white;
 }
 h1,
 h2,
@@ -44,10 +95,112 @@
     display: none;
   }
 }
-.margin-bottom-10 {
-  margin-bottom: 10px;
+/**
+ * Summary styles
+ */
+.summary .thumbnail.pull-left {
+  margin-right: 15px;
+}
+blockquote {
+  margin-top: 2rem;
+  border: 1px solid #ddd;
+  border-left: 5px solid #ddd;
+}
+blockquote.pull-right {
+  padding: 0 15px;
+  text-align: left;
+  border: 1px solid #ddd;
+  border-left: 5px solid #ddd;
+}
+/**
+ * Images gallery
+ */
+.illustration {
+  margin-bottom: 1rem;
+}
+.illustration .author {
+  padding-top: 0.2em;
+  font-size: 0.9em;
+  font-style: italic;
+}
+.gallery {
+  display: flex;
+  flex-wrap: wrap;
+}
+.gallery .legend {
+  margin-bottom: 0.2em;
+}
+.gallery img {
+  box-shadow: 0 2px 6px 2px rgba(0, 0, 0, 0.75);
+  margin-bottom: 5px;
+  filter: grayscale();
+  transition: all ease-in-out 0.5s;
+}
+.gallery img:hover {
+  filter: none;
+}
+.gallery .author {
+  margin-bottom: 15px;
+  text-align: right;
+  font-style: italic;
+  font-size: 0.8em;
 }
-.margin-bottom-20 {
-  margin-bottom: 20px;
+.ekko-lightbox {
+  position: fixed;
+  top: 0!important;
+  height: 100vh;
+}
+.ekko-lightbox .modal-footer {
+  padding-top: 0;
+  text-align: right!important;
+  font-style: italic;
+  font-size: 0.8em;
+}
+/**
+ * Videos
+ */
+.video-wrapper iframe {
+  width: 100%;
+}
+/**
+ * Milestones
+ */
+.milestones {
+  display: flex;
+  justify-content: space-around;
+}
+.milestones .arrow {
+  font-weight: bold;
+  font-size: 1.5em;
+}
+/**
+ * Contact card
+ */
+.contact-card .photo.pull-left {
+  margin-right: 1em;
+}
+.contact-card .photo.pull-right {
+  margin-left: 1em;
+}
+.contact-card .address {
+  margin-top: 0.5em;
+  margin-bottom: 0.5em;
+}
+/**
+ * Verbatim
+ */
+.verbatim .panel-body {
+  position: relative;
+  margin-left: 50px;
+}
+.verbatim .panel-body::before {
+  content: '«';
+  position: absolute;
+  left: -30px;
+  top: 0;
+  font-size: 4em;
+}
+.verbatim .panel-body .author {
+  margin-top: 0.5em;
 }
 /*# sourceMappingURL=pyams-default.css.map */
\ No newline at end of file
--- a/src/pyams_default_theme/resources/css/pyams-default.css.map	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/resources/css/pyams-default.css.map	Tue Nov 20 15:18:10 2018 +0100
@@ -1,1 +1,1 @@
-{"version":3,"sources":["../../../../../../../../../home/tflorac/Dropbox/src/PyAMS/pyams_default_theme/src/pyams_default_theme/resources/less/pyams-default.less"],"names":[],"mappings":"AACA;EACC,aAAa,0CAAb;EACA,cAAA;;AAFD,IAIC,eACC;EACC,kBAAA;;AAIC,IANH,eACC,eAGC,QAEE;AAAD,IANH,eACC,eAIC,IACE;EACA,WAAA;;AAED,IATH,eACC,eAGC,QAKE;AAAD,IATH,eACC,eAIC,IAIE;EACA,kBAAA;EACA,SAAA;EACA,UAAA;EACA,YAAY,SAAZ;;AAOL;AACA;AACA;AACA;AACA;AACA;EACC,iDAAA;;AAKC,wBAA2C;EAC1C,YAFF,MAEG;IACA,aAAA;;;AAGF,wBAA0C,uBAAwB;EACjE,YAPF,MAOG;IACA,aAAA;;;AAGF,wBAA0C,uBAAuB;EAChE,YAZF,MAYG;IACA,aAAA;;;AAGF,wBAA0C;EACzC,YAjBF,MAiBG;IACA,aAAA;;;AAQH,cAAC;EACA,mBAAA;;AAED,cAAC;EACA,mBAAA","file":"pyams-default.css"}
\ No newline at end of file
+{"version":3,"sources":["../../../../../../../../../home/tflorac/Dropbox/src/PyAMS/pyams_default_theme/src/pyams_default_theme/resources/less/pyams-default.less"],"names":[],"mappings":";;;AAIC,cAAC;EACA,mBAAA;;AAED,cAAC;EACA,mBAAA;;;;;AASF;EACC,+CAAA;EACA,cAAA;;AAFD,IAIC,eACC;EACC,kBAAA;;AAIC,IANH,eACC,eAGC,QAEE;AAAD,IANH,eACC,eAIC,IACE;EACA,WAAA;;AAED,IATH,eACC,eAGC,QAKE;AAAD,IATH,eACC,eAIC,IAIE;EACA,kBAAA;EACA,SAAA;EACA,UAAA;EACA,6BAAA;;AAjBL,IAsBC;EACC,MAAA;EACA,WAAA;EACA,wBAAA;EACA,aAAA;EACA,gCAAA;;AA3BF,IA6BC,OAAO;EACN,kBAAA;EACA,SAAA;;AA/BF,IAiCC;EACC,mBAAA;EACA,uBAAA;EACA,yBAAA;EACA,iDAAA;EACA,gCAAA;;AAtCF,IAiCC,QAOC;AAxCF,IAiCC,QAQC,EAAC;AAzCH,IAiCC,QASC,EAAC;EACA,cAAA;;AA3CH,IAiCC,QAYC,GAAE;AA7CJ,IAiCC,QAaC;EACC,yBAAA;;AAED,IAhBD,QAgBE;EACA,yBAAA;;AADD,IAhBD,QAgBE,MAGA;EACC,YAAA;;AAED,IAtBF,QAgBE,MAMC,MACA,EAAC;EACA,cAAA;;AARH,IAhBD,QAgBE,MAWA;EACC,uBAAA;;AAMJ;AACA;AACA;AACA;AACA;AACA;EACC,iDAAA;;AAKC,wBAA2C;EAC1C,YAFF,MAEG;IACA,aAAA;;;AAGF,wBAA0C,uBAAwB;EACjE,YAPF,MAOG;IACA,aAAA;;;AAGF,wBAA0C,uBAAuB;EAChE,YAZF,MAYG;IACA,aAAA;;;AAGF,wBAA0C;EACzC,YAjBF,MAiBG;IACA,aAAA;;;;;;AAaF,QADD,WACE;EACA,kBAAA;;AAKH;EACC,gBAAA;EACA,sBAAA;EACA,2BAAA;;AAEA,UAAC;EACA,eAAA;EACA,gBAAA;EACA,sBAAA;EACA,2BAAA;;;;;AAQF;EACC,mBAAA;;AADD,aAGC;EACC,kBAAA;EACA,gBAAA;EACA,kBAAA;;AAGF;EACC,aAAA;EACA,eAAA;;AAFD,QAIC;EACC,oBAAA;;AALF,QAOC;EACC,6CAAA;EACG,kBAAA;EACH,QAAQ,WAAR;EACA,gCAAA;;AAEA,QAND,IAME;EACA,YAAA;;AAdH,QAiBC;EACC,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,gBAAA;;AAIF;EACC,eAAA;EACA,gBAAA;EACA,aAAA;;AAHD,cAKC;EACC,cAAA;EACA,2BAAA;EACA,kBAAA;EACA,gBAAA;;;;;AASF,cACC;EACC,WAAA;;;;;AAQF;EACC,aAAA;EACA,6BAAA;;AAFD,WAIC;EACC,iBAAA;EACA,gBAAA;;;;;AAWA,aADD,OACE;EACA,iBAAA;;AAED,aAJD,OAIE;EACA,gBAAA;;AANH,aASC;EACC,iBAAA;EACA,oBAAA;;;;;AASF,SACC;EACC,kBAAA;EACA,iBAAA;;AAEA,SAJD,YAIE;EACA,SAAS,GAAT;EACA,kBAAA;EACA,WAAA;EACA,MAAA;EACA,cAAA;;AAVH,SACC,YAWC;EACC,iBAAA","file":"pyams-default.css"}
\ No newline at end of file
--- a/src/pyams_default_theme/resources/css/pyams-default.min.css	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/resources/css/pyams-default.min.css	Tue Nov 20 15:18:10 2018 +0100
@@ -1,1 +1,1 @@
-body{font-family:"Advent Pro",Helvetica,Arial,sans-serif;margin:0 auto}body .header-simple .regularbanner{position:relative}body .header-simple .regularbanner img.regularbanner__media,body .header-simple .regularbanner picture.regularbanner__media{width:100%}body .header-simple .regularbanner img.logo,body .header-simple .regularbanner picture.logo{position:absolute;top:10px;left:10px;max-height:calc(80%)}h1,h2,h3,h4,h5,h6{font-family:Oswald,Helvetica,Arial,Sans-Serif}@media only screen and (min-width:1200px){.portal-page .slot.col-lg-0{display:none}}@media only screen and (min-width:992px) and (max-width:1199px){.portal-page .slot.col-md-0{display:none}}@media only screen and (min-width:768px) and (max-width:991px){.portal-page .slot.col-sm-0{display:none}}@media only screen and (max-width:767px){.portal-page .slot.col-xs-0{display:none}}.margin-bottom-10{margin-bottom:10px}.margin-bottom-20{margin-bottom:20px}
+.margin-bottom-10{margin-bottom:10px}.margin-bottom-20{margin-bottom:20px}body{font-family:Lato,Helvetica,Arial,sans-serif;margin:0 auto}body .header-simple .regularbanner{position:relative}body .header-simple .regularbanner img.regularbanner__media,body .header-simple .regularbanner picture.regularbanner__media{width:100%}body .header-simple .regularbanner img.logo,body .header-simple .regularbanner picture.logo{position:absolute;top:10px;left:10px;max-height:calc(100% - 20px)}body .affix{top:0;width:100%;z-index:9999!important;opacity:.95;transition:all .5s ease-in-out}body .affix~.container-fluid{position:relative;top:50px}body .navbar{margin-bottom:20px;background-color:#fff;border:1px solid #39413b;font-family:Oswald,Helvetica,Arial,Sans-Serif;transition:all .5s ease-in-out}body .navbar a,body .navbar a:active,body .navbar a:visited{color:#39413b}body .navbar .icon-bar,body .navbar li.active{background-color:#a5bcaa}body .navbar.affix{background-color:#39413b}body .navbar.affix a{color:#fff}body .navbar.affix:hover a:hover{color:#39413b}body .navbar.affix .icon-bar{background-color:#fff}h1,h2,h3,h4,h5,h6{font-family:Oswald,Helvetica,Arial,Sans-Serif}@media only screen and (min-width:1200px){.portal-page .slot.col-lg-0{display:none}}@media only screen and (min-width:992px) and (max-width:1199px){.portal-page .slot.col-md-0{display:none}}@media only screen and (min-width:768px) and (max-width:991px){.portal-page .slot.col-sm-0{display:none}}@media only screen and (max-width:767px){.portal-page .slot.col-xs-0{display:none}}.summary .thumbnail.pull-left{margin-right:15px}blockquote{margin-top:2rem;border:1px solid #ddd;border-left:5px solid #ddd}blockquote.pull-right{padding:0 15px;text-align:left;border:1px solid #ddd;border-left:5px solid #ddd}.illustration{margin-bottom:1rem}.illustration .author{padding-top:.2em;font-size:.9em;font-style:italic}.gallery{display:flex;flex-wrap:wrap}.gallery .legend{margin-bottom:.2em}.gallery img{box-shadow:0 2px 6px 2px rgba(0,0,0,.75);margin-bottom:5px;filter:grayscale();transition:all ease-in-out .5s}.gallery img:hover{filter:none}.gallery .author{margin-bottom:15px;text-align:right;font-style:italic;font-size:.8em}.ekko-lightbox{position:fixed;top:0!important;height:100vh}.ekko-lightbox .modal-footer{padding-top:0;text-align:right!important;font-style:italic;font-size:.8em}.video-wrapper iframe{width:100%}.milestones{display:flex;justify-content:space-around}.milestones .arrow{font-weight:700;font-size:1.5em}.contact-card .photo.pull-left{margin-right:1em}.contact-card .photo.pull-right{margin-left:1em}.contact-card .address{margin-top:.5em;margin-bottom:.5em}.verbatim .panel-body{position:relative;margin-left:50px}.verbatim .panel-body::before{content:'«';position:absolute;left:-30px;top:0;font-size:4em}.verbatim .panel-body .author{margin-top:.5em}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_default_theme/resources/js/ext/ekko-lightbox.js	Tue Nov 20 15:18:10 2018 +0100
@@ -0,0 +1,694 @@
+/*!
+ * Lightbox for Bootstrap by @ashleydw
+ * https://github.com/ashleydw/lightbox
+ *
+ * License: https://github.com/ashleydw/lightbox/blob/master/LICENSE
+ */
++function ($) {
+
+'use strict';
+
+var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
+
+var Lightbox = (function ($) {
+
+	var NAME = 'ekkoLightbox';
+	var JQUERY_NO_CONFLICT = $.fn[NAME];
+
+	var Default = {
+		title: '',
+		footer: '',
+		maxWidth: 9999,
+		maxHeight: 9999,
+		showArrows: true, //display the left / right arrows or not
+		wrapping: true, //if true, gallery loops infinitely
+		type: null, //force the lightbox into image / youtube mode. if null, or not image|youtube|vimeo; detect it
+		alwaysShowClose: false, //always show the close button, even if there is no title
+		loadingMessage: '<div class="ekko-lightbox-loader"><div><div></div><div></div></div></div>', // http://tobiasahlin.com/spinkit/
+		leftArrow: '<span>&#10094;</span>',
+		rightArrow: '<span>&#10095;</span>',
+		strings: {
+			close: 'Close',
+			fail: 'Failed to load image:',
+			type: 'Could not detect remote target type. Force the type using data-type'
+		},
+		doc: document, // if in an iframe can specify top.document
+		onShow: function onShow() {},
+		onShown: function onShown() {},
+		onHide: function onHide() {},
+		onHidden: function onHidden() {},
+		onNavigate: function onNavigate() {},
+		onContentLoaded: function onContentLoaded() {}
+	};
+
+	var Lightbox = (function () {
+		_createClass(Lightbox, null, [{
+			key: 'Default',
+
+			/**
+       Class properties:
+   	 _$element: null -> the <a> element currently being displayed
+    _$modal: The bootstrap modal generated
+       _$modalDialog: The .modal-dialog
+       _$modalContent: The .modal-content
+       _$modalBody: The .modal-body
+       _$modalHeader: The .modal-header
+       _$modalFooter: The .modal-footer
+    _$lightboxContainerOne: Container of the first lightbox element
+    _$lightboxContainerTwo: Container of the second lightbox element
+    _$lightboxBody: First element in the container
+    _$modalArrows: The overlayed arrows container
+   	 _$galleryItems: Other <a>'s available for this gallery
+    _galleryName: Name of the current data('gallery') showing
+    _galleryIndex: The current index of the _$galleryItems being shown
+   	 _config: {} the options for the modal
+    _modalId: unique id for the current lightbox
+    _padding / _border: CSS properties for the modal container; these are used to calculate the available space for the content
+   	 */
+
+			get: function get() {
+				return Default;
+			}
+		}]);
+
+		function Lightbox($element, config) {
+			var _this = this;
+
+			_classCallCheck(this, Lightbox);
+
+			this._config = $.extend({}, Default, config);
+			this._$modalArrows = null;
+			this._galleryIndex = 0;
+			this._galleryName = null;
+			this._padding = null;
+			this._border = null;
+			this._titleIsShown = false;
+			this._footerIsShown = false;
+			this._wantedWidth = 0;
+			this._wantedHeight = 0;
+			this._touchstartX = 0;
+			this._touchendX = 0;
+
+			this._modalId = 'ekkoLightbox-' + Math.floor(Math.random() * 1000 + 1);
+			this._$element = $element instanceof jQuery ? $element : $($element);
+
+			this._isBootstrap3 = $.fn.modal.Constructor.VERSION[0] == 3;
+
+			var h4 = '<h4 class="modal-title">' + (this._config.title || "&nbsp;") + '</h4>';
+			var btn = '<button type="button" class="close" data-dismiss="modal" aria-label="' + this._config.strings.close + '"><span aria-hidden="true">&times;</span></button>';
+
+			var header = '<div class="modal-header' + (this._config.title || this._config.alwaysShowClose ? '' : ' hide') + '">' + (this._isBootstrap3 ? btn + h4 : h4 + btn) + '</div>';
+			var footer = '<div class="modal-footer' + (this._config.footer ? '' : ' hide') + '">' + (this._config.footer || "&nbsp;") + '</div>';
+			var body = '<div class="modal-body"><div class="ekko-lightbox-container"><div class="ekko-lightbox-item fade in show"></div><div class="ekko-lightbox-item fade"></div></div></div>';
+			var dialog = '<div class="modal-dialog" role="document"><div class="modal-content">' + header + body + footer + '</div></div>';
+			$(this._config.doc.body).append('<div id="' + this._modalId + '" class="ekko-lightbox modal fade" tabindex="-1" tabindex="-1" role="dialog" aria-hidden="true">' + dialog + '</div>');
+
+			this._$modal = $('#' + this._modalId, this._config.doc);
+			this._$modalDialog = this._$modal.find('.modal-dialog').first();
+			this._$modalContent = this._$modal.find('.modal-content').first();
+			this._$modalBody = this._$modal.find('.modal-body').first();
+			this._$modalHeader = this._$modal.find('.modal-header').first();
+			this._$modalFooter = this._$modal.find('.modal-footer').first();
+
+			this._$lightboxContainer = this._$modalBody.find('.ekko-lightbox-container').first();
+			this._$lightboxBodyOne = this._$lightboxContainer.find('> div:first-child').first();
+			this._$lightboxBodyTwo = this._$lightboxContainer.find('> div:last-child').first();
+
+			this._border = this._calculateBorders();
+			this._padding = this._calculatePadding();
+
+			this._galleryName = this._$element.data('gallery');
+			if (this._galleryName) {
+				this._$galleryItems = $(document.body).find('*[data-gallery="' + this._galleryName + '"]');
+				this._galleryIndex = this._$galleryItems.index(this._$element);
+				$(document).on('keydown.ekkoLightbox', this._navigationalBinder.bind(this));
+
+				// add the directional arrows to the modal
+				if (this._config.showArrows && this._$galleryItems.length > 1) {
+					this._$lightboxContainer.append('<div class="ekko-lightbox-nav-overlay"><a href="#">' + this._config.leftArrow + '</a><a href="#">' + this._config.rightArrow + '</a></div>');
+					this._$modalArrows = this._$lightboxContainer.find('div.ekko-lightbox-nav-overlay').first();
+					this._$lightboxContainer.on('click', 'a:first-child', function (event) {
+						event.preventDefault();
+						return _this.navigateLeft();
+					});
+					this._$lightboxContainer.on('click', 'a:last-child', function (event) {
+						event.preventDefault();
+						return _this.navigateRight();
+					});
+					this.updateNavigation();
+				}
+			}
+
+			this._$modal.on('show.bs.modal', this._config.onShow.bind(this)).on('shown.bs.modal', function () {
+				_this._toggleLoading(true);
+				_this._handle();
+				return _this._config.onShown.call(_this);
+			}).on('hide.bs.modal', this._config.onHide.bind(this)).on('hidden.bs.modal', function () {
+				if (_this._galleryName) {
+					$(document).off('keydown.ekkoLightbox');
+					$(window).off('resize.ekkoLightbox');
+				}
+				_this._$modal.remove();
+				return _this._config.onHidden.call(_this);
+			}).modal(this._config);
+
+			$(window).on('resize.ekkoLightbox', function () {
+				_this._resize(_this._wantedWidth, _this._wantedHeight);
+			});
+			this._$lightboxContainer.on('touchstart', function () {
+				_this._touchstartX = event.changedTouches[0].screenX;
+			}).on('touchend', function () {
+				_this._touchendX = event.changedTouches[0].screenX;
+				_this._swipeGesure();
+			});
+		}
+
+		_createClass(Lightbox, [{
+			key: 'element',
+			value: function element() {
+				return this._$element;
+			}
+		}, {
+			key: 'modal',
+			value: function modal() {
+				return this._$modal;
+			}
+		}, {
+			key: 'navigateTo',
+			value: function navigateTo(index) {
+
+				if (index < 0 || index > this._$galleryItems.length - 1) return this;
+
+				this._galleryIndex = index;
+
+				this.updateNavigation();
+
+				this._$element = $(this._$galleryItems.get(this._galleryIndex));
+				this._handle();
+			}
+		}, {
+			key: 'navigateLeft',
+			value: function navigateLeft() {
+
+				if (!this._$galleryItems) return;
+
+				if (this._$galleryItems.length === 1) return;
+
+				if (this._galleryIndex === 0) {
+					if (this._config.wrapping) this._galleryIndex = this._$galleryItems.length - 1;else return;
+				} else //circular
+					this._galleryIndex--;
+
+				this._config.onNavigate.call(this, 'left', this._galleryIndex);
+				return this.navigateTo(this._galleryIndex);
+			}
+		}, {
+			key: 'navigateRight',
+			value: function navigateRight() {
+
+				if (!this._$galleryItems) return;
+
+				if (this._$galleryItems.length === 1) return;
+
+				if (this._galleryIndex === this._$galleryItems.length - 1) {
+					if (this._config.wrapping) this._galleryIndex = 0;else return;
+				} else //circular
+					this._galleryIndex++;
+
+				this._config.onNavigate.call(this, 'right', this._galleryIndex);
+				return this.navigateTo(this._galleryIndex);
+			}
+		}, {
+			key: 'updateNavigation',
+			value: function updateNavigation() {
+				if (!this._config.wrapping) {
+					var $nav = this._$lightboxContainer.find('div.ekko-lightbox-nav-overlay');
+					if (this._galleryIndex === 0) $nav.find('a:first-child').addClass('disabled');else $nav.find('a:first-child').removeClass('disabled');
+
+					if (this._galleryIndex === this._$galleryItems.length - 1) $nav.find('a:last-child').addClass('disabled');else $nav.find('a:last-child').removeClass('disabled');
+				}
+			}
+		}, {
+			key: 'close',
+			value: function close() {
+				return this._$modal.modal('hide');
+			}
+
+			// helper private methods
+		}, {
+			key: '_navigationalBinder',
+			value: function _navigationalBinder(event) {
+				event = event || window.event;
+				if (event.keyCode === 39) return this.navigateRight();
+				if (event.keyCode === 37) return this.navigateLeft();
+			}
+
+			// type detection private methods
+		}, {
+			key: '_detectRemoteType',
+			value: function _detectRemoteType(src, type) {
+
+				type = type || false;
+
+				if (!type && this._isImage(src)) type = 'image';
+				if (!type && this._getYoutubeId(src)) type = 'youtube';
+				if (!type && this._getVimeoId(src)) type = 'vimeo';
+				if (!type && this._getInstagramId(src)) type = 'instagram';
+				if (type == 'audio' || type == 'video' || !type && this._isMedia(src)) type = 'media';
+				if (!type || ['image', 'youtube', 'vimeo', 'instagram', 'media', 'url'].indexOf(type) < 0) type = 'url';
+
+				return type;
+			}
+		}, {
+			key: '_getRemoteContentType',
+			value: function _getRemoteContentType(src) {
+				var response = $.ajax({
+					type: 'HEAD',
+					url: src,
+					async: false
+				});
+				var contentType = response.getResponseHeader('Content-Type');
+				return contentType;
+			}
+		}, {
+			key: '_isImage',
+			value: function _isImage(string) {
+				return string && string.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i);
+			}
+		}, {
+			key: '_isMedia',
+			value: function _isMedia(string) {
+				return string && string.match(/(\.(mp3|mp4|ogg|webm|wav)((\?|#).*)?$)/i);
+			}
+		}, {
+			key: '_containerToUse',
+			value: function _containerToUse() {
+				var _this2 = this;
+
+				// if currently showing an image, fade it out and remove
+				var $toUse = this._$lightboxBodyTwo;
+				var $current = this._$lightboxBodyOne;
+
+				if (this._$lightboxBodyTwo.hasClass('in')) {
+					$toUse = this._$lightboxBodyOne;
+					$current = this._$lightboxBodyTwo;
+				}
+
+				$current.removeClass('in show');
+				setTimeout(function () {
+					if (!_this2._$lightboxBodyTwo.hasClass('in')) _this2._$lightboxBodyTwo.empty();
+					if (!_this2._$lightboxBodyOne.hasClass('in')) _this2._$lightboxBodyOne.empty();
+				}, 500);
+
+				$toUse.addClass('in show');
+				return $toUse;
+			}
+		}, {
+			key: '_handle',
+			value: function _handle() {
+
+				var $toUse = this._containerToUse();
+				this._updateTitleAndFooter();
+
+				var currentRemote = this._$element.attr('data-remote') || this._$element.attr('href');
+				var currentType = this._detectRemoteType(currentRemote, this._$element.attr('data-type') || false);
+
+				if (['image', 'youtube', 'vimeo', 'instagram', 'media', 'url'].indexOf(currentType) < 0) return this._error(this._config.strings.type);
+
+				switch (currentType) {
+					case 'image':
+						this._preloadImage(currentRemote, $toUse);
+						this._preloadImageByIndex(this._galleryIndex, 3);
+						break;
+					case 'youtube':
+						this._showYoutubeVideo(currentRemote, $toUse);
+						break;
+					case 'vimeo':
+						this._showVimeoVideo(this._getVimeoId(currentRemote), $toUse);
+						break;
+					case 'instagram':
+						this._showInstagramVideo(this._getInstagramId(currentRemote), $toUse);
+						break;
+					case 'media':
+						this._showHtml5Media(currentRemote, $toUse);
+						break;
+					default:
+						// url
+						this._loadRemoteContent(currentRemote, $toUse);
+						break;
+				}
+
+				return this;
+			}
+		}, {
+			key: '_getYoutubeId',
+			value: function _getYoutubeId(string) {
+				if (!string) return false;
+				var matches = string.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/);
+				return matches && matches[2].length === 11 ? matches[2] : false;
+			}
+		}, {
+			key: '_getVimeoId',
+			value: function _getVimeoId(string) {
+				return string && string.indexOf('vimeo') > 0 ? string : false;
+			}
+		}, {
+			key: '_getInstagramId',
+			value: function _getInstagramId(string) {
+				return string && string.indexOf('instagram') > 0 ? string : false;
+			}
+
+			// layout private methods
+		}, {
+			key: '_toggleLoading',
+			value: function _toggleLoading(show) {
+				show = show || false;
+				if (show) {
+					this._$modalDialog.css('display', 'none');
+					this._$modal.removeClass('in show');
+					$('.modal-backdrop').append(this._config.loadingMessage);
+				} else {
+					this._$modalDialog.css('display', 'block');
+					this._$modal.addClass('in show');
+					$('.modal-backdrop').find('.ekko-lightbox-loader').remove();
+				}
+				return this;
+			}
+		}, {
+			key: '_calculateBorders',
+			value: function _calculateBorders() {
+				return {
+					top: this._totalCssByAttribute('border-top-width'),
+					right: this._totalCssByAttribute('border-right-width'),
+					bottom: this._totalCssByAttribute('border-bottom-width'),
+					left: this._totalCssByAttribute('border-left-width')
+				};
+			}
+		}, {
+			key: '_calculatePadding',
+			value: function _calculatePadding() {
+				return {
+					top: this._totalCssByAttribute('padding-top'),
+					right: this._totalCssByAttribute('padding-right'),
+					bottom: this._totalCssByAttribute('padding-bottom'),
+					left: this._totalCssByAttribute('padding-left')
+				};
+			}
+		}, {
+			key: '_totalCssByAttribute',
+			value: function _totalCssByAttribute(attribute) {
+				return parseInt(this._$modalDialog.css(attribute), 10) + parseInt(this._$modalContent.css(attribute), 10) + parseInt(this._$modalBody.css(attribute), 10);
+			}
+		}, {
+			key: '_updateTitleAndFooter',
+			value: function _updateTitleAndFooter() {
+				var title = this._$element.data('title') || "";
+				var caption = this._$element.data('footer') || "";
+
+				this._titleIsShown = false;
+				if (title || this._config.alwaysShowClose) {
+					this._titleIsShown = true;
+					this._$modalHeader.css('display', '').find('.modal-title').html(title || "&nbsp;");
+				} else this._$modalHeader.css('display', 'none');
+
+				this._footerIsShown = false;
+				if (caption) {
+					this._footerIsShown = true;
+					this._$modalFooter.css('display', '').html(caption);
+				} else this._$modalFooter.css('display', 'none');
+
+				return this;
+			}
+		}, {
+			key: '_showYoutubeVideo',
+			value: function _showYoutubeVideo(remote, $containerForElement) {
+				var id = this._getYoutubeId(remote);
+				var query = remote.indexOf('&') > 0 ? remote.substr(remote.indexOf('&')) : '';
+				var width = this._$element.data('width') || 560;
+				var height = this._$element.data('height') || width / (560 / 315);
+				return this._showVideoIframe('//www.youtube.com/embed/' + id + '?badge=0&autoplay=1&html5=1' + query, width, height, $containerForElement);
+			}
+		}, {
+			key: '_showVimeoVideo',
+			value: function _showVimeoVideo(id, $containerForElement) {
+				var width = this._$element.data('width') || 500;
+				var height = this._$element.data('height') || width / (560 / 315);
+				return this._showVideoIframe(id + '?autoplay=1', width, height, $containerForElement);
+			}
+		}, {
+			key: '_showInstagramVideo',
+			value: function _showInstagramVideo(id, $containerForElement) {
+				// instagram load their content into iframe's so this can be put straight into the element
+				var width = this._$element.data('width') || 612;
+				var height = width + 80;
+				id = id.substr(-1) !== '/' ? id + '/' : id; // ensure id has trailing slash
+				$containerForElement.html('<iframe width="' + width + '" height="' + height + '" src="' + id + 'embed/" frameborder="0" allowfullscreen></iframe>');
+				this._resize(width, height);
+				this._config.onContentLoaded.call(this);
+				if (this._$modalArrows) //hide the arrows when showing video
+					this._$modalArrows.css('display', 'none');
+				this._toggleLoading(false);
+				return this;
+			}
+		}, {
+			key: '_showVideoIframe',
+			value: function _showVideoIframe(url, width, height, $containerForElement) {
+				// should be used for videos only. for remote content use loadRemoteContent (data-type=url)
+				height = height || width; // default to square
+				$containerForElement.html('<div class="embed-responsive embed-responsive-16by9"><iframe width="' + width + '" height="' + height + '" src="' + url + '" frameborder="0" allowfullscreen class="embed-responsive-item"></iframe></div>');
+				this._resize(width, height);
+				this._config.onContentLoaded.call(this);
+				if (this._$modalArrows) this._$modalArrows.css('display', 'none'); //hide the arrows when showing video
+				this._toggleLoading(false);
+				return this;
+			}
+		}, {
+			key: '_showHtml5Media',
+			value: function _showHtml5Media(url, $containerForElement) {
+				// should be used for videos only. for remote content use loadRemoteContent (data-type=url)
+				var contentType = this._getRemoteContentType(url);
+				if (!contentType) {
+					return this._error(this._config.strings.type);
+				}
+				var mediaType = '';
+				if (contentType.indexOf('audio') > 0) {
+					mediaType = 'audio';
+				} else {
+					mediaType = 'video';
+				}
+				var width = this._$element.data('width') || 560;
+				var height = this._$element.data('height') || width / (560 / 315);
+				$containerForElement.html('<div class="embed-responsive embed-responsive-16by9"><' + mediaType + ' width="' + width + '" height="' + height + '" preload="auto" autoplay controls class="embed-responsive-item"><source src="' + url + '" type="' + contentType + '">' + this._config.strings.type + '</' + mediaType + '></div>');
+				this._resize(width, height);
+				this._config.onContentLoaded.call(this);
+				if (this._$modalArrows) this._$modalArrows.css('display', 'none'); //hide the arrows when showing video
+				this._toggleLoading(false);
+				return this;
+			}
+		}, {
+			key: '_loadRemoteContent',
+			value: function _loadRemoteContent(url, $containerForElement) {
+				var _this3 = this;
+
+				var width = this._$element.data('width') || 560;
+				var height = this._$element.data('height') || 560;
+
+				var disableExternalCheck = this._$element.data('disableExternalCheck') || false;
+				this._toggleLoading(false);
+
+				// external urls are loading into an iframe
+				// local ajax can be loaded into the container itself
+				if (!disableExternalCheck && !this._isExternal(url)) {
+					$containerForElement.load(url, $.proxy(function () {
+						return _this3._$element.trigger('loaded.bs.modal');l;
+					}));
+				} else {
+					$containerForElement.html('<iframe src="' + url + '" frameborder="0" allowfullscreen></iframe>');
+					this._config.onContentLoaded.call(this);
+				}
+
+				if (this._$modalArrows) //hide the arrows when remote content
+					this._$modalArrows.css('display', 'none');
+
+				this._resize(width, height);
+				return this;
+			}
+		}, {
+			key: '_isExternal',
+			value: function _isExternal(url) {
+				var match = url.match(/^([^:\/?#]+:)?(?:\/\/([^\/?#]*))?([^?#]+)?(\?[^#]*)?(#.*)?/);
+				if (typeof match[1] === "string" && match[1].length > 0 && match[1].toLowerCase() !== location.protocol) return true;
+
+				if (typeof match[2] === "string" && match[2].length > 0 && match[2].replace(new RegExp(':(' + ({
+					"http:": 80,
+					"https:": 443
+				})[location.protocol] + ')?$'), "") !== location.host) return true;
+
+				return false;
+			}
+		}, {
+			key: '_error',
+			value: function _error(message) {
+				console.error(message);
+				this._containerToUse().html(message);
+				this._resize(300, 300);
+				return this;
+			}
+		}, {
+			key: '_preloadImageByIndex',
+			value: function _preloadImageByIndex(startIndex, numberOfTimes) {
+
+				if (!this._$galleryItems) return;
+
+				var next = $(this._$galleryItems.get(startIndex), false);
+				if (typeof next == 'undefined') return;
+
+				var src = next.attr('data-remote') || next.attr('href');
+				if (next.attr('data-type') === 'image' || this._isImage(src)) this._preloadImage(src, false);
+
+				if (numberOfTimes > 0) return this._preloadImageByIndex(startIndex + 1, numberOfTimes - 1);
+			}
+		}, {
+			key: '_preloadImage',
+			value: function _preloadImage(src, $containerForImage) {
+				var _this4 = this;
+
+				$containerForImage = $containerForImage || false;
+
+				var img = new Image();
+				if ($containerForImage) {
+					(function () {
+
+						// if loading takes > 200ms show a loader
+						var loadingTimeout = setTimeout(function () {
+							$containerForImage.append(_this4._config.loadingMessage);
+						}, 200);
+
+						img.onload = function () {
+							if (loadingTimeout) clearTimeout(loadingTimeout);
+							loadingTimeout = null;
+							var image = $('<img />');
+							image.attr('src', img.src);
+							image.addClass('img-fluid');
+
+							// backward compatibility for bootstrap v3
+							image.css('width', '100%');
+
+							$containerForImage.html(image);
+							if (_this4._$modalArrows) _this4._$modalArrows.css('display', ''); // remove display to default to css property
+
+							_this4._resize(img.width, img.height);
+							_this4._toggleLoading(false);
+							return _this4._config.onContentLoaded.call(_this4);
+						};
+						img.onerror = function () {
+							_this4._toggleLoading(false);
+							return _this4._error(_this4._config.strings.fail + ('  ' + src));
+						};
+					})();
+				}
+
+				img.src = src;
+				return img;
+			}
+		}, {
+			key: '_swipeGesure',
+			value: function _swipeGesure() {
+				if (this._touchendX < this._touchstartX) {
+					return this.navigateRight();
+				}
+				if (this._touchendX > this._touchstartX) {
+					return this.navigateLeft();
+				}
+			}
+		}, {
+			key: '_resize',
+			value: function _resize(width, height) {
+
+				height = height || width;
+				this._wantedWidth = width;
+				this._wantedHeight = height;
+
+				var imageAspecRatio = width / height;
+
+				// if width > the available space, scale down the expected width and height
+				var widthBorderAndPadding = this._padding.left + this._padding.right + this._border.left + this._border.right;
+
+				// force 10px margin if window size > 575px
+				var addMargin = this._config.doc.body.clientWidth > 575 ? 20 : 0;
+				var discountMargin = this._config.doc.body.clientWidth > 575 ? 0 : 20;
+
+				var maxWidth = Math.min(width + widthBorderAndPadding, this._config.doc.body.clientWidth - addMargin, this._config.maxWidth);
+
+				if (width + widthBorderAndPadding > maxWidth) {
+					height = (maxWidth - widthBorderAndPadding - discountMargin) / imageAspecRatio;
+					width = maxWidth;
+				} else width = width + widthBorderAndPadding;
+
+				var headerHeight = 0,
+				    footerHeight = 0;
+
+				// as the resize is performed the modal is show, the calculate might fail
+				// if so, default to the default sizes
+				if (this._footerIsShown) footerHeight = this._$modalFooter.outerHeight(true) || 55;
+
+				if (this._titleIsShown) headerHeight = this._$modalHeader.outerHeight(true) || 67;
+
+				var borderPadding = this._padding.top + this._padding.bottom + this._border.bottom + this._border.top;
+
+				//calculated each time as resizing the window can cause them to change due to Bootstraps fluid margins
+				var margins = parseFloat(this._$modalDialog.css('margin-top')) + parseFloat(this._$modalDialog.css('margin-bottom'));
+
+				var maxHeight = Math.min(height, $(window).height() - borderPadding - margins - headerHeight - footerHeight, this._config.maxHeight - borderPadding - headerHeight - footerHeight);
+
+				if (height > maxHeight) {
+					// if height > the available height, scale down the width
+					width = Math.ceil(maxHeight * imageAspecRatio) + widthBorderAndPadding;
+				}
+
+				this._$lightboxContainer.css('height', maxHeight);
+				this._$modalDialog.css('flex', 1).css('maxWidth', width);
+
+				var modal = this._$modal.data('bs.modal');
+				if (modal) {
+					// v4 method is mistakenly protected
+					try {
+						modal._handleUpdate();
+					} catch (Exception) {
+						modal.handleUpdate();
+					}
+				}
+				return this;
+			}
+		}], [{
+			key: '_jQueryInterface',
+			value: function _jQueryInterface(config) {
+				var _this5 = this;
+
+				config = config || {};
+				return this.each(function () {
+					var $this = $(_this5);
+					var _config = $.extend({}, Lightbox.Default, $this.data(), typeof config === 'object' && config);
+
+					new Lightbox(_this5, _config);
+				});
+			}
+		}]);
+
+		return Lightbox;
+	})();
+
+	$.fn[NAME] = Lightbox._jQueryInterface;
+	$.fn[NAME].Constructor = Lightbox;
+	$.fn[NAME].noConflict = function () {
+		$.fn[NAME] = JQUERY_NO_CONFLICT;
+		return Lightbox._jQueryInterface;
+	};
+
+	return Lightbox;
+})(jQuery);
+//# sourceMappingURL=ekko-lightbox.js.map
+
+}(jQuery);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_default_theme/resources/js/ext/ekko-lightbox.js.map	Tue Nov 20 15:18:10 2018 +0100
@@ -0,0 +1,1 @@
+{"version":3,"sources":["../ekko-lightbox.js"],"names":["Lightbox","$","NAME","JQUERY_NO_CONFLICT","fn","Default","title","footer","maxWidth","maxHeight","showArrows","wrapping","type","alwaysShowClose","loadingMessage","leftArrow","rightArrow","strings","close","fail","doc","document","onShow","onShown","onHide","onHidden","onNavigate","onContentLoaded","$element","config","_config","extend","_$modalArrows","_galleryIndex","_galleryName","_padding","_border","_titleIsShown","_footerIsShown","_wantedWidth","_wantedHeight","_touchstartX","_touchendX","_modalId","Math","floor","random","_$element","jQuery","_isBootstrap3","modal","Constructor","VERSION","h4","btn","header","body","dialog","append","_$modal","_$modalDialog","find","first","_$modalContent","_$modalBody","_$modalHeader","_$modalFooter","_$lightboxContainer","_$lightboxBodyOne","_$lightboxBodyTwo","_calculateBorders","_calculatePadding","data","_$galleryItems","index","on","_navigationalBinder","bind","length","event","preventDefault","navigateLeft","navigateRight","updateNavigation","undefined","_toggleLoading","_handle","call","off","window","remove","_resize","changedTouches","screenX","_swipeGesure","get","navigateTo","$nav","addClass","removeClass","keyCode","src","_isImage","_getYoutubeId","_getVimeoId","_getDailymotionId","_getInstagramId","_isMedia","indexOf","response","ajax","url","async","contentType","getResponseHeader","string","match","$toUse","$current","hasClass","setTimeout","empty","_containerToUse","_updateTitleAndFooter","currentRemote","attr","currentType","_detectRemoteType","_error","_preloadImage","_preloadImageByIndex","_showYoutubeVideo","_showVimeoVideo","_showDailymotionVideo","_showInstagramVideo","_showHtml5Media","_loadRemoteContent","matches","show","css","top","_totalCssByAttribute","right","bottom","left","attribute","parseInt","caption","html","remote","$containerForElement","id","query","substr","width","height","_showVideoIframe","_getRemoteContentType","mediaType","disableExternalCheck","_isExternal","load","proxy","trigger","toLowerCase","location","protocol","replace","RegExp","host","message","console","error","startIndex","numberOfTimes","next","$containerForImage","img","Image","loadingTimeout","onload","clearTimeout","image","onerror","imageAspecRatio","widthBorderAndPadding","addMargin","clientWidth","discountMargin","min","headerHeight","footerHeight","outerHeight","borderPadding","margins","parseFloat","ceil","_handleUpdate","Exception","handleUpdate","each","$this","_jQueryInterface","noConflict"],"mappings":"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","file":"ekko-lightbox.js","sourcesContent":["const Lightbox = (($) => {\n\n\tconst NAME = 'ekkoLightbox'\n\tconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\n\tconst Default = {\n\t\ttitle: '',\n\t\tfooter: '',\n\t\tmaxWidth: 9999,\n\t\tmaxHeight: 9999,\n\t\tshowArrows: true, //display the left / right arrows or not\n\t\twrapping: true, //if true, gallery loops infinitely\n\t\ttype: null, //force the lightbox into image / youtube mode. if null, or not image|youtube|vimeo|dailymotion; detect it\n\t\talwaysShowClose: false, //always show the close button, even if there is no title\n\t\tloadingMessage: '<div class=\"ekko-lightbox-loader\"><div><div></div><div></div></div></div>', // http://tobiasahlin.com/spinkit/\n\t\tleftArrow: '<span>&#10094;</span>',\n\t\trightArrow: '<span>&#10095;</span>',\n\t\tstrings: {\n\t\t\tclose: 'Close',\n\t\t\tfail: 'Failed to load image:',\n\t\t\ttype: 'Could not detect remote target type. Force the type using data-type',\n\t\t},\n\t\tdoc: document, // if in an iframe can specify top.document\n\t\tonShow() {},\n\t\tonShown() {},\n\t\tonHide() {},\n\t\tonHidden() {},\n\t\tonNavigate() {},\n\t\tonContentLoaded() {}\n\t}\n\n\tclass Lightbox {\n\n\t\t/**\n\n\t    Class properties:\n\n\t\t _$element: null -> the <a> element currently being displayed\n\t\t _$modal: The bootstrap modal generated\n\t\t    _$modalDialog: The .modal-dialog\n\t\t    _$modalContent: The .modal-content\n\t\t    _$modalBody: The .modal-body\n\t\t    _$modalHeader: The .modal-header\n\t\t    _$modalFooter: The .modal-footer\n\t\t _$lightboxContainerOne: Container of the first lightbox element\n\t\t _$lightboxContainerTwo: Container of the second lightbox element\n\t\t _$lightboxBody: First element in the container\n\t\t _$modalArrows: The overlayed arrows container\n\n\t\t _$galleryItems: Other <a>'s available for this gallery\n\t\t _galleryName: Name of the current data('gallery') showing\n\t\t _galleryIndex: The current index of the _$galleryItems being shown\n\n\t\t _config: {} the options for the modal\n\t\t _modalId: unique id for the current lightbox\n\t\t _padding / _border: CSS properties for the modal container; these are used to calculate the available space for the content\n\n\t\t */\n\n\t\tstatic get Default() {\n\t\t\treturn Default\n\t\t}\n\n\t\tconstructor($element, config) {\n\t\t\tthis._config = $.extend({}, Default, config)\n\t\t\tthis._$modalArrows = null\n\t\t\tthis._galleryIndex = 0\n\t\t\tthis._galleryName = null\n\t\t\tthis._padding = null\n\t\t\tthis._border = null\n\t\t\tthis._titleIsShown = false\n\t\t\tthis._footerIsShown = false\n\t\t\tthis._wantedWidth = 0\n\t\t\tthis._wantedHeight = 0\n\t\t\tthis._touchstartX = 0\n\t\t\tthis._touchendX = 0\n\n\t\t\tthis._modalId = `ekkoLightbox-${Math.floor((Math.random() * 1000) + 1)}`;\n\t\t\tthis._$element = $element instanceof jQuery ? $element : $($element)\n\n\t\t\tthis._isBootstrap3 = $.fn.modal.Constructor.VERSION[0] == 3;\n\n\t\t\tlet h4 = `<h4 class=\"modal-title\">${this._config.title || \"&nbsp;\"}</h4>`;\n\t\t\tlet btn = `<button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"${this._config.strings.close}\"><span aria-hidden=\"true\">&times;</span></button>`;\n\n\t\t\tlet header = `<div class=\"modal-header${this._config.title || this._config.alwaysShowClose ? '' : ' hide'}\">`+(this._isBootstrap3 ? btn+h4 : h4+btn)+`</div>`;\n\t\t\tlet footer = `<div class=\"modal-footer${this._config.footer ? '' : ' hide'}\">${this._config.footer || \"&nbsp;\"}</div>`;\n\t\t\tlet body = '<div class=\"modal-body\"><div class=\"ekko-lightbox-container\"><div class=\"ekko-lightbox-item fade in show\"></div><div class=\"ekko-lightbox-item fade\"></div></div></div>'\n\t\t\tlet dialog = `<div class=\"modal-dialog\" role=\"document\"><div class=\"modal-content\">${header}${body}${footer}</div></div>`\n\t\t\t$(this._config.doc.body).append(`<div id=\"${this._modalId}\" class=\"ekko-lightbox modal fade\" tabindex=\"-1\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\">${dialog}</div>`)\n\n\t\t\tthis._$modal = $(`#${this._modalId}`, this._config.doc)\n\t\t\tthis._$modalDialog = this._$modal.find('.modal-dialog').first()\n\t\t\tthis._$modalContent = this._$modal.find('.modal-content').first()\n\t\t\tthis._$modalBody = this._$modal.find('.modal-body').first()\n\t\t\tthis._$modalHeader = this._$modal.find('.modal-header').first()\n\t\t\tthis._$modalFooter = this._$modal.find('.modal-footer').first()\n\n\t\t\tthis._$lightboxContainer = this._$modalBody.find('.ekko-lightbox-container').first()\n\t\t\tthis._$lightboxBodyOne = this._$lightboxContainer.find('> div:first-child').first()\n\t\t\tthis._$lightboxBodyTwo = this._$lightboxContainer.find('> div:last-child').first()\n\n\t\t\tthis._border = this._calculateBorders()\n\t\t\tthis._padding = this._calculatePadding()\n\n\t\t\tthis._galleryName = this._$element.data('gallery')\n\t\t\tif (this._galleryName) {\n\t\t\t\tthis._$galleryItems = $(document.body).find(`*[data-gallery=\"${this._galleryName}\"]`)\n\t\t\t\tthis._galleryIndex = this._$galleryItems.index(this._$element)\n\t\t\t\t$(document).on('keydown.ekkoLightbox', this._navigationalBinder.bind(this))\n\n\t\t\t\t// add the directional arrows to the modal\n\t\t\t\tif (this._config.showArrows && this._$galleryItems.length > 1) {\n\t\t\t\t\tthis._$lightboxContainer.append(`<div class=\"ekko-lightbox-nav-overlay\"><a href=\"#\">${this._config.leftArrow}</a><a href=\"#\">${this._config.rightArrow}</a></div>`)\n\t\t\t\t\tthis._$modalArrows = this._$lightboxContainer.find('div.ekko-lightbox-nav-overlay').first()\n\t\t\t\t\tthis._$lightboxContainer.on('click', 'a:first-child', event => {\n\t\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t\treturn this.navigateLeft()\n\t\t\t\t\t})\n\t\t\t\t\tthis._$lightboxContainer.on('click', 'a:last-child', event => {\n\t\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t\treturn this.navigateRight()\n\t\t\t\t\t})\n\t\t\t\t\tthis.updateNavigation()\n\t\t\t\t}\n\n\t\t\t\t// check for wrapping setting\n\t\t\t\tlet wrapping = this._$element.data('wrapping');\n\t\t\t\tif (wrapping !== undefined) {\n\t\t\t\t\tthis._config.wrapping = wrapping;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._$modal\n\t\t\t.on('show.bs.modal', this._config.onShow.bind(this))\n\t\t\t.on('shown.bs.modal', () => {\n\t\t\t\tthis._toggleLoading(true)\n\t\t\t\tthis._handle()\n\t\t\t\treturn this._config.onShown.call(this)\n\t\t\t})\n\t\t\t.on('hide.bs.modal', this._config.onHide.bind(this))\n\t\t\t.on('hidden.bs.modal', () => {\n\t\t\t\tif (this._galleryName) {\n\t\t\t\t\t$(document).off('keydown.ekkoLightbox')\n\t\t\t\t\t$(window).off('resize.ekkoLightbox')\n\t\t\t\t}\n\t\t\t\tthis._$modal.remove()\n\t\t\t\treturn this._config.onHidden.call(this)\n\t\t\t})\n\t\t\t.modal(this._config)\n\n\t\t\t$(window).on('resize.ekkoLightbox', () => {\n\t\t\t\tthis._resize(this._wantedWidth, this._wantedHeight)\n\t\t\t})\n\t\t\tthis._$lightboxContainer\n\t\t\t.on('touchstart', () => {\n\t\t\t\tthis._touchstartX = event.changedTouches[0].screenX;\n\n\t\t\t})\n\t\t\t.on('touchend', () => {\n\t\t\t\tthis._touchendX = event.changedTouches[0].screenX;\n\t\t\t    this._swipeGesure();\n\t\t\t})\n\t\t}\n\n\t\telement() {\n\t\t\treturn this._$element;\n\t\t}\n\n\t\tmodal() {\n\t\t\treturn this._$modal;\n\t\t}\n\n\t\tnavigateTo(index) {\n\n\t\t\tif (index < 0 || index > this._$galleryItems.length-1)\n\t\t\t\treturn this\n\n\t\t\tthis._galleryIndex = index\n\n\t\t\tthis.updateNavigation()\n\n\t\t\tthis._$element = $(this._$galleryItems.get(this._galleryIndex))\n\t\t\tthis._handle();\n\t\t}\n\n\t\tnavigateLeft() {\n\n\t\t\tif(!this._$galleryItems)\n\t\t\t\treturn;\n\n\t\t\tif (this._$galleryItems.length === 1)\n\t\t\t\treturn\n\n\t\t\tif (this._galleryIndex === 0) {\n\t\t\t\tif (this._config.wrapping)\n\t\t\t\t\tthis._galleryIndex = this._$galleryItems.length - 1\n\t\t\t\telse\n\t\t\t\t\treturn\n\t\t\t}\n\t\t\telse //circular\n\t\t\t\tthis._galleryIndex--\n\n\t\t\tthis._config.onNavigate.call(this, 'left', this._galleryIndex)\n\t\t\treturn this.navigateTo(this._galleryIndex)\n\t\t}\n\n\t\tnavigateRight() {\n\n\t\t\tif(!this._$galleryItems)\n\t\t\t\treturn;\n\n\t\t\tif (this._$galleryItems.length === 1)\n\t\t\t\treturn\n\n\t\t\tif (this._galleryIndex === this._$galleryItems.length - 1) {\n\t\t\t\tif (this._config.wrapping)\n\t\t\t\t\tthis._galleryIndex = 0\n\t\t\t\telse\n\t\t\t\t\treturn\n\t\t\t}\n\t\t\telse //circular\n\t\t\t\tthis._galleryIndex++\n\n\t\t\tthis._config.onNavigate.call(this, 'right', this._galleryIndex)\n\t\t\treturn this.navigateTo(this._galleryIndex)\n\t\t}\n\n\t\tupdateNavigation() {\n\t\t\tif (!this._config.wrapping) {\n\t\t\t\tlet $nav = this._$lightboxContainer.find('div.ekko-lightbox-nav-overlay')\n\t\t\t\tif (this._galleryIndex === 0)\n\t\t\t\t\t$nav.find('a:first-child').addClass('disabled')\n\t\t\t\telse\n\t\t\t\t\t$nav.find('a:first-child').removeClass('disabled')\n\n\t\t\t\tif (this._galleryIndex === this._$galleryItems.length - 1)\n\t\t\t\t\t$nav.find('a:last-child').addClass('disabled')\n\t\t\t\telse\n\t\t\t\t\t$nav.find('a:last-child').removeClass('disabled')\n\t\t\t}\n\t\t}\n\n\t\tclose() {\n\t\t\treturn this._$modal.modal('hide');\n\t\t}\n\n\t\t// helper private methods\n\t\t_navigationalBinder(event) {\n\t\t\tevent = event || window.event;\n\t\t\tif (event.keyCode === 39)\n\t\t\t\treturn this.navigateRight()\n\t\t\tif (event.keyCode === 37)\n\t\t\t\treturn this.navigateLeft()\n\t\t}\n\n\t\t// type detection private methods\n\t\t_detectRemoteType(src, type) {\n\n\t\t\ttype = type || false;\n\n\t\t\tif(!type && this._isImage(src))\n\t\t\t\ttype = 'image';\n\t\t\tif(!type && this._getYoutubeId(src))\n\t\t\t\ttype = 'youtube';\n\t\t\tif(!type && this._getVimeoId(src))\n\t\t\t\ttype = 'vimeo';\n\t\t\tif(!type && this._getDailymotionId(src))\n\t\t\t\ttype = 'dailymotion';\n\t\t\tif(!type && this._getInstagramId(src))\n\t\t\t\ttype = 'instagram';\n\t\t\tif(type === 'audio' || type === 'video' || (!type && this._isMedia(src)))\n\t\t\t\ttype = 'media';\n\t\t\tif(!type || ['image', 'youtube', 'vimeo', 'dailymotion', 'instagram', 'media', 'url'].indexOf(type) < 0)\n\t\t\t\ttype = 'url';\n\n\t\t\treturn type;\n\t\t}\n\n\t\t_getRemoteContentType(src) {\n\t\t\tlet response = $.ajax({\n\t\t\t\ttype: 'HEAD',\n\t\t\t\turl: src,\n\t\t\t\tasync: false\n\t\t\t});\n\t\t\tlet contentType = response.getResponseHeader('Content-Type')\n\t\t\treturn contentType;\n\t\t}\n\n\t\t_isImage(string) {\n\t\t\treturn string && string.match(/(^data:image\\/.*,)|(\\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\\?|#).*)?$)/i)\n\t\t}\n\n\t\t_isMedia(string) {\n\t\t\treturn string && string.match(/(\\.(mp3|mp4|ogg|webm|wav)((\\?|#).*)?$)/i)\n\t\t}\n\n\t\t_containerToUse() {\n\t\t\t// if currently showing an image, fade it out and remove\n\t\t\tlet $toUse = this._$lightboxBodyTwo\n\t\t\tlet $current = this._$lightboxBodyOne\n\n\t\t\tif(this._$lightboxBodyTwo.hasClass('in')) {\n\t\t\t\t$toUse = this._$lightboxBodyOne\n\t\t\t\t$current = this._$lightboxBodyTwo\n\t\t\t}\n\n\t\t\t$current.removeClass('in show')\n\t\t\tsetTimeout(() => {\n\t\t\t\tif(!this._$lightboxBodyTwo.hasClass('in'))\n\t\t\t\t\tthis._$lightboxBodyTwo.empty()\n\t\t\t\tif(!this._$lightboxBodyOne.hasClass('in'))\n\t\t\t\t\tthis._$lightboxBodyOne.empty()\n\t\t\t}, 500)\n\n\t\t\t$toUse.addClass('in show')\n\t\t\treturn $toUse\n\t\t}\n\n\t\t_handle() {\n\n\t\t\tlet $toUse = this._containerToUse()\n\t\t\tthis._updateTitleAndFooter()\n\n\t\t\tlet currentRemote = this._$element.attr('data-remote') || this._$element.attr('href')\n\t\t\tlet currentType = this._detectRemoteType(currentRemote, this._$element.attr('data-type') || false)\n\n\t\t\tif(['image', 'youtube', 'vimeo', 'dailymotion', 'instagram', 'media', 'url'].indexOf(currentType) < 0)\n\t\t\t\treturn this._error(this._config.strings.type)\n\n\t\t\tswitch(currentType) {\n\t\t\t\tcase 'image':\n\t\t\t\t\tthis._preloadImage(currentRemote, $toUse)\n\t\t\t\t\tthis._preloadImageByIndex(this._galleryIndex, 3)\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'youtube':\n\t\t\t\t\tthis._showYoutubeVideo(currentRemote, $toUse);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'vimeo':\n\t\t\t\t\tthis._showVimeoVideo(this._getVimeoId(currentRemote), $toUse);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'dailymotion':\n\t\t\t\t\tthis._showDailymotionVideo(this._getDailymotionId(currentRemote), $toUse);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'instagram':\n\t\t\t\t\tthis._showInstagramVideo(this._getInstagramId(currentRemote), $toUse);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'media':\n\t\t\t\t\tthis._showHtml5Media(currentRemote, $toUse);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: // url\n\t\t\t\t\tthis._loadRemoteContent(currentRemote, $toUse);\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\n\t\t_getYoutubeId(string) {\n\t\t\tif(!string)\n\t\t\t\treturn false;\n\t\t\tlet matches = string.match(/^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|\\&v=)([^#\\&\\?]*).*/)\n\t\t\treturn (matches && matches[2].length === 11) ? matches[2] : false\n\t\t}\n\n\t\t_getVimeoId(string) {\n\t\t\treturn string && string.indexOf('vimeo') > 0 ? string : false\n\t\t}\n\n\t\t_getDailymotionId(string) {\n\t\t\treturn string && string.indexOf('dailymotion') > 0 ? string : false\n\t\t}\n\n\t\t_getInstagramId(string) {\n\t\t\treturn string && string.indexOf('instagram') > 0 ? string : false\n\t\t}\n\n\t\t// layout private methods\n\t\t_toggleLoading(show) {\n\t\t\tshow = show || false\n\t\t\tif(show) {\n\t\t\t\tthis._$modalDialog.css('display', 'none')\n\t\t\t\tthis._$modal.removeClass('in show')\n\t\t\t\t$('.modal-backdrop').append(this._config.loadingMessage)\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis._$modalDialog.css('display', 'block')\n\t\t\t\tthis._$modal.addClass('in show')\n\t\t\t\t$('.modal-backdrop').find('.ekko-lightbox-loader').remove()\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\t_calculateBorders() {\n\t\t\treturn {\n\t\t\t\ttop: this._totalCssByAttribute('border-top-width'),\n\t\t\t\tright: this._totalCssByAttribute('border-right-width'),\n\t\t\t\tbottom: this._totalCssByAttribute('border-bottom-width'),\n\t\t\t\tleft: this._totalCssByAttribute('border-left-width'),\n\t\t\t}\n\t\t}\n\n\t\t_calculatePadding() {\n\t\t\treturn {\n\t\t\t\ttop: this._totalCssByAttribute('padding-top'),\n\t\t\t\tright: this._totalCssByAttribute('padding-right'),\n\t\t\t\tbottom: this._totalCssByAttribute('padding-bottom'),\n\t\t\t\tleft: this._totalCssByAttribute('padding-left'),\n\t\t\t}\n\t\t}\n\n\t\t_totalCssByAttribute(attribute) {\n\t\t\treturn parseInt(this._$modalDialog.css(attribute), 10) +\n\t\t\t\tparseInt(this._$modalContent.css(attribute), 10) +\n\t\t\t\tparseInt(this._$modalBody.css(attribute), 10)\n\t\t}\n\n\t\t_updateTitleAndFooter() {\n\t\t\tlet title = this._$element.data('title') || \"\"\n\t\t\tlet caption = this._$element.data('footer') || \"\"\n\n\t\t\tthis._titleIsShown = false\n\t\t\tif (title || this._config.alwaysShowClose) {\n\t\t\t\tthis._titleIsShown = true\n\t\t\t\tthis._$modalHeader.css('display', '').find('.modal-title').html(title || \"&nbsp;\")\n\t\t\t}\n\t\t\telse\n\t\t\t\tthis._$modalHeader.css('display', 'none')\n\n\t\t\tthis._footerIsShown = false\n\t\t\tif (caption) {\n\t\t\t\tthis._footerIsShown = true\n\t\t\t\tthis._$modalFooter.css('display', '').html(caption)\n\t\t\t}\n\t\t\telse\n\t\t\t\tthis._$modalFooter.css('display', 'none')\n\n\t\t\treturn this;\n\t\t}\n\n\t\t_showYoutubeVideo(remote, $containerForElement) {\n\t\t\tlet id = this._getYoutubeId(remote)\n\t\t\tlet query = remote.indexOf('&') > 0 ? remote.substr(remote.indexOf('&')) : ''\n\t\t\tlet width = this._$element.data('width') || 560\n\t\t\tlet height = this._$element.data('height') ||  width / ( 560/315 )\n\t\t\treturn this._showVideoIframe(\n\t\t\t\t`//www.youtube.com/embed/${id}?badge=0&autoplay=1&html5=1${query}`,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\t$containerForElement\n\t\t\t);\n\t\t}\n\n\t\t_showVimeoVideo(id, $containerForElement) {\n\t\t\tlet width = this._$element.data('width') || 500\n\t\t\tlet height = this._$element.data('height') ||  width / ( 560/315 )\n\t\t\treturn this._showVideoIframe(id + '?autoplay=1', width, height, $containerForElement)\n\t\t}\n\n\t\t_showDailymotionVideo(id, $containerForElement) {\n\t\t\tlet width = this._$element.data('width') || 500\n\t\t\tlet height = this._$element.data('height') ||  width / ( 560/315 )\n\t\t\treturn this._showVideoIframe(id + '?autoplay=1', width, height, $containerForElement)\n\t\t}\n\n\t\t_showInstagramVideo(id, $containerForElement) {\n\t\t\t// instagram load their content into iframe's so this can be put straight into the element\n\t\t\tlet width = this._$element.data('width') || 612\n\t\t\tlet height = width + 80;\n\t\t\tid = id.substr(-1) !== '/' ? id + '/' : id; // ensure id has trailing slash\n\t\t\t$containerForElement.html(`<iframe width=\"${width}\" height=\"${height}\" src=\"${id}embed/\" frameborder=\"0\" allowfullscreen></iframe>`);\n\t\t\tthis._resize(width, height);\n\t\t\tthis._config.onContentLoaded.call(this);\n\t\t\tif (this._$modalArrows) //hide the arrows when showing video\n\t\t\t\tthis._$modalArrows.css('display', 'none');\n\t\t\tthis._toggleLoading(false);\n\t\t\treturn this;\n\t\t}\n\n\t\t_showVideoIframe(url, width, height, $containerForElement) { // should be used for videos only. for remote content use loadRemoteContent (data-type=url)\n\t\t\theight = height || width; // default to square\n\t\t\t$containerForElement.html(`<div class=\"embed-responsive embed-responsive-16by9\"><iframe width=\"${width}\" height=\"${height}\" src=\"${url}\" frameborder=\"0\" allowfullscreen class=\"embed-responsive-item\"></iframe></div>`);\n\t\t\tthis._resize(width, height);\n\t\t\tthis._config.onContentLoaded.call(this);\n\t\t\tif (this._$modalArrows)\n\t\t\t\tthis._$modalArrows.css('display', 'none'); //hide the arrows when showing video\n\t\t\tthis._toggleLoading(false);\n\t\t\treturn this;\n\t\t}\n                \n\t\t_showHtml5Media(url, $containerForElement) { // should be used for videos only. for remote content use loadRemoteContent (data-type=url)\n\t\t\tlet contentType = this._getRemoteContentType(url);\n\t\t\tif(!contentType){\n\t\t\t\treturn this._error(this._config.strings.type)\n\t\t\t}\n\t\t\tlet mediaType = '';\n\t\t\tif(contentType.indexOf('audio') > 0){\n\t\t\t\tmediaType = 'audio';\n\t\t\t}else{\n\t\t\t\tmediaType = 'video';\n\t\t\t}\n\t\t\tlet width = this._$element.data('width') || 560\n\t\t\tlet height = this._$element.data('height') ||  width / ( 560/315 )\n\t\t\t$containerForElement.html(`<div class=\"embed-responsive embed-responsive-16by9\"><${mediaType} width=\"${width}\" height=\"${height}\" preload=\"auto\" autoplay controls class=\"embed-responsive-item\"><source src=\"${url}\" type=\"${contentType}\">${this._config.strings.type}</${mediaType}></div>`);\n\t\t\tthis._resize(width, height);\n\t\t\tthis._config.onContentLoaded.call(this);\n\t\t\tif (this._$modalArrows)\n\t\t\t\tthis._$modalArrows.css('display', 'none'); //hide the arrows when showing video\n\t\t\tthis._toggleLoading(false);\n\t\t\treturn this;\n\t\t}\n\n\t\t_loadRemoteContent(url, $containerForElement) {\n\t\t\tlet width = this._$element.data('width') || 560;\n\t\t\tlet height = this._$element.data('height') || 560;\n\n\t\t\tlet disableExternalCheck = this._$element.data('disableExternalCheck') || false;\n\t\t\tthis._toggleLoading(false);\n\n\t\t\t// external urls are loading into an iframe\n\t\t\t// local ajax can be loaded into the container itself\n\t\t\tif (!disableExternalCheck && !this._isExternal(url)) {\n\t\t\t\t$containerForElement.load(url, $.proxy(() => {\n\t\t\t\t\treturn this._$element.trigger('loaded.bs.modal');\n\t\t\t\t}));\n\n\t\t\t} else {\n\t\t\t\t$containerForElement.html(`<iframe src=\"${url}\" frameborder=\"0\" allowfullscreen></iframe>`);\n\t\t\t\tthis._config.onContentLoaded.call(this);\n\t\t\t}\n\n\t\t\tif (this._$modalArrows) //hide the arrows when remote content\n\t\t\t\tthis._$modalArrows.css('display', 'none')\n\n\t\t\tthis._resize(width, height);\n\t\t\treturn this;\n\t\t}\n\n\t\t_isExternal(url) {\n\t\t\tlet match = url.match(/^([^:\\/?#]+:)?(?:\\/\\/([^\\/?#]*))?([^?#]+)?(\\?[^#]*)?(#.*)?/);\n\t\t\tif (typeof match[1] === \"string\" && match[1].length > 0 && match[1].toLowerCase() !== location.protocol)\n\t\t\t\treturn true;\n\n\t\t\tif (typeof match[2] === \"string\" && match[2].length > 0 && match[2].replace(new RegExp(`:(${{\n\t\t\t\t\t\"http:\": 80,\n\t\t\t\t\t\"https:\": 443\n\t\t\t\t}[location.protocol]})?$`), \"\") !== location.host)\n\t\t\t\treturn true;\n\n\t\t\treturn false;\n\t\t}\n\n\t\t_error( message ) {\n\t\t\tconsole.error(message);\n\t\t\tthis._containerToUse().html(message);\n\t\t\tthis._resize(300, 300);\n\t\t\treturn this;\n\t\t}\n\n\t\t_preloadImageByIndex(startIndex, numberOfTimes) {\n\n\t\t\tif(!this._$galleryItems)\n\t\t\t\treturn;\n\n\t\t\tlet next = $(this._$galleryItems.get(startIndex), false)\n\t\t\tif(typeof next == 'undefined')\n\t\t\t\treturn\n\n\t\t\tlet src = next.attr('data-remote') || next.attr('href')\n\t\t\tif (next.attr('data-type') === 'image' || this._isImage(src))\n\t\t\t\tthis._preloadImage(src, false)\n\n\t\t\tif(numberOfTimes > 0)\n\t\t\t\treturn this._preloadImageByIndex(startIndex + 1, numberOfTimes-1);\n\t\t}\n\n\t\t_preloadImage( src, $containerForImage) {\n\n\t\t\t$containerForImage = $containerForImage || false\n\n\t\t\tlet img = new Image();\n\t\t\tif ($containerForImage) {\n\n\t\t\t\t// if loading takes > 200ms show a loader\n\t\t\t\tlet loadingTimeout = setTimeout(() => {\n\t\t\t\t\t$containerForImage.append(this._config.loadingMessage)\n\t\t\t\t}, 200)\n\n\t\t\t\timg.onload = () => {\n\t\t\t\t\tif(loadingTimeout)\n\t\t\t\t\t\tclearTimeout(loadingTimeout)\n\t\t\t\t\tloadingTimeout = null;\n\t\t\t\t\tlet image = $('<img />');\n\t\t\t\t\timage.attr('src', img.src);\n\t\t\t\t\timage.addClass('img-fluid');\n\n\t\t\t\t\t// backward compatibility for bootstrap v3\n\t\t\t\t\timage.css('width', '100%');\n\n\t\t\t\t\t$containerForImage.html(image);\n\t\t\t\t\tif (this._$modalArrows)\n\t\t\t\t\t\tthis._$modalArrows.css('display', '') // remove display to default to css property\n\n\t\t\t\t\tthis._resize(img.width, img.height);\n\t\t\t\t\tthis._toggleLoading(false);\n\t\t\t\t\treturn this._config.onContentLoaded.call(this);\n\t\t\t\t};\n\t\t\t\timg.onerror = () => {\n\t\t\t\t\tthis._toggleLoading(false);\n\t\t\t\t\treturn this._error(this._config.strings.fail+`  ${src}`);\n\t\t\t\t};\n\t\t\t}\n\n\t\t\timg.src = src;\n\t\t\treturn img;\n\t\t}\n\n\t\t_swipeGesure() {\n\t\t    if (this._touchendX < this._touchstartX) {\n\t\t        return this.navigateRight();\n\t\t    }\n\t\t    if (this._touchendX > this._touchstartX) {\n\t\t        return this.navigateLeft();\n\t\t    }\n\t\t}\n\n\t\t_resize( width, height ) {\n\n\t\t\theight = height || width\n\t\t\tthis._wantedWidth = width\n\t\t\tthis._wantedHeight = height\n\n\t\t\tlet imageAspecRatio = width / height;\n\n\t\t\t// if width > the available space, scale down the expected width and height\n\t\t\tlet widthBorderAndPadding = this._padding.left + this._padding.right + this._border.left + this._border.right\n\n\t\t\t// force 10px margin if window size > 575px\n\t\t\tlet addMargin = this._config.doc.body.clientWidth > 575 ? 20 : 0\n\t\t\tlet discountMargin = this._config.doc.body.clientWidth > 575 ? 0 : 20\n\n\t\t\tlet maxWidth = Math.min(width + widthBorderAndPadding, this._config.doc.body.clientWidth - addMargin, this._config.maxWidth)\n\n\t\t\tif((width + widthBorderAndPadding) > maxWidth) {\n\t\t\t\theight = (maxWidth - widthBorderAndPadding - discountMargin) / imageAspecRatio;\n\t\t\t\twidth = maxWidth\n\t\t\t} else\n\t\t\t\twidth = (width + widthBorderAndPadding)\n\n\t\t\tlet headerHeight = 0,\n\t\t\t    footerHeight = 0\n\n\t\t\t// as the resize is performed the modal is show, the calculate might fail\n\t\t\t// if so, default to the default sizes\n\t\t\tif (this._footerIsShown)\n\t\t\t\tfooterHeight = this._$modalFooter.outerHeight(true) || 55\n\n\t\t\tif (this._titleIsShown)\n\t\t\t\theaderHeight = this._$modalHeader.outerHeight(true) || 67\n\n\t\t\tlet borderPadding = this._padding.top + this._padding.bottom + this._border.bottom + this._border.top\n\n\t\t\t//calculated each time as resizing the window can cause them to change due to Bootstraps fluid margins\n\t\t\tlet margins = parseFloat(this._$modalDialog.css('margin-top')) + parseFloat(this._$modalDialog.css('margin-bottom'));\n\n\t\t\tlet maxHeight = Math.min(height, $(window).height() - borderPadding - margins - headerHeight - footerHeight, this._config.maxHeight - borderPadding - headerHeight - footerHeight);\n\n\t\t\tif(height > maxHeight) {\n\t\t\t\t// if height > the available height, scale down the width\n\t\t\t\twidth = Math.ceil(maxHeight * imageAspecRatio) + widthBorderAndPadding;\n\t\t\t}\n\n\t\t\tthis._$lightboxContainer.css('height', maxHeight)\n\t\t\tthis._$modalDialog.css('flex', 1).css('maxWidth', width);\n\n\t\t\tlet modal = this._$modal.data('bs.modal');\n\t\t\tif (modal) {\n\t\t\t\t// v4 method is mistakenly protected\n\t\t\t\ttry {\n\t\t\t\t\tmodal._handleUpdate();\n\t\t\t\t} catch(Exception) {\n\t\t\t\t\tmodal.handleUpdate();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tstatic _jQueryInterface(config) {\n\t\t\tconfig = config || {}\n\t\t\treturn this.each(() => {\n\t\t\t\tlet $this = $(this)\n\t\t\t\tlet _config = $.extend(\n\t\t\t\t\t{},\n\t\t\t\t\tLightbox.Default,\n\t\t\t\t\t$this.data(),\n\t\t\t\t\ttypeof config === 'object' && config\n\t\t\t\t)\n\n\t\t\t\tnew Lightbox(this, _config)\n\t\t\t})\n\t\t}\n\t}\n\n\n\n\t$.fn[NAME]             = Lightbox._jQueryInterface\n\t$.fn[NAME].Constructor = Lightbox\n\t$.fn[NAME].noConflict  = () => {\n\t\t$.fn[NAME] = JQUERY_NO_CONFLICT\n\t\treturn Lightbox._jQueryInterface\n\t}\n\n\treturn Lightbox\n\n})(jQuery)\n\nexport default Lightbox\n"]}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_default_theme/resources/js/ext/ekko-lightbox.min.js	Tue Nov 20 15:18:10 2018 +0100
@@ -0,0 +1,1 @@
+!function(t){"use strict";var e=function(){function o(t,e){for(var i=0;i<e.length;i++){var o=e[i];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}return function(t,e,i){return e&&o(t.prototype,e),i&&o(t,i),t}}();var c,i,o,l,a;c=jQuery,i="ekkoLightbox",o=c.fn[i],l={title:"",footer:"",maxWidth:9999,maxHeight:9999,showArrows:!0,wrapping:!0,type:null,alwaysShowClose:!1,loadingMessage:'<div class="ekko-lightbox-loader"><div><div></div><div></div></div></div>',leftArrow:"<span>&#10094;</span>",rightArrow:"<span>&#10095;</span>",strings:{close:"Close",fail:"Failed to load image:",type:"Could not detect remote target type. Force the type using data-type"},doc:document,onShow:function(){},onShown:function(){},onHide:function(){},onHidden:function(){},onNavigate:function(){},onContentLoaded:function(){}},a=function(){function n(t,e){var i=this;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,n),this._config=c.extend({},l,e),this._$modalArrows=null,this._galleryIndex=0,this._galleryName=null,this._padding=null,this._border=null,this._titleIsShown=!1,this._footerIsShown=!1,this._wantedWidth=0,this._wantedHeight=0,this._touchstartX=0,this._touchendX=0,this._modalId="ekkoLightbox-"+Math.floor(1e3*Math.random()+1),this._$element=t instanceof jQuery?t:c(t),this._isBootstrap3=3==c.fn.modal.Constructor.VERSION[0];var o='<h4 class="modal-title">'+(this._config.title||"&nbsp;")+"</h4>",a='<button type="button" class="close" data-dismiss="modal" aria-label="'+this._config.strings.close+'"><span aria-hidden="true">&times;</span></button>',s='<div class="modal-dialog" role="document"><div class="modal-content">'+('<div class="modal-header'+(this._config.title||this._config.alwaysShowClose?"":" hide")+'">'+(this._isBootstrap3?a+o:o+a)+"</div>")+'<div class="modal-body"><div class="ekko-lightbox-container"><div class="ekko-lightbox-item fade in show"></div><div class="ekko-lightbox-item fade"></div></div></div>'+('<div class="modal-footer'+(this._config.footer?"":" hide")+'">'+(this._config.footer||"&nbsp;")+"</div>")+"</div></div>";c(this._config.doc.body).append('<div id="'+this._modalId+'" class="ekko-lightbox modal fade" tabindex="-1" tabindex="-1" role="dialog" aria-hidden="true">'+s+"</div>"),this._$modal=c("#"+this._modalId,this._config.doc),this._$modalDialog=this._$modal.find(".modal-dialog").first(),this._$modalContent=this._$modal.find(".modal-content").first(),this._$modalBody=this._$modal.find(".modal-body").first(),this._$modalHeader=this._$modal.find(".modal-header").first(),this._$modalFooter=this._$modal.find(".modal-footer").first(),this._$lightboxContainer=this._$modalBody.find(".ekko-lightbox-container").first(),this._$lightboxBodyOne=this._$lightboxContainer.find("> div:first-child").first(),this._$lightboxBodyTwo=this._$lightboxContainer.find("> div:last-child").first(),this._border=this._calculateBorders(),this._padding=this._calculatePadding(),this._galleryName=this._$element.data("gallery"),this._galleryName&&(this._$galleryItems=c(document.body).find('*[data-gallery="'+this._galleryName+'"]'),this._galleryIndex=this._$galleryItems.index(this._$element),c(document).on("keydown.ekkoLightbox",this._navigationalBinder.bind(this)),this._config.showArrows&&1<this._$galleryItems.length&&(this._$lightboxContainer.append('<div class="ekko-lightbox-nav-overlay"><a href="#">'+this._config.leftArrow+'</a><a href="#">'+this._config.rightArrow+"</a></div>"),this._$modalArrows=this._$lightboxContainer.find("div.ekko-lightbox-nav-overlay").first(),this._$lightboxContainer.on("click","a:first-child",function(t){return t.preventDefault(),i.navigateLeft()}),this._$lightboxContainer.on("click","a:last-child",function(t){return t.preventDefault(),i.navigateRight()}),this.updateNavigation())),this._$modal.on("show.bs.modal",this._config.onShow.bind(this)).on("shown.bs.modal",function(){return i._toggleLoading(!0),i._handle(),i._config.onShown.call(i)}).on("hide.bs.modal",this._config.onHide.bind(this)).on("hidden.bs.modal",function(){return i._galleryName&&(c(document).off("keydown.ekkoLightbox"),c(window).off("resize.ekkoLightbox")),i._$modal.remove(),i._config.onHidden.call(i)}).modal(this._config),c(window).on("resize.ekkoLightbox",function(){i._resize(i._wantedWidth,i._wantedHeight)}),this._$lightboxContainer.on("touchstart",function(){i._touchstartX=event.changedTouches[0].screenX}).on("touchend",function(){i._touchendX=event.changedTouches[0].screenX,i._swipeGesure()})}return e(n,null,[{key:"Default",get:function(){return l}}]),e(n,[{key:"element",value:function(){return this._$element}},{key:"modal",value:function(){return this._$modal}},{key:"navigateTo",value:function(t){if(t<0||t>this._$galleryItems.length-1)return this;this._galleryIndex=t,this.updateNavigation(),this._$element=c(this._$galleryItems.get(this._galleryIndex)),this._handle()}},{key:"navigateLeft",value:function(){if(this._$galleryItems&&1!==this._$galleryItems.length){if(0===this._galleryIndex){if(!this._config.wrapping)return;this._galleryIndex=this._$galleryItems.length-1}else this._galleryIndex--;return this._config.onNavigate.call(this,"left",this._galleryIndex),this.navigateTo(this._galleryIndex)}}},{key:"navigateRight",value:function(){if(this._$galleryItems&&1!==this._$galleryItems.length){if(this._galleryIndex===this._$galleryItems.length-1){if(!this._config.wrapping)return;this._galleryIndex=0}else this._galleryIndex++;return this._config.onNavigate.call(this,"right",this._galleryIndex),this.navigateTo(this._galleryIndex)}}},{key:"updateNavigation",value:function(){if(!this._config.wrapping){var t=this._$lightboxContainer.find("div.ekko-lightbox-nav-overlay");0===this._galleryIndex?t.find("a:first-child").addClass("disabled"):t.find("a:first-child").removeClass("disabled"),this._galleryIndex===this._$galleryItems.length-1?t.find("a:last-child").addClass("disabled"):t.find("a:last-child").removeClass("disabled")}}},{key:"close",value:function(){return this._$modal.modal("hide")}},{key:"_navigationalBinder",value:function(t){return 39===(t=t||window.event).keyCode?this.navigateRight():37===t.keyCode?this.navigateLeft():void 0}},{key:"_detectRemoteType",value:function(t,e){return!(e=e||!1)&&this._isImage(t)&&(e="image"),!e&&this._getYoutubeId(t)&&(e="youtube"),!e&&this._getVimeoId(t)&&(e="vimeo"),!e&&this._getInstagramId(t)&&(e="instagram"),("audio"==e||"video"==e||!e&&this._isMedia(t))&&(e="media"),(!e||["image","youtube","vimeo","instagram","media","url"].indexOf(e)<0)&&(e="url"),e}},{key:"_getRemoteContentType",value:function(t){return c.ajax({type:"HEAD",url:t,async:!1}).getResponseHeader("Content-Type")}},{key:"_isImage",value:function(t){return t&&t.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i)}},{key:"_isMedia",value:function(t){return t&&t.match(/(\.(mp3|mp4|ogg|webm|wav)((\?|#).*)?$)/i)}},{key:"_containerToUse",value:function(){var t=this,e=this._$lightboxBodyTwo,i=this._$lightboxBodyOne;return this._$lightboxBodyTwo.hasClass("in")&&(e=this._$lightboxBodyOne,i=this._$lightboxBodyTwo),i.removeClass("in show"),setTimeout(function(){t._$lightboxBodyTwo.hasClass("in")||t._$lightboxBodyTwo.empty(),t._$lightboxBodyOne.hasClass("in")||t._$lightboxBodyOne.empty()},500),e.addClass("in show"),e}},{key:"_handle",value:function(){var t=this._containerToUse();this._updateTitleAndFooter();var e=this._$element.attr("data-remote")||this._$element.attr("href"),i=this._detectRemoteType(e,this._$element.attr("data-type")||!1);if(["image","youtube","vimeo","instagram","media","url"].indexOf(i)<0)return this._error(this._config.strings.type);switch(i){case"image":this._preloadImage(e,t),this._preloadImageByIndex(this._galleryIndex,3);break;case"youtube":this._showYoutubeVideo(e,t);break;case"vimeo":this._showVimeoVideo(this._getVimeoId(e),t);break;case"instagram":this._showInstagramVideo(this._getInstagramId(e),t);break;case"media":this._showHtml5Media(e,t);break;default:this._loadRemoteContent(e,t)}return this}},{key:"_getYoutubeId",value:function(t){if(!t)return!1;var e=t.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/);return!(!e||11!==e[2].length)&&e[2]}},{key:"_getVimeoId",value:function(t){return!!(t&&0<t.indexOf("vimeo"))&&t}},{key:"_getInstagramId",value:function(t){return!!(t&&0<t.indexOf("instagram"))&&t}},{key:"_toggleLoading",value:function(t){return(t=t||!1)?(this._$modalDialog.css("display","none"),this._$modal.removeClass("in show"),c(".modal-backdrop").append(this._config.loadingMessage)):(this._$modalDialog.css("display","block"),this._$modal.addClass("in show"),c(".modal-backdrop").find(".ekko-lightbox-loader").remove()),this}},{key:"_calculateBorders",value:function(){return{top:this._totalCssByAttribute("border-top-width"),right:this._totalCssByAttribute("border-right-width"),bottom:this._totalCssByAttribute("border-bottom-width"),left:this._totalCssByAttribute("border-left-width")}}},{key:"_calculatePadding",value:function(){return{top:this._totalCssByAttribute("padding-top"),right:this._totalCssByAttribute("padding-right"),bottom:this._totalCssByAttribute("padding-bottom"),left:this._totalCssByAttribute("padding-left")}}},{key:"_totalCssByAttribute",value:function(t){return parseInt(this._$modalDialog.css(t),10)+parseInt(this._$modalContent.css(t),10)+parseInt(this._$modalBody.css(t),10)}},{key:"_updateTitleAndFooter",value:function(){var t=this._$element.data("title")||"",e=this._$element.data("footer")||"";return this._titleIsShown=!1,t||this._config.alwaysShowClose?(this._titleIsShown=!0,this._$modalHeader.css("display","").find(".modal-title").html(t||"&nbsp;")):this._$modalHeader.css("display","none"),this._footerIsShown=!1,e?(this._footerIsShown=!0,this._$modalFooter.css("display","").html(e)):this._$modalFooter.css("display","none"),this}},{key:"_showYoutubeVideo",value:function(t,e){var i=this._getYoutubeId(t),o=0<t.indexOf("&")?t.substr(t.indexOf("&")):"",a=this._$element.data("width")||560,s=this._$element.data("height")||a/(560/315);return this._showVideoIframe("//www.youtube.com/embed/"+i+"?badge=0&autoplay=1&html5=1"+o,a,s,e)}},{key:"_showVimeoVideo",value:function(t,e){var i=this._$element.data("width")||500,o=this._$element.data("height")||i/(560/315);return this._showVideoIframe(t+"?autoplay=1",i,o,e)}},{key:"_showInstagramVideo",value:function(t,e){var i=this._$element.data("width")||612,o=i+80;return t="/"!==t.substr(-1)?t+"/":t,e.html('<iframe width="'+i+'" height="'+o+'" src="'+t+'embed/" frameborder="0" allowfullscreen></iframe>'),this._resize(i,o),this._config.onContentLoaded.call(this),this._$modalArrows&&this._$modalArrows.css("display","none"),this._toggleLoading(!1),this}},{key:"_showVideoIframe",value:function(t,e,i,o){return i=i||e,o.html('<div class="embed-responsive embed-responsive-16by9"><iframe width="'+e+'" height="'+i+'" src="'+t+'" frameborder="0" allowfullscreen class="embed-responsive-item"></iframe></div>'),this._resize(e,i),this._config.onContentLoaded.call(this),this._$modalArrows&&this._$modalArrows.css("display","none"),this._toggleLoading(!1),this}},{key:"_showHtml5Media",value:function(t,e){var i=this._getRemoteContentType(t);if(!i)return this._error(this._config.strings.type);var o="";o=0<i.indexOf("audio")?"audio":"video";var a=this._$element.data("width")||560,s=this._$element.data("height")||a/(560/315);return e.html('<div class="embed-responsive embed-responsive-16by9"><'+o+' width="'+a+'" height="'+s+'" preload="auto" autoplay controls class="embed-responsive-item"><source src="'+t+'" type="'+i+'">'+this._config.strings.type+"</"+o+"></div>"),this._resize(a,s),this._config.onContentLoaded.call(this),this._$modalArrows&&this._$modalArrows.css("display","none"),this._toggleLoading(!1),this}},{key:"_loadRemoteContent",value:function(t,e){var i=this,o=this._$element.data("width")||560,a=this._$element.data("height")||560,s=this._$element.data("disableExternalCheck")||!1;return this._toggleLoading(!1),s||this._isExternal(t)?(e.html('<iframe src="'+t+'" frameborder="0" allowfullscreen></iframe>'),this._config.onContentLoaded.call(this)):e.load(t,c.proxy(function(){return i._$element.trigger("loaded.bs.modal")})),this._$modalArrows&&this._$modalArrows.css("display","none"),this._resize(o,a),this}},{key:"_isExternal",value:function(t){var e=t.match(/^([^:\/?#]+:)?(?:\/\/([^\/?#]*))?([^?#]+)?(\?[^#]*)?(#.*)?/);return"string"==typeof e[1]&&0<e[1].length&&e[1].toLowerCase()!==location.protocol||"string"==typeof e[2]&&0<e[2].length&&e[2].replace(new RegExp(":("+{"http:":80,"https:":443}[location.protocol]+")?$"),"")!==location.host}},{key:"_error",value:function(t){return console.error(t),this._containerToUse().html(t),this._resize(300,300),this}},{key:"_preloadImageByIndex",value:function(t,e){if(this._$galleryItems){var i=c(this._$galleryItems.get(t),!1);if(void 0!==i){var o=i.attr("data-remote")||i.attr("href");return("image"===i.attr("data-type")||this._isImage(o))&&this._preloadImage(o,!1),0<e?this._preloadImageByIndex(t+1,e-1):void 0}}}},{key:"_preloadImage",value:function(t,e){var i=this;e=e||!1;var o,a=new Image;return e&&(o=setTimeout(function(){e.append(i._config.loadingMessage)},200),a.onload=function(){o&&clearTimeout(o),o=null;var t=c("<img />");return t.attr("src",a.src),t.addClass("img-fluid"),t.css("width","100%"),e.html(t),i._$modalArrows&&i._$modalArrows.css("display",""),i._resize(a.width,a.height),i._toggleLoading(!1),i._config.onContentLoaded.call(i)},a.onerror=function(){return i._toggleLoading(!1),i._error(i._config.strings.fail+"  "+t)}),a.src=t,a}},{key:"_swipeGesure",value:function(){return this._touchendX<this._touchstartX?this.navigateRight():this._touchendX>this._touchstartX?this.navigateLeft():void 0}},{key:"_resize",value:function(t,e){e=e||t;var i=(this._wantedWidth=t)/(this._wantedHeight=e),o=this._padding.left+this._padding.right+this._border.left+this._border.right,a=575<this._config.doc.body.clientWidth?20:0,s=575<this._config.doc.body.clientWidth?0:20,n=Math.min(t+o,this._config.doc.body.clientWidth-a,this._config.maxWidth);n<t+o?(e=(n-o-s)/i,t=n):t+=o;var l=0,r=0;this._footerIsShown&&(r=this._$modalFooter.outerHeight(!0)||55),this._titleIsShown&&(l=this._$modalHeader.outerHeight(!0)||67);var d=this._padding.top+this._padding.bottom+this._border.bottom+this._border.top,h=parseFloat(this._$modalDialog.css("margin-top"))+parseFloat(this._$modalDialog.css("margin-bottom")),g=Math.min(e,c(window).height()-d-h-l-r,this._config.maxHeight-d-l-r);g<e&&(t=Math.ceil(g*i)+o),this._$lightboxContainer.css("height",g),this._$modalDialog.css("flex",1).css("maxWidth",t);var _=this._$modal.data("bs.modal");if(_)try{_._handleUpdate()}catch(t){_.handleUpdate()}return this}}],[{key:"_jQueryInterface",value:function(i){var o=this;return i=i||{},this.each(function(){var t=c(o),e=c.extend({},n.Default,t.data(),"object"==typeof i&&i);new n(o,e)})}}]),n}(),c.fn[i]=a._jQueryInterface,c.fn[i].Constructor=a,c.fn[i].noConflict=function(){return c.fn[i]=o,a._jQueryInterface}}(jQuery);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_default_theme/resources/js/ext/ekko-lightbox.min.js.map	Tue Nov 20 15:18:10 2018 +0100
@@ -0,0 +1,1 @@
+{"version":3,"sources":["ekko-lightbox.js"],"names":["$","_createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","Constructor","protoProps","staticProps","prototype","NAME","JQUERY_NO_CONFLICT","Default","Lightbox","jQuery","fn","title","footer","maxWidth","maxHeight","showArrows","wrapping","type","alwaysShowClose","loadingMessage","leftArrow","rightArrow","strings","close","fail","doc","document","onShow","onShown","onHide","onHidden","onNavigate","onContentLoaded","$element","config","_this","this","instance","TypeError","_classCallCheck","_config","extend","_$modalArrows","_galleryIndex","_galleryName","_padding","_border","_titleIsShown","_footerIsShown","_wantedWidth","_wantedHeight","_touchstartX","_touchendX","_modalId","Math","floor","random","_$element","_isBootstrap3","modal","VERSION","h4","btn","dialog","body","append","_$modal","_$modalDialog","find","first","_$modalContent","_$modalBody","_$modalHeader","_$modalFooter","_$lightboxContainer","_$lightboxBodyOne","_$lightboxBodyTwo","_calculateBorders","_calculatePadding","data","_$galleryItems","index","on","_navigationalBinder","bind","event","preventDefault","navigateLeft","navigateRight","updateNavigation","_toggleLoading","_handle","call","off","window","remove","_resize","changedTouches","screenX","_swipeGesure","get","value","navigateTo","$nav","addClass","removeClass","keyCode","src","_isImage","_getYoutubeId","_getVimeoId","_getInstagramId","_isMedia","indexOf","ajax","url","async","getResponseHeader","string","match","_this2","$toUse","$current","hasClass","setTimeout","empty","_containerToUse","_updateTitleAndFooter","currentRemote","attr","currentType","_detectRemoteType","_error","_preloadImage","_preloadImageByIndex","_showYoutubeVideo","_showVimeoVideo","_showInstagramVideo","_showHtml5Media","_loadRemoteContent","matches","show","css","top","_totalCssByAttribute","right","bottom","left","attribute","parseInt","caption","html","remote","$containerForElement","id","query","substr","width","height","_showVideoIframe","contentType","_getRemoteContentType","mediaType","_this3","disableExternalCheck","_isExternal","load","proxy","trigger","toLowerCase","location","protocol","replace","RegExp","http:","https:","host","message","console","error","startIndex","numberOfTimes","next","$containerForImage","_this4","loadingTimeout","img","Image","onload","clearTimeout","image","onerror","imageAspecRatio","widthBorderAndPadding","addMargin","clientWidth","discountMargin","min","headerHeight","footerHeight","outerHeight","borderPadding","margins","parseFloat","ceil","_handleUpdate","Exception","handleUpdate","_this5","each","$this","_jQueryInterface","noConflict"],"mappings":"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","file":"ekko-lightbox.min.js"}
\ No newline at end of file
--- a/src/pyams_default_theme/resources/js/pyams-default.js	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/resources/js/pyams-default.js	Tue Nov 20 15:18:10 2018 +0100
@@ -8,4 +8,15 @@
 	};
 	globals.PyAMS_default = PyAMS_default;
 
+	/**
+	 * Init lightbox plug-in
+	 */
+	$(document).on('click', '[data-toggle="lightbox"]', function (event) {
+		event.preventDefault();
+		$(this).ekkoLightbox({
+			wrapping: false,
+			alwaysShowClose: true
+		});
+	});
+
 })(jQuery, this);
--- a/src/pyams_default_theme/resources/js/pyams-default.min.js	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/resources/js/pyams-default.min.js	Tue Nov 20 15:18:10 2018 +0100
@@ -1,1 +1,1 @@
-(function(c,b){var d=b.MyAMS;var a={};b.PyAMS_default=a})(jQuery,this);
\ No newline at end of file
+!function(t,e){"use strict";e.MyAMS;e.PyAMS_default={},t(document).on("click",'[data-toggle="lightbox"]',function(e){e.preventDefault(),t(this).ekkoLightbox({wrapping:!1,alwaysShowClose:!0})})}(jQuery,this);
--- a/src/pyams_default_theme/resources/less/pyams-default.less	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/resources/less/pyams-default.less	Tue Nov 20 15:18:10 2018 +0100
@@ -1,6 +1,22 @@
+/**
+ * Generic styles
+ */
+.margin-bottom {
+	&-10 {
+		margin-bottom: 10px;
+	}
+	&-20 {
+		margin-bottom: 20px;
+	}
+}
+
+
+/**
+ * Main classes
+ */
 
 body {
-	font-family: "Advent Pro", Helvetica, Arial, sans-serif;
+	font-family: Lato, Helvetica, Arial, sans-serif;
 	margin: 0 auto;
 
 	.header-simple {
@@ -16,11 +32,54 @@
 					position: absolute;
 					top: 10px;
 					left: 10px;
-					max-height: calc(100% - 20px);
+					max-height: ~"calc(100% - 20px)";
 				}
 			}
 		}
 	}
+	.affix {
+		top: 0;
+		width: 100%;
+		z-index: 9999 !important;
+		opacity: 0.95;
+		transition: all .5s ease-in-out;
+	}
+	.affix ~ .container-fluid {
+		position: relative;
+		top: 50px;
+	}
+	.navbar {
+		margin-bottom: 20px;
+		background-color: white;
+		border: 1px solid #39413b;
+		font-family: Oswald, Helvetica, Arial, Sans-Serif;
+		transition: all .5s ease-in-out;
+
+		a,
+		a:active,
+		a:visited {
+			color: #39413b;
+		}
+		li.active,
+		.icon-bar {
+			background-color: #a5bcaa;
+		}
+		&.affix {
+			background-color: #39413b;
+
+			a {
+				color: white;
+			}
+			&:hover {
+				a:hover {
+					color: #39413b;
+				}
+			}
+			.icon-bar {
+				background-color: white;
+			}
+		}
+	}
 }
 
 h1,
@@ -58,11 +117,146 @@
 }
 
 
-.margin-bottom {
-	&-10 {
-		margin-bottom: 10px;
+/**
+ * Summary styles
+ */
+
+.summary {
+	.thumbnail {
+		&.pull-left {
+			margin-right: 15px;
+		}
+	}
+}
+
+blockquote {
+	margin-top: 2rem;
+	border: 1px solid #ddd;
+	border-left: 5px solid #ddd;
+
+	&.pull-right {
+		padding: 0 15px;
+		text-align: left;
+		border: 1px solid #ddd;
+		border-left: 5px solid #ddd;
 	}
-	&-20 {
-		margin-bottom: 20px;
+}
+
+/**
+ * Images gallery
+ */
+
+.illustration {
+	margin-bottom: 1rem;
+
+	.author {
+		padding-top: 0.2em;
+		font-size: 0.9em;
+		font-style: italic;
+	}
+}
+.gallery {
+	display: flex;
+	flex-wrap: wrap;
+
+	.legend {
+		margin-bottom: 0.2em;
+	}
+	img {
+		box-shadow: 0 2px 6px 2px rgba(0, 0, 0, 0.75);
+    	margin-bottom: 5px;
+		filter: grayscale();
+		transition: all ease-in-out 0.5s;
+
+		&:hover {
+			filter: none;
+		}
+	}
+	.author {
+		margin-bottom: 15px;
+		text-align: right;
+		font-style: italic;
+		font-size: 0.8em;
 	}
 }
+
+.ekko-lightbox {
+	position: fixed;
+	top: 0!important;
+	height:	100vh;
+
+	.modal-footer {
+		padding-top: 0;
+		text-align: right!important;
+		font-style: italic;
+		font-size: 0.8em;
+	}
+}
+
+
+/**
+ * Videos
+ */
+
+.video-wrapper {
+	iframe {
+		width: 100%;
+	}
+}
+
+
+/**
+ * Milestones
+ */
+.milestones {
+	display:flex;
+	justify-content: space-around;
+
+	.arrow {
+		font-weight: bold;
+		font-size: 1.5em;
+	}
+}
+
+
+/**
+ * Contact card
+ */
+
+.contact-card {
+	.photo {
+		&.pull-left {
+			margin-right: 1em;
+		}
+		&.pull-right {
+			margin-left: 1em;
+		}
+	}
+	.address {
+		margin-top: 0.5em;
+		margin-bottom: 0.5em;
+	}
+}
+
+
+/**
+ * Verbatim
+ */
+
+.verbatim {
+	.panel-body {
+		position: relative;
+		margin-left: 50px;
+
+		&::before {
+			content: '«';
+			position: absolute;
+			left: -30px;
+			top: 0;
+			font-size: 4em;
+		}
+		.author {
+			margin-top: 0.5em;
+		}
+	}
+}
--- a/src/pyams_default_theme/shared/common/summary.py	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/shared/common/summary.py	Tue Nov 20 15:18:10 2018 +0100
@@ -18,7 +18,7 @@
 from pyams_skin.layer import IPyAMSUserLayer
 from pyams_utils.adapter import ContextRequestAdapter, adapter_config
 
-from pyams_content import _
+from pyams_default_theme import _
 
 
 @adapter_config(context=(IWfSharedContent, IPyAMSUserLayer), provides=IContentSummaryInfo)
--- a/src/pyams_default_theme/shared/imagemap/templates/imagemap-default.pt	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/shared/imagemap/templates/imagemap-default.pt	Tue Nov 20 15:18:10 2018 +0100
@@ -1,5 +1,5 @@
 <h3 tal:content="view.title">title</h3>
-<div class="no-padding" i18n:domain="pyams_content"
+<div class="no-padding" i18n:domain="pyams_default_theme"
 	 data-ams-plugins="pyams_content"
 	 tal:define="imagemap context.get_target()"
 	 tal:attributes="data-ams-plugin-pyams_content-src tales:resource_path('pyams_content.zmi:pyams_content')">
--- a/src/pyams_default_theme/shared/logo/templates/logos-default.pt	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/shared/logo/templates/logos-default.pt	Tue Nov 20 15:18:10 2018 +0100
@@ -1,11 +1,14 @@
-<h3 tal:content="view.title">title</h3>
-<div class="padding-10" i18n:domain="pyams_content">
+<div class="logos" i18n:domain="pyams_default_theme">
+	<h3>${view.title}</h3>
 	<tal:loop repeat="logo context.get_targets()">
-		<tal:if condition="logo is not None">
+		<div class="logo col-lg-2 col-md-2 col-sm-2 col-xs-3"
+			 tal:condition="logo is not None">
 			<a tal:omit-tag="not:logo.url"
-			   tal:attributes="href logo.url" target="_blank">
-				<tal:var content="structure tales:thumbnail(logo.image, 200, 'auto', 'display-inline margin-10')" />
+			   href="${logo.url}" title="${i18n:logo.title}">
+				${structure:tales:picture(logo.image, lg_thumb='square', lg_width=2, md_thumb='square', md_width=2,
+										  sm_thumb='square', sm_width=2, xs_thumb='square', xs_width=3, css_class='thumbnail')}
 			</a>
-		</tal:if>
+		</div>
 	</tal:loop>
+	<div class="clearfix"></div>
 </div>
--- a/src/pyams_default_theme/shared/site/folder.py	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/shared/site/folder.py	Tue Nov 20 15:18:10 2018 +0100
@@ -26,7 +26,7 @@
 from pyams_utils.url import relative_url
 from pyams_workflow.interfaces import IWorkflowPublicationInfo
 
-from pyams_content import _
+from pyams_default_theme import _
 
 
 @adapter_config(context=(ISiteFolder, IPyAMSUserLayer), provides=ISiteElementNavigation)
--- a/src/pyams_default_theme/shared/site/link.py	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/shared/site/link.py	Tue Nov 20 15:18:10 2018 +0100
@@ -19,7 +19,7 @@
 from pyams_utils.adapter import ContextRequestAdapter, adapter_config
 from pyams_utils.interfaces.url import IRelativeURL
 
-from pyams_content import _
+from pyams_default_theme import _
 
 
 @adapter_config(context=(IContentLink, IPyAMSUserLayer), provides=IRelativeURL)
@@ -45,18 +45,22 @@
     @property
     def title(self):
         title = II18n(self.context).query_attribute('navigation_title', request=self.request)
-        if (title is None) and (self.target_info is not None):
+        if (not title) and (self.target_info is not None):
             title = self.target_info.title
         return title
 
     @property
     def header(self):
-        if self.target_info is not None:
-            return self.target_info.header
+        header = II18n(self.context).query_attribute('navigation_header', request=self.request)
+        if (not header) and (self.target_info is not None):
+            header = self.target_info.header
+        return header
 
     @property
     def button_title(self):
+        title = None
         if self.target_info is not None:
-            return self.target_info.button_title
-        else:
-            return self.request.localizer.translate(_("Consult content"))
+            title = self.target_info.button_title
+        if not title:
+            title = _("Consult content")
+        return self.request.localizer.translate(title)
--- a/src/pyams_default_theme/shared/site/portlet/templates/site-summary.pt	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/shared/site/portlet/templates/site-summary.pt	Tue Nov 20 15:18:10 2018 +0100
@@ -1,28 +1,32 @@
-<div tal:define="settings view.settings;
+<div i18n:domain="pyams_default_theme"
+	 tal:define="settings view.settings;
 				 button_title i18n:settings.button_title;">
-	<div class="row summary">
+	<div class="summary">
 		<div tal:repeat="item view.visible_items">
-			<div class="thumbnail pull-left">
-				<tal:var define="illustration tales:pyams_illustration(item.context)"
-						 condition="illustration">
-					<tal:var define="image i18n:illustration.data;
-									 alt i18n:illustration.alt_title;"
-							 condition="image">
-						${structure:tales:picture(image, lg_thumb='pano', lg_width=3, md_thumb='pano', md_width=3, sm_thumb='pano',
-												  sm_width=4, xs_thumb='pano', xs_width=12, alt=alt, css_class='result_media')}
-					</tal:var>
-				</tal:var>
-			</div>
-			<div>
-				<h2>${item.title}</h2>
-				<div class="header">${item.header}</div>
-				<div class="action">
-					<a href="${tales:relative_url(item.context)}">
-						<span i18n:translate="">${button_title or item.button_title}</span>
+			<tal:var define="target tales:relative_url(item.context)">
+				<div class="thumbnail pull-left hidden-xs">
+					<a tal:define="illustration tales:pyams_illustration(item.context)"
+					   tal:condition="illustration"
+					   href="${target}">
+						<tal:if define="image i18n:illustration.data;
+										alt i18n:illustration.alt_title;"
+								condition="image">
+							${structure:tales:picture(image, lg_thumb='pano', lg_width=3, md_thumb='pano', md_width=3, sm_thumb='pano',
+													  sm_width=4, xs_thumb='pano', xs_width=12, alt=alt, css_class='result_media')}
+						</tal:if>
 					</a>
 				</div>
-			</div>
-		<div class="clearfix"></div>
+				<div>
+					<h2>${item.title}</h2>
+					<div class="header">${structure:tales:html(item.header)}</div>
+					<div class="action">
+						<a href="${target}">
+							<span i18n:translate="">${button_title or item.button_title}</span>
+						</a>
+					</div>
+				</div>
+			</tal:var>
+			<div class="clearfix"></div>
 		</div>
 	</div>
 </div>
--- a/src/pyams_default_theme/shared/view/templates/render.pt	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/shared/view/templates/render.pt	Tue Nov 20 15:18:10 2018 +0100
@@ -4,7 +4,9 @@
 		WARNING: items displayed in this preview are out of context!!
 	</div>
 	<ul>
-		<li tal:repeat="item view.items"
-			tal:content="i18n:item.title"></li>
+		<li tal:repeat="item view.items">
+			<span>${i18n:item.title}</span>
+			(${tales:oid(item)})
+		</li>
 	</ul>
 </fieldset>
--- a/src/pyams_default_theme/viewlet/banner/templates/banner.pt	Tue Nov 13 14:50:38 2018 +0100
+++ b/src/pyams_default_theme/viewlet/banner/templates/banner.pt	Tue Nov 20 15:18:10 2018 +0100
@@ -1,4 +1,4 @@
-<section class="wrapper-regularbanner" i18n:domain="onf_website">
+<section class="wrapper-regularbanner" i18n:domain="pyams_default_theme">
 	<div class="regularbanner">
 		<div class="regularbanner__bg"
 			tal:define="banner view.banner"