{% set schema = bolt.data.components['@bolt-components-card'].schema %} {% if enable_json_schema_validation %} {{ validate_data_schema(schema, _self) | raw }} {% endif %} {% set tags = ["div", "article", "section", "figure"] %} {# Available overall container tags #} {% set contentTags = ["div", "article", "section", "figcaption"] %} {# Available content container tags #} {% set themes = ["xlight", "light", "dark", "xdark"] %} {% set prefix = "c-bolt-" %} {% set attributes = create_attribute(attributes|default({})) %} {# Defaults for a vanilla `Card` component #} {% set componentName = "card" %} {% set baseClass = prefix ~ componentName %} {% set theme = theme %} {% set tag = tag in tags ? tag: "div" %} {% set contentTag = contentTag in contentTags ? contentTag: "div" %} {% set classes = [ baseClass ] %} {% if url %} {% set attributes = attributes.setAttribute("data-href", url) %} {% endif %} {% set _card_footer_block = block('card_footer') %} {% set _allowedCardHeaderItems = ["image", "video"] %} {% set _allowedCardBodyItems = ["eyebrow", "content", "text", "headline", "teaser"] %} {% set _allowedCardFooterItems = ["buttons", "link", "button"] %} {% set _allowedItems = _allowedCardHeaderItems | merge(_allowedCardBodyItems) | merge(_allowedCardFooterItems) %} {% set _allowedCollections = ["contentItems"] %} {# array of different arrays that could exist w/ nested content #} {% set _items = [] %} {% for collectionName in _allowedCollections %} {% if _context[collectionName] %} {% for key, item in _context[collectionName] if item.pattern in _allowedItems or key in _allowedItems %} {% if item.buttons %} {% set buttons = item.buttons %} {% for button in buttons %} {% set button = button | merge({ "pattern": "button" }) %} {% set _items = _items | merge([button]) %} {% endfor %} {% set item = item | merge({ "buttons": [] }) %} {% endif %} {% set _items = _items | merge([item]) %} {% endfor %} {% endif %} {% endfor %} {% for key, item in _context if item.pattern in _allowedItems or key in _allowedItems %} {% if key == "teaser" %} {% if item.buttons %} {% for button in item.buttons %} {% set button = button | merge({ "pattern": "button" }) %} {% set _items = _items | merge([button]) %} {% endfor %} {% set item = item | merge({ "buttons": [] }) %} {% endif %} {% endif %} {% if item.pattern == false %} {% set item = item | merge({ "pattern": key }) %} {% endif %} {% set _items = _items | merge([item]) %} {% endfor %} {% set cardMedia %} {% for key, item in _items if item.pattern in _allowedCardHeaderItems %} {% if item.pattern %} {% if item.pattern == 'image' and url is not empty %} {% endif %} {% include pattern_template(item.pattern) with item only %} {% if item.pattern == 'image' and url is not empty %} {% endif %} {% else %} {{ item }} {% endif %} {% endfor %} {% endset %} <{{ tag }} {{ attributes.addClass(classes) }}> {% if block('card_media') is not empty %}
{% spaceless %} {% block card_media %} {{ cardMedia }} {% endblock %} {% endspaceless %}
{% endif %} {% if block('card_body') is not empty %} <{{ contentTag }} class="{{ "#{baseClass}__body" }}">{% spaceless %} {% block card_body %} {% for key,item in _items if item.pattern in _allowedCardBodyItems %} {% if item.pattern %} {% include pattern_template(item.pattern) with item only %} {% elseif key != "content" %} {% include pattern_template(key) with item only %} {% else %} {{ item }} {% endif %} {% endfor %} {% endblock card_body %} {% endspaceless %} {% endif %} {% if block('card_footer') is not empty %}
{% spaceless %} {% block card_footer %} {% for item in _items if item.pattern in _allowedCardFooterItems %} {% set paramOverrides = { align: "start", style: "text", width: "full", } %} {% if item.icon == null %} {% if item.external == true %} {% set iconOverrides = { icon: { name: "external-link" } } %} {% else %} {% set iconOverrides = { icon: { name: "chevron-right" } } %} {% endif %} {% endif %}
{% if item.pattern %} {% set item = item | merge(paramOverrides) %} {# if icon default data set, merge that in as well #} {% if iconOverrides %} {% set item = item | merge(iconOverrides) %} {% endif %} {% include pattern_template(item.pattern) with item only %} {% else %} {{ item }} {% endif %}
{% endfor %} {% endblock card_footer %} {% endspaceless %}
{% endif %}