# HG changeset patch # User Damien Correia # Date 1542723490 -3600 # Node ID df13285543de4031fb574d15adc1b8f3a371df26 # Parent 549c215da6cea49a65d8486e6e9905142ca6d3ae# Parent 829f481fe2a6ca73fd1e44d5ae1240e0c8054018 Merge default diff -r 549c215da6ce -r df13285543de .hgtags --- 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 diff -r 549c215da6ce -r df13285543de buildout.cfg --- 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 diff -r 549c215da6ce -r df13285543de docs/HISTORY.txt --- 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 diff -r 549c215da6ce -r df13285543de setup.py --- 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 = [] diff -r 549c215da6ce -r df13285543de src/pyams_default_theme.egg-info/PKG-INFO --- 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 diff -r 549c215da6ce -r df13285543de src/pyams_default_theme.egg-info/SOURCES.txt --- 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 diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/__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""" diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/component/gallery/__init__.py --- 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',) diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/component/gallery/templates/renderer-carousel.pt --- /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 @@ +

${view.title}

+ diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/component/gallery/templates/renderer-default.pt --- 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 @@ -
- - - - - - - - - - - - - - +

${view.title}

+ diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/component/illustration/__init__.py --- 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) diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/component/illustration/templates/illustration-default.pt --- 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 @@ -
+
+

${view.title}

${structure:tales:picture(image, alt=view.alt_title)} - legend +
${view.author}
diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/component/illustration/templates/illustration-left.pt --- 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 @@ - diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/component/illustration/templates/illustration-right.pt --- 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 @@ - diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/component/keynumber/portlet/templates/horizontal-render.pt --- 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 @@ -
+

diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/component/keynumber/portlet/templates/vertical-render.pt --- 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 @@ -
+

diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/component/keynumber/templates/keynumber-default.pt --- 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 @@ - -

${i18n:view.title}

-
-
-
- ${i18n:number.label} -
-
- ${i18n:number.number} - ${i18n:number.unit} -
- + +

${view.title}

+
+
+
+ ${i18n:number.label} +
+
+ ${i18n:number.number} + ${i18n:number.unit} +
+
+
+
diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/component/paragraph/milestone.py --- 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 diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/component/paragraph/pictogram.py --- 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() diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/component/paragraph/templates/contact-default.pt --- 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 @@ -

Contact title

- + class="thumbnail photo pull-${settings.photo_position}"> + ${structure:tales:picture(view.photo, lg_width=3, md_width=3, sm_width=4, xs_width=4)}
Location map
- Contact name
+
+ ${view.name}
+ + ${view.charge}
+
+ + ${view.company}
+
+
+ ${structure:tales:html(view.address)} +
+ + Contact email: + + ${view.contact_email} +
+
+ + Phone number: + + ${view.phone_number} +
+
+
diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/component/paragraph/templates/frame-default.pt --- 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 @@ -
- ${structure:renderer.render())} +
+ ${structure:renderer.render()}

${view.title}

${structure:renderer.render()}

body

@@ -12,4 +11,4 @@ ${structure:provider:pyams.associations} -
+ diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/component/paragraph/templates/frame-left.pt --- 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 @@ -
- ${structure:renderer.render())} +
+ ${structure:renderer.render()}

${view.title}

${structure:renderer.render()}

body

@@ -13,4 +12,4 @@ ${structure:provider:pyams.associations} -
+ diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/component/paragraph/templates/frame-right.pt --- 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 @@ -
- ${structure:renderer.render())} +
+ ${structure:renderer.render()}

${view.title}

${structure:renderer.render()}

body

@@ -13,4 +12,4 @@ ${structure:provider:pyams.associations} -
+ diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/component/paragraph/templates/keypoints-default.pt --- 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 @@ -
-
    -
  • item
  • -
+
+
+
+

${view.title}

+
+
+
    +
  • item
  • +
+
+
diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/component/paragraph/templates/milestone-default.pt --- 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 @@ + +

${view.title}

+
+ +
+ ${i18n:item.title}
+
${i18n:item.label}
+
+
>
+
+
+
\ No newline at end of file diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/component/paragraph/templates/pictogram-default.pt --- 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 @@ +
+

${view.title}

