604 lines
23 KiB
HTML
604 lines
23 KiB
HTML
<!DOCTYPE html>
|
|
<html id="XF" lang="{$xf.language.language_code}" dir="{$xf.language.text_direction}"
|
|
data-xf="{$xf.versionVisible}"
|
|
data-app="public"
|
|
{{ ($xf.style.isVariationsEnabled() && $xf.visitor.style_variation) ? 'data-variation="' . $xf.visitor.style_variation . '"' : '' }}
|
|
{{ ($xf.style.isVariationsEnabled() && $xf.visitor.style_variation) ? 'data-color-scheme="' . property_variation('styleType', $xf.visitor.style_variation) . '"' : '' }}
|
|
data-template="{$template}"
|
|
data-container-key="{$containerKey}"
|
|
data-content-key="{$contentKey}"
|
|
data-logged-in="{{ $xf.visitor.user_id ? 'true' : 'false' }}"
|
|
data-cookie-prefix="{$xf.cookie.prefix}"
|
|
data-csrf="{{ csrf_token()|escape('js') }}"
|
|
class="has-no-js {{ $template ? 'template-' . $template : '' }} {{ $xf.visitor.style_variation === 'alternate' ? '$light-mode' : '' }}"
|
|
{{ $xf.runJobs ? ' data-run-jobs=""' : '' }}>
|
|
<head>
|
|
<xf:set var="$siteName" value="{$xf.options.boardTitle}" />
|
|
<xf:set var="$h1"><xf:h1 fallback="{$siteName}" /></xf:set>
|
|
<xf:set var="$description"><xf:description /></xf:set>
|
|
|
|
<meta charset="utf-8" />
|
|
<title><xf:title formatter="%s | %s" fallback="{$xf.options.boardTitle}" page="{$pageNumber}" /></title>
|
|
<link rel="manifest" href="{{ base_url('webmanifest.php') }}">
|
|
|
|
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
|
|
|
|
<xf:if is="$xf.style.isVariationsEnabled()">
|
|
<xf:if is="$xf.visitor.style_variation">
|
|
<meta name="theme-color" content="{{ parse_less_color(property_variation('metaThemeColor', $xf.visitor.style_variation)) }}" />
|
|
<xf:else />
|
|
<xf:if is="$xf.style.hasAlternateStyleTypeVariation()">
|
|
<meta name="theme-color" media="(prefers-color-scheme: {{ $xf.style.getDefaultStyleType() }})" content="{{ parse_less_color(property_variation('metaThemeColor', 'default')) }}" />
|
|
<meta name="theme-color" media="(prefers-color-scheme: {{ $xf.style.getAlternateStyleType() }})" content="{{ parse_less_color(property_variation('metaThemeColor', $xf.style.getAlternateStyleTypeVariation())) }}" />
|
|
<xf:else />
|
|
<meta name="theme-color" content="{{ parse_less_color(property_variation('metaThemeColor', 'default')) }}" />
|
|
</xf:if>
|
|
</xf:if>
|
|
<xf:else />
|
|
<meta name="theme-color" content="{{ parse_less_color(property_variation('metaThemeColor', 'default')) }}" />
|
|
</xf:if>
|
|
|
|
<meta name="apple-mobile-web-app-title" content="{{ $xf.options.boardShortTitle ?: $xf.options.boardTitle }}">
|
|
<xf:if is="property('publicIconUrl')">
|
|
<link rel="apple-touch-icon" href="{{ base_url(property('publicIconUrl', true)) }}">
|
|
<xf:elseif is="property('publicMetadataLogoUrl')" />
|
|
<link rel="apple-touch-icon" href="{{ base_url(property('publicMetadataLogoUrl')) }}" />
|
|
</xf:if>
|
|
|
|
<xf:foreach loop="$head" value="$headTag">
|
|
{$headTag}
|
|
</xf:foreach>
|
|
|
|
<xf:if is="!$head.meta_site_name && $siteName is not empty">
|
|
<xf:macro id="metadata_macros::site_name" arg-siteName="{$siteName}" arg-output="{{ true }}" />
|
|
</xf:if>
|
|
<xf:if is="!$head.meta_type">
|
|
<xf:macro id="metadata_macros::type" arg-type="website" arg-output="{{ true }}" />
|
|
</xf:if>
|
|
<xf:if is="!$head.meta_title">
|
|
<xf:macro id="metadata_macros::title" arg-title="{{ page_title() ?: $siteName }}" arg-output="{{ true }}" />
|
|
</xf:if>
|
|
<xf:if is="!$head.meta_description && $description is not empty && $pageDescriptionMeta">
|
|
<xf:macro id="metadata_macros::description" arg-description="{$description}" arg-output="{{ true }}" />
|
|
</xf:if>
|
|
<xf:if is="!$head.meta_share_url">
|
|
<xf:macro id="metadata_macros::share_url" arg-shareUrl="{$xf.fullUri}" arg-output="{{ true }}" />
|
|
</xf:if>
|
|
<xf:if is="!$head.meta_image_url && property('publicMetadataLogoUrl')">
|
|
<xf:macro id="metadata_macros::image_url"
|
|
arg-imageUrl="{{ base_url(property('publicMetadataLogoUrl'), true) }}"
|
|
arg-output="{{ true }}" />
|
|
</xf:if>
|
|
|
|
<xf:macro id="helper_js_global::head" arg-app="public" arg-jsState="{$jsState}" />
|
|
|
|
<xf:if is="property('publicFaviconUrl')">
|
|
<link rel="icon" type="image/png" href="{{ base_url(property('publicFaviconUrl'), true) }}" sizes="32x32" />
|
|
</xf:if>
|
|
|
|
<xf:include template="google_analytics" />
|
|
<xf:include template="romhackplaza_css" />
|
|
</head>
|
|
<body data-template="{$template}">
|
|
|
|
<main id="app">
|
|
<nav id="menu">
|
|
<div class="$menu-header">
|
|
<div class="$menu-logo">
|
|
RP
|
|
</div>
|
|
<div class="$menu-title">
|
|
Romhack Plaza
|
|
</div>
|
|
</div>
|
|
<div class="$menu-navigation">
|
|
|
|
|
|
<div class="$menu-group">
|
|
<xf:foreach loop="$navTree" key="$navSection" value="$navEntry" i="$i" if="{{ $navSection != $xf.app.defaultNavigationId }}">
|
|
<div class="$menu-group-title">{{ $navEntry.title }}</div>
|
|
<xf:foreach loop="$navEntry.children" key="$childNavId" value="$childNavEntry" i="$j">
|
|
<a href="{{ $childNavEntry.href }}" class="$menu-item" >
|
|
<i data-lucide="{{ $childNavEntry.attributes.icon}}"></i><span>{{ $childNavEntry.title }}</span>
|
|
</a>
|
|
</xf:foreach>
|
|
</xf:foreach>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="$menu-user">
|
|
<div class="$menu-user-avatar $xf-menu-user-avatar-fix">
|
|
<xf:avatar user="{$xf.visitor}" size="s" canonical="true" />
|
|
</div>
|
|
<div class="$menu-user-info">
|
|
<span class="$username">
|
|
<xf:username user="{$xf.visitor}" rich="true" defaultname="Guest" />
|
|
</span>
|
|
<span class="$user_role">
|
|
<xf:if is="$xf.visitor.user_id">
|
|
<a href="{{ link('logout', null, {'t': csrf_token()}) }}">
|
|
{{ phrase('logout') }}
|
|
</a>
|
|
<xf:else />
|
|
<a href="{{ link('login') }}">
|
|
{{ phrase('login') }}
|
|
</a>
|
|
</xf:if>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
|
|
<div class="offCanvasMenu offCanvasMenu--nav js-headerOffCanvasMenu" data-menu="menu" aria-hidden="true" data-ocm-builder="navigation">
|
|
<div class="offCanvasMenu-backdrop" data-menu-close="true"></div>
|
|
<div class="offCanvasMenu-content">
|
|
<div class="offCanvasMenu-header">
|
|
{{ phrase('menu') }}
|
|
<a class="offCanvasMenu-closer" data-menu-close="true" role="button" tabindex="0" aria-label="{{ phrase('close')|for_attr }}"></a>
|
|
</div>
|
|
<xf:if is="$xf.visitor.user_id">
|
|
<div class="p-offCanvasAccountLink">
|
|
<div class="offCanvasMenu-linkHolder">
|
|
<a href="{{ link('account') }}" class="offCanvasMenu-link">
|
|
<xf:avatar user="$xf.visitor" size="xxs" href="" />
|
|
{$xf.visitor.username}
|
|
</a>
|
|
</div>
|
|
<hr class="offCanvasMenu-separator" />
|
|
</div>
|
|
<xf:else />
|
|
<div class="p-offCanvasRegisterLink">
|
|
<div class="offCanvasMenu-linkHolder">
|
|
<a href="{{ link('login') }}" class="offCanvasMenu-link" data-xf-click="overlay" data-menu-close="true">
|
|
{{ phrase('log_in') }}
|
|
</a>
|
|
</div>
|
|
<hr class="offCanvasMenu-separator" />
|
|
<xf:if is="$xf.options.registrationSetup.enabled">
|
|
<div class="offCanvasMenu-linkHolder">
|
|
<a href="{{ link('register') }}" class="offCanvasMenu-link" data-xf-click="overlay" data-menu-close="true">
|
|
{{ phrase('register') }}
|
|
</a>
|
|
</div>
|
|
<hr class="offCanvasMenu-separator" />
|
|
</xf:if>
|
|
</div>
|
|
</xf:if>
|
|
<div class="js-offCanvasNavTarget"></div>
|
|
<div class="offCanvasMenu-installBanner js-installPromptContainer" style="display: none;" data-xf-init="install-prompt">
|
|
<div class="offCanvasMenu-installBanner-header">{{ phrase('install_app') }}</div>
|
|
<xf:button class="js-installPromptButton">{{ phrase('install') }}</xf:button>
|
|
<template class="js-installTemplateIOS">
|
|
<div class="js-installTemplateContent">
|
|
<div class="overlay-title">{{ phrase('how_to_install_app_on_ios') }}</div>
|
|
<div class="block-body">
|
|
<div class="block-row">
|
|
<p>
|
|
{{ phrase('follow_along_with_video_below_to_see_how_to_install_our_site_as_web_app') }}
|
|
</p>
|
|
<p style="text-align: center">
|
|
<video src="{{ base_url(property('publicPwaInstallVideoUrl')) }}"
|
|
width="280" height="480" autoplay loop muted playsinline></video>
|
|
</p>
|
|
<p>
|
|
<small><strong>{{ phrase('note:') }}</strong> {{ phrase('this_feature_currently_may_not_be_available_in_some_browsers') }}</small>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<main id="main-wrapper">
|
|
<header id="topbar">
|
|
<button class="$mobile-toggle">
|
|
<i data-lucide="menu"></i>
|
|
</button>
|
|
|
|
<div class="$search-bar">
|
|
<i data-lucide="search" size="18" color="var(--text2)"></i>
|
|
<input type="text" placeholder="Search...">
|
|
</div>
|
|
|
|
<xf:include template="topbar_actions" />
|
|
</header>
|
|
<div id="content">
|
|
<!--XF:EXTRA_OUTPUT-->
|
|
|
|
<xf:if is="$notices.block">
|
|
<xf:macro id="notice_macros::notice_list" arg-type="block" arg-notices="{$notices.block}" />
|
|
</xf:if>
|
|
|
|
<xf:if is="$notices.scrolling">
|
|
<xf:macro id="notice_macros::notice_list" arg-type="scrolling" arg-notices="{$notices.scrolling}" />
|
|
</xf:if>
|
|
|
|
<xf:ad position="container_breadcrumb_top_above" />
|
|
<xf:macro id="breadcrumbs"
|
|
arg-breadcrumbs="{$breadcrumbs}"
|
|
arg-navTree="{$navTree}"
|
|
arg-selectedNavEntry="{$selectedNavEntry}" />
|
|
<xf:ad position="container_breadcrumb_top_below" />
|
|
|
|
<xf:macro id="browser_warning_macros::javascript"/>
|
|
<xf:macro id="browser_warning_macros::browser"/>
|
|
|
|
<xf:if is="$headerHtml is not empty">
|
|
<div class="p-body-header">
|
|
{$headerHtml|raw}
|
|
</div>
|
|
<xf:elseif contentcheck="true" />
|
|
<div class="p-body-header">
|
|
<xf:contentcheck>
|
|
<xf:if contentcheck="true">
|
|
<div class="p-title {{ $noH1 ? 'p-title--noH1' : '' }}">
|
|
<xf:contentcheck>
|
|
<xf:if is="!$noH1">
|
|
<h1 class="p-title-value">{$h1}</h1>
|
|
</xf:if>
|
|
<xf:if contentcheck="true">
|
|
<div class="p-title-pageAction"><xf:contentcheck><xf:pageaction /></xf:contentcheck></div>
|
|
</xf:if>
|
|
</xf:contentcheck>
|
|
</div>
|
|
</xf:if>
|
|
|
|
<xf:if is="$description is not empty">
|
|
<div class="p-description">{$description}</div>
|
|
</xf:if>
|
|
</xf:contentcheck>
|
|
</div>
|
|
</xf:if>
|
|
|
|
<div class="p-body-main {{ $sidebar ? 'p-body-main--withSidebar' : '' }} {{ $sideNav ? 'p-body-main--withSideNav' : '' }}">
|
|
<xf:if is="$sideNav">
|
|
<div class="p-body-sideNavCol"></div>
|
|
</xf:if>
|
|
<div class="p-body-contentCol"></div>
|
|
<xf:if is="$sidebar">
|
|
<div class="p-body-sidebarCol"></div>
|
|
</xf:if>
|
|
|
|
<xf:if is="$sideNav">
|
|
<div class="p-body-sideNav">
|
|
<div class="p-body-sideNavTrigger">
|
|
<xf:button class="button--link" data-xf-click="off-canvas" data-menu="#js-SideNavOcm">
|
|
{{ $sideNavTitle ?: phrase('navigation') }}
|
|
</xf:button>
|
|
</div>
|
|
<div class="p-body-sideNavInner" data-ocm-class="offCanvasMenu offCanvasMenu--blocks" id="js-SideNavOcm" data-ocm-builder="sideNav">
|
|
<div data-ocm-class="offCanvasMenu-backdrop" data-menu-close="true"></div>
|
|
<div data-ocm-class="offCanvasMenu-content">
|
|
<div class="p-body-sideNavContent">
|
|
<xf:ad position="container_sidenav_above" />
|
|
<xf:foreach loop="$sideNav" value="$sideNavHtml">
|
|
{$sideNavHtml}
|
|
</xf:foreach>
|
|
<xf:ad position="container_sidenav_below" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</xf:if>
|
|
|
|
<div class="p-body-content">
|
|
<xf:ad position="container_content_above" />
|
|
<div class="p-body-pageContent">{$content|raw}</div>
|
|
<xf:ad position="container_content_below" />
|
|
</div>
|
|
|
|
<xf:if is="$sidebar">
|
|
<div class="p-body-sidebar">
|
|
<xf:ad position="container_sidebar_above" />
|
|
<xf:foreach loop="$sidebar" value="$sidebarHtml">
|
|
{$sidebarHtml}
|
|
</xf:foreach>
|
|
<xf:ad position="container_sidebar_below" />
|
|
</div>
|
|
</xf:if>
|
|
</div>
|
|
|
|
<xf:ad position="container_breadcrumb_bottom_above" />
|
|
<xf:macro id="breadcrumbs"
|
|
arg-breadcrumbs="{$breadcrumbs}"
|
|
arg-navTree="{$navTree}"
|
|
arg-selectedNavEntry="{$selectedNavEntry}"
|
|
arg-variant="bottom" />
|
|
<xf:ad position="container_breadcrumb_bottom_below" />
|
|
</div>
|
|
<div class="u-bottomFixer js-bottomFixTarget">
|
|
<xf:if is="$notices.floating">
|
|
<xf:macro id="notice_macros::notice_list" arg-type="floating" arg-notices="{$notices.floating}" />
|
|
</xf:if>
|
|
<xf:if is="$notices.bottom_fixer">
|
|
<xf:macro id="notice_macros::notice_list" arg-type="bottom_fixer" arg-notices="{$notices.bottom_fixer}" />
|
|
</xf:if>
|
|
</div>
|
|
</main>
|
|
|
|
<xf:comment>
|
|
<footer class="p-footer" id="footer">
|
|
<div class="p-footer-inner">
|
|
|
|
<div class="p-footer-row">
|
|
<xf:if contentcheck="true">
|
|
<div class="p-footer-row-main">
|
|
<ul class="p-footer-linkList">
|
|
<xf:contentcheck>
|
|
<xf:if is="$xf.cookieConsent.getMode() == 'advanced'">
|
|
<li><a href="{{ link('misc/cookies') }}" rel="nofollow"
|
|
data-xf-init="tooltip" title="{{ phrase('cookie_consent')|for_attr }}"
|
|
data-xf-click="cookie-consent-toggle">
|
|
<xf:fa icon="fa-cookie" /> {{ phrase('cookie_consent_label') }}
|
|
</a></li>
|
|
</xf:if>
|
|
<xf:if contentcheck="true">
|
|
<li>
|
|
<xf:contentcheck>
|
|
<xf:if is="$xf.visitor.canChangeStyle()">
|
|
<a href="{{ link('misc/style') }}" data-xf-click="overlay"
|
|
data-xf-init="tooltip" title="{{ phrase('style_chooser')|for_attr }}" rel="nofollow">
|
|
<xf:fa icon="fa-paint-brush" /> {$xf.style.title}
|
|
</a>
|
|
</xf:if>
|
|
<xf:if is="$xf.visitor.canChangeStyleVariation($xf.style)">
|
|
<a href="{{ link('misc/style-variation') }}" rel="nofollow"
|
|
class="js-styleVariationsLink"
|
|
data-xf-init="tooltip" title="{{ phrase('style_variation') }}"
|
|
data-xf-click="menu" data-z-index-ref=".u-bottomFixer" role="button" aria-expanded="false" aria-haspopup="true">
|
|
|
|
<xf:fa icon="{{ $xf.style.getVariationIcon($xf.visitor.style_variation) }}" title="{{ phrase('style_variation') }}" />
|
|
</a>
|
|
|
|
<div class="menu" data-menu="menu" aria-hidden="true">
|
|
<div class="menu-content js-styleVariationsMenu">
|
|
<xf:macro name="style_variation_macros::variation_menu"
|
|
arg-style="{$xf.style}"
|
|
arg-live="{{ true }}" />
|
|
</div>
|
|
</div>
|
|
</xf:if>
|
|
</xf:contentcheck>
|
|
</li>
|
|
</xf:if>
|
|
<xf:if is="$xf.visitor.canChangeLanguage()">
|
|
<li><a href="{{ link('misc/language') }}" data-xf-click="overlay"
|
|
data-xf-init="tooltip" title="{{ phrase('language_chooser')|for_attr }}" rel="nofollow">
|
|
<xf:fa icon="fa-globe" /> {$xf.language.title}</a></li>
|
|
</xf:if>
|
|
</xf:contentcheck>
|
|
</ul>
|
|
</div>
|
|
</xf:if>
|
|
<div class="p-footer-row-opposite">
|
|
<ul class="p-footer-linkList">
|
|
<xf:if is="$xf.visitor.canUseContactForm()">
|
|
<xf:if is="$xf.contactUrl">
|
|
<li><a href="{$xf.contactUrl}" data-xf-click="{{ ($xf.options.contactUrl.overlay OR $xf.options.contactUrl.type == 'default') ? 'overlay' : '' }}">{{ phrase('contact_us') }}</a></li>
|
|
</xf:if>
|
|
</xf:if>
|
|
|
|
<xf:if is="$xf.tosUrl">
|
|
<li><a href="{$xf.tosUrl}">{{ phrase('terms_and_rules') }}</a></li>
|
|
</xf:if>
|
|
|
|
<xf:if is="$xf.privacyPolicyUrl">
|
|
<li><a href="{$xf.privacyPolicyUrl}">{{ phrase('privacy_policy') }}</a></li>
|
|
</xf:if>
|
|
|
|
<xf:if is="$xf.helpPageCount">
|
|
<li><a href="{{ link('help') }}">{{ phrase('help') }}</a></li>
|
|
</xf:if>
|
|
|
|
<xf:if is="$xf.homePageUrl">
|
|
<li><a href="{$xf.homePageUrl}">{{ phrase('home') }}</a></li>
|
|
</xf:if>
|
|
|
|
<li><a href="{{ link('forums/index.rss', '-') }}" target="_blank" class="p-footer-rssLink" title="{{ phrase('rss')|for_attr }}"><span aria-hidden="true"><xf:fa icon="fa-rss" /><span class="u-srOnly">{{ phrase('rss') }}</span></span></a></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<xf:if contentcheck="true">
|
|
<div class="p-footer-copyright">
|
|
<xf:contentcheck>
|
|
<xf:copyright />
|
|
{{ phrase('extra_copyright') }}
|
|
</xf:contentcheck>
|
|
</div>
|
|
</xf:if>
|
|
|
|
<xf:if contentcheck="true">
|
|
<div class="p-footer-debug">
|
|
<xf:contentcheck>
|
|
<xf:macro id="debug_macros::debug"
|
|
arg-controller="{$controller}"
|
|
arg-action="{$actionMethod}"
|
|
arg-template="{$template}" />
|
|
</xf:contentcheck>
|
|
</div>
|
|
</xf:if>
|
|
</div>
|
|
</footer>
|
|
</xf:comment>
|
|
</main> <!-- closing p-pageWrapper -->
|
|
|
|
<div class="u-navButtons js-navButtons">
|
|
<xf:button href="javascript:" class="button--scroll"><xf:fa icon="{{ $xf.isRtl ? 'fa-arrow-right' : 'fa-arrow-left' }}" /><span class="u-srOnly">{{ phrase('back') }}</span></xf:button>
|
|
</div>
|
|
|
|
<xf:if is="property('scrollJumpButtons')">
|
|
<div class="u-scrollButtons js-scrollButtons" data-trigger-type="{{ property('scrollJumpButtons') }}">
|
|
<xf:button href="#top" class="button--scroll" data-xf-click="scroll-to"><xf:fa icon="fa-arrow-up" /><span class="u-srOnly">{{ phrase('top') }}</span></xf:button>
|
|
<xf:if is="property('scrollJumpButtons') != 'up'">
|
|
<xf:button href="#footer" class="button--scroll" data-xf-click="scroll-to"><xf:fa icon="fa-arrow-down" /><span class="u-srOnly">{{ phrase('bottom') }}</span></xf:button>
|
|
</xf:if>
|
|
</div>
|
|
</xf:if>
|
|
|
|
<xf:macro id="helper_js_global::body" arg-app="public" />
|
|
|
|
<xf:if is="count($xf.reactionsActive) > 1 AND $xf.visitor.user_id">
|
|
<script type="text/template" id="xfReactTooltipTemplate">
|
|
<div class="tooltip-content-inner">
|
|
<div class="reactTooltip">
|
|
<xf:foreach loop="$xf.reactionsActive" key="$reactionId" value="$reaction">
|
|
<xf:reaction id="{$reactionId}" tooltip="true" />
|
|
</xf:foreach>
|
|
</div>
|
|
</div>
|
|
</script>
|
|
</xf:if>
|
|
|
|
{$ldJsonHtml|raw}
|
|
|
|
<xf:include template="romhackplaza_js" />
|
|
|
|
</body>
|
|
</html>
|
|
|
|
<xf:macro id="nav_entry" arg-navId="!" arg-nav="!" arg-selected="{{ false }}" arg-shortcut="">
|
|
<div class="p-navEl {{ $selected ? 'is-selected' : '' }}" {{ $nav.children ? 'data-has-children="true"' : '' }}>
|
|
<xf:if is="$nav.href">
|
|
|
|
<xf:macro id="nav_link"
|
|
arg-navId="{$navId}"
|
|
arg-nav="{$nav}"
|
|
arg-class="p-navEl-link {{ $nav.children ? 'p-navEl-link--splitMenu' : '' }}"
|
|
arg-shortcut="{{ $nav.children ? false : $shortcut }}" />
|
|
|
|
<xf:if is="$nav.children"><a data-xf-key="{$shortcut}"
|
|
data-xf-click="menu"
|
|
data-menu-pos-ref="< .p-navEl"
|
|
class="p-navEl-splitTrigger"
|
|
role="button"
|
|
tabindex="0"
|
|
aria-label="{{ phrase('toggle_expanded')|for_attr }}"
|
|
aria-expanded="false"
|
|
aria-haspopup="true"></a></xf:if>
|
|
|
|
<xf:elseif is="$nav.children" />
|
|
|
|
<xf:if is="$selected">
|
|
<xf:macro id="nav_link"
|
|
arg-navId="{$navId}"
|
|
arg-nav="{$nav}"
|
|
arg-class="p-navEl-link" />
|
|
<xf:else />
|
|
<a data-xf-key="{$shortcut}"
|
|
data-xf-click="menu"
|
|
data-menu-pos-ref="< .p-navEl"
|
|
class="p-navEl-linkHolder"
|
|
role="button"
|
|
tabindex="0"
|
|
aria-expanded="false"
|
|
aria-haspopup="true">
|
|
<xf:macro id="nav_link"
|
|
arg-navId="{$navId}"
|
|
arg-nav="{$nav}"
|
|
arg-class="p-navEl-link p-navEl-link--menuTrigger" />
|
|
</a>
|
|
</xf:if>
|
|
|
|
<xf:else />
|
|
|
|
<xf:macro id="nav_link"
|
|
arg-navId="{$navId}"
|
|
arg-nav="{$nav}"
|
|
arg-class="p-navEl-link"
|
|
arg-shortcut="{$shortcut}" />
|
|
|
|
</xf:if>
|
|
<xf:if is="$nav.children">
|
|
<div class="menu menu--structural" data-menu="menu" aria-hidden="true">
|
|
<div class="menu-content">
|
|
<xf:foreach loop="$nav.children" key="$childNavId" value="$child">
|
|
<xf:macro id="nav_menu_entry"
|
|
arg-navId="{$childNavId}"
|
|
arg-nav="{$child}" />
|
|
</xf:foreach>
|
|
</div>
|
|
</div>
|
|
</xf:if>
|
|
</div>
|
|
</xf:macro>
|
|
|
|
<xf:macro id="nav_link" arg-navId="!" arg-nav="!" arg-class="" arg-titleHtml="" arg-shortcut="{{ false }}">
|
|
<xf:set var="$tag" value="{{ $nav.href ? 'a' : 'span' }}" />
|
|
<{$tag} {{ $nav.href ? 'href="' . $nav.href . '"' : '' }}
|
|
class="{{ trim($class) }} {$nav.attributes.class}"
|
|
{{ attributes($nav.attributes, ['class']) }}
|
|
{{ $shortcut !== false ? 'data-xf-key="' . $shortcut . '"' : '' }}
|
|
data-nav-id="{$navId}"><xf:if is="$nav.icon"><xf:fa icon="{$nav.icon}" /> </xf:if>{{ $titleHtml ? $titleHtml|raw : $nav.title }}<xf:if is="$nav.counter"> <span class="badge badge--highlighted">{$nav.counter|number}</span></xf:if></{$tag}>
|
|
</xf:macro>
|
|
|
|
<xf:macro id="nav_menu_entry" arg-navId="!" arg-nav="!" arg-depth="0">
|
|
<xf:macro id="nav_link"
|
|
arg-navId="{$navId}"
|
|
arg-nav="{$nav}"
|
|
arg-class="menu-linkRow u-indentDepth{$depth} js-offCanvasCopy" />
|
|
<xf:if is="$nav.children">
|
|
<xf:foreach loop="$nav.children" key="$childNavId" value="$child">
|
|
<xf:macro id="nav_menu_entry"
|
|
arg-navId="{$childNavId}"
|
|
arg-nav="{$child}"
|
|
arg-depth="{{ $depth + 1 }}" />
|
|
</xf:foreach>
|
|
<xf:if is="$depth == 0">
|
|
<hr class="menu-separator" />
|
|
</xf:if>
|
|
</xf:if>
|
|
</xf:macro>
|
|
|
|
<xf:macro id="breadcrumbs" arg-breadcrumbs="!" arg-navTree="!" arg-selectedNavEntry="{{ null }}" arg-variant="">
|
|
<xf:if contentcheck="true">
|
|
<ul class="p-breadcrumbs {{ $variant ? 'p-breadcrumbs--' . $variant : '' }}"
|
|
itemscope itemtype="https://schema.org/BreadcrumbList">
|
|
<xf:contentcheck>
|
|
<xf:set var="$position" value="{{ 0 }}" />
|
|
|
|
<xf:set var="$rootBreadcrumb" value="{$navTree.{$xf.options.rootBreadcrumb}}" />
|
|
<xf:set var="$rootBreadcrumbHref" value="{{ $rootBreadcrumb.href|substr(-1) == '/'
|
|
? $rootBreadcrumb.href
|
|
: $rootBreadcrumb.href . '/'
|
|
}}" />
|
|
|
|
<xf:if is="$rootBreadcrumb AND $rootBreadcrumbHref != $xf.uri AND $rootBreadcrumbHref != $xf.fullUri">
|
|
<xf:set var="$position" value="{{ $position + 1 }}" />
|
|
<xf:macro id="crumb"
|
|
arg-position="{$position}"
|
|
arg-href="{$rootBreadcrumb.href}"
|
|
arg-value="{$rootBreadcrumb.title}" />
|
|
</xf:if>
|
|
|
|
<xf:if is="$selectedNavEntry AND $selectedNavEntry.href AND $selectedNavEntry.href != $xf.uri AND $selectedNavEntry.href != $xf.fullUri AND $selectedNavEntry.href != $rootBreadcrumbHref">
|
|
<xf:set var="$position" value="{{ $position + 1 }}" />
|
|
<xf:macro id="crumb"
|
|
arg-position="{$position}"
|
|
arg-href="{$selectedNavEntry.href}"
|
|
arg-value="{$selectedNavEntry.title}" />
|
|
</xf:if>
|
|
<xf:foreach loop="$breadcrumbs" value="$breadcrumb" if="$breadcrumb.href != $xf.uri AND $breadcrumb.href != $xf.fullUri">
|
|
<xf:set var="$position" value="{{ $position + 1 }}" />
|
|
<xf:macro id="crumb"
|
|
arg-position="{$position}"
|
|
arg-href="{$breadcrumb.href}"
|
|
arg-value="{$breadcrumb.value}" />
|
|
</xf:foreach>
|
|
</xf:contentcheck>
|
|
</ul>
|
|
</xf:if>
|
|
</xf:macro>
|
|
|
|
<xf:macro id="crumb" arg-href="!" arg-value="!" arg-position="{{ 0 }}">
|
|
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
|
|
<a href="{$href}" itemprop="item">
|
|
<span itemprop="name">{$value}</span>
|
|
</a>
|
|
<xf:if is="$position"><meta itemprop="position" content="{$position}" /></xf:if>
|
|
</li>
|
|
</xf:macro> |