UNPKG

@cnbritain/wc-card

Version:

Card component - Portrait, landscape and switcher

334 lines (253 loc) 14.7 kB
{%- from "@cnbritain/wc-common-image/template/macro.html" import common_image -%} {%- from "@cnbritain/wc-common-picture/template/macro.html" import common_picture -%} {%- macro card_core_byline(name, prefix='By') -%} <div class="c-card__byline"> <span class="c-card__byline-prefix">{{ prefix }}</span> <span class="c-card__byline-name">{{ name }}</span> </div> {%- endmacro -%} {%- macro card_core_description(desc) -%} <p class="c-card__desc"> {{ desc }} </p> {%- endmacro -%} {%- macro card_core_image(article, image_sources, brand='default', image_crop_keys=['default'], image_gallery_order=None, lazyload_images=True, hide_image_icon=False) -%} {%- set image_orientations = image_sources|get_image_source_orientations -%} {%- set image_cls = '' -%} {%- if image_orientations|length == 1 -%} {%- if image_orientations[0] == 'landscape' -%} {%- set image_cls = '%s %s'|format(image_cls, 'c-card__image--landscape') -%} {%- elif image_orientations[0] == 'square' -%} {%- set image_cls = '%s %s'|format(image_cls, 'c-card__image--square') -%} {%- elif image_orientations[0] == 'portrait' -%} {%- set image_cls = '%s %s'|format(image_cls, 'c-card__image--portrait') -%} {%- endif -%} {%- endif -%} {%- if image_gallery_order and image_gallery_order|length > 1 -%} <div class="c-card__image-group"> {%- for image_index in image_gallery_order -%} <div class="c-card__image {{ image_cls }}"> {%- set card_image = article['gallery']['images'][image_index]|create_crops(image_sources=image_sources, retina=True, max_width=600) -%} {%- if image_orientations|length > 1 -%} {%- set image_breakpoints = card_image|get_breakpoints_from_image_sources(image_sources) -%} {%- set picture_sources = card_image|create_picture_sources(image_breakpoints) -%} {{- common_picture(card_image, picture_sources, class='global__image', lazyload=lazyload_images) -}} {%- else -%} {{- common_image(card_image, class='global__image', lazyload=lazyload_images) -}} {%- endif -%} {%- if loop.last and article['gallery']['images']|length - 3 > 0 -%} <div class='c-card__image__remaining'> <div class='c-card__image__remaining__text'> <span class='c-card__image__remaining__value'>{{ article['gallery']['images']|length - 3 }}</span> </div> </div> {%- endif -%} </div> {%- endfor -%} </div> {%- else -%} <div class="c-card__image {{ image_cls }}"> {%- if article['images'] is list -%} {%- set card_image = article|get_key('images')|first|create_crops(image_sources=image_sources, retina=True, max_width=600) -%} {%- else -%} {%- set card_image = article|get_key('images')|try_image_crops(image_crop_keys)|create_crops(image_sources=image_sources, retina=True, max_width=600) -%} {%- endif -%} {%- if image_orientations|length > 1 -%} {%- set image_breakpoints = card_image|get_breakpoints_from_image_sources(image_sources) -%} {%- set picture_sources = card_image|create_picture_sources(image_breakpoints) -%} {{- common_picture(card_image, picture_sources, class='global__image', lazyload=lazyload_images) -}} {%- else -%} {{- common_image(card_image, class='global__image', lazyload=lazyload_images) -}} {%- endif -%} {%- if 'type' in article and not hide_image_icon -%} {%- if article['type'] == 'gallery' -%} <div class="c-card__image__icon c-card__image__icon--gallery">{{ "@cnbritain/wc-assets/import/%s/icons/gallery.svg"|format(brand)|import_svg_icon }}</div> {%- endif -%} {%- if article['type'] == 'video' -%} <div class="c-card__image__icon c-card__image__icon--video">{{ "@cnbritain/wc-assets/import/%s/icons/video.svg"|format(brand)|import_svg_icon }}</div> {%- endif -%} {%- if article['type'] == 'podcast' -%} <div class="c-card__image__icon c-card__image__icon--podcast">{{ "@cnbritain/wc-assets/import/%s/icons/play.svg"|format(brand)|import_svg_icon }}</div> {%- endif -%} {%- endif -%} </div> {%- endif -%} {%- endmacro -%} {%- macro card_core_link(article, url=None) -%} {%- if 'ad_url' in article and article['ad_url'] -%} <a href="{{ article['ad_url'] }}" class="c-card__link c-card__link--article">{{ article['title'] }}</a> {%- elif not 'ad_url' in article -%} {%- if is_article(article) -%} <a href="{{ url_for_article(article) }}" class="c-card__link c-card__link--article">{{ article['title'] }}</a> {%- elif is_tag(article) -%} <a href="{{ url_for_tag(article) }}" class="c-card__link c-card__link--article">{{ article['title'] }}</a> {%- elif url -%} <a href="{{ url }}" class="c-card__link c-card__link--article">{{ article['title'] }}</a> {%- elif is_magazine(article) -%} <a href="{{ url_for('marketing.magazine_issue', year=article.year, month=article.month|get_month_from_int) }}" class="c-card__link c-card__link--article">{{ article['month']|get_month_from_int|title }} {{ article['year'] }}</a> {%- elif is_show(article) -%} <a href="{{ url_for_show_summary(article) }}" class='c-card__link c-card__link--article'></a> {%- endif -%} {%- endif -%} {%- endmacro -%} {%- macro card_core_meta(article, brand='default', hide_tag=False, hide_duration=True, hide_date=False) -%} {%- set has_type = 'type' in article -%} <ul class="global__list-reset c-card__meta"> {%- if not hide_tag and article|get_primary_tag -%} <li class="c-card__meta-item c-card__meta-item--tag"> {{ article|get_primary_tag|get_key('title') }} </li> {%- endif -%} {%- if has_type and article['type'] == 'gallery' -%} {# Old api does not have image_count #} {# This will be removed soon #} {%- if article|get_key('gallery')|get_key('images') -%} <li class="c-card__meta-item c-card__meta-item--gallery"> {{ "@cnbritain/wc-assets/import/%s/icons/gallery.svg"|format(brand)|import_svg_icon }} {{ article['gallery']['images']|length }} items </li> {# New api include image_count #} {%- elif article|get_key('gallery')|get_key('image_count') -%} <li class="c-card__meta-item c-card__meta-item--gallery"> {{ "@cnbritain/wc-assets/import/%s/icons/gallery.svg"|format(brand)|import_svg_icon }} {{ article['gallery']['image_count'] }} items </li> {%- endif -%} {%- endif -%} {%- if not hide_duration and has_type and article['type'] == 'video' and article|get_key('video') and article['video']|get_key('duration') -%} <li class="c-card__meta-item c-card__meta-item--video"> {{ "@cnbritain/wc-assets/import/%s/icons/video.svg"|format(brand)|import_svg_icon }} {{ article['video']['duration'] }} </li> {%- endif -%} {%- if is_show(article) -%} {%- if not hide_date and 'date_time' in article and article['date_time'] -%} <li class="c-card__meta-item c-card__meta-item--date"> <time datetime="{{ article['date_time'] }}">{{ article['date_time']|dt_format('%-d %B %Y') }}</time> </li> {%- endif -%} {%- else -%} {%- if not hide_date and 'show_date' in article and article['show_date'] -%} <li class="c-card__meta-item c-card__meta-item--date"> <time datetime="{{ article|get_article_date }}">{{ article|get_article_date|get_relative_time }}</time> </li> {%- endif -%} {%- endif -%} {%- if article|get_meta_value('event_date_start') -%} <li class="c-card__meta-item c-card__meta-item--event-date"> {{ article|get_event_datetime(output='html') }} </li> {%- endif -%} {%- if article|get_meta_value('event_location') -%} <li class="c-card__meta-item c-card__meta-item--event-location"> {{ article|get_meta_value('event_location') }} </li> {%- endif -%} </ul> {%- endmacro -%} {%- macro card_core_review(review_info) -%} <ul class="global__list-reset c-card__rating"> {%- for i in range(review_info['maxscore']) -%} {%- if i < review_info['score'] -%} <li class="c-card__rating-mark c-card__rating-mark--fill"></li> {%- else -%} <li class="c-card__rating-mark"></li> {%- endif -%} {%- endfor -%} <li class="c-card__rating-label">{{ review_info['score'] }}/{{ review_info['maxscore'] }}</li> </ul> {%- endmacro -%} {%- macro card_core_separator(cls='') -%} <hr class="c-card__separator {{ cls }}" /> {%- endmacro -%} {%- macro card_core_sponsor(sponsor, prefix='In partnership with') -%} <div class="c-card__sponsor"> <span class="c-card__sponsor-label">{{ prefix }}</span> <span class="c-card__sponsor-title">{{ sponsor['title'] }}</span> </div> {{- card_core_separator('c-card__separator--sponsor') -}} {%- endmacro -%} {%- macro card_core_title(title) -%} <h3 class="c-card__title"> <span>{{ title }}</span> </h3> {%- endmacro -%} {%- macro card_core(article, cls='', brand='default', hide_author=True, hide_duration=True, hide_image_icon=True, hide_description=True, hide_tag=False, hide_date=False, theme='light', lazyload_images=True, image_sources=None, image_gallery_order=None, image_crop_keys=['default']) -%} {%- set article_sponsor = article|get_article_sponsor -%} <article class="c-card c-card--{{ theme }} {{ cls }}"> {{- card_core_link(article) -}} <div class="c-card__obj"> <div class="c-card__obj__header"> {{- card_core_image(article, image_sources=image_sources, image_crop_keys=image_crop_keys, brand=brand, image_gallery_order=image_gallery_order, hide_image_icon=hide_image_icon, lazyload_images=lazyload_images) -}} </div> <div class="c-card__obj__body"> {%- set article_title = article['title'] -%} {%- if is_magazine(article) -%} {%- set article_title = '%s %s'|format(article['month']|get_month_from_int|title, article['year']) -%} {%- endif -%} {{- card_core_title(article_title) -}} {%- if not hide_description -%} {{- card_core_description(article['teaser_short']) -}} {%- endif -%} {{- card_core_separator() -}} {%- if 'type' in article and article['type'] == 'review' -%} {%- set review_info = article|get_review_information -%} {%- if review_info -%} {{- card_core_review(review_info) -}} {%- endif -%} {%- endif -%} {%- if not article_sponsor and not hide_author and article|get_key('profiles') and article['profiles']|length > 0 -%} {%- if is_show(article) -%} {{- card_core_byline(article['profiles'][0]['full_name'], prefix='show report by') -}} {%- else -%} {{- card_core_byline(article['profiles'][0]['full_name']) -}} {%- endif -%} {%- endif -%} {%- if article_sponsor -%} {{- card_core_sponsor(article_sponsor) -}} {%- endif -%} {{- card_core_meta(article, brand, hide_tag, hide_duration, hide_date) -}} </div> </div> </article> {%- endmacro -%} {%- macro card(article) -%} {%- set card_type = kwargs.pop('card_type', 'portrait') -%} {%- if card_type == 'portrait' -%} {{- card_portrait(article, **kwargs) -}} {%- elif card_type == 'landscape' -%} {{- card_landscape(article, **kwargs) -}} {%- elif card_type == 'switcher' -%} {{- card_switcher(article, **kwargs) -}} {%- elif card_type == 'magazine' -%} {{- card_magazine(article, **kwargs) -}} {%- elif card_type == 'inline' -%} {{- card_inline(article, **kwargs) -}} {%- elif card_type == 'thumbnail' -%} {{- card_thumbnail(article, **kwargs) -}} {%- endif -%} {%- endmacro -%} {%- macro card_portrait(article) -%} {%- set cls = '%s %s'|format('c-card--portrait', kwargs.pop('cls', '')) -%} {{- card_core(article, cls=cls, **kwargs) -}} {%- endmacro -%} {%- macro card_landscape(article) -%} {%- set cls = '%s %s'|format('c-card--landscape', kwargs.pop('cls', '')) -%} {{- card_core(article, cls=cls, **kwargs) -}} {%- endmacro -%} {%- macro card_switcher(article) -%} {%- set cls = '%s %s'|format('c-card--switcher', kwargs.pop('cls', '')) -%} {{- card_core(article, cls=cls, **kwargs) -}} {%- endmacro -%} {%- macro card_inline(article) -%} {%- set cls = '%s %s'|format('c-card--inline', kwargs.pop('cls', '')) -%} {{- card_core(article, cls=cls, **kwargs) -}} {%- endmacro -%} {%- macro card_magazine(article) -%} {%- set cls = '%s %s'|format('c-card--magazine', kwargs.pop('cls', '')) -%} {{- card_core(article, cls=cls, **kwargs) -}} {%- endmacro -%} {%- macro card_thumbnail(article, image_gallery_order) -%} {%- if 'gallery' in article and article['gallery'] and 'images' in article['gallery'] and article['gallery']['images'] and image_gallery_order|length <= article['gallery']['images']|length -%} {%- set cls = '%s %s'|format('c-card--thumbnail', kwargs.pop('cls', '')) -%} {{- card_core(article, cls=cls, image_gallery_order=image_gallery_order, **kwargs) -}} {%- else -%} {%- set dont_need_this = kwargs.pop('image_sources') -%} {{- card_portrait(article, image_sources=[('landscape')], **kwargs) -}} {%- endif -%} {%- endmacro -%}