{# @copyright Copyright (C) 2010-2024 Combodo SAS #} {# @license http://opensource.org/licenses/AGPL-3.0 #} {# This block can be used to add your own meta tags by extending the default template #} {% block iboPageExtraMetas %} {% endblock %} {% if aPage.aMetadata.sBaseUrl is defined or aPage.aMetadata.sBaseTarget is defined %} {% endif %} {{ aPage.sTitle }} {% if aPage.sFaviconUrl is defined %} {% endif %} {# Main fonts have to be preloaded to avoid blocking content rendering #} {% for aPreloadedFont in aPage.aPreloadedFonts %} {% endfor %} {# Stylesheets MUST be loaded before any scripts otherwise we may face problems such as - Visual glitches - jQuery scripts spurious problems (like failing on a 'reload') #} {% block iboPageCssFiles %} {% for aCssFileData in aPage.aCssFiles %} {# Mind that CSS files are registered in a JS variable below (@see aLoadedCssFilesRegister), to ensure that a file isn't loaded twice through an async call #} {% if aCssFileData['condition'] != '' %}{% endif %} {% endfor %} {% endblock %} {% block iboPageCssInline %} {# We put each styles in a dedicated style tag to prevent massive failure if 1 style is broken (eg. missing semi-colon, bracket, ...) #} {% for sCssInline in aPage.aCssInline %} {% endfor %} {% endblock %} {% block iboPageJsInlineEarly %} {% for sJsInline in aPage.aJsInlineEarly %} {# We put each scripts in a dedicated script tag to prevent massive failure if 1 script is broken (eg. missing semi-colon or non closed multi-line comment) #} {% endfor %} {% endblock %} {% if aPage.isPrintable %}
{% endif %} {% block iboPageBodyHtml %}
{{ render_block(oLayout, {aPage: aPage}) }}
{% endblock %} {% if aPage.isPrintable %}
{% endif %} {% block iboDeferredBlocks %} {% for oBlock in aDeferredBlocks %} {{ render_block(oBlock, {aPage: aPage}) }} {% endfor %} {% endblock %} {% block iboPageTemplates %} {% endblock %} {# CSS files can either be loaded initially or requested by an XHR response #} {# In order to ensure that a file isn't loaded twice, we register them here so async calls can check if they to load their dependencies or not #} {# Note that unlike for the JS files, we don't need to use promises, as we don't need them to wait for the previous one to be loaded #} {# (Having a CSS loaded again can lead to rule overloads being reverted) #} {# JS files can either be loaded initially or requested by an XHR response #} {# - For the initial page, all files are loaded before running inline snippets #} {# - For XHR responses, we need to ensure that all required files are fully loaded before running inline snippets #} {% block iboPageJsFiles %} {% for sJsFile in aPage.aJsFiles %} {% endfor %} {% endblock %} {% block iboPageJsInlineScripts %} {% if aPage.aJsInlineOnInit is not empty or aPage.aJsInlineOnDomReady is not empty %} {% endif %} {% block iboPageJsInlineLive %} {% for sJsInline in aPage.aJsInlineLive %} {# We put each scripts in a dedicated script tag to prevent massive failure if 1 script is broken (eg. missing semi-colon or non closed multi-line comment) #} {% endfor %} {% endblock %} {% endblock %} {% block iboCapturedOutput %} {{ aPage.sCapturedOutput|raw }} {% endblock %}