{# Shows a revision menu for an element. Only an existing element should be passed to this. #} {% import "_includes/forms" as forms %} {% set drafts = element.id and canHaveDrafts ? element.find() .draftOf(element) .siteId(element.siteId) .anyStatus() .orderBy({dateUpdated: SORT_DESC}) .with(['draftCreator']) .all()|filter(d => d.getIsEditable()) : [] %} {% set maxRevisions = craft.app.config.general.maxRevisions %} {% if element.id and (not maxRevisions or maxRevisions > 1) %} {% set revisions = element.find() .revisionOf(element.getCanonicalId()) .siteId(element.siteId) .anyStatus() .offset(1) .limit(maxRevisions ? min(maxRevisions - 1, 10) : 10) .orderBy({dateCreated: SORT_DESC}) .with(['revisionCreator']) .all() %} {% else %} {% set revisions = [] %} {% endif %} {% set baseParams = craft.app.request.queryParams|withoutKey('draftId')|withoutKey('revisionId')|withoutKey('siteId')|withoutKey('fresh') %} {% if craft.app.config.general.pathParam %} {% set baseParams = baseParams|withoutKey(craft.app.config.general.pathParam) %} {% endif %} {% set supportedSiteIds = supportedSiteIds ?? (craft.app.isMultiSite ? element.getSupportedSites()|filter(s => s.propagate ?? true) : [element.siteId])|column(s => s.siteId ?? s) %} {% set editableSiteIds = editableSiteIds ?? supportedSiteIds|intersect(craft.app.sites.getEditableSiteIds()) %} {% set isMultiSiteElement = supportedSiteIds|length > 1 %} {% set canEditMultipleSites = editableSiteIds|length > 1 %} {% set isProvisionalDraft = element.isProvisionalDraft %} {% set originalElement = element %} {% if isProvisionalDraft %} {% set element = element.getCanonical(true) %} {% endif %} {% set isDraft = not isProvisionalDraft and element.getIsDraft() %} {% set isRevision = element.getIsRevision() %} {% set showSiteLabel = showSiteLabel ?? isMultiSiteElement %} {% set showRevisionLabel = showRevisionLabel ?? (canHaveDrafts or revisions|length) %} {% set cpEditUrl = cpUrl(element.getCpEditUrl(), { draftId: null, revisionId: null, }) %} {% if isDraft %} {% set baseUrl = url(cpEditUrl, baseParams|merge({ draftId: element.draftId })) %} {% elseif isRevision %} {% set baseUrl = url(cpEditUrl, baseParams|merge({ revisionId: element.revisionId })) %} {% else %} {% set baseUrl = cpEditUrl %} {% endif %} {% set showRevisions = showRevisionLabel and not element.getIsUnpublishedDraft() %} {% set showMenu = editableSiteIds|length > 1 or showRevisions %}
{% tag 'button' with { type: 'button', id: 'context-btn', class: [ 'btn', 'btngroup-btn-last', showMenu ? 'menubtn' : 'disabled', ], data: { icon: showSiteLabel ? 'world' : null, }, } %} {%- if showSiteLabel %} {{- originalElement.getSite().name|t('site') }} {%- endif %} {%- if showSiteLabel and showRevisionLabel %} – {% endif %} {%- if showRevisionLabel -%} {%- if isDraft %} {{- element.getDraftName() }} {%- elseif isRevision %} {{- element.getRevisionLabel() }} {%- else %} {{- 'Current'|t('app') }} {%- if isProvisionalDraft -%} — {{ 'Edited'|t('app') }} {%- endif %} {%- endif -%} {%- endif -%} {% endtag %}