Skip to content
Snippets Groups Projects
Index.html 8.32 KiB
{namespace vi=SGalinski\SgVimeo\ViewHelpers}

<f:layout name="Default" />

<f:section name="main">
	<f:if condition="{showApiResult}">
		{response -> f:debug()}
	</f:if>

	<f:variable name="feedCount" value="{response.items -> f:count()}" />

	<f:comment><!--Handle the container classes--></f:comment>
	<f:variable name="classes">
		<f:if condition="{settings.layout} === 'playlist' && {feedCount} < 4">
			<f:then>
				sg-video--default
			</f:then>
			<f:else>
				<f:switch expression="{settings.layout}">
					<f:case value="rows">
						sg-video--rows
					</f:case>
					<f:case value="playlist">
						sg-video--playlist sg-video--{feedCount}
					</f:case>
					<f:defaultCase>
						sg-video--default
					</f:defaultCase>
				</f:switch>
			</f:else>
		</f:if>
	</f:variable>

	{vi:structuredVideoData(videoArray: '{response.items}', arrayType: 'vimeo')}

	<f:if condition="{error}">
		<f:then>
			<p>{error}</p>
		</f:then>
		<f:else>
			<f:comment><!--Set the layout to single if there is only one item.--></f:comment>
			<form>
				<div class="row">
					<f:if condition="{filtersTop} || {submitButton.position} == 'top' || {submitButton.position} == 'both'">
						<div class="sg-video-filters sg-video-filters-top">
							<f:for each="{filtersTop}" as="filter">
								<f:render partial="{filter.partial}" arguments="{filter: filter, pluginId: pluginContentData.uid, filterValues: filterValues}" />
							</f:for>

							<f:if condition="{submitButton.position} == top || {submitButton.position} == 'both'">
								<div class="sg-video-submit-filters sg-video-submit-filters-top">
									<button class="{submitButton.cssClass}" type="submit">{f:translate(key: submitButton.label)}</button>
								</div>
							</f:if>
						</div>
					</f:if>

					<f:if condition="{notFound}">
						<f:then>
							<f:render partial="NotFound" arguments="{name: filter.name, label: filter.label}" />
						</f:then>
						<f:else>

							<div class="sg-video {f:if(condition: '{feedCount} > 1', then: '{classes}', else: 'sg-video--single')}">
								<f:if condition="{feedCount} < 2">
									<f:then>
										<f:render section="videoItem" arguments="{
											feedItem: response.items.0,
											titleChars: settings.maxTitleChars,
											descChars: settings.maxDescriptionChars
										}" />
									</f:then>
									<f:else>
										<f:switch expression="{settings.layout}">
											<f:case value="playlist">
												<f:render section="list-playlist" arguments="{_all}" />
											</f:case>
											<f:defaultCase>
												<f:render section="list" arguments="{_all}" />
											</f:defaultCase>
										</f:switch>
									</f:else>
								</f:if>
							</div>
						</f:else>
					</f:if>

					<f:if condition="{filtersBottom} || {submitButton.position} == 'bottom' || {submitButton.position} == 'both'">
						<div class="sg-video-filters sg-video-filters-bottom">
							<f:for each="{filtersBottom}" as="filter">
								<f:render partial="{filter.partial}" arguments="{filter: filter, pluginId: pluginContentData.uid, filterValues: filterValues}" />
							</f:for>

							<f:if condition="{submitButton.position} == 'bottom' || {submitButton.position} == 'both'">
								<div class="sg-video-submit-filters sg-video-submit-filters-bottom">
									<button class="{submitButton.cssClass}" type="submit">{f:translate(key: submitButton.label)}</button>
								</div>
							</f:if>
						</div>
					</f:if>
				</div>
			</form>
		</f:else>
	</f:if>
</f:section>

<f:section name="list">
	<ul class="sg-video__list sg-video__list--{f:if(condition: '{settings.layout} === \'rows\'', then: 'rows', else: 'default')}">
		<f:for each="{response.items}" as="feedItem" iteration="feedIterator">
			<li class="sg-video__list-item">
				<f:render section="videoItem" arguments="{
					feedItem: feedItem,
					titleChars: settings.maxTitleChars,
					descChars: settings.maxDescriptionChars,
					expand: 1
				}" />
			</li>
		</f:for>
	</ul>
</f:section>

