var/cache/dev_h1e95bf4edbf84e391800d1f2ccc72376/twig/ea/eab3eacfb29620a8f37d034f0dc67f35.php line 35

Open in your IDE?
  1. <?php
  2. use Twig\Environment;
  3. use function Shopware\Core\Framework\Adapter\Twig\sw_get_attribute;
  4. use function Shopware\Core\Framework\Adapter\Twig\sw_escape_filter;
  5. use Twig\Error\LoaderError;
  6. use Twig\Error\RuntimeError;
  7. use Twig\Extension\SandboxExtension;
  8. use Twig\Markup;
  9. use Twig\Sandbox\SecurityError;
  10. use Twig\Sandbox\SecurityNotAllowedTagError;
  11. use Twig\Sandbox\SecurityNotAllowedFilterError;
  12. use Twig\Sandbox\SecurityNotAllowedFunctionError;
  13. use Twig\Source;
  14. use Twig\Template;
  15. /* @WebProfiler/Profiler/base_js.html.twig */
  16. class __TwigTemplate_e2f327b0f173f3f7ebd17dc0f999b6fd extends Template
  17. {
  18.     private $source;
  19.     private $macros = [];
  20.     public function __construct(Environment $env)
  21.     {
  22.         parent::__construct($env);
  23.         $this->source $this->getSourceContext();
  24.         $this->parent false;
  25.         $this->blocks = [
  26.         ];
  27.     }
  28.     protected function doDisplay(array $context, array $blocks = [])
  29.     {
  30.         $macros $this->macros;
  31.         $__internal_5a27a8ba21ca79b61932376b2fa922d2 $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  32.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template""@WebProfiler/Profiler/base_js.html.twig"));
  33.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  34.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template""@WebProfiler/Profiler/base_js.html.twig"));
  35.         // line 3
  36.         echo "<script";
  37.         if ((array_key_exists("csp_script_nonce"$context) && ($context["csp_script_nonce"] ?? null))) {
  38.             echo " nonce=\"";
  39.             echo sw_escape_filter($this->env, ($context["csp_script_nonce"] ?? null), "html"nulltrue);
  40.             echo "\"";
  41.         }
  42.         echo ">/*<![CDATA[*/
  43.     ";
  44.         // line 7
  45.         echo "
  46. if (typeof Sfjs === 'undefined' || typeof Sfjs.loadToolbar === 'undefined') {
  47.     Sfjs = (function() {
  48.         \"use strict\";
  49.         if ('classList' in document.documentElement) {
  50.             var hasClass = function (el, cssClass) { return el.classList.contains(cssClass); };
  51.             var removeClass = function(el, cssClass) { el.classList.remove(cssClass); };
  52.             var addClass = function(el, cssClass) { el.classList.add(cssClass); };
  53.             var toggleClass = function(el, cssClass) { el.classList.toggle(cssClass); };
  54.         } else {
  55.             var hasClass = function (el, cssClass) { return el.className.match(new RegExp('\\\\b' + cssClass + '\\\\b')); };
  56.             var removeClass = function(el, cssClass) { el.className = el.className.replace(new RegExp('\\\\b' + cssClass + '\\\\b'), ' '); };
  57.             var addClass = function(el, cssClass) { if (!hasClass(el, cssClass)) { el.className += \" \" + cssClass; } };
  58.             var toggleClass = function(el, cssClass) { hasClass(el, cssClass) ? removeClass(el, cssClass) : addClass(el, cssClass); };
  59.         }
  60.         var noop = function() {};
  61.         var profilerStorageKey = 'symfony/profiler/';
  62.         var addEventListener;
  63.         var el = document.createElement('div');
  64.         if (!('addEventListener' in el)) {
  65.             addEventListener = function (element, eventName, callback) {
  66.                 element.attachEvent('on' + eventName, callback);
  67.             };
  68.         } else {
  69.             addEventListener = function (element, eventName, callback) {
  70.                 element.addEventListener(eventName, callback, false);
  71.             };
  72.         }
  73.         if (navigator.clipboard) {
  74.             document.addEventListener('readystatechange', () => {
  75.                 if (document.readyState !== 'complete') {
  76.                     return;
  77.                 }
  78.                 document.querySelectorAll('[data-clipboard-text]').forEach(function (element) {
  79.                     removeClass(element, 'hidden');
  80.                     element.addEventListener('click', function () {
  81.                         navigator.clipboard.writeText(element.getAttribute('data-clipboard-text'));
  82.                         if (element.classList.contains(\"label\")) {
  83.                             let oldContent = element.textContent;
  84.                             element.textContent = \"✅ Copied!\";
  85.                             element.classList.add(\"status-success\");
  86.                             setTimeout(() => {
  87.                                 element.textContent = oldContent;
  88.                                 element.classList.remove(\"status-success\");
  89.                             }, 7000);
  90.                         }
  91.                     });
  92.                 });
  93.             });
  94.         }
  95.         var request = function(url, onSuccess, onError, payload, options, tries) {
  96.             var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
  97.             options = options || {};
  98.             options.retry = options.retry || false;
  99.             tries = tries || 1;
  100.             /* this delays for 125, 375, 625, 875, and 1000, ... */
  101.             var delay = tries < 5 ? (tries - 0.5) * 250 : 1000;
  102.             xhr.open(options.method || 'GET', url, true);
  103.             xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
  104.             xhr.onreadystatechange = function(state) {
  105.                 if (4 !== xhr.readyState) {
  106.                     return null;
  107.                 }
  108.                 if (xhr.status == 404 && options.retry && !options.stop) {
  109.                     setTimeout(function() {
  110.                         if (options.stop) {
  111.                             return;
  112.                         }
  113.                         request(url, onSuccess, onError, payload, options, tries + 1);
  114.                     }, delay);
  115.                     return null;
  116.                 }
  117.                 if (200 === xhr.status) {
  118.                     (onSuccess || noop)(xhr);
  119.                 } else {
  120.                     (onError || noop)(xhr);
  121.                 }
  122.             };
  123.             if (options.onSend) {
  124.                 options.onSend(tries);
  125.             }
  126.             xhr.send(payload || '');
  127.         };
  128.         var getPreference = function(name) {
  129.             if (!window.localStorage) {
  130.                 return null;
  131.             }
  132.             return localStorage.getItem(profilerStorageKey + name);
  133.         };
  134.         var setPreference = function(name, value) {
  135.             if (!window.localStorage) {
  136.                 return null;
  137.             }
  138.             localStorage.setItem(profilerStorageKey + name, value);
  139.         };
  140.         var requestStack = [];
  141.         var extractHeaders = function(xhr, stackElement) {
  142.             /* Here we avoid to call xhr.getResponseHeader in order to */
  143.             /* prevent polluting the console with CORS security errors */
  144.             var allHeaders = xhr.getAllResponseHeaders();
  145.             var ret;
  146.             if (ret = allHeaders.match(/^x-debug-token:\\s+(.*)\$/im)) {
  147.                 stackElement.profile = ret[1];
  148.             }
  149.             if (ret = allHeaders.match(/^x-debug-token-link:\\s+(.*)\$/im)) {
  150.                 stackElement.profilerUrl = ret[1];
  151.             }
  152.             if (ret = allHeaders.match(/^Symfony-Debug-Toolbar-Replace:\\s+(.*)\$/im)) {
  153.                 stackElement.toolbarReplaceFinished = false;
  154.                 stackElement.toolbarReplace = '1' === ret[1];
  155.             }
  156.         };
  157.         var successStreak = 4;
  158.         var pendingRequests = 0;
  159.         var renderAjaxRequests = function() {
  160.             var requestCounter = document.querySelector('.sf-toolbar-ajax-request-counter');
  161.             if (!requestCounter) {
  162.                 return;
  163.             }
  164.             requestCounter.textContent = requestStack.length;
  165.             var infoSpan = document.querySelector(\".sf-toolbar-ajax-info\");
  166.             if (infoSpan) {
  167.                 infoSpan.textContent = requestStack.length + ' AJAX request' + (requestStack.length !== 1 ? 's' : '');
  168.             }
  169.             var ajaxToolbarPanel = document.querySelector('.sf-toolbar-block-ajax');
  170.             if (requestStack.length) {
  171.                 ajaxToolbarPanel.style.display = 'block';
  172.             } else {
  173.                 ajaxToolbarPanel.style.display = 'none';
  174.             }
  175.             if (pendingRequests > 0) {
  176.                 addClass(ajaxToolbarPanel, 'sf-ajax-request-loading');
  177.             } else if (successStreak < 4) {
  178.                 addClass(ajaxToolbarPanel, 'sf-toolbar-status-red');
  179.                 removeClass(ajaxToolbarPanel, 'sf-ajax-request-loading');
  180.             } else {
  181.                 removeClass(ajaxToolbarPanel, 'sf-ajax-request-loading');
  182.                 removeClass(ajaxToolbarPanel, 'sf-toolbar-status-red');
  183.             }
  184.         };
  185.         var startAjaxRequest = function(index) {
  186.             var tbody = document.querySelector('.sf-toolbar-ajax-request-list');
  187.             if (!tbody) {
  188.                 return;
  189.             }
  190.             var nbOfAjaxRequest = tbody.rows.length;
  191.             if (nbOfAjaxRequest >= 100) {
  192.                 tbody.deleteRow(0);
  193.             }
  194.             var request = requestStack[index];
  195.             pendingRequests++;
  196.             var row = document.createElement('tr');
  197.             request.DOMNode = row;
  198.             var requestNumberCell = document.createElement('td');
  199.             requestNumberCell.textContent = index + 1;
  200.             row.appendChild(requestNumberCell);
  201.             var profilerCell = document.createElement('td');
  202.             profilerCell.textContent = 'n/a';
  203.             row.appendChild(profilerCell);
  204.             var methodCell = document.createElement('td');
  205.             methodCell.textContent = request.method;
  206.             row.appendChild(methodCell);
  207.             var typeCell = document.createElement('td');
  208.             typeCell.textContent = request.type;
  209.             row.appendChild(typeCell);
  210.             var statusCodeCell = document.createElement('td');
  211.             var statusCode = document.createElement('span');
  212.             statusCode.textContent = 'n/a';
  213.             statusCodeCell.appendChild(statusCode);
  214.             row.appendChild(statusCodeCell);
  215.             var pathCell = document.createElement('td');
  216.             pathCell.className = 'sf-ajax-request-url';
  217.             if ('GET' === request.method) {
  218.                 var pathLink = document.createElement('a');
  219.                 pathLink.setAttribute('href', request.url);
  220.                 pathLink.textContent = request.url;
  221.                 pathCell.appendChild(pathLink);
  222.             } else {
  223.                 pathCell.textContent = request.url;
  224.             }
  225.             pathCell.setAttribute('title', request.url);
  226.             row.appendChild(pathCell);
  227.             var durationCell = document.createElement('td');
  228.             durationCell.className = 'sf-ajax-request-duration';
  229.             durationCell.textContent = 'n/a';
  230.             row.appendChild(durationCell);
  231.             request.liveDurationHandle = setInterval(function() {
  232.                 durationCell.textContent = (new Date() - request.start) + ' ms';
  233.             }, 100);
  234.             row.className = 'sf-ajax-request sf-ajax-request-loading';
  235.             tbody.insertBefore(row, null);
  236.             var toolbarInfo = document.querySelector('.sf-toolbar-block-ajax .sf-toolbar-info');
  237.             toolbarInfo.scrollTop = toolbarInfo.scrollHeight;
  238.             renderAjaxRequests();
  239.         };
  240.         var finishAjaxRequest = function(index) {
  241.             var request = requestStack[index];
  242.             clearInterval(request.liveDurationHandle);
  243.             if (!request.DOMNode) {
  244.                 return;
  245.             }
  246.             if (request.toolbarReplace && !request.toolbarReplaceFinished && request.profile) {
  247.                 /* Flag as complete because finishAjaxRequest can be called multiple times. */
  248.                 request.toolbarReplaceFinished = true;
  249.                 /* Search up through the DOM to find the toolbar's container ID. */
  250.                 for (var elem = request.DOMNode; elem && elem !== document; elem = elem.parentNode) {
  251.                     if (elem.id.match(/^sfwdt/)) {
  252.                         Sfjs.loadToolbar(elem.id.replace(/^sfwdt/, ''), request.profile);
  253.                         break;
  254.                     }
  255.                 }
  256.             }
  257.             pendingRequests--;
  258.             var row = request.DOMNode;
  259.             /* Unpack the children from the row */
  260.             var profilerCell = row.children[1];
  261.             var methodCell = row.children[2];
  262.             var statusCodeCell = row.children[4];
  263.             var statusCodeElem = statusCodeCell.children[0];
  264.             var durationCell = row.children[6];
  265.             if (request.error) {
  266.                 row.className = 'sf-ajax-request sf-ajax-request-error';
  267.                 methodCell.className = 'sf-ajax-request-error';
  268.                 successStreak = 0;
  269.             } else {
  270.                 row.className = 'sf-ajax-request sf-ajax-request-ok';
  271.                 successStreak++;
  272.             }
  273.             if (request.statusCode) {
  274.                 if (request.statusCode < 300) {
  275.                     statusCodeElem.setAttribute('class', 'sf-toolbar-status');
  276.                 } else if (request.statusCode < 400) {
  277.                     statusCodeElem.setAttribute('class', 'sf-toolbar-status sf-toolbar-status-yellow');
  278.                 } else {
  279.                     statusCodeElem.setAttribute('class', 'sf-toolbar-status sf-toolbar-status-red');
  280.                 }
  281.                 statusCodeElem.textContent = request.statusCode;
  282.             } else {
  283.                 statusCodeElem.setAttribute('class', 'sf-toolbar-status sf-toolbar-status-red');
  284.             }
  285.             if (request.duration) {
  286.                 durationCell.textContent = request.duration + ' ms';
  287.             }
  288.             if (request.profilerUrl) {
  289.                 profilerCell.textContent = '';
  290.                 var profilerLink = document.createElement('a');
  291.                 profilerLink.setAttribute('href', request.profilerUrl);
  292.                 profilerLink.textContent = request.profile;
  293.                 profilerCell.appendChild(profilerLink);
  294.             }
  295.             renderAjaxRequests();
  296.         };
  297.         ";
  298.         // line 310
  299.         if (array_key_exists("excluded_ajax_paths"$context)) {
  300.             // line 311
  301.             echo "            if (window.fetch && window.fetch.polyfill === undefined) {
  302.                 var oldFetch = window.fetch;
  303.                 window.fetch = function () {
  304.                     var promise = oldFetch.apply(this, arguments);
  305.                     var url = arguments[0];
  306.                     var params = arguments[1];
  307.                     var paramType = Object.prototype.toString.call(arguments[0]);
  308.                     if (paramType === '[object Request]') {
  309.                         url = arguments[0].url;
  310.                         params = {
  311.                             method: arguments[0].method,
  312.                             credentials: arguments[0].credentials,
  313.                             headers: arguments[0].headers,
  314.                             mode: arguments[0].mode,
  315.                             redirect: arguments[0].redirect
  316.                         };
  317.                     } else {
  318.                         url = String(url);
  319.                     }
  320.                     if (!url.match(new RegExp(";
  321.             // line 330
  322.             echo $this->env->getFilter('json_encode')->getCallable()(($context["excluded_ajax_paths"] ?? null));
  323.             echo "))) {
  324.                         var method = 'GET';
  325.                         if (params && params.method !== undefined) {
  326.                             method = params.method;
  327.                         }
  328.                         var stackElement = {
  329.                             error: false,
  330.                             url: url,
  331.                             method: method,
  332.                             type: 'fetch',
  333.                             start: new Date()
  334.                         };
  335.                         var idx = requestStack.push(stackElement) - 1;
  336.                         promise.then(function (r) {
  337.                             stackElement.duration = new Date() - stackElement.start;
  338.                             stackElement.error = r.status < 200 || r.status >= 400;
  339.                             stackElement.statusCode = r.status;
  340.                             stackElement.profile = r.headers.get('x-debug-token');
  341.                             stackElement.profilerUrl = r.headers.get('x-debug-token-link');
  342.                             stackElement.toolbarReplaceFinished = false;
  343.                             stackElement.toolbarReplace = '1' === r.headers.get('Symfony-Debug-Toolbar-Replace');
  344.                             finishAjaxRequest(idx);
  345.                         }, function (e){
  346.                             stackElement.error = true;
  347.                             finishAjaxRequest(idx);
  348.                         });
  349.                         startAjaxRequest(idx);
  350.                     }
  351.                     return promise;
  352.                 };
  353.             }
  354.             if (window.XMLHttpRequest && XMLHttpRequest.prototype.addEventListener) {
  355.                 var proxied = XMLHttpRequest.prototype.open;
  356.                 XMLHttpRequest.prototype.open = function(method, url, async, user, pass) {
  357.                     var self = this;
  358.                     /* prevent logging AJAX calls to static and inline files, like templates */
  359.                     var path = url;
  360.                     if (url.slice(0, 1) === '/') {
  361.                         if (0 === url.indexOf('";
  362.             // line 373
  363.             echo sw_escape_filter($this->envsw_escape_filter($this->envsw_get_attribute($this->env$this->source, ($context["request"] ?? null), "basePath", [], "any"falsefalsefalse373), "js"), "html"nulltrue);
  364.             echo "')) {
  365.                             path = url.slice(";
  366.             // line 374
  367.             echo sw_escape_filter($this->envtwig_length_filter($this->envsw_get_attribute($this->env$this->source, ($context["request"] ?? null), "basePath", [], "any"falsefalsefalse374)), "html"nulltrue);
  368.             echo ");
  369.                         }
  370.                     }
  371.                     else if (0 === url.indexOf('";
  372.             // line 377
  373.             echo sw_escape_filter($this->envsw_escape_filter($this->env, (sw_get_attribute($this->env$this->source, ($context["request"] ?? null), "schemeAndHttpHost", [], "any"falsefalsefalse377) . sw_get_attribute($this->env$this->source, ($context["request"] ?? null), "basePath", [], "any"falsefalsefalse377)), "js"), "html"nulltrue);
  374.             echo "')) {
  375.                         path = url.slice(";
  376.             // line 378
  377.             echo sw_escape_filter($this->envtwig_length_filter($this->env, (sw_get_attribute($this->env$this->source, ($context["request"] ?? null), "schemeAndHttpHost", [], "any"falsefalsefalse378) . sw_get_attribute($this->env$this->source, ($context["request"] ?? null), "basePath", [], "any"falsefalsefalse378))), "html"nulltrue);
  378.             echo ");
  379.                     }
  380.                     if (!path.match(new RegExp(";
  381.             // line 381
  382.             echo $this->env->getFilter('json_encode')->getCallable()(($context["excluded_ajax_paths"] ?? null));
  383.             echo "))) {
  384.                         var stackElement = {
  385.                             error: false,
  386.                             url: url,
  387.                             method: method,
  388.                             type: 'xhr',
  389.                             start: new Date()
  390.                         };
  391.                         var idx = requestStack.push(stackElement) - 1;
  392.                         this.addEventListener('readystatechange', function() {
  393.                             if (self.readyState == 4) {
  394.                                 stackElement.duration = new Date() - stackElement.start;
  395.                                 stackElement.error = self.status < 200 || self.status >= 400;
  396.                                 stackElement.statusCode = self.status;
  397.                                 extractHeaders(self, stackElement);
  398.                                 finishAjaxRequest(idx);
  399.                             }
  400.                         }, false);
  401.                         startAjaxRequest(idx);
  402.                     }
  403.                     proxied.apply(this, Array.prototype.slice.call(arguments));
  404.                 };
  405.             }
  406.         ";
  407.         }
  408.         // line 410
  409.         echo "
  410.         return {
  411.             hasClass: hasClass,
  412.             removeClass: removeClass,
  413.             addClass: addClass,
  414.             toggleClass: toggleClass,
  415.             getPreference: getPreference,
  416.             setPreference: setPreference,
  417.             addEventListener: addEventListener,
  418.             request: request,
  419.             renderAjaxRequests: renderAjaxRequests,
  420.             getSfwdt: function(token) {
  421.                 if (!this.sfwdt) {
  422.                     this.sfwdt = document.getElementById('sfwdt' + token);
  423.                 }
  424.                 return this.sfwdt;
  425.             },
  426.             load: function(selector, url, onSuccess, onError, options) {
  427.                 var el = document.getElementById(selector);
  428.                 if (el && el.getAttribute('data-sfurl') !== url) {
  429.                     request(
  430.                         url,
  431.                         function(xhr) {
  432.                             el.innerHTML = xhr.responseText;
  433.                             el.setAttribute('data-sfurl', url);
  434.                             removeClass(el, 'loading');
  435.                             var pending = pendingRequests;
  436.                             for (var i = 0; i < requestStack.length; i++) {
  437.                                 startAjaxRequest(i);
  438.                                 if (requestStack[i].duration) {
  439.                                     finishAjaxRequest(i);
  440.                                 }
  441.                             }
  442.                             /* Revert the pending state in case there was a start called without a finish above. */
  443.                             pendingRequests = pending;
  444.                             (onSuccess || noop)(xhr, el);
  445.                         },
  446.                         function(xhr) { (onError || noop)(xhr, el); },
  447.                         '',
  448.                         options
  449.                     );
  450.                 }
  451.                 return this;
  452.             },
  453.             showToolbar: function(token) {
  454.                 var sfwdt = this.getSfwdt(token);
  455.                 removeClass(sfwdt, 'sf-display-none');
  456.                 if (getPreference('toolbar/displayState') == 'none') {
  457.                     document.getElementById('sfToolbarMainContent-' + token).style.display = 'none';
  458.                     document.getElementById('sfToolbarClearer-' + token).style.display = 'none';
  459.                     document.getElementById('sfMiniToolbar-' + token).style.display = 'block';
  460.                 } else {
  461.                     document.getElementById('sfToolbarMainContent-' + token).style.display = 'block';
  462.                     document.getElementById('sfToolbarClearer-' + token).style.display = 'block';
  463.                     document.getElementById('sfMiniToolbar-' + token).style.display = 'none';
  464.                 }
  465.             },
  466.             hideToolbar: function(token) {
  467.                 var sfwdt = this.getSfwdt(token);
  468.                 addClass(sfwdt, 'sf-display-none');
  469.             },
  470.             initToolbar: function(token) {
  471.                 this.showToolbar(token);
  472.                 var hideButton = document.getElementById('sfToolbarHideButton-' + token);
  473.                 var hideButtonSvg = hideButton.querySelector('svg');
  474.                 hideButtonSvg.setAttribute('aria-hidden', 'true');
  475.                 hideButtonSvg.setAttribute('focusable', 'false');
  476.                 addEventListener(hideButton, 'click', function (event) {
  477.                     event.preventDefault();
  478.                     var p = this.parentNode;
  479.                     p.style.display = 'none';
  480.                     (p.previousElementSibling || p.previousSibling).style.display = 'none';
  481.                     document.getElementById('sfMiniToolbar-' + token).style.display = 'block';
  482.                     setPreference('toolbar/displayState', 'none');
  483.                 });
  484.                 var showButton = document.getElementById('sfToolbarMiniToggler-' + token);
  485.                 var showButtonSvg = showButton.querySelector('svg');
  486.                 showButtonSvg.setAttribute('aria-hidden', 'true');
  487.                 showButtonSvg.setAttribute('focusable', 'false');
  488.                 addEventListener(showButton, 'click', function (event) {
  489.                     event.preventDefault();
  490.                     var elem = this.parentNode;
  491.                     if (elem.style.display == 'none') {
  492.                         document.getElementById('sfToolbarMainContent-' + token).style.display = 'none';
  493.                         document.getElementById('sfToolbarClearer-' + token).style.display = 'none';
  494.                         elem.style.display = 'block';
  495.                     } else {
  496.                         document.getElementById('sfToolbarMainContent-' + token).style.display = 'block';
  497.                         document.getElementById('sfToolbarClearer-' + token).style.display = 'block';
  498.                         elem.style.display = 'none'
  499.                     }
  500.                     setPreference('toolbar/displayState', 'block');
  501.                 });
  502.             },
  503.             loadToolbar: function(token, newToken) {
  504.                 var that = this;
  505.                 var triesCounter = document.getElementById('sfLoadCounter-' + token);
  506.                 var options = {
  507.                     retry: true,
  508.                     onSend: function (count) {
  509.                         if (count === 3) {
  510.                             that.initToolbar(token);
  511.                         }
  512.                         if (triesCounter) {
  513.                             triesCounter.textContent = count;
  514.                         }
  515.                     },
  516.                 };
  517.                 var cancelButton = document.getElementById('sfLoadCancel-' + token);
  518.                 if (cancelButton) {
  519.                     addEventListener(cancelButton, 'click', function (event) {
  520.                         event.preventDefault();
  521.                         options.stop = true;
  522.                         that.hideToolbar(token);
  523.                     });
  524.                 }
  525.                 newToken = (newToken || token);
  526.                 this.load(
  527.                     'sfwdt' + token,
  528.                     '";
  529.         // line 558
  530.         echo sw_escape_filter($this->envsw_escape_filter($this->env$this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getUrl("_wdt", ["token" => "xxxxxx"]), "js"), "html"nulltrue);
  531.         echo "'.replace(/xxxxxx/, newToken),
  532.                     function(xhr, el) {
  533.                         /* Do nothing in the edge case where the toolbar has already been replaced with a new one */
  534.                         if (!document.getElementById('sfToolbarMainContent-' + newToken)) {
  535.                             return;
  536.                         }
  537.                         /* Evaluate in global scope scripts embedded inside the toolbar */
  538.                         var i, scripts = [].slice.call(el.querySelectorAll('script'));
  539.                         for (i = 0; i < scripts.length; ++i) {
  540.                             eval.call({}, scripts[i].firstChild.nodeValue);
  541.                         }
  542.                         el.style.display = -1 !== xhr.responseText.indexOf('sf-toolbarreset') ? 'block' : 'none';
  543.                         if (el.style.display == 'none') {
  544.                             return;
  545.                         }
  546.                         that.initToolbar(newToken);
  547.                         /* Handle toolbar-info position */
  548.                         var toolbarBlocks = [].slice.call(el.querySelectorAll('.sf-toolbar-block'));
  549.                         for (i = 0; i < toolbarBlocks.length; ++i) {
  550.                             toolbarBlocks[i].onmouseover = function () {
  551.                                 var toolbarInfo = this.querySelectorAll('.sf-toolbar-info')[0];
  552.                                 var pageWidth = document.body.clientWidth;
  553.                                 var elementWidth = toolbarInfo.offsetWidth;
  554.                                 var leftValue = (elementWidth + this.offsetLeft) - pageWidth;
  555.                                 var rightValue = (elementWidth + (pageWidth - this.offsetLeft)) - pageWidth;
  556.                                 /* Reset right and left value, useful on window resize */
  557.                                 toolbarInfo.style.right = '';
  558.                                 toolbarInfo.style.left = '';
  559.                                 if (elementWidth > pageWidth) {
  560.                                     toolbarInfo.style.left = 0;
  561.                                 }
  562.                                 else if (leftValue > 0 && rightValue > 0) {
  563.                                     toolbarInfo.style.right = (rightValue * -1) + 'px';
  564.                                 } else if (leftValue < 0) {
  565.                                     toolbarInfo.style.left = 0;
  566.                                 } else {
  567.                                     toolbarInfo.style.right = '0px';
  568.                                 }
  569.                             };
  570.                         }
  571.                         renderAjaxRequests();
  572.                         addEventListener(document.querySelector('.sf-toolbar-ajax-clear'), 'click', function() {
  573.                             requestStack = [];
  574.                             renderAjaxRequests();
  575.                             successStreak = 4;
  576.                             document.querySelector('.sf-toolbar-ajax-request-list').innerHTML = '';
  577.                         });
  578.                         addEventListener(document.querySelector('.sf-toolbar-block-ajax'), 'mouseenter', function (event) {
  579.                             var elem = document.querySelector('.sf-toolbar-block-ajax .sf-toolbar-info');
  580.                             elem.scrollTop = elem.scrollHeight;
  581.                         });
  582.                         addEventListener(document.querySelector('.sf-toolbar-block-ajax > .sf-toolbar-icon'), 'click', function (event) {
  583.                             event.preventDefault();
  584.                             toggleClass(this.parentNode, 'hover');
  585.                         });
  586.                         var dumpInfo = document.querySelector('.sf-toolbar-block-dump .sf-toolbar-info');
  587.                         if (null !== dumpInfo) {
  588.                             addEventListener(dumpInfo, 'sfbeforedumpcollapse', function () {
  589.                                 dumpInfo.style.minHeight = dumpInfo.getBoundingClientRect().height+'px';
  590.                             });
  591.                             addEventListener(dumpInfo, 'mouseleave', function () {
  592.                                 dumpInfo.style.minHeight = '';
  593.                             });
  594.                         }
  595.                     },
  596.                     function(xhr) {
  597.                         if (xhr.status !== 0 && !options.stop) {
  598.                             var sfwdt = that.getSfwdt(token);
  599.                             sfwdt.innerHTML = '\\
  600.                                 <div class=\"sf-toolbarreset\">\\
  601.                                     <div class=\"sf-toolbar-icon\"><svg width=\"26\" height=\"28\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" x=\"0px\" y=\"0px\" viewBox=\"0 0 26 28\" enable-background=\"new 0 0 26 28\" xml:space=\"preserve\"><path fill=\"#FFFFFF\" d=\"M13 0C5.8 0 0 5.8 0 13c0 7.2 5.8 13 13 13c7.2 0 13-5.8 13-13C26 5.8 20.2 0 13 0z M20 7.5 c-0.6 0-1-0.3-1-0.9c0-0.2 0-0.4 0.2-0.6c0.1-0.3 0.2-0.3 0.2-0.4c0-0.3-0.5-0.4-0.7-0.4c-2 0.1-2.5 2.7-2.9 4.8l-0.2 1.1 c1.1 0.2 1.9 0 2.4-0.3c0.6-0.4-0.2-0.8-0.1-1.3C18 9.2 18.4 9 18.7 8.9c0.5 0 0.8 0.5 0.8 1c0 0.8-1.1 2-3.3 1.9 c-0.3 0-0.5 0-0.7-0.1L15 14.1c-0.4 1.7-0.9 4.1-2.6 6.2c-1.5 1.8-3.1 2.1-3.8 2.1c-1.3 0-2.1-0.6-2.2-1.6c0-0.9 0.8-1.4 1.3-1.4 c0.7 0 1.2 0.5 1.2 1.1c0 0.5-0.2 0.6-0.4 0.7c-0.1 0.1-0.3 0.2-0.3 0.4c0 0.1 0.1 0.3 0.4 0.3c0.5 0 0.9-0.3 1.2-0.5 c1.3-1 1.7-2.9 2.4-6.2l0.1-0.8c0.2-1.1 0.5-2.3 0.8-3.5c-0.9-0.7-1.4-1.5-2.6-1.8c-0.8-0.2-1.3 0-1.7 0.4C8.4 10 8.6 10.7 9 11.1 l0.7 0.7c0.8 0.9 1.3 1.7 1.1 2.7c-0.3 1.6-2.1 2.8-4.3 2.1c-1.9-0.6-2.2-1.9-2-2.7c0.2-0.6 0.7-0.8 1.2-0.6 c0.5 0.2 0.7 0.8 0.6 1.3c0 0.1 0 0.1-0.1 0.3C6 15 5.9 15.2 5.9 15.3c-0.1 0.4 0.4 0.7 0.8 0.8c0.8 0.3 1.7-0.2 1.9-0.9 c0.2-0.6-0.2-1.1-0.4-1.2l-0.8-0.9c-0.4-0.4-1.2-1.5-0.8-2.8c0.2-0.5 0.5-1 0.9-1.4c1-0.7 2-0.8 3-0.6c1.3 0.4 1.9 1.2 2.8 1.9 c0.5-1.3 1.1-2.6 2-3.8c0.9-1 2-1.7 3.3-1.8C20 4.8 21 5.4 21 6.3C21 6.7 20.8 7.5 20 7.5z\"/></svg></div>\\
  602.                                     An error occurred while loading the web debug toolbar. <a href=\"";
  603.         // line 639
  604.         echo sw_escape_filter($this->envsw_escape_filter($this->env$this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getUrl("_profiler_home"), "js"), "html"nulltrue);
  605.         echo "' + newToken + '>Open the web profiler.</a>\\
  606.                                 </div>\\
  607.                             ';
  608.                             sfwdt.setAttribute('class', 'sf-toolbar sf-error-toolbar');
  609.                         }
  610.                     },
  611.                     options
  612.                 );
  613.                 return this;
  614.             },
  615.             toggle: function(selector, elOn, elOff) {
  616.                 var tmp = elOn.style.display,
  617.                     el = document.getElementById(selector);
  618.                 elOn.style.display = elOff.style.display;
  619.                 elOff.style.display = tmp;
  620.                 if (el) {
  621.                     el.style.display = 'none' === tmp ? 'none' : 'block';
  622.                 }
  623.                 return this;
  624.             },
  625.             createTabs: function() {
  626.                 var tabGroups = document.querySelectorAll('.sf-tabs:not([data-processed=true])');
  627.                 /* create the tab navigation for each group of tabs */
  628.                 for (var i = 0; i < tabGroups.length; i++) {
  629.                     var tabs = tabGroups[i].querySelectorAll(':scope > .tab');
  630.                     var tabNavigation = document.createElement('ul');
  631.                     tabNavigation.className = 'tab-navigation';
  632.                     var selectedTabId = 'tab-' + i + '-0'; /* select the first tab by default */
  633.                     for (var j = 0; j < tabs.length; j++) {
  634.                         var tabId = 'tab-' + i + '-' + j;
  635.                         var tabTitle = tabs[j].querySelector('.tab-title').innerHTML;
  636.                         var tabNavigationItem = document.createElement('li');
  637.                         tabNavigationItem.setAttribute('data-tab-id', tabId);
  638.                         if (hasClass(tabs[j], 'active')) { selectedTabId = tabId; }
  639.                         if (hasClass(tabs[j], 'disabled')) { addClass(tabNavigationItem, 'disabled'); }
  640.                         tabNavigationItem.innerHTML = tabTitle;
  641.                         tabNavigation.appendChild(tabNavigationItem);
  642.                         var tabContent = tabs[j].querySelector('.tab-content');
  643.                         tabContent.parentElement.setAttribute('id', tabId);
  644.                     }
  645.                     tabGroups[i].insertBefore(tabNavigation, tabGroups[i].firstChild);
  646.                     addClass(document.querySelector('[data-tab-id=\"' + selectedTabId + '\"]'), 'active');
  647.                 }
  648.                 /* display the active tab and add the 'click' event listeners */
  649.                 for (i = 0; i < tabGroups.length; i++) {
  650.                     tabNavigation = tabGroups[i].querySelectorAll(':scope > .tab-navigation li');
  651.                     for (j = 0; j < tabNavigation.length; j++) {
  652.                         tabId = tabNavigation[j].getAttribute('data-tab-id');
  653.                         document.getElementById(tabId).querySelector('.tab-title').className = 'hidden';
  654.                         if (hasClass(tabNavigation[j], 'active')) {
  655.                             document.getElementById(tabId).className = 'block';
  656.                         } else {
  657.                             document.getElementById(tabId).className = 'hidden';
  658.                         }
  659.                         tabNavigation[j].addEventListener('click', function(e) {
  660.                             var activeTab = e.target || e.srcElement;
  661.                             /* needed because when the tab contains HTML contents, user can click */
  662.                             /* on any of those elements instead of their parent '<li>' element */
  663.                             while (activeTab.tagName.toLowerCase() !== 'li') {
  664.                                 activeTab = activeTab.parentNode;
  665.                             }
  666.                             /* get the full list of tabs through the parent of the active tab element */
  667.                             var tabNavigation = activeTab.parentNode.children;
  668.                             for (var k = 0; k < tabNavigation.length; k++) {
  669.                                 var tabId = tabNavigation[k].getAttribute('data-tab-id');
  670.                                 document.getElementById(tabId).className = 'hidden';
  671.                                 removeClass(tabNavigation[k], 'active');
  672.                             }
  673.                             addClass(activeTab, 'active');
  674.                             var activeTabId = activeTab.getAttribute('data-tab-id');
  675.                             document.getElementById(activeTabId).className = 'block';
  676.                         });
  677.                     }
  678.                     tabGroups[i].setAttribute('data-processed', 'true');
  679.                 }
  680.             },
  681.             createToggles: function() {
  682.                 var toggles = document.querySelectorAll('.sf-toggle:not([data-processed=true])');
  683.                 for (var i = 0; i < toggles.length; i++) {
  684.                     var elementSelector = toggles[i].getAttribute('data-toggle-selector');
  685.                     var element = document.querySelector(elementSelector);
  686.                     addClass(element, 'sf-toggle-content');
  687.                     if (toggles[i].hasAttribute('data-toggle-initial') && toggles[i].getAttribute('data-toggle-initial') == 'display') {
  688.                         addClass(toggles[i], 'sf-toggle-on');
  689.                         addClass(element, 'sf-toggle-visible');
  690.                     } else {
  691.                         addClass(toggles[i], 'sf-toggle-off');
  692.                         addClass(element, 'sf-toggle-hidden');
  693.                     }
  694.                     addEventListener(toggles[i], 'click', function(e) {
  695.                         e.preventDefault();
  696.                         if ('' !== window.getSelection().toString()) {
  697.                             /* Don't do anything on text selection */
  698.                             return;
  699.                         }
  700.                         var toggle = e.target || e.srcElement;
  701.                         /* needed because when the toggle contains HTML contents, user can click */
  702.                         /* on any of those elements instead of their parent '.sf-toggle' element */
  703.                         while (!hasClass(toggle, 'sf-toggle')) {
  704.                             toggle = toggle.parentNode;
  705.                         }
  706.                         var element = document.querySelector(toggle.getAttribute('data-toggle-selector'));
  707.                         toggleClass(toggle, 'sf-toggle-on');
  708.                         toggleClass(toggle, 'sf-toggle-off');
  709.                         toggleClass(element, 'sf-toggle-hidden');
  710.                         toggleClass(element, 'sf-toggle-visible');
  711.                         /* the toggle doesn't change its contents when clicking on it */
  712.                         if (!toggle.hasAttribute('data-toggle-alt-content')) {
  713.                             return;
  714.                         }
  715.                         if (!toggle.hasAttribute('data-toggle-original-content')) {
  716.                             toggle.setAttribute('data-toggle-original-content', toggle.innerHTML);
  717.                         }
  718.                         var currentContent = toggle.innerHTML;
  719.                         var originalContent = toggle.getAttribute('data-toggle-original-content');
  720.                         var altContent = toggle.getAttribute('data-toggle-alt-content');
  721.                         toggle.innerHTML = currentContent !== altContent ? altContent : originalContent;
  722.                     });
  723.                     /* Prevents from disallowing clicks on links inside toggles */
  724.                     var toggleLinks = toggles[i].querySelectorAll('a');
  725.                     for (var j = 0; j < toggleLinks.length; j++) {
  726.                         addEventListener(toggleLinks[j], 'click', function(e) {
  727.                             e.stopPropagation();
  728.                         });
  729.                     }
  730.                     /* Prevents from disallowing clicks on \"copy to clipboard\" elements inside toggles */
  731.                     var copyToClipboardElements = toggles[i].querySelectorAll('span[data-clipboard-text]');
  732.                     for (var k = 0; k < copyToClipboardElements.length; k++) {
  733.                         addEventListener(copyToClipboardElements[k], 'click', function(e) {
  734.                             e.stopPropagation();
  735.                         });
  736.                     }
  737.                     toggles[i].setAttribute('data-processed', 'true');
  738.                 }
  739.             },
  740.             initializeLogsTable: function() {
  741.                 Sfjs.updateLogsTable();
  742.                 document.querySelectorAll('.log-filter input').forEach((input) => {
  743.                     input.addEventListener('change', () => { Sfjs.updateLogsTable(); });
  744.                 });
  745.                 document.querySelectorAll('.filter-select-all-or-none button').forEach((link) => {
  746.                     link.addEventListener('click', () => {
  747.                         const selectAll = link.classList.contains('select-all');
  748.                         link.closest('.log-filter-content').querySelectorAll('input').forEach((input) => {
  749.                             input.checked = selectAll;
  750.                         });
  751.                         Sfjs.updateLogsTable();
  752.                     });
  753.                 });
  754.                 document.body.addEventListener('click', (event) => {
  755.                     document.querySelectorAll('details.log-filter').forEach((filterElement) => {
  756.                         if (!filterElement.contains(event.target) && filterElement.open) {
  757.                             filterElement.open = false;
  758.                         }
  759.                     });
  760.                 });
  761.             },
  762.             updateLogsTable: function() {
  763.                 const selectedType = document.querySelector('#log-filter-type input:checked').value;
  764.                 const priorities = document.querySelectorAll('#log-filter-priority input');
  765.                 const allPriorities = Array.from(priorities).map((input) => input.value);
  766.                 const selectedPriorities = Array.from(priorities).filter((input) => input.checked).map((input) => input.value);
  767.                 const channels = document.querySelectorAll('#log-filter-channel input');
  768.                 const selectedChannels = Array.from(channels).filter((input) => input.checked).map((input) => input.value);
  769.                 const logs = document.querySelector('table.logs');
  770.                 if (null === logs) {
  771.                     return;
  772.                 }
  773.                 /* hide rows that don't match the current filters */
  774.                 let numVisibleRows = 0;
  775.                 logs.querySelectorAll('tbody tr').forEach((row) => {
  776.                     if ('all' !== selectedType && selectedType !== row.getAttribute('data-type')) {
  777.                         row.style.display = 'none';
  778.                         return;
  779.                     }
  780.                     const priority = row.getAttribute('data-priority');
  781.                     if (false === selectedPriorities.includes(priority) && true === allPriorities.includes(priority)) {
  782.                         row.style.display = 'none';
  783.                         return;
  784.                     }
  785.                     if ('' !== row.getAttribute('data-channel') && false === selectedChannels.includes(row.getAttribute('data-channel'))) {
  786.                         row.style.display = 'none';
  787.                         return;
  788.                     }
  789.                     row.style.display = 'table-row';
  790.                     numVisibleRows++;
  791.                 });
  792.                 document.querySelector('table.logs').style.display = 0 === numVisibleRows ? 'none' : 'table';
  793.                 document.querySelector('.no-logs-message').style.display = 0 === numVisibleRows ? 'block' : 'none';
  794.                 /* update the selected totals of all filters */
  795.                 document.querySelector('#log-filter-priority .filter-active-num').innerText = (priorities.length === selectedPriorities.length) ? 'All' : selectedPriorities.length;
  796.                 document.querySelector('#log-filter-channel .filter-active-num').innerText = (channels.length === selectedChannels.length) ? 'All' : selectedChannels.length;
  797.                 /* update the currently selected \"log type\" tab */
  798.                 document.querySelectorAll('#log-filter-type li').forEach((tab) => tab.classList.remove('active'));
  799.                 document.querySelector(`#log-filter-type input[value=\"\${selectedType}\"]`).parentElement.classList.add('active');
  800.             },
  801.         };
  802.     })();
  803.     Sfjs.addEventListener(document, 'DOMContentLoaded', function() {
  804.         Sfjs.createTabs();
  805.         Sfjs.createToggles();
  806.     });
  807. }
  808. /*]]>*/</script>
  809. ";
  810.         
  811.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  812.         
  813.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  814.     }
  815.     public function getTemplateName()
  816.     {
  817.         return "@WebProfiler/Profiler/base_js.html.twig";
  818.     }
  819.     public function isTraitable()
  820.     {
  821.         return false;
  822.     }
  823.     public function getDebugInfo()
  824.     {
  825.         return array (  712 => 639,  628 => 558,  478 => 410,  446 => 381,  440 => 378,  436 => 377,  430 => 374,  426 => 373,  380 => 330,  359 => 311,  357 => 310,  52 => 7,  43 => 3,);
  826.     }
  827.     public function getSourceContext()
  828.     {
  829.         return new Source("{# This file is partially duplicated in src/Symfony/Component/ErrorHandler/Resources/assets/js/exception.js.
  830.    If you make any change in this file, verify the same change is needed in the other file. #}
  831. <script{% if csp_script_nonce is defined and csp_script_nonce %} nonce=\"{{ csp_script_nonce }}\"{% endif %}>/*<![CDATA[*/
  832.     {# Caution: the contents of this file are processed by Twig before loading
  833.                 them as JavaScript source code. Always use '/*' comments instead
  834.                 of '//' comments to avoid impossible-to-debug side-effects #}
  835. if (typeof Sfjs === 'undefined' || typeof Sfjs.loadToolbar === 'undefined') {
  836.     Sfjs = (function() {
  837.         \"use strict\";
  838.         if ('classList' in document.documentElement) {
  839.             var hasClass = function (el, cssClass) { return el.classList.contains(cssClass); };
  840.             var removeClass = function(el, cssClass) { el.classList.remove(cssClass); };
  841.             var addClass = function(el, cssClass) { el.classList.add(cssClass); };
  842.             var toggleClass = function(el, cssClass) { el.classList.toggle(cssClass); };
  843.         } else {
  844.             var hasClass = function (el, cssClass) { return el.className.match(new RegExp('\\\\b' + cssClass + '\\\\b')); };
  845.             var removeClass = function(el, cssClass) { el.className = el.className.replace(new RegExp('\\\\b' + cssClass + '\\\\b'), ' '); };
  846.             var addClass = function(el, cssClass) { if (!hasClass(el, cssClass)) { el.className += \" \" + cssClass; } };
  847.             var toggleClass = function(el, cssClass) { hasClass(el, cssClass) ? removeClass(el, cssClass) : addClass(el, cssClass); };
  848.         }
  849.         var noop = function() {};
  850.         var profilerStorageKey = 'symfony/profiler/';
  851.         var addEventListener;
  852.         var el = document.createElement('div');
  853.         if (!('addEventListener' in el)) {
  854.             addEventListener = function (element, eventName, callback) {
  855.                 element.attachEvent('on' + eventName, callback);
  856.             };
  857.         } else {
  858.             addEventListener = function (element, eventName, callback) {
  859.                 element.addEventListener(eventName, callback, false);
  860.             };
  861.         }
  862.         if (navigator.clipboard) {
  863.             document.addEventListener('readystatechange', () => {
  864.                 if (document.readyState !== 'complete') {
  865.                     return;
  866.                 }
  867.                 document.querySelectorAll('[data-clipboard-text]').forEach(function (element) {
  868.                     removeClass(element, 'hidden');
  869.                     element.addEventListener('click', function () {
  870.                         navigator.clipboard.writeText(element.getAttribute('data-clipboard-text'));
  871.                         if (element.classList.contains(\"label\")) {
  872.                             let oldContent = element.textContent;
  873.                             element.textContent = \"✅ Copied!\";
  874.                             element.classList.add(\"status-success\");
  875.                             setTimeout(() => {
  876.                                 element.textContent = oldContent;
  877.                                 element.classList.remove(\"status-success\");
  878.                             }, 7000);
  879.                         }
  880.                     });
  881.                 });
  882.             });
  883.         }
  884.         var request = function(url, onSuccess, onError, payload, options, tries) {
  885.             var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
  886.             options = options || {};
  887.             options.retry = options.retry || false;
  888.             tries = tries || 1;
  889.             /* this delays for 125, 375, 625, 875, and 1000, ... */
  890.             var delay = tries < 5 ? (tries - 0.5) * 250 : 1000;
  891.             xhr.open(options.method || 'GET', url, true);
  892.             xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
  893.             xhr.onreadystatechange = function(state) {
  894.                 if (4 !== xhr.readyState) {
  895.                     return null;
  896.                 }
  897.                 if (xhr.status == 404 && options.retry && !options.stop) {
  898.                     setTimeout(function() {
  899.                         if (options.stop) {
  900.                             return;
  901.                         }
  902.                         request(url, onSuccess, onError, payload, options, tries + 1);
  903.                     }, delay);
  904.                     return null;
  905.                 }
  906.                 if (200 === xhr.status) {
  907.                     (onSuccess || noop)(xhr);
  908.                 } else {
  909.                     (onError || noop)(xhr);
  910.                 }
  911.             };
  912.             if (options.onSend) {
  913.                 options.onSend(tries);
  914.             }
  915.             xhr.send(payload || '');
  916.         };
  917.         var getPreference = function(name) {
  918.             if (!window.localStorage) {
  919.                 return null;
  920.             }
  921.             return localStorage.getItem(profilerStorageKey + name);
  922.         };
  923.         var setPreference = function(name, value) {
  924.             if (!window.localStorage) {
  925.                 return null;
  926.             }
  927.             localStorage.setItem(profilerStorageKey + name, value);
  928.         };
  929.         var requestStack = [];
  930.         var extractHeaders = function(xhr, stackElement) {
  931.             /* Here we avoid to call xhr.getResponseHeader in order to */
  932.             /* prevent polluting the console with CORS security errors */
  933.             var allHeaders = xhr.getAllResponseHeaders();
  934.             var ret;
  935.             if (ret = allHeaders.match(/^x-debug-token:\\s+(.*)\$/im)) {
  936.                 stackElement.profile = ret[1];
  937.             }
  938.             if (ret = allHeaders.match(/^x-debug-token-link:\\s+(.*)\$/im)) {
  939.                 stackElement.profilerUrl = ret[1];
  940.             }
  941.             if (ret = allHeaders.match(/^Symfony-Debug-Toolbar-Replace:\\s+(.*)\$/im)) {
  942.                 stackElement.toolbarReplaceFinished = false;
  943.                 stackElement.toolbarReplace = '1' === ret[1];
  944.             }
  945.         };
  946.         var successStreak = 4;
  947.         var pendingRequests = 0;
  948.         var renderAjaxRequests = function() {
  949.             var requestCounter = document.querySelector('.sf-toolbar-ajax-request-counter');
  950.             if (!requestCounter) {
  951.                 return;
  952.             }
  953.             requestCounter.textContent = requestStack.length;
  954.             var infoSpan = document.querySelector(\".sf-toolbar-ajax-info\");
  955.             if (infoSpan) {
  956.                 infoSpan.textContent = requestStack.length + ' AJAX request' + (requestStack.length !== 1 ? 's' : '');
  957.             }
  958.             var ajaxToolbarPanel = document.querySelector('.sf-toolbar-block-ajax');
  959.             if (requestStack.length) {
  960.                 ajaxToolbarPanel.style.display = 'block';
  961.             } else {
  962.                 ajaxToolbarPanel.style.display = 'none';
  963.             }
  964.             if (pendingRequests > 0) {
  965.                 addClass(ajaxToolbarPanel, 'sf-ajax-request-loading');
  966.             } else if (successStreak < 4) {
  967.                 addClass(ajaxToolbarPanel, 'sf-toolbar-status-red');
  968.                 removeClass(ajaxToolbarPanel, 'sf-ajax-request-loading');
  969.             } else {
  970.                 removeClass(ajaxToolbarPanel, 'sf-ajax-request-loading');
  971.                 removeClass(ajaxToolbarPanel, 'sf-toolbar-status-red');
  972.             }
  973.         };
  974.         var startAjaxRequest = function(index) {
  975.             var tbody = document.querySelector('.sf-toolbar-ajax-request-list');
  976.             if (!tbody) {
  977.                 return;
  978.             }
  979.             var nbOfAjaxRequest = tbody.rows.length;
  980.             if (nbOfAjaxRequest >= 100) {
  981.                 tbody.deleteRow(0);
  982.             }
  983.             var request = requestStack[index];
  984.             pendingRequests++;
  985.             var row = document.createElement('tr');
  986.             request.DOMNode = row;
  987.             var requestNumberCell = document.createElement('td');
  988.             requestNumberCell.textContent = index + 1;
  989.             row.appendChild(requestNumberCell);
  990.             var profilerCell = document.createElement('td');
  991.             profilerCell.textContent = 'n/a';
  992.             row.appendChild(profilerCell);
  993.             var methodCell = document.createElement('td');
  994.             methodCell.textContent = request.method;
  995.             row.appendChild(methodCell);
  996.             var typeCell = document.createElement('td');
  997.             typeCell.textContent = request.type;
  998.             row.appendChild(typeCell);
  999.             var statusCodeCell = document.createElement('td');
  1000.             var statusCode = document.createElement('span');
  1001.             statusCode.textContent = 'n/a';
  1002.             statusCodeCell.appendChild(statusCode);
  1003.             row.appendChild(statusCodeCell);
  1004.             var pathCell = document.createElement('td');
  1005.             pathCell.className = 'sf-ajax-request-url';
  1006.             if ('GET' === request.method) {
  1007.                 var pathLink = document.createElement('a');
  1008.                 pathLink.setAttribute('href', request.url);
  1009.                 pathLink.textContent = request.url;
  1010.                 pathCell.appendChild(pathLink);
  1011.             } else {
  1012.                 pathCell.textContent = request.url;
  1013.             }
  1014.             pathCell.setAttribute('title', request.url);
  1015.             row.appendChild(pathCell);
  1016.             var durationCell = document.createElement('td');
  1017.             durationCell.className = 'sf-ajax-request-duration';
  1018.             durationCell.textContent = 'n/a';
  1019.             row.appendChild(durationCell);
  1020.             request.liveDurationHandle = setInterval(function() {
  1021.                 durationCell.textContent = (new Date() - request.start) + ' ms';
  1022.             }, 100);
  1023.             row.className = 'sf-ajax-request sf-ajax-request-loading';
  1024.             tbody.insertBefore(row, null);
  1025.             var toolbarInfo = document.querySelector('.sf-toolbar-block-ajax .sf-toolbar-info');
  1026.             toolbarInfo.scrollTop = toolbarInfo.scrollHeight;
  1027.             renderAjaxRequests();
  1028.         };
  1029.         var finishAjaxRequest = function(index) {
  1030.             var request = requestStack[index];
  1031.             clearInterval(request.liveDurationHandle);
  1032.             if (!request.DOMNode) {
  1033.                 return;
  1034.             }
  1035.             if (request.toolbarReplace && !request.toolbarReplaceFinished && request.profile) {
  1036.                 /* Flag as complete because finishAjaxRequest can be called multiple times. */
  1037.                 request.toolbarReplaceFinished = true;
  1038.                 /* Search up through the DOM to find the toolbar's container ID. */
  1039.                 for (var elem = request.DOMNode; elem && elem !== document; elem = elem.parentNode) {
  1040.                     if (elem.id.match(/^sfwdt/)) {
  1041.                         Sfjs.loadToolbar(elem.id.replace(/^sfwdt/, ''), request.profile);
  1042.                         break;
  1043.                     }
  1044.                 }
  1045.             }
  1046.             pendingRequests--;
  1047.             var row = request.DOMNode;
  1048.             /* Unpack the children from the row */
  1049.             var profilerCell = row.children[1];
  1050.             var methodCell = row.children[2];
  1051.             var statusCodeCell = row.children[4];
  1052.             var statusCodeElem = statusCodeCell.children[0];
  1053.             var durationCell = row.children[6];
  1054.             if (request.error) {
  1055.                 row.className = 'sf-ajax-request sf-ajax-request-error';
  1056.                 methodCell.className = 'sf-ajax-request-error';
  1057.                 successStreak = 0;
  1058.             } else {
  1059.                 row.className = 'sf-ajax-request sf-ajax-request-ok';
  1060.                 successStreak++;
  1061.             }
  1062.             if (request.statusCode) {
  1063.                 if (request.statusCode < 300) {
  1064.                     statusCodeElem.setAttribute('class', 'sf-toolbar-status');
  1065.                 } else if (request.statusCode < 400) {
  1066.                     statusCodeElem.setAttribute('class', 'sf-toolbar-status sf-toolbar-status-yellow');
  1067.                 } else {
  1068.                     statusCodeElem.setAttribute('class', 'sf-toolbar-status sf-toolbar-status-red');
  1069.                 }
  1070.                 statusCodeElem.textContent = request.statusCode;
  1071.             } else {
  1072.                 statusCodeElem.setAttribute('class', 'sf-toolbar-status sf-toolbar-status-red');
  1073.             }
  1074.             if (request.duration) {
  1075.                 durationCell.textContent = request.duration + ' ms';
  1076.             }
  1077.             if (request.profilerUrl) {
  1078.                 profilerCell.textContent = '';
  1079.                 var profilerLink = document.createElement('a');
  1080.                 profilerLink.setAttribute('href', request.profilerUrl);
  1081.                 profilerLink.textContent = request.profile;
  1082.                 profilerCell.appendChild(profilerLink);
  1083.             }
  1084.             renderAjaxRequests();
  1085.         };
  1086.         {% if excluded_ajax_paths is defined %}
  1087.             if (window.fetch && window.fetch.polyfill === undefined) {
  1088.                 var oldFetch = window.fetch;
  1089.                 window.fetch = function () {
  1090.                     var promise = oldFetch.apply(this, arguments);
  1091.                     var url = arguments[0];
  1092.                     var params = arguments[1];
  1093.                     var paramType = Object.prototype.toString.call(arguments[0]);
  1094.                     if (paramType === '[object Request]') {
  1095.                         url = arguments[0].url;
  1096.                         params = {
  1097.                             method: arguments[0].method,
  1098.                             credentials: arguments[0].credentials,
  1099.                             headers: arguments[0].headers,
  1100.                             mode: arguments[0].mode,
  1101.                             redirect: arguments[0].redirect
  1102.                         };
  1103.                     } else {
  1104.                         url = String(url);
  1105.                     }
  1106.                     if (!url.match(new RegExp({{ excluded_ajax_paths|json_encode|raw }}))) {
  1107.                         var method = 'GET';
  1108.                         if (params && params.method !== undefined) {
  1109.                             method = params.method;
  1110.                         }
  1111.                         var stackElement = {
  1112.                             error: false,
  1113.                             url: url,
  1114.                             method: method,
  1115.                             type: 'fetch',
  1116.                             start: new Date()
  1117.                         };
  1118.                         var idx = requestStack.push(stackElement) - 1;
  1119.                         promise.then(function (r) {
  1120.                             stackElement.duration = new Date() - stackElement.start;
  1121.                             stackElement.error = r.status < 200 || r.status >= 400;
  1122.                             stackElement.statusCode = r.status;
  1123.                             stackElement.profile = r.headers.get('x-debug-token');
  1124.                             stackElement.profilerUrl = r.headers.get('x-debug-token-link');
  1125.                             stackElement.toolbarReplaceFinished = false;
  1126.                             stackElement.toolbarReplace = '1' === r.headers.get('Symfony-Debug-Toolbar-Replace');
  1127.                             finishAjaxRequest(idx);
  1128.                         }, function (e){
  1129.                             stackElement.error = true;
  1130.                             finishAjaxRequest(idx);
  1131.                         });
  1132.                         startAjaxRequest(idx);
  1133.                     }
  1134.                     return promise;
  1135.                 };
  1136.             }
  1137.             if (window.XMLHttpRequest && XMLHttpRequest.prototype.addEventListener) {
  1138.                 var proxied = XMLHttpRequest.prototype.open;
  1139.                 XMLHttpRequest.prototype.open = function(method, url, async, user, pass) {
  1140.                     var self = this;
  1141.                     /* prevent logging AJAX calls to static and inline files, like templates */
  1142.                     var path = url;
  1143.                     if (url.slice(0, 1) === '/') {
  1144.                         if (0 === url.indexOf('{{ request.basePath|e('js') }}')) {
  1145.                             path = url.slice({{ request.basePath|length }});
  1146.                         }
  1147.                     }
  1148.                     else if (0 === url.indexOf('{{ (request.schemeAndHttpHost ~ request.basePath)|e('js') }}')) {
  1149.                         path = url.slice({{ (request.schemeAndHttpHost ~ request.basePath)|length }});
  1150.                     }
  1151.                     if (!path.match(new RegExp({{ excluded_ajax_paths|json_encode|raw }}))) {
  1152.                         var stackElement = {
  1153.                             error: false,
  1154.                             url: url,
  1155.                             method: method,
  1156.                             type: 'xhr',
  1157.                             start: new Date()
  1158.                         };
  1159.                         var idx = requestStack.push(stackElement) - 1;
  1160.                         this.addEventListener('readystatechange', function() {
  1161.                             if (self.readyState == 4) {
  1162.                                 stackElement.duration = new Date() - stackElement.start;
  1163.                                 stackElement.error = self.status < 200 || self.status >= 400;
  1164.                                 stackElement.statusCode = self.status;
  1165.                                 extractHeaders(self, stackElement);
  1166.                                 finishAjaxRequest(idx);
  1167.                             }
  1168.                         }, false);
  1169.                         startAjaxRequest(idx);
  1170.                     }
  1171.                     proxied.apply(this, Array.prototype.slice.call(arguments));
  1172.                 };
  1173.             }
  1174.         {% endif %}
  1175.         return {
  1176.             hasClass: hasClass,
  1177.             removeClass: removeClass,
  1178.             addClass: addClass,
  1179.             toggleClass: toggleClass,
  1180.             getPreference: getPreference,
  1181.             setPreference: setPreference,
  1182.             addEventListener: addEventListener,
  1183.             request: request,
  1184.             renderAjaxRequests: renderAjaxRequests,
  1185.             getSfwdt: function(token) {
  1186.                 if (!this.sfwdt) {
  1187.                     this.sfwdt = document.getElementById('sfwdt' + token);
  1188.                 }
  1189.                 return this.sfwdt;
  1190.             },
  1191.             load: function(selector, url, onSuccess, onError, options) {
  1192.                 var el = document.getElementById(selector);
  1193.                 if (el && el.getAttribute('data-sfurl') !== url) {
  1194.                     request(
  1195.                         url,
  1196.                         function(xhr) {
  1197.                             el.innerHTML = xhr.responseText;
  1198.                             el.setAttribute('data-sfurl', url);
  1199.                             removeClass(el, 'loading');
  1200.                             var pending = pendingRequests;
  1201.                             for (var i = 0; i < requestStack.length; i++) {
  1202.                                 startAjaxRequest(i);
  1203.                                 if (requestStack[i].duration) {
  1204.                                     finishAjaxRequest(i);
  1205.                                 }
  1206.                             }
  1207.                             /* Revert the pending state in case there was a start called without a finish above. */
  1208.                             pendingRequests = pending;
  1209.                             (onSuccess || noop)(xhr, el);
  1210.                         },
  1211.                         function(xhr) { (onError || noop)(xhr, el); },
  1212.                         '',
  1213.                         options
  1214.                     );
  1215.                 }
  1216.                 return this;
  1217.             },
  1218.             showToolbar: function(token) {
  1219.                 var sfwdt = this.getSfwdt(token);
  1220.                 removeClass(sfwdt, 'sf-display-none');
  1221.                 if (getPreference('toolbar/displayState') == 'none') {
  1222.                     document.getElementById('sfToolbarMainContent-' + token).style.display = 'none';
  1223.                     document.getElementById('sfToolbarClearer-' + token).style.display = 'none';
  1224.                     document.getElementById('sfMiniToolbar-' + token).style.display = 'block';
  1225.                 } else {
  1226.                     document.getElementById('sfToolbarMainContent-' + token).style.display = 'block';
  1227.                     document.getElementById('sfToolbarClearer-' + token).style.display = 'block';
  1228.                     document.getElementById('sfMiniToolbar-' + token).style.display = 'none';
  1229.                 }
  1230.             },
  1231.             hideToolbar: function(token) {
  1232.                 var sfwdt = this.getSfwdt(token);
  1233.                 addClass(sfwdt, 'sf-display-none');
  1234.             },
  1235.             initToolbar: function(token) {
  1236.                 this.showToolbar(token);
  1237.                 var hideButton = document.getElementById('sfToolbarHideButton-' + token);
  1238.                 var hideButtonSvg = hideButton.querySelector('svg');
  1239.                 hideButtonSvg.setAttribute('aria-hidden', 'true');
  1240.                 hideButtonSvg.setAttribute('focusable', 'false');
  1241.                 addEventListener(hideButton, 'click', function (event) {
  1242.                     event.preventDefault();
  1243.                     var p = this.parentNode;
  1244.                     p.style.display = 'none';
  1245.                     (p.previousElementSibling || p.previousSibling).style.display = 'none';
  1246.                     document.getElementById('sfMiniToolbar-' + token).style.display = 'block';
  1247.                     setPreference('toolbar/displayState', 'none');
  1248.                 });
  1249.                 var showButton = document.getElementById('sfToolbarMiniToggler-' + token);
  1250.                 var showButtonSvg = showButton.querySelector('svg');
  1251.                 showButtonSvg.setAttribute('aria-hidden', 'true');
  1252.                 showButtonSvg.setAttribute('focusable', 'false');
  1253.                 addEventListener(showButton, 'click', function (event) {
  1254.                     event.preventDefault();
  1255.                     var elem = this.parentNode;
  1256.                     if (elem.style.display == 'none') {
  1257.                         document.getElementById('sfToolbarMainContent-' + token).style.display = 'none';
  1258.                         document.getElementById('sfToolbarClearer-' + token).style.display = 'none';
  1259.                         elem.style.display = 'block';
  1260.                     } else {
  1261.                         document.getElementById('sfToolbarMainContent-' + token).style.display = 'block';
  1262.                         document.getElementById('sfToolbarClearer-' + token).style.display = 'block';
  1263.                         elem.style.display = 'none'
  1264.                     }
  1265.                     setPreference('toolbar/displayState', 'block');
  1266.                 });
  1267.             },
  1268.             loadToolbar: function(token, newToken) {
  1269.                 var that = this;
  1270.                 var triesCounter = document.getElementById('sfLoadCounter-' + token);
  1271.                 var options = {
  1272.                     retry: true,
  1273.                     onSend: function (count) {
  1274.                         if (count === 3) {
  1275.                             that.initToolbar(token);
  1276.                         }
  1277.                         if (triesCounter) {
  1278.                             triesCounter.textContent = count;
  1279.                         }
  1280.                     },
  1281.                 };
  1282.                 var cancelButton = document.getElementById('sfLoadCancel-' + token);
  1283.                 if (cancelButton) {
  1284.                     addEventListener(cancelButton, 'click', function (event) {
  1285.                         event.preventDefault();
  1286.                         options.stop = true;
  1287.                         that.hideToolbar(token);
  1288.                     });
  1289.                 }
  1290.                 newToken = (newToken || token);
  1291.                 this.load(
  1292.                     'sfwdt' + token,
  1293.                     '{{ url(\"_wdt\", { \"token\": \"xxxxxx\" })|escape('js') }}'.replace(/xxxxxx/, newToken),
  1294.                     function(xhr, el) {
  1295.                         /* Do nothing in the edge case where the toolbar has already been replaced with a new one */
  1296.                         if (!document.getElementById('sfToolbarMainContent-' + newToken)) {
  1297.                             return;
  1298.                         }
  1299.                         /* Evaluate in global scope scripts embedded inside the toolbar */
  1300.                         var i, scripts = [].slice.call(el.querySelectorAll('script'));
  1301.                         for (i = 0; i < scripts.length; ++i) {
  1302.                             eval.call({}, scripts[i].firstChild.nodeValue);
  1303.                         }
  1304.                         el.style.display = -1 !== xhr.responseText.indexOf('sf-toolbarreset') ? 'block' : 'none';
  1305.                         if (el.style.display == 'none') {
  1306.                             return;
  1307.                         }
  1308.                         that.initToolbar(newToken);
  1309.                         /* Handle toolbar-info position */
  1310.                         var toolbarBlocks = [].slice.call(el.querySelectorAll('.sf-toolbar-block'));
  1311.                         for (i = 0; i < toolbarBlocks.length; ++i) {
  1312.                             toolbarBlocks[i].onmouseover = function () {
  1313.                                 var toolbarInfo = this.querySelectorAll('.sf-toolbar-info')[0];
  1314.                                 var pageWidth = document.body.clientWidth;
  1315.                                 var elementWidth = toolbarInfo.offsetWidth;
  1316.                                 var leftValue = (elementWidth + this.offsetLeft) - pageWidth;
  1317.                                 var rightValue = (elementWidth + (pageWidth - this.offsetLeft)) - pageWidth;
  1318.                                 /* Reset right and left value, useful on window resize */
  1319.                                 toolbarInfo.style.right = '';
  1320.                                 toolbarInfo.style.left = '';
  1321.                                 if (elementWidth > pageWidth) {
  1322.                                     toolbarInfo.style.left = 0;
  1323.                                 }
  1324.                                 else if (leftValue > 0 && rightValue > 0) {
  1325.                                     toolbarInfo.style.right = (rightValue * -1) + 'px';
  1326.                                 } else if (leftValue < 0) {
  1327.                                     toolbarInfo.style.left = 0;
  1328.                                 } else {
  1329.                                     toolbarInfo.style.right = '0px';
  1330.                                 }
  1331.                             };
  1332.                         }
  1333.                         renderAjaxRequests();
  1334.                         addEventListener(document.querySelector('.sf-toolbar-ajax-clear'), 'click', function() {
  1335.                             requestStack = [];
  1336.                             renderAjaxRequests();
  1337.                             successStreak = 4;
  1338.                             document.querySelector('.sf-toolbar-ajax-request-list').innerHTML = '';
  1339.                         });
  1340.                         addEventListener(document.querySelector('.sf-toolbar-block-ajax'), 'mouseenter', function (event) {
  1341.                             var elem = document.querySelector('.sf-toolbar-block-ajax .sf-toolbar-info');
  1342.                             elem.scrollTop = elem.scrollHeight;
  1343.                         });
  1344.                         addEventListener(document.querySelector('.sf-toolbar-block-ajax > .sf-toolbar-icon'), 'click', function (event) {
  1345.                             event.preventDefault();
  1346.                             toggleClass(this.parentNode, 'hover');
  1347.                         });
  1348.                         var dumpInfo = document.querySelector('.sf-toolbar-block-dump .sf-toolbar-info');
  1349.                         if (null !== dumpInfo) {
  1350.                             addEventListener(dumpInfo, 'sfbeforedumpcollapse', function () {
  1351.                                 dumpInfo.style.minHeight = dumpInfo.getBoundingClientRect().height+'px';
  1352.                             });
  1353.                             addEventListener(dumpInfo, 'mouseleave', function () {
  1354.                                 dumpInfo.style.minHeight = '';
  1355.                             });
  1356.                         }
  1357.                     },
  1358.                     function(xhr) {
  1359.                         if (xhr.status !== 0 && !options.stop) {
  1360.                             var sfwdt = that.getSfwdt(token);
  1361.                             sfwdt.innerHTML = '\\
  1362.                                 <div class=\"sf-toolbarreset\">\\
  1363.                                     <div class=\"sf-toolbar-icon\"><svg width=\"26\" height=\"28\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" x=\"0px\" y=\"0px\" viewBox=\"0 0 26 28\" enable-background=\"new 0 0 26 28\" xml:space=\"preserve\"><path fill=\"#FFFFFF\" d=\"M13 0C5.8 0 0 5.8 0 13c0 7.2 5.8 13 13 13c7.2 0 13-5.8 13-13C26 5.8 20.2 0 13 0z M20 7.5 c-0.6 0-1-0.3-1-0.9c0-0.2 0-0.4 0.2-0.6c0.1-0.3 0.2-0.3 0.2-0.4c0-0.3-0.5-0.4-0.7-0.4c-2 0.1-2.5 2.7-2.9 4.8l-0.2 1.1 c1.1 0.2 1.9 0 2.4-0.3c0.6-0.4-0.2-0.8-0.1-1.3C18 9.2 18.4 9 18.7 8.9c0.5 0 0.8 0.5 0.8 1c0 0.8-1.1 2-3.3 1.9 c-0.3 0-0.5 0-0.7-0.1L15 14.1c-0.4 1.7-0.9 4.1-2.6 6.2c-1.5 1.8-3.1 2.1-3.8 2.1c-1.3 0-2.1-0.6-2.2-1.6c0-0.9 0.8-1.4 1.3-1.4 c0.7 0 1.2 0.5 1.2 1.1c0 0.5-0.2 0.6-0.4 0.7c-0.1 0.1-0.3 0.2-0.3 0.4c0 0.1 0.1 0.3 0.4 0.3c0.5 0 0.9-0.3 1.2-0.5 c1.3-1 1.7-2.9 2.4-6.2l0.1-0.8c0.2-1.1 0.5-2.3 0.8-3.5c-0.9-0.7-1.4-1.5-2.6-1.8c-0.8-0.2-1.3 0-1.7 0.4C8.4 10 8.6 10.7 9 11.1 l0.7 0.7c0.8 0.9 1.3 1.7 1.1 2.7c-0.3 1.6-2.1 2.8-4.3 2.1c-1.9-0.6-2.2-1.9-2-2.7c0.2-0.6 0.7-0.8 1.2-0.6 c0.5 0.2 0.7 0.8 0.6 1.3c0 0.1 0 0.1-0.1 0.3C6 15 5.9 15.2 5.9 15.3c-0.1 0.4 0.4 0.7 0.8 0.8c0.8 0.3 1.7-0.2 1.9-0.9 c0.2-0.6-0.2-1.1-0.4-1.2l-0.8-0.9c-0.4-0.4-1.2-1.5-0.8-2.8c0.2-0.5 0.5-1 0.9-1.4c1-0.7 2-0.8 3-0.6c1.3 0.4 1.9 1.2 2.8 1.9 c0.5-1.3 1.1-2.6 2-3.8c0.9-1 2-1.7 3.3-1.8C20 4.8 21 5.4 21 6.3C21 6.7 20.8 7.5 20 7.5z\"/></svg></div>\\
  1364.                                     An error occurred while loading the web debug toolbar. <a href=\"{{ url(\"_profiler_home\")|escape('js') }}' + newToken + '>Open the web profiler.</a>\\
  1365.                                 </div>\\
  1366.                             ';
  1367.                             sfwdt.setAttribute('class', 'sf-toolbar sf-error-toolbar');
  1368.                         }
  1369.                     },
  1370.                     options
  1371.                 );
  1372.                 return this;
  1373.             },
  1374.             toggle: function(selector, elOn, elOff) {
  1375.                 var tmp = elOn.style.display,
  1376.                     el = document.getElementById(selector);
  1377.                 elOn.style.display = elOff.style.display;
  1378.                 elOff.style.display = tmp;
  1379.                 if (el) {
  1380.                     el.style.display = 'none' === tmp ? 'none' : 'block';
  1381.                 }
  1382.                 return this;
  1383.             },
  1384.             createTabs: function() {
  1385.                 var tabGroups = document.querySelectorAll('.sf-tabs:not([data-processed=true])');
  1386.                 /* create the tab navigation for each group of tabs */
  1387.                 for (var i = 0; i < tabGroups.length; i++) {
  1388.                     var tabs = tabGroups[i].querySelectorAll(':scope > .tab');
  1389.                     var tabNavigation = document.createElement('ul');
  1390.                     tabNavigation.className = 'tab-navigation';
  1391.                     var selectedTabId = 'tab-' + i + '-0'; /* select the first tab by default */
  1392.                     for (var j = 0; j < tabs.length; j++) {
  1393.                         var tabId = 'tab-' + i + '-' + j;
  1394.                         var tabTitle = tabs[j].querySelector('.tab-title').innerHTML;
  1395.                         var tabNavigationItem = document.createElement('li');
  1396.                         tabNavigationItem.setAttribute('data-tab-id', tabId);
  1397.                         if (hasClass(tabs[j], 'active')) { selectedTabId = tabId; }
  1398.                         if (hasClass(tabs[j], 'disabled')) { addClass(tabNavigationItem, 'disabled'); }
  1399.                         tabNavigationItem.innerHTML = tabTitle;
  1400.                         tabNavigation.appendChild(tabNavigationItem);
  1401.                         var tabContent = tabs[j].querySelector('.tab-content');
  1402.                         tabContent.parentElement.setAttribute('id', tabId);
  1403.                     }
  1404.                     tabGroups[i].insertBefore(tabNavigation, tabGroups[i].firstChild);
  1405.                     addClass(document.querySelector('[data-tab-id=\"' + selectedTabId + '\"]'), 'active');
  1406.                 }
  1407.                 /* display the active tab and add the 'click' event listeners */
  1408.                 for (i = 0; i < tabGroups.length; i++) {
  1409.                     tabNavigation = tabGroups[i].querySelectorAll(':scope > .tab-navigation li');
  1410.                     for (j = 0; j < tabNavigation.length; j++) {
  1411.                         tabId = tabNavigation[j].getAttribute('data-tab-id');
  1412.                         document.getElementById(tabId).querySelector('.tab-title').className = 'hidden';
  1413.                         if (hasClass(tabNavigation[j], 'active')) {
  1414.                             document.getElementById(tabId).className = 'block';
  1415.                         } else {
  1416.                             document.getElementById(tabId).className = 'hidden';
  1417.                         }
  1418.                         tabNavigation[j].addEventListener('click', function(e) {
  1419.                             var activeTab = e.target || e.srcElement;
  1420.                             /* needed because when the tab contains HTML contents, user can click */
  1421.                             /* on any of those elements instead of their parent '<li>' element */
  1422.                             while (activeTab.tagName.toLowerCase() !== 'li') {
  1423.                                 activeTab = activeTab.parentNode;
  1424.                             }
  1425.                             /* get the full list of tabs through the parent of the active tab element */
  1426.                             var tabNavigation = activeTab.parentNode.children;
  1427.                             for (var k = 0; k < tabNavigation.length; k++) {
  1428.                                 var tabId = tabNavigation[k].getAttribute('data-tab-id');
  1429.                                 document.getElementById(tabId).className = 'hidden';
  1430.                                 removeClass(tabNavigation[k], 'active');
  1431.                             }
  1432.                             addClass(activeTab, 'active');
  1433.                             var activeTabId = activeTab.getAttribute('data-tab-id');
  1434.                             document.getElementById(activeTabId).className = 'block';
  1435.                         });
  1436.                     }
  1437.                     tabGroups[i].setAttribute('data-processed', 'true');
  1438.                 }
  1439.             },
  1440.             createToggles: function() {
  1441.                 var toggles = document.querySelectorAll('.sf-toggle:not([data-processed=true])');
  1442.                 for (var i = 0; i < toggles.length; i++) {
  1443.                     var elementSelector = toggles[i].getAttribute('data-toggle-selector');
  1444.                     var element = document.querySelector(elementSelector);
  1445.                     addClass(element, 'sf-toggle-content');
  1446.                     if (toggles[i].hasAttribute('data-toggle-initial') && toggles[i].getAttribute('data-toggle-initial') == 'display') {
  1447.                         addClass(toggles[i], 'sf-toggle-on');
  1448.                         addClass(element, 'sf-toggle-visible');
  1449.                     } else {
  1450.                         addClass(toggles[i], 'sf-toggle-off');
  1451.                         addClass(element, 'sf-toggle-hidden');
  1452.                     }
  1453.                     addEventListener(toggles[i], 'click', function(e) {
  1454.                         e.preventDefault();
  1455.                         if ('' !== window.getSelection().toString()) {
  1456.                             /* Don't do anything on text selection */
  1457.                             return;
  1458.                         }
  1459.                         var toggle = e.target || e.srcElement;
  1460.                         /* needed because when the toggle contains HTML contents, user can click */
  1461.                         /* on any of those elements instead of their parent '.sf-toggle' element */
  1462.                         while (!hasClass(toggle, 'sf-toggle')) {
  1463.                             toggle = toggle.parentNode;
  1464.                         }
  1465.                         var element = document.querySelector(toggle.getAttribute('data-toggle-selector'));
  1466.                         toggleClass(toggle, 'sf-toggle-on');
  1467.                         toggleClass(toggle, 'sf-toggle-off');
  1468.                         toggleClass(element, 'sf-toggle-hidden');
  1469.                         toggleClass(element, 'sf-toggle-visible');
  1470.                         /* the toggle doesn't change its contents when clicking on it */
  1471.                         if (!toggle.hasAttribute('data-toggle-alt-content')) {
  1472.                             return;
  1473.                         }
  1474.                         if (!toggle.hasAttribute('data-toggle-original-content')) {
  1475.                             toggle.setAttribute('data-toggle-original-content', toggle.innerHTML);
  1476.                         }
  1477.                         var currentContent = toggle.innerHTML;
  1478.                         var originalContent = toggle.getAttribute('data-toggle-original-content');
  1479.                         var altContent = toggle.getAttribute('data-toggle-alt-content');
  1480.                         toggle.innerHTML = currentContent !== altContent ? altContent : originalContent;
  1481.                     });
  1482.                     /* Prevents from disallowing clicks on links inside toggles */
  1483.                     var toggleLinks = toggles[i].querySelectorAll('a');
  1484.                     for (var j = 0; j < toggleLinks.length; j++) {
  1485.                         addEventListener(toggleLinks[j], 'click', function(e) {
  1486.                             e.stopPropagation();
  1487.                         });
  1488.                     }
  1489.                     /* Prevents from disallowing clicks on \"copy to clipboard\" elements inside toggles */
  1490.                     var copyToClipboardElements = toggles[i].querySelectorAll('span[data-clipboard-text]');
  1491.                     for (var k = 0; k < copyToClipboardElements.length; k++) {
  1492.                         addEventListener(copyToClipboardElements[k], 'click', function(e) {
  1493.                             e.stopPropagation();
  1494.                         });
  1495.                     }
  1496.                     toggles[i].setAttribute('data-processed', 'true');
  1497.                 }
  1498.             },
  1499.             initializeLogsTable: function() {
  1500.                 Sfjs.updateLogsTable();
  1501.                 document.querySelectorAll('.log-filter input').forEach((input) => {
  1502.                     input.addEventListener('change', () => { Sfjs.updateLogsTable(); });
  1503.                 });
  1504.                 document.querySelectorAll('.filter-select-all-or-none button').forEach((link) => {
  1505.                     link.addEventListener('click', () => {
  1506.                         const selectAll = link.classList.contains('select-all');
  1507.                         link.closest('.log-filter-content').querySelectorAll('input').forEach((input) => {
  1508.                             input.checked = selectAll;
  1509.                         });
  1510.                         Sfjs.updateLogsTable();
  1511.                     });
  1512.                 });
  1513.                 document.body.addEventListener('click', (event) => {
  1514.                     document.querySelectorAll('details.log-filter').forEach((filterElement) => {
  1515.                         if (!filterElement.contains(event.target) && filterElement.open) {
  1516.                             filterElement.open = false;
  1517.                         }
  1518.                     });
  1519.                 });
  1520.             },
  1521.             updateLogsTable: function() {
  1522.                 const selectedType = document.querySelector('#log-filter-type input:checked').value;
  1523.                 const priorities = document.querySelectorAll('#log-filter-priority input');
  1524.                 const allPriorities = Array.from(priorities).map((input) => input.value);
  1525.                 const selectedPriorities = Array.from(priorities).filter((input) => input.checked).map((input) => input.value);
  1526.                 const channels = document.querySelectorAll('#log-filter-channel input');
  1527.                 const selectedChannels = Array.from(channels).filter((input) => input.checked).map((input) => input.value);
  1528.                 const logs = document.querySelector('table.logs');
  1529.                 if (null === logs) {
  1530.                     return;
  1531.                 }
  1532.                 /* hide rows that don't match the current filters */
  1533.                 let numVisibleRows = 0;
  1534.                 logs.querySelectorAll('tbody tr').forEach((row) => {
  1535.                     if ('all' !== selectedType && selectedType !== row.getAttribute('data-type')) {
  1536.                         row.style.display = 'none';
  1537.                         return;
  1538.                     }
  1539.                     const priority = row.getAttribute('data-priority');
  1540.                     if (false === selectedPriorities.includes(priority) && true === allPriorities.includes(priority)) {
  1541.                         row.style.display = 'none';
  1542.                         return;
  1543.                     }
  1544.                     if ('' !== row.getAttribute('data-channel') && false === selectedChannels.includes(row.getAttribute('data-channel'))) {
  1545.                         row.style.display = 'none';
  1546.                         return;
  1547.                     }
  1548.                     row.style.display = 'table-row';
  1549.                     numVisibleRows++;
  1550.                 });
  1551.                 document.querySelector('table.logs').style.display = 0 === numVisibleRows ? 'none' : 'table';
  1552.                 document.querySelector('.no-logs-message').style.display = 0 === numVisibleRows ? 'block' : 'none';
  1553.                 /* update the selected totals of all filters */
  1554.                 document.querySelector('#log-filter-priority .filter-active-num').innerText = (priorities.length === selectedPriorities.length) ? 'All' : selectedPriorities.length;
  1555.                 document.querySelector('#log-filter-channel .filter-active-num').innerText = (channels.length === selectedChannels.length) ? 'All' : selectedChannels.length;
  1556.                 /* update the currently selected \"log type\" tab */
  1557.                 document.querySelectorAll('#log-filter-type li').forEach((tab) => tab.classList.remove('active'));
  1558.                 document.querySelector(`#log-filter-type input[value=\"\${selectedType}\"]`).parentElement.classList.add('active');
  1559.             },
  1560.         };
  1561.     })();
  1562.     Sfjs.addEventListener(document, 'DOMContentLoaded', function() {
  1563.         Sfjs.createTabs();
  1564.         Sfjs.createToggles();
  1565.     });
  1566. }
  1567. /*]]>*/</script>
  1568. ""@WebProfiler/Profiler/base_js.html.twig""/var/www/html/vendor/symfony/web-profiler-bundle/Resources/views/Profiler/base_js.html.twig");
  1569.     }
  1570. }