{% extends "public_base.html" %} {% import "marketplace/_macros.html" as mk %} {% block title %}{{ _("Product lines") }}{% endblock %} {% block hero %}

{{ _("Product lines") }}

{{ _("Each line is a Software Product Line, a variability model over marketplace features. Pick one and configure your own product.") }}

{% endblock %} {% block content %}
{% if spls %}
{% for spl in spls %}
{{ mk.icon("layers", 22) }}

{% if spl.detail_url %}{{ spl.name }}{% else %}{{ spl.name }}{% endif %}

{% if spl.description %}

{{ spl.description }}

{% endif %}
{% if spl.configure_url %} {{ mk.icon("sliders") }}{{ _("Configure this line") }} {% endif %}
{% if spl.mandatory %}
{{ mk.icon("check-circle") }} {{ _("Always included") }} {{ spl.mandatory | length }} {{ mk.icon("chevron-down") }}
{% for entry in spl.mandatory %}{{ mk.feature_chip(entry.short, external=entry.external) }}{% endfor %}
{% endif %} {% for group_name, group in spl.groups.items() %}
{{ mk.icon("git-branch") }} {{ group_name }} {% if group.kind == "alternative" %}{% if group.required %}{{ _("choose exactly one") }}{% else %}{{ _("choose one at most") }}{% endif %}{% elif group.kind == "or" %}{% if group.required %}{{ _("choose at least one") }}{% else %}{{ _("choose any") }}{% endif %}{% else %}{{ group.kind }}{% endif %} {{ group.options | length }} {{ mk.icon("chevron-down") }}
{% for entry in group.options %}{{ mk.feature_chip(entry.short, external=entry.external) }}{% endfor %}
{% endfor %} {% if spl.optional %}
{{ mk.icon("plus") }} {{ _("Optional") }} {{ spl.optional | length }} {{ mk.icon("chevron-down") }}
{% for entry in spl.optional %}{{ mk.feature_chip(entry.short, external=entry.external) }}{% endfor %}
{% endif %} {# The model's cross tree constraints, "a => b", read as "a needs b". #} {% if spl.rules %}
{{ mk.icon("link") }} {{ _("Rules") }} {{ _("what each feature needs in this line") }} {{ spl.rules | length }} {{ mk.icon("chevron-down") }}
    {% for rule in spl.rules %}
  • {{ rule.feature }} {{ _("needs") }} {{ rule.needs }}
  • {% endfor %}
{% endif %}
{% endfor %}
{% else %}
{{ mk.icon("layers", 34) }}

{{ _("No product lines in the index yet.") }}

{% endif %}
{% endblock %}