<f:section name="list-playlist">
	<div class="sg-video__highlight">
		<f:render section="videoItem" arguments="{
			feedItem: response.items.0,
			titleChars: settings.maxTitleChars,
			descChars: settings.maxDescriptionChars
		}" />
	</div>
	<ul class="sg-video__list sg-video__list--playlist">
		<div>
			<f:for each="{response.items}" as="feedItem" iteration="feedIterator">
				<f:if condition="!{feedIterator.isFirst}">
					<li class="sg-video__list-item">
						<f:render section="videoItem" arguments="{
							feedItem: feedItem,
							titleChars: settings.maxTitleChars,
							descChars: settings.maxDescriptionChars
						}" />
					</li>
				</f:if>
			</f:for>
		</div>
	</ul>
</f:section>

<f:section name="videoItem">
	<f:variable name="urlParameters">{f:if(condition: '{settings.urlParameters}', then: '{settings.urlParameters}', else: '{settings.globalUrlParameters}')}</f:variable>
	<f:variable name="feedItemUrl">
		<vi:urlWithQueryParameters url="{f:if(condition: '{feedItem.embedLink}', then: '{feedItem.embedLink}', else: '{feedItem.link}')}" parameters="{urlParameters}" />
	</f:variable>
	<div class="sg-video__item">
		<a class="sg-video__image-container sg-video-item" href="{feedItemUrl}" target="_blank"
		   data-disable-lightbox="{settings.disableLightbox}"
		   data-disable-lightbox-mobile="{settings.disableLightboxMobile}"
		   data-additional-url-parameters="{urlParameters}"
		   data-video-type="vimeo">
			<span>
				<vi:renderSvg color="currentColor" name="solid-play"></vi:renderSvg>
				<f:if condition="{feedItem.thumbnail}">
					<f:then>
						<img class="sg-video__image" src="{feedItem.thumbnail}" alt="{feedItem.name}" loading="lazy" />
					</f:then>
					<f:else>
						<f:if condition="{feedItem.pictures.base_link}">
							<img class="sg-video__image" src="{feedItem.pictures.base_link}_{feedItem.width}x{feedItem.height}?r=pad" alt="{item.name}" width="{feedItem.width}" height="{feedItem.height}" loading="lazy" />
						</f:if>
						<f:comment><!--
							<f:if condition="{feedItem.pictures.sizes}">
								<f:for each="{feedItem.pictures.sizes}" as="picture" iteration="iterator">
									<f:if condition="{iterator.isLast}">
										<img class="sg-video__image" src="{picture.link}" alt="{item.name}" width="{picture.width}" height="{picture.height}" loading="lazy"/>
									</f:if>
								</f:for>
							</f:if>
						--></f:comment>
					</f:else>
				</f:if>
			</span>
		</a>
		<f:if condition="{settings.showTitle} || {settings.showDescription}">
			<div class="sg-video__bodytext">
				<f:if condition="{settings.showTitle} && {feedItem.name}">
					<h3 class="h3">
						<f:if condition="{titleChars}">
							<f:then>
								<!-- This MUST be in one line, otherwise the crop function will count the whitespace -->
								<f:format.crop maxCharacters="{titleChars}" respectWordBoundaries="1" append="..."><f:format.htmlentitiesDecode>{feedItem.name}</f:format.htmlentitiesDecode></f:format.crop>
							</f:then>
							<f:else>
								<f:format.htmlentitiesDecode>{feedItem.name}</f:format.htmlentitiesDecode>
							</f:else>
						</f:if>
					</h3>
				</f:if>
				<f:if condition="{settings.showDescription} && {feedItem.description}">
					<span class="sg-video__description">
						<f:if condition="{descChars}">
							<f:then>
								<f:format.nl2br><f:format.crop maxCharacters="{descChars}" respectWordBoundaries="1" append="..."><f:format.raw>{feedItem.description}</f:format.raw></f:format.crop></f:format.nl2br>
							</f:then>
							<f:else>
								<f:format.nl2br><f:format.raw>{feedItem.description}</f:format.raw></f:format.nl2br>
							</f:else>
						</f:if>
					</span>
				</f:if>
				<f:if condition="{settings.layout} == 'rows'">
					<f:render section="readMoreButton" />
				</f:if>
			</div>
			<f:if condition="{settings.showDescription} && {settings.layout} == 'default'">
				<f:render section="readMoreButton" />
			</f:if>
		</f:if>
	</div>
</f:section>

<f:section name="readMoreButton">
	<button type="button" class="sg-video__read-more"
			data-button-open-text="{f:translate(key: 'frontend.readMore', extensionName: 'sg_vimeo')}"
			data-button-close-text="{f:translate(key: 'frontend.readLess', extensionName: 'sg_vimeo')}"><span class="sg-video__read-more-text">{f:translate(key: 'frontend.readMore', extensionName: 'sg_vimeo')}</span>
		<vi:renderSvg color="currentColor" name="solid-chevron-down" class="sg-video__read-more-arrow"></vi:renderSvg>
	</button>
</f:section>