+
+
+
+
+ ${structure:tales:thumbnail(image, 'auto', '100%')} +
+ ${i18n:picto_item.label} + + ${structure:tales:html(body)} + +
+
+
+
+
\ No newline at end of file diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/component/paragraph/templates/verbatim-default.pt --- 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 @@ -
- -
- ${structure:tales:picture(photo, lg_thumb='portrait', md_thumb='portrait', - sm_thumb='portrait', xs_thumb='portrait', alt=alt)} -
-
- Author
- Charge +
+
+

${view.title}

-
Quote
- - -
Quote
-
- ${view.author} - , - ${view.charge} +
+ + + +
+
Quote
+
+ ${view.author} + , + ${view.charge} +
+
- +
diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/component/paragraph/zmi/contact.py --- /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 +# 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 diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/features/header/__init__.py --- 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() diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/features/header/interfaces.py --- 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""" diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/features/header/zmi/__init__.py --- 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 diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/features/renderer/__init__.py --- 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) diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/features/search/__init__.py --- 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) diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/locales/fr/LC_MESSAGES/pyams_default_theme.mo Binary file src/pyams_default_theme/locales/fr/LC_MESSAGES/pyams_default_theme.mo has changed diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/locales/fr/LC_MESSAGES/pyams_default_theme.po --- 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 \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 ?" diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/locales/pyams_default_theme.pot --- 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 \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 "" diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/resources/css/ext/ekko-lightbox.css --- /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 diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/resources/css/ext/ekko-lightbox.min.css --- /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)}} diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/resources/css/pyams-default.css --- 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 diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/resources/css/pyams-default.css.map --- 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 diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/resources/css/pyams-default.min.css --- 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} diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/resources/js/ext/ekko-lightbox.js --- /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: '
', // http://tobiasahlin.com/spinkit/ + leftArrow: '', + rightArrow: '', + 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 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 '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 = ''; + var btn = ''; + + var header = ''; + var footer = ''; + var body = ''; + var dialog = ''; + $(this._config.doc.body).append(''); + + 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(''); + 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 || " "); + } 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(''); + 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('
'); + 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('
<' + mediaType + ' width="' + width + '" height="' + height + '" preload="auto" autoplay controls class="embed-responsive-item">' + this._config.strings.type + '
'); + 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(''); + 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 = $(''); + 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); diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/resources/js/ext/ekko-lightbox.js.map --- /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: '
', // http://tobiasahlin.com/spinkit/\n\t\tleftArrow: '',\n\t\trightArrow: '',\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 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 '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 = `

${this._config.title || \" \"}

`;\n\t\t\tlet btn = ``;\n\n\t\t\tlet header = `
`+(this._isBootstrap3 ? btn+h4 : h4+btn)+`
`;\n\t\t\tlet footer = `
${this._config.footer || \" \"}
`;\n\t\t\tlet body = '
'\n\t\t\tlet dialog = `
${header}${body}${footer}
`\n\t\t\t$(this._config.doc.body).append(`
${dialog}
`)\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(`
`)\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 || \" \")\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(``);\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(`
`);\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(`
<${mediaType} width=\"${width}\" height=\"${height}\" preload=\"auto\" autoplay controls class=\"embed-responsive-item\">${this._config.strings.type}
`);\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(``);\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 = $('');\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 diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/resources/js/ext/ekko-lightbox.min.js --- /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
',leftArrow:"",rightArrow:"",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='",a='',s='";c(this._config.doc.body).append('"),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._config.leftArrow+''+this._config.rightArrow+"
"),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'),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('
'),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<'+o+' width="'+a+'" height="'+s+'" preload="auto" autoplay controls class="embed-responsive-item">'+this._config.strings.type+"
"),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(''),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");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._touchendXthis._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=575title -
diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/shared/logo/templates/logos-default.pt --- 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 @@ -

title

-
+ diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/shared/site/folder.py --- 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) diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/shared/site/link.py --- 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) diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/shared/site/portlet/templates/site-summary.pt --- 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 @@ -
-
+
-
- - - ${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')} - - -
-
diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/shared/view/templates/render.pt --- 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!!
    -
  • +
  • + ${i18n:item.title} + (${tales:oid(item)}) +
diff -r 549c215da6ce -r df13285543de src/pyams_default_theme/viewlet/banner/templates/banner.pt --- 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 @@ -
+