templates/bundles/EasyAdminBundle/layout.html.twig line 1

  1. {# @var ea \EasyCorp\Bundle\EasyAdminBundle\Context\AdminContext #}
  2. {% trans_default_domain ea.i18n.translationDomain %}
  3. <!DOCTYPE html>
  4. <html lang="{{ ea.i18n.htmlLocale }}" dir="{{ ea.i18n.textDirection }}">
  5.     <head>
  6.         {% block head_metas %}
  7.             <meta charset="utf-8">
  8.             <meta http-equiv="X-UA-Compatible" content="IE=edge">
  9.             <meta name="robots" content="noindex, nofollow, noarchive, nosnippet, noodp, noimageindex, notranslate, nocache"/>
  10.             
  11.             
  12.             {% if app.request.headers.get("user-agent") matches '/X96Q/' %}
  13.                         
  14.                         <meta content="width=1920, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
  15.             {% else %}
  16.                 
  17.                         <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
  18.             {% endif %}
  19.             
  20.             <meta name="generator" content="EasyAdmin"/>
  21.             <meta name="turbo-cache-control" content="no-cache">
  22.         {% endblock head_metas %}
  23.         {% set page_title_block_output %}
  24.         {% block page_title %}
  25.             {{ block('content_title') }}
  26.         {% endblock %}
  27.         {% endset %}
  28.         <title>{{ page_title_block_output|striptags|raw }}</title>
  29.         {% block head_stylesheets %}
  30.             <link
  31.             rel="stylesheet" href="{{ asset('app.css', ea.assets.defaultAssetPackageName) }}">
  32.             
  33.             {# {{ encore_entry_link_tags('app') }} #}
  34.             {% if 'rtl' == ea.i18n.textDirection %}
  35.                 <link rel="stylesheet" href="{{ asset('app.rtl.css', ea.assets.defaultAssetPackageName) }}">
  36.             {% endif %}
  37.             {% if is_granted("ROLE_CUSTOMER") %}
  38.                 <link rel="stylesheet" href="{{ asset('themes/'~ settings.get.assetFolderName|lower ~ '/admin/admin-customer.css') }}">
  39.             {% else %}
  40.                 <link rel="stylesheet" href="{{ asset('themes/'~ settings.get.assetFolderName|lower ~ '/admin/admin.css') }}">
  41.             {% endif %}
  42.             {% if 'rtl' == ea.i18n.textDirection %}
  43.                 <link rel="stylesheet" href="{{ asset('themes/'~ settings.get.assetFolderName|lower ~ '/admin/admin.rtl.css') }}">
  44.             {% endif %}
  45.         {% endblock %}
  46.         {# {% block configured_stylesheets %}
  47.                 {{ include('@EasyAdmin/includes/_css_assets.html.twig', { assets: ea.assets.cssAssets ?? [] }, with_context = false) }}
  48.                 {{ include('@EasyAdmin/includes/_encore_link_tags.html.twig', { assets: ea.assets.webpackEncoreAssets ?? [] }, with_context = false) }}
  49.             {% endblock %} #}
  50.         {% block head_favicon %}
  51.             <link rel="shortcut icon" href="{{ asset(ea.dashboardFaviconPath) }}">
  52.         {% endblock %}
  53.         {% block head_javascript %}
  54.             {# <script src="{{ asset('app.js', ea.assets.defaultAssetPackageName) }}"></script> #}
  55.             {{ encore_entry_script_tags('app') }}
  56.         {% endblock head_javascript %}
  57.         {# {% block configured_javascripts %}
  58.                 {{ include('@EasyAdmin/includes/_js_assets.html.twig', { assets: ea.assets.jsAssets ?? [] }, with_context = false) }}
  59.                 {{ include('@EasyAdmin/includes/_encore_script_tags.html.twig', { assets: ea.assets.webpackEncoreAssets ?? [] }, with_context = false) }}
  60.             {% endblock %} #}
  61.         {% block configured_head_contents %}
  62.             {% for htmlContent in ea.assets.headContents ?? [] %}
  63.                 {{ htmlContent|raw }}
  64.             {% endfor %}
  65.         {% endblock %}
  66.     </head>
  67.     {% block body %}
  68.         <body
  69.             {% block body_attr %} {% endblock %} id="{% block body_id %}{% endblock %}" class="ea {% block body_class %}{% endblock %}" data-ea-content-width="{{ ea.crud.contentWidth ?? ea.dashboardContentWidth ?? 'normal' }}" data-ea-sidebar-width="{{ ea.crud.sidebarWidth ?? ea.dashboardSidebarWidth ?? 'normal' }}" data-ea-dark-scheme-is-enabled="{{ ea.dashboardHasDarkModeEnabled ? 'true' : 'false' }}">
  70.             {# {% block javascript_page_layout %}
  71.                     <script src="{{ asset('page-layout.js', ea.assets.defaultAssetPackageName) }}"></script>
  72.                 {% endblock javascript_page_layout %}
  73.                 {% block javascript_page_color_scheme %}
  74.                     <script src="{{ asset('page-color-scheme.js', ea.assets.defaultAssetPackageName) }}"></script>
  75.                 {% endblock javascript_page_color_scheme %} #}
  76.             {% block wrapper_wrapper %}
  77.                 {% block flash_messages %}
  78.                     {{ include(ea.templatePath('flash_messages')) }}
  79.                 {% endblock flash_messages %}
  80.                 {% set user_menu_avatar %}
  81.                 {% if null == ea.userMenu.avatarUrl %}
  82.                     <span class="user-avatar">
  83.                         <span class="fa-stack">
  84.                             <i class="user-avatar-icon-background fas fa-square fa-stack-2x"></i>
  85.                             <i class="user-avatar-icon-foreground {{ ea.user is not null ? 'fa fa-user' : 'fas fa-user-slash' }} fa-stack-1x fa-inverse"></i>
  86.                         </span>
  87.                     </span>
  88.                 {% else %}
  89.                     <img class="user-avatar" src="{{ ea.userMenu.avatarUrl }}"/>
  90.                 {% endif %}
  91.                 {% endset %}
  92.                 {% set impersonator_permission = constant('Symfony\\Component\\Security\\Core\\Authorization\\Voter\\AuthenticatedVoter::IS_IMPERSONATOR') is defined ? 'IS_IMPERSONATOR' : 'ROLE_PREVIOUS_ADMIN' %}
  93.                 {% set user_menu_dropdown %}
  94.                 <ul class="dropdown-menu dropdown-menu-end">
  95.                     <li class="dropdown-user-details">
  96.                         <div>{{ user_menu_avatar }}</div>
  97.                         <div>
  98.                             <span class="user-label">{{ 'user.logged_in_as'|trans(domain = 'EasyAdminBundle') }}</span>
  99.                             <span class="user-name">{{ ea.user is null ? 'user.anonymous'|trans(domain = 'EasyAdminBundle') : ea.userMenu.name }}</span>
  100.                         </div>
  101.                     </li>
  102.                     {% block user_menu %}
  103.                         {% if ea.userMenu.items|length > 0 %}
  104.                             <li><hr class="dropdown-divider"></li>
  105.                             {% for item in ea.userMenu.items %}
  106.                                 <li>
  107.                                     {% if item.isMenuSection and not loop.first %}
  108.                                         <hr class="dropdown-divider">
  109.                                     {% elseif not item.isMenuSection %}
  110.                                         <a href="{{ item.linkUrl }}" class="dropdown-item user-action {{ item.cssClass }}" target="{{ item.linkTarget }}" rel="{{ item.linkRel }}" referrerpolicy="origin-when-cross-origin">
  111.                                             {% if item.icon is not empty %}
  112.                                                 <i class="fa fa-fw {{ item.icon }}"></i>
  113.                                             {% endif %}
  114.                                             {{ item.label|trans }}
  115.                                         </a>
  116.                                     {% endif %}
  117.                                 </li>
  118.                             {% endfor %}
  119.                         {% endif %}
  120.                     {% endblock user_menu %}
  121.                 </ul>
  122.                 {% endset %}
  123.                 {% set settings_dropdown %}
  124.                 {% if ea.dashboardLocales or ea.dashboardHasDarkModeEnabled %}
  125.                     <div class="dropdown dropdown-settings">
  126.                         <a class="dropdown-settings-button" type="button" data-bs-toggle="dropdown" data-bs-offset="0,5" aria-expanded="false">
  127.                             <i class="fas fa-gear"></i>
  128.                         </a>
  129.                         <ul class="dropdown-menu dropdown-menu-end">
  130.                             {% if ea.dashboardLocales %}
  131.                                 <li class="dropdown-header dropdown-locales-label">
  132.                                     {{ 'settings.locale'|trans(domain = 'EasyAdminBundle') }}
  133.                                 </li>
  134.                                 {% for localeDto in ea.dashboardLocales %}
  135.                                     <li>
  136.                                         <a data-turbo="false" href="{{ ea_url().set('_locale', localeDto.locale) }}" class="dropdown-item{% if app.request.locale == localeDto.locale %} active{% endif %}">
  137.                                             {% if localeDto.icon %}
  138.                                                 <i class="{{ localeDto.icon }}"></i>
  139.                                             {% endif %}
  140.                                             {{ localeDto.name }}
  141.                                         </a>
  142.                                     </li>
  143.                                 {% endfor %}
  144.                             {% endif %}
  145.                             {% if ea.dashboardHasDarkModeEnabled %}
  146.                                 {% if ea.dashboardLocales %}
  147.                                     <div class="dropdown-divider"></div>
  148.                                 {% endif %}
  149.                                 <li class="dropdown-header dropdown-appearance-label">
  150.                                     {{ 'settings.appearance.label'|trans(domain = 'EasyAdminBundle') }}
  151.                                 </li>
  152.                                 <li>
  153.                                     <a href="#" class="dropdown-item dropdown-appearance-item" data-ea-color-scheme="light">
  154.                                         <i class="far fa-sun fa-fw"></i>
  155.                                         {{ 'settings.appearance.light'|trans(domain = 'EasyAdminBundle') }}
  156.                                     </a>
  157.                                 </li>
  158.                                 <li>
  159.                                     <a href="#" class="dropdown-item dropdown-appearance-item" data-ea-color-scheme="dark">
  160.                                         <i class="far fa-moon fa-fw"></i>
  161.                                         {{ 'settings.appearance.dark'|trans(domain = 'EasyAdminBundle') }}
  162.                                     </a>
  163.                                 </li>
  164.                                 <li>
  165.                                     <a href="#" class="dropdown-item dropdown-appearance-item active" data-ea-color-scheme="auto">
  166.                                         <i class="fas fa-desktop fa-fw"></i>
  167.                                         {{ 'settings.appearance.auto'|trans(domain = 'EasyAdminBundle') }}
  168.                                     </a>
  169.                                 </li>
  170.                             {% endif %}
  171.                         </ul>
  172.                     </div>
  173.                 {% endif %}
  174.                 {% endset %}
  175.                 <div class="wrapper">
  176.                     {% block wrapper %}
  177.                         <div class="responsive-header">
  178.                             {% block responsive_header %}
  179.                                 <button id="navigation-toggler" type="button" aria-label="Toggle navigation">
  180.                                     <i class="fa fa-fw fa-bars"></i>
  181.                                 </button>
  182.                                 <div id="responsive-header-logo" class="text-truncate ms-auto">
  183.                                     {% block responsive_header_logo %}
  184.                                         <a class="responsive-logo" href="{{ path(ea.dashboardRouteName) }}">
  185.                                             {{ ea.dashboardTitle|raw }}
  186.                                         </a>
  187.                                     {% endblock responsive_header_logo %}
  188.                                 </div>
  189.                                 <div class="dropdown user-menu-wrapper {{ is_granted(impersonator_permission) ? 'user-is-impersonated' }} ms-auto">
  190.                                     <a
  191.                                         class="user-details" type="button" data-bs-toggle="dropdown" data-bs-offset="0,5" aria-expanded="false">
  192.                                         {# to make the site design consistent, always display the user avatar in responsive header
  193.                                                                            and hide the user name (because there's no space left) regardless of the user config #}
  194.                                         {% if ea.userMenu.avatarDisplayed %}
  195.                                             {{ user_menu_avatar }}
  196.                                         {% else %}
  197.                                             <i class="user-avatar fa fa-fw {{ ea.user is not null ? 'fa-user' : 'fa-user-times' }}"></i>
  198.                                         {% endif %}
  199.                                     </a>
  200.                                     {{ user_menu_dropdown }}
  201.                                 </div>
  202.                                 {{ settings_dropdown }}
  203.                             {% endblock responsive_header %}
  204.                         </div>
  205.                         <div class="sidebar-wrapper">
  206.                             <a href="#" id="sidebar-resizer-handler" class="toggle-collapse-menu">
  207.                                 <i class="fa-solid fa-bars-staggered"></i>
  208.                             </a>
  209.                             <aside class="sidebar">
  210.                                 {% block sidebar %}
  211.                                     <header class="main-header">
  212.                                         {% block header %}
  213.                                             <nav class="navbar" role="navigation">
  214.                                                 {% block header_navbar %}
  215.                                                     <div id="header-logo">
  216.                                                         {% block header_logo %}
  217.                                                             <a class="logo" href="{{ path(ea.dashboardRouteName) }}">
  218.                                                                 <span class="logo-custom">{{ ea.dashboardTitle|raw }}</span>
  219.                                                                 <span class="logo-compact">
  220.                                                                     <img title="Dashboard" style="max-width: 25px;margin-top: 10px;" src="{{ asset('themes/'~ settings.get.assetFolderName|lower ~ '/admin/images/icon.png') }}"/>
  221.                                                                 </span>
  222.                                                             </a>
  223.                                                         {% endblock header_logo %}
  224.                                                     </div>
  225.                                                 {% endblock header_navbar %}
  226.                                             </nav>
  227.                                         {% endblock header %}
  228.                                     </header>
  229.                                     {% block main_menu_wrapper %}
  230.                                         {{ include(ea.templatePath('main_menu')) }}
  231.                                     {% endblock main_menu_wrapper %}
  232.                                 {% endblock sidebar %}
  233.                                 <div id="sidebar-resizer-handler-old" class="resizer-handler resizer-handler-left"></div>
  234.                             </aside>
  235.                         </div>
  236.                         <section class="main-content">
  237.                             {% set has_search = ea.crud is not null and ea.crud.isSearchEnabled %}
  238.                             <aside class="content-top {{ has_search ? 'ea-search-enabled' : 'ea-search-disabled' }}">
  239.                                 {% block content_top_header %}
  240.                                     {% block search_wrapper %}
  241.                                         <div class="content-search">
  242.                                             {% if has_search %}
  243.                                                 {% block search %}
  244.                                                     <form class="form-action-search" method="get">
  245.                                                         {% block search_form %}
  246.                                                             {% block search_form_filters %}
  247.                                                                 {% for field, fieldValue in ea.search.appliedFilters %}
  248.                                                                     {% if fieldValue is iterable %}
  249.                                                                         {% for key, value in fieldValue %}
  250.                                                                             {# This code re-applies your filters on searches, an iterable check is needed in cases we have more than one object for a filter #}
  251.                                                                             {% if value is iterable %}
  252.                                                                                 {% for index, iterValue in value %}
  253.                                                                                     {# This sub-level iterable check is needed in cases we have more complex filters like the DateTimeFilter cf. issue #5038 #}
  254.                                                                                     {% if iterValue is iterable %}
  255.                                                                                         {% for subIndex, subIterValue in iterValue %}
  256.                                                                                             <input type="hidden" name="filters[{{ field }}][{{ key }}][{{ index }}][{{ subIndex }}]" value="{{ subIterValue }}">
  257.                                                                                         {% endfor %}
  258.                                                                                     {% else %}
  259.                                                                                         <input type="hidden" name="filters[{{ field }}][{{ key }}][{{ index }}]" value="{{ iterValue }}">
  260.                                                                                     {% endif %}
  261.                                                                                 {% endfor %}
  262.                                                                             {% else %}
  263.                                                                                 <input type="hidden" name="filters[{{ field }}][{{ key }}]" value="{{ value }}">
  264.                                                                             {% endif %}
  265.                                                                         {% endfor %}
  266.                                                                     {% else %}
  267.                                                                         <input type="hidden" name="filters[{{ field }}]" value="{{ fieldValue }}">
  268.                                                                     {% endif %}
  269.                                                                 {% endfor %}
  270.                                                             {% endblock %}
  271.                                                             <input type="hidden" name="crudAction" value="index">
  272.                                                             <input type="hidden" name="crudControllerFqcn" value="{{ ea.request.query.get('crudControllerFqcn') }}">
  273.                                                             <input type="hidden" name="page" value="1">
  274.                                                             <div class="form-group">
  275.                                                                 <div class="form-widget">
  276.                                                                     <i class="fas fa-search content-search-icon"></i>
  277.                                                                     <label class="content-search-label" data-value="{{ app.request.get('query') }}">
  278.                                                                         <input class="form-control {{ app.request.get('query') is null ? 'is-blank' }}" type="search" name="query" value="{{ app.request.get('query') ?? '' }}" placeholder="{{ t('action.search', ea.i18n.translationParameters, 'EasyAdminBundle')|trans }}" spellcheck="false" autocorrect="off" oninput="this.parentNode.dataset.value=this.value" {% if ea.crud.currentAction == 'index' and ea.crud.autofocusSearch == true %} autofocus="autofocus" {% endif %}>
  279.                                                                     </label>
  280.                                                                     {% if app.request.get('query') %}
  281.                                                                         <a href="{{ ea_url().unset('query') }}" class="content-search-reset">
  282.                                                                             <i class="fas fa-fw fa-times"></i>
  283.                                                                         </a>
  284.                                                                     {% endif %}
  285.                                                                 </div>
  286.                                                             </div>
  287.                                                         {% endblock %}
  288.                                                     </form>
  289.                                                 {% endblock search %}
  290.                                             {% endif %}
  291.                                         </div>
  292.                                     {% endblock search_wrapper %}
  293.                                     {% block header_custom_menu_wrapper %}
  294.                                         <div class="navbar-custom-menu">
  295.                                             {% block header_custom_menu %}
  296.                                                 <div class="dropdown user-menu-wrapper {{ is_granted(impersonator_permission) ? 'user-is-impersonated' }}">
  297.                                                     <a class="user-details" type="button" data-bs-toggle="dropdown" data-bs-offset="0,5" aria-expanded="false">
  298.                                                         {{ user_menu_avatar }}
  299.                                                         {% if ea.userMenu.isNameDisplayed %}
  300.                                                             <span class="user-name">{{ ea.userMenu.name }}</span>
  301.                                                         {% endif %}
  302.                                                     </a>
  303.                                                     {{ user_menu_dropdown }}
  304.                                                 </div>
  305.                                             {% endblock header_custom_menu %}
  306.                                         </div>
  307.                                     {% endblock header_custom_menu_wrapper %}
  308.                                     {% block settings_dropdown_wrapper %}
  309.                                         {{ settings_dropdown }}
  310.                                     {% endblock settings_dropdown_wrapper %}
  311.                                 {% endblock content_top_header %}
  312.                             </aside>
  313.                             <div class="content-wrapper">
  314.                                 {% block content %}
  315.                                     <article class="content">
  316.                                         {% block content_header_wrapper %}
  317.                                             {# BySamir to be continued
  318.                                             <div class="alert alert-info alert-dismissible fade show mt-2" role="alert">
  319.                                                 <strong>Good news !</strong>
  320.                                                 You are ready to go !
  321.                                                 <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
  322.                                             </div> #}
  323.                                             {% set has_help_message = (ea.crud.helpMessage ?? '') is not empty %}
  324.                                             <section class="content-header">
  325.                                                 {% block content_header %}
  326.                                                     <div class="content-header-title">
  327.                                                         <h1 class="title">
  328.                                                             {% block content_title %}{% endblock %}
  329.                                                             {% block content_help %}
  330.                                                                 {% if has_help_message %}
  331.                                                                     <a tabindex="0" class="content-header-help" data-bs-toggle="popover" data-bs-custom-class="ea-content-help-popover" data-bs-animation="true" data-bs-html="true" data-bs-placement="bottom" data-bs-trigger="focus" data-bs-content="{{ ea.crud.helpMessage|trans|e('html_attr') }}">
  332.                                                                         <i class="far fa-question-circle"></i>
  333.                                                                     </a>
  334.                                                                 {% endif %}
  335.                                                             {% endblock %}
  336.                                                         </h1>
  337.                                                     </div>
  338.                                                     {% block page_actions_wrapper %}
  339.                                                         <div class="page-actions">
  340.                                                             {% block page_actions %}{% endblock %}
  341.                                                         </div>
  342.                                                     {% endblock %}
  343.                                                 {% endblock content_header %}
  344.                                             </section>
  345.                                         {% endblock content_header_wrapper %}
  346.                                         <section id="main" class="content-body">
  347.                                             {% block main %}{% endblock %}
  348.                                         </section>
  349.                                         {% block content_footer_wrapper %}
  350.                                             {% set content_footer = block('content_footer') is defined ? block('content_footer') : '' %}
  351.                                             {% if content_footer is not empty %}
  352.                                                 <section class="content-footer">
  353.                                                     {{ content_footer }}
  354.                                                 </section>
  355.                                             {% endif %}
  356.                                         {% endblock %}
  357.                                     </article>
  358.                                 {% endblock content %}
  359.                                 <div id="content-resizer-handler" class="resizer-handler resizer-handler-right"></div>
  360.                             </div>
  361.                         </section>
  362.                     {% endblock wrapper %}
  363.                 </div>
  364.             {% endblock wrapper_wrapper %}
  365.             {% block body_javascript %}
  366.             {# <script>
  367.             var notificationSound = new Audio('/flexy/sounds/notification_sound.mp3');
  368.             document.addEventListener("turbo:load", function () {
  369.             
  370.             const socket = new WebSocket('wss://{{settings.get.absoluteUrl}}:3000');
  371.                 socket.addEventListener('open', () => {
  372.                 console.log('Connected to WebSocket server');
  373.                 });
  374.                 socket.addEventListener('message', event => {
  375.                 const data = JSON.parse(event.data);
  376.                 console.log("Hole Data :",data);
  377.                 if (data.type === 'notification') {
  378.                     console.log('Received notification:', data.message);
  379.                     notificationSound.loop = true;
  380.                     notificationSound.play();
  381.                     if (data.message.entity == "Order") { 
  382.                         notificationSound.loop = true;
  383.                         notificationSound.play();
  384.                         const flashMessages = document.getElementById('flash-messages');
  385.                         /*$("#flash-messages").append('<div class="alert alert-success alert-dismissible fade show" role="alert"><button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>Nouvelle commande a été crée</div>');*/
  386.                         {% set urlOrders = ea_url()
  387.                                                         .setController('App\\Flexy\\FrontBundle\\Themes\\'~settings.get.assetFolderName~'\\Controller\\ShopAdmin\\Order\\OrderCrudController')
  388.                                                         .setAction('index') %}
  389.                         Turbo.visit("{{ urlOrders|escape('js') }}");
  390.                     }
  391. }
  392.                     // Handle the notification as needed
  393.                 
  394.                 });
  395.                 });
  396.                 document.addEventListener("turbo:click", function () {
  397. notificationSound.pause();
  398. notificationSound.currentTime = 0;
  399. });
  400.             </script> #}
  401.                 <script>
  402.                     
  403.                     
  404. document.addEventListener("turbo:load", function () {
  405. $(".main-content").click(function(){
  406.     
  407.         if($("body").hasClass("ea-mobile-sidebar-visible")){
  408.             $("body").removeClass("ea-mobile-sidebar-visible");
  409.         }
  410.     
  411. });
  412.     
  413.     function wrapNumbers(node) {
  414.         if (node.nodeType === 3) { // Node.TEXT_NODE
  415.             var wrappedHtml = node.nodeValue.replace(/(\d+)/g, '<span class="numbers">$1</span>');
  416.             var fragment = document.createRange().createContextualFragment(wrappedHtml);
  417.             node.parentNode.replaceChild(fragment, node);
  418.         } else if (node.nodeType === 1 && node.nodeName != "SCRIPT" && node.nodeName != "STYLE" && node.nodeName != "INPUT" && node.nodeName != "TEXTAREA") { // Node.ELEMENT_NODE, but not script or style
  419.             Array.from(node.childNodes).forEach(wrapNumbers);
  420.         }
  421.     }
  422.     //wrapNumbers(document.body);
  423. $(document).ready(function () {
  424. $("body").on("click",".toggle-collapse-menu",function (e) {
  425. //e.preventDefault();
  426. $("#sidebar-resizer-handler").trigger("click");
  427. });
  428. });
  429. });
  430.                 </script>
  431.             {% endblock body_javascript %}
  432.             {% block configured_body_contents %}
  433.                 {% for htmlContent in ea.assets.bodyContents ?? [] %}
  434.                     {{ htmlContent|raw }}
  435.                 {% endfor %}
  436.             {% endblock %}
  437.         </body>
  438.     {% endblock body %}
  439. </